@os-design/core 1.0.156 → 1.0.158
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/dist/cjs/Alert/index.js +4 -30
- package/dist/cjs/Alert/index.js.map +1 -1
- package/dist/cjs/Avatar/index.js +15 -39
- package/dist/cjs/Avatar/index.js.map +1 -1
- package/dist/cjs/Avatar/utils/nameToInitials.js +1 -3
- package/dist/cjs/Avatar/utils/nameToInitials.js.map +1 -1
- package/dist/cjs/Avatar/utils/strToHue.js +0 -4
- package/dist/cjs/Avatar/utils/strToHue.js.map +1 -1
- package/dist/cjs/AvatarSkeleton/index.js +3 -20
- package/dist/cjs/AvatarSkeleton/index.js.map +1 -1
- package/dist/cjs/Breadcrumb/index.js +4 -30
- package/dist/cjs/Breadcrumb/index.js.map +1 -1
- package/dist/cjs/BreadcrumbItem/index.js +8 -28
- package/dist/cjs/BreadcrumbItem/index.js.map +1 -1
- package/dist/cjs/Button/ButtonContent.js +7 -20
- package/dist/cjs/Button/ButtonContent.js.map +1 -1
- package/dist/cjs/Button/index.js +23 -53
- package/dist/cjs/Button/index.js.map +1 -1
- package/dist/cjs/Button/utils/useButtonColors.js +3 -12
- package/dist/cjs/Button/utils/useButtonColors.js.map +1 -1
- package/dist/cjs/Checkbox/index.js +20 -59
- package/dist/cjs/Checkbox/index.js.map +1 -1
- package/dist/cjs/CheckboxSkeleton/index.js +2 -22
- package/dist/cjs/CheckboxSkeleton/index.js.map +1 -1
- package/dist/cjs/DatePicker/DatePickerCalendar.js +11 -48
- package/dist/cjs/DatePicker/DatePickerCalendar.js.map +1 -1
- package/dist/cjs/DatePicker/index.js +32 -68
- package/dist/cjs/DatePicker/index.js.map +1 -1
- package/dist/cjs/Drawer/index.js +14 -44
- package/dist/cjs/Drawer/index.js.map +1 -1
- package/dist/cjs/Form/FormConfigContext.js +0 -4
- package/dist/cjs/Form/FormConfigContext.js.map +1 -1
- package/dist/cjs/Form/index.js +3 -20
- package/dist/cjs/Form/index.js.map +1 -1
- package/dist/cjs/FormDivider/index.js +3 -24
- package/dist/cjs/FormDivider/index.js.map +1 -1
- package/dist/cjs/FormItem/index.js +12 -42
- package/dist/cjs/FormItem/index.js.map +1 -1
- package/dist/cjs/FormItem/utils/firstChildHasType.js +0 -5
- package/dist/cjs/FormItem/utils/firstChildHasType.js.map +1 -1
- package/dist/cjs/Gallery/Status.js +2 -12
- package/dist/cjs/Gallery/Status.js.map +1 -1
- package/dist/cjs/Gallery/index.js +27 -61
- package/dist/cjs/Gallery/index.js.map +1 -1
- package/dist/cjs/GlobalStyles/index.js +0 -8
- package/dist/cjs/GlobalStyles/index.js.map +1 -1
- package/dist/cjs/GlobalStyles/resetStyles.js +0 -5
- package/dist/cjs/GlobalStyles/resetStyles.js.map +1 -1
- package/dist/cjs/GlobalStyles/typographyStyles.js +0 -11
- package/dist/cjs/GlobalStyles/typographyStyles.js.map +1 -1
- package/dist/cjs/HeaderSkeleton/index.js +7 -26
- package/dist/cjs/HeaderSkeleton/index.js.map +1 -1
- package/dist/cjs/Image/index.js +11 -31
- package/dist/cjs/Image/index.js.map +1 -1
- package/dist/cjs/ImageSkeleton/index.js +1 -12
- package/dist/cjs/ImageSkeleton/index.js.map +1 -1
- package/dist/cjs/Input/index.js +23 -57
- package/dist/cjs/Input/index.js.map +1 -1
- package/dist/cjs/Input/utils/getFocusableElements.js +0 -8
- package/dist/cjs/Input/utils/getFocusableElements.js.map +1 -1
- package/dist/cjs/InputNumber/index.js +49 -72
- package/dist/cjs/InputNumber/index.js.map +1 -1
- package/dist/cjs/InputNumber/utils/defaultLocale.js.map +1 -1
- package/dist/cjs/InputPassword/index.js +39 -77
- package/dist/cjs/InputPassword/index.js.map +1 -1
- package/dist/cjs/InputPassword/utils/defaultLocale.js.map +1 -1
- package/dist/cjs/InputSearch/index.js +22 -51
- package/dist/cjs/InputSearch/index.js.map +1 -1
- package/dist/cjs/InputSearch/utils/defaultLocale.js.map +1 -1
- package/dist/cjs/InputSkeleton/index.js +1 -14
- package/dist/cjs/InputSkeleton/index.js.map +1 -1
- package/dist/cjs/Layout/LayoutContext.js +0 -4
- package/dist/cjs/Layout/LayoutContext.js.map +1 -1
- package/dist/cjs/Layout/index.js +4 -12
- package/dist/cjs/Layout/index.js.map +1 -1
- package/dist/cjs/Link/index.js +8 -30
- package/dist/cjs/Link/index.js.map +1 -1
- package/dist/cjs/LinkButton/index.js +26 -49
- package/dist/cjs/LinkButton/index.js.map +1 -1
- package/dist/cjs/List/WindowScroller.js +4 -12
- package/dist/cjs/List/WindowScroller.js.map +1 -1
- package/dist/cjs/List/index.js +35 -68
- package/dist/cjs/List/index.js.map +1 -1
- package/dist/cjs/List/utils/bodyPointerEvents.js +0 -9
- package/dist/cjs/List/utils/bodyPointerEvents.js.map +1 -1
- package/dist/cjs/List/utils/frameTimeout.js +1 -8
- package/dist/cjs/List/utils/frameTimeout.js.map +1 -1
- package/dist/cjs/List/utils/useRWLoadNext.js +6 -9
- package/dist/cjs/List/utils/useRWLoadNext.js.map +1 -1
- package/dist/cjs/ListItem/ListItemContent.js +12 -44
- package/dist/cjs/ListItem/ListItemContent.js.map +1 -1
- package/dist/cjs/ListItem/index.js +15 -39
- package/dist/cjs/ListItem/index.js.map +1 -1
- package/dist/cjs/ListItemLink/index.js +18 -51
- package/dist/cjs/ListItemLink/index.js.map +1 -1
- package/dist/cjs/ListSkeleton/index.js +11 -32
- package/dist/cjs/ListSkeleton/index.js.map +1 -1
- package/dist/cjs/LogoLink/index.js +6 -27
- package/dist/cjs/LogoLink/index.js.map +1 -1
- package/dist/cjs/Menu/index.js +20 -47
- package/dist/cjs/Menu/index.js.map +1 -1
- package/dist/cjs/Menu/utils/useFocusWithArrows.js +1 -13
- package/dist/cjs/Menu/utils/useFocusWithArrows.js.map +1 -1
- package/dist/cjs/MenuDivider/index.js +1 -13
- package/dist/cjs/MenuDivider/index.js.map +1 -1
- package/dist/cjs/MenuGroup/index.js +19 -52
- package/dist/cjs/MenuGroup/index.js.map +1 -1
- package/dist/cjs/MenuItem/index.js +9 -32
- package/dist/cjs/MenuItem/index.js.map +1 -1
- package/dist/cjs/Modal/index.js +25 -65
- package/dist/cjs/Modal/index.js.map +1 -1
- package/dist/cjs/Modal/utils/defaultLocale.js.map +1 -1
- package/dist/cjs/Navigation/index.js +6 -35
- package/dist/cjs/Navigation/index.js.map +1 -1
- package/dist/cjs/Navigation/utils/useScrollFlags.js +6 -19
- package/dist/cjs/Navigation/utils/useScrollFlags.js.map +1 -1
- package/dist/cjs/NavigationItem/index.js +8 -32
- package/dist/cjs/NavigationItem/index.js.map +1 -1
- package/dist/cjs/PageContent/index.js +6 -30
- package/dist/cjs/PageContent/index.js.map +1 -1
- package/dist/cjs/PageHeader/index.js +13 -46
- package/dist/cjs/PageHeader/index.js.map +1 -1
- package/dist/cjs/PageHeader/utils/defaultLocale.js.map +1 -1
- package/dist/cjs/PageHeaderInputSearch/index.js +10 -46
- package/dist/cjs/PageHeaderInputSearch/index.js.map +1 -1
- package/dist/cjs/PageHeaderInputSearch/utils/defaultLocale.js +0 -7
- package/dist/cjs/PageHeaderInputSearch/utils/defaultLocale.js.map +1 -1
- package/dist/cjs/PageHeaderSkeleton/index.js +3 -18
- package/dist/cjs/PageHeaderSkeleton/index.js.map +1 -1
- package/dist/cjs/ParagraphSkeleton/index.js +7 -25
- package/dist/cjs/ParagraphSkeleton/index.js.map +1 -1
- package/dist/cjs/Popover/index.js +46 -77
- package/dist/cjs/Popover/index.js.map +1 -1
- package/dist/cjs/Popover/utils/usePopoverPosition.js +21 -43
- package/dist/cjs/Popover/utils/usePopoverPosition.js.map +1 -1
- package/dist/cjs/Progress/index.js +6 -25
- package/dist/cjs/Progress/index.js.map +1 -1
- package/dist/cjs/RadioGroup/index.js +25 -55
- package/dist/cjs/RadioGroup/index.js.map +1 -1
- package/dist/cjs/RadioGroupSkeleton/index.js +3 -20
- package/dist/cjs/RadioGroupSkeleton/index.js.map +1 -1
- package/dist/cjs/Result/index.js +6 -30
- package/dist/cjs/Result/index.js.map +1 -1
- package/dist/cjs/ScrollButton/index.js +15 -40
- package/dist/cjs/ScrollButton/index.js.map +1 -1
- package/dist/cjs/ScrollButton/utils/useContainerPosition.js +10 -23
- package/dist/cjs/ScrollButton/utils/useContainerPosition.js.map +1 -1
- package/dist/cjs/ScrollButton/utils/useVisibility.js +6 -19
- package/dist/cjs/ScrollButton/utils/useVisibility.js.map +1 -1
- package/dist/cjs/Select/SelectList.js +27 -53
- package/dist/cjs/Select/SelectList.js.map +1 -1
- package/dist/cjs/Select/SelectToggle.js +17 -52
- package/dist/cjs/Select/SelectToggle.js.map +1 -1
- package/dist/cjs/Select/index.js +60 -103
- package/dist/cjs/Select/index.js.map +1 -1
- package/dist/cjs/Select/utils/defaultLocale.js.map +1 -1
- package/dist/cjs/Skeleton/index.js +3 -20
- package/dist/cjs/Skeleton/index.js.map +1 -1
- package/dist/cjs/Switch/index.js +17 -52
- package/dist/cjs/Switch/index.js.map +1 -1
- package/dist/cjs/SwitchSkeleton/index.js +1 -14
- package/dist/cjs/SwitchSkeleton/index.js.map +1 -1
- package/dist/cjs/Tag/index.js +4 -26
- package/dist/cjs/Tag/index.js.map +1 -1
- package/dist/cjs/TagLink/index.js +7 -25
- package/dist/cjs/TagLink/index.js.map +1 -1
- package/dist/cjs/TagList/index.js +8 -38
- package/dist/cjs/TagList/index.js.map +1 -1
- package/dist/cjs/TagListSkeleton/index.js +4 -17
- package/dist/cjs/TagListSkeleton/index.js.map +1 -1
- package/dist/cjs/TagSkeleton/index.js +3 -20
- package/dist/cjs/TagSkeleton/index.js.map +1 -1
- package/dist/cjs/TextArea/index.js +6 -21
- package/dist/cjs/TextArea/index.js.map +1 -1
- package/dist/cjs/TextAreaSkeleton/index.js +1 -12
- package/dist/cjs/TextAreaSkeleton/index.js.map +1 -1
- package/dist/cjs/ThemeSwitcher/index.js +4 -20
- package/dist/cjs/ThemeSwitcher/index.js.map +1 -1
- package/dist/cjs/TimePicker/index.js +140 -0
- package/dist/cjs/TimePicker/index.js.map +1 -0
- package/dist/cjs/Video/index.js +2 -18
- package/dist/cjs/Video/index.js.map +1 -1
- package/dist/cjs/index.js +0 -126
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/message/AlertIcon.js +15 -26
- package/dist/cjs/message/AlertIcon.js.map +1 -1
- package/dist/cjs/message/Message.js +1 -17
- package/dist/cjs/message/Message.js.map +1 -1
- package/dist/cjs/message/index.js +7 -21
- package/dist/cjs/message/index.js.map +1 -1
- package/dist/cjs/message/styles.js +2 -12
- package/dist/cjs/message/styles.js.map +1 -1
- package/dist/esm/Alert/index.js +1 -10
- package/dist/esm/Alert/index.js.map +1 -1
- package/dist/esm/Avatar/index.js +5 -4
- package/dist/esm/Avatar/index.js.map +1 -1
- package/dist/esm/Avatar/utils/nameToInitials.js +0 -1
- package/dist/esm/Avatar/utils/nameToInitials.js.map +1 -1
- package/dist/esm/Avatar/utils/strToHue.js +0 -3
- package/dist/esm/Avatar/utils/strToHue.js.map +1 -1
- package/dist/esm/AvatarSkeleton/index.js +1 -2
- package/dist/esm/AvatarSkeleton/index.js.map +1 -1
- package/dist/esm/Breadcrumb/index.js +3 -5
- package/dist/esm/Breadcrumb/index.js.map +1 -1
- package/dist/esm/BreadcrumbItem/index.js +1 -2
- package/dist/esm/BreadcrumbItem/index.js.map +1 -1
- package/dist/esm/Button/ButtonContent.js +2 -2
- package/dist/esm/Button/ButtonContent.js.map +1 -1
- package/dist/esm/Button/index.js +1 -10
- package/dist/esm/Button/index.js.map +1 -1
- package/dist/esm/Button/utils/useButtonColors.js +0 -5
- package/dist/esm/Button/utils/useButtonColors.js.map +1 -1
- package/dist/esm/Checkbox/index.js +1 -15
- package/dist/esm/Checkbox/index.js.map +1 -1
- package/dist/esm/CheckboxSkeleton/index.js +1 -2
- package/dist/esm/CheckboxSkeleton/index.js.map +1 -1
- package/dist/esm/DatePicker/DatePickerCalendar.js +0 -7
- package/dist/esm/DatePicker/DatePickerCalendar.js.map +1 -1
- package/dist/esm/DatePicker/index.js +0 -5
- package/dist/esm/DatePicker/index.js.map +1 -1
- package/dist/esm/Drawer/index.js +1 -7
- package/dist/esm/Drawer/index.js.map +1 -1
- package/dist/esm/Form/FormConfigContext.js.map +1 -1
- package/dist/esm/Form/index.js +1 -2
- package/dist/esm/Form/index.js.map +1 -1
- package/dist/esm/FormDivider/index.js +1 -2
- package/dist/esm/FormDivider/index.js.map +1 -1
- package/dist/esm/FormItem/index.js +1 -4
- package/dist/esm/FormItem/index.js.map +1 -1
- package/dist/esm/FormItem/utils/firstChildHasType.js +0 -2
- package/dist/esm/FormItem/utils/firstChildHasType.js.map +1 -1
- package/dist/esm/Gallery/Status.js +0 -2
- package/dist/esm/Gallery/Status.js.map +1 -1
- package/dist/esm/Gallery/index.js +3 -7
- package/dist/esm/Gallery/index.js.map +1 -1
- package/dist/esm/GlobalStyles/index.js +0 -2
- package/dist/esm/GlobalStyles/index.js.map +1 -1
- package/dist/esm/GlobalStyles/resetStyles.js +0 -2
- package/dist/esm/GlobalStyles/resetStyles.js.map +1 -1
- package/dist/esm/GlobalStyles/typographyStyles.js +0 -4
- package/dist/esm/GlobalStyles/typographyStyles.js.map +1 -1
- package/dist/esm/HeaderSkeleton/index.js +1 -4
- package/dist/esm/HeaderSkeleton/index.js.map +1 -1
- package/dist/esm/Image/index.js +1 -6
- package/dist/esm/Image/index.js.map +1 -1
- package/dist/esm/ImageSkeleton/index.js +1 -2
- package/dist/esm/ImageSkeleton/index.js.map +1 -1
- package/dist/esm/Input/index.js +1 -10
- package/dist/esm/Input/index.js.map +1 -1
- package/dist/esm/Input/utils/getFocusableElements.js +0 -1
- package/dist/esm/Input/utils/getFocusableElements.js.map +1 -1
- package/dist/esm/InputNumber/index.js +10 -7
- package/dist/esm/InputNumber/index.js.map +1 -1
- package/dist/esm/InputNumber/utils/defaultLocale.js.map +1 -1
- package/dist/esm/InputPassword/index.js +3 -8
- package/dist/esm/InputPassword/index.js.map +1 -1
- package/dist/esm/InputPassword/utils/defaultLocale.js.map +1 -1
- package/dist/esm/InputSearch/index.js +1 -2
- package/dist/esm/InputSearch/index.js.map +1 -1
- package/dist/esm/InputSearch/utils/defaultLocale.js.map +1 -1
- package/dist/esm/InputSkeleton/index.js +1 -2
- package/dist/esm/InputSkeleton/index.js.map +1 -1
- package/dist/esm/Layout/LayoutContext.js.map +1 -1
- package/dist/esm/Layout/index.js +0 -2
- package/dist/esm/Layout/index.js.map +1 -1
- package/dist/esm/Link/index.js +3 -8
- package/dist/esm/Link/index.js.map +1 -1
- package/dist/esm/LinkButton/index.js +1 -4
- package/dist/esm/LinkButton/index.js.map +1 -1
- package/dist/esm/List/WindowScroller.js +2 -4
- package/dist/esm/List/WindowScroller.js.map +1 -1
- package/dist/esm/List/index.js +10 -9
- package/dist/esm/List/index.js.map +1 -1
- package/dist/esm/List/utils/bodyPointerEvents.js +0 -1
- package/dist/esm/List/utils/bodyPointerEvents.js.map +1 -1
- package/dist/esm/List/utils/frameTimeout.js +1 -4
- package/dist/esm/List/utils/frameTimeout.js.map +1 -1
- package/dist/esm/List/utils/useRWLoadNext.js +0 -2
- package/dist/esm/List/utils/useRWLoadNext.js.map +1 -1
- package/dist/esm/ListItem/ListItemContent.js +2 -6
- package/dist/esm/ListItem/ListItemContent.js.map +1 -1
- package/dist/esm/ListItem/index.js +1 -2
- package/dist/esm/ListItem/index.js.map +1 -1
- package/dist/esm/ListItemLink/index.js +1 -4
- package/dist/esm/ListItemLink/index.js.map +1 -1
- package/dist/esm/ListSkeleton/index.js +1 -2
- package/dist/esm/ListSkeleton/index.js.map +1 -1
- package/dist/esm/LogoLink/index.js +1 -4
- package/dist/esm/LogoLink/index.js.map +1 -1
- package/dist/esm/Menu/index.js +3 -3
- package/dist/esm/Menu/index.js.map +1 -1
- package/dist/esm/Menu/utils/useFocusWithArrows.js +0 -4
- package/dist/esm/Menu/utils/useFocusWithArrows.js.map +1 -1
- package/dist/esm/MenuDivider/index.js +1 -2
- package/dist/esm/MenuDivider/index.js.map +1 -1
- package/dist/esm/MenuGroup/index.js +1 -2
- package/dist/esm/MenuGroup/index.js.map +1 -1
- package/dist/esm/MenuItem/index.js +1 -4
- package/dist/esm/MenuItem/index.js.map +1 -1
- package/dist/esm/Modal/index.js +1 -8
- package/dist/esm/Modal/index.js.map +1 -1
- package/dist/esm/Modal/utils/defaultLocale.js.map +1 -1
- package/dist/esm/Navigation/index.js +1 -7
- package/dist/esm/Navigation/index.js.map +1 -1
- package/dist/esm/Navigation/utils/useScrollFlags.js +0 -2
- package/dist/esm/Navigation/utils/useScrollFlags.js.map +1 -1
- package/dist/esm/NavigationItem/index.js +1 -4
- package/dist/esm/NavigationItem/index.js.map +1 -1
- package/dist/esm/PageContent/index.js +1 -7
- package/dist/esm/PageContent/index.js.map +1 -1
- package/dist/esm/PageHeader/index.js +1 -8
- package/dist/esm/PageHeader/index.js.map +1 -1
- package/dist/esm/PageHeader/utils/defaultLocale.js.map +1 -1
- package/dist/esm/PageHeaderInputSearch/index.js +1 -5
- package/dist/esm/PageHeaderInputSearch/index.js.map +1 -1
- package/dist/esm/PageHeaderInputSearch/utils/defaultLocale.js +2 -1
- package/dist/esm/PageHeaderInputSearch/utils/defaultLocale.js.map +1 -1
- package/dist/esm/PageHeaderSkeleton/index.js +0 -2
- package/dist/esm/PageHeaderSkeleton/index.js.map +1 -1
- package/dist/esm/ParagraphSkeleton/index.js +1 -4
- package/dist/esm/ParagraphSkeleton/index.js.map +1 -1
- package/dist/esm/Popover/index.js +12 -13
- package/dist/esm/Popover/index.js.map +1 -1
- package/dist/esm/Popover/utils/usePopoverPosition.js +8 -19
- package/dist/esm/Popover/utils/usePopoverPosition.js.map +1 -1
- package/dist/esm/Progress/index.js +1 -2
- package/dist/esm/Progress/index.js.map +1 -1
- package/dist/esm/RadioGroup/index.js +1 -5
- package/dist/esm/RadioGroup/index.js.map +1 -1
- package/dist/esm/RadioGroupSkeleton/index.js +1 -2
- package/dist/esm/RadioGroupSkeleton/index.js.map +1 -1
- package/dist/esm/Result/index.js +1 -2
- package/dist/esm/Result/index.js.map +1 -1
- package/dist/esm/ScrollButton/index.js +7 -9
- package/dist/esm/ScrollButton/index.js.map +1 -1
- package/dist/esm/ScrollButton/utils/useContainerPosition.js +0 -2
- package/dist/esm/ScrollButton/utils/useContainerPosition.js.map +1 -1
- package/dist/esm/ScrollButton/utils/useVisibility.js +2 -5
- package/dist/esm/ScrollButton/utils/useVisibility.js.map +1 -1
- package/dist/esm/Select/SelectList.js +11 -12
- package/dist/esm/Select/SelectList.js.map +1 -1
- package/dist/esm/Select/SelectToggle.js +0 -14
- package/dist/esm/Select/SelectToggle.js.map +1 -1
- package/dist/esm/Select/index.js +4 -10
- package/dist/esm/Select/index.js.map +1 -1
- package/dist/esm/Select/utils/defaultLocale.js.map +1 -1
- package/dist/esm/Skeleton/index.js +1 -2
- package/dist/esm/Skeleton/index.js.map +1 -1
- package/dist/esm/Switch/index.js +1 -11
- package/dist/esm/Switch/index.js.map +1 -1
- package/dist/esm/SwitchSkeleton/index.js +1 -2
- package/dist/esm/SwitchSkeleton/index.js.map +1 -1
- package/dist/esm/Tag/index.js +1 -2
- package/dist/esm/Tag/index.js.map +1 -1
- package/dist/esm/TagLink/index.js +1 -2
- package/dist/esm/TagLink/index.js.map +1 -1
- package/dist/esm/TagList/index.js +1 -4
- package/dist/esm/TagList/index.js.map +1 -1
- package/dist/esm/TagListSkeleton/index.js +1 -2
- package/dist/esm/TagListSkeleton/index.js.map +1 -1
- package/dist/esm/TagSkeleton/index.js +1 -2
- package/dist/esm/TagSkeleton/index.js.map +1 -1
- package/dist/esm/TextArea/index.js +1 -2
- package/dist/esm/TextArea/index.js.map +1 -1
- package/dist/esm/TextAreaSkeleton/index.js +1 -2
- package/dist/esm/TextAreaSkeleton/index.js.map +1 -1
- package/dist/esm/ThemeSwitcher/index.js +0 -2
- package/dist/esm/ThemeSwitcher/index.js.map +1 -1
- package/dist/esm/TimePicker/index.js +105 -0
- package/dist/esm/TimePicker/index.js.map +1 -0
- package/dist/esm/Video/index.js +1 -2
- package/dist/esm/Video/index.js.map +1 -1
- package/dist/esm/emotion.d.js.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/message/AlertIcon.js +0 -2
- package/dist/esm/message/AlertIcon.js.map +1 -1
- package/dist/esm/message/Message.js.map +1 -1
- package/dist/esm/message/index.js +7 -9
- package/dist/esm/message/index.js.map +1 -1
- package/dist/esm/message/styles.js.map +1 -1
- package/dist/types/TimePicker/index.d.ts +11 -0
- package/dist/types/TimePicker/index.d.ts.map +1 -0
- package/package.json +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useVisibility.js","names":["useCallback","useState","useEvent","useBrowserLayoutEffect","useVisibility","container","scrollTo","minOffset","visible","setVisible","updateVisibility","offset","window","scrollY","document","body","scrollHeight","innerHeight","containerElement","Element","current","scrollTop","clientHeight","undefined"],"sources":["../../../../src/ScrollButton/utils/useVisibility.ts"],"sourcesContent":["import { RefObject, useCallback, useState } from 'react';\nimport { useEvent, useBrowserLayoutEffect } from '@os-design/utils';\n\ninterface UseVisibilityProps {\n container?: Element | RefObject<Element>;\n scrollTo: 'top' | 'bottom';\n minOffset: number;\n}\n\n/**\n * Controls the visibility of the button.\n */\nconst useVisibility = ({\n container,\n scrollTo,\n minOffset,\n}: UseVisibilityProps): boolean => {\n const [visible, setVisible] = useState(false);\n\n // Update the visibility of the button when the user scrolls the container\n const updateVisibility = useCallback(() => {\n let offset = 0;\n\n if (!container) {\n offset =\n scrollTo === 'top'\n ? window.scrollY\n : document.body.scrollHeight - window.scrollY - window.innerHeight;\n } else {\n const containerElement =\n container instanceof Element ? container : container.current;\n if (containerElement === null) return;\n\n offset =\n scrollTo === 'top'\n ? containerElement.scrollTop\n : containerElement.scrollHeight -\n containerElement.scrollTop -\n containerElement.clientHeight;\n }\n\n setVisible(offset >= minOffset);\n }, [container, scrollTo, minOffset]);\n\n useBrowserLayoutEffect(() => updateVisibility(), [updateVisibility]);\n useEvent(\n container ||\n ((typeof window !== 'undefined' ? window : undefined) as EventTarget),\n 'scroll',\n updateVisibility\n );\n\n return visible;\n};\n\nexport default useVisibility;\n"],"mappings":"AAAA,SAAoBA,
|
|
1
|
+
{"version":3,"file":"useVisibility.js","names":["useCallback","useState","useEvent","useBrowserLayoutEffect","useVisibility","container","scrollTo","minOffset","visible","setVisible","updateVisibility","offset","window","scrollY","document","body","scrollHeight","innerHeight","containerElement","Element","current","scrollTop","clientHeight","undefined"],"sources":["../../../../src/ScrollButton/utils/useVisibility.ts"],"sourcesContent":["import { RefObject, useCallback, useState } from 'react';\nimport { useEvent, useBrowserLayoutEffect } from '@os-design/utils';\n\ninterface UseVisibilityProps {\n container?: Element | RefObject<Element>;\n scrollTo: 'top' | 'bottom';\n minOffset: number;\n}\n\n/**\n * Controls the visibility of the button.\n */\nconst useVisibility = ({\n container,\n scrollTo,\n minOffset,\n}: UseVisibilityProps): boolean => {\n const [visible, setVisible] = useState(false);\n\n // Update the visibility of the button when the user scrolls the container\n const updateVisibility = useCallback(() => {\n let offset = 0;\n\n if (!container) {\n offset =\n scrollTo === 'top'\n ? window.scrollY\n : document.body.scrollHeight - window.scrollY - window.innerHeight;\n } else {\n const containerElement =\n container instanceof Element ? container : container.current;\n if (containerElement === null) return;\n\n offset =\n scrollTo === 'top'\n ? containerElement.scrollTop\n : containerElement.scrollHeight -\n containerElement.scrollTop -\n containerElement.clientHeight;\n }\n\n setVisible(offset >= minOffset);\n }, [container, scrollTo, minOffset]);\n\n useBrowserLayoutEffect(() => updateVisibility(), [updateVisibility]);\n useEvent(\n container ||\n ((typeof window !== 'undefined' ? window : undefined) as EventTarget),\n 'scroll',\n updateVisibility\n );\n\n return visible;\n};\n\nexport default useVisibility;\n"],"mappings":"AAAA,SAAoBA,WAAW,EAAEC,QAAQ,QAAQ,OAAO;AACxD,SAASC,QAAQ,EAAEC,sBAAsB,QAAQ,kBAAkB;AAQnE;AACA;AACA;AACA,MAAMC,aAAa,GAAG,CAAC;EACrBC,SAAS;EACTC,QAAQ;EACRC;AACkB,CAAC,KAAc;EACjC,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAGR,QAAQ,CAAC,KAAK,CAAC;;EAE7C;EACA,MAAMS,gBAAgB,GAAGV,WAAW,CAAC,MAAM;IACzC,IAAIW,MAAM,GAAG,CAAC;IAEd,IAAI,CAACN,SAAS,EAAE;MACdM,MAAM,GACJL,QAAQ,KAAK,KAAK,GACdM,MAAM,CAACC,OAAO,GACdC,QAAQ,CAACC,IAAI,CAACC,YAAY,GAAGJ,MAAM,CAACC,OAAO,GAAGD,MAAM,CAACK,WAAW;IACxE,CAAC,MAAM;MACL,MAAMC,gBAAgB,GACpBb,SAAS,YAAYc,OAAO,GAAGd,SAAS,GAAGA,SAAS,CAACe,OAAO;MAC9D,IAAIF,gBAAgB,KAAK,IAAI,EAAE;MAE/BP,MAAM,GACJL,QAAQ,KAAK,KAAK,GACdY,gBAAgB,CAACG,SAAS,GAC1BH,gBAAgB,CAACF,YAAY,GAC7BE,gBAAgB,CAACG,SAAS,GAC1BH,gBAAgB,CAACI,YAAY;IACrC;IAEAb,UAAU,CAACE,MAAM,IAAIJ,SAAS,CAAC;EACjC,CAAC,EAAE,CAACF,SAAS,EAAEC,QAAQ,EAAEC,SAAS,CAAC,CAAC;EAEpCJ,sBAAsB,CAAC,MAAMO,gBAAgB,EAAE,EAAE,CAACA,gBAAgB,CAAC,CAAC;EACpER,QAAQ,CACNG,SAAS,KACL,OAAOO,MAAM,KAAK,WAAW,GAAGA,MAAM,GAAGW,SAAS,CAAiB,EACvE,QAAQ,EACRb,gBAAgB,CACjB;EAED,OAAOF,OAAO;AAChB,CAAC;AAED,eAAeJ,aAAa"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
2
|
-
|
|
3
2
|
import React, { useCallback, useMemo } from 'react';
|
|
4
3
|
import { FixedSizeList } from 'react-window';
|
|
5
4
|
import { useFontSize, useSize } from '@os-design/utils';
|
|
@@ -8,7 +7,6 @@ import { useIsMinWidth } from '@os-design/media';
|
|
|
8
7
|
import { useSelectHandler } from '@os-design/menu-utils';
|
|
9
8
|
import MenuItem from '../MenuItem';
|
|
10
9
|
import useRWLoadNext from '../List/utils/useRWLoadNext';
|
|
11
|
-
|
|
12
10
|
const SelectList = ({
|
|
13
11
|
searchVisible,
|
|
14
12
|
options,
|
|
@@ -46,9 +44,8 @@ const SelectList = ({
|
|
|
46
44
|
const maxHeight = windowSize.height - theme.modalHeaderHeight * fontSize * scaleFactor - searchInputHeight;
|
|
47
45
|
const curHeight = options.length * itemSize + paddingTop + paddingBottom;
|
|
48
46
|
return curHeight < maxHeight ? curHeight : maxHeight;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
|
|
47
|
+
}
|
|
48
|
+
// Popover
|
|
52
49
|
const count = options.length < visibleCount ? options.length : visibleCount;
|
|
53
50
|
return count * itemSize + paddingTop + paddingBottom;
|
|
54
51
|
}, [isMinXs, options.length, visibleCount, itemSize, windowSize.height, theme.modalHeaderHeight, fontSize, scaleFactor, searchInputHeight, paddingTop, paddingBottom]);
|
|
@@ -64,13 +61,15 @@ const SelectList = ({
|
|
|
64
61
|
value: value || [],
|
|
65
62
|
onChange,
|
|
66
63
|
maxSelectedItems
|
|
67
|
-
});
|
|
64
|
+
});
|
|
68
65
|
|
|
66
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
69
67
|
const InnerElement = useCallback(({
|
|
70
68
|
style,
|
|
71
69
|
...innerElementRest
|
|
72
70
|
}) => /*#__PURE__*/React.createElement("div", _extends({
|
|
73
|
-
style: {
|
|
71
|
+
style: {
|
|
72
|
+
...style,
|
|
74
73
|
height: `${parseFloat(style.height) + paddingTop + paddingBottom}px`
|
|
75
74
|
},
|
|
76
75
|
role: "listbox",
|
|
@@ -87,21 +86,22 @@ const SelectList = ({
|
|
|
87
86
|
...restOption
|
|
88
87
|
} = options[index];
|
|
89
88
|
return /*#__PURE__*/React.createElement(MenuItem, _extends({
|
|
90
|
-
style: {
|
|
89
|
+
style: {
|
|
90
|
+
...style,
|
|
91
91
|
top: `${parseFloat(style.top ? style.top.toString() : '0') + paddingTop}px`
|
|
92
92
|
},
|
|
93
93
|
selected: (value || []).includes(optionValue || ''),
|
|
94
94
|
onClick: e => {
|
|
95
95
|
if (!optionValue) return;
|
|
96
|
-
onSelect(optionValue);
|
|
96
|
+
onSelect(optionValue);
|
|
97
|
+
|
|
98
|
+
// Focus the input.
|
|
97
99
|
// Otherwise, if the max number of selected items equals 1
|
|
98
100
|
// and the user presses enter to select an item,
|
|
99
101
|
// the input will lose focus.
|
|
100
|
-
|
|
101
102
|
if (containerRef.current && maxSelectedItems === 1) {
|
|
102
103
|
containerRef.current.focus();
|
|
103
104
|
}
|
|
104
|
-
|
|
105
105
|
if (optionOnClick) optionOnClick(e);
|
|
106
106
|
},
|
|
107
107
|
role: "option",
|
|
@@ -120,7 +120,6 @@ const SelectList = ({
|
|
|
120
120
|
innerElementType: InnerElement
|
|
121
121
|
}, listItemFn);
|
|
122
122
|
};
|
|
123
|
-
|
|
124
123
|
SelectList.displayName = 'SelectList';
|
|
125
124
|
export default SelectList;
|
|
126
125
|
//# sourceMappingURL=SelectList.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectList.js","names":["React","useCallback","useMemo","FixedSizeList","useFontSize","useSize","useTheme","useIsMinWidth","useSelectHandler","MenuItem","useRWLoadNext","SelectList","searchVisible","options","visibleCount","overscanCount","threshold","onLoadNext","maxSelectedItems","containerRef","value","onChange","id","size","windowSize","isMinXs","fontSize","document","body","theme","scaleFactor","s","includes","sizes","Number","replace","paddingBottom","paddingEm","menuPaddingVertical","modalBodyPaddingVertical","paddingTop","searchInputHeight","baseHeight","itemSize","menuItemHeight","height","maxHeight","modalHeaderHeight","curHeight","length","count","scrollHandler","itemCount","onSelect","InnerElement","style","innerElementRest","parseFloat","listItemFn","index","title","optionTitle","optionValue","onClick","optionOnClick","restOption","top","toString","e","current","focus","scrollOffset","displayName"],"sources":["../../../src/Select/SelectList.tsx"],"sourcesContent":["import React, { RefObject, useCallback, useMemo } from 'react';\nimport { FixedSizeList } from 'react-window';\nimport { useFontSize, useSize } from '@os-design/utils';\nimport { useTheme } from '@os-design/theming';\nimport { useIsMinWidth } from '@os-design/media';\nimport { WithSize } from '@os-design/styles';\nimport { useSelectHandler } from '@os-design/menu-utils';\nimport MenuItem, { MenuItemProps } from '../MenuItem';\nimport useRWLoadNext from '../List/utils/useRWLoadNext';\n\nexport interface OptionProps extends MenuItemProps {\n title?: string;\n}\n\ninterface SelectListProps extends WithSize {\n searchVisible: boolean;\n options: OptionProps[];\n visibleCount: number;\n overscanCount: number;\n threshold: number;\n onLoadNext: () => void;\n maxSelectedItems: number | 'all';\n containerRef: RefObject<HTMLDivElement>;\n value?: string[];\n onChange?: (value: string[]) => void;\n id?: string;\n}\n\nconst SelectList: React.FC<SelectListProps> = ({\n searchVisible,\n options,\n visibleCount,\n overscanCount,\n threshold,\n onLoadNext,\n maxSelectedItems,\n containerRef,\n value,\n onChange = () => {},\n id,\n size,\n}) => {\n const windowSize = useSize();\n const isMinXs = useIsMinWidth('xs');\n const fontSize = useFontSize(document.body);\n const { theme } = useTheme();\n\n const scaleFactor = useMemo(() => {\n const s = size || 'medium';\n return ['small', 'medium', 'large'].includes(s)\n ? theme.sizes[s]\n : Number(s.replace(/^([0-9]+(\\.[0-9]+)?).*/, '$1')) || 1; // Extract the number\n }, [size, theme.sizes]);\n\n const paddingBottom = useMemo(() => {\n const paddingEm = isMinXs\n ? theme.menuPaddingVertical\n : theme.modalBodyPaddingVertical[0];\n return paddingEm * fontSize * scaleFactor;\n }, [\n isMinXs,\n theme.menuPaddingVertical,\n theme.modalBodyPaddingVertical,\n fontSize,\n scaleFactor,\n ]);\n\n const paddingTop = useMemo(\n () => (searchVisible ? 5 * scaleFactor : paddingBottom),\n [searchVisible, scaleFactor, paddingBottom]\n );\n\n const searchInputHeight = useMemo(\n () =>\n searchVisible\n ? (theme.baseHeight + theme.menuPaddingVertical) *\n fontSize *\n scaleFactor\n : 0,\n [\n searchVisible,\n theme.baseHeight,\n theme.menuPaddingVertical,\n fontSize,\n scaleFactor,\n ]\n );\n\n const itemSize = useMemo(\n () => theme.menuItemHeight * fontSize * scaleFactor,\n [theme.menuItemHeight, fontSize, scaleFactor]\n );\n\n const height = useMemo(() => {\n // Modal\n if (!isMinXs) {\n const maxHeight =\n windowSize.height -\n theme.modalHeaderHeight * fontSize * scaleFactor -\n searchInputHeight;\n const curHeight = options.length * itemSize + paddingTop + paddingBottom;\n return curHeight < maxHeight ? curHeight : maxHeight;\n }\n // Popover\n const count = options.length < visibleCount ? options.length : visibleCount;\n return count * itemSize + paddingTop + paddingBottom;\n }, [\n isMinXs,\n options.length,\n visibleCount,\n itemSize,\n windowSize.height,\n theme.modalHeaderHeight,\n fontSize,\n scaleFactor,\n searchInputHeight,\n paddingTop,\n paddingBottom,\n ]);\n\n const scrollHandler = useRWLoadNext({\n itemCount: options.length,\n threshold,\n itemSize,\n paddingTop,\n height,\n onLoadNext,\n });\n\n const onSelect = useSelectHandler({\n value: value || [],\n onChange,\n maxSelectedItems,\n });\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const InnerElement = useCallback(\n ({ style, ...innerElementRest }) => (\n <div\n style={{\n ...style,\n height: `${parseFloat(style.height) + paddingTop + paddingBottom}px`,\n }}\n role='listbox'\n id={id}\n {...innerElementRest}\n />\n ),\n [id, paddingBottom, paddingTop]\n );\n\n const listItemFn = useCallback(\n ({ index, style }) => {\n const {\n title: optionTitle,\n value: optionValue,\n onClick: optionOnClick,\n ...restOption\n } = options[index];\n return (\n <MenuItem\n style={{\n ...style,\n top: `${\n parseFloat(style.top ? style.top.toString() : '0') + paddingTop\n }px`,\n }}\n selected={(value || []).includes(optionValue || '')}\n onClick={(e) => {\n if (!optionValue) return;\n onSelect(optionValue);\n\n // Focus the input.\n // Otherwise, if the max number of selected items equals 1\n // and the user presses enter to select an item,\n // the input will lose focus.\n if (containerRef.current && maxSelectedItems === 1) {\n containerRef.current.focus();\n }\n\n if (optionOnClick) optionOnClick(e);\n }}\n role='option'\n aria-selected={(value || []).includes(optionValue || '')}\n {...restOption}\n >\n {optionTitle}\n </MenuItem>\n );\n },\n [containerRef, maxSelectedItems, onSelect, options, paddingTop, value]\n );\n\n return (\n <FixedSizeList\n width='100%'\n height={height}\n itemSize={itemSize}\n itemCount={options.length}\n overscanCount={overscanCount}\n onScroll={({ scrollOffset }) => scrollHandler(scrollOffset)}\n innerElementType={InnerElement}\n >\n {listItemFn}\n </FixedSizeList>\n );\n};\n\nSelectList.displayName = 'SelectList';\n\nexport default SelectList;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SelectList.js","names":["React","useCallback","useMemo","FixedSizeList","useFontSize","useSize","useTheme","useIsMinWidth","useSelectHandler","MenuItem","useRWLoadNext","SelectList","searchVisible","options","visibleCount","overscanCount","threshold","onLoadNext","maxSelectedItems","containerRef","value","onChange","id","size","windowSize","isMinXs","fontSize","document","body","theme","scaleFactor","s","includes","sizes","Number","replace","paddingBottom","paddingEm","menuPaddingVertical","modalBodyPaddingVertical","paddingTop","searchInputHeight","baseHeight","itemSize","menuItemHeight","height","maxHeight","modalHeaderHeight","curHeight","length","count","scrollHandler","itemCount","onSelect","InnerElement","style","innerElementRest","parseFloat","listItemFn","index","title","optionTitle","optionValue","onClick","optionOnClick","restOption","top","toString","e","current","focus","scrollOffset","displayName"],"sources":["../../../src/Select/SelectList.tsx"],"sourcesContent":["import React, { RefObject, useCallback, useMemo } from 'react';\nimport { FixedSizeList } from 'react-window';\nimport { useFontSize, useSize } from '@os-design/utils';\nimport { useTheme } from '@os-design/theming';\nimport { useIsMinWidth } from '@os-design/media';\nimport { WithSize } from '@os-design/styles';\nimport { useSelectHandler } from '@os-design/menu-utils';\nimport MenuItem, { MenuItemProps } from '../MenuItem';\nimport useRWLoadNext from '../List/utils/useRWLoadNext';\n\nexport interface OptionProps extends MenuItemProps {\n title?: string;\n}\n\ninterface SelectListProps extends WithSize {\n searchVisible: boolean;\n options: OptionProps[];\n visibleCount: number;\n overscanCount: number;\n threshold: number;\n onLoadNext: () => void;\n maxSelectedItems: number | 'all';\n containerRef: RefObject<HTMLDivElement>;\n value?: string[];\n onChange?: (value: string[]) => void;\n id?: string;\n}\n\nconst SelectList: React.FC<SelectListProps> = ({\n searchVisible,\n options,\n visibleCount,\n overscanCount,\n threshold,\n onLoadNext,\n maxSelectedItems,\n containerRef,\n value,\n onChange = () => {},\n id,\n size,\n}) => {\n const windowSize = useSize();\n const isMinXs = useIsMinWidth('xs');\n const fontSize = useFontSize(document.body);\n const { theme } = useTheme();\n\n const scaleFactor = useMemo(() => {\n const s = size || 'medium';\n return ['small', 'medium', 'large'].includes(s)\n ? theme.sizes[s]\n : Number(s.replace(/^([0-9]+(\\.[0-9]+)?).*/, '$1')) || 1; // Extract the number\n }, [size, theme.sizes]);\n\n const paddingBottom = useMemo(() => {\n const paddingEm = isMinXs\n ? theme.menuPaddingVertical\n : theme.modalBodyPaddingVertical[0];\n return paddingEm * fontSize * scaleFactor;\n }, [\n isMinXs,\n theme.menuPaddingVertical,\n theme.modalBodyPaddingVertical,\n fontSize,\n scaleFactor,\n ]);\n\n const paddingTop = useMemo(\n () => (searchVisible ? 5 * scaleFactor : paddingBottom),\n [searchVisible, scaleFactor, paddingBottom]\n );\n\n const searchInputHeight = useMemo(\n () =>\n searchVisible\n ? (theme.baseHeight + theme.menuPaddingVertical) *\n fontSize *\n scaleFactor\n : 0,\n [\n searchVisible,\n theme.baseHeight,\n theme.menuPaddingVertical,\n fontSize,\n scaleFactor,\n ]\n );\n\n const itemSize = useMemo(\n () => theme.menuItemHeight * fontSize * scaleFactor,\n [theme.menuItemHeight, fontSize, scaleFactor]\n );\n\n const height = useMemo(() => {\n // Modal\n if (!isMinXs) {\n const maxHeight =\n windowSize.height -\n theme.modalHeaderHeight * fontSize * scaleFactor -\n searchInputHeight;\n const curHeight = options.length * itemSize + paddingTop + paddingBottom;\n return curHeight < maxHeight ? curHeight : maxHeight;\n }\n // Popover\n const count = options.length < visibleCount ? options.length : visibleCount;\n return count * itemSize + paddingTop + paddingBottom;\n }, [\n isMinXs,\n options.length,\n visibleCount,\n itemSize,\n windowSize.height,\n theme.modalHeaderHeight,\n fontSize,\n scaleFactor,\n searchInputHeight,\n paddingTop,\n paddingBottom,\n ]);\n\n const scrollHandler = useRWLoadNext({\n itemCount: options.length,\n threshold,\n itemSize,\n paddingTop,\n height,\n onLoadNext,\n });\n\n const onSelect = useSelectHandler({\n value: value || [],\n onChange,\n maxSelectedItems,\n });\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const InnerElement = useCallback(\n ({ style, ...innerElementRest }) => (\n <div\n style={{\n ...style,\n height: `${parseFloat(style.height) + paddingTop + paddingBottom}px`,\n }}\n role='listbox'\n id={id}\n {...innerElementRest}\n />\n ),\n [id, paddingBottom, paddingTop]\n );\n\n const listItemFn = useCallback(\n ({ index, style }) => {\n const {\n title: optionTitle,\n value: optionValue,\n onClick: optionOnClick,\n ...restOption\n } = options[index];\n return (\n <MenuItem\n style={{\n ...style,\n top: `${\n parseFloat(style.top ? style.top.toString() : '0') + paddingTop\n }px`,\n }}\n selected={(value || []).includes(optionValue || '')}\n onClick={(e) => {\n if (!optionValue) return;\n onSelect(optionValue);\n\n // Focus the input.\n // Otherwise, if the max number of selected items equals 1\n // and the user presses enter to select an item,\n // the input will lose focus.\n if (containerRef.current && maxSelectedItems === 1) {\n containerRef.current.focus();\n }\n\n if (optionOnClick) optionOnClick(e);\n }}\n role='option'\n aria-selected={(value || []).includes(optionValue || '')}\n {...restOption}\n >\n {optionTitle}\n </MenuItem>\n );\n },\n [containerRef, maxSelectedItems, onSelect, options, paddingTop, value]\n );\n\n return (\n <FixedSizeList\n width='100%'\n height={height}\n itemSize={itemSize}\n itemCount={options.length}\n overscanCount={overscanCount}\n onScroll={({ scrollOffset }) => scrollHandler(scrollOffset)}\n innerElementType={InnerElement}\n >\n {listItemFn}\n </FixedSizeList>\n );\n};\n\nSelectList.displayName = 'SelectList';\n\nexport default SelectList;\n"],"mappings":"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"}
|
|
@@ -13,15 +13,12 @@ export const Container = styled.div`
|
|
|
13
13
|
align-items: center;
|
|
14
14
|
overflow: hidden;
|
|
15
15
|
`;
|
|
16
|
-
|
|
17
16
|
const notHasLeftStyles = p => !p.hasLeft && css`
|
|
18
17
|
padding-left: ${p.theme.inputPaddingHorizontal}em;
|
|
19
18
|
`;
|
|
20
|
-
|
|
21
19
|
const notHasRightStyles = p => !p.hasRight && !p.unbordered && css`
|
|
22
20
|
padding-right: ${p.theme.inputPaddingHorizontal}em;
|
|
23
21
|
`;
|
|
24
|
-
|
|
25
22
|
export const Content = styled('div', omitEmotionProps('hasLeft', 'hasRight', 'unbordered'))`
|
|
26
23
|
flex: 1;
|
|
27
24
|
${notHasLeftStyles};
|
|
@@ -32,16 +29,13 @@ export const Placeholder = styled.span`
|
|
|
32
29
|
color: ${p => clr(p.theme.inputColorPlaceholder)};
|
|
33
30
|
${ellipsisStyles};
|
|
34
31
|
`;
|
|
35
|
-
|
|
36
32
|
const unborderedTitleStyles = p => p.unbordered && css`
|
|
37
33
|
font-weight: 500;
|
|
38
34
|
${!p.disabled && `color: ${clr(p.theme.colorPrimary)};`}
|
|
39
35
|
`;
|
|
40
|
-
|
|
41
36
|
const disabledStyles = p => p.disabled && css`
|
|
42
37
|
color: ${clr(p.theme.inputDisabledColorText)};
|
|
43
38
|
`;
|
|
44
|
-
|
|
45
39
|
export const Title = styled('span', omitEmotionProps('disabled', 'unbordered'))`
|
|
46
40
|
color: ${p => clr(p.theme.colorText)};
|
|
47
41
|
${unborderedTitleStyles};
|
|
@@ -88,13 +82,11 @@ const DeleteButton = styled.button`
|
|
|
88
82
|
|
|
89
83
|
${transitionStyles('color')};
|
|
90
84
|
`;
|
|
91
|
-
|
|
92
85
|
const unborderedIconContainerStyles = p => p.unbordered && css`
|
|
93
86
|
padding-top: 0.2em;
|
|
94
87
|
font-size: 0.8em;
|
|
95
88
|
${!p.disabled && `color: ${clr(p.theme.colorPrimary)};`}
|
|
96
89
|
`;
|
|
97
|
-
|
|
98
90
|
export const IconContainer = styled('span', omitEmotionProps('unbordered', 'disabled'))`
|
|
99
91
|
color: ${p => clr(p.theme.selectColorIcon)};
|
|
100
92
|
line-height: 1;
|
|
@@ -125,7 +117,6 @@ export const RightAddon = styled(Addon)`
|
|
|
125
117
|
padding-right: ${p.theme.inputPaddingHorizontal}em;
|
|
126
118
|
`}
|
|
127
119
|
`;
|
|
128
|
-
|
|
129
120
|
const SelectToggle = ({
|
|
130
121
|
selectedItems,
|
|
131
122
|
onDelete,
|
|
@@ -147,7 +138,6 @@ const SelectToggle = ({
|
|
|
147
138
|
if (selectedItems.length === 0) {
|
|
148
139
|
return /*#__PURE__*/React.createElement(Placeholder, null, placeholder);
|
|
149
140
|
}
|
|
150
|
-
|
|
151
141
|
if (multiple) {
|
|
152
142
|
return /*#__PURE__*/React.createElement(List, null, selectedItems.map(({
|
|
153
143
|
title,
|
|
@@ -167,7 +157,6 @@ const SelectToggle = ({
|
|
|
167
157
|
"aria-hidden": true
|
|
168
158
|
}, title)));
|
|
169
159
|
}
|
|
170
|
-
|
|
171
160
|
return /*#__PURE__*/React.createElement(Title, {
|
|
172
161
|
disabled: disabled,
|
|
173
162
|
unbordered: unbordered
|
|
@@ -176,7 +165,6 @@ const SelectToggle = ({
|
|
|
176
165
|
const showClearButton = useMemo(() => clearVisible && selectedItems.length > 0, [clearVisible, selectedItems.length]);
|
|
177
166
|
const rightValue = useMemo(() => {
|
|
178
167
|
if (loading) return /*#__PURE__*/React.createElement(Loading, null);
|
|
179
|
-
|
|
180
168
|
if (showClearButton) {
|
|
181
169
|
return /*#__PURE__*/React.createElement(Button, {
|
|
182
170
|
type: "ghost",
|
|
@@ -194,7 +182,6 @@ const SelectToggle = ({
|
|
|
194
182
|
"aria-label": locale.clearLabel
|
|
195
183
|
}, /*#__PURE__*/React.createElement(ClearIcon, null));
|
|
196
184
|
}
|
|
197
|
-
|
|
198
185
|
return right || /*#__PURE__*/React.createElement(IconContainer, {
|
|
199
186
|
unbordered: unbordered,
|
|
200
187
|
disabled: disabled
|
|
@@ -225,7 +212,6 @@ const SelectToggle = ({
|
|
|
225
212
|
hasPadding: rightHasPaddingValue
|
|
226
213
|
}, rightValue)));
|
|
227
214
|
};
|
|
228
|
-
|
|
229
215
|
SelectToggle.displayName = 'SelectToggle';
|
|
230
216
|
export default SelectToggle;
|
|
231
217
|
//# sourceMappingURL=SelectToggle.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectToggle.js","names":["React","useCallback","useMemo","styled","Up","Down","Loading","Close","CloseCircle","ellipsisStyles","resetButtonStyles","transitionStyles","omitEmotionProps","clr","ThemeOverrider","css","Tag","Button","Container","div","notHasLeftStyles","p","hasLeft","theme","inputPaddingHorizontal","notHasRightStyles","hasRight","unbordered","Content","Placeholder","span","inputColorPlaceholder","unborderedTitleStyles","disabled","colorPrimary","disabledStyles","inputDisabledColorText","Title","colorText","ListItem","selectToggleListItemHeight","List","selectToggleListItemGap","DeleteButton","button","selectToggleDeleteButtonColorIcon","selectToggleDeleteButtonColorIconHover","unborderedIconContainerStyles","IconContainer","selectColorIcon","ClearIcon","Addon","LeftAddon","inputAddonPaddingHorizontal","hasPadding","RightAddon","SelectToggle","selectedItems","onDelete","onClear","opened","multiple","left","leftHasPadding","right","rightHasPadding","placeholder","loading","clearVisible","locale","renderContent","length","map","title","value","e","stopPropagation","deleteLabel","undefined","showClearButton","rightValue","key","clearLabel","rightHasPaddingValue","t","buttonPaddingHorizontal","baseHeight","sizes","small","displayName"],"sources":["../../../src/Select/SelectToggle.tsx"],"sourcesContent":["import React, { useCallback, useMemo } from 'react';\nimport styled from '@emotion/styled';\nimport { Up, Down, Loading, Close, CloseCircle } from '@os-design/icons';\nimport {\n ellipsisStyles,\n resetButtonStyles,\n transitionStyles,\n} from '@os-design/styles';\nimport { omitEmotionProps } from '@os-design/utils';\nimport { clr, ThemeOverrider } from '@os-design/theming';\nimport { css } from '@emotion/react';\nimport Tag from '../Tag';\nimport Button from '../Button';\nimport { SelectLocale } from './utils/defaultLocale';\n\ninterface SelectToggleProps {\n selectedItems: Array<{ title: string; value: string }>;\n onDelete: (value: string) => void;\n onClear: () => void;\n opened: boolean;\n multiple: boolean;\n left?: React.ReactNode;\n leftHasPadding?: boolean;\n right?: React.ReactNode;\n rightHasPadding?: boolean;\n placeholder?: string;\n unbordered?: boolean;\n loading?: boolean;\n disabled?: boolean;\n clearVisible?: boolean;\n locale: SelectLocale;\n}\n\nexport const Container = styled.div`\n flex: 1;\n display: flex;\n align-items: center;\n overflow: hidden;\n`;\n\nconst notHasLeftStyles = (p) =>\n !p.hasLeft &&\n css`\n padding-left: ${p.theme.inputPaddingHorizontal}em;\n `;\n\nconst notHasRightStyles = (p) =>\n !p.hasRight &&\n !p.unbordered &&\n css`\n padding-right: ${p.theme.inputPaddingHorizontal}em;\n `;\n\ninterface ContentProps {\n hasLeft?: boolean;\n hasRight?: boolean;\n unbordered?: boolean;\n}\nexport const Content = styled(\n 'div',\n omitEmotionProps('hasLeft', 'hasRight', 'unbordered')\n)<ContentProps>`\n flex: 1;\n ${notHasLeftStyles};\n ${notHasRightStyles};\n ${ellipsisStyles};\n`;\n\nexport const Placeholder = styled.span`\n color: ${(p) => clr(p.theme.inputColorPlaceholder)};\n ${ellipsisStyles};\n`;\n\nconst unborderedTitleStyles = (p) =>\n p.unbordered &&\n css`\n font-weight: 500;\n ${!p.disabled && `color: ${clr(p.theme.colorPrimary)};`}\n `;\n\nconst disabledStyles = (p) =>\n p.disabled &&\n css`\n color: ${clr(p.theme.inputDisabledColorText)};\n `;\n\ntype TitleProps = Pick<SelectToggleProps, 'disabled' | 'unbordered'>;\nexport const Title = styled(\n 'span',\n omitEmotionProps('disabled', 'unbordered')\n)<TitleProps>`\n color: ${(p) => clr(p.theme.colorText)};\n ${unborderedTitleStyles};\n ${disabledStyles};\n ${ellipsisStyles};\n`;\n\ntype ListItemProps = Pick<SelectToggleProps, 'disabled'>;\nconst ListItem = styled(Tag, omitEmotionProps('disabled'))<ListItemProps>`\n // Reset tag styles\n padding-top: 0;\n padding-bottom: 0;\n\n height: ${(p) => p.theme.selectToggleListItemHeight}em;\n ${disabledStyles};\n`;\n\nconst List = styled.div`\n display: flex;\n flex-wrap: wrap;\n overflow: hidden; // For ellipsis styles\n\n margin: 0 ${(p) => p.theme.selectToggleListItemGap}em\n ${(p) => -p.theme.selectToggleListItemGap}em 0;\n\n & > div {\n margin: 0 ${(p) => p.theme.selectToggleListItemGap}em\n ${(p) => p.theme.selectToggleListItemGap}em 0;\n }\n`;\n\nconst DeleteButton = styled.button`\n ${resetButtonStyles};\n cursor: pointer;\n display: inherit;\n font-size: 1em;\n margin-left: 0.2em;\n\n background-color: transparent;\n color: ${(p) => clr(p.theme.selectToggleDeleteButtonColorIcon)};\n\n @media (hover: hover) {\n &:hover,\n &:focus {\n color: ${(p) => clr(p.theme.selectToggleDeleteButtonColorIconHover)};\n }\n }\n\n ${transitionStyles('color')};\n`;\n\nconst unborderedIconContainerStyles = (p) =>\n p.unbordered &&\n css`\n padding-top: 0.2em;\n font-size: 0.8em;\n ${!p.disabled && `color: ${clr(p.theme.colorPrimary)};`}\n `;\n\ninterface IconContainerProps {\n unbordered?: boolean;\n disabled?: boolean;\n}\nexport const IconContainer = styled(\n 'span',\n omitEmotionProps('unbordered', 'disabled')\n)<IconContainerProps>`\n color: ${(p) => clr(p.theme.selectColorIcon)};\n line-height: 1;\n ${unborderedIconContainerStyles};\n`;\n\nexport const ClearIcon = styled(CloseCircle)`\n transform: scale(1.2) !important;\n`;\n\ninterface AddonProps {\n hasPadding: boolean;\n}\nconst Addon = styled('span', omitEmotionProps('hasPadding'))<AddonProps>`\n display: flex;\n align-items: center;\n user-select: none;\n color: ${(p) => clr(p.theme.inputColorPlaceholder)};\n\n svg {\n transform: scale(1.2);\n }\n`;\n\nexport const LeftAddon = styled(Addon)`\n padding-right: ${(p) => p.theme.inputAddonPaddingHorizontal}em;\n ${(p) =>\n p.hasPadding &&\n css`\n padding-left: ${p.theme.inputPaddingHorizontal}em;\n `}\n`;\n\nexport const RightAddon = styled(Addon)`\n padding-left: ${(p) => p.theme.inputAddonPaddingHorizontal}em;\n ${(p) =>\n p.hasPadding &&\n css`\n padding-right: ${p.theme.inputPaddingHorizontal}em;\n `}\n`;\n\nconst SelectToggle: React.FC<SelectToggleProps> = ({\n selectedItems,\n onDelete,\n onClear,\n opened,\n multiple,\n left,\n leftHasPadding = false,\n right,\n rightHasPadding = false,\n placeholder,\n unbordered,\n loading,\n disabled,\n clearVisible,\n locale,\n}) => {\n const renderContent = useCallback(() => {\n if (selectedItems.length === 0) {\n return <Placeholder>{placeholder}</Placeholder>;\n }\n if (multiple) {\n return (\n <List>\n {selectedItems.map(({ title, value }) => (\n <ListItem\n key={value}\n disabled={disabled}\n right={\n !disabled ? (\n <DeleteButton\n onClick={(e) => {\n onDelete(value);\n e.stopPropagation();\n }}\n onKeyDown={(e) => e.stopPropagation()}\n aria-label={`${locale.deleteLabel} ${title}`}\n aria-hidden\n >\n <Close />\n </DeleteButton>\n ) : undefined\n }\n aria-hidden\n >\n {title}\n </ListItem>\n ))}\n </List>\n );\n }\n return (\n <Title disabled={disabled} unbordered={unbordered}>\n {selectedItems[0].title}\n </Title>\n );\n }, [\n selectedItems,\n multiple,\n disabled,\n unbordered,\n placeholder,\n locale.deleteLabel,\n onDelete,\n ]);\n\n const showClearButton = useMemo(\n () => clearVisible && selectedItems.length > 0,\n [clearVisible, selectedItems.length]\n );\n\n const rightValue = useMemo(() => {\n if (loading) return <Loading />;\n if (showClearButton) {\n return (\n <Button\n type='ghost'\n wide='never'\n size='small'\n disabled={disabled}\n onClick={(e) => {\n onClear();\n e.stopPropagation();\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter') onClear();\n e.stopPropagation();\n }}\n aria-label={locale.clearLabel}\n >\n <ClearIcon />\n </Button>\n );\n }\n return (\n right || (\n <IconContainer unbordered={unbordered} disabled={disabled}>\n {opened ? <Up /> : <Down />}\n </IconContainer>\n )\n );\n }, [\n disabled,\n loading,\n locale.clearLabel,\n onClear,\n opened,\n right,\n showClearButton,\n unbordered,\n ]);\n\n const rightHasPaddingValue = useMemo(() => {\n if (loading) return true;\n if (showClearButton) return false;\n return right ? rightHasPadding : true;\n }, [loading, right, rightHasPadding, showClearButton]);\n\n return (\n <Container>\n {left && (\n <ThemeOverrider\n overrides={(t) => ({\n buttonPaddingHorizontal: 0.8,\n baseHeight: t.selectToggleListItemHeight / t.sizes.small,\n })}\n >\n <LeftAddon hasPadding={leftHasPadding}>{left}</LeftAddon>\n </ThemeOverrider>\n )}\n\n <Content hasLeft={!!left} hasRight={!!right} unbordered={unbordered}>\n {renderContent()}\n </Content>\n\n {rightValue && (\n <ThemeOverrider\n overrides={(t) => ({\n buttonPaddingHorizontal: 0.8,\n baseHeight: t.selectToggleListItemHeight / t.sizes.small,\n })}\n >\n <RightAddon hasPadding={rightHasPaddingValue}>\n {rightValue}\n </RightAddon>\n </ThemeOverrider>\n )}\n </Container>\n );\n};\n\nSelectToggle.displayName = 'SelectToggle';\n\nexport default SelectToggle;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SelectToggle.js","names":["React","useCallback","useMemo","styled","Up","Down","Loading","Close","CloseCircle","ellipsisStyles","resetButtonStyles","transitionStyles","omitEmotionProps","clr","ThemeOverrider","css","Tag","Button","Container","div","notHasLeftStyles","p","hasLeft","theme","inputPaddingHorizontal","notHasRightStyles","hasRight","unbordered","Content","Placeholder","span","inputColorPlaceholder","unborderedTitleStyles","disabled","colorPrimary","disabledStyles","inputDisabledColorText","Title","colorText","ListItem","selectToggleListItemHeight","List","selectToggleListItemGap","DeleteButton","button","selectToggleDeleteButtonColorIcon","selectToggleDeleteButtonColorIconHover","unborderedIconContainerStyles","IconContainer","selectColorIcon","ClearIcon","Addon","LeftAddon","inputAddonPaddingHorizontal","hasPadding","RightAddon","SelectToggle","selectedItems","onDelete","onClear","opened","multiple","left","leftHasPadding","right","rightHasPadding","placeholder","loading","clearVisible","locale","renderContent","length","map","title","value","e","stopPropagation","deleteLabel","undefined","showClearButton","rightValue","key","clearLabel","rightHasPaddingValue","t","buttonPaddingHorizontal","baseHeight","sizes","small","displayName"],"sources":["../../../src/Select/SelectToggle.tsx"],"sourcesContent":["import React, { useCallback, useMemo } from 'react';\nimport styled from '@emotion/styled';\nimport { Up, Down, Loading, Close, CloseCircle } from '@os-design/icons';\nimport {\n ellipsisStyles,\n resetButtonStyles,\n transitionStyles,\n} from '@os-design/styles';\nimport { omitEmotionProps } from '@os-design/utils';\nimport { clr, ThemeOverrider } from '@os-design/theming';\nimport { css } from '@emotion/react';\nimport Tag from '../Tag';\nimport Button from '../Button';\nimport { SelectLocale } from './utils/defaultLocale';\n\ninterface SelectToggleProps {\n selectedItems: Array<{ title: string; value: string }>;\n onDelete: (value: string) => void;\n onClear: () => void;\n opened: boolean;\n multiple: boolean;\n left?: React.ReactNode;\n leftHasPadding?: boolean;\n right?: React.ReactNode;\n rightHasPadding?: boolean;\n placeholder?: string;\n unbordered?: boolean;\n loading?: boolean;\n disabled?: boolean;\n clearVisible?: boolean;\n locale: SelectLocale;\n}\n\nexport const Container = styled.div`\n flex: 1;\n display: flex;\n align-items: center;\n overflow: hidden;\n`;\n\nconst notHasLeftStyles = (p) =>\n !p.hasLeft &&\n css`\n padding-left: ${p.theme.inputPaddingHorizontal}em;\n `;\n\nconst notHasRightStyles = (p) =>\n !p.hasRight &&\n !p.unbordered &&\n css`\n padding-right: ${p.theme.inputPaddingHorizontal}em;\n `;\n\ninterface ContentProps {\n hasLeft?: boolean;\n hasRight?: boolean;\n unbordered?: boolean;\n}\nexport const Content = styled(\n 'div',\n omitEmotionProps('hasLeft', 'hasRight', 'unbordered')\n)<ContentProps>`\n flex: 1;\n ${notHasLeftStyles};\n ${notHasRightStyles};\n ${ellipsisStyles};\n`;\n\nexport const Placeholder = styled.span`\n color: ${(p) => clr(p.theme.inputColorPlaceholder)};\n ${ellipsisStyles};\n`;\n\nconst unborderedTitleStyles = (p) =>\n p.unbordered &&\n css`\n font-weight: 500;\n ${!p.disabled && `color: ${clr(p.theme.colorPrimary)};`}\n `;\n\nconst disabledStyles = (p) =>\n p.disabled &&\n css`\n color: ${clr(p.theme.inputDisabledColorText)};\n `;\n\ntype TitleProps = Pick<SelectToggleProps, 'disabled' | 'unbordered'>;\nexport const Title = styled(\n 'span',\n omitEmotionProps('disabled', 'unbordered')\n)<TitleProps>`\n color: ${(p) => clr(p.theme.colorText)};\n ${unborderedTitleStyles};\n ${disabledStyles};\n ${ellipsisStyles};\n`;\n\ntype ListItemProps = Pick<SelectToggleProps, 'disabled'>;\nconst ListItem = styled(Tag, omitEmotionProps('disabled'))<ListItemProps>`\n // Reset tag styles\n padding-top: 0;\n padding-bottom: 0;\n\n height: ${(p) => p.theme.selectToggleListItemHeight}em;\n ${disabledStyles};\n`;\n\nconst List = styled.div`\n display: flex;\n flex-wrap: wrap;\n overflow: hidden; // For ellipsis styles\n\n margin: 0 ${(p) => p.theme.selectToggleListItemGap}em\n ${(p) => -p.theme.selectToggleListItemGap}em 0;\n\n & > div {\n margin: 0 ${(p) => p.theme.selectToggleListItemGap}em\n ${(p) => p.theme.selectToggleListItemGap}em 0;\n }\n`;\n\nconst DeleteButton = styled.button`\n ${resetButtonStyles};\n cursor: pointer;\n display: inherit;\n font-size: 1em;\n margin-left: 0.2em;\n\n background-color: transparent;\n color: ${(p) => clr(p.theme.selectToggleDeleteButtonColorIcon)};\n\n @media (hover: hover) {\n &:hover,\n &:focus {\n color: ${(p) => clr(p.theme.selectToggleDeleteButtonColorIconHover)};\n }\n }\n\n ${transitionStyles('color')};\n`;\n\nconst unborderedIconContainerStyles = (p) =>\n p.unbordered &&\n css`\n padding-top: 0.2em;\n font-size: 0.8em;\n ${!p.disabled && `color: ${clr(p.theme.colorPrimary)};`}\n `;\n\ninterface IconContainerProps {\n unbordered?: boolean;\n disabled?: boolean;\n}\nexport const IconContainer = styled(\n 'span',\n omitEmotionProps('unbordered', 'disabled')\n)<IconContainerProps>`\n color: ${(p) => clr(p.theme.selectColorIcon)};\n line-height: 1;\n ${unborderedIconContainerStyles};\n`;\n\nexport const ClearIcon = styled(CloseCircle)`\n transform: scale(1.2) !important;\n`;\n\ninterface AddonProps {\n hasPadding: boolean;\n}\nconst Addon = styled('span', omitEmotionProps('hasPadding'))<AddonProps>`\n display: flex;\n align-items: center;\n user-select: none;\n color: ${(p) => clr(p.theme.inputColorPlaceholder)};\n\n svg {\n transform: scale(1.2);\n }\n`;\n\nexport const LeftAddon = styled(Addon)`\n padding-right: ${(p) => p.theme.inputAddonPaddingHorizontal}em;\n ${(p) =>\n p.hasPadding &&\n css`\n padding-left: ${p.theme.inputPaddingHorizontal}em;\n `}\n`;\n\nexport const RightAddon = styled(Addon)`\n padding-left: ${(p) => p.theme.inputAddonPaddingHorizontal}em;\n ${(p) =>\n p.hasPadding &&\n css`\n padding-right: ${p.theme.inputPaddingHorizontal}em;\n `}\n`;\n\nconst SelectToggle: React.FC<SelectToggleProps> = ({\n selectedItems,\n onDelete,\n onClear,\n opened,\n multiple,\n left,\n leftHasPadding = false,\n right,\n rightHasPadding = false,\n placeholder,\n unbordered,\n loading,\n disabled,\n clearVisible,\n locale,\n}) => {\n const renderContent = useCallback(() => {\n if (selectedItems.length === 0) {\n return <Placeholder>{placeholder}</Placeholder>;\n }\n if (multiple) {\n return (\n <List>\n {selectedItems.map(({ title, value }) => (\n <ListItem\n key={value}\n disabled={disabled}\n right={\n !disabled ? (\n <DeleteButton\n onClick={(e) => {\n onDelete(value);\n e.stopPropagation();\n }}\n onKeyDown={(e) => e.stopPropagation()}\n aria-label={`${locale.deleteLabel} ${title}`}\n aria-hidden\n >\n <Close />\n </DeleteButton>\n ) : undefined\n }\n aria-hidden\n >\n {title}\n </ListItem>\n ))}\n </List>\n );\n }\n return (\n <Title disabled={disabled} unbordered={unbordered}>\n {selectedItems[0].title}\n </Title>\n );\n }, [\n selectedItems,\n multiple,\n disabled,\n unbordered,\n placeholder,\n locale.deleteLabel,\n onDelete,\n ]);\n\n const showClearButton = useMemo(\n () => clearVisible && selectedItems.length > 0,\n [clearVisible, selectedItems.length]\n );\n\n const rightValue = useMemo(() => {\n if (loading) return <Loading />;\n if (showClearButton) {\n return (\n <Button\n type='ghost'\n wide='never'\n size='small'\n disabled={disabled}\n onClick={(e) => {\n onClear();\n e.stopPropagation();\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter') onClear();\n e.stopPropagation();\n }}\n aria-label={locale.clearLabel}\n >\n <ClearIcon />\n </Button>\n );\n }\n return (\n right || (\n <IconContainer unbordered={unbordered} disabled={disabled}>\n {opened ? <Up /> : <Down />}\n </IconContainer>\n )\n );\n }, [\n disabled,\n loading,\n locale.clearLabel,\n onClear,\n opened,\n right,\n showClearButton,\n unbordered,\n ]);\n\n const rightHasPaddingValue = useMemo(() => {\n if (loading) return true;\n if (showClearButton) return false;\n return right ? rightHasPadding : true;\n }, [loading, right, rightHasPadding, showClearButton]);\n\n return (\n <Container>\n {left && (\n <ThemeOverrider\n overrides={(t) => ({\n buttonPaddingHorizontal: 0.8,\n baseHeight: t.selectToggleListItemHeight / t.sizes.small,\n })}\n >\n <LeftAddon hasPadding={leftHasPadding}>{left}</LeftAddon>\n </ThemeOverrider>\n )}\n\n <Content hasLeft={!!left} hasRight={!!right} unbordered={unbordered}>\n {renderContent()}\n </Content>\n\n {rightValue && (\n <ThemeOverrider\n overrides={(t) => ({\n buttonPaddingHorizontal: 0.8,\n baseHeight: t.selectToggleListItemHeight / t.sizes.small,\n })}\n >\n <RightAddon hasPadding={rightHasPaddingValue}>\n {rightValue}\n </RightAddon>\n </ThemeOverrider>\n )}\n </Container>\n );\n};\n\nSelectToggle.displayName = 'SelectToggle';\n\nexport default SelectToggle;\n"],"mappings":"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"}
|
package/dist/esm/Select/index.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
2
|
-
|
|
3
2
|
import React, { forwardRef, useCallback, useMemo, useRef, useState } from 'react';
|
|
4
3
|
import { transitionStyles } from '@os-design/styles';
|
|
5
4
|
import { omitEmotionProps, useEvent, useForwardedRef, useForwardedState, useResizeObserver, useBrowserLayoutEffect } from '@os-design/utils';
|
|
@@ -13,25 +12,21 @@ import InputSearch from '../InputSearch';
|
|
|
13
12
|
import SelectToggle from './SelectToggle';
|
|
14
13
|
import SelectList from './SelectList';
|
|
15
14
|
import defaultLocale from './utils/defaultLocale';
|
|
16
|
-
|
|
17
15
|
const paddingStyles = p => {
|
|
18
16
|
const paddingVertical = (p.theme.baseHeight - p.theme.selectToggleListItemHeight) / 2;
|
|
19
17
|
return css`
|
|
20
18
|
padding: calc(${paddingVertical}em - 1px) 0;
|
|
21
19
|
`;
|
|
22
20
|
};
|
|
23
|
-
|
|
24
21
|
const openedStyles = p => p.opened && !p.unbordered && css`
|
|
25
22
|
border-color: ${clr(p.theme.inputFocusColorBorder)};
|
|
26
23
|
box-shadow: 0 0 0 0.15em ${clr(p.theme.inputFocusColorShadow)};
|
|
27
24
|
`;
|
|
28
|
-
|
|
29
25
|
const unborderedStyles = p => p.unbordered && css`
|
|
30
26
|
border: 0;
|
|
31
27
|
box-shadow: none !important;
|
|
32
28
|
${transitionStyles('background-color')(p)};
|
|
33
29
|
`;
|
|
34
|
-
|
|
35
30
|
const unborderedHoverStyles = p => p.unbordered && !p.disabled && css`
|
|
36
31
|
@media (hover: hover) {
|
|
37
32
|
&:hover,
|
|
@@ -40,7 +35,6 @@ const unborderedHoverStyles = p => p.unbordered && !p.disabled && css`
|
|
|
40
35
|
}
|
|
41
36
|
}
|
|
42
37
|
`;
|
|
43
|
-
|
|
44
38
|
export const SelectContainer = styled(InputContainer, omitEmotionProps('opened', 'unbordered', 'disabled'))`
|
|
45
39
|
cursor: ${p => !p.disabled ? 'pointer' : 'not-allowed'};
|
|
46
40
|
user-select: none;
|
|
@@ -77,10 +71,10 @@ const InputSearchContainer = styled.div`
|
|
|
77
71
|
padding: ${p => p.theme.menuPaddingVertical}em
|
|
78
72
|
${p => p.theme.inputPaddingHorizontal}em 0;
|
|
79
73
|
`;
|
|
74
|
+
|
|
80
75
|
/**
|
|
81
76
|
* The component that allows to pick a value from predefined options.
|
|
82
77
|
*/
|
|
83
|
-
|
|
84
78
|
const Select = /*#__PURE__*/forwardRef(({
|
|
85
79
|
options = [],
|
|
86
80
|
left,
|
|
@@ -117,11 +111,11 @@ const Select = /*#__PURE__*/forwardRef(({
|
|
|
117
111
|
defaultValue,
|
|
118
112
|
onChange
|
|
119
113
|
});
|
|
114
|
+
|
|
120
115
|
/**
|
|
121
116
|
* Detect the width of the container when the select was opened and update
|
|
122
117
|
* it when either the container size or the window size has been changed.
|
|
123
118
|
*/
|
|
124
|
-
|
|
125
119
|
const resizeHandler = useCallback(() => {
|
|
126
120
|
window.requestAnimationFrame(() => {
|
|
127
121
|
if (!opened || !containerRef.current) return;
|
|
@@ -132,8 +126,9 @@ const Select = /*#__PURE__*/forwardRef(({
|
|
|
132
126
|
}, [opened, containerRef, width]);
|
|
133
127
|
useBrowserLayoutEffect(() => resizeHandler(), [resizeHandler]);
|
|
134
128
|
useResizeObserver(containerRef, resizeHandler);
|
|
135
|
-
useEvent(typeof window !== 'undefined' ? window : undefined, 'resize', resizeHandler);
|
|
129
|
+
useEvent(typeof window !== 'undefined' ? window : undefined, 'resize', resizeHandler);
|
|
136
130
|
|
|
131
|
+
// Replace the aria-haspopup attribute from menu to listbox
|
|
137
132
|
useBrowserLayoutEffect(() => {
|
|
138
133
|
if (!containerRef.current) return;
|
|
139
134
|
containerRef.current.setAttribute('aria-haspopup', 'listbox');
|
|
@@ -158,7 +153,6 @@ const Select = /*#__PURE__*/forwardRef(({
|
|
|
158
153
|
},
|
|
159
154
|
onKeyDown: e => {
|
|
160
155
|
if (disabled) return;
|
|
161
|
-
|
|
162
156
|
if (['Enter', ' '].includes(e.key)) {
|
|
163
157
|
setOpened(!opened);
|
|
164
158
|
e.preventDefault();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["React","forwardRef","useCallback","useMemo","useRef","useState","transitionStyles","omitEmotionProps","useEvent","useForwardedRef","useForwardedState","useResizeObserver","useBrowserLayoutEffect","styled","m","css","clr","InputContainer","Menu","InputSearch","SelectToggle","SelectList","defaultLocale","paddingStyles","p","paddingVertical","theme","baseHeight","selectToggleListItemHeight","openedStyles","opened","unbordered","inputFocusColorBorder","inputFocusColorShadow","unborderedStyles","unborderedHoverStyles","disabled","buttonGhostColorBgHover","SelectContainer","SelectMenu","min","xs","width","NotFound","div","menuItemHeight","inputPaddingHorizontal","selectNotFoundColorText","InputSearchContainer","menuPaddingVertical","Select","options","left","leftHasPadding","right","rightHasPadding","placeholder","searchVisible","searchProps","notFoundText","loading","clearVisible","threshold","visibleCount","overscanCount","maxSelectedItems","locale","value","defaultValue","onChange","onLoadNext","size","placement","rest","ref","containerRef","mergedContainerRef","setWidth","inputSearchContainerRef","setOpened","forwardedValue","setForwardedValue","resizeHandler","window","requestAnimationFrame","current","nextWidth","getBoundingClientRect","undefined","setAttribute","selectedItems","map","v","option","find","item","title","listBoxId","Math","random","toString","slice","e","includes","key","preventDefault","filter","focus","length","displayName"],"sources":["../../../src/Select/index.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { transitionStyles, WithSize } from '@os-design/styles';\nimport {\n omitEmotionProps,\n useEvent,\n useForwardedRef,\n useForwardedState,\n useResizeObserver,\n useBrowserLayoutEffect,\n} from '@os-design/utils';\nimport styled from '@emotion/styled';\nimport { m } from '@os-design/media';\nimport { css } from '@emotion/react';\nimport { clr } from '@os-design/theming';\nimport { InputContainer } from '../Input';\nimport Menu from '../Menu';\nimport InputSearch, { InputSearchProps } from '../InputSearch';\nimport SelectToggle from './SelectToggle';\nimport SelectList, { OptionProps } from './SelectList';\nimport { PopoverProps } from '../Popover';\nimport defaultLocale, { SelectLocale } from './utils/defaultLocale';\n\ntype JsxDivProps = Omit<\n JSX.IntrinsicElements['div'],\n 'value' | 'defaultValue' | 'onChange' | 'ref'\n>;\nexport interface SelectProps\n extends JsxDivProps,\n WithSize,\n Pick<PopoverProps, 'placement'> {\n /**\n * Options of the select.\n * @default undefined\n */\n options?: OptionProps[];\n /**\n * The component located on the left side.\n * @default undefined\n */\n left?: React.ReactNode;\n /**\n * Adds padding to the left component.\n * It can be useful when passing an icon or text in the left component.\n * @default false\n */\n leftHasPadding?: boolean;\n /**\n * The component located on the right side.\n * @default undefined\n */\n right?: React.ReactNode;\n /**\n * Adds padding to the right component.\n * It can be useful when passing an icon or text in the right component.\n * @default false\n */\n rightHasPadding?: boolean;\n /**\n * The placeholder of the select.\n * @default undefined\n */\n placeholder?: string;\n /**\n * Whether the search input visible.\n * @default false\n */\n searchVisible?: boolean;\n /**\n * Props of the search input.\n * @default undefined\n */\n searchProps?: InputSearchProps;\n /**\n * Text displayed when there are no list items.\n * @default Not found\n */\n notFoundText?: string;\n /**\n * Whether the border is hidden.\n * @default false\n */\n unbordered?: boolean;\n /**\n * Shows the loading status.\n * @default false\n */\n loading?: boolean;\n /**\n * Whether the select is disabled.\n * @default false\n */\n disabled?: boolean;\n /**\n * Whether the select has the clear button.\n * @default false\n */\n clearVisible?: boolean;\n /**\n * A threshold N means that the onLoadNext function calls when a user scrolls all items except N.\n * @default 10\n */\n threshold?: number;\n /**\n * Defines how many items inside of the visible \"window\" to render.\n * @default 6\n */\n visibleCount?: number;\n /**\n * Defines how many items outside of the visible \"window\" to render at all times.\n * @default 10\n */\n overscanCount?: number;\n /**\n * The max number of options that the user can select.\n * @default 1\n */\n maxSelectedItems?: number | 'all';\n /**\n * The locale.\n * @default undefined\n */\n locale?: SelectLocale;\n /**\n * Selected options.\n * @default undefined\n */\n value?: string[];\n /**\n * The default value.\n * @default undefined\n */\n defaultValue?: string[];\n /**\n * The change event handler.\n * @default undefined\n */\n onChange?: (value: string[]) => void;\n /**\n * The callback to load more items.\n * @default undefined\n */\n onLoadNext?: () => void;\n}\n\nconst paddingStyles = (p) => {\n const paddingVertical =\n (p.theme.baseHeight - p.theme.selectToggleListItemHeight) / 2;\n\n return css`\n padding: calc(${paddingVertical}em - 1px) 0;\n `;\n};\n\nconst openedStyles = (p) =>\n p.opened &&\n !p.unbordered &&\n css`\n border-color: ${clr(p.theme.inputFocusColorBorder)};\n box-shadow: 0 0 0 0.15em ${clr(p.theme.inputFocusColorShadow)};\n `;\n\nconst unborderedStyles = (p) =>\n p.unbordered &&\n css`\n border: 0;\n box-shadow: none !important;\n ${transitionStyles('background-color')(p)};\n `;\n\nconst unborderedHoverStyles = (p) =>\n p.unbordered &&\n !p.disabled &&\n css`\n @media (hover: hover) {\n &:hover,\n &:focus {\n background-color: ${clr(p.theme.buttonGhostColorBgHover)};\n }\n }\n `;\n\ninterface SelectContainerProps {\n opened: boolean;\n unbordered?: boolean;\n disabled?: boolean;\n}\nexport const SelectContainer = styled(\n InputContainer,\n omitEmotionProps('opened', 'unbordered', 'disabled')\n)<SelectContainerProps>`\n cursor: ${(p) => (!p.disabled ? 'pointer' : 'not-allowed')};\n user-select: none;\n position: relative;\n display: flex;\n align-items: center;\n\n height: unset;\n min-height: ${(p) => p.theme.baseHeight}em;\n\n ${paddingStyles};\n ${openedStyles};\n ${unborderedStyles};\n ${unborderedHoverStyles};\n`;\n\ninterface SelectMenuProps {\n width: number;\n}\nconst SelectMenu = styled(Menu, omitEmotionProps('width'))<SelectMenuProps>`\n padding-top: 0;\n padding-bottom: 0;\n max-height: unset;\n\n ${m.min.xs} {\n width: ${(p) => p.width}px;\n }\n`;\n\nconst NotFound = styled.div`\n height: ${(p) => p.theme.menuItemHeight}em;\n display: flex;\n align-items: center;\n\n padding: 0 ${(p) => p.theme.inputPaddingHorizontal}em;\n color: ${(p) => clr(p.theme.selectNotFoundColorText)};\n`;\n\nconst InputSearchContainer = styled.div`\n padding: ${(p) => p.theme.menuPaddingVertical}em\n ${(p) => p.theme.inputPaddingHorizontal}em 0;\n`;\n\n/**\n * The component that allows to pick a value from predefined options.\n */\nconst Select = forwardRef<HTMLDivElement, SelectProps>(\n (\n {\n options = [],\n left,\n leftHasPadding = false,\n right,\n rightHasPadding = false,\n placeholder,\n searchVisible = false,\n searchProps = {},\n notFoundText = 'Not found',\n unbordered = false,\n loading = false,\n disabled = false,\n clearVisible = false,\n threshold = 10,\n visibleCount = 6,\n overscanCount = 10,\n maxSelectedItems = 1,\n locale = defaultLocale,\n value,\n defaultValue,\n onChange,\n onLoadNext = () => {},\n size,\n placement,\n ...rest\n },\n ref\n ) => {\n const [containerRef, mergedContainerRef] = useForwardedRef(ref);\n const [width, setWidth] = useState(0);\n const inputSearchContainerRef = useRef<HTMLDivElement>(null);\n const [opened, setOpened] = useState(false);\n const [forwardedValue, setForwardedValue] = useForwardedState({\n value,\n defaultValue,\n onChange,\n });\n\n /**\n * Detect the width of the container when the select was opened and update\n * it when either the container size or the window size has been changed.\n */\n const resizeHandler = useCallback(() => {\n window.requestAnimationFrame(() => {\n if (!opened || !containerRef.current) return;\n const nextWidth = containerRef.current.getBoundingClientRect().width;\n if (width === nextWidth) return;\n setWidth(nextWidth);\n });\n }, [opened, containerRef, width]);\n useBrowserLayoutEffect(() => resizeHandler(), [resizeHandler]);\n useResizeObserver(containerRef, resizeHandler);\n useEvent(\n (typeof window !== 'undefined' ? window : undefined) as EventTarget,\n 'resize',\n resizeHandler\n );\n\n // Replace the aria-haspopup attribute from menu to listbox\n useBrowserLayoutEffect(() => {\n if (!containerRef.current) return;\n containerRef.current.setAttribute('aria-haspopup', 'listbox');\n }, []);\n\n const selectedItems = useMemo(\n () =>\n (forwardedValue || []).map((v) => {\n const option = (options || []).find((item) => item.value === v);\n return { title: option ? option.title || '' : '', value: v };\n }),\n [forwardedValue, options]\n );\n\n const listBoxId = useMemo(\n () => `listbox-${Math.random().toString(36).slice(2, 11)}`,\n []\n );\n\n return (\n <>\n <SelectContainer\n opened={opened}\n unbordered={unbordered}\n disabled={disabled}\n size={size}\n tabIndex={!disabled ? 0 : -1}\n onClick={() => {\n if (disabled) return;\n setOpened(!opened);\n }}\n onKeyDown={(e) => {\n if (disabled) return;\n if (['Enter', ' '].includes(e.key)) {\n setOpened(!opened);\n e.preventDefault();\n }\n }}\n onMouseDown={(e) => e.preventDefault()}\n role='combobox'\n aria-disabled={disabled}\n aria-busy={loading}\n aria-haspopup='listbox'\n aria-owns={listBoxId}\n {...rest}\n ref={mergedContainerRef}\n >\n <SelectToggle\n selectedItems={selectedItems}\n onDelete={(v) =>\n setForwardedValue(\n (forwardedValue || []).filter((item) => item !== v)\n )\n }\n onClear={() => {\n setForwardedValue([]);\n if (!containerRef.current) return;\n containerRef.current.focus();\n }}\n opened={opened}\n multiple={maxSelectedItems !== 1}\n placeholder={placeholder}\n left={left}\n leftHasPadding={leftHasPadding}\n right={right}\n rightHasPadding={rightHasPadding}\n unbordered={unbordered}\n disabled={disabled}\n clearVisible={clearVisible}\n loading={loading}\n locale={locale}\n />\n </SelectContainer>\n\n <SelectMenu\n trigger={containerRef}\n visible={opened}\n onClose={() => setOpened(false)}\n size={size}\n width={width}\n closeOnSelect={maxSelectedItems === 1}\n modalTitle={placeholder}\n placement={placement}\n >\n {searchVisible && (\n <InputSearchContainer ref={inputSearchContainerRef}>\n <InputSearch {...searchProps} />\n </InputSearchContainer>\n )}\n\n {options.length > 0 ? (\n <SelectList\n searchVisible={searchVisible}\n options={options}\n visibleCount={visibleCount}\n overscanCount={overscanCount}\n threshold={threshold}\n onLoadNext={onLoadNext}\n maxSelectedItems={maxSelectedItems}\n containerRef={containerRef}\n value={forwardedValue}\n onChange={setForwardedValue}\n id={listBoxId}\n size={size}\n />\n ) : (\n <NotFound>{notFoundText}</NotFound>\n )}\n </SelectMenu>\n </>\n );\n }\n);\n\nSelect.displayName = 'Select';\n\nexport default Select;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["React","forwardRef","useCallback","useMemo","useRef","useState","transitionStyles","omitEmotionProps","useEvent","useForwardedRef","useForwardedState","useResizeObserver","useBrowserLayoutEffect","styled","m","css","clr","InputContainer","Menu","InputSearch","SelectToggle","SelectList","defaultLocale","paddingStyles","p","paddingVertical","theme","baseHeight","selectToggleListItemHeight","openedStyles","opened","unbordered","inputFocusColorBorder","inputFocusColorShadow","unborderedStyles","unborderedHoverStyles","disabled","buttonGhostColorBgHover","SelectContainer","SelectMenu","min","xs","width","NotFound","div","menuItemHeight","inputPaddingHorizontal","selectNotFoundColorText","InputSearchContainer","menuPaddingVertical","Select","options","left","leftHasPadding","right","rightHasPadding","placeholder","searchVisible","searchProps","notFoundText","loading","clearVisible","threshold","visibleCount","overscanCount","maxSelectedItems","locale","value","defaultValue","onChange","onLoadNext","size","placement","rest","ref","containerRef","mergedContainerRef","setWidth","inputSearchContainerRef","setOpened","forwardedValue","setForwardedValue","resizeHandler","window","requestAnimationFrame","current","nextWidth","getBoundingClientRect","undefined","setAttribute","selectedItems","map","v","option","find","item","title","listBoxId","Math","random","toString","slice","e","includes","key","preventDefault","filter","focus","length","displayName"],"sources":["../../../src/Select/index.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { transitionStyles, WithSize } from '@os-design/styles';\nimport {\n omitEmotionProps,\n useEvent,\n useForwardedRef,\n useForwardedState,\n useResizeObserver,\n useBrowserLayoutEffect,\n} from '@os-design/utils';\nimport styled from '@emotion/styled';\nimport { m } from '@os-design/media';\nimport { css } from '@emotion/react';\nimport { clr } from '@os-design/theming';\nimport { InputContainer } from '../Input';\nimport Menu from '../Menu';\nimport InputSearch, { InputSearchProps } from '../InputSearch';\nimport SelectToggle from './SelectToggle';\nimport SelectList, { OptionProps } from './SelectList';\nimport { PopoverProps } from '../Popover';\nimport defaultLocale, { SelectLocale } from './utils/defaultLocale';\n\ntype JsxDivProps = Omit<\n JSX.IntrinsicElements['div'],\n 'value' | 'defaultValue' | 'onChange' | 'ref'\n>;\nexport interface SelectProps\n extends JsxDivProps,\n WithSize,\n Pick<PopoverProps, 'placement'> {\n /**\n * Options of the select.\n * @default undefined\n */\n options?: OptionProps[];\n /**\n * The component located on the left side.\n * @default undefined\n */\n left?: React.ReactNode;\n /**\n * Adds padding to the left component.\n * It can be useful when passing an icon or text in the left component.\n * @default false\n */\n leftHasPadding?: boolean;\n /**\n * The component located on the right side.\n * @default undefined\n */\n right?: React.ReactNode;\n /**\n * Adds padding to the right component.\n * It can be useful when passing an icon or text in the right component.\n * @default false\n */\n rightHasPadding?: boolean;\n /**\n * The placeholder of the select.\n * @default undefined\n */\n placeholder?: string;\n /**\n * Whether the search input visible.\n * @default false\n */\n searchVisible?: boolean;\n /**\n * Props of the search input.\n * @default undefined\n */\n searchProps?: InputSearchProps;\n /**\n * Text displayed when there are no list items.\n * @default Not found\n */\n notFoundText?: string;\n /**\n * Whether the border is hidden.\n * @default false\n */\n unbordered?: boolean;\n /**\n * Shows the loading status.\n * @default false\n */\n loading?: boolean;\n /**\n * Whether the select is disabled.\n * @default false\n */\n disabled?: boolean;\n /**\n * Whether the select has the clear button.\n * @default false\n */\n clearVisible?: boolean;\n /**\n * A threshold N means that the onLoadNext function calls when a user scrolls all items except N.\n * @default 10\n */\n threshold?: number;\n /**\n * Defines how many items inside of the visible \"window\" to render.\n * @default 6\n */\n visibleCount?: number;\n /**\n * Defines how many items outside of the visible \"window\" to render at all times.\n * @default 10\n */\n overscanCount?: number;\n /**\n * The max number of options that the user can select.\n * @default 1\n */\n maxSelectedItems?: number | 'all';\n /**\n * The locale.\n * @default undefined\n */\n locale?: SelectLocale;\n /**\n * Selected options.\n * @default undefined\n */\n value?: string[];\n /**\n * The default value.\n * @default undefined\n */\n defaultValue?: string[];\n /**\n * The change event handler.\n * @default undefined\n */\n onChange?: (value: string[]) => void;\n /**\n * The callback to load more items.\n * @default undefined\n */\n onLoadNext?: () => void;\n}\n\nconst paddingStyles = (p) => {\n const paddingVertical =\n (p.theme.baseHeight - p.theme.selectToggleListItemHeight) / 2;\n\n return css`\n padding: calc(${paddingVertical}em - 1px) 0;\n `;\n};\n\nconst openedStyles = (p) =>\n p.opened &&\n !p.unbordered &&\n css`\n border-color: ${clr(p.theme.inputFocusColorBorder)};\n box-shadow: 0 0 0 0.15em ${clr(p.theme.inputFocusColorShadow)};\n `;\n\nconst unborderedStyles = (p) =>\n p.unbordered &&\n css`\n border: 0;\n box-shadow: none !important;\n ${transitionStyles('background-color')(p)};\n `;\n\nconst unborderedHoverStyles = (p) =>\n p.unbordered &&\n !p.disabled &&\n css`\n @media (hover: hover) {\n &:hover,\n &:focus {\n background-color: ${clr(p.theme.buttonGhostColorBgHover)};\n }\n }\n `;\n\ninterface SelectContainerProps {\n opened: boolean;\n unbordered?: boolean;\n disabled?: boolean;\n}\nexport const SelectContainer = styled(\n InputContainer,\n omitEmotionProps('opened', 'unbordered', 'disabled')\n)<SelectContainerProps>`\n cursor: ${(p) => (!p.disabled ? 'pointer' : 'not-allowed')};\n user-select: none;\n position: relative;\n display: flex;\n align-items: center;\n\n height: unset;\n min-height: ${(p) => p.theme.baseHeight}em;\n\n ${paddingStyles};\n ${openedStyles};\n ${unborderedStyles};\n ${unborderedHoverStyles};\n`;\n\ninterface SelectMenuProps {\n width: number;\n}\nconst SelectMenu = styled(Menu, omitEmotionProps('width'))<SelectMenuProps>`\n padding-top: 0;\n padding-bottom: 0;\n max-height: unset;\n\n ${m.min.xs} {\n width: ${(p) => p.width}px;\n }\n`;\n\nconst NotFound = styled.div`\n height: ${(p) => p.theme.menuItemHeight}em;\n display: flex;\n align-items: center;\n\n padding: 0 ${(p) => p.theme.inputPaddingHorizontal}em;\n color: ${(p) => clr(p.theme.selectNotFoundColorText)};\n`;\n\nconst InputSearchContainer = styled.div`\n padding: ${(p) => p.theme.menuPaddingVertical}em\n ${(p) => p.theme.inputPaddingHorizontal}em 0;\n`;\n\n/**\n * The component that allows to pick a value from predefined options.\n */\nconst Select = forwardRef<HTMLDivElement, SelectProps>(\n (\n {\n options = [],\n left,\n leftHasPadding = false,\n right,\n rightHasPadding = false,\n placeholder,\n searchVisible = false,\n searchProps = {},\n notFoundText = 'Not found',\n unbordered = false,\n loading = false,\n disabled = false,\n clearVisible = false,\n threshold = 10,\n visibleCount = 6,\n overscanCount = 10,\n maxSelectedItems = 1,\n locale = defaultLocale,\n value,\n defaultValue,\n onChange,\n onLoadNext = () => {},\n size,\n placement,\n ...rest\n },\n ref\n ) => {\n const [containerRef, mergedContainerRef] = useForwardedRef(ref);\n const [width, setWidth] = useState(0);\n const inputSearchContainerRef = useRef<HTMLDivElement>(null);\n const [opened, setOpened] = useState(false);\n const [forwardedValue, setForwardedValue] = useForwardedState({\n value,\n defaultValue,\n onChange,\n });\n\n /**\n * Detect the width of the container when the select was opened and update\n * it when either the container size or the window size has been changed.\n */\n const resizeHandler = useCallback(() => {\n window.requestAnimationFrame(() => {\n if (!opened || !containerRef.current) return;\n const nextWidth = containerRef.current.getBoundingClientRect().width;\n if (width === nextWidth) return;\n setWidth(nextWidth);\n });\n }, [opened, containerRef, width]);\n useBrowserLayoutEffect(() => resizeHandler(), [resizeHandler]);\n useResizeObserver(containerRef, resizeHandler);\n useEvent(\n (typeof window !== 'undefined' ? window : undefined) as EventTarget,\n 'resize',\n resizeHandler\n );\n\n // Replace the aria-haspopup attribute from menu to listbox\n useBrowserLayoutEffect(() => {\n if (!containerRef.current) return;\n containerRef.current.setAttribute('aria-haspopup', 'listbox');\n }, []);\n\n const selectedItems = useMemo(\n () =>\n (forwardedValue || []).map((v) => {\n const option = (options || []).find((item) => item.value === v);\n return { title: option ? option.title || '' : '', value: v };\n }),\n [forwardedValue, options]\n );\n\n const listBoxId = useMemo(\n () => `listbox-${Math.random().toString(36).slice(2, 11)}`,\n []\n );\n\n return (\n <>\n <SelectContainer\n opened={opened}\n unbordered={unbordered}\n disabled={disabled}\n size={size}\n tabIndex={!disabled ? 0 : -1}\n onClick={() => {\n if (disabled) return;\n setOpened(!opened);\n }}\n onKeyDown={(e) => {\n if (disabled) return;\n if (['Enter', ' '].includes(e.key)) {\n setOpened(!opened);\n e.preventDefault();\n }\n }}\n onMouseDown={(e) => e.preventDefault()}\n role='combobox'\n aria-disabled={disabled}\n aria-busy={loading}\n aria-haspopup='listbox'\n aria-owns={listBoxId}\n {...rest}\n ref={mergedContainerRef}\n >\n <SelectToggle\n selectedItems={selectedItems}\n onDelete={(v) =>\n setForwardedValue(\n (forwardedValue || []).filter((item) => item !== v)\n )\n }\n onClear={() => {\n setForwardedValue([]);\n if (!containerRef.current) return;\n containerRef.current.focus();\n }}\n opened={opened}\n multiple={maxSelectedItems !== 1}\n placeholder={placeholder}\n left={left}\n leftHasPadding={leftHasPadding}\n right={right}\n rightHasPadding={rightHasPadding}\n unbordered={unbordered}\n disabled={disabled}\n clearVisible={clearVisible}\n loading={loading}\n locale={locale}\n />\n </SelectContainer>\n\n <SelectMenu\n trigger={containerRef}\n visible={opened}\n onClose={() => setOpened(false)}\n size={size}\n width={width}\n closeOnSelect={maxSelectedItems === 1}\n modalTitle={placeholder}\n placement={placement}\n >\n {searchVisible && (\n <InputSearchContainer ref={inputSearchContainerRef}>\n <InputSearch {...searchProps} />\n </InputSearchContainer>\n )}\n\n {options.length > 0 ? (\n <SelectList\n searchVisible={searchVisible}\n options={options}\n visibleCount={visibleCount}\n overscanCount={overscanCount}\n threshold={threshold}\n onLoadNext={onLoadNext}\n maxSelectedItems={maxSelectedItems}\n containerRef={containerRef}\n value={forwardedValue}\n onChange={setForwardedValue}\n id={listBoxId}\n size={size}\n />\n ) : (\n <NotFound>{notFoundText}</NotFound>\n )}\n </SelectMenu>\n </>\n );\n }\n);\n\nSelect.displayName = 'Select';\n\nexport default Select;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaultLocale.js","names":["defaultLocale","deleteLabel","clearLabel"],"sources":["../../../../src/Select/utils/defaultLocale.ts"],"sourcesContent":["export interface SelectLocale {\n deleteLabel: string;\n clearLabel: string;\n}\n\nconst defaultLocale: SelectLocale = {\n deleteLabel: 'Delete',\n clearLabel: 'Clear',\n};\n\nexport default defaultLocale;\n"],"mappings":"AAKA,MAAMA,aAA2B,GAAG;EAClCC,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"defaultLocale.js","names":["defaultLocale","deleteLabel","clearLabel"],"sources":["../../../../src/Select/utils/defaultLocale.ts"],"sourcesContent":["export interface SelectLocale {\n deleteLabel: string;\n clearLabel: string;\n}\n\nconst defaultLocale: SelectLocale = {\n deleteLabel: 'Delete',\n clearLabel: 'Clear',\n};\n\nexport default defaultLocale;\n"],"mappings":"AAKA,MAAMA,aAA2B,GAAG;EAClCC,WAAW,EAAE,QAAQ;EACrBC,UAAU,EAAE;AACd,CAAC;AAED,eAAeF,aAAa"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
2
|
-
|
|
3
2
|
import styled from '@emotion/styled';
|
|
4
3
|
import { keyframes } from '@emotion/react';
|
|
5
4
|
import React, { forwardRef } from 'react';
|
|
@@ -24,10 +23,10 @@ const StyledSkeleton = styled('div', omitEmotionProps('width', 'size'))`
|
|
|
24
23
|
border-radius: ${p => p.theme.borderRadius}em;
|
|
25
24
|
animation: ${SkeletonAnimation} 1.4s ease infinite;
|
|
26
25
|
`;
|
|
26
|
+
|
|
27
27
|
/**
|
|
28
28
|
* Provides a basic placeholder while a user waits for the content to load.
|
|
29
29
|
*/
|
|
30
|
-
|
|
31
30
|
const Skeleton = /*#__PURE__*/forwardRef(({
|
|
32
31
|
width = '100%',
|
|
33
32
|
...rest
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["styled","keyframes","React","forwardRef","omitEmotionProps","clr","SkeletonAnimation","StyledSkeleton","p","width","theme","skeletonColorBgFrom","skeletonColorBgTo","borderRadius","Skeleton","rest","ref","displayName"],"sources":["../../../src/Skeleton/index.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport { keyframes } from '@emotion/react';\nimport React, { forwardRef } from 'react';\nimport { omitEmotionProps } from '@os-design/utils';\nimport { clr } from '@os-design/theming';\n\ntype JsxDivProps = Omit<JSX.IntrinsicElements['div'], 'ref'>;\nexport interface SkeletonProps extends JsxDivProps {\n /**\n * The width of the skeleton.\n * @default 100%\n */\n width?: string;\n}\n\nconst SkeletonAnimation = keyframes`\n from { background-position: 100% 50%; }\n to { background-position: 0 50%; }\n`;\n\ntype StyledSkeletonProps = Required<Pick<SkeletonProps, 'width'>>;\nconst StyledSkeleton = styled(\n 'div',\n omitEmotionProps('width', 'size')\n)<StyledSkeletonProps>`\n width: ${(p) => p.width};\n height: 1em;\n\n background: linear-gradient(\n 90deg,\n ${(p) => clr(p.theme.skeletonColorBgFrom)} 25%,\n ${(p) => clr(p.theme.skeletonColorBgTo)} 37%,\n ${(p) => clr(p.theme.skeletonColorBgFrom)} 63%\n );\n background-size: 400% 100%;\n\n border-radius: ${(p) => p.theme.borderRadius}em;\n animation: ${SkeletonAnimation} 1.4s ease infinite;\n`;\n\n/**\n * Provides a basic placeholder while a user waits for the content to load.\n */\nconst Skeleton = forwardRef<HTMLDivElement, SkeletonProps>(\n ({ width = '100%', ...rest }, ref) => (\n <StyledSkeleton width={width} aria-busy {...rest} ref={ref} />\n )\n);\n\nSkeleton.displayName = 'Skeleton';\n\nexport default Skeleton;\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","names":["styled","keyframes","React","forwardRef","omitEmotionProps","clr","SkeletonAnimation","StyledSkeleton","p","width","theme","skeletonColorBgFrom","skeletonColorBgTo","borderRadius","Skeleton","rest","ref","displayName"],"sources":["../../../src/Skeleton/index.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport { keyframes } from '@emotion/react';\nimport React, { forwardRef } from 'react';\nimport { omitEmotionProps } from '@os-design/utils';\nimport { clr } from '@os-design/theming';\n\ntype JsxDivProps = Omit<JSX.IntrinsicElements['div'], 'ref'>;\nexport interface SkeletonProps extends JsxDivProps {\n /**\n * The width of the skeleton.\n * @default 100%\n */\n width?: string;\n}\n\nconst SkeletonAnimation = keyframes`\n from { background-position: 100% 50%; }\n to { background-position: 0 50%; }\n`;\n\ntype StyledSkeletonProps = Required<Pick<SkeletonProps, 'width'>>;\nconst StyledSkeleton = styled(\n 'div',\n omitEmotionProps('width', 'size')\n)<StyledSkeletonProps>`\n width: ${(p) => p.width};\n height: 1em;\n\n background: linear-gradient(\n 90deg,\n ${(p) => clr(p.theme.skeletonColorBgFrom)} 25%,\n ${(p) => clr(p.theme.skeletonColorBgTo)} 37%,\n ${(p) => clr(p.theme.skeletonColorBgFrom)} 63%\n );\n background-size: 400% 100%;\n\n border-radius: ${(p) => p.theme.borderRadius}em;\n animation: ${SkeletonAnimation} 1.4s ease infinite;\n`;\n\n/**\n * Provides a basic placeholder while a user waits for the content to load.\n */\nconst Skeleton = forwardRef<HTMLDivElement, SkeletonProps>(\n ({ width = '100%', ...rest }, ref) => (\n <StyledSkeleton width={width} aria-busy {...rest} ref={ref} />\n )\n);\n\nSkeleton.displayName = 'Skeleton';\n\nexport default Skeleton;\n"],"mappings":";AAAA,OAAOA,MAAM,MAAM,iBAAiB;AACpC,SAASC,SAAS,QAAQ,gBAAgB;AAC1C,OAAOC,KAAK,IAAIC,UAAU,QAAQ,OAAO;AACzC,SAASC,gBAAgB,QAAQ,kBAAkB;AACnD,SAASC,GAAG,QAAQ,oBAAoB;AAWxC,MAAMC,iBAAiB,GAAGL,SAAU;AACpC;AACA;AACA,CAAC;AAGD,MAAMM,cAAc,GAAGP,MAAM,CAC3B,KAAK,EACLI,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,CACZ;AACvB,WAAYI,CAAC,IAAKA,CAAC,CAACC,KAAM;AAC1B;AACA;AACA;AACA;AACA,MAAOD,CAAC,IAAKH,GAAG,CAACG,CAAC,CAACE,KAAK,CAACC,mBAAmB,CAAE;AAC9C,MAAOH,CAAC,IAAKH,GAAG,CAACG,CAAC,CAACE,KAAK,CAACE,iBAAiB,CAAE;AAC5C,MAAOJ,CAAC,IAAKH,GAAG,CAACG,CAAC,CAACE,KAAK,CAACC,mBAAmB,CAAE;AAC9C;AACA;AACA;AACA,mBAAoBH,CAAC,IAAKA,CAAC,CAACE,KAAK,CAACG,YAAa;AAC/C,eAAeP,iBAAkB;AACjC,CAAC;;AAED;AACA;AACA;AACA,MAAMQ,QAAQ,gBAAGX,UAAU,CACzB,CAAC;EAAEM,KAAK,GAAG,MAAM;EAAE,GAAGM;AAAK,CAAC,EAAEC,GAAG,kBAC/B,oBAAC,cAAc;EAAC,KAAK,EAAEP,KAAM;EAAC;AAAS,GAAKM,IAAI;EAAE,GAAG,EAAEC;AAAI,GAC5D,CACF;AAEDF,QAAQ,CAACG,WAAW,GAAG,UAAU;AAEjC,eAAeH,QAAQ"}
|