@mindlogic-ai/logician-ui 5.0.0-alpha.3 → 5.0.0-alpha.30
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/MIGRATION-5.0.md +40 -1
- package/README.md +1 -0
- package/USAGE.md +20 -0
- package/dist/components/Avatar/Avatar.d.ts +68 -11
- package/dist/components/Avatar/Avatar.d.ts.map +1 -1
- package/dist/components/Avatar/Avatar.js +41 -5
- package/dist/components/Avatar/Avatar.js.map +1 -1
- package/dist/components/Avatar/Avatar.mjs +40 -5
- package/dist/components/Avatar/Avatar.mjs.map +1 -1
- package/dist/components/Avatar/index.d.ts +2 -2
- package/dist/components/Avatar/index.d.ts.map +1 -1
- package/dist/components/Banner/Banner.types.d.ts +24 -1
- package/dist/components/Banner/Banner.types.d.ts.map +1 -1
- package/dist/components/BottomSheet/BottomSheet.styles.d.ts +2 -2
- package/dist/components/Button/Button.d.ts.map +1 -1
- package/dist/components/Button/Button.js +31 -3
- package/dist/components/Button/Button.js.map +1 -1
- package/dist/components/Button/Button.mjs +31 -3
- package/dist/components/Button/Button.mjs.map +1 -1
- package/dist/components/Button/Button.types.d.ts +38 -1
- package/dist/components/Button/Button.types.d.ts.map +1 -1
- package/dist/components/Card/Card.types.d.ts +12 -0
- package/dist/components/Card/Card.types.d.ts.map +1 -1
- package/dist/components/Code/shikiAdapter.d.ts +3 -1
- package/dist/components/Code/shikiAdapter.d.ts.map +1 -1
- package/dist/components/Code/shikiAdapter.js +29 -8
- package/dist/components/Code/shikiAdapter.js.map +1 -1
- package/dist/components/Code/shikiAdapter.mjs +29 -8
- package/dist/components/Code/shikiAdapter.mjs.map +1 -1
- package/dist/components/CodeTabs/CodeTabs.styles.d.ts +6 -5
- package/dist/components/CodeTabs/CodeTabs.styles.d.ts.map +1 -1
- package/dist/components/CodeTabs/CodeTabs.styles.js +6 -5
- package/dist/components/CodeTabs/CodeTabs.styles.js.map +1 -1
- package/dist/components/CodeTabs/CodeTabs.styles.mjs +6 -5
- package/dist/components/CodeTabs/CodeTabs.styles.mjs.map +1 -1
- package/dist/components/ColorMode/ColorModeToggle.d.ts +7 -2
- package/dist/components/ColorMode/ColorModeToggle.d.ts.map +1 -1
- package/dist/components/ColorMode/ColorModeToggle.js +8 -3
- package/dist/components/ColorMode/ColorModeToggle.js.map +1 -1
- package/dist/components/ColorMode/ColorModeToggle.mjs +8 -3
- package/dist/components/ColorMode/ColorModeToggle.mjs.map +1 -1
- package/dist/components/Confetti/Confetti.types.d.ts +5 -1
- package/dist/components/Confetti/Confetti.types.d.ts.map +1 -1
- package/dist/components/Confetti/confettiColors.d.ts +5 -5
- package/dist/components/Confetti/confettiColors.js +5 -5
- package/dist/components/Confetti/confettiColors.mjs +5 -5
- package/dist/components/DatePicker/DatePicker.types.d.ts +12 -0
- package/dist/components/DatePicker/DatePicker.types.d.ts.map +1 -0
- package/dist/components/DatePicker/RangeDatePicker.d.ts +2 -1
- package/dist/components/DatePicker/RangeDatePicker.d.ts.map +1 -1
- package/dist/components/DatePicker/RangeDatePicker.js +4 -2
- package/dist/components/DatePicker/RangeDatePicker.js.map +1 -1
- package/dist/components/DatePicker/RangeDatePicker.mjs +4 -2
- package/dist/components/DatePicker/RangeDatePicker.mjs.map +1 -1
- package/dist/components/DatePicker/SingleDatePicker.d.ts +2 -1
- package/dist/components/DatePicker/SingleDatePicker.d.ts.map +1 -1
- package/dist/components/DatePicker/SingleDatePicker.js +4 -2
- package/dist/components/DatePicker/SingleDatePicker.js.map +1 -1
- package/dist/components/DatePicker/SingleDatePicker.mjs +4 -2
- package/dist/components/DatePicker/SingleDatePicker.mjs.map +1 -1
- package/dist/components/DatePicker/index.d.ts +1 -0
- package/dist/components/DatePicker/index.d.ts.map +1 -1
- package/dist/components/ErrorFallback/ErrorFallback.types.d.ts +6 -0
- package/dist/components/ErrorFallback/ErrorFallback.types.d.ts.map +1 -1
- package/dist/components/ExpandableText/ExpandableText.d.ts.map +1 -1
- package/dist/components/ExpandableText/ExpandableText.js +1 -1
- package/dist/components/ExpandableText/ExpandableText.js.map +1 -1
- package/dist/components/ExpandableText/ExpandableText.mjs +1 -1
- package/dist/components/ExpandableText/ExpandableText.mjs.map +1 -1
- package/dist/components/Form/FormModalFooter/FormModalFooter.d.ts +1 -1
- package/dist/components/Form/FormModalFooter/FormModalFooter.d.ts.map +1 -1
- package/dist/components/Form/FormModalFooter/FormModalFooter.js +2 -2
- package/dist/components/Form/FormModalFooter/FormModalFooter.js.map +1 -1
- package/dist/components/Form/FormModalFooter/FormModalFooter.mjs +2 -2
- package/dist/components/Form/FormModalFooter/FormModalFooter.mjs.map +1 -1
- package/dist/components/Form/FormModalFooter/FormModalFooter.types.d.ts +11 -1
- package/dist/components/Form/FormModalFooter/FormModalFooter.types.d.ts.map +1 -1
- package/dist/components/Form/FormSection/CollapsibleFormSection.js +1 -0
- package/dist/components/Form/FormSection/CollapsibleFormSection.js.map +1 -1
- package/dist/components/Form/FormSection/CollapsibleFormSection.mjs +1 -0
- package/dist/components/Form/FormSection/CollapsibleFormSection.mjs.map +1 -1
- package/dist/components/Input/Input.d.ts.map +1 -1
- package/dist/components/Input/Input.js +4 -0
- package/dist/components/Input/Input.js.map +1 -1
- package/dist/components/Input/Input.mjs +4 -0
- package/dist/components/Input/Input.mjs.map +1 -1
- package/dist/components/LineGraph/LineGraph.d.ts.map +1 -1
- package/dist/components/LineGraph/LineGraph.js +4 -5
- package/dist/components/LineGraph/LineGraph.js.map +1 -1
- package/dist/components/LineGraph/LineGraph.mjs +5 -6
- package/dist/components/LineGraph/LineGraph.mjs.map +1 -1
- package/dist/components/LineGraph/LineGraph.types.d.ts +12 -2
- package/dist/components/LineGraph/LineGraph.types.d.ts.map +1 -1
- package/dist/components/LineGraph/seriesColors.d.ts +12 -8
- package/dist/components/LineGraph/seriesColors.d.ts.map +1 -1
- package/dist/components/LineGraph/seriesColors.js +8 -7
- package/dist/components/LineGraph/seriesColors.js.map +1 -1
- package/dist/components/LineGraph/seriesColors.mjs +8 -7
- package/dist/components/LineGraph/seriesColors.mjs.map +1 -1
- package/dist/components/Masonry/Masonry.types.d.ts +8 -3
- package/dist/components/Masonry/Masonry.types.d.ts.map +1 -1
- package/dist/components/Menu/MenuItem.types.d.ts +8 -0
- package/dist/components/Menu/MenuItem.types.d.ts.map +1 -1
- package/dist/components/Modal/ModalCloseButton.d.ts +1 -1
- package/dist/components/Modal/ModalCloseButton.js +1 -1
- package/dist/components/Modal/ModalCloseButton.mjs +1 -1
- package/dist/components/MonthPicker/MonthPicker.d.ts.map +1 -1
- package/dist/components/MonthPicker/MonthPicker.js +3 -2
- package/dist/components/MonthPicker/MonthPicker.js.map +1 -1
- package/dist/components/MonthPicker/MonthPicker.mjs +3 -2
- package/dist/components/MonthPicker/MonthPicker.mjs.map +1 -1
- package/dist/components/MonthPicker/MonthPicker.types.d.ts +7 -1
- package/dist/components/MonthPicker/MonthPicker.types.d.ts.map +1 -1
- package/dist/components/NavList/NavList.d.ts +35 -0
- package/dist/components/NavList/NavList.d.ts.map +1 -0
- package/dist/components/NavList/NavList.js +113 -0
- package/dist/components/NavList/NavList.js.map +1 -0
- package/dist/components/NavList/NavList.mjs +111 -0
- package/dist/components/NavList/NavList.mjs.map +1 -0
- package/dist/components/NavList/NavList.styles.d.ts +90 -0
- package/dist/components/NavList/NavList.styles.d.ts.map +1 -0
- package/dist/components/NavList/NavList.styles.js +104 -0
- package/dist/components/NavList/NavList.styles.js.map +1 -0
- package/dist/components/NavList/NavList.styles.mjs +97 -0
- package/dist/components/NavList/NavList.styles.mjs.map +1 -0
- package/dist/components/NavList/NavList.translations.json.js +19 -0
- package/dist/components/NavList/NavList.translations.json.js.map +1 -0
- package/dist/components/NavList/NavList.translations.json.mjs +14 -0
- package/dist/components/NavList/NavList.translations.json.mjs.map +1 -0
- package/dist/components/NavList/NavList.types.d.ts +140 -0
- package/dist/components/NavList/NavList.types.d.ts.map +1 -0
- package/dist/components/NavList/NavListContext.d.ts +30 -0
- package/dist/components/NavList/NavListContext.d.ts.map +1 -0
- package/dist/components/NavList/NavListContext.js +16 -0
- package/dist/components/NavList/NavListContext.js.map +1 -0
- package/dist/components/NavList/NavListContext.mjs +13 -0
- package/dist/components/NavList/NavListContext.mjs.map +1 -0
- package/dist/components/NavList/NavListGroup.d.ts +31 -0
- package/dist/components/NavList/NavListGroup.d.ts.map +1 -0
- package/dist/components/NavList/NavListGroup.js +115 -0
- package/dist/components/NavList/NavListGroup.js.map +1 -0
- package/dist/components/NavList/NavListGroup.mjs +113 -0
- package/dist/components/NavList/NavListGroup.mjs.map +1 -0
- package/dist/components/NavList/NavListItem.d.ts +16 -0
- package/dist/components/NavList/NavListItem.d.ts.map +1 -0
- package/dist/components/NavList/NavListItem.js +284 -0
- package/dist/components/NavList/NavListItem.js.map +1 -0
- package/dist/components/NavList/NavListItem.mjs +282 -0
- package/dist/components/NavList/NavListItem.mjs.map +1 -0
- package/dist/components/NavList/NavListSkeleton.d.ts +17 -0
- package/dist/components/NavList/NavListSkeleton.d.ts.map +1 -0
- package/dist/components/NavList/NavListSkeleton.js +33 -0
- package/dist/components/NavList/NavListSkeleton.js.map +1 -0
- package/dist/components/NavList/NavListSkeleton.mjs +31 -0
- package/dist/components/NavList/NavListSkeleton.mjs.map +1 -0
- package/dist/components/NavList/index.d.ts +7 -0
- package/dist/components/NavList/index.d.ts.map +1 -0
- package/dist/components/Pagination/Pagination.d.ts +11 -10
- package/dist/components/Pagination/Pagination.d.ts.map +1 -1
- package/dist/components/Pagination/Pagination.js +11 -10
- package/dist/components/Pagination/Pagination.js.map +1 -1
- package/dist/components/Pagination/Pagination.mjs +11 -10
- package/dist/components/Pagination/Pagination.mjs.map +1 -1
- package/dist/components/ProgressBar/ProgressBar.types.d.ts +9 -0
- package/dist/components/ProgressBar/ProgressBar.types.d.ts.map +1 -1
- package/dist/components/RadialProgress/RadialProgress.types.d.ts +21 -1
- package/dist/components/RadialProgress/RadialProgress.types.d.ts.map +1 -1
- package/dist/components/SeeMoreButton/SeeMoreButton.types.d.ts +8 -0
- package/dist/components/SeeMoreButton/SeeMoreButton.types.d.ts.map +1 -1
- package/dist/components/SegmentedControl/SegmentedControl.d.ts.map +1 -1
- package/dist/components/SegmentedControl/SegmentedControl.js +34 -33
- package/dist/components/SegmentedControl/SegmentedControl.js.map +1 -1
- package/dist/components/SegmentedControl/SegmentedControl.mjs +35 -34
- package/dist/components/SegmentedControl/SegmentedControl.mjs.map +1 -1
- package/dist/components/SegmentedControl/SegmentedControl.styles.d.ts +24 -0
- package/dist/components/SegmentedControl/SegmentedControl.styles.d.ts.map +1 -1
- package/dist/components/SegmentedControl/SegmentedControl.styles.js +30 -0
- package/dist/components/SegmentedControl/SegmentedControl.styles.js.map +1 -1
- package/dist/components/SegmentedControl/SegmentedControl.styles.mjs +29 -1
- package/dist/components/SegmentedControl/SegmentedControl.styles.mjs.map +1 -1
- package/dist/components/SegmentedProgressBar/SegmentedProgressBar.types.d.ts +2 -0
- package/dist/components/SegmentedProgressBar/SegmentedProgressBar.types.d.ts.map +1 -1
- package/dist/components/Select/Combobox.d.ts +1 -1
- package/dist/components/Select/Combobox.d.ts.map +1 -1
- package/dist/components/Select/Combobox.js +9 -2
- package/dist/components/Select/Combobox.js.map +1 -1
- package/dist/components/Select/Combobox.mjs +10 -3
- package/dist/components/Select/Combobox.mjs.map +1 -1
- package/dist/components/Select/Select.d.ts +1 -1
- package/dist/components/Select/Select.d.ts.map +1 -1
- package/dist/components/Select/Select.js +14 -2
- package/dist/components/Select/Select.js.map +1 -1
- package/dist/components/Select/Select.mjs +15 -3
- package/dist/components/Select/Select.mjs.map +1 -1
- package/dist/components/Select/Select.styles.d.ts +97 -1
- package/dist/components/Select/Select.styles.d.ts.map +1 -1
- package/dist/components/Select/Select.styles.js +83 -0
- package/dist/components/Select/Select.styles.js.map +1 -1
- package/dist/components/Select/Select.styles.mjs +82 -1
- package/dist/components/Select/Select.styles.mjs.map +1 -1
- package/dist/components/Switch/SwitchControl.d.ts.map +1 -1
- package/dist/components/Switch/SwitchControl.js +26 -11
- package/dist/components/Switch/SwitchControl.js.map +1 -1
- package/dist/components/Switch/SwitchControl.mjs +27 -12
- package/dist/components/Switch/SwitchControl.mjs.map +1 -1
- package/dist/components/Tabs/Tab/Tab.styles.d.ts +1 -1
- package/dist/components/Tabs/Tab/Tab.styles.js +1 -1
- package/dist/components/Tabs/Tab/Tab.styles.mjs +1 -1
- package/dist/components/Tag/Tag.d.ts.map +1 -1
- package/dist/components/Tag/Tag.js +14 -2
- package/dist/components/Tag/Tag.js.map +1 -1
- package/dist/components/Tag/Tag.mjs +15 -3
- package/dist/components/Tag/Tag.mjs.map +1 -1
- package/dist/components/Tag/Tag.styles.d.ts +20 -2
- package/dist/components/Tag/Tag.styles.d.ts.map +1 -1
- package/dist/components/Tag/Tag.styles.js +81 -0
- package/dist/components/Tag/Tag.styles.js.map +1 -1
- package/dist/components/Tag/Tag.styles.mjs +81 -1
- package/dist/components/Tag/Tag.styles.mjs.map +1 -1
- package/dist/components/Tag/Tag.types.d.ts +15 -2
- package/dist/components/Tag/Tag.types.d.ts.map +1 -1
- package/dist/components/Tag/index.d.ts +2 -2
- package/dist/components/Tag/index.d.ts.map +1 -1
- package/dist/components/Textarea/Textarea.d.ts.map +1 -1
- package/dist/components/Textarea/Textarea.js +4 -0
- package/dist/components/Textarea/Textarea.js.map +1 -1
- package/dist/components/Textarea/Textarea.mjs +4 -0
- package/dist/components/Textarea/Textarea.mjs.map +1 -1
- package/dist/components/Toast/Toast.d.ts.map +1 -1
- package/dist/components/Toast/Toast.js +5 -1
- package/dist/components/Toast/Toast.js.map +1 -1
- package/dist/components/Toast/Toast.mjs +5 -1
- package/dist/components/Toast/Toast.mjs.map +1 -1
- package/dist/components/Toast/Toast.styles.d.ts +13 -2
- package/dist/components/Toast/Toast.styles.d.ts.map +1 -1
- package/dist/components/Toast/Toast.styles.js +19 -7
- package/dist/components/Toast/Toast.styles.js.map +1 -1
- package/dist/components/Toast/Toast.styles.mjs +19 -7
- package/dist/components/Toast/Toast.styles.mjs.map +1 -1
- package/dist/components/Typography/Caption.d.ts.map +1 -1
- package/dist/components/Typography/Caption.js +1 -1
- package/dist/components/Typography/Caption.js.map +1 -1
- package/dist/components/Typography/Caption.mjs +1 -1
- package/dist/components/Typography/Caption.mjs.map +1 -1
- package/dist/components/Typography/H1.d.ts.map +1 -1
- package/dist/components/Typography/H1.js +1 -1
- package/dist/components/Typography/H1.js.map +1 -1
- package/dist/components/Typography/H1.mjs +1 -1
- package/dist/components/Typography/H1.mjs.map +1 -1
- package/dist/components/Typography/H2.d.ts.map +1 -1
- package/dist/components/Typography/H2.js +1 -1
- package/dist/components/Typography/H2.js.map +1 -1
- package/dist/components/Typography/H2.mjs +1 -1
- package/dist/components/Typography/H2.mjs.map +1 -1
- package/dist/components/Typography/H3.d.ts.map +1 -1
- package/dist/components/Typography/H3.js +1 -1
- package/dist/components/Typography/H3.js.map +1 -1
- package/dist/components/Typography/H3.mjs +1 -1
- package/dist/components/Typography/H3.mjs.map +1 -1
- package/dist/components/Typography/H4.d.ts.map +1 -1
- package/dist/components/Typography/H4.js +1 -1
- package/dist/components/Typography/H4.js.map +1 -1
- package/dist/components/Typography/H4.mjs +1 -1
- package/dist/components/Typography/H4.mjs.map +1 -1
- package/dist/components/Typography/H5.d.ts.map +1 -1
- package/dist/components/Typography/H5.js +1 -1
- package/dist/components/Typography/H5.js.map +1 -1
- package/dist/components/Typography/H5.mjs +1 -1
- package/dist/components/Typography/H5.mjs.map +1 -1
- package/dist/components/Typography/Link.d.ts.map +1 -1
- package/dist/components/Typography/Link.js +1 -1
- package/dist/components/Typography/Link.js.map +1 -1
- package/dist/components/Typography/Link.mjs +1 -1
- package/dist/components/Typography/Link.mjs.map +1 -1
- package/dist/components/Typography/Overline.d.ts.map +1 -1
- package/dist/components/Typography/Overline.js +1 -1
- package/dist/components/Typography/Overline.js.map +1 -1
- package/dist/components/Typography/Overline.mjs +1 -1
- package/dist/components/Typography/Overline.mjs.map +1 -1
- package/dist/components/Typography/Subtext.d.ts.map +1 -1
- package/dist/components/Typography/Subtext.js +1 -1
- package/dist/components/Typography/Subtext.js.map +1 -1
- package/dist/components/Typography/Subtext.mjs +1 -1
- package/dist/components/Typography/Subtext.mjs.map +1 -1
- package/dist/components/Typography/Subtitle.d.ts.map +1 -1
- package/dist/components/Typography/Subtitle.js +1 -1
- package/dist/components/Typography/Subtitle.js.map +1 -1
- package/dist/components/Typography/Subtitle.mjs +1 -1
- package/dist/components/Typography/Subtitle.mjs.map +1 -1
- package/dist/components/Typography/Text.d.ts.map +1 -1
- package/dist/components/Typography/Text.js +1 -1
- package/dist/components/Typography/Text.js.map +1 -1
- package/dist/components/Typography/Text.mjs +1 -1
- package/dist/components/Typography/Text.mjs.map +1 -1
- package/dist/hooks/useLanguage.d.ts +5 -0
- package/dist/hooks/useLanguage.d.ts.map +1 -1
- package/dist/hooks/useLanguage.js +7 -3
- package/dist/hooks/useLanguage.js.map +1 -1
- package/dist/hooks/useLanguage.mjs +7 -4
- package/dist/hooks/useLanguage.mjs.map +1 -1
- package/dist/hooks/useTranslate.d.ts.map +1 -1
- package/dist/hooks/useTranslate.js +8 -5
- package/dist/hooks/useTranslate.js.map +1 -1
- package/dist/hooks/useTranslate.mjs +8 -5
- package/dist/hooks/useTranslate.mjs.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +9 -3
- package/dist/index.mjs.map +1 -1
- package/dist/theme/colors.d.ts +2 -2
- package/dist/theme/colors.d.ts.map +1 -1
- package/dist/theme/colors.js +63 -19
- package/dist/theme/colors.js.map +1 -1
- package/dist/theme/colors.mjs +64 -20
- package/dist/theme/colors.mjs.map +1 -1
- package/dist/theme/controlSizes.d.ts +91 -0
- package/dist/theme/controlSizes.d.ts.map +1 -0
- package/dist/theme/controlSizes.js +143 -0
- package/dist/theme/controlSizes.js.map +1 -0
- package/dist/theme/controlSizes.mjs +135 -0
- package/dist/theme/controlSizes.mjs.map +1 -0
- package/dist/theme/global.d.ts.map +1 -1
- package/dist/theme/global.js +19 -1
- package/dist/theme/global.js.map +1 -1
- package/dist/theme/global.mjs +19 -1
- package/dist/theme/global.mjs.map +1 -1
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +14 -43
- package/dist/theme/index.js.map +1 -1
- package/dist/theme/index.mjs +14 -43
- package/dist/theme/index.mjs.map +1 -1
- package/dist/theme/palette.generated.d.ts +295 -162
- package/dist/theme/palette.generated.d.ts.map +1 -1
- package/dist/theme/palette.generated.js +296 -162
- package/dist/theme/palette.generated.js.map +1 -1
- package/dist/theme/palette.generated.mjs +296 -163
- package/dist/theme/palette.generated.mjs.map +1 -1
- package/dist/theme/paletteSwatches.d.ts +20 -0
- package/dist/theme/paletteSwatches.d.ts.map +1 -1
- package/dist/theme/recipes/avatar.d.ts +30 -0
- package/dist/theme/recipes/avatar.d.ts.map +1 -0
- package/dist/theme/recipes/avatar.js +96 -0
- package/dist/theme/recipes/avatar.js.map +1 -0
- package/dist/theme/recipes/avatar.mjs +94 -0
- package/dist/theme/recipes/avatar.mjs.map +1 -0
- package/dist/theme/recipes/controls.d.ts +94 -0
- package/dist/theme/recipes/controls.d.ts.map +1 -0
- package/dist/theme/recipes/controls.js +154 -0
- package/dist/theme/recipes/controls.js.map +1 -0
- package/dist/theme/recipes/controls.mjs +144 -0
- package/dist/theme/recipes/controls.mjs.map +1 -0
- package/dist/translations/Defaults.translations.json.js +19 -1
- package/dist/translations/Defaults.translations.json.js.map +1 -1
- package/dist/translations/Defaults.translations.json.mjs +18 -2
- package/dist/translations/Defaults.translations.json.mjs.map +1 -1
- package/dist/utils/disabledControl.d.ts +8 -1
- package/dist/utils/disabledControl.d.ts.map +1 -1
- package/dist/utils/disabledControl.js +8 -1
- package/dist/utils/disabledControl.js.map +1 -1
- package/dist/utils/disabledControl.mjs +8 -1
- package/dist/utils/disabledControl.mjs.map +1 -1
- package/dist/utils/focusRing.d.ts +22 -0
- package/dist/utils/focusRing.d.ts.map +1 -1
- package/dist/utils/focusRing.js +22 -0
- package/dist/utils/focusRing.js.map +1 -1
- package/dist/utils/focusRing.mjs +21 -1
- package/dist/utils/focusRing.mjs.map +1 -1
- package/package.json +2 -1
- package/src/components/Accordion/Accordion.stories.tsx +85 -0
- package/src/components/Accordion/Accordion.usage.mdx +200 -0
- package/src/components/Appear/Appear.usage.mdx +107 -0
- package/src/components/Avatar/Avatar.recipe.test.tsx +176 -0
- package/src/components/Avatar/Avatar.stories.tsx +199 -24
- package/src/components/Avatar/Avatar.tsx +118 -21
- package/src/components/Avatar/Avatar.usage.mdx +185 -0
- package/src/components/Avatar/index.tsx +8 -1
- package/src/components/Banner/Banner.stories.tsx +152 -2
- package/src/components/Banner/Banner.types.ts +30 -1
- package/src/components/Banner/Banner.usage.mdx +233 -0
- package/src/components/BottomSheet/BottomSheet.stories.tsx +168 -1
- package/src/components/BottomSheet/BottomSheet.test.tsx +2 -1
- package/src/components/BottomSheet/BottomSheet.usage.mdx +216 -0
- package/src/components/Breadcrumb/Breadcrumb.stories.tsx +59 -0
- package/src/components/Breadcrumb/Breadcrumb.usage.mdx +181 -0
- package/src/components/Button/Button.focusableWhenDisabled.test.tsx +218 -0
- package/src/components/Button/Button.stories.tsx +332 -3
- package/src/components/Button/Button.tsx +46 -3
- package/src/components/Button/Button.types.ts +38 -1
- package/src/components/Button/Button.usage.mdx +358 -0
- package/src/components/Button/Button.variants.test.tsx +13 -1
- package/src/components/Card/Card.stories.tsx +106 -0
- package/src/components/Card/Card.types.ts +12 -0
- package/src/components/Card/Card.usage.mdx +216 -0
- package/src/components/Checkbox/Checkbox.stories.tsx +140 -13
- package/src/components/Checkbox/Checkbox.usage.mdx +214 -0
- package/src/components/Chip/Chip.usage.mdx +78 -0
- package/src/components/Code/Code.stories.tsx +60 -0
- package/src/components/Code/Code.test.tsx +116 -0
- package/src/components/Code/Code.usage.mdx +187 -0
- package/src/components/Code/shikiAdapter.ts +38 -9
- package/src/components/CodeTabs/CodeTabs.stories.tsx +53 -0
- package/src/components/CodeTabs/CodeTabs.styles.ts +6 -5
- package/src/components/CodeTabs/CodeTabs.usage.mdx +176 -0
- package/src/components/Collapsible/Collapsible.stories.tsx +58 -0
- package/src/components/Collapsible/Collapsible.usage.mdx +173 -0
- package/src/components/ColorMode/ColorMode.stories.tsx +50 -0
- package/src/components/ColorMode/ColorMode.usage.mdx +135 -0
- package/src/components/ColorMode/ColorModeToggle.tsx +10 -3
- package/src/components/Confetti/Confetti.types.ts +5 -1
- package/src/components/Confetti/Confetti.usage.mdx +111 -0
- package/src/components/Confetti/confettiColors.ts +5 -5
- package/src/components/Container/Container.stories.tsx +32 -0
- package/src/components/Container/Container.usage.mdx +130 -0
- package/src/components/CopyableCode/CopyableCode.stories.tsx +62 -0
- package/src/components/CopyableCode/CopyableCode.usage.mdx +168 -0
- package/src/components/CountBadge/CountBadge.stories.tsx +69 -0
- package/src/components/CountBadge/CountBadge.usage.mdx +215 -0
- package/src/components/CountUp/CountUp.usage.mdx +107 -0
- package/src/components/DatePicker/DatePicker.types.ts +12 -0
- package/src/components/DatePicker/DatePicker.usage.mdx +177 -0
- package/src/components/DatePicker/RangeDatePicker.stories.tsx +87 -3
- package/src/components/DatePicker/RangeDatePicker.tsx +7 -1
- package/src/components/DatePicker/SingleDatePicker.tsx +7 -1
- package/src/components/DatePicker/index.ts +1 -0
- package/src/components/ErrorFallback/ErrorFallback.types.ts +6 -0
- package/src/components/ErrorFallback/ErrorFallback.usage.mdx +127 -0
- package/src/components/ExpandableText/ExpandableText.stories.tsx +55 -0
- package/src/components/ExpandableText/ExpandableText.tsx +0 -1
- package/src/components/ExpandableText/ExpandableText.usage.mdx +178 -0
- package/src/components/FileInput/FileInput.stories.tsx +38 -1
- package/src/components/FileInput/FileInput.usage.mdx +178 -0
- package/src/components/FileItem/FileItem.stories.tsx +71 -0
- package/src/components/FileItem/FileItem.usage.mdx +180 -0
- package/src/components/FileList/FileList.stories.tsx +25 -0
- package/src/components/FileList/FileList.usage.mdx +165 -0
- package/src/components/FlyTo/FlyTo.usage.mdx +99 -0
- package/src/components/Form/Form.stories.tsx +149 -0
- package/src/components/Form/Form.usage.mdx +203 -0
- package/src/components/Form/FormModalFooter/FormModalFooter.stories.tsx +1 -1
- package/src/components/Form/FormModalFooter/FormModalFooter.test.tsx +19 -1
- package/src/components/Form/FormModalFooter/FormModalFooter.tsx +2 -0
- package/src/components/Form/FormModalFooter/FormModalFooter.types.ts +11 -1
- package/src/components/FormControl/FormControl.stories.tsx +35 -0
- package/src/components/FormControl/FormControl.usage.mdx +128 -0
- package/src/components/FormIntegration/FormIntegration.usage.mdx +158 -0
- package/src/components/FormLabel/FormLabel.stories.tsx +71 -0
- package/src/components/FormLabel/FormLabel.usage.mdx +125 -0
- package/src/components/Icon/Icon.stories.tsx +61 -1
- package/src/components/Icon/Icon.usage.mdx +158 -0
- package/src/components/IconButton/IconButton.stories.tsx +213 -5
- package/src/components/IconButton/IconButton.usage.mdx +275 -0
- package/src/components/InfoSprinkle/InfoSprinkle.stories.tsx +77 -1
- package/src/components/InfoSprinkle/InfoSprinkle.usage.mdx +189 -0
- package/src/components/InlineCode/InlineCode.stories.tsx +75 -0
- package/src/components/InlineCode/InlineCode.usage.mdx +142 -0
- package/src/components/Input/Input.stories.tsx +180 -0
- package/src/components/Input/Input.tsx +4 -0
- package/src/components/Input/Input.usage.mdx +278 -0
- package/src/components/LineGraph/LineGraph.stories.tsx +112 -0
- package/src/components/LineGraph/LineGraph.tsx +4 -5
- package/src/components/LineGraph/LineGraph.types.ts +12 -2
- package/src/components/LineGraph/LineGraph.usage.mdx +186 -0
- package/src/components/LineGraph/seriesColors.test.ts +10 -9
- package/src/components/LineGraph/seriesColors.ts +18 -16
- package/src/components/Loaders/Loaders.stories.tsx +93 -0
- package/src/components/Loaders/Loaders.usage.mdx +180 -0
- package/src/components/LogicianProvider/LogicianProvider.usage.mdx +98 -0
- package/src/components/Markdown/Markdown.stories.tsx +53 -0
- package/src/components/Markdown/Markdown.usage.mdx +182 -0
- package/src/components/Masonry/Masonry.stories.tsx +63 -1
- package/src/components/Masonry/Masonry.types.ts +8 -3
- package/src/components/Masonry/Masonry.usage.mdx +142 -0
- package/src/components/MaxLengthIndicator/MaxLengthIndicator.stories.tsx +57 -0
- package/src/components/MaxLengthIndicator/MaxLengthIndicator.usage.mdx +125 -0
- package/src/components/Menu/Menu.stories.tsx +146 -2
- package/src/components/Menu/Menu.usage.mdx +238 -0
- package/src/components/Menu/MenuItem.types.ts +8 -0
- package/src/components/Modal/Modal.stories.tsx +177 -1
- package/src/components/Modal/Modal.usage.mdx +262 -0
- package/src/components/Modal/ModalCloseButton.tsx +1 -1
- package/src/components/MonthPicker/MonthPicker.stories.tsx +30 -0
- package/src/components/MonthPicker/MonthPicker.tsx +7 -1
- package/src/components/MonthPicker/MonthPicker.types.ts +8 -1
- package/src/components/MonthPicker/MonthPicker.usage.mdx +191 -0
- package/src/components/NavList/NavList.stories.tsx +927 -0
- package/src/components/NavList/NavList.styles.ts +114 -0
- package/src/components/NavList/NavList.test.tsx +1306 -0
- package/src/components/NavList/NavList.translations.json +9 -0
- package/src/components/NavList/NavList.tsx +160 -0
- package/src/components/NavList/NavList.types.ts +155 -0
- package/src/components/NavList/NavList.usage.mdx +545 -0
- package/src/components/NavList/NavListContext.ts +25 -0
- package/src/components/NavList/NavListGroup.tsx +243 -0
- package/src/components/NavList/NavListItem.tsx +543 -0
- package/src/components/NavList/NavListSkeleton.tsx +57 -0
- package/src/components/NavList/index.ts +15 -0
- package/src/components/Pagination/Pagination.stories.tsx +90 -1
- package/src/components/Pagination/Pagination.tsx +11 -10
- package/src/components/Pagination/Pagination.usage.mdx +186 -0
- package/src/components/PasswordInput/PasswordInput.stories.tsx +51 -0
- package/src/components/PasswordInput/PasswordInput.usage.mdx +193 -0
- package/src/components/PinInput/PinInput.stories.tsx +91 -0
- package/src/components/PinInput/PinInput.usage.mdx +194 -0
- package/src/components/Popover/Popover.stories.tsx +104 -1
- package/src/components/Popover/Popover.usage.mdx +197 -0
- package/src/components/ProgressBar/ProgressBar.stories.tsx +92 -1
- package/src/components/ProgressBar/ProgressBar.types.ts +9 -0
- package/src/components/ProgressBar/ProgressBar.usage.mdx +210 -0
- package/src/components/Pulse/Pulse.usage.mdx +102 -0
- package/src/components/RadialProgress/RadialProgress.stories.tsx +74 -1
- package/src/components/RadialProgress/RadialProgress.types.ts +21 -1
- package/src/components/RadialProgress/RadialProgress.usage.mdx +153 -0
- package/src/components/Radio/Radio.stories.tsx +119 -0
- package/src/components/Radio/Radio.usage.mdx +187 -0
- package/src/components/Reveal/Reveal.usage.mdx +105 -0
- package/src/components/ScaledContext/ScaledContext.usage.mdx +111 -0
- package/src/components/SeeMoreButton/SeeMoreButton.stories.tsx +146 -2
- package/src/components/SeeMoreButton/SeeMoreButton.types.ts +8 -0
- package/src/components/SeeMoreButton/SeeMoreButton.usage.mdx +213 -0
- package/src/components/SegmentedControl/SegmentedControl.stories.tsx +69 -0
- package/src/components/SegmentedControl/SegmentedControl.styles.ts +38 -0
- package/src/components/SegmentedControl/SegmentedControl.tsx +43 -37
- package/src/components/SegmentedControl/SegmentedControl.usage.mdx +216 -0
- package/src/components/SegmentedProgressBar/SegmentedProgressBar.stories.tsx +54 -0
- package/src/components/SegmentedProgressBar/SegmentedProgressBar.types.ts +2 -0
- package/src/components/SegmentedProgressBar/SegmentedProgressBar.usage.mdx +145 -0
- package/src/components/Select/Combobox.tsx +28 -3
- package/src/components/Select/Select.clearTrigger.test.tsx +76 -0
- package/src/components/Select/Select.stories.tsx +290 -1
- package/src/components/Select/Select.styles.ts +89 -0
- package/src/components/Select/Select.tsx +28 -2
- package/src/components/Select/Select.usage.mdx +341 -0
- package/src/components/Shake/Shake.usage.mdx +107 -0
- package/src/components/Slider/Slider.stories.tsx +116 -0
- package/src/components/Slider/Slider.usage.mdx +179 -0
- package/src/components/Spinner/Spinner.stories.tsx +64 -0
- package/src/components/Spinner/Spinner.usage.mdx +136 -0
- package/src/components/SwapTransition/SwapTransition.usage.mdx +102 -0
- package/src/components/Switch/Switch.stories.tsx +139 -6
- package/src/components/Switch/Switch.usage.mdx +200 -0
- package/src/components/Switch/SwitchControl.tsx +32 -15
- package/src/components/Table/Table.stories.tsx +159 -1
- package/src/components/Table/Table.usage.mdx +235 -0
- package/src/components/Tabs/Tab/Tab.styles.ts +1 -1
- package/src/components/Tabs/Tabs.stories.tsx +86 -0
- package/src/components/Tabs/Tabs.usage.mdx +263 -0
- package/src/components/Tag/Tag.stories.tsx +181 -4
- package/src/components/Tag/Tag.styles.ts +117 -2
- package/src/components/Tag/Tag.test.tsx +87 -1
- package/src/components/Tag/Tag.tsx +22 -1
- package/src/components/Tag/Tag.types.ts +16 -2
- package/src/components/Tag/Tag.usage.mdx +257 -0
- package/src/components/Tag/index.ts +2 -0
- package/src/components/Textarea/Textarea.stories.tsx +113 -0
- package/src/components/Textarea/Textarea.tsx +4 -0
- package/src/components/Textarea/Textarea.usage.mdx +186 -0
- package/src/components/Toast/Toast.stories.tsx +185 -3
- package/src/components/Toast/Toast.styles.ts +19 -7
- package/src/components/Toast/Toast.tsx +8 -1
- package/src/components/Toast/Toast.usage.mdx +265 -0
- package/src/components/Tooltip/Tooltip.stories.tsx +86 -1
- package/src/components/Tooltip/Tooltip.usage.mdx +219 -0
- package/src/components/Tree/Tree.stories.tsx +89 -0
- package/src/components/Tree/Tree.usage.mdx +207 -0
- package/src/components/Typography/Caption.tsx +0 -1
- package/src/components/Typography/H1.tsx +0 -1
- package/src/components/Typography/H2.tsx +0 -1
- package/src/components/Typography/H3.tsx +0 -1
- package/src/components/Typography/H4.tsx +0 -1
- package/src/components/Typography/H5.tsx +0 -1
- package/src/components/Typography/Link.tsx +0 -1
- package/src/components/Typography/Overline.tsx +0 -1
- package/src/components/Typography/Subtext.tsx +0 -1
- package/src/components/Typography/Subtitle.tsx +0 -1
- package/src/components/Typography/Text.tsx +0 -1
- package/src/components/Typography/Typography.stories.tsx +117 -0
- package/src/components/Typography/Typography.usage.mdx +257 -0
- package/src/components/Workflow/Workflow.usage.mdx +199 -0
- package/src/components/a11y.kwcag.test.tsx +78 -21
- package/src/components/claude.md +24 -1
- package/src/components/noRawScales.test.ts +5 -1
- package/src/foundations/BrandAssets.mdx +637 -0
- package/src/foundations/BrandAssets.stories.tsx +680 -0
- package/src/foundations/BrandColour.mdx +103 -4
- package/src/foundations/BrandColour.stories.tsx +135 -2
- package/src/hooks/useLanguage.ts +8 -3
- package/src/hooks/useTranslate.test.tsx +46 -0
- package/src/hooks/useTranslate.ts +7 -5
- package/src/index.ts +19 -1
- package/src/theme/BazePalette.stories.tsx +111 -1
- package/src/theme/ControlSizes.stories.tsx +586 -0
- package/src/theme/Palette.stories.tsx +2 -2
- package/src/theme/SemanticTokens.mdx +118 -19
- package/src/theme/claude.md +34 -9
- package/src/theme/colors.ts +82 -19
- package/src/theme/contrast.test.ts +67 -0
- package/src/theme/controlSizes.test.ts +153 -0
- package/src/theme/controlSizes.ts +162 -0
- package/src/theme/global.ts +20 -1
- package/src/theme/index.ts +23 -46
- package/src/theme/palette.generated.ts +296 -162
- package/src/theme/paletteSwatches.test.ts +1 -1
- package/src/theme/paletteSwatches.ts +35 -0
- package/src/theme/recipes/avatar.ts +92 -0
- package/src/theme/recipes/controls.ts +171 -0
- package/src/translations/Defaults.translations.json +14 -0
- package/src/utils/disabledControl.ts +8 -1
- package/src/utils/focusRing.ts +23 -0
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import { ArgTypes, Canvas, Meta } from '@storybook/blocks';
|
|
2
|
+
|
|
3
|
+
import { En, Ko, LangToggle, Verdict } from '../../guidelines/_components/Lang';
|
|
4
|
+
import * as SegmentedControlStories from './SegmentedControl.stories';
|
|
5
|
+
|
|
6
|
+
<Meta of={SegmentedControlStories} name="Usage" />
|
|
7
|
+
|
|
8
|
+
<LangToggle />
|
|
9
|
+
|
|
10
|
+
<En>
|
|
11
|
+
|
|
12
|
+
# SegmentedControl
|
|
13
|
+
|
|
14
|
+
A row of two to five mutually exclusive options in one track. Choosing one
|
|
15
|
+
changes how the content next to it is shown, or which setting applies.
|
|
16
|
+
|
|
17
|
+
## When to use
|
|
18
|
+
|
|
19
|
+
- To change the unit or view of the same data: 일 / 주 / 월, chart / table.
|
|
20
|
+
- To filter one list by a small, fixed set: all models, chat models, image
|
|
21
|
+
models.
|
|
22
|
+
- For a setting with a few named values that all fit on screen, such as
|
|
23
|
+
상위 설정 따름 / 허용 / 차단.
|
|
24
|
+
- To switch the language of a field being edited (한국어 / English).
|
|
25
|
+
|
|
26
|
+
## When not to use
|
|
27
|
+
|
|
28
|
+
- To switch between different sections with their own content → `Tabs`.
|
|
29
|
+
- For more than five options, or options that do not fit on one line →
|
|
30
|
+
`Select` or `Radio`.
|
|
31
|
+
- For on / off → `Switch`.
|
|
32
|
+
- For actions (저장, 삭제) → `Button`s. A segment holds a value; it does not
|
|
33
|
+
do something when pressed.
|
|
34
|
+
- To pick several at once → `Checkbox` or `Tag` with `selected`.
|
|
35
|
+
|
|
36
|
+
## Variants and what they mean
|
|
37
|
+
|
|
38
|
+
SegmentedControl has one look: the selected option sits on a raised thumb in a
|
|
39
|
+
`bg.subtle` track. `size` matches the height of the `Button` of the same size,
|
|
40
|
+
so a control and a button line up in one row.
|
|
41
|
+
|
|
42
|
+
</En>
|
|
43
|
+
|
|
44
|
+
<Ko>
|
|
45
|
+
|
|
46
|
+
# SegmentedControl
|
|
47
|
+
|
|
48
|
+
한 트랙 안에 둘에서 다섯 개의 선택지를 나란히 두고 하나만 고르게 합니다. 하나를 고르면
|
|
49
|
+
옆 내용을 보는 방식이나 적용되는 설정이 바뀝니다.
|
|
50
|
+
|
|
51
|
+
## 언제 쓰나요
|
|
52
|
+
|
|
53
|
+
- 같은 데이터의 단위나 보기를 바꿀 때: 일 / 주 / 월, 차트 / 표.
|
|
54
|
+
- 적고 정해진 기준으로 목록 하나를 거를 때: 전체 모델, 대화 모델, 이미지 모델.
|
|
55
|
+
- 이름 붙은 값 몇 개가 화면에 다 들어가는 설정: 상위 설정 따름 / 허용 / 차단.
|
|
56
|
+
- 편집 중인 입력란의 언어를 바꿀 때(한국어 / English).
|
|
57
|
+
|
|
58
|
+
## 언제 쓰지 않나요
|
|
59
|
+
|
|
60
|
+
- 내용이 따로 있는 서로 다른 구역을 오갈 때는 `Tabs`를 씁니다.
|
|
61
|
+
- 선택지가 다섯 개보다 많거나 한 줄에 들어가지 않으면 `Select`나 `Radio`를 씁니다.
|
|
62
|
+
- 켜고 끄는 것은 `Switch`를 씁니다.
|
|
63
|
+
- 저장, 삭제 같은 동작은 `Button`으로 둡니다. 세그먼트는 값을 고르는 것이지 누르면 무언가를
|
|
64
|
+
하는 것이 아닙니다.
|
|
65
|
+
- 여러 개를 함께 고르게 하려면 `Checkbox`나 `selected`를 쓰는 `Tag`를 씁니다.
|
|
66
|
+
|
|
67
|
+
## 변형과 뜻
|
|
68
|
+
|
|
69
|
+
SegmentedControl의 모양은 하나입니다. `bg.subtle` 트랙 위에 선택된 칸이 떠 있는 판으로
|
|
70
|
+
올라옵니다. `size`는 같은 크기의 `Button`과 높이가 같아서 한 줄에 나란히 두면 맞아떨어집니다.
|
|
71
|
+
|
|
72
|
+
</Ko>
|
|
73
|
+
|
|
74
|
+
<ArgTypes of={SegmentedControlStories} include={['options', 'value', 'defaultValue', 'onSelect', 'size']} />
|
|
75
|
+
|
|
76
|
+
<En>
|
|
77
|
+
|
|
78
|
+
Heights come from the shared control scale (`controlSizes`), so they are
|
|
79
|
+
always the `Button` height of the same size: px below at the 14px root, and in
|
|
80
|
+
brackets inside a 16px `ScaledContext` (FactChat's `ReadingScale`).
|
|
81
|
+
|
|
82
|
+
| `size` | Height | Next to |
|
|
83
|
+
| --- | --- | --- |
|
|
84
|
+
| `xs` | 28px (28px) | A `Button size="xs"`, a dense field header |
|
|
85
|
+
| `sm` | 31.5px (36px) | Settings rows and filters in admin tables |
|
|
86
|
+
| `md` (default) | 35px (40px) | Page-level view switches |
|
|
87
|
+
| `lg` | 38.5px (44px) | A `Button size="lg"` |
|
|
88
|
+
|
|
89
|
+
## Do / Don't
|
|
90
|
+
|
|
91
|
+
</En>
|
|
92
|
+
|
|
93
|
+
<Ko>
|
|
94
|
+
|
|
95
|
+
높이는 공통 컨트롤 스케일(`controlSizes`)에서 오므로 언제나 같은 크기 `Button`의 높이와 같습니다.
|
|
96
|
+
아래 값은 14px 루트 기준이고, 괄호 안은 16px `ScaledContext`(FactChat `ReadingScale`) 안의 값입니다.
|
|
97
|
+
|
|
98
|
+
| `size` | 높이 | 함께 두는 것 |
|
|
99
|
+
| --- | --- | --- |
|
|
100
|
+
| `xs` | 28px (28px) | `Button size="xs"`, 촘촘한 입력란 머리 |
|
|
101
|
+
| `sm` | 31.5px (36px) | 관리 화면 표의 설정 줄과 필터 |
|
|
102
|
+
| `md` (기본) | 35px (40px) | 페이지 전체의 보기 전환 |
|
|
103
|
+
| `lg` | 38.5px (44px) | `Button size="lg"` |
|
|
104
|
+
|
|
105
|
+
## 이렇게 하세요 / 이렇게 하지 마세요
|
|
106
|
+
|
|
107
|
+
</Ko>
|
|
108
|
+
|
|
109
|
+
<Canvas of={SegmentedControlStories.DoChangeTheView} />
|
|
110
|
+
<Verdict
|
|
111
|
+
kind="do"
|
|
112
|
+
en="Use it to change the unit of the data beside it, and name the group with aria-label ('집계 단위')."
|
|
113
|
+
ko="옆 데이터의 단위를 바꾸는 데 쓰고, 묶음에 aria-label('집계 단위')로 이름을 붙입니다."
|
|
114
|
+
/>
|
|
115
|
+
|
|
116
|
+
<Canvas of={SegmentedControlStories.DontSectionsAsSegments} />
|
|
117
|
+
<Verdict
|
|
118
|
+
kind="dont"
|
|
119
|
+
en="Use it to switch between unrelated sections. That is Tabs: it gives each section a panel and the tab roles."
|
|
120
|
+
ko="서로 다른 구역을 오가는 데 쓰지 마세요. 그것은 Tabs의 일입니다. Tabs는 구역마다 패널과 탭 역할을 줍니다."
|
|
121
|
+
/>
|
|
122
|
+
|
|
123
|
+
<En>
|
|
124
|
+
|
|
125
|
+
## Content
|
|
126
|
+
|
|
127
|
+
- One or two words per option, nouns or short adjectives. No full stop.
|
|
128
|
+
- Keep options parallel: 일 / 주 / 월, not 일별 / 이번 주 / 월.
|
|
129
|
+
- Keep the order fixed across screens. When the same choice appears in several
|
|
130
|
+
places, users find it by position.
|
|
131
|
+
|
|
132
|
+
## Accessibility
|
|
133
|
+
|
|
134
|
+
What SegmentedControl does for you:
|
|
135
|
+
|
|
136
|
+
- It is a radio group: the root is `role="radiogroup"` and each option is a
|
|
137
|
+
radio with a hidden native input, so `Tab` reaches the group and the arrow
|
|
138
|
+
keys change the selection (WCAG 2.1.1, 4.1.2).
|
|
139
|
+
- The selected option is shown by the raised thumb and by a heavier, darker
|
|
140
|
+
label, not by colour alone (WCAG 1.4.1). The bold width is reserved in
|
|
141
|
+
advance, so the labels do not shift when the selection moves.
|
|
142
|
+
- A hairline ring keeps the track visible on any page colour.
|
|
143
|
+
|
|
144
|
+
What you still have to do:
|
|
145
|
+
|
|
146
|
+
- **Name the group.** Pass `aria-label` (or `aria-labelledby` pointing at the
|
|
147
|
+
visible label) on `SegmentedControl`. Without it, a screen reader announces
|
|
148
|
+
the options with no question.
|
|
149
|
+
- Give icon-only options a text alternative inside the label.
|
|
150
|
+
- A disabled option (`disabled: true` in `options`) cannot be chosen; say why
|
|
151
|
+
nearby if the reason is not obvious.
|
|
152
|
+
|
|
153
|
+
## Tokens
|
|
154
|
+
|
|
155
|
+
The table lists the tokens set in `SegmentedControl.tsx`. In dark mode the
|
|
156
|
+
ring and the thumb's edge are translucent white, not tokens.
|
|
157
|
+
|
|
158
|
+
</En>
|
|
159
|
+
|
|
160
|
+
<Ko>
|
|
161
|
+
|
|
162
|
+
## 문구
|
|
163
|
+
|
|
164
|
+
- 선택지마다 한두 단어의 명사나 짧은 형용사를 씁니다. 마침표를 찍지 않습니다.
|
|
165
|
+
- 선택지를 같은 꼴로 맞춥니다. "일별 / 이번 주 / 월"이 아니라 "일 / 주 / 월"처럼 씁니다.
|
|
166
|
+
- 화면이 달라도 순서를 바꾸지 않습니다. 같은 선택이 여러 곳에 나오면 사용자는 위치로
|
|
167
|
+
찾습니다.
|
|
168
|
+
|
|
169
|
+
## 접근성
|
|
170
|
+
|
|
171
|
+
SegmentedControl이 알아서 하는 일
|
|
172
|
+
|
|
173
|
+
- 라디오 묶음입니다. 루트는 `role="radiogroup"`이고 각 선택지는 숨은 기본 입력이 있는
|
|
174
|
+
라디오라서, `Tab`으로 묶음에 닿고 방향키로 선택을 바꿉니다(WCAG 2.1.1, 4.1.2).
|
|
175
|
+
- 선택된 칸은 떠 있는 판과 더 굵고 진한 라벨로 보이며, 색만으로 알리지 않습니다
|
|
176
|
+
(WCAG 1.4.1). 굵은 글자의 너비를 미리 잡아 두므로 선택이 옮겨 가도 라벨이 흔들리지
|
|
177
|
+
않습니다.
|
|
178
|
+
- 가는 테두리가 있어 어떤 페이지 색 위에서도 트랙이 보입니다.
|
|
179
|
+
|
|
180
|
+
직접 챙겨야 하는 일
|
|
181
|
+
|
|
182
|
+
- **묶음에 이름을 붙입니다.** `SegmentedControl`에 `aria-label`을 넘기거나, 보이는
|
|
183
|
+
라벨을 가리키는 `aria-labelledby`를 넘깁니다. 이름이 없으면 화면 낭독기는 무엇을 고르는지
|
|
184
|
+
모른 채 선택지만 읽습니다.
|
|
185
|
+
- 아이콘만 있는 선택지에는 라벨 안에 대체 텍스트를 넣습니다.
|
|
186
|
+
- 비활성 선택지(`options`의 `disabled: true`)는 고를 수 없습니다. 이유가 분명하지 않다면
|
|
187
|
+
가까이에 이유를 적습니다.
|
|
188
|
+
|
|
189
|
+
## 토큰
|
|
190
|
+
|
|
191
|
+
아래 표는 `SegmentedControl.tsx`에서 정한 토큰입니다. 다크 모드의 테두리와 판 가장자리는
|
|
192
|
+
토큰이 아니라 반투명한 흰색입니다.
|
|
193
|
+
|
|
194
|
+
</Ko>
|
|
195
|
+
|
|
196
|
+
<Canvas of={SegmentedControlStories.UsageTokens} sourceState="none" />
|
|
197
|
+
|
|
198
|
+
<En>
|
|
199
|
+
|
|
200
|
+
## Related
|
|
201
|
+
|
|
202
|
+
- **Tabs**: different sections with their own content.
|
|
203
|
+
- **Select** / **Radio**: more options, or options in a form.
|
|
204
|
+
- **Switch**: on / off.
|
|
205
|
+
|
|
206
|
+
</En>
|
|
207
|
+
|
|
208
|
+
<Ko>
|
|
209
|
+
|
|
210
|
+
## 관련 컴포넌트
|
|
211
|
+
|
|
212
|
+
- **Tabs**: 내용이 따로 있는 서로 다른 구역.
|
|
213
|
+
- **Select** / **Radio**: 선택지가 많거나 양식 안의 선택지.
|
|
214
|
+
- **Switch**: 켜기 / 끄기.
|
|
215
|
+
|
|
216
|
+
</Ko>
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { Box, Flex, Text, VStack } from '@chakra-ui/react';
|
|
2
2
|
import { Meta, StoryObj } from '@storybook/react';
|
|
3
3
|
|
|
4
|
+
import { T } from '../../guidelines/_components/Lang';
|
|
5
|
+
import { TokenTable } from '../../guidelines/_components/TokenTable';
|
|
4
6
|
import { ProgressSegment, SegmentedProgressBar } from './';
|
|
5
7
|
|
|
6
8
|
const meta = {
|
|
@@ -274,3 +276,55 @@ export const CustomColors: Story = {
|
|
|
274
276
|
</VStack>
|
|
275
277
|
),
|
|
276
278
|
};
|
|
279
|
+
|
|
280
|
+
// ───────────────────────── Usage-page specimens ─────────────────────────
|
|
281
|
+
// Pulled into `SegmentedProgressBar.usage.mdx` with <Canvas of={…} />. Hidden
|
|
282
|
+
// from the sidebar (`!dev`).
|
|
283
|
+
|
|
284
|
+
export const DoCountsInText: Story = {
|
|
285
|
+
tags: ['!dev'],
|
|
286
|
+
parameters: { layout: 'padded' },
|
|
287
|
+
name: 'Usage / Do: counts in words next to the bar',
|
|
288
|
+
render: () => (
|
|
289
|
+
<Box width="400px">
|
|
290
|
+
<SegmentedProgressBar max={100} height="8px" aria-hidden>
|
|
291
|
+
<ProgressSegment value={42} filledTrackColor="success.solid" />
|
|
292
|
+
<ProgressSegment value={3} filledTrackColor="danger.solid" />
|
|
293
|
+
</SegmentedProgressBar>
|
|
294
|
+
<Flex gap={4} mt={2} textStyle="subtext" color="fg.muted">
|
|
295
|
+
<Text>보냄 42</Text>
|
|
296
|
+
<Text color="danger.fg">실패 3</Text>
|
|
297
|
+
<Text>남음 55</Text>
|
|
298
|
+
</Flex>
|
|
299
|
+
</Box>
|
|
300
|
+
),
|
|
301
|
+
};
|
|
302
|
+
|
|
303
|
+
export const DontColourOnly: Story = {
|
|
304
|
+
tags: ['!dev'],
|
|
305
|
+
parameters: { layout: 'padded' },
|
|
306
|
+
name: "Usage / Don't: segments with no words",
|
|
307
|
+
render: () => (
|
|
308
|
+
<Box width="400px">
|
|
309
|
+
<SegmentedProgressBar max={100} height="8px">
|
|
310
|
+
<ProgressSegment value={42} filledTrackColor="success.solid" />
|
|
311
|
+
<ProgressSegment value={3} filledTrackColor="danger.solid" />
|
|
312
|
+
</SegmentedProgressBar>
|
|
313
|
+
</Box>
|
|
314
|
+
),
|
|
315
|
+
};
|
|
316
|
+
|
|
317
|
+
/** Tokens the bar reads, from `SegmentedProgressBar.tsx` and the theme. */
|
|
318
|
+
export const UsageTokens: Story = {
|
|
319
|
+
tags: ['!dev'],
|
|
320
|
+
parameters: { layout: 'padded' },
|
|
321
|
+
name: 'Usage / Tokens',
|
|
322
|
+
render: () => (
|
|
323
|
+
<TokenTable
|
|
324
|
+
rows={[
|
|
325
|
+
{ token: 'bg.track', use: <T en="remainder behind the segments" ko="세그먼트 뒤의 남은 부분" /> },
|
|
326
|
+
{ token: 'primary.main', use: <T en="segment fill (default)" ko="세그먼트 채움(기본)" /> },
|
|
327
|
+
]}
|
|
328
|
+
/>
|
|
329
|
+
),
|
|
330
|
+
};
|
|
@@ -3,9 +3,11 @@ import { BoxProps } from '@chakra-ui/react';
|
|
|
3
3
|
import { ProgressBarProps } from '../ProgressBar/ProgressBar.types';
|
|
4
4
|
|
|
5
5
|
export type SegmentedProgressBarProps = BoxProps & {
|
|
6
|
+
/** The whole; each segment's width is `value / max`. */
|
|
6
7
|
max: number;
|
|
7
8
|
};
|
|
8
9
|
|
|
9
10
|
export type ProgressSegmentProps = ProgressBarProps & {
|
|
11
|
+
/** This part's amount, in the same unit as the bar's `max`. */
|
|
10
12
|
value: number;
|
|
11
13
|
};
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { ArgTypes, Canvas, Meta } from '@storybook/blocks';
|
|
2
|
+
|
|
3
|
+
import { En, Ko, LangToggle, Verdict } from '../../guidelines/_components/Lang';
|
|
4
|
+
import * as SegmentedProgressBarStories from './SegmentedProgressBar.stories';
|
|
5
|
+
|
|
6
|
+
<Meta of={SegmentedProgressBarStories} name="Usage" />
|
|
7
|
+
|
|
8
|
+
<LangToggle />
|
|
9
|
+
|
|
10
|
+
<En>
|
|
11
|
+
|
|
12
|
+
# SegmentedProgressBar
|
|
13
|
+
|
|
14
|
+
One bar split into parts of a single whole, such as messages sent, failed and
|
|
15
|
+
still to go.
|
|
16
|
+
|
|
17
|
+
## When to use
|
|
18
|
+
|
|
19
|
+
- A batch job with more than one outcome: sent and failed, accepted and
|
|
20
|
+
rejected.
|
|
21
|
+
- A total split into two or three parts the reader compares at a glance.
|
|
22
|
+
|
|
23
|
+
## When not to use
|
|
24
|
+
|
|
25
|
+
- A single value against a limit → `ProgressBar`.
|
|
26
|
+
- Many categories, or a share of storage or budget → `RadialProgress` with a
|
|
27
|
+
legend, or a table.
|
|
28
|
+
|
|
29
|
+
## How it works
|
|
30
|
+
|
|
31
|
+
- `<SegmentedProgressBar max={total}>` draws the `bg.track` remainder; each
|
|
32
|
+
`<ProgressSegment value={n} filledTrackColor="…" />` inside it takes
|
|
33
|
+
`n / max` of the width, in order.
|
|
34
|
+
- `height` defaults to 16px; pass `height` for a slimmer bar.
|
|
35
|
+
|
|
36
|
+
</En>
|
|
37
|
+
|
|
38
|
+
<Ko>
|
|
39
|
+
|
|
40
|
+
# SegmentedProgressBar
|
|
41
|
+
|
|
42
|
+
보낸 메시지, 실패한 메시지, 남은 메시지처럼 하나의 전체를 이루는 부분을 막대 하나에
|
|
43
|
+
나눠 보여 줍니다.
|
|
44
|
+
|
|
45
|
+
## 언제 쓰나요
|
|
46
|
+
|
|
47
|
+
- 결과가 둘 이상인 일괄 작업: 보냄과 실패, 승인과 거절.
|
|
48
|
+
- 전체를 두세 부분으로 나눠 한눈에 비교할 때.
|
|
49
|
+
|
|
50
|
+
## 언제 쓰지 않나요
|
|
51
|
+
|
|
52
|
+
- 한도에 대한 값 하나는 `ProgressBar`를 씁니다.
|
|
53
|
+
- 분류가 많거나 저장 공간, 예산의 비율이라면 범례를 붙인 `RadialProgress`나 표를
|
|
54
|
+
씁니다.
|
|
55
|
+
|
|
56
|
+
## 동작 방식
|
|
57
|
+
|
|
58
|
+
- `<SegmentedProgressBar max={total}>`이 `bg.track` 바탕을 그리고, 그 안의
|
|
59
|
+
`<ProgressSegment value={n} filledTrackColor="…" />`가 차례대로 폭의 `n / max`만큼
|
|
60
|
+
차지합니다.
|
|
61
|
+
- 높이 기본값은 16px입니다. 더 얇게 하려면 `height`를 넘깁니다.
|
|
62
|
+
|
|
63
|
+
</Ko>
|
|
64
|
+
|
|
65
|
+
<ArgTypes of={SegmentedProgressBarStories} include={['max', 'height']} />
|
|
66
|
+
|
|
67
|
+
<En>
|
|
68
|
+
|
|
69
|
+
## Do / Don't
|
|
70
|
+
|
|
71
|
+
</En>
|
|
72
|
+
|
|
73
|
+
<Ko>
|
|
74
|
+
|
|
75
|
+
## 이렇게 하세요 / 이렇게 하지 마세요
|
|
76
|
+
|
|
77
|
+
</Ko>
|
|
78
|
+
|
|
79
|
+
<Canvas of={SegmentedProgressBarStories.DoCountsInText} />
|
|
80
|
+
<Verdict
|
|
81
|
+
kind="do"
|
|
82
|
+
en="Write each count next to the bar and colour the failure count's text too. Hide the bar itself from screen readers (aria-hidden) when the text says everything."
|
|
83
|
+
ko="부분별 개수를 막대 옆에 글자로 쓰고, 실패 개수는 글자에도 색을 입힙니다. 글자가 모든 정보를 전한다면 막대는 화면 낭독기에서 숨깁니다(aria-hidden)."
|
|
84
|
+
/>
|
|
85
|
+
|
|
86
|
+
<Canvas of={SegmentedProgressBarStories.DontColourOnly} />
|
|
87
|
+
<Verdict
|
|
88
|
+
kind="dont"
|
|
89
|
+
en="Show the segments with no words. Green and red are the only way to tell them apart, and each segment is announced as a full progress bar."
|
|
90
|
+
ko="글자 없이 세그먼트만 보여 주지 마세요. 초록과 빨강 말고는 구분할 방법이 없고, 세그먼트마다 꽉 찬 진행 막대로 읽힙니다."
|
|
91
|
+
/>
|
|
92
|
+
|
|
93
|
+
<En>
|
|
94
|
+
|
|
95
|
+
## Accessibility
|
|
96
|
+
|
|
97
|
+
- **Each segment is announced as a separate, full progress bar.**
|
|
98
|
+
`ProgressSegment` is a `ProgressBar` with `max` set to its own `value`, so a
|
|
99
|
+
screen reader hears "100%" once per segment, and the container has no role
|
|
100
|
+
or name. Until that changes, put the counts in text and set `aria-hidden` on
|
|
101
|
+
the bar (WCAG 1.3.1, 4.1.2).
|
|
102
|
+
- **Words, not colour alone** (WCAG 1.4.1).
|
|
103
|
+
- Status colours (`success.solid`, `danger.solid`) only when the parts are
|
|
104
|
+
outcomes; other parts take `primary.main` or category tokens. Use tokens,
|
|
105
|
+
not hex.
|
|
106
|
+
|
|
107
|
+
## Tokens
|
|
108
|
+
|
|
109
|
+
</En>
|
|
110
|
+
|
|
111
|
+
<Ko>
|
|
112
|
+
|
|
113
|
+
## 접근성
|
|
114
|
+
|
|
115
|
+
- **세그먼트마다 따로, 꽉 찬 진행 막대로 읽힙니다.** `ProgressSegment`는 `max`를 자기
|
|
116
|
+
`value`로 정한 `ProgressBar`라서, 화면 낭독기는 세그먼트마다 "100%"라고 읽습니다.
|
|
117
|
+
바깥 요소에는 역할도 이름도 없습니다. 이 문제가 고쳐질 때까지는 개수를 글자로 쓰고
|
|
118
|
+
막대에 `aria-hidden`을 붙입니다(WCAG 1.3.1, 4.1.2).
|
|
119
|
+
- **색만으로 알리지 않습니다**(WCAG 1.4.1).
|
|
120
|
+
- 부분이 작업 결과일 때만 상태색(`success.solid`, `danger.solid`)을 씁니다. 그 밖의
|
|
121
|
+
부분은 `primary.main`이나 category 토큰을 씁니다. 16진수가 아니라 토큰을 씁니다.
|
|
122
|
+
|
|
123
|
+
## 토큰
|
|
124
|
+
|
|
125
|
+
</Ko>
|
|
126
|
+
|
|
127
|
+
<Canvas of={SegmentedProgressBarStories.UsageTokens} sourceState="none" />
|
|
128
|
+
|
|
129
|
+
<En>
|
|
130
|
+
|
|
131
|
+
## Related
|
|
132
|
+
|
|
133
|
+
- **ProgressBar**: one value against a limit.
|
|
134
|
+
- **RadialProgress**: a share split into categories.
|
|
135
|
+
|
|
136
|
+
</En>
|
|
137
|
+
|
|
138
|
+
<Ko>
|
|
139
|
+
|
|
140
|
+
## 관련 컴포넌트
|
|
141
|
+
|
|
142
|
+
- **ProgressBar**: 한도에 대한 값 하나.
|
|
143
|
+
- **RadialProgress**: 분류별로 나눈 비율.
|
|
144
|
+
|
|
145
|
+
</Ko>
|
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
import { forwardRef } from 'react';
|
|
2
2
|
import { Combobox as ChakraCombobox } from '@chakra-ui/react';
|
|
3
3
|
|
|
4
|
+
import { useTranslate } from '@/hooks/useTranslate';
|
|
4
5
|
import { noZoomOnFocus } from '@/theme/formControls';
|
|
5
6
|
import { mergeCss } from '@/utils/mergeCss';
|
|
6
7
|
|
|
7
|
-
import {
|
|
8
|
+
import { CloseIcon } from '../Icon';
|
|
9
|
+
import {
|
|
10
|
+
comboboxClearTriggerStyles,
|
|
11
|
+
contentStyles,
|
|
12
|
+
inputStyles,
|
|
13
|
+
itemStyles,
|
|
14
|
+
} from './Select.styles';
|
|
8
15
|
|
|
9
16
|
const Input = forwardRef<HTMLInputElement, ChakraCombobox.InputProps>(
|
|
10
17
|
function ComboboxInput({ css, ...props }, ref) {
|
|
@@ -47,10 +54,28 @@ const Item = forwardRef<HTMLDivElement, ChakraCombobox.ItemProps>(
|
|
|
47
54
|
}
|
|
48
55
|
);
|
|
49
56
|
|
|
57
|
+
/** Same × as `Select.ClearTrigger`; see there. */
|
|
58
|
+
const ClearTrigger = forwardRef<
|
|
59
|
+
HTMLButtonElement,
|
|
60
|
+
ChakraCombobox.ClearTriggerProps
|
|
61
|
+
>(function ComboboxClearTrigger({ css, children, ...props }, ref) {
|
|
62
|
+
const translate = useTranslate();
|
|
63
|
+
return (
|
|
64
|
+
<ChakraCombobox.ClearTrigger
|
|
65
|
+
ref={ref}
|
|
66
|
+
aria-label={translate('clear_selection') as string}
|
|
67
|
+
{...props}
|
|
68
|
+
css={mergeCss(comboboxClearTriggerStyles, css)}
|
|
69
|
+
>
|
|
70
|
+
{children ?? <CloseIcon aria-hidden />}
|
|
71
|
+
</ChakraCombobox.ClearTrigger>
|
|
72
|
+
);
|
|
73
|
+
});
|
|
74
|
+
|
|
50
75
|
/**
|
|
51
76
|
* Compound Combobox primitives — Chakra's `Combobox` namespace with the
|
|
52
77
|
* Logician design-system styling baked into the visual parts (`Input`,
|
|
53
|
-
* `Content`, `Item`). Use these directly for full compositional control;
|
|
78
|
+
* `Content`, `Item`, `ClearTrigger`). Use these directly for full compositional control;
|
|
54
79
|
* use `ComboboxField` for the common single-select case.
|
|
55
80
|
*/
|
|
56
81
|
export const Combobox = {
|
|
@@ -62,7 +87,7 @@ export const Combobox = {
|
|
|
62
87
|
Input,
|
|
63
88
|
Trigger: ChakraCombobox.Trigger,
|
|
64
89
|
IndicatorGroup: ChakraCombobox.IndicatorGroup,
|
|
65
|
-
ClearTrigger
|
|
90
|
+
ClearTrigger,
|
|
66
91
|
Positioner: ChakraCombobox.Positioner,
|
|
67
92
|
Content,
|
|
68
93
|
Empty: ChakraCombobox.Empty,
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { ChakraProvider, createListCollection } from '@chakra-ui/react';
|
|
2
|
+
import { fireEvent, render, screen, waitFor } from '@testing-library/react';
|
|
3
|
+
import { describe, expect, it, vi } from 'vitest';
|
|
4
|
+
|
|
5
|
+
import { system } from '../../theme';
|
|
6
|
+
import { Select } from './Select';
|
|
7
|
+
|
|
8
|
+
const collection = createListCollection({
|
|
9
|
+
items: [
|
|
10
|
+
{ label: 'React', value: 'react' },
|
|
11
|
+
{ label: 'Vue', value: 'vue' },
|
|
12
|
+
],
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
const renderClearable = (
|
|
16
|
+
clearTrigger: React.ReactNode,
|
|
17
|
+
onValueChange = vi.fn(),
|
|
18
|
+
defaultValue = ['react']
|
|
19
|
+
) =>
|
|
20
|
+
render(
|
|
21
|
+
<ChakraProvider value={system}>
|
|
22
|
+
<Select.Root
|
|
23
|
+
collection={collection}
|
|
24
|
+
defaultValue={defaultValue}
|
|
25
|
+
onValueChange={onValueChange}
|
|
26
|
+
>
|
|
27
|
+
<Select.HiddenSelect />
|
|
28
|
+
<Select.Control>
|
|
29
|
+
<Select.Trigger>
|
|
30
|
+
<Select.ValueText />
|
|
31
|
+
</Select.Trigger>
|
|
32
|
+
<Select.IndicatorGroup>
|
|
33
|
+
{clearTrigger}
|
|
34
|
+
<Select.Indicator />
|
|
35
|
+
</Select.IndicatorGroup>
|
|
36
|
+
</Select.Control>
|
|
37
|
+
</Select.Root>
|
|
38
|
+
</ChakraProvider>
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
describe('Select.ClearTrigger', () => {
|
|
42
|
+
it('names itself in the library language instead of "Clear value"', () => {
|
|
43
|
+
renderClearable(<Select.ClearTrigger />);
|
|
44
|
+
|
|
45
|
+
const button = screen.getByRole('button', { name: '선택 지우기' });
|
|
46
|
+
expect(button.querySelector('svg')).not.toBeNull();
|
|
47
|
+
expect(screen.queryByRole('button', { name: 'Clear value' })).toBeNull();
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
it("keeps the caller's aria-label and still clears the value", async () => {
|
|
51
|
+
const onValueChange = vi.fn();
|
|
52
|
+
renderClearable(
|
|
53
|
+
<Select.ClearTrigger aria-label="조직 선택 지우기" />,
|
|
54
|
+
onValueChange
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
fireEvent.click(screen.getByRole('button', { name: '조직 선택 지우기' }));
|
|
58
|
+
|
|
59
|
+
await waitFor(() =>
|
|
60
|
+
expect(onValueChange).toHaveBeenCalledWith(
|
|
61
|
+
expect.objectContaining({ value: [] })
|
|
62
|
+
)
|
|
63
|
+
);
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
it('stays hidden while nothing is selected', () => {
|
|
67
|
+
renderClearable(<Select.ClearTrigger />, vi.fn(), []);
|
|
68
|
+
|
|
69
|
+
const button = document.querySelector<HTMLElement>(
|
|
70
|
+
'[data-part="clear-trigger"]'
|
|
71
|
+
);
|
|
72
|
+
expect(button).not.toBeNull();
|
|
73
|
+
expect(button).toHaveAttribute('hidden');
|
|
74
|
+
expect(getComputedStyle(button!).display).toBe('none');
|
|
75
|
+
});
|
|
76
|
+
});
|