@edvisor/product-language 0.10.5 → 0.10.7
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/.release-it.json +17 -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 +2 -27
- package/project.json +98 -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 +26 -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.test.tsx +93 -0
- package/src/lib/components/alert-banner/alert-banner.tsx +117 -0
- package/src/lib/components/alert-banner/alert-level-flags.ts +101 -0
- package/src/lib/components/alert-banner/index.ts +1 -0
- package/src/lib/components/alert-banner/storybook/alert-banner.stories.mdx +67 -0
- package/src/lib/components/alert-banner/storybook/components.tsx +124 -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} +16 -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 +3 -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 +227 -0
- package/src/lib/components/checkbox/checkbox.test.tsx +39 -0
- package/src/lib/components/checkbox/checkbox.tsx +70 -0
- package/src/lib/components/checkbox/helpers.tsx +98 -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/date-picker/components/custom-calendar.tsx +193 -0
- package/src/lib/components/date-picker/components/index.ts +1 -0
- package/src/lib/components/date-picker/data-picker.test.tsx +220 -0
- package/src/lib/components/date-picker/date-picker.tsx +10 -0
- package/src/lib/components/date-picker/helpers/date-picker-factory.tsx +210 -0
- package/src/lib/components/date-picker/index.ts +1 -0
- package/src/lib/components/date-picker/storybook/components.tsx +259 -0
- package/src/lib/components/date-picker/storybook/date-picker.stories.mdx +133 -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 +47 -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 +27 -0
- package/src/lib/components/input-field/components/index.ts +2 -0
- package/src/lib/components/input-field/components/labeled-input.tsx +57 -0
- package/src/lib/components/input-field/components/stepper.tsx +64 -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 +154 -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 +367 -0
- package/src/lib/components/input-field/storybook/input-field.stories.mdx +120 -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/modal/index.ts +3 -0
- package/src/lib/components/modal/modal-base.tsx +129 -0
- package/src/lib/components/modal/modal-destructive.tsx +70 -0
- package/src/lib/components/modal/modal.test.tsx +138 -0
- package/src/lib/components/modal/modal.tsx +114 -0
- package/src/lib/components/modal/storybook/components.tsx +105 -0
- package/src/lib/components/modal/storybook/modal-destructive.stories.mdx +31 -0
- package/src/lib/components/modal/storybook/modal.stories.mdx +50 -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 +213 -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 +90 -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 +50 -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/choice-list/choice-list.test.tsx +36 -0
- package/src/lib/components/organisms/choice-list/choice-list.tsx +72 -0
- package/src/lib/components/organisms/choice-list/index.tsx +1 -0
- package/src/lib/components/organisms/choice-list/stories/choice-list.stories.mdx +57 -0
- package/src/lib/components/organisms/choice-list/stories/components.tsx +45 -0
- package/src/lib/components/organisms/index.ts +2 -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 +53 -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/progress-bar/index.ts +1 -0
- package/src/lib/components/progress-bar/progress-bar-size-flags.tsx +37 -0
- package/src/lib/components/progress-bar/progress-bar.test.tsx +66 -0
- package/src/lib/components/progress-bar/progress-bar.tsx +42 -0
- package/src/lib/components/progress-bar/storybook/components.tsx +62 -0
- package/src/lib/components/progress-bar/storybook/progress-bar.stories.mdx +43 -0
- package/{lib/components/spinner/index.d.ts → src/lib/components/radio-button/index.tsx} +1 -1
- package/src/lib/components/radio-button/radio-button.tsx +135 -0
- package/src/lib/components/radio-button/radio.test.tsx +59 -0
- package/src/lib/components/radio-button/stories/components.tsx +36 -0
- package/src/lib/components/radio-button/stories/radio-button.stories.mdx +44 -0
- package/src/lib/components/range-slider/components/bar-chart.tsx +50 -0
- package/src/lib/components/range-slider/components/handle.tsx +58 -0
- package/src/lib/components/range-slider/components/rail.tsx +44 -0
- package/src/lib/components/range-slider/components/slider-component.tsx +98 -0
- package/src/lib/components/range-slider/components/slider-inputs.tsx +150 -0
- package/src/lib/components/range-slider/components/tick.tsx +51 -0
- package/src/lib/components/range-slider/components/track.tsx +67 -0
- package/src/lib/components/range-slider/index.tsx +2 -0
- package/src/lib/components/range-slider/range-slider.test.tsx +185 -0
- package/src/lib/components/range-slider/range-slider.tsx +132 -0
- package/src/lib/components/range-slider/slider.test.tsx +89 -0
- package/src/lib/components/range-slider/slider.tsx +80 -0
- package/src/lib/components/range-slider/stories/components.tsx +179 -0
- package/src/lib/components/range-slider/stories/range-slider.stories.mdx +84 -0
- package/src/lib/components/range-slider/types.ts +18 -0
- package/src/lib/components/select/components/helpers.tsx +62 -0
- package/src/lib/components/select/components/menu-container.tsx +73 -0
- package/src/lib/components/select/components/menu-list.tsx +232 -0
- package/src/lib/components/select/components/menu-row.tsx +43 -0
- package/src/lib/components/select/components/menu.tsx +134 -0
- package/src/lib/components/select/components/option.tsx +51 -0
- package/src/lib/components/select/components/select-label.tsx +10 -0
- package/src/lib/components/select/components/value-component-multi.tsx +40 -0
- package/src/lib/components/select/components/value-component-single.tsx +27 -0
- package/src/lib/components/select/components/value.tsx +370 -0
- package/src/lib/components/select/index.tsx +3 -0
- package/src/lib/components/select/select.test.tsx +148 -0
- package/src/lib/components/select/select.tsx +337 -0
- package/src/lib/components/select/storybook/components.tsx +999 -0
- package/src/lib/components/select/storybook/radio-group.tsx +157 -0
- package/src/lib/components/select/storybook/select.stories.mdx +172 -0
- package/src/lib/components/select/types.ts +149 -0
- package/src/lib/components/select/utils.ts +101 -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 +85 -0
- package/src/lib/components/tabs/index.tsx +1 -0
- package/src/lib/components/tabs/storybook/components.tsx +317 -0
- package/src/lib/components/tabs/storybook/tabs.stories.mdx +105 -0
- package/src/lib/components/tabs/tabs.test.tsx +86 -0
- package/src/lib/components/tabs/tabs.tsx +115 -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 +45 -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 +44 -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 +44 -0
- package/src/lib/components/tooltip/index.tsx +1 -0
- package/src/lib/components/tooltip/stories/components.tsx +224 -0
- package/src/lib/components/tooltip/stories/tooltip.stories.mdx +63 -0
- package/src/lib/components/tooltip/tooltip.test.tsx +22 -0
- package/src/lib/components/tooltip/tooltip.tsx +180 -0
- package/src/lib/components/tree-view/components/tree-node.tsx +203 -0
- package/src/lib/components/tree-view/helper.tsx +171 -0
- package/src/lib/components/tree-view/index.ts +2 -0
- package/src/lib/components/tree-view/stories/components.tsx +640 -0
- package/src/lib/components/tree-view/stories/tree-view.stories.mdx +127 -0
- package/src/lib/components/tree-view/tree-view.test.tsx +146 -0
- package/src/lib/components/tree-view/tree-view.tsx +168 -0
- package/src/lib/components/tree-view/types.tsx +70 -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 +37 -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 +8 -0
- package/src/lib/helpers/isReactElementOfType.test.tsx +108 -0
- package/src/lib/helpers/isReactElementOfType.ts +42 -0
- package/src/lib/helpers/nothing.tsx +22 -0
- package/{lib/helpers/numbers.d.ts → src/lib/helpers/numbers.ts} +67 -50
- package/src/lib/helpers/safe-navigation.ts +57 -0
- package/src/lib/helpers/slots.tsx +126 -0
- package/src/lib/helpers/strings.test.ts +47 -0
- package/src/lib/helpers/strings.ts +16 -0
- package/src/lib/helpers/useInputElementState.ts +56 -0
- package/src/lib/helpers/useKeyDown.ts +17 -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 -11339
- package/lib/components/alert-banner/alert-banner.d.ts +0 -15
- package/lib/components/alert-banner/alert-level-flags.d.ts +0 -18
- 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 -6
- package/lib/components/card/components/card-controls-slot.d.ts +0 -5
- 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 -3
- 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/helpers.d.ts +0 -12
- package/lib/components/checkbox/index.d.ts +0 -1
- package/lib/components/date-picker/components/custom-calendar.d.ts +0 -6
- package/lib/components/date-picker/components/index.d.ts +0 -1
- package/lib/components/date-picker/date-picker.d.ts +0 -4
- package/lib/components/date-picker/helpers/date-picker-factory.d.ts +0 -34
- package/lib/components/date-picker/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/flag/flag-size-flags.d.ts +0 -12
- package/lib/components/flag/flag.d.ts +0 -9
- package/lib/components/flag/flag.list.d.ts +0 -782
- package/lib/components/flag/index.d.ts +0 -1
- package/lib/components/icon/icon-list.d.ts +0 -132
- package/lib/components/icon/icon.d.ts +0 -131
- package/lib/components/icon/index.d.ts +0 -1
- package/lib/components/index.d.ts +0 -25
- package/lib/components/input-field/components/index.d.ts +0 -2
- package/lib/components/input-field/components/labeled-input.d.ts +0 -10
- 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 -26
- 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 -34
- package/lib/components/link/index.d.ts +0 -1
- package/lib/components/link/link.d.ts +0 -14
- package/lib/components/modal/index.d.ts +0 -3
- package/lib/components/modal/modal-base.d.ts +0 -28
- package/lib/components/modal/modal-destructive.d.ts +0 -11
- package/lib/components/modal/modal.d.ts +0 -13
- 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 -44
- package/lib/components/molecules/button/button.d.ts +0 -12
- 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/choice-list/choice-list.d.ts +0 -9
- package/lib/components/organisms/choice-list/index.d.ts +0 -1
- package/lib/components/organisms/index.d.ts +0 -2
- 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/progress-bar/index.d.ts +0 -1
- package/lib/components/progress-bar/progress-bar-size-flags.d.ts +0 -10
- package/lib/components/progress-bar/progress-bar.d.ts +0 -8
- package/lib/components/radio-button/index.d.ts +0 -1
- package/lib/components/radio-button/radio-button.d.ts +0 -10
- package/lib/components/range-slider/components/bar-chart.d.ts +0 -8
- package/lib/components/range-slider/components/handle.d.ts +0 -12
- package/lib/components/range-slider/components/rail.d.ts +0 -9
- package/lib/components/range-slider/components/slider-component.d.ts +0 -12
- package/lib/components/range-slider/components/slider-inputs.d.ts +0 -14
- package/lib/components/range-slider/components/tick.d.ts +0 -10
- package/lib/components/range-slider/components/track.d.ts +0 -11
- package/lib/components/range-slider/index.d.ts +0 -2
- package/lib/components/range-slider/range-slider.d.ts +0 -15
- package/lib/components/range-slider/slider.d.ts +0 -11
- package/lib/components/range-slider/types.d.ts +0 -11
- package/lib/components/select/components/helpers.d.ts +0 -17
- package/lib/components/select/components/menu-container.d.ts +0 -3
- package/lib/components/select/components/menu-list.d.ts +0 -3
- package/lib/components/select/components/menu-row.d.ts +0 -9
- package/lib/components/select/components/menu.d.ts +0 -3
- package/lib/components/select/components/option.d.ts +0 -3
- package/lib/components/select/components/select-label.d.ts +0 -1
- package/lib/components/select/components/value-component-multi.d.ts +0 -4
- package/lib/components/select/components/value-component-single.d.ts +0 -4
- package/lib/components/select/components/value.d.ts +0 -4
- package/lib/components/select/index.d.ts +0 -3
- package/lib/components/select/select.d.ts +0 -10
- package/lib/components/select/types.d.ts +0 -133
- package/lib/components/select/utils.d.ts +0 -15
- package/lib/components/spinner/spinner-size-flags.d.ts +0 -10
- package/lib/components/spinner/spinner.d.ts +0 -9
- package/lib/components/tabs/components/index.d.ts +0 -1
- package/lib/components/tabs/components/tab.d.ts +0 -8
- package/lib/components/tabs/index.d.ts +0 -1
- package/lib/components/tabs/tabs.d.ts +0 -16
- package/lib/components/tag/components/close-button.d.ts +0 -8
- package/lib/components/tag/components/index.d.ts +0 -2
- package/lib/components/tag/components/tag-label.d.ts +0 -8
- package/lib/components/tag/index.d.ts +0 -1
- package/lib/components/tag/tag.d.ts +0 -10
- 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 -10
- package/lib/components/tooltip/index.d.ts +0 -1
- package/lib/components/tooltip/tooltip.d.ts +0 -26
- package/lib/components/tree-view/components/tree-node.d.ts +0 -3
- package/lib/components/tree-view/helper.d.ts +0 -12
- package/lib/components/tree-view/index.d.ts +0 -2
- package/lib/components/tree-view/tree-view.d.ts +0 -3
- package/lib/components/tree-view/types.d.ts +0 -63
- package/lib/components/typography/index.d.ts +0 -1
- package/lib/components/typography/typography.d.ts +0 -24
- package/lib/foundations/color-system/base-palette/base-palette.d.ts +0 -76
- package/lib/foundations/color-system/base-palette/index.d.ts +0 -1
- package/lib/foundations/color-system/color-guidelines/color-guidelines.d.ts +0 -133
- 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 -33
- package/lib/foundations/spacing/spacing.d.ts +0 -18
- package/lib/foundations/typography/constants.d.ts +0 -22
- package/lib/foundations/typography/fonts.d.ts +0 -1
- package/lib/foundations/typography/index.d.ts +0 -1
- package/lib/foundations/typography/text-aspect-flags.d.ts +0 -19
- package/lib/foundations/typography/typography.d.ts +0 -24
- package/lib/helpers/generic-types.d.ts +0 -21
- package/lib/helpers/index.d.ts +0 -8
- package/lib/helpers/isReactElementOfType.d.ts +0 -8
- package/lib/helpers/nothing.d.ts +0 -10
- package/lib/helpers/safe-navigation.d.ts +0 -17
- package/lib/helpers/slots.d.ts +0 -17
- package/lib/helpers/strings.d.ts +0 -1
- package/lib/helpers/useInputElementState.d.ts +0 -30
- package/lib/helpers/useKeyDown.d.ts +0 -1
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
Components
|
|
2
|
+
==========
|
|
3
|
+
|
|
4
|
+
This folder contains the components that will be exported from the Product Language and used in the front-end.
|
|
5
|
+
|
|
6
|
+
```
|
|
7
|
+
/src
|
|
8
|
+
/lib
|
|
9
|
+
/components
|
|
10
|
+
/alert-banner
|
|
11
|
+
/card
|
|
12
|
+
index.ts
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
The index.ts file is a manifest and anything in the manifest will be available the clients.
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
/src
|
|
19
|
+
/lib
|
|
20
|
+
/components
|
|
21
|
+
/alert-banner
|
|
22
|
+
/card
|
|
23
|
+
/components
|
|
24
|
+
/helpers
|
|
25
|
+
index.tsx
|
|
26
|
+
card.tsx
|
|
27
|
+
card.stories.tsx
|
|
28
|
+
card.spec.ts
|
|
29
|
+
index.ts
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
inside of any component, like `card` you will find another index.ts file. This is a manifest and it should only declare the main file of the component as an export:
|
|
33
|
+
|
|
34
|
+
```ts
|
|
35
|
+
export * from './card'
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
None of the specs, stories, sub-components, helpers, or any other kind of thing should appear in the manifest. Using manifests like this allows us to give each component a rich eco-system of helpers and sub-components without needing to move everything to a global scope.
|
|
39
|
+
|
|
40
|
+
For example, here is a helper in card/helpers.ts
|
|
41
|
+
|
|
42
|
+
```ts
|
|
43
|
+
// this is not a real helper, just an example
|
|
44
|
+
export function makeCardTitle (title: string) {
|
|
45
|
+
return `Card: ${title}`
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
This helper is obviously tightly coupled to the card "concern". It should not be declared in a global helpers file, that wouldn't make sense and it would lower cohesion in the app. In addition, it should not be exported from the manifest, since it is not intended for the client to use it.
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { render, screen } from '@testing-library/react'
|
|
2
|
+
import userEvent from '@testing-library/user-event'
|
|
3
|
+
import { AlertBanner } from './alert-banner'
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
describe('Alert banner tests', () => {
|
|
7
|
+
it('should render the alert banner when attribute open is true', async () => {
|
|
8
|
+
render (
|
|
9
|
+
<AlertBanner
|
|
10
|
+
open={true}
|
|
11
|
+
onClose={() => { return }}
|
|
12
|
+
>
|
|
13
|
+
Alert Banner
|
|
14
|
+
</AlertBanner>
|
|
15
|
+
)
|
|
16
|
+
expect(screen.getByRole('alert')).toBeInTheDocument()
|
|
17
|
+
})
|
|
18
|
+
it('should not render the close button by default', async () => {
|
|
19
|
+
const handleClose = jest.fn()
|
|
20
|
+
|
|
21
|
+
render (
|
|
22
|
+
<AlertBanner
|
|
23
|
+
open={true}
|
|
24
|
+
onClose={handleClose}
|
|
25
|
+
>
|
|
26
|
+
Alert Banner
|
|
27
|
+
</AlertBanner>
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
expect(handleClose).not.toHaveBeenCalled()
|
|
31
|
+
const closeButton = screen.queryByLabelText('Close')
|
|
32
|
+
expect(closeButton).not.toBeInTheDocument()
|
|
33
|
+
|
|
34
|
+
})
|
|
35
|
+
it('should render the close button and handle the close function', async () => {
|
|
36
|
+
const handleClose = jest.fn()
|
|
37
|
+
|
|
38
|
+
render (
|
|
39
|
+
<AlertBanner
|
|
40
|
+
open={true}
|
|
41
|
+
onClose={handleClose}
|
|
42
|
+
dismissible={true}
|
|
43
|
+
>
|
|
44
|
+
Alert Banner
|
|
45
|
+
</AlertBanner>
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
expect(handleClose).not.toHaveBeenCalled()
|
|
49
|
+
const closeButton = screen.getByLabelText('Close')
|
|
50
|
+
expect(closeButton).toBeInTheDocument()
|
|
51
|
+
await userEvent.click(closeButton)
|
|
52
|
+
expect(handleClose).toHaveBeenCalled()
|
|
53
|
+
|
|
54
|
+
})
|
|
55
|
+
it('should render the primary action button and handle event after click', async () => {
|
|
56
|
+
const handlePrimaryButtonClick = jest.fn()
|
|
57
|
+
|
|
58
|
+
render (
|
|
59
|
+
<AlertBanner
|
|
60
|
+
primaryButtonLabel="Do thing!"
|
|
61
|
+
onPrimaryAction={handlePrimaryButtonClick}
|
|
62
|
+
>
|
|
63
|
+
Alert Banner
|
|
64
|
+
</AlertBanner>
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
expect(handlePrimaryButtonClick).not.toHaveBeenCalled()
|
|
68
|
+
const primaryButton = screen.getByText('Do thing!')
|
|
69
|
+
expect(primaryButton).toBeInTheDocument()
|
|
70
|
+
await userEvent.click(primaryButton)
|
|
71
|
+
expect(handlePrimaryButtonClick).toHaveBeenCalled()
|
|
72
|
+
|
|
73
|
+
})
|
|
74
|
+
it('should render the secondary action button and handle event after click', async () => {
|
|
75
|
+
const handleSecondaryButtonClick = jest.fn()
|
|
76
|
+
|
|
77
|
+
render (
|
|
78
|
+
<AlertBanner
|
|
79
|
+
secondaryButtonLabel="Do other thing!"
|
|
80
|
+
onSecondaryAction={handleSecondaryButtonClick}
|
|
81
|
+
>
|
|
82
|
+
Alert Banner
|
|
83
|
+
</AlertBanner>
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
expect(handleSecondaryButtonClick).not.toHaveBeenCalled()
|
|
87
|
+
const primaryButton = screen.getByText('Do other thing!')
|
|
88
|
+
expect(primaryButton).toBeInTheDocument()
|
|
89
|
+
await userEvent.click(primaryButton)
|
|
90
|
+
expect(handleSecondaryButtonClick).toHaveBeenCalled()
|
|
91
|
+
|
|
92
|
+
})
|
|
93
|
+
})
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import styled from 'styled-components'
|
|
2
|
+
import { FC, Hex, is, isDefined, Nothing, PropsWithChildren, safeCallback } from '@helpers'
|
|
3
|
+
import { AlertLevelProps, getBackgroundColor, getBorderColor, getIcon } from './alert-level-flags'
|
|
4
|
+
import { Gap, Padding } from '@foundations'
|
|
5
|
+
import { CardFrame } from 'components/card/atoms'
|
|
6
|
+
import { IconMinor } from 'components/icon'
|
|
7
|
+
import { Button } from 'components/molecules/button'
|
|
8
|
+
import { Body} from 'components/typography'
|
|
9
|
+
interface IAlertBannerProps extends PropsWithChildren {
|
|
10
|
+
dismissible?: boolean
|
|
11
|
+
className?: string
|
|
12
|
+
open?: boolean
|
|
13
|
+
primaryButtonLabel?: string
|
|
14
|
+
secondaryButtonLabel?: string
|
|
15
|
+
onPrimaryAction?: () => void
|
|
16
|
+
onSecondaryAction?: () => void
|
|
17
|
+
onClose?: () => void
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export type AlertBannerProps = IAlertBannerProps & AlertLevelProps
|
|
21
|
+
|
|
22
|
+
const InCardFrame = styled(CardFrame).attrs({ as: 'div' })<{ background: Hex, border: Hex}>`
|
|
23
|
+
display: flex;
|
|
24
|
+
padding: ${Padding.m};
|
|
25
|
+
width: fill-available;
|
|
26
|
+
position: relative;
|
|
27
|
+
flex-wrap: wrap;
|
|
28
|
+
background: ${({ background }) => background};
|
|
29
|
+
border: 1px solid ${({ border }) => border};
|
|
30
|
+
`
|
|
31
|
+
|
|
32
|
+
const IconContainer = styled.div<{ iconColor: Hex }>`
|
|
33
|
+
width: fit-content;
|
|
34
|
+
svg[role='icon'] {
|
|
35
|
+
position: initial;
|
|
36
|
+
path {
|
|
37
|
+
fill: ${(props) => props.iconColor};
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
`
|
|
41
|
+
|
|
42
|
+
const AlertFooter = styled.footer`
|
|
43
|
+
width: 100%;
|
|
44
|
+
padding: ${Padding.m} ${Padding.xl} ${Padding.none} ;
|
|
45
|
+
bottom: 0;
|
|
46
|
+
box-sizing: border-box;
|
|
47
|
+
display: flex;
|
|
48
|
+
gap: ${Gap.xs};
|
|
49
|
+
`
|
|
50
|
+
|
|
51
|
+
const Content = styled(Body)`
|
|
52
|
+
padding-left: ${Padding.m};
|
|
53
|
+
flex: 1;
|
|
54
|
+
overflow: auto;
|
|
55
|
+
`
|
|
56
|
+
|
|
57
|
+
const CloseButton = styled(IconMinor.Xmark)`
|
|
58
|
+
cursor: pointer;
|
|
59
|
+
position: absolute;
|
|
60
|
+
top: 12px;
|
|
61
|
+
right: 12px;
|
|
62
|
+
border-radius: 3px;
|
|
63
|
+
`
|
|
64
|
+
|
|
65
|
+
export const AlertBanner: FC<AlertBannerProps> = (props) => {
|
|
66
|
+
const {
|
|
67
|
+
open = true,
|
|
68
|
+
dismissible = false,
|
|
69
|
+
primaryButtonLabel,
|
|
70
|
+
secondaryButtonLabel,
|
|
71
|
+
onPrimaryAction,
|
|
72
|
+
onSecondaryAction,
|
|
73
|
+
onClose,
|
|
74
|
+
} = props
|
|
75
|
+
|
|
76
|
+
const background = getBackgroundColor(props)
|
|
77
|
+
const border = getBorderColor(props)
|
|
78
|
+
|
|
79
|
+
const { icon: LevelIcon, color: iconColor } = getIcon(props)
|
|
80
|
+
|
|
81
|
+
const handleClose = () => {
|
|
82
|
+
safeCallback(onClose)
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
if(!is(open)) {
|
|
86
|
+
return <Nothing />
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return (
|
|
90
|
+
<InCardFrame role="alert" background={background} border={border} className={props.className}>
|
|
91
|
+
<IconContainer iconColor={iconColor}>
|
|
92
|
+
<LevelIcon></LevelIcon>
|
|
93
|
+
</IconContainer>
|
|
94
|
+
<Content>
|
|
95
|
+
{props.children}
|
|
96
|
+
</Content>
|
|
97
|
+
{ is(dismissible)
|
|
98
|
+
? <CloseButton aria-label="Close" onClick={handleClose}></CloseButton>
|
|
99
|
+
: <Nothing></Nothing>
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
{ isDefined(primaryButtonLabel) || isDefined(secondaryButtonLabel)
|
|
103
|
+
? <AlertFooter>
|
|
104
|
+
{ isDefined(primaryButtonLabel)
|
|
105
|
+
? <Button outline onClick={onPrimaryAction} name="alert-banner-primary-button">{primaryButtonLabel}</Button>
|
|
106
|
+
: <Nothing />
|
|
107
|
+
}
|
|
108
|
+
{ isDefined(secondaryButtonLabel)
|
|
109
|
+
? <Button plain subtle onClick={onSecondaryAction} name="alert-banner-secondary-button">{secondaryButtonLabel}</Button>
|
|
110
|
+
: <Nothing />
|
|
111
|
+
}
|
|
112
|
+
</AlertFooter>
|
|
113
|
+
: <Nothing />
|
|
114
|
+
}
|
|
115
|
+
</InCardFrame>
|
|
116
|
+
)
|
|
117
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
// this file was generated, but it is safe to modify
|
|
2
|
+
import { Borders, Surface, Icons } from '@foundations'
|
|
3
|
+
import { bitwiseOr, Hex, MappedEnum, RequireOnlyOne, PropsWithChildren } from '@helpers'
|
|
4
|
+
import { ComponentType } from 'react'
|
|
5
|
+
import { Icon } from '../icon'
|
|
6
|
+
|
|
7
|
+
const enum AlertLevel {
|
|
8
|
+
neutral = 1,
|
|
9
|
+
info = 2,
|
|
10
|
+
success = 4,
|
|
11
|
+
warning = 8,
|
|
12
|
+
critical = 16,
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
type AlertLevels<T> = MappedEnum<typeof AlertLevel, T>
|
|
16
|
+
|
|
17
|
+
function toAlertLevel(n: number): AlertLevel {
|
|
18
|
+
switch (n) {
|
|
19
|
+
case AlertLevel.neutral:
|
|
20
|
+
return AlertLevel.neutral
|
|
21
|
+
case AlertLevel.info:
|
|
22
|
+
return AlertLevel.info
|
|
23
|
+
case AlertLevel.success:
|
|
24
|
+
return AlertLevel.success
|
|
25
|
+
case AlertLevel.warning:
|
|
26
|
+
return AlertLevel.warning
|
|
27
|
+
case AlertLevel.critical:
|
|
28
|
+
return AlertLevel.critical
|
|
29
|
+
default:
|
|
30
|
+
return AlertLevel.neutral
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export type AlertLevelProps = Partial<RequireOnlyOne<AlertLevels<boolean>>> &
|
|
35
|
+
PropsWithChildren
|
|
36
|
+
|
|
37
|
+
const AlertLevelBackgroundColors = {
|
|
38
|
+
[AlertLevel.neutral]: Surface.Neutral.Subdued,
|
|
39
|
+
[AlertLevel.info]: Surface.Highlight.Subdued,
|
|
40
|
+
[AlertLevel.success]: Surface.Success.Subdued,
|
|
41
|
+
[AlertLevel.warning]: Surface.Warning.Subdued,
|
|
42
|
+
[AlertLevel.critical]: Surface.Critical.Subdued,
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const AlertLevelBorderColors = {
|
|
46
|
+
[AlertLevel.neutral]: Borders.Default.Default,
|
|
47
|
+
[AlertLevel.info]: Borders.Highlight.Subdued,
|
|
48
|
+
[AlertLevel.success]: Borders.Success.Subdued,
|
|
49
|
+
[AlertLevel.warning]: Borders.Warning.Subdued,
|
|
50
|
+
[AlertLevel.critical]: Borders.Critical.Subdued,
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const AlertLevelIcons = {
|
|
54
|
+
[AlertLevel.neutral]: { icon: Icon.CircleInfo, color: Icons.Default },
|
|
55
|
+
[AlertLevel.info]: { icon: Icon.CircleInfo, color: Icons.Highlight },
|
|
56
|
+
[AlertLevel.success]: { icon: Icon.CircleCheck, color: Icons.Success },
|
|
57
|
+
[AlertLevel.warning]: { icon: Icon.TriangleExclamation, color: Icons.Warning },
|
|
58
|
+
[AlertLevel.critical]: { icon: Icon.DiamondExclamation, color: Icons.Critical },
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function getBackgroundColor(props: AlertLevelProps): Hex {
|
|
62
|
+
return AlertLevelBackgroundColors[
|
|
63
|
+
toAlertLevel(
|
|
64
|
+
bitwiseOr([
|
|
65
|
+
props.neutral,
|
|
66
|
+
props.info,
|
|
67
|
+
props.success,
|
|
68
|
+
props.warning,
|
|
69
|
+
props.critical,
|
|
70
|
+
])
|
|
71
|
+
)
|
|
72
|
+
]
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export function getBorderColor(props: AlertLevelProps): Hex {
|
|
76
|
+
return AlertLevelBorderColors[
|
|
77
|
+
toAlertLevel(
|
|
78
|
+
bitwiseOr([
|
|
79
|
+
props.neutral,
|
|
80
|
+
props.info,
|
|
81
|
+
props.success,
|
|
82
|
+
props.warning,
|
|
83
|
+
props.critical,
|
|
84
|
+
])
|
|
85
|
+
)
|
|
86
|
+
]
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export function getIcon(props: AlertLevelProps): { icon: ComponentType, color: Hex } {
|
|
90
|
+
return AlertLevelIcons[
|
|
91
|
+
toAlertLevel(
|
|
92
|
+
bitwiseOr([
|
|
93
|
+
props.neutral,
|
|
94
|
+
props.info,
|
|
95
|
+
props.success,
|
|
96
|
+
props.warning,
|
|
97
|
+
props.critical,
|
|
98
|
+
])
|
|
99
|
+
)
|
|
100
|
+
]
|
|
101
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './alert-banner'
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { Canvas, Meta, Story } from '@storybook/addon-docs';
|
|
2
|
+
import { Card, SpaceBetween } from '@components'
|
|
3
|
+
import {
|
|
4
|
+
SimpleAlertBanner,
|
|
5
|
+
TypeVariantAlertBanner,
|
|
6
|
+
DismissibleAlertBanner,
|
|
7
|
+
ActionsAlertBanner
|
|
8
|
+
} from './components'
|
|
9
|
+
|
|
10
|
+
import { AlertBanner } from '../alert-banner'
|
|
11
|
+
import { Heading3, Body } from '../../typography'
|
|
12
|
+
|
|
13
|
+
<Meta title="Components/AlertBanner" component={AlertBanner}/>
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
# Alert Banner
|
|
17
|
+
• Alert Banners informs user about important changes or persistent conditions.
|
|
18
|
+
Use this component if you need to communicate to users in a prominent way.
|
|
19
|
+
|
|
20
|
+
For more details, check out the component page on [Figma](https://www.figma.com/file/ue1CurHfZ426o2T2l8Dk64/Edvisor-Product-Language?node-id=1082%3A1049&t=lBbNjmK8G41XPGz9-0)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
## How to use
|
|
24
|
+
|
|
25
|
+
```javascript
|
|
26
|
+
// Import the component
|
|
27
|
+
import { AlertBanner } from './index'
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
// Render the component sending the parameters
|
|
31
|
+
<AlertBanner default>
|
|
32
|
+
<div> Content </div>
|
|
33
|
+
</AlertBanner>
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Simple Alert Banner
|
|
38
|
+
<SimpleAlertBanner />
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
### Alert Banner with different type
|
|
43
|
+
The possible values are `neutral` \| `info` \| `success` \| `warning` \| `critical`
|
|
44
|
+
<TypeVariantAlertBanner />
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
### Dismissible alert banner
|
|
48
|
+
|
|
49
|
+
<DismissibleAlertBanner/>
|
|
50
|
+
|
|
51
|
+
### Alert banner with action buttons
|
|
52
|
+
<ActionsAlertBanner />
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
## API
|
|
56
|
+
|
|
57
|
+
| Name | Type | Description |
|
|
58
|
+
| ----------------------------------------------------- ----- | ------------ | --------------------------------------------------------- |
|
|
59
|
+
| `dismissible?` | `boolean` | Defines if the user can dismiss alert |
|
|
60
|
+
| `className?` | `string` | Class to be attached to the Container |
|
|
61
|
+
| `open?` | `boolean` | Defines if the alert is visible on screen |
|
|
62
|
+
| `primaryButtonLabel?` | `boolean` | Text on the primary button |
|
|
63
|
+
| `secondaryButtonLabel?` | `boolean` | Text on the secondary button |
|
|
64
|
+
| `onPrimaryAction?` | `() => void` | Primary button event handler function |
|
|
65
|
+
| `onSecondaryAction?` | `() => void` | Secondary button event handler function |
|
|
66
|
+
| `onClose?` | `() => void` | Callback function invoked to close the alert banner |
|
|
67
|
+
| `neutral` \| `info` \| `success` \| `warning` \| `critical` | boolean | Define the color and icons of the alert |
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
|
|
2
|
+
import { AlertBanner } from '../alert-banner'
|
|
3
|
+
import { Button, Body, Heading3 } from '@components'
|
|
4
|
+
import { Margin } from '@foundations'
|
|
5
|
+
import styled from 'styled-components'
|
|
6
|
+
import { CardPlayground } from '@stories'
|
|
7
|
+
|
|
8
|
+
const ToggleButton = styled(Button)`
|
|
9
|
+
margin-bottom: ${Margin.s};
|
|
10
|
+
`
|
|
11
|
+
|
|
12
|
+
const AlertBannerHeading = styled(Heading3)`
|
|
13
|
+
margin-bottom: ${Margin.xs};
|
|
14
|
+
`
|
|
15
|
+
|
|
16
|
+
export const SimpleAlertBanner = () => (
|
|
17
|
+
<CardPlayground
|
|
18
|
+
code={`
|
|
19
|
+
const [isOpen, setIsOpen] = useState(true);
|
|
20
|
+
|
|
21
|
+
<>
|
|
22
|
+
<AlertBanner>
|
|
23
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
|
24
|
+
</AlertBanner>
|
|
25
|
+
</>
|
|
26
|
+
`}
|
|
27
|
+
providerProps={{
|
|
28
|
+
renderAsComponent: true,
|
|
29
|
+
scope: {
|
|
30
|
+
AlertBanner,
|
|
31
|
+
},
|
|
32
|
+
}}
|
|
33
|
+
/>
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
export const TypeVariantAlertBanner = () => (
|
|
38
|
+
<CardPlayground
|
|
39
|
+
code={`
|
|
40
|
+
const [isOpen, setIsOpen] = useState(true);
|
|
41
|
+
|
|
42
|
+
<>
|
|
43
|
+
<AlertBanner warning>
|
|
44
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
|
45
|
+
</AlertBanner>
|
|
46
|
+
</>
|
|
47
|
+
`}
|
|
48
|
+
providerProps={{
|
|
49
|
+
renderAsComponent: true,
|
|
50
|
+
scope: {
|
|
51
|
+
AlertBanner,
|
|
52
|
+
},
|
|
53
|
+
}}
|
|
54
|
+
/>
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
export const DismissibleAlertBanner = () => (
|
|
58
|
+
<CardPlayground
|
|
59
|
+
code={`
|
|
60
|
+
const [isOpen, setIsOpen] = useState(true);
|
|
61
|
+
|
|
62
|
+
<>
|
|
63
|
+
<ToggleButton onClick={() => setIsOpen(!isOpen)}>{isOpen ? 'Close' : 'Open'} the alert banner!</ToggleButton>
|
|
64
|
+
<AlertBanner
|
|
65
|
+
info
|
|
66
|
+
dismissible={true}
|
|
67
|
+
open={isOpen}
|
|
68
|
+
onClose={() => setIsOpen(false)}
|
|
69
|
+
>
|
|
70
|
+
<AlertBannerHeading>Info</AlertBannerHeading>
|
|
71
|
+
<Body>
|
|
72
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
|
73
|
+
Arcu mollis viverra duis in scelerisque condimentum aenean sit
|
|
74
|
+
turpis. Donec dictum bibendum non tristique placerat aliquet massa, odi.
|
|
75
|
+
</Body>
|
|
76
|
+
</AlertBanner>
|
|
77
|
+
</>
|
|
78
|
+
`}
|
|
79
|
+
providerProps={{
|
|
80
|
+
renderAsComponent: true,
|
|
81
|
+
scope: {
|
|
82
|
+
AlertBannerHeading,
|
|
83
|
+
AlertBanner,
|
|
84
|
+
Body,
|
|
85
|
+
ToggleButton
|
|
86
|
+
},
|
|
87
|
+
}}
|
|
88
|
+
/>
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
export const ActionsAlertBanner = () => (
|
|
93
|
+
<CardPlayground
|
|
94
|
+
code={`
|
|
95
|
+
const [isOpen, setIsOpen] = useState(true);
|
|
96
|
+
|
|
97
|
+
<>
|
|
98
|
+
<AlertBanner
|
|
99
|
+
success
|
|
100
|
+
primaryButtonLabel="Take the blue pill"
|
|
101
|
+
secondaryButtonLabel="Take the red pill"
|
|
102
|
+
onPrimaryAction={() => alert("Nice choice")}
|
|
103
|
+
onSecondaryAction={() => alert("Wrong choice")}
|
|
104
|
+
>
|
|
105
|
+
<AlertBannerHeading>Success</AlertBannerHeading>
|
|
106
|
+
<Body>
|
|
107
|
+
Bacon ipsum dolor amet tongue turducken frankfurter biltong meatloaf
|
|
108
|
+
andouille bresaola jowl. Ham pastrami tongue capicola kielbasa prosciutto short ribs flank beef.
|
|
109
|
+
Pastrami shank venison tri-tip, bresaola landjaeger chicken capicola swine kielbasa.
|
|
110
|
+
</Body>
|
|
111
|
+
</AlertBanner>
|
|
112
|
+
</>
|
|
113
|
+
`}
|
|
114
|
+
providerProps={{
|
|
115
|
+
renderAsComponent: true,
|
|
116
|
+
scope: {
|
|
117
|
+
AlertBannerHeading,
|
|
118
|
+
AlertBanner,
|
|
119
|
+
Body,
|
|
120
|
+
ToggleButton
|
|
121
|
+
},
|
|
122
|
+
}}
|
|
123
|
+
/>
|
|
124
|
+
)
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
// this file was generated, but it is safe to modify
|
|
2
|
+
import { Hex, PropsWithChildren } from '@helpers'
|
|
3
|
+
import { Surface } from '@foundations'
|
|
4
|
+
|
|
5
|
+
const enum BadgeType {
|
|
6
|
+
neutral = 1,
|
|
7
|
+
info = 2,
|
|
8
|
+
success = 4,
|
|
9
|
+
warning = 8,
|
|
10
|
+
critical = 16,
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export type RequireOnlyOne<T, Keys extends keyof T = keyof T> = Pick<
|
|
14
|
+
T,
|
|
15
|
+
Exclude<keyof T, Keys>
|
|
16
|
+
> &
|
|
17
|
+
{
|
|
18
|
+
[K in Keys]-?: Required<Pick<T, K>> &
|
|
19
|
+
Partial<Record<Exclude<Keys, K>, undefined>>;
|
|
20
|
+
}[Keys];
|
|
21
|
+
|
|
22
|
+
export type MappedEnum<E, T> = {
|
|
23
|
+
[key in keyof E]: T;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
type BadgeTypes<T> = MappedEnum<typeof BadgeType, T>
|
|
27
|
+
|
|
28
|
+
function toBadgeType(n: number): BadgeType {
|
|
29
|
+
switch (n) {
|
|
30
|
+
case BadgeType.neutral:
|
|
31
|
+
return BadgeType.neutral
|
|
32
|
+
case BadgeType.info:
|
|
33
|
+
return BadgeType.info
|
|
34
|
+
case BadgeType.success:
|
|
35
|
+
return BadgeType.success
|
|
36
|
+
case BadgeType.warning:
|
|
37
|
+
return BadgeType.warning
|
|
38
|
+
case BadgeType.critical:
|
|
39
|
+
return BadgeType.critical
|
|
40
|
+
default:
|
|
41
|
+
return BadgeType.neutral
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const BadgeTypeColors = {
|
|
46
|
+
[BadgeType.neutral]: Surface.Neutral.Default,
|
|
47
|
+
[BadgeType.info]: Surface.Highlight.Default,
|
|
48
|
+
[BadgeType.success]: Surface.Success.Default,
|
|
49
|
+
[BadgeType.warning]: Surface.Warning.Default,
|
|
50
|
+
[BadgeType.critical]: Surface.Critical.Default,
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export type BadgeTypeProps = Partial<RequireOnlyOne<BadgeTypes<boolean>>> &
|
|
54
|
+
PropsWithChildren
|
|
55
|
+
|
|
56
|
+
function bitwiseOr(flags: unknown[]): number {
|
|
57
|
+
return flags.reduce((mask: number, flag, i) => mask | (Number(flag) << i), 0)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export function getColor(props: BadgeTypeProps): Hex {
|
|
61
|
+
return BadgeTypeColors[
|
|
62
|
+
toBadgeType(
|
|
63
|
+
bitwiseOr([
|
|
64
|
+
props.neutral,
|
|
65
|
+
props.info,
|
|
66
|
+
props.success,
|
|
67
|
+
props.warning,
|
|
68
|
+
props.critical,
|
|
69
|
+
])
|
|
70
|
+
)
|
|
71
|
+
]
|
|
72
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { render } from '@testing-library/react'
|
|
2
|
+
import { Badge } from './badge'
|
|
3
|
+
|
|
4
|
+
describe('Badge', () => {
|
|
5
|
+
it('should render Neutral Badge successfully', () => {
|
|
6
|
+
const { baseElement } = render(<Badge neutral>Neutral</Badge>)
|
|
7
|
+
expect(baseElement).toBeTruthy()
|
|
8
|
+
})
|
|
9
|
+
|
|
10
|
+
it('should render Informational Badge successfully', () => {
|
|
11
|
+
const { baseElement } = render(<Badge info>Informational</Badge>)
|
|
12
|
+
expect(baseElement).toBeTruthy()
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
it('should render Warning Badge successfully', () => {
|
|
16
|
+
const { baseElement } = render(<Badge warning>Warning</Badge>)
|
|
17
|
+
expect(baseElement).toBeTruthy()
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
it('should render Success Badge successfully', () => {
|
|
21
|
+
const { baseElement } = render(<Badge success>Success</Badge>)
|
|
22
|
+
expect(baseElement).toBeTruthy()
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
it('should render Critical Badge successfully', () => {
|
|
26
|
+
const { baseElement } = render(<Badge critical>Critical</Badge>)
|
|
27
|
+
expect(baseElement).toBeTruthy()
|
|
28
|
+
})
|
|
29
|
+
})
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import styled from 'styled-components'
|
|
2
|
+
import { Padding } from '@foundations'
|
|
3
|
+
import { BadgeTypeProps, getColor } from './badge-type-flags'
|
|
4
|
+
import { FC, PropsWithChildren } from '@helpers'
|
|
5
|
+
import { Label } from 'components/typography'
|
|
6
|
+
|
|
7
|
+
const BadgeFrame = styled(Label)<{color: string}>`
|
|
8
|
+
background: ${props => props.color};
|
|
9
|
+
display: flex;
|
|
10
|
+
align-items:center;
|
|
11
|
+
padding: ${Padding.xxxs} ${Padding.xs};
|
|
12
|
+
border-radius:10px;
|
|
13
|
+
height: fit-content;
|
|
14
|
+
`
|
|
15
|
+
|
|
16
|
+
type IBadgeProps = BadgeTypeProps & PropsWithChildren
|
|
17
|
+
|
|
18
|
+
export const Badge: FC<IBadgeProps> = (props) => {
|
|
19
|
+
const color = getColor(props)
|
|
20
|
+
|
|
21
|
+
return <BadgeFrame color={color}>{props.children}</BadgeFrame>
|
|
22
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './badge'
|