monday-ui-react-core
Version:
Official monday.com UI resources for application development in React.js
397 lines (384 loc) • 12.1 kB
JavaScript
import React, { useCallback, useState } from "react";
import Button from "../Button";
import StoryStateColumn from "../../storybook-helpers/story-state-column/story-state-column";
import StoryStateRow from "../../storybook-helpers/story-states-row/story-states-row";
import DescriptionLabel from "../../storybook-helpers/description-label/description-label";
import { withPerformance } from "storybook-addon-performance";
import { TRANSPARENT_COLOR } from "../helper/dom-helpers";
export const DefaultStory = () => (
<Button marginLeft marginRight>
Button
</Button>
);
export const PrimaryButton = () => (
<section>
<StoryStateRow>
<StoryStateColumn
title="Small"
description="Small actions
Post, perly , copy, readmore."
>
<Button size={Button.sizes.SMALL}>Small</Button>
</StoryStateColumn>
<StoryStateColumn title="Medium" description="Regular actions">
<Button size={Button.sizes.MEDIUM}>Medium</Button>
</StoryStateColumn>
<StoryStateColumn
title="Large"
description="Call for action
Marketing banners
Important updates."
>
<Button size={Button.sizes.LARGE}>Large</Button>
</StoryStateColumn>
</StoryStateRow>
<DescriptionLabel>Disabled</DescriptionLabel>
<StoryStateRow>
<StoryStateColumn>
<Button disabled size={Button.sizes.SMALL}>
Small
</Button>
</StoryStateColumn>
<StoryStateColumn>
<Button disabled size={Button.sizes.MEDIUM}>
Medium
</Button>
</StoryStateColumn>
<StoryStateColumn>
<Button disabled size={Button.sizes.LARGE}>
Large
</Button>
</StoryStateColumn>
</StoryStateRow>
</section>
);
export const SecondaryButton = () => (
<section>
<StoryStateRow>
<StoryStateColumn title="Small">
<Button size={Button.sizes.SMALL} kind={Button.kinds.SECONDARY}>
Small
</Button>
</StoryStateColumn>
<StoryStateColumn title="Medium">
<Button size={Button.sizes.MEDIUM} kind={Button.kinds.SECONDARY}>
Medium
</Button>
</StoryStateColumn>
<StoryStateColumn title="Large">
<Button size={Button.sizes.LARGE} kind={Button.kinds.SECONDARY}>
Large
</Button>
</StoryStateColumn>
</StoryStateRow>
<DescriptionLabel>Disabled</DescriptionLabel>
<StoryStateRow>
<StoryStateColumn>
<Button disabled size={Button.sizes.SMALL} kind={Button.kinds.SECONDARY}>
Small
</Button>
</StoryStateColumn>
<StoryStateColumn>
<Button disabled size={Button.sizes.MEDIUM} kind={Button.kinds.SECONDARY}>
Medium
</Button>
</StoryStateColumn>
<StoryStateColumn>
<Button disabled size={Button.sizes.LARGE} kind={Button.kinds.SECONDARY}>
Large
</Button>
</StoryStateColumn>
</StoryStateRow>
</section>
);
export const TertiaryButton = () => (
<section>
<StoryStateRow>
<StoryStateColumn title="Small">
<Button size={Button.sizes.SMALL} kind={Button.kinds.TERTIARY}>
Small
</Button>
</StoryStateColumn>
<StoryStateColumn title="Medium">
<Button size={Button.sizes.MEDIUM} kind={Button.kinds.TERTIARY}>
Medium
</Button>
</StoryStateColumn>
<StoryStateColumn title="Large">
<Button size={Button.sizes.LARGE} kind={Button.kinds.TERTIARY}>
Large
</Button>
</StoryStateColumn>
</StoryStateRow>
<DescriptionLabel>Disabled</DescriptionLabel>
<StoryStateRow>
<StoryStateColumn>
<Button size={Button.sizes.SMALL} kind={Button.kinds.TERTIARY} disabled>
Small
</Button>
</StoryStateColumn>
<StoryStateColumn>
<Button size={Button.sizes.MEDIUM} kind={Button.kinds.TERTIARY} disabled>
Medium
</Button>
</StoryStateColumn>
<StoryStateColumn>
<Button size={Button.sizes.LARGE} kind={Button.kinds.TERTIARY} disabled>
Large
</Button>
</StoryStateColumn>
</StoryStateRow>
</section>
);
export const ActiveState = () => (
<StoryStateRow>
<StoryStateColumn title="Active Primary">
<Button active size={Button.sizes.LARGE} kind={Button.kinds.PRIMARY}>
Active Primary
</Button>
</StoryStateColumn>
<StoryStateColumn title="Active Secondary">
<Button active size={Button.sizes.LARGE} kind={Button.kinds.SECONDARY}>
Active Secondary
</Button>
</StoryStateColumn>
<StoryStateColumn title="Active Tertiary">
<Button active size={Button.sizes.LARGE} kind={Button.kinds.TERTIARY}>
Active Tertiary
</Button>
</StoryStateColumn>
</StoryStateRow>
);
export const PositiveButtons = () => (
<StoryStateRow>
<StoryStateColumn title="Primary">
<Button size={Button.sizes.LARGE} kind={Button.kinds.PRIMARY} color={Button.colors.POSITIVE}>
Positive Primary
</Button>
</StoryStateColumn>
<StoryStateColumn title="Secondary">
<Button size={Button.sizes.LARGE} kind={Button.kinds.SECONDARY} color={Button.colors.POSITIVE}>
Positive Secondary
</Button>
</StoryStateColumn>
<StoryStateColumn title="Tertiary">
<Button size={Button.sizes.LARGE} kind={Button.kinds.TERTIARY} color={Button.colors.POSITIVE}>
Positive Tertiary
</Button>
</StoryStateColumn>
</StoryStateRow>
);
export const NegativeButtons = () => (
<StoryStateRow>
<StoryStateColumn title="Primary">
<Button size={Button.sizes.LARGE} kind={Button.kinds.PRIMARY} color={Button.colors.NEGATIVE}>
Negative Primary
</Button>
</StoryStateColumn>
<StoryStateColumn title="Secondary">
<Button size={Button.sizes.LARGE} kind={Button.kinds.SECONDARY} color={Button.colors.NEGATIVE}>
Negative Secondary
</Button>
</StoryStateColumn>
<StoryStateColumn title="Tertiary">
<Button size={Button.sizes.LARGE} kind={Button.kinds.TERTIARY} color={Button.colors.NEGATIVE}>
Negative Tertiary
</Button>
</StoryStateColumn>
</StoryStateRow>
);
export const OnColorButtons = () => (
<>
<div
style={{
backgroundColor: "var(--color-blackish)",
borderRadius: "4px"
}}
>
<StoryStateRow>
<StoryStateColumn>
<Button size={Button.sizes.LARGE} kind={Button.kinds.PRIMARY} color={Button.colors.ON_PRIMARY_COLOR}>
On Primary Primary
</Button>
</StoryStateColumn>
<StoryStateColumn>
<Button size={Button.sizes.LARGE} kind={Button.kinds.SECONDARY} color={Button.colors.ON_PRIMARY_COLOR}>
On Primary Secondary
</Button>
</StoryStateColumn>
<StoryStateColumn>
<Button size={Button.sizes.LARGE} kind={Button.kinds.TERTIARY} color={Button.colors.ON_PRIMARY_COLOR}>
On Primary Tertiary
</Button>
</StoryStateColumn>
</StoryStateRow>
</div>
<div
style={{
backgroundColor: "var(--color-dark-pink)",
borderRadius: "4px",
marginTop: "16px"
}}
>
<StoryStateRow>
<StoryStateColumn>
<Button size={Button.sizes.LARGE} kind={Button.kinds.PRIMARY} color={Button.colors.ON_PRIMARY_COLOR}>
On Primary Primary
</Button>
</StoryStateColumn>
<StoryStateColumn>
<Button size={Button.sizes.LARGE} kind={Button.kinds.SECONDARY} color={Button.colors.ON_PRIMARY_COLOR}>
On Primary Secondary
</Button>
</StoryStateColumn>
<StoryStateColumn>
<Button size={Button.sizes.LARGE} kind={Button.kinds.TERTIARY} color={Button.colors.ON_PRIMARY_COLOR}>
On Primary Tertiary
</Button>
</StoryStateColumn>
</StoryStateRow>
</div>
<div
style={{
backgroundColor: TRANSPARENT_COLOR,
borderRadius: "4px",
marginTop: "16px"
}}
>
<StoryStateRow>
<StoryStateColumn>
<Button
size={Button.sizes.LARGE}
kind={Button.kinds.PRIMARY}
color={Button.colors.ON_PRIMARY_COLOR}
defaultTextColorOnPrimaryColor="hotpink"
>
Transparent with color
</Button>
</StoryStateColumn>
<StoryStateColumn>
<Button
size={Button.sizes.LARGE}
kind={Button.kinds.PRIMARY}
color={Button.colors.ON_PRIMARY_COLOR}
defaultTextColorOnPrimaryColor="#000000"
>
Transparent with color
</Button>
</StoryStateColumn>
<StoryStateColumn>
<Button
size={Button.sizes.LARGE}
kind={Button.kinds.PRIMARY}
color={Button.colors.ON_PRIMARY_COLOR}
defaultTextColorOnPrimaryColor="var(--primary-color)"
>
Transparent with color
</Button>
</StoryStateColumn>
</StoryStateRow>
</div>
</>
);
export const ButtonsWithIcons = () => (
<StoryStateRow>
<StoryStateColumn title="Left Icon">
<Button
size={Button.sizes.LARGE}
kind={Button.kinds.PRIMARY}
color={Button.colors.PRIMARY}
leftIcon="fa fa-check"
>
Left Icon
</Button>
</StoryStateColumn>
<StoryStateColumn title="Right Icon">
<Button
size={Button.sizes.LARGE}
kind={Button.kinds.PRIMARY}
color={Button.colors.PRIMARY}
rightIcon="fa fa-check"
>
Right Icon
</Button>
</StoryStateColumn>
<StoryStateColumn title="Only Icon">
<Button
size={Button.sizes.LARGE}
kind={Button.kinds.PRIMARY}
color={Button.colors.PRIMARY}
rightIcon="fa fa-check"
/>
</StoryStateColumn>
</StoryStateRow>
);
export const SuccessText = () => (
<StoryStateRow>
<StoryStateColumn title="Success Text">
<Button success size={Button.sizes.LARGE} kind={Button.kinds.PRIMARY} successText="Copied!">
Success Text
</Button>
</StoryStateColumn>
<StoryStateColumn title="Success Icon">
<Button success size={Button.sizes.LARGE} kind={Button.kinds.PRIMARY} successIcon="fa fa-check">
Success icon
</Button>
</StoryStateColumn>
<StoryStateColumn title="Success Icon and Text">
<Button
success
size={Button.sizes.LARGE}
kind={Button.kinds.PRIMARY}
successIcon="fa fa-check"
successText="Copied!"
>
Success icon
</Button>
</StoryStateColumn>
</StoryStateRow>
);
const LoadingButtonWrapper = ({ size, kind }) => {
const [loading, setLoading] = useState(false);
const onClick = useCallback(() => {
setLoading(true);
}, [setLoading]);
const resetLoading = useCallback(() => {
setLoading(false);
}, [setLoading]);
return (
<div>
<Button loading={true} size={size} kind={kind} onClick={onClick}>
click here
</Button>
<br />
<br />
<Button loading={loading} size={size} kind={kind} onClick={onClick}>
click here
</Button>
<br />
<br />
<Button onClick={resetLoading} kind={Button.kinds.TERTIARY} size={Button.sizes.SMALL}>
Reset loading
</Button>
<br />
</div>
);
};
export const Loading = () => (
<StoryStateRow>
<StoryStateColumn title="Left Icon Large">
<LoadingButtonWrapper size={Button.sizes.MEDIUM} kind={Button.kinds.PRIMARY} />
</StoryStateColumn>
<StoryStateColumn title="Left Icon Medium">
<LoadingButtonWrapper size={Button.sizes.MEDIUM} kind={Button.kinds.SECONDARY} />
</StoryStateColumn>
<StoryStateColumn title="Left Icon Small">
<LoadingButtonWrapper size={Button.sizes.MEDIUM} kind={Button.kinds.TERTIARY} />
</StoryStateColumn>
</StoryStateRow>
);
export default {
title: "Components|Button",
component: Button,
decorators: [withPerformance]
};