@edvisor/product-language 0.3.0 → 0.4.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/index.d.ts +2 -0
- package/index.js +9374 -0
- package/lib/components/alert-banner/alert-banner.d.ts +11 -0
- package/lib/components/alert-banner/alert-level-flags.d.ts +13 -0
- package/lib/components/alert-banner/index.d.ts +1 -0
- package/lib/components/badge/badge-type-flags.d.ts +18 -0
- package/lib/components/badge/badge.d.ts +5 -0
- package/lib/components/badge/index.d.ts +1 -0
- package/{src/lib/components/card/atoms/card-frame.tsx → lib/components/card/atoms/card-frame.d.ts} +7 -17
- package/lib/components/card/atoms/index.d.ts +1 -0
- package/lib/components/card/card.d.ts +14 -0
- package/lib/components/card/components/card-alert-banner-slot.d.ts +5 -0
- package/lib/components/card/components/card-controls-slot.d.ts +4 -0
- package/lib/components/card/components/card-section-slot.d.ts +11 -0
- package/lib/components/card/components/index.d.ts +3 -0
- package/lib/components/card/index.d.ts +2 -0
- package/lib/components/card/molecules/index.d.ts +1 -0
- package/lib/components/card/molecules/left-right-card.d.ts +16 -0
- package/lib/components/checkbox/checkbox.d.ts +10 -0
- package/lib/components/checkbox/helpers.d.ts +12 -0
- package/lib/components/checkbox/index.d.ts +1 -0
- package/lib/components/divider/divider-type-flags.d.ts +9 -0
- package/lib/components/divider/divider.d.ts +7 -0
- package/lib/components/divider/index.d.ts +1 -0
- package/lib/components/flag/flag-size-flags.d.ts +12 -0
- package/lib/components/flag/flag.d.ts +9 -0
- package/lib/components/flag/flag.list.d.ts +781 -0
- package/lib/components/flag/index.d.ts +1 -0
- package/lib/components/icon/icon-list.d.ts +131 -0
- package/lib/components/icon/icon.d.ts +131 -0
- package/lib/components/icon/index.d.ts +1 -0
- package/lib/components/index.d.ts +18 -0
- package/lib/components/input-field/components/index.d.ts +2 -0
- package/lib/components/input-field/components/labeled-input.d.ts +10 -0
- package/lib/components/input-field/components/stepper.d.ts +7 -0
- package/lib/components/input-field/index.d.ts +3 -0
- package/lib/components/input-field/input-field.d.ts +25 -0
- package/lib/components/input-field/input-number.d.ts +18 -0
- package/lib/components/input-field/input-text.d.ts +14 -0
- package/lib/components/layout/flex.d.ts +16 -0
- package/lib/components/layout/grid-layout.d.ts +11 -0
- package/lib/components/layout/index.d.ts +3 -0
- package/lib/components/layout/left-right-layout.d.ts +34 -0
- package/lib/components/link/index.d.ts +1 -0
- package/lib/components/link/link.d.ts +14 -0
- package/lib/components/molecules/avatar/avatar-size-flags.d.ts +12 -0
- package/lib/components/molecules/avatar/avatar.d.ts +12 -0
- package/lib/components/molecules/avatar/index.d.ts +1 -0
- package/lib/components/molecules/button/button-flags.d.ts +44 -0
- package/lib/components/molecules/button/button.d.ts +12 -0
- package/lib/components/molecules/button/index.d.ts +1 -0
- package/lib/components/molecules/index.d.ts +3 -0
- package/lib/components/molecules/input-checkbox/index.d.ts +1 -0
- package/lib/components/molecules/input-checkbox/input-checkbox.d.ts +8 -0
- package/lib/components/organisms/index.d.ts +1 -0
- package/lib/components/organisms/multi-choice-list/index.d.ts +1 -0
- package/lib/components/organisms/multi-choice-list/multi-choice-list.d.ts +10 -0
- package/lib/components/select/components/menu-container.d.ts +3 -0
- package/lib/components/select/components/menu-row.d.ts +9 -0
- package/lib/components/select/components/menu.d.ts +2 -0
- package/lib/components/select/components/option.d.ts +10 -0
- package/lib/components/select/components/select-label.d.ts +1 -0
- package/lib/components/select/components/value-component-multi.d.ts +3 -0
- package/lib/components/select/components/value-component-single.d.ts +4 -0
- package/lib/components/select/components/value.d.ts +4 -0
- package/lib/components/select/index.d.ts +1 -0
- package/lib/components/select/select.d.ts +9 -0
- package/lib/components/select/types.d.ts +124 -0
- package/lib/components/select/utils.d.ts +15 -0
- package/lib/components/spinner/index.d.ts +1 -0
- package/lib/components/spinner/spinner-size-flags.d.ts +10 -0
- package/lib/components/spinner/spinner.d.ts +9 -0
- package/lib/components/tabs/components/index.d.ts +1 -0
- package/lib/components/tabs/components/tab.d.ts +7 -0
- package/lib/components/tabs/index.d.ts +1 -0
- package/lib/components/tabs/tabs.d.ts +15 -0
- package/lib/components/tag/components/close-button.d.ts +8 -0
- package/lib/components/tag/components/index.d.ts +2 -0
- package/lib/components/tag/components/tag-label.d.ts +8 -0
- package/lib/components/tag/index.d.ts +1 -0
- package/lib/components/tag/tag.d.ts +10 -0
- package/lib/components/thumbnail/index.d.ts +1 -0
- package/lib/components/thumbnail/thumbnail-size-flags.d.ts +10 -0
- package/lib/components/thumbnail/thumbnail.d.ts +10 -0
- package/lib/components/typography/index.d.ts +1 -0
- package/lib/components/typography/typography.d.ts +24 -0
- package/lib/foundations/color-system/base-palette/base-palette.d.ts +76 -0
- package/lib/foundations/color-system/base-palette/index.d.ts +1 -0
- package/lib/foundations/color-system/color-guidelines/color-guidelines.d.ts +132 -0
- package/lib/foundations/color-system/color-guidelines/index.d.ts +1 -0
- package/lib/foundations/color-system/components/color-sample.d.ts +17 -0
- package/lib/foundations/color-system/components/index.d.ts +1 -0
- package/lib/foundations/color-system/index.d.ts +1 -0
- package/lib/foundations/index.d.ts +4 -0
- package/lib/foundations/shadows/components.d.ts +8 -0
- package/lib/foundations/shadows/index.d.ts +1 -0
- package/lib/foundations/shadows/shadows.d.ts +8 -0
- package/lib/foundations/spacing/index.d.ts +1 -0
- package/lib/foundations/spacing/spacing-guidelines.d.ts +22 -0
- package/lib/foundations/spacing/spacing.d.ts +18 -0
- package/lib/foundations/typography/constants.d.ts +22 -0
- package/lib/foundations/typography/fonts.d.ts +1 -0
- package/lib/foundations/typography/index.d.ts +1 -0
- package/lib/foundations/typography/text-aspect-flags.d.ts +19 -0
- package/lib/foundations/typography/typography.d.ts +24 -0
- package/lib/helpers/generic-types.d.ts +21 -0
- package/lib/helpers/index.d.ts +6 -0
- package/lib/helpers/nothing.d.ts +8 -0
- package/{src/lib/helpers/numbers.ts → lib/helpers/numbers.d.ts} +50 -67
- package/lib/helpers/safe-navigation.d.ts +15 -0
- package/lib/helpers/slots.d.ts +23 -0
- package/lib/helpers/strings.d.ts +1 -0
- package/package.json +12 -3
- package/.babelrc +0 -12
- package/.eslintrc.json +0 -147
- package/.storybook/main.js +0 -57
- package/.storybook/manager.js +0 -7
- package/.storybook/preview.js +0 -15
- package/.storybook/tsconfig.json +0 -30
- package/jest.config.ts +0 -15
- package/jest.setup.ts +0 -2
- package/project.json +0 -96
- package/release-it.json +0 -18
- package/src/README.md +0 -61
- package/src/assets/svg/example_icon.svg +0 -3
- package/src/assets/svg/example_icon_white.svg +0 -3
- package/src/assets/svg/spinner.svg +0 -3
- package/src/assets/svg/spinner_white.svg +0 -3
- package/src/helpers/index.ts +0 -4
- package/src/helpers/playground.ts +0 -16
- package/src/helpers/talesOf.tsx +0 -42
- package/src/index.ts +0 -2
- package/src/lib/components/README.md +0 -49
- package/src/lib/components/alert-banner/alert-banner.tsx +0 -34
- package/src/lib/components/alert-banner/alert-level-flags.ts +0 -77
- package/src/lib/components/alert-banner/index.ts +0 -1
- package/src/lib/components/badge/badge-type-flags.ts +0 -72
- package/src/lib/components/badge/badge.test.tsx +0 -29
- package/src/lib/components/badge/badge.tsx +0 -22
- package/src/lib/components/badge/index.ts +0 -1
- package/src/lib/components/badge/stories/badge.stories.mdx +0 -44
- package/src/lib/components/badge/stories/components.tsx +0 -49
- package/src/lib/components/card/atoms/index.ts +0 -1
- package/src/lib/components/card/card.test.tsx +0 -162
- package/src/lib/components/card/card.tsx +0 -78
- package/src/lib/components/card/components/card-alert-banner-slot.tsx +0 -16
- package/src/lib/components/card/components/card-controls-slot.tsx +0 -19
- package/src/lib/components/card/components/card-section-slot.tsx +0 -51
- package/src/lib/components/card/components/index.ts +0 -3
- package/src/lib/components/card/index.ts +0 -2
- package/src/lib/components/card/molecules/index.ts +0 -1
- package/src/lib/components/card/molecules/left-right-card.test.tsx +0 -89
- package/src/lib/components/card/molecules/left-right-card.tsx +0 -63
- package/src/lib/components/card/storybook/card.stories.mdx +0 -100
- package/src/lib/components/card/storybook/components.tsx +0 -223
- package/src/lib/components/checkbox/checkbox.test.tsx +0 -39
- package/src/lib/components/checkbox/checkbox.tsx +0 -63
- package/src/lib/components/checkbox/helpers.tsx +0 -100
- package/src/lib/components/checkbox/index.tsx +0 -1
- package/src/lib/components/checkbox/stories/checkbox.stories.mdx +0 -57
- package/src/lib/components/checkbox/stories/components.tsx +0 -84
- package/src/lib/components/divider/divider-type-flags.tsx +0 -37
- package/src/lib/components/divider/divider.test.tsx +0 -34
- package/src/lib/components/divider/divider.tsx +0 -37
- package/src/lib/components/divider/index.tsx +0 -1
- package/src/lib/components/divider/stories/components.tsx +0 -13
- package/src/lib/components/divider/stories/divider.stories.mdx +0 -44
- package/src/lib/components/flag/flag-size-flags.tsx +0 -55
- package/src/lib/components/flag/flag.list.tsx +0 -788
- package/src/lib/components/flag/flag.test.tsx +0 -65
- package/src/lib/components/flag/flag.tsx +0 -97
- package/src/lib/components/flag/index.tsx +0 -1
- package/src/lib/components/flag/stories/components.tsx +0 -403
- package/src/lib/components/flag/stories/flag.stories.mdx +0 -48
- package/src/lib/components/flag/stories/playGround-select.tsx +0 -145
- package/src/lib/components/icon/icon-list.tsx +0 -135
- package/src/lib/components/icon/icon.test.tsx +0 -48
- package/src/lib/components/icon/icon.tsx +0 -181
- package/src/lib/components/icon/index.tsx +0 -1
- package/src/lib/components/icon/stories/components.tsx +0 -282
- package/src/lib/components/icon/stories/icon.stories.mdx +0 -65
- package/src/lib/components/index.ts +0 -19
- package/src/lib/components/input-field/components/index.ts +0 -2
- package/src/lib/components/input-field/components/labeled-input.tsx +0 -54
- package/src/lib/components/input-field/components/stepper.tsx +0 -60
- package/src/lib/components/input-field/index.ts +0 -6
- package/src/lib/components/input-field/input-field.test.tsx +0 -107
- package/src/lib/components/input-field/input-field.tsx +0 -126
- package/src/lib/components/input-field/input-number.tsx +0 -41
- package/src/lib/components/input-field/input-text.tsx +0 -30
- package/src/lib/components/input-field/storybook/components.tsx +0 -327
- package/src/lib/components/input-field/storybook/input-field.stories.mdx +0 -113
- package/src/lib/components/layout/flex.tsx +0 -22
- package/src/lib/components/layout/grid-layout.tsx +0 -40
- package/src/lib/components/layout/index.ts +0 -3
- package/src/lib/components/layout/left-right-layout.tsx +0 -67
- package/src/lib/components/link/index.ts +0 -1
- package/src/lib/components/link/link.test.tsx +0 -29
- package/src/lib/components/link/link.tsx +0 -56
- package/src/lib/components/link/storybook/link.stories.mdx +0 -52
- package/src/lib/components/molecules/avatar/avatar-size-flags.tsx +0 -55
- package/src/lib/components/molecules/avatar/avatar.test.tsx +0 -114
- package/src/lib/components/molecules/avatar/avatar.tsx +0 -80
- package/src/lib/components/molecules/avatar/index.tsx +0 -1
- package/src/lib/components/molecules/avatar/stories/avatar.stories.mdx +0 -52
- package/src/lib/components/molecules/avatar/stories/components.tsx +0 -36
- package/src/lib/components/molecules/button/button-flags.tsx +0 -340
- package/src/lib/components/molecules/button/button.test.tsx +0 -77
- package/src/lib/components/molecules/button/button.tsx +0 -214
- package/src/lib/components/molecules/button/index.tsx +0 -1
- package/src/lib/components/molecules/button/stories/button.stories.mdx +0 -105
- package/src/lib/components/molecules/button/stories/components.tsx +0 -84
- package/src/lib/components/molecules/index.ts +0 -3
- package/src/lib/components/molecules/input-checkbox/index.tsx +0 -1
- package/src/lib/components/molecules/input-checkbox/input-checkbox.test.tsx +0 -34
- package/src/lib/components/molecules/input-checkbox/input-checkbox.tsx +0 -49
- package/src/lib/components/molecules/input-checkbox/stories/components.tsx +0 -53
- package/src/lib/components/molecules/input-checkbox/stories/input-checkbox.stories.mdx +0 -49
- package/src/lib/components/organisms/index.ts +0 -1
- package/src/lib/components/organisms/multi-choice-list/index.tsx +0 -1
- package/src/lib/components/organisms/multi-choice-list/multi-choice-list.test.tsx +0 -33
- package/src/lib/components/organisms/multi-choice-list/multi-choice-list.tsx +0 -52
- package/src/lib/components/organisms/multi-choice-list/stories/components.tsx +0 -124
- package/src/lib/components/organisms/multi-choice-list/stories/multi-choice-list.stories.mdx +0 -99
- package/src/lib/components/spinner/index.tsx +0 -1
- package/src/lib/components/spinner/spinner-size-flags.tsx +0 -39
- package/src/lib/components/spinner/spinner.test.tsx +0 -31
- package/src/lib/components/spinner/spinner.tsx +0 -54
- package/src/lib/components/spinner/stories/components.tsx +0 -39
- package/src/lib/components/spinner/stories/spinner.stories.mdx +0 -35
- package/src/lib/components/tabs/components/index.ts +0 -1
- package/src/lib/components/tabs/components/tab.tsx +0 -62
- package/src/lib/components/tabs/index.tsx +0 -1
- package/src/lib/components/tabs/storybook/components.tsx +0 -282
- package/src/lib/components/tabs/storybook/tabs.stories.mdx +0 -97
- package/src/lib/components/tabs/tabs.test.tsx +0 -86
- package/src/lib/components/tabs/tabs.tsx +0 -101
- package/src/lib/components/tag/components/close-button.tsx +0 -85
- package/src/lib/components/tag/components/index.ts +0 -2
- package/src/lib/components/tag/components/tag-label.tsx +0 -44
- package/src/lib/components/tag/index.tsx +0 -1
- package/src/lib/components/tag/stories/components.tsx +0 -86
- package/src/lib/components/tag/stories/tag.stories.mdx +0 -42
- package/src/lib/components/tag/tag.test.tsx +0 -36
- package/src/lib/components/tag/tag.tsx +0 -33
- package/src/lib/components/thumbnail/index.tsx +0 -1
- package/src/lib/components/thumbnail/stories/thumbnail.stories.mdx +0 -34
- package/src/lib/components/thumbnail/thumbnail-size-flags.tsx +0 -41
- package/src/lib/components/thumbnail/thumbnail.test.tsx +0 -51
- package/src/lib/components/thumbnail/thumbnail.tsx +0 -45
- package/src/lib/components/typography/index.ts +0 -1
- package/src/lib/components/typography/storybook/components.tsx +0 -288
- package/src/lib/components/typography/storybook/typography.stories.mdx +0 -90
- package/src/lib/components/typography/typography.test.tsx +0 -97
- package/src/lib/components/typography/typography.tsx +0 -99
- package/src/lib/foundations/color-system/base-palette/base-palette.stories.tsx +0 -123
- package/src/lib/foundations/color-system/base-palette/base-palette.ts +0 -93
- package/src/lib/foundations/color-system/base-palette/index.ts +0 -1
- package/src/lib/foundations/color-system/color-guidelines/color-guidelines.stories.mdx +0 -85
- package/src/lib/foundations/color-system/color-guidelines/color-guidelines.stories.tsx +0 -231
- package/src/lib/foundations/color-system/color-guidelines/color-guidelines.ts +0 -160
- package/src/lib/foundations/color-system/color-guidelines/index.ts +0 -1
- package/src/lib/foundations/color-system/components/color-sample.tsx +0 -99
- package/src/lib/foundations/color-system/components/index.ts +0 -1
- package/src/lib/foundations/color-system/index.ts +0 -1
- package/src/lib/foundations/index.ts +0 -4
- package/src/lib/foundations/shadows/components.tsx +0 -59
- package/src/lib/foundations/shadows/index.ts +0 -1
- package/src/lib/foundations/shadows/shadows.stories.mdx +0 -71
- package/src/lib/foundations/shadows/shadows.tsx +0 -47
- package/src/lib/foundations/spacing/index.ts +0 -1
- package/src/lib/foundations/spacing/spacing-guidelines.ts +0 -24
- package/src/lib/foundations/spacing/spacing.stories.mdx +0 -51
- package/src/lib/foundations/spacing/spacing.ts +0 -18
- package/src/lib/foundations/typography/constants.ts +0 -25
- package/src/lib/foundations/typography/fonts.ts +0 -205
- package/src/lib/foundations/typography/index.tsx +0 -1
- package/src/lib/foundations/typography/text-aspect-flags.ts +0 -61
- package/src/lib/foundations/typography/typography.tsx +0 -102
- package/src/lib/helpers/generic-types.ts +0 -44
- package/src/lib/helpers/index.ts +0 -6
- package/src/lib/helpers/nothing.tsx +0 -18
- package/src/lib/helpers/safe-navigation.ts +0 -44
- package/src/lib/helpers/slots.test.tsx +0 -98
- package/src/lib/helpers/slots.tsx +0 -157
- package/src/lib/helpers/strings.test.ts +0 -47
- package/src/lib/helpers/strings.ts +0 -16
- package/tsconfig.json +0 -35
- package/tsconfig.lib.json +0 -28
- package/tsconfig.spec.json +0 -21
|
@@ -1,214 +0,0 @@
|
|
|
1
|
-
import styled from 'styled-components'
|
|
2
|
-
import { FC, is, isDefined, Nothing } from '@helpers'
|
|
3
|
-
import { Focused } from '@foundations'
|
|
4
|
-
import {
|
|
5
|
-
ButtonSizeProps,
|
|
6
|
-
getBackgroundColorByType,
|
|
7
|
-
getIsDisabled,
|
|
8
|
-
getTextColorByType,
|
|
9
|
-
getIconColorByType,
|
|
10
|
-
getTextColorIfDisabled,
|
|
11
|
-
getCursor,
|
|
12
|
-
getPaddingBySize,
|
|
13
|
-
getBackgroundColorHoverByType,
|
|
14
|
-
getTextDecorationHoverByType,
|
|
15
|
-
getTextColorOnHoverByType,
|
|
16
|
-
getIconColorOnHoverByType,
|
|
17
|
-
getBorderByType,
|
|
18
|
-
getPaddingByType,
|
|
19
|
-
getBackgroundColorDisabledByType,
|
|
20
|
-
getBorderDisabledByType,
|
|
21
|
-
ButtonType,
|
|
22
|
-
getBackgroundColorPressedByType,
|
|
23
|
-
getButtonType,
|
|
24
|
-
ButtonTypeProps,
|
|
25
|
-
} from './button-flags'
|
|
26
|
-
import { ComponentType } from 'react'
|
|
27
|
-
import { Label } from 'components/typography'
|
|
28
|
-
import { Spinner } from 'components/spinner'
|
|
29
|
-
|
|
30
|
-
const ButtonFrame = styled.button<{
|
|
31
|
-
backgroundColor: string
|
|
32
|
-
buttonSize: string
|
|
33
|
-
cursor: string
|
|
34
|
-
backgroundHover: string
|
|
35
|
-
textDecorationHover: string,
|
|
36
|
-
backgroundPressed: string
|
|
37
|
-
textColorHover: string
|
|
38
|
-
buttonBorder: string
|
|
39
|
-
isDisabled: boolean
|
|
40
|
-
iconColor: string
|
|
41
|
-
iconColorHover: string
|
|
42
|
-
}>`
|
|
43
|
-
padding: ${(props) => props.buttonSize};
|
|
44
|
-
border: ${(props) => props.buttonBorder};
|
|
45
|
-
border-radius: 6px;
|
|
46
|
-
background: ${(props) => props.backgroundColor};
|
|
47
|
-
cursor: ${(props) => props.cursor};
|
|
48
|
-
display: flex;
|
|
49
|
-
flex-direction: row;
|
|
50
|
-
justify-content: center;
|
|
51
|
-
gap: 8px;
|
|
52
|
-
align-items: center;
|
|
53
|
-
position: relative;
|
|
54
|
-
svg[role='icon'] {
|
|
55
|
-
path {
|
|
56
|
-
fill: ${(props) => props.iconColor};
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
${(props) =>
|
|
62
|
-
!props.isDisabled
|
|
63
|
-
? `
|
|
64
|
-
&:hover {
|
|
65
|
-
background: ${props.backgroundHover};
|
|
66
|
-
text-decoration: ${props.textDecorationHover};
|
|
67
|
-
div {
|
|
68
|
-
color: ${props.textColorHover};
|
|
69
|
-
}
|
|
70
|
-
svg[role='icon'] {
|
|
71
|
-
path {
|
|
72
|
-
fill: ${props.iconColorHover};
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
&:focus {
|
|
78
|
-
outline: 2px solid ${Focused.Default}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
&:focus-visible {
|
|
82
|
-
border: 2px solid ${Focused.Default}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
&:active {
|
|
86
|
-
text-decoration: 'none'
|
|
87
|
-
background: ${props.backgroundPressed}
|
|
88
|
-
}
|
|
89
|
-
`
|
|
90
|
-
: ''}
|
|
91
|
-
`
|
|
92
|
-
|
|
93
|
-
const ButtonText = styled(Label)<{ textColor: string, textColorDisabled: string, isLoading: boolean }>`
|
|
94
|
-
color: ${(props) =>
|
|
95
|
-
props.textColorDisabled !== '' ? props.textColorDisabled : props.textColor};
|
|
96
|
-
|
|
97
|
-
${(props) =>
|
|
98
|
-
props.isLoading
|
|
99
|
-
? `
|
|
100
|
-
opacity: 0;
|
|
101
|
-
`
|
|
102
|
-
: ''}
|
|
103
|
-
`
|
|
104
|
-
|
|
105
|
-
const IconContainer = styled.div<{ isLoading: boolean }>`
|
|
106
|
-
width: 20px;
|
|
107
|
-
${(props) =>
|
|
108
|
-
props.isLoading
|
|
109
|
-
? 'visibility: hidden;'
|
|
110
|
-
: ''
|
|
111
|
-
}
|
|
112
|
-
`
|
|
113
|
-
|
|
114
|
-
const Loading = styled(Spinner)`
|
|
115
|
-
position: absolute;
|
|
116
|
-
`
|
|
117
|
-
|
|
118
|
-
interface IButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
|
|
119
|
-
loading?: boolean
|
|
120
|
-
IconPrefix?: ComponentType
|
|
121
|
-
IconSuffix?: ComponentType
|
|
122
|
-
children?: string
|
|
123
|
-
subtle?: boolean
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
function makeButtonConfig(props: IButtonProps & ButtonTypeProps & ButtonSizeProps) {
|
|
127
|
-
const buttonType = getButtonType(props)
|
|
128
|
-
const isDisabled = getIsDisabled(props)
|
|
129
|
-
const backgroundColor = isDisabled
|
|
130
|
-
? getBackgroundColorDisabledByType(buttonType)
|
|
131
|
-
: getBackgroundColorByType(buttonType)
|
|
132
|
-
const buttonPadding = getPaddingBySize(props)
|
|
133
|
-
const buttonOverridePadding = getPaddingByType(buttonType)
|
|
134
|
-
const cursor = getCursor(props)
|
|
135
|
-
const backgroundHover = getBackgroundColorHoverByType(buttonType)
|
|
136
|
-
const textDecorationHover = getTextDecorationHoverByType(buttonType)
|
|
137
|
-
const backgroundPressed = getBackgroundColorPressedByType(buttonType)
|
|
138
|
-
const textColorHover = getTextColorOnHoverByType(buttonType)
|
|
139
|
-
const iconColorHover = getIconColorOnHoverByType(buttonType)
|
|
140
|
-
const buttonBorder = isDisabled
|
|
141
|
-
? getBorderDisabledByType(buttonType)
|
|
142
|
-
: getBorderByType(buttonType)
|
|
143
|
-
const buttonSize =
|
|
144
|
-
buttonOverridePadding !== '' ? buttonOverridePadding : buttonPadding
|
|
145
|
-
const textColor = getTextColorByType(buttonType)
|
|
146
|
-
const iconColor = getIconColorByType(buttonType)
|
|
147
|
-
const textColorDisabled = getTextColorIfDisabled(props)
|
|
148
|
-
|
|
149
|
-
return {
|
|
150
|
-
backgroundColor,
|
|
151
|
-
buttonSize,
|
|
152
|
-
cursor,
|
|
153
|
-
backgroundHover,
|
|
154
|
-
textDecorationHover,
|
|
155
|
-
backgroundPressed,
|
|
156
|
-
textColorHover,
|
|
157
|
-
iconColorHover,
|
|
158
|
-
buttonBorder,
|
|
159
|
-
isDisabled,
|
|
160
|
-
textColor,
|
|
161
|
-
iconColor,
|
|
162
|
-
textColorDisabled,
|
|
163
|
-
buttonType,
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
export const Button: FC<IButtonProps & ButtonTypeProps & ButtonSizeProps> = (
|
|
168
|
-
props
|
|
169
|
-
) => {
|
|
170
|
-
const {
|
|
171
|
-
children,
|
|
172
|
-
loading,
|
|
173
|
-
IconPrefix,
|
|
174
|
-
IconSuffix,
|
|
175
|
-
type = 'button',
|
|
176
|
-
...htmlProps
|
|
177
|
-
} = props
|
|
178
|
-
const { textColor, textColorDisabled, buttonType, ...buttonConfig } =
|
|
179
|
-
makeButtonConfig(props)
|
|
180
|
-
return (
|
|
181
|
-
<ButtonFrame {...htmlProps} type={type} {...buttonConfig} data-testid="button-test">
|
|
182
|
-
{isDefined(IconPrefix) ? (
|
|
183
|
-
<IconContainer isLoading={is(loading)}>
|
|
184
|
-
<IconPrefix />
|
|
185
|
-
</IconContainer>
|
|
186
|
-
) : <Nothing />}
|
|
187
|
-
<ButtonText
|
|
188
|
-
textColor={textColor}
|
|
189
|
-
textColorDisabled={textColorDisabled}
|
|
190
|
-
isLoading={is(loading)}
|
|
191
|
-
>
|
|
192
|
-
{children}
|
|
193
|
-
</ButtonText>
|
|
194
|
-
{is(loading) ? (
|
|
195
|
-
<Loading
|
|
196
|
-
small
|
|
197
|
-
onPrimary={
|
|
198
|
-
buttonType === ButtonType.primary ||
|
|
199
|
-
buttonType === ButtonType.destructivePrimary
|
|
200
|
-
}
|
|
201
|
-
/>
|
|
202
|
-
) : (
|
|
203
|
-
''
|
|
204
|
-
)}
|
|
205
|
-
|
|
206
|
-
{isDefined(IconSuffix) ? (
|
|
207
|
-
<IconContainer isLoading={is(loading)}>
|
|
208
|
-
<IconSuffix />
|
|
209
|
-
</IconContainer>
|
|
210
|
-
) : <Nothing />}
|
|
211
|
-
</ButtonFrame>
|
|
212
|
-
)
|
|
213
|
-
}
|
|
214
|
-
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './button'
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
import { Canvas, Meta, Story, ArgsTable } from '@storybook/addon-docs';
|
|
2
|
-
import { Button } from '../index'
|
|
3
|
-
import { IconMinor } from 'components/icon'
|
|
4
|
-
import { PlainHTMLFormExample, DisabledLoadingExample } from './components'
|
|
5
|
-
|
|
6
|
-
<Meta
|
|
7
|
-
title="Components/Button"
|
|
8
|
-
component={Button}
|
|
9
|
-
/>
|
|
10
|
-
|
|
11
|
-
# Button
|
|
12
|
-
|
|
13
|
-
For more details, check out the component page on [Figma](https://www.figma.com/file/ue1CurHfZ426o2T2l8Dk64/Edvisor-Product-Language?node-id=1008%3A1257)
|
|
14
|
-
|
|
15
|
-
## How to use
|
|
16
|
-
|
|
17
|
-
```javascript
|
|
18
|
-
// Import the component
|
|
19
|
-
import { Button } from './index'
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
// Render the component sending the required parameters
|
|
23
|
-
<Button primary label="SOME-label-HERE" />
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
## Properties
|
|
27
|
-
|
|
28
|
-
The Buttons accepts the same properties as a normal button and has some additional ones.
|
|
29
|
-
|
|
30
|
-
The available optional properties are as follows, try them out in the editable code sample below!
|
|
31
|
-
|
|
32
|
-
| Prop | Type | Description |
|
|
33
|
-
| ---------- | --------- | ------------------------------------------------------------------------ |
|
|
34
|
-
| `IconPrefix?` | `Icon` | It will add the given Icon before the text |
|
|
35
|
-
| `IconSuffix?` | `Icon` | It will add the given Icon after the text |
|
|
36
|
-
| `loading?` | `boolean` | Replaces the text for a loading icon |
|
|
37
|
-
| `size?` | `small / large` | Changes the size of the button. Leave it empty for the default size |
|
|
38
|
-
|
|
39
|
-
### Using as form controls
|
|
40
|
-
<PlainHTMLFormExample />
|
|
41
|
-
|
|
42
|
-
### Disabled until something is typed then loading until response
|
|
43
|
-
<DisabledLoadingExample />
|
|
44
|
-
|
|
45
|
-
## Examples
|
|
46
|
-
|
|
47
|
-
<Canvas>
|
|
48
|
-
<Button type="submit">Basic</Button>
|
|
49
|
-
<Button primary>Primary</Button>
|
|
50
|
-
<Button destructive>Destructive</Button>
|
|
51
|
-
<Button destructive primary>Destructive Primary</Button>
|
|
52
|
-
<Button outline>Outline</Button>
|
|
53
|
-
<Button plain>Plain</Button>
|
|
54
|
-
<Button plain subtle >Plain Subtle</Button>
|
|
55
|
-
</Canvas>
|
|
56
|
-
|
|
57
|
-
Disabled
|
|
58
|
-
<Canvas>
|
|
59
|
-
<Button disabled>Basic</Button>
|
|
60
|
-
<Button primary disabled>Primary</Button>
|
|
61
|
-
<Button destructive disabled>Destructive</Button>
|
|
62
|
-
<Button destructive primary disabled>Destructive Primary</Button>
|
|
63
|
-
<Button outline disabled>Outline</Button>
|
|
64
|
-
<Button plain disabled>Plain</Button>
|
|
65
|
-
<Button plain subtle disabled>Plain Subtle</Button>
|
|
66
|
-
</Canvas>
|
|
67
|
-
|
|
68
|
-
Loading
|
|
69
|
-
<Canvas>
|
|
70
|
-
<Button loading>Basic</Button>
|
|
71
|
-
<Button primary loading>Primary</Button>
|
|
72
|
-
<Button destructive loading>Destructive</Button>
|
|
73
|
-
<Button destructive primary loading>Destructive Primary</Button>
|
|
74
|
-
<Button outline loading>Outline</Button>
|
|
75
|
-
<Button plain loading>Plain</Button>
|
|
76
|
-
<Button plain subtle loading>Plain Subtle</Button>
|
|
77
|
-
</Canvas>
|
|
78
|
-
|
|
79
|
-
Icons
|
|
80
|
-
<Canvas>
|
|
81
|
-
<Button IconPrefix={IconMinor.Fire}>Basic</Button>
|
|
82
|
-
<Button primary IconPrefix={IconMinor.Fire}>Primary</Button>
|
|
83
|
-
<Button destructive IconPrefix={IconMinor.Fire}>Destructive</Button>
|
|
84
|
-
<Button destructive primary IconPrefix={IconMinor.Fire}>Destructive Primary</Button>
|
|
85
|
-
<Button outline IconPrefix={IconMinor.Fire}>Outline</Button>
|
|
86
|
-
<Button plain IconPrefix={IconMinor.Fire}>Plain</Button>
|
|
87
|
-
<Button plain subtle IconPrefix={IconMinor.Fire}>Plain Subtle</Button>
|
|
88
|
-
</Canvas>
|
|
89
|
-
|
|
90
|
-
<Canvas>
|
|
91
|
-
<Button IconSuffix={IconMinor.Fire}>Basic</Button>
|
|
92
|
-
<Button primary IconSuffix={IconMinor.Fire}>Primary</Button>
|
|
93
|
-
<Button destructive IconSuffix={IconMinor.Fire}>Destructive</Button>
|
|
94
|
-
<Button destructive primary IconSuffix={IconMinor.Fire}>Destructive Primary</Button>
|
|
95
|
-
<Button outline IconSuffix={IconMinor.Fire}>Outline</Button>
|
|
96
|
-
<Button plain IconSuffix={IconMinor.Fire}>Plain</Button>
|
|
97
|
-
<Button plain subtle IconSuffix={IconMinor.Fire}>Plain Subtle</Button>
|
|
98
|
-
</Canvas>
|
|
99
|
-
|
|
100
|
-
<Canvas>
|
|
101
|
-
<Button large>Large</Button>
|
|
102
|
-
<Button>Default</Button>
|
|
103
|
-
<Button small>Small</Button>
|
|
104
|
-
</Canvas>
|
|
105
|
-
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
import { Playground } from 'storybook-addon-jarle-monaco'
|
|
3
|
-
import { InputField } from '../../../input-field'
|
|
4
|
-
import { Button } from '../button'
|
|
5
|
-
|
|
6
|
-
export const PlainHTMLFormExample = () => (
|
|
7
|
-
<Playground
|
|
8
|
-
code={`
|
|
9
|
-
/* Edit this code sample! */
|
|
10
|
-
const [invalid, setInvalid] = useState(false);
|
|
11
|
-
|
|
12
|
-
<form onSubmit={(e) => e.preventDefault()}>
|
|
13
|
-
<label htmlFor="country_code">Country code:</label>
|
|
14
|
-
<InputField
|
|
15
|
-
type="text"
|
|
16
|
-
placeholder="Enter a country code..."
|
|
17
|
-
id="country_code"
|
|
18
|
-
name="country_code"
|
|
19
|
-
pattern="[A-Za-z]{3}"
|
|
20
|
-
onInvalid={setInvalid}
|
|
21
|
-
invalid={invalid}
|
|
22
|
-
onChange={() => setInvalid(false)}
|
|
23
|
-
title="Three letter country code"
|
|
24
|
-
required
|
|
25
|
-
/>
|
|
26
|
-
<div style={{display:'flex', gap:'8px'}}>
|
|
27
|
-
<Button type="reset">Clear</Button>
|
|
28
|
-
<Button primary type="submit">Send</Button>
|
|
29
|
-
</div>
|
|
30
|
-
</form>
|
|
31
|
-
`}
|
|
32
|
-
providerProps={{
|
|
33
|
-
renderAsComponent: true,
|
|
34
|
-
scope: {
|
|
35
|
-
InputField,
|
|
36
|
-
Button
|
|
37
|
-
},
|
|
38
|
-
}}
|
|
39
|
-
/>
|
|
40
|
-
)
|
|
41
|
-
|
|
42
|
-
export const DisabledLoadingExample = () => (
|
|
43
|
-
<Playground
|
|
44
|
-
code={`
|
|
45
|
-
/* Edit this code sample! */
|
|
46
|
-
const [invalid, setInvalid] = useState(false);
|
|
47
|
-
const [disabled, setDisabled] = useState(true);
|
|
48
|
-
const [loading, setLoading] = useState(false);
|
|
49
|
-
|
|
50
|
-
<form onSubmit={(e) => {
|
|
51
|
-
e.preventDefault();
|
|
52
|
-
setLoading(true)
|
|
53
|
-
setTimeout(() => setLoading(false), 2000)
|
|
54
|
-
}}>
|
|
55
|
-
<label htmlFor="country_code">Country code:</label>
|
|
56
|
-
<InputField
|
|
57
|
-
type="text"
|
|
58
|
-
placeholder="Enter a country code..."
|
|
59
|
-
id="country_code"
|
|
60
|
-
name="country_code"
|
|
61
|
-
pattern="[A-Za-z]{3}"
|
|
62
|
-
onInvalid={setInvalid}
|
|
63
|
-
invalid={invalid}
|
|
64
|
-
onChange={() => {
|
|
65
|
-
setInvalid(false);
|
|
66
|
-
setDisabled(false);
|
|
67
|
-
}}
|
|
68
|
-
title="Three letter country code"
|
|
69
|
-
required
|
|
70
|
-
/>
|
|
71
|
-
<div style={{display:'flex', gap:'8px'}}>
|
|
72
|
-
<Button primary type="submit" disabled={disabled} loading={loading}>Send</Button>
|
|
73
|
-
</div>
|
|
74
|
-
</form>
|
|
75
|
-
`}
|
|
76
|
-
providerProps={{
|
|
77
|
-
renderAsComponent: true,
|
|
78
|
-
scope: {
|
|
79
|
-
InputField,
|
|
80
|
-
Button
|
|
81
|
-
},
|
|
82
|
-
}}
|
|
83
|
-
/>
|
|
84
|
-
)
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './input-checkbox'
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import {render, screen } from '@testing-library/react'
|
|
2
|
-
import userEvent from '@testing-library/user-event'
|
|
3
|
-
import { InputCheckbox } from './input-checkbox'
|
|
4
|
-
|
|
5
|
-
describe('InputCheckbox Tests', () => {
|
|
6
|
-
it('should render the component and handle event after click', async () => {
|
|
7
|
-
const spyOnChange = jest.fn()
|
|
8
|
-
render(
|
|
9
|
-
<InputCheckbox
|
|
10
|
-
label='My Checkbox'
|
|
11
|
-
onChange={spyOnChange}
|
|
12
|
-
/>
|
|
13
|
-
)
|
|
14
|
-
|
|
15
|
-
expect(spyOnChange).not.toHaveBeenCalled()
|
|
16
|
-
const myComponent = screen.getByRole('checkbox')
|
|
17
|
-
expect(screen.getByText('My Checkbox')).toBeInTheDocument()
|
|
18
|
-
expect(myComponent).toBeInTheDocument()
|
|
19
|
-
|
|
20
|
-
await userEvent.click(myComponent)
|
|
21
|
-
|
|
22
|
-
expect(spyOnChange).toHaveBeenCalled()
|
|
23
|
-
})
|
|
24
|
-
it('should not render the component if dont receive a label', async () => {
|
|
25
|
-
const { container } = render(
|
|
26
|
-
<InputCheckbox
|
|
27
|
-
label=''
|
|
28
|
-
/>
|
|
29
|
-
)
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
expect(container).toBeEmptyDOMElement()
|
|
33
|
-
})
|
|
34
|
-
})
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { InputHTMLAttributes } from 'react'
|
|
2
|
-
import styled from 'styled-components'
|
|
3
|
-
import { FC, isDefined, isEmpty, Nothing } from '@helpers'
|
|
4
|
-
import { Margin } from '@foundations'
|
|
5
|
-
import { Checkbox } from '../../checkbox'
|
|
6
|
-
import { Label } from 'components/typography'
|
|
7
|
-
|
|
8
|
-
const Text = styled(Label)`
|
|
9
|
-
margin-left: ${Margin.xs};
|
|
10
|
-
user-select: none;
|
|
11
|
-
`
|
|
12
|
-
|
|
13
|
-
const Wrapper = styled.label`
|
|
14
|
-
display: flex;
|
|
15
|
-
width: 100%;
|
|
16
|
-
align-items: center;
|
|
17
|
-
`
|
|
18
|
-
|
|
19
|
-
export type IInputCheckboxProps = InputHTMLAttributes<HTMLInputElement> & {
|
|
20
|
-
label: string
|
|
21
|
-
error?: boolean
|
|
22
|
-
onChange?: (change: boolean) => void
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export const InputCheckbox: FC<IInputCheckboxProps> = (props) => {
|
|
26
|
-
const {
|
|
27
|
-
onChange,
|
|
28
|
-
label = '',
|
|
29
|
-
} = props
|
|
30
|
-
|
|
31
|
-
if (isEmpty(label)) {
|
|
32
|
-
return <Nothing />
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
return (
|
|
36
|
-
<Wrapper>
|
|
37
|
-
<Checkbox
|
|
38
|
-
{...props}
|
|
39
|
-
onChange={(e) => {
|
|
40
|
-
if (isDefined(onChange)) {
|
|
41
|
-
onChange(e.target.checked)
|
|
42
|
-
}
|
|
43
|
-
}}
|
|
44
|
-
name={isDefined(props.name) ? props.name : label}
|
|
45
|
-
/>
|
|
46
|
-
<Text>{label}</Text>
|
|
47
|
-
</Wrapper>
|
|
48
|
-
)
|
|
49
|
-
}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { Playground } from 'storybook-addon-jarle-monaco'
|
|
2
|
-
import styled from 'styled-components'
|
|
3
|
-
import { Margin } from '@foundations'
|
|
4
|
-
import { If } from '@helpers'
|
|
5
|
-
import { Button } from 'components/molecules/button'
|
|
6
|
-
import { Caption } from 'components/typography'
|
|
7
|
-
import { InputCheckbox } from '../input-checkbox'
|
|
8
|
-
|
|
9
|
-
const Fields = styled.div`
|
|
10
|
-
margin-bottom: ${Margin.s};
|
|
11
|
-
`
|
|
12
|
-
|
|
13
|
-
export const InputCheckboxExample = () => (
|
|
14
|
-
<Playground
|
|
15
|
-
code={`
|
|
16
|
-
/* Edit this code sample! */
|
|
17
|
-
const [withError, setWithError] = useState(false);
|
|
18
|
-
const [accepted, setAccepted] = useState(false);
|
|
19
|
-
|
|
20
|
-
<form onSubmit={(e) => {
|
|
21
|
-
e.preventDefault()
|
|
22
|
-
}}
|
|
23
|
-
>
|
|
24
|
-
<Fields>
|
|
25
|
-
<InputCheckbox
|
|
26
|
-
onInvalid={(e) => {
|
|
27
|
-
setWithError(true)
|
|
28
|
-
}}
|
|
29
|
-
error={withError}
|
|
30
|
-
onChange={(e) => {
|
|
31
|
-
setAccepted(!accepted)
|
|
32
|
-
setWithError(false)
|
|
33
|
-
}}
|
|
34
|
-
label="I accept the terms."
|
|
35
|
-
required />
|
|
36
|
-
<If is={accepted}><Caption subdued>You have accepted the terms.</Caption></If>
|
|
37
|
-
</Fields>
|
|
38
|
-
<Button primary type="submit">Submit</Button>
|
|
39
|
-
</form>
|
|
40
|
-
`}
|
|
41
|
-
providerProps={{
|
|
42
|
-
renderAsComponent: true,
|
|
43
|
-
scope: {
|
|
44
|
-
InputCheckbox,
|
|
45
|
-
Caption,
|
|
46
|
-
Button,
|
|
47
|
-
If,
|
|
48
|
-
Fields,
|
|
49
|
-
},
|
|
50
|
-
}}
|
|
51
|
-
/>
|
|
52
|
-
)
|
|
53
|
-
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { Canvas, Meta, Story } from '@storybook/addon-docs';
|
|
2
|
-
import { InputCheckbox } from '../input-checkbox'
|
|
3
|
-
import { InputCheckboxExample } from './components'
|
|
4
|
-
|
|
5
|
-
<Meta
|
|
6
|
-
title="Components/InputCheckbox"
|
|
7
|
-
component={InputCheckbox}
|
|
8
|
-
/>
|
|
9
|
-
|
|
10
|
-
# InputCheckbox
|
|
11
|
-
|
|
12
|
-
This is a molecule, composed by the atoms checkbox input and typography as well.
|
|
13
|
-
|
|
14
|
-
For more details, check out the component page on [Figma](https://www.figma.com/file/ue1CurHfZ426o2T2l8Dk64/Edvisor-Product-Language?node-id=1008%3A1257)
|
|
15
|
-
|
|
16
|
-
## How to use
|
|
17
|
-
|
|
18
|
-
```javascript
|
|
19
|
-
// Import the component
|
|
20
|
-
import { InputCheckbox } from './index'
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
// Render the component sending the required parameters
|
|
24
|
-
<InputCheckbox label="MY-TEXT-HERE" />
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
## Examples
|
|
28
|
-
|
|
29
|
-
<Canvas>
|
|
30
|
-
<InputCheckbox label="Burger" />
|
|
31
|
-
<InputCheckbox label="Fries" disabled />
|
|
32
|
-
<InputCheckbox label="Drink" error />
|
|
33
|
-
</Canvas>
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
## API
|
|
37
|
-
You can send all the possible values from Checkbox component.
|
|
38
|
-
Also, you can sen this parameters:
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
| Name | Type | Description | Required (Y/N)|
|
|
42
|
-
| ---- | ----- | ------ | ------- |
|
|
43
|
-
| `label` | `string` | `The label from the checkbox` | `Y` |
|
|
44
|
-
| `onChange` | `event` | `You can listen the changes from the component` | `N` |
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
## Playground
|
|
48
|
-
|
|
49
|
-
<InputCheckboxExample />
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './multi-choice-list'
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './multi-choice-list'
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { render, screen } from '@testing-library/react'
|
|
2
|
-
import { MultiChoiceList } from './multi-choice-list'
|
|
3
|
-
|
|
4
|
-
describe('MultiChoiceList Tests', () => {
|
|
5
|
-
it('should render the amount of checkbox matching with the options size', async () => {
|
|
6
|
-
render(
|
|
7
|
-
<MultiChoiceList options={[
|
|
8
|
-
{
|
|
9
|
-
label: 'My Awesome label',
|
|
10
|
-
id: 'My checkbox 1',
|
|
11
|
-
checked: true,
|
|
12
|
-
error: true,
|
|
13
|
-
helpfulMessage: 'Alternative text here',
|
|
14
|
-
},
|
|
15
|
-
{
|
|
16
|
-
label: 'My Awesome label',
|
|
17
|
-
id: 'My checkbox 2'
|
|
18
|
-
},
|
|
19
|
-
]}
|
|
20
|
-
/>
|
|
21
|
-
)
|
|
22
|
-
|
|
23
|
-
expect(screen.getByText('Alternative text here')).toBeInTheDocument()
|
|
24
|
-
expect(screen.getAllByRole('checkbox').length).toBe(2)
|
|
25
|
-
})
|
|
26
|
-
it('should not render anything if dont send valid options', async () => {
|
|
27
|
-
render(
|
|
28
|
-
<MultiChoiceList options={[]}
|
|
29
|
-
/>
|
|
30
|
-
)
|
|
31
|
-
expect(screen.queryAllByRole('checkbox').length).toBe(0)
|
|
32
|
-
})
|
|
33
|
-
})
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import styled from 'styled-components'
|
|
2
|
-
import { FC, isDefined, isEmpty, Nothing } from '@helpers'
|
|
3
|
-
import { Margin } from '@foundations'
|
|
4
|
-
import { Flex } from 'components/layout'
|
|
5
|
-
import { Label } from 'components/typography'
|
|
6
|
-
import { IInputCheckboxProps, InputCheckbox } from 'components/molecules/input-checkbox'
|
|
7
|
-
|
|
8
|
-
const HelpfulMessage = styled(Label)`
|
|
9
|
-
margin-top: ${Margin.xxs};
|
|
10
|
-
margin-left: ${Margin.xl};
|
|
11
|
-
user-select: none;
|
|
12
|
-
`
|
|
13
|
-
const Group = styled(Flex)`
|
|
14
|
-
width: 100%;
|
|
15
|
-
flex-direction: column;
|
|
16
|
-
gap: 18px;
|
|
17
|
-
`
|
|
18
|
-
interface IOption extends IInputCheckboxProps {
|
|
19
|
-
helpfulMessage?: string
|
|
20
|
-
}
|
|
21
|
-
interface IMultiChoiceList {
|
|
22
|
-
options: IOption[]
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export const MultiChoiceList: FC<IMultiChoiceList> = (props: IMultiChoiceList) => {
|
|
26
|
-
const { options } = props
|
|
27
|
-
|
|
28
|
-
if (isEmpty(options)) {
|
|
29
|
-
return <Nothing />
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
return (
|
|
33
|
-
<Group role="group">
|
|
34
|
-
{options.map((option:IOption) => (
|
|
35
|
-
<div key={option.id}>
|
|
36
|
-
<InputCheckbox
|
|
37
|
-
aria-describedby={isDefined(option.helpfulMessage)
|
|
38
|
-
? `${option.id}-id`
|
|
39
|
-
: ''
|
|
40
|
-
}
|
|
41
|
-
{...option}
|
|
42
|
-
/>
|
|
43
|
-
{isDefined(option.helpfulMessage) && (
|
|
44
|
-
<HelpfulMessage subdued id={`${option.id}-id`}>
|
|
45
|
-
{option.helpfulMessage}
|
|
46
|
-
</HelpfulMessage>
|
|
47
|
-
)}
|
|
48
|
-
</div>
|
|
49
|
-
))}
|
|
50
|
-
</Group>
|
|
51
|
-
)
|
|
52
|
-
}
|