@edvisor/product-language 0.1.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.babelrc +12 -0
- package/.eslintrc.json +147 -0
- package/.storybook/main.js +57 -0
- package/.storybook/manager.js +7 -0
- package/.storybook/preview.js +15 -0
- package/.storybook/tsconfig.json +30 -0
- package/jest.config.ts +15 -0
- package/jest.setup.ts +2 -0
- package/package.json +21 -10
- package/project.json +96 -0
- package/src/README.md +61 -0
- package/src/assets/svg/example_icon.svg +3 -0
- package/src/assets/svg/example_icon_white.svg +3 -0
- package/src/assets/svg/spinner.svg +3 -0
- package/src/assets/svg/spinner_white.svg +3 -0
- package/src/helpers/index.ts +4 -0
- package/src/helpers/playground.ts +16 -0
- package/src/helpers/talesOf.tsx +42 -0
- package/src/index.ts +2 -0
- package/src/lib/components/README.md +49 -0
- package/src/lib/components/alert-banner/alert-banner.tsx +34 -0
- package/src/lib/components/alert-banner/alert-level-flags.ts +77 -0
- package/src/lib/components/alert-banner/index.ts +1 -0
- package/src/lib/components/badge/badge-type-flags.ts +72 -0
- package/src/lib/components/badge/badge.test.tsx +29 -0
- package/src/lib/components/badge/badge.tsx +22 -0
- package/src/lib/components/badge/index.ts +1 -0
- package/src/lib/components/badge/stories/badge.stories.mdx +44 -0
- package/src/lib/components/badge/stories/components.tsx +49 -0
- package/{lib/components/card/atoms/card-frame.d.ts → src/lib/components/card/atoms/card-frame.tsx} +17 -7
- package/src/lib/components/card/atoms/index.ts +1 -0
- package/src/lib/components/card/card.test.tsx +162 -0
- package/src/lib/components/card/card.tsx +78 -0
- package/src/lib/components/card/components/card-alert-banner-slot.tsx +16 -0
- package/src/lib/components/card/components/card-controls-slot.tsx +19 -0
- package/src/lib/components/card/components/card-section-slot.tsx +51 -0
- package/src/lib/components/card/components/index.ts +3 -0
- package/src/lib/components/card/index.ts +2 -0
- package/src/lib/components/card/molecules/index.ts +1 -0
- package/src/lib/components/card/molecules/left-right-card.test.tsx +89 -0
- package/src/lib/components/card/molecules/left-right-card.tsx +63 -0
- package/src/lib/components/card/storybook/card.stories.mdx +100 -0
- package/src/lib/components/card/storybook/components.tsx +223 -0
- package/src/lib/components/checkbox/checkbox.test.tsx +39 -0
- package/src/lib/components/checkbox/checkbox.tsx +63 -0
- package/src/lib/components/checkbox/helpers.tsx +100 -0
- package/src/lib/components/checkbox/index.tsx +1 -0
- package/src/lib/components/checkbox/stories/checkbox.stories.mdx +57 -0
- package/src/lib/components/checkbox/stories/components.tsx +84 -0
- package/src/lib/components/divider/divider-type-flags.tsx +37 -0
- package/src/lib/components/divider/divider.test.tsx +34 -0
- package/src/lib/components/divider/divider.tsx +37 -0
- package/src/lib/components/divider/index.tsx +1 -0
- package/src/lib/components/divider/stories/components.tsx +13 -0
- package/src/lib/components/divider/stories/divider.stories.mdx +44 -0
- package/src/lib/components/flag/flag-size-flags.tsx +55 -0
- package/src/lib/components/flag/flag.list.tsx +788 -0
- package/src/lib/components/flag/flag.test.tsx +65 -0
- package/src/lib/components/flag/flag.tsx +97 -0
- package/src/lib/components/flag/index.tsx +1 -0
- package/src/lib/components/flag/stories/components.tsx +403 -0
- package/src/lib/components/flag/stories/flag.stories.mdx +48 -0
- package/src/lib/components/flag/stories/playGround-select.tsx +145 -0
- package/src/lib/components/icon/icon-list.tsx +135 -0
- package/src/lib/components/icon/icon.test.tsx +48 -0
- package/src/lib/components/icon/icon.tsx +181 -0
- package/src/lib/components/icon/index.tsx +1 -0
- package/src/lib/components/icon/stories/components.tsx +282 -0
- package/src/lib/components/icon/stories/icon.stories.mdx +65 -0
- package/src/lib/components/index.ts +19 -0
- package/src/lib/components/input-field/components/index.ts +2 -0
- package/src/lib/components/input-field/components/labeled-input.tsx +54 -0
- package/src/lib/components/input-field/components/stepper.tsx +60 -0
- package/src/lib/components/input-field/index.ts +6 -0
- package/src/lib/components/input-field/input-field.test.tsx +107 -0
- package/src/lib/components/input-field/input-field.tsx +126 -0
- package/src/lib/components/input-field/input-number.tsx +41 -0
- package/src/lib/components/input-field/input-text.tsx +30 -0
- package/src/lib/components/input-field/storybook/components.tsx +327 -0
- package/src/lib/components/input-field/storybook/input-field.stories.mdx +113 -0
- package/src/lib/components/layout/flex.tsx +22 -0
- package/src/lib/components/layout/grid-layout.tsx +40 -0
- package/src/lib/components/layout/index.ts +3 -0
- package/src/lib/components/layout/left-right-layout.tsx +67 -0
- package/src/lib/components/link/index.ts +1 -0
- package/src/lib/components/link/link.test.tsx +29 -0
- package/src/lib/components/link/link.tsx +56 -0
- package/src/lib/components/link/storybook/link.stories.mdx +52 -0
- package/src/lib/components/molecules/avatar/avatar-size-flags.tsx +55 -0
- package/src/lib/components/molecules/avatar/avatar.test.tsx +114 -0
- package/src/lib/components/molecules/avatar/avatar.tsx +80 -0
- package/src/lib/components/molecules/avatar/index.tsx +1 -0
- package/src/lib/components/molecules/avatar/stories/avatar.stories.mdx +52 -0
- package/src/lib/components/molecules/avatar/stories/components.tsx +36 -0
- package/src/lib/components/molecules/button/button-flags.tsx +340 -0
- package/src/lib/components/molecules/button/button.test.tsx +77 -0
- package/src/lib/components/molecules/button/button.tsx +214 -0
- package/src/lib/components/molecules/button/index.tsx +1 -0
- package/src/lib/components/molecules/button/stories/button.stories.mdx +105 -0
- package/src/lib/components/molecules/button/stories/components.tsx +84 -0
- package/src/lib/components/molecules/index.ts +3 -0
- package/src/lib/components/molecules/input-checkbox/index.tsx +1 -0
- package/src/lib/components/molecules/input-checkbox/input-checkbox.test.tsx +34 -0
- package/src/lib/components/molecules/input-checkbox/input-checkbox.tsx +49 -0
- package/src/lib/components/molecules/input-checkbox/stories/components.tsx +53 -0
- package/src/lib/components/molecules/input-checkbox/stories/input-checkbox.stories.mdx +49 -0
- package/src/lib/components/organisms/index.ts +1 -0
- package/src/lib/components/organisms/multi-choice-list/index.tsx +1 -0
- package/src/lib/components/organisms/multi-choice-list/multi-choice-list.test.tsx +33 -0
- package/src/lib/components/organisms/multi-choice-list/multi-choice-list.tsx +52 -0
- package/src/lib/components/organisms/multi-choice-list/stories/components.tsx +124 -0
- package/src/lib/components/organisms/multi-choice-list/stories/multi-choice-list.stories.mdx +99 -0
- package/src/lib/components/spinner/index.tsx +1 -0
- package/src/lib/components/spinner/spinner-size-flags.tsx +39 -0
- package/src/lib/components/spinner/spinner.test.tsx +31 -0
- package/src/lib/components/spinner/spinner.tsx +54 -0
- package/src/lib/components/spinner/stories/components.tsx +39 -0
- package/src/lib/components/spinner/stories/spinner.stories.mdx +35 -0
- package/src/lib/components/tabs/components/index.ts +1 -0
- package/src/lib/components/tabs/components/tab.tsx +62 -0
- package/src/lib/components/tabs/index.tsx +1 -0
- package/src/lib/components/tabs/storybook/components.tsx +282 -0
- package/src/lib/components/tabs/storybook/tabs.stories.mdx +97 -0
- package/src/lib/components/tabs/tabs.test.tsx +86 -0
- package/src/lib/components/tabs/tabs.tsx +101 -0
- package/src/lib/components/tag/components/close-button.tsx +85 -0
- package/src/lib/components/tag/components/index.ts +2 -0
- package/src/lib/components/tag/components/tag-label.tsx +44 -0
- package/src/lib/components/tag/index.tsx +1 -0
- package/src/lib/components/tag/stories/components.tsx +86 -0
- package/src/lib/components/tag/stories/tag.stories.mdx +42 -0
- package/src/lib/components/tag/tag.test.tsx +36 -0
- package/src/lib/components/tag/tag.tsx +33 -0
- package/src/lib/components/thumbnail/index.tsx +1 -0
- package/src/lib/components/thumbnail/stories/thumbnail.stories.mdx +34 -0
- package/src/lib/components/thumbnail/thumbnail-size-flags.tsx +41 -0
- package/src/lib/components/thumbnail/thumbnail.test.tsx +51 -0
- package/src/lib/components/thumbnail/thumbnail.tsx +45 -0
- package/src/lib/components/typography/index.ts +1 -0
- package/src/lib/components/typography/storybook/components.tsx +288 -0
- package/src/lib/components/typography/storybook/typography.stories.mdx +90 -0
- package/src/lib/components/typography/typography.test.tsx +97 -0
- package/src/lib/components/typography/typography.tsx +99 -0
- package/src/lib/foundations/color-system/base-palette/base-palette.stories.tsx +123 -0
- package/src/lib/foundations/color-system/base-palette/base-palette.ts +93 -0
- package/src/lib/foundations/color-system/base-palette/index.ts +1 -0
- package/src/lib/foundations/color-system/color-guidelines/color-guidelines.stories.mdx +85 -0
- package/src/lib/foundations/color-system/color-guidelines/color-guidelines.stories.tsx +231 -0
- package/src/lib/foundations/color-system/color-guidelines/color-guidelines.ts +160 -0
- package/src/lib/foundations/color-system/color-guidelines/index.ts +1 -0
- package/src/lib/foundations/color-system/components/color-sample.tsx +99 -0
- package/src/lib/foundations/color-system/components/index.ts +1 -0
- package/src/lib/foundations/color-system/index.ts +1 -0
- package/src/lib/foundations/index.ts +4 -0
- package/src/lib/foundations/shadows/components.tsx +59 -0
- package/src/lib/foundations/shadows/index.ts +1 -0
- package/src/lib/foundations/shadows/shadows.stories.mdx +71 -0
- package/src/lib/foundations/shadows/shadows.tsx +47 -0
- package/src/lib/foundations/spacing/index.ts +1 -0
- package/src/lib/foundations/spacing/spacing-guidelines.ts +24 -0
- package/src/lib/foundations/spacing/spacing.stories.mdx +51 -0
- package/src/lib/foundations/spacing/spacing.ts +18 -0
- package/src/lib/foundations/typography/constants.ts +25 -0
- package/src/lib/foundations/typography/fonts.ts +205 -0
- package/src/lib/foundations/typography/index.tsx +1 -0
- package/src/lib/foundations/typography/text-aspect-flags.ts +61 -0
- package/src/lib/foundations/typography/typography.tsx +102 -0
- package/src/lib/helpers/generic-types.ts +44 -0
- package/src/lib/helpers/index.ts +6 -0
- package/src/lib/helpers/nothing.tsx +18 -0
- package/src/lib/helpers/numbers.ts +67 -0
- package/src/lib/helpers/safe-navigation.ts +44 -0
- package/src/lib/helpers/slots.test.tsx +98 -0
- package/src/lib/helpers/slots.tsx +157 -0
- package/src/lib/helpers/strings.test.ts +47 -0
- package/src/lib/helpers/strings.ts +16 -0
- package/tsconfig.json +35 -0
- package/tsconfig.lib.json +28 -0
- package/tsconfig.spec.json +21 -0
- package/index.d.ts +0 -2
- package/index.js +0 -6078
- package/lib/components/alert-banner/alert-banner.d.ts +0 -11
- package/lib/components/alert-banner/alert-level-flags.d.ts +0 -13
- package/lib/components/alert-banner/index.d.ts +0 -1
- package/lib/components/badge/badge-type-flags.d.ts +0 -18
- package/lib/components/badge/badge.d.ts +0 -5
- package/lib/components/badge/index.d.ts +0 -1
- package/lib/components/card/atoms/index.d.ts +0 -1
- package/lib/components/card/card.d.ts +0 -14
- package/lib/components/card/components/card-alert-banner-slot.d.ts +0 -5
- package/lib/components/card/components/card-controls-slot.d.ts +0 -4
- package/lib/components/card/components/card-section-slot.d.ts +0 -11
- package/lib/components/card/components/index.d.ts +0 -3
- package/lib/components/card/index.d.ts +0 -2
- package/lib/components/card/molecules/index.d.ts +0 -1
- package/lib/components/card/molecules/left-right-card.d.ts +0 -16
- package/lib/components/checkbox/checkbox.d.ts +0 -11
- package/lib/components/checkbox/components/components.d.ts +0 -12
- package/lib/components/checkbox/index.d.ts +0 -1
- package/lib/components/divider/divider-type-flags.d.ts +0 -9
- package/lib/components/divider/divider.d.ts +0 -7
- package/lib/components/divider/index.d.ts +0 -1
- package/lib/components/index.d.ts +0 -12
- package/lib/components/input-field/components/index.d.ts +0 -2
- package/lib/components/input-field/components/labeled-input.d.ts +0 -11
- package/lib/components/input-field/components/stepper.d.ts +0 -7
- package/lib/components/input-field/index.d.ts +0 -3
- package/lib/components/input-field/input-field.d.ts +0 -25
- package/lib/components/input-field/input-number.d.ts +0 -18
- package/lib/components/input-field/input-text.d.ts +0 -14
- package/lib/components/layout/flex.d.ts +0 -16
- package/lib/components/layout/grid-layout.d.ts +0 -11
- package/lib/components/layout/index.d.ts +0 -3
- package/lib/components/layout/left-right-layout.d.ts +0 -70
- package/lib/components/link/index.d.ts +0 -1
- package/lib/components/link/link.d.ts +0 -14
- package/lib/components/molecules/avatar/avatar-size-flags.d.ts +0 -12
- package/lib/components/molecules/avatar/avatar.d.ts +0 -12
- package/lib/components/molecules/avatar/index.d.ts +0 -1
- package/lib/components/molecules/button/button-flags.d.ts +0 -39
- package/lib/components/molecules/button/button.d.ts +0 -24
- package/lib/components/molecules/button/index.d.ts +0 -1
- package/lib/components/molecules/index.d.ts +0 -3
- package/lib/components/molecules/input-checkbox/index.d.ts +0 -1
- package/lib/components/molecules/input-checkbox/input-checkbox.d.ts +0 -8
- package/lib/components/organisms/index.d.ts +0 -1
- package/lib/components/organisms/multi-choice-list/index.d.ts +0 -1
- package/lib/components/organisms/multi-choice-list/multi-choice-list.d.ts +0 -11
- package/lib/components/spinner/index.d.ts +0 -1
- package/lib/components/spinner/spinner-size-flags.d.ts +0 -10
- package/lib/components/spinner/spinner.d.ts +0 -9
- package/lib/components/thumbnail/index.d.ts +0 -1
- package/lib/components/thumbnail/thumbnail-size-flags.d.ts +0 -10
- package/lib/components/thumbnail/thumbnail.d.ts +0 -9
- package/lib/components/typography/index.d.ts +0 -1
- package/lib/components/typography/typography.d.ts +0 -23
- package/lib/foundations/color-system/base-palette/base-palette.d.ts +0 -77
- package/lib/foundations/color-system/base-palette/index.d.ts +0 -1
- package/lib/foundations/color-system/color-guidelines/color-guidelines.d.ts +0 -131
- package/lib/foundations/color-system/color-guidelines/index.d.ts +0 -1
- package/lib/foundations/color-system/components/color-sample.d.ts +0 -17
- package/lib/foundations/color-system/components/index.d.ts +0 -1
- package/lib/foundations/color-system/index.d.ts +0 -1
- package/lib/foundations/index.d.ts +0 -4
- package/lib/foundations/shadows/components.d.ts +0 -8
- package/lib/foundations/shadows/index.d.ts +0 -1
- package/lib/foundations/shadows/shadows.d.ts +0 -8
- package/lib/foundations/spacing/index.d.ts +0 -1
- package/lib/foundations/spacing/spacing-guidelines.d.ts +0 -22
- package/lib/foundations/spacing/spacing.d.ts +0 -18
- package/lib/foundations/typography/constants.d.ts +0 -22
- package/lib/foundations/typography/index.d.ts +0 -1
- package/lib/foundations/typography/text-aspect-flags.d.ts +0 -14
- package/lib/foundations/typography/typography.d.ts +0 -19
- package/lib/helpers/generic-types.d.ts +0 -21
- package/lib/helpers/index.d.ts +0 -6
- package/lib/helpers/nothing.d.ts +0 -8
- package/lib/helpers/numbers.d.ts +0 -41
- package/lib/helpers/safe-navigation.d.ts +0 -14
- package/lib/helpers/slots.d.ts +0 -8
- package/lib/helpers/strings.d.ts +0 -1
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { Canvas, Meta } from '@storybook/addon-docs';
|
|
2
|
+
import { Avatar } from '../index'
|
|
3
|
+
import { WrapperStories, AvatarsWithText, AvatarsWithImage, WrapperStoriesWithLabel } from './components'
|
|
4
|
+
|
|
5
|
+
<Meta
|
|
6
|
+
title="Components/Avatar"
|
|
7
|
+
component={Avatar}
|
|
8
|
+
/>
|
|
9
|
+
|
|
10
|
+
# Avatar
|
|
11
|
+
|
|
12
|
+
For more details, check out the component page on [Figma](https://www.figma.com/file/ue1CurHfZ426o2T2l8Dk64/Edvisor-Product-Language?node-id=1008%3A1257)
|
|
13
|
+
|
|
14
|
+
## How to use
|
|
15
|
+
|
|
16
|
+
```javascript
|
|
17
|
+
// Import the component
|
|
18
|
+
import { Avatar } from './index'
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
// Render the component sending the required parameters
|
|
22
|
+
<Avatar name="SOME-NAME-HERE" />
|
|
23
|
+
```
|
|
24
|
+
## Good Practices
|
|
25
|
+
- You can send the `imageLabel` propertie as and `alt` propertie in order to set and alternative text to image
|
|
26
|
+
|
|
27
|
+
## Examples
|
|
28
|
+
|
|
29
|
+
Default
|
|
30
|
+
<Canvas>
|
|
31
|
+
<WrapperStories>
|
|
32
|
+
<AvatarsWithText>
|
|
33
|
+
<Avatar name="Yan Leite" small />
|
|
34
|
+
<Avatar name="Yan Leite" medium />
|
|
35
|
+
<Avatar name="Yan Leite" large />
|
|
36
|
+
</AvatarsWithText>
|
|
37
|
+
<AvatarsWithImage>
|
|
38
|
+
<Avatar name="Yan Leite" imageLabel="Edvisor Logo" small imageUrl='https://blog.edvisor.io/hubfs/Edvisor%20Smi.png' />
|
|
39
|
+
<Avatar name="Yan Leite" medium imageUrl='https://blog.edvisor.io/hubfs/Edvisor%20Smi.png' />
|
|
40
|
+
<Avatar name="Yan Leite" large imageUrl='https://blog.edvisor.io/hubfs/Edvisor%20Smi.png' />
|
|
41
|
+
</AvatarsWithImage>
|
|
42
|
+
</WrapperStories>
|
|
43
|
+
</Canvas>
|
|
44
|
+
|
|
45
|
+
Also, we can use that rendering the full name
|
|
46
|
+
<Canvas>
|
|
47
|
+
<WrapperStoriesWithLabel>
|
|
48
|
+
<Avatar name="Yan Leite" withLabel />
|
|
49
|
+
<Avatar name="Yan Leite" withLabel imageUrl='https://blog.edvisor.io/hubfs/Edvisor%20Smi.png' />
|
|
50
|
+
</WrapperStoriesWithLabel>
|
|
51
|
+
</Canvas>
|
|
52
|
+
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import styled from 'styled-components'
|
|
2
|
+
import { Surface, Padding } from '@foundations'
|
|
3
|
+
|
|
4
|
+
const WrapperStories = styled.div`
|
|
5
|
+
width: 244px;
|
|
6
|
+
height: 192px;
|
|
7
|
+
background: ${Surface.Default.Default};
|
|
8
|
+
`
|
|
9
|
+
|
|
10
|
+
const WrapperStoriesWithLabel = styled.div`
|
|
11
|
+
width: 130px;
|
|
12
|
+
background: ${Surface.Default.Default};
|
|
13
|
+
|
|
14
|
+
& > div {
|
|
15
|
+
padding-bottom: ${Padding.l};
|
|
16
|
+
}
|
|
17
|
+
`
|
|
18
|
+
|
|
19
|
+
const AvatarsWithText = styled.div`
|
|
20
|
+
display: flex;
|
|
21
|
+
justify-content: space-around;
|
|
22
|
+
padding: ${Padding.l} 0 ${Padding.l} 0;
|
|
23
|
+
`
|
|
24
|
+
|
|
25
|
+
const AvatarsWithImage = styled.div`
|
|
26
|
+
display: flex;
|
|
27
|
+
justify-content: space-around;
|
|
28
|
+
padding-bottom: ${Padding.l};
|
|
29
|
+
`
|
|
30
|
+
|
|
31
|
+
export {
|
|
32
|
+
WrapperStories,
|
|
33
|
+
AvatarsWithText,
|
|
34
|
+
AvatarsWithImage,
|
|
35
|
+
WrapperStoriesWithLabel,
|
|
36
|
+
}
|
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
// this file was generated, but it is safe to modify
|
|
2
|
+
import {
|
|
3
|
+
bitwiseOr,
|
|
4
|
+
MappedEnum,
|
|
5
|
+
RequireOnlyOne,
|
|
6
|
+
PropsWithChildren,
|
|
7
|
+
getRightmostSetBitNumber,
|
|
8
|
+
} from '@helpers'
|
|
9
|
+
import { Actions, Padding, Interactive, Text, Borders, Icons } from '@foundations'
|
|
10
|
+
|
|
11
|
+
export const enum ButtonType {
|
|
12
|
+
basic = 1,
|
|
13
|
+
primary = 2,
|
|
14
|
+
destructive = 4,
|
|
15
|
+
destructivePrimary = 6,
|
|
16
|
+
outline = 8,
|
|
17
|
+
plain = 16,
|
|
18
|
+
subtle = 32,
|
|
19
|
+
plainSubtle = 48,
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const enum ButtonSize {
|
|
23
|
+
default = 1,
|
|
24
|
+
small = 2,
|
|
25
|
+
large = 4,
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const enum ButtonDisabledType {
|
|
29
|
+
enabled = 1,
|
|
30
|
+
disabled = 2,
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
type ButtonTypes<T> = MappedEnum<typeof ButtonType, T>
|
|
34
|
+
type ButtonSizes<T> = MappedEnum<typeof ButtonSize, T>
|
|
35
|
+
type ButtonDisabledTypes<T> = MappedEnum<typeof ButtonDisabledType, T>
|
|
36
|
+
|
|
37
|
+
function toButtonSize(n: number): ButtonSize {
|
|
38
|
+
switch (n) {
|
|
39
|
+
case ButtonSize.default:
|
|
40
|
+
return ButtonSize.default
|
|
41
|
+
case ButtonSize.small:
|
|
42
|
+
return ButtonSize.small
|
|
43
|
+
case ButtonSize.large:
|
|
44
|
+
return ButtonSize.large
|
|
45
|
+
default:
|
|
46
|
+
return ButtonSize.default
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function toButtonDisabledType(n: number): ButtonDisabledType {
|
|
51
|
+
switch (n) {
|
|
52
|
+
case ButtonDisabledType.enabled:
|
|
53
|
+
return ButtonDisabledType.enabled
|
|
54
|
+
case ButtonDisabledType.disabled:
|
|
55
|
+
return ButtonDisabledType.disabled
|
|
56
|
+
default:
|
|
57
|
+
return ButtonDisabledType.enabled
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function toButtonTypes(n: number): ButtonType {
|
|
62
|
+
const defaultType = 0
|
|
63
|
+
switch (n) {
|
|
64
|
+
case defaultType:
|
|
65
|
+
case ButtonType.basic:
|
|
66
|
+
return ButtonType.basic
|
|
67
|
+
case ButtonType.primary:
|
|
68
|
+
return ButtonType.primary
|
|
69
|
+
case ButtonType.destructivePrimary:
|
|
70
|
+
return ButtonType.destructivePrimary
|
|
71
|
+
case ButtonType.destructive:
|
|
72
|
+
return ButtonType.destructive
|
|
73
|
+
case ButtonType.outline:
|
|
74
|
+
return ButtonType.outline
|
|
75
|
+
case ButtonType.plain:
|
|
76
|
+
return ButtonType.plain
|
|
77
|
+
case ButtonType.plainSubtle:
|
|
78
|
+
return ButtonType.plainSubtle
|
|
79
|
+
default:
|
|
80
|
+
return getRightmostSetBitNumber(n)
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const ButtonBackgroundColorValues = {
|
|
85
|
+
[ButtonType.basic]: Actions.Secondary.Default,
|
|
86
|
+
[ButtonType.primary]: Actions.Primary.Default,
|
|
87
|
+
[ButtonType.destructivePrimary]: Actions.Critical.Default,
|
|
88
|
+
[ButtonType.destructive]: 'none',
|
|
89
|
+
[ButtonType.outline]: 'none',
|
|
90
|
+
[ButtonType.plain]: 'none',
|
|
91
|
+
[ButtonType.subtle]: 'none',
|
|
92
|
+
[ButtonType.plainSubtle]: 'none',
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const ButtonBackgroundColorDisabledValues = {
|
|
96
|
+
[ButtonType.basic]: Actions.Secondary.Disabled,
|
|
97
|
+
[ButtonType.primary]: Actions.Primary.Disabled,
|
|
98
|
+
[ButtonType.destructivePrimary]: Actions.Critical.Disabled,
|
|
99
|
+
[ButtonType.destructive]: Actions.Secondary.Disabled,
|
|
100
|
+
[ButtonType.outline]: 'none',
|
|
101
|
+
[ButtonType.plain]: 'none',
|
|
102
|
+
[ButtonType.subtle]: Actions.Secondary.Disabled,
|
|
103
|
+
[ButtonType.plainSubtle]: 'none',
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
const ButtonBackgroundColorHoverValues = {
|
|
107
|
+
[ButtonType.basic]: Actions.Secondary.Hover,
|
|
108
|
+
[ButtonType.primary]: Actions.Primary.Hover,
|
|
109
|
+
[ButtonType.destructivePrimary]: Actions.Critical.Hover,
|
|
110
|
+
[ButtonType.destructive]: Actions.Critical.Hover,
|
|
111
|
+
[ButtonType.outline]: Actions.Secondary.Hover,
|
|
112
|
+
[ButtonType.plain]: '',
|
|
113
|
+
[ButtonType.subtle]: Actions.Secondary.Hover,
|
|
114
|
+
[ButtonType.plainSubtle]: '',
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const ButtonTextDecorationHoverValues = {
|
|
118
|
+
[ButtonType.basic]: '',
|
|
119
|
+
[ButtonType.primary]: '',
|
|
120
|
+
[ButtonType.destructivePrimary]: '',
|
|
121
|
+
[ButtonType.destructive]: '',
|
|
122
|
+
[ButtonType.outline]: '',
|
|
123
|
+
[ButtonType.plain]: 'underline',
|
|
124
|
+
[ButtonType.subtle]: '',
|
|
125
|
+
[ButtonType.plainSubtle]: 'underline',
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
const ButtonBackgroundColorPressedValues = {
|
|
129
|
+
[ButtonType.basic]: Actions.Secondary.Pressed,
|
|
130
|
+
[ButtonType.primary]: Actions.Primary.Pressed,
|
|
131
|
+
[ButtonType.destructivePrimary]: Actions.Critical.Pressed,
|
|
132
|
+
[ButtonType.destructive]: Actions.Critical.Pressed,
|
|
133
|
+
[ButtonType.outline]: Actions.Secondary.Pressed,
|
|
134
|
+
[ButtonType.plain]: Actions.Secondary.Hover,
|
|
135
|
+
[ButtonType.subtle]: Actions.Secondary.Pressed,
|
|
136
|
+
[ButtonType.plainSubtle]: Actions.Secondary.Hover,
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
const ButtonTextColorValues = {
|
|
140
|
+
[ButtonType.basic]: Text.Default,
|
|
141
|
+
[ButtonType.primary]: Text.OnPrimary,
|
|
142
|
+
[ButtonType.destructivePrimary]: Text.OnCritical,
|
|
143
|
+
[ButtonType.destructive]: Text.Default,
|
|
144
|
+
[ButtonType.outline]: Text.Default,
|
|
145
|
+
[ButtonType.plain]: Interactive.Default.Default,
|
|
146
|
+
[ButtonType.subtle]: Text.Default,
|
|
147
|
+
[ButtonType.plainSubtle]: Interactive.Subtle.Default,
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
const IconTextColorValues = {
|
|
151
|
+
[ButtonType.basic]: Icons.Default,
|
|
152
|
+
[ButtonType.primary]: Icons.OnPrimary,
|
|
153
|
+
[ButtonType.destructivePrimary]: Icons.OnCritical,
|
|
154
|
+
[ButtonType.destructive]: Icons.Default,
|
|
155
|
+
[ButtonType.outline]: Icons.Default,
|
|
156
|
+
[ButtonType.plain]: Interactive.Default.Default,
|
|
157
|
+
[ButtonType.subtle]: Icons.Default,
|
|
158
|
+
[ButtonType.plainSubtle]: Icons.Default,
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
const ButtonTextColorHoverValues = {
|
|
162
|
+
[ButtonType.basic]: Text.Default,
|
|
163
|
+
[ButtonType.primary]: Text.OnPrimary,
|
|
164
|
+
[ButtonType.destructivePrimary]: Text.OnCritical,
|
|
165
|
+
[ButtonType.destructive]: Text.OnCritical,
|
|
166
|
+
[ButtonType.outline]: Text.Default,
|
|
167
|
+
[ButtonType.plain]: Interactive.Default.Hover,
|
|
168
|
+
[ButtonType.subtle]: Text.Default,
|
|
169
|
+
[ButtonType.plainSubtle]: Interactive.Subtle.Hover,
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
const IconColorHoverValues = {
|
|
173
|
+
[ButtonType.basic]: Icons.Default,
|
|
174
|
+
[ButtonType.primary]: Icons.OnPrimary,
|
|
175
|
+
[ButtonType.destructivePrimary]: Icons.OnCritical,
|
|
176
|
+
[ButtonType.destructive]: Icons.OnCritical,
|
|
177
|
+
[ButtonType.outline]: Icons.Default,
|
|
178
|
+
[ButtonType.plain]: Interactive.Default.Hover,
|
|
179
|
+
[ButtonType.subtle]: Icons.Default,
|
|
180
|
+
[ButtonType.plainSubtle]: Interactive.Subtle.Hover,
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
const ButtonBorderValues = {
|
|
184
|
+
[ButtonType.basic]: `1px solid ${Borders.Default.Default}`,
|
|
185
|
+
[ButtonType.primary]: 'none',
|
|
186
|
+
[ButtonType.destructivePrimary]: 'none',
|
|
187
|
+
[ButtonType.destructive]: `1px solid ${Borders.Default.Default}`,
|
|
188
|
+
[ButtonType.outline]: `1px solid ${Borders.Default.Default}`,
|
|
189
|
+
[ButtonType.plain]: 'none',
|
|
190
|
+
[ButtonType.subtle]: `1px solid ${Borders.Default.Default}`,
|
|
191
|
+
[ButtonType.plainSubtle]: 'none',
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
const ButtonBorderDisabledValues = {
|
|
195
|
+
[ButtonType.basic]: `1px solid ${Borders.Default.Subdued}`,
|
|
196
|
+
[ButtonType.primary]: 'none',
|
|
197
|
+
[ButtonType.destructivePrimary]: 'none',
|
|
198
|
+
[ButtonType.destructive]: `1px solid ${Borders.Default.Subdued}`,
|
|
199
|
+
[ButtonType.outline]: `1px solid ${Borders.Default.Default}`,
|
|
200
|
+
[ButtonType.plain]: 'none',
|
|
201
|
+
[ButtonType.subtle]: `1px solid ${Borders.Default.Subdued}`,
|
|
202
|
+
[ButtonType.plainSubtle]: 'none',
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
const ButtonTextColorDisabled = {
|
|
206
|
+
[ButtonDisabledType.enabled]: '',
|
|
207
|
+
[ButtonDisabledType.disabled]: Text.Light,
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
const ButtonCursor = {
|
|
211
|
+
[ButtonDisabledType.enabled]: 'pointer',
|
|
212
|
+
[ButtonDisabledType.disabled]: 'not-allowed',
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
const ButtonSizeValues = {
|
|
216
|
+
[ButtonSize.small]: `${Padding.xxs} ${Padding.s}`,
|
|
217
|
+
[ButtonSize.default]: `${Padding.xs} ${Padding.m}`,
|
|
218
|
+
[ButtonSize.large]: `${Padding.s} ${Padding.l}`,
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
const ButtonSizeValuesByType = {
|
|
222
|
+
[ButtonType.basic]: '',
|
|
223
|
+
[ButtonType.primary]: '',
|
|
224
|
+
[ButtonType.destructivePrimary]: '',
|
|
225
|
+
[ButtonType.destructive]: '',
|
|
226
|
+
[ButtonType.outline]: '',
|
|
227
|
+
[ButtonType.plain]: `${Padding.xxxs} ${Padding.xxs}`,
|
|
228
|
+
[ButtonType.subtle]: '',
|
|
229
|
+
[ButtonType.plainSubtle]: `${Padding.xxxs} ${Padding.xxs}`,
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
const ButtonTypeValues = {
|
|
233
|
+
[ButtonType.basic]: 1,
|
|
234
|
+
[ButtonType.primary]: 2,
|
|
235
|
+
[ButtonType.destructive]: 4,
|
|
236
|
+
[ButtonType.destructivePrimary]: 6,
|
|
237
|
+
[ButtonType.outline]: 8,
|
|
238
|
+
[ButtonType.plain]: 16,
|
|
239
|
+
[ButtonType.subtle]: 32,
|
|
240
|
+
[ButtonType.plainSubtle]: 48,
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
export type ButtonTypeProps = Partial<RequireOnlyOne<ButtonTypes<boolean>>> &
|
|
244
|
+
PropsWithChildren
|
|
245
|
+
|
|
246
|
+
export type ButtonSizeProps = Partial<RequireOnlyOne<ButtonSizes<boolean>>> &
|
|
247
|
+
PropsWithChildren
|
|
248
|
+
|
|
249
|
+
export type ButtonDisabledTypeProps = Partial<
|
|
250
|
+
RequireOnlyOne<ButtonDisabledTypes<boolean>>
|
|
251
|
+
> &
|
|
252
|
+
PropsWithChildren
|
|
253
|
+
|
|
254
|
+
export function getBackgroundColorByType(type: ButtonType): string {
|
|
255
|
+
return ButtonBackgroundColorValues[type]
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
export function getBackgroundColorHoverByType(type: ButtonType): string {
|
|
259
|
+
return ButtonBackgroundColorHoverValues[type]
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
export function getTextDecorationHoverByType(type: ButtonType): string {
|
|
263
|
+
return ButtonTextDecorationHoverValues[type]
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
export function getBackgroundColorDisabledByType(type: ButtonType): string {
|
|
267
|
+
return ButtonBackgroundColorDisabledValues[type]
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
export function getBackgroundColorPressedByType(type: ButtonType): string {
|
|
271
|
+
return ButtonBackgroundColorPressedValues[type]
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
export function getTextColorByType(type: ButtonType): string {
|
|
275
|
+
return ButtonTextColorValues[type]
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
export function getIconColorByType(type: ButtonType): string {
|
|
279
|
+
return IconTextColorValues[type]
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
export function getTextColorOnHoverByType(type: ButtonType): string {
|
|
283
|
+
return ButtonTextColorHoverValues[type]
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
export function getIconColorOnHoverByType(type: ButtonType): string {
|
|
287
|
+
return IconColorHoverValues[type]
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
export function getBorderByType(type: ButtonType): string {
|
|
291
|
+
return ButtonBorderValues[type]
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
export function getBorderDisabledByType(type: ButtonType): string {
|
|
295
|
+
return ButtonBorderDisabledValues[type]
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
export function getPaddingBySize(props: ButtonSizeProps): string {
|
|
299
|
+
return ButtonSizeValues[
|
|
300
|
+
toButtonSize(bitwiseOr([props.default, props.small, props.large]))
|
|
301
|
+
]
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
export function getPaddingByType(type: ButtonType): string {
|
|
305
|
+
return ButtonSizeValuesByType[type]
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
export function getTextColorIfDisabled(props: ButtonDisabledTypeProps): string {
|
|
309
|
+
return ButtonTextColorDisabled[
|
|
310
|
+
toButtonDisabledType(bitwiseOr([props.enabled, props.disabled]))
|
|
311
|
+
]
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
export function getCursor(props: ButtonDisabledTypeProps): string {
|
|
315
|
+
return ButtonCursor[
|
|
316
|
+
toButtonDisabledType(bitwiseOr([props.enabled, props.disabled]))
|
|
317
|
+
]
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
export function getIsDisabled(props: ButtonDisabledTypeProps): boolean {
|
|
321
|
+
return (
|
|
322
|
+
toButtonDisabledType(bitwiseOr([props.enabled, props.disabled])) ===
|
|
323
|
+
ButtonDisabledType.disabled
|
|
324
|
+
)
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
export function getButtonType(props: ButtonTypeProps) {
|
|
328
|
+
return ButtonTypeValues[
|
|
329
|
+
toButtonTypes(
|
|
330
|
+
bitwiseOr([
|
|
331
|
+
props.basic,
|
|
332
|
+
props.primary,
|
|
333
|
+
props.destructive,
|
|
334
|
+
props.outline,
|
|
335
|
+
props.plain,
|
|
336
|
+
props.subtle,
|
|
337
|
+
])
|
|
338
|
+
)
|
|
339
|
+
]
|
|
340
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { Actions } from '@foundations'
|
|
2
|
+
import {render, screen } from '@testing-library/react'
|
|
3
|
+
import { Button } from './index'
|
|
4
|
+
|
|
5
|
+
describe('Button Tests', () => {
|
|
6
|
+
describe('ButtonBasic Tests', () => {
|
|
7
|
+
it('should render Button with given Text', async () => {
|
|
8
|
+
render(
|
|
9
|
+
<Button>Test Button</Button>
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
expect(screen.getByText('Test Button')).toBeInTheDocument()
|
|
13
|
+
expect(screen.queryByRole('button')).toBeInTheDocument()
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
describe('ButtonPrimary Tests', () => {
|
|
19
|
+
it('should render Button with given Text', async () => {
|
|
20
|
+
render(
|
|
21
|
+
<Button primary>Test Button</Button>
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
expect(screen.getByText('Test Button')).toBeInTheDocument()
|
|
25
|
+
expect(screen.queryByRole('button')).toBeInTheDocument()
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
describe('ButtonDestructive Tests', () => {
|
|
31
|
+
it('should render Button with given Text', async () => {
|
|
32
|
+
render(
|
|
33
|
+
<Button destructive>Test Button</Button>
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
expect(screen.getByText('Test Button')).toBeInTheDocument()
|
|
37
|
+
expect(screen.queryByRole('button')).toBeInTheDocument()
|
|
38
|
+
expect(screen.queryByRole('button')).toHaveStyle('background: none')
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
it('should render Button with given Text', async () => {
|
|
42
|
+
render(
|
|
43
|
+
<Button destructive primary>Test Button</Button>
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
expect(screen.getByText('Test Button')).toBeInTheDocument()
|
|
47
|
+
expect(screen.queryByRole('button')).toBeInTheDocument()
|
|
48
|
+
expect(screen.queryByRole('button')).toHaveStyle(`background: ${Actions.Critical.Default}`)
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
describe('ButtonOutline Tests', () => {
|
|
55
|
+
it('should render Button with given Text', async () => {
|
|
56
|
+
render(
|
|
57
|
+
<Button outline>Test Button</Button>
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
expect(screen.getByText('Test Button')).toBeInTheDocument()
|
|
61
|
+
expect(screen.queryByRole('button')).toBeInTheDocument()
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
})
|
|
65
|
+
|
|
66
|
+
describe('ButtonPlain Tests', () => {
|
|
67
|
+
it('should render Button with given Text', async () => {
|
|
68
|
+
render(
|
|
69
|
+
<Button plain>Test Button</Button>
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
expect(screen.getByText('Test Button')).toBeInTheDocument()
|
|
73
|
+
expect(screen.queryByRole('button')).toBeInTheDocument()
|
|
74
|
+
})
|
|
75
|
+
})
|
|
76
|
+
|
|
77
|
+
})
|