@os-design/core 1.0.156 → 1.0.157
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 +119 -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 +90 -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 +10 -0
- package/dist/types/TimePicker/index.d.ts.map +1 -0
- package/package.json +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["React","forwardRef","styled","resetFocusStyles","transitionStyles","omitEmotionProps","clr","css","m","currentPageStyles","p","currentPage","theme","navigationItemColorBgActive","navigationItemColorTextActive","NavigationLink","borderRadius","navigationItemColorText","navigationItemColorBgHover","navigationItemTabWidth","navigationTabHeight","min","md","navigationItemSideHeight","IconContainer","span","Title","NavigationItem","icon","as","onMouseDown","children","rest","ref","e","preventDefault","undefined","displayName"],"sources":["../../../src/NavigationItem/index.tsx"],"sourcesContent":["import React, { forwardRef } from 'react';\nimport styled from '@emotion/styled';\nimport { resetFocusStyles, transitionStyles } from '@os-design/styles';\nimport { omitEmotionProps } from '@os-design/utils';\nimport { clr } from '@os-design/theming';\nimport { css } from '@emotion/react';\nimport { m } from '@os-design/media';\nimport { LinkProps, ReactRouterLinkProps } from '../Link';\n\ntype JsxAProps = Omit<JSX.IntrinsicElements['a'], 'ref'>;\nexport interface NavigationItemProps\n extends JsxAProps,\n ReactRouterLinkProps,\n Pick<LinkProps, 'as'> {\n /**\n * The icon of the item.\n * @default undefined\n */\n icon: React.ReactElement;\n /**\n * Whether the item is the current page.\n * @default false\n */\n currentPage?: boolean;\n}\n\nconst currentPageStyles = (p) =>\n p.currentPage &&\n css`\n background-color: ${clr(p.theme.navigationItemColorBgActive)};\n color: ${clr(p.theme.navigationItemColorTextActive)};\n `;\n\ntype NavigationLinkProps = Pick<NavigationItemProps, 'currentPage'>;\nconst NavigationLink = styled(\n 'a',\n omitEmotionProps('currentPage', 'as')\n)<NavigationLinkProps>`\n ${resetFocusStyles};\n text-decoration: none;\n cursor: pointer;\n overflow: hidden;\n border-radius: ${(p) => p.theme.borderRadius}em;\n\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n\n color: ${(p) => clr(p.theme.navigationItemColorText)};\n @media (hover: hover) {\n &:hover,\n &:focus {\n background-color: ${(p) => clr(p.theme.navigationItemColorBgHover)};\n }\n }\n\n // Tab navigator\n width: ${(p) => p.theme.navigationItemTabWidth}em;\n min-width: ${(p) => p.theme.navigationItemTabWidth}em;\n height: calc(${(p) => p.theme.navigationTabHeight}em - 1px);\n\n // Side navigator\n ${m.min.md} {\n // Reset tab navigator styles\n min-width: unset;\n\n width: 100%;\n height: ${(p) => p.theme.navigationItemSideHeight}em;\n min-height: ${(p) => p.theme.navigationItemSideHeight}em;\n }\n\n ${currentPageStyles};\n ${transitionStyles('background-color', 'color')};\n`;\n\nconst IconContainer = styled.span`\n display: inherit;\n\n // Tab navigator\n font-size: 1.6em;\n\n // Side navigator\n ${m.min.md} {\n font-size: 1.8em;\n }\n`;\n\nconst Title = styled.span`\n font-size: 0.75em;\n font-weight: 500;\n white-space: nowrap;\n\n // Side navigator\n ${m.min.md} {\n margin-top: 0.3em;\n }\n`;\n\n/**\n * The item of the navigation.\n */\nconst NavigationItem = forwardRef<HTMLAnchorElement, NavigationItemProps>(\n (\n {\n icon,\n currentPage = false,\n as,\n onMouseDown = () => {},\n children,\n ...rest\n },\n ref\n ) => (\n <div role='listitem'>\n <NavigationLink\n currentPage={currentPage}\n as={as}\n onMouseDown={(e) => {\n onMouseDown(e);\n e.preventDefault();\n }}\n aria-current={currentPage ? 'page' : undefined}\n {...rest}\n ref={ref}\n >\n <IconContainer>{icon}</IconContainer>\n {children && <Title>{children}</Title>}\n </NavigationLink>\n </div>\n )\n);\n\nNavigationItem.displayName = 'NavigationItem';\n\nexport default NavigationItem;\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","names":["React","forwardRef","styled","resetFocusStyles","transitionStyles","omitEmotionProps","clr","css","m","currentPageStyles","p","currentPage","theme","navigationItemColorBgActive","navigationItemColorTextActive","NavigationLink","borderRadius","navigationItemColorText","navigationItemColorBgHover","navigationItemTabWidth","navigationTabHeight","min","md","navigationItemSideHeight","IconContainer","span","Title","NavigationItem","icon","as","onMouseDown","children","rest","ref","e","preventDefault","undefined","displayName"],"sources":["../../../src/NavigationItem/index.tsx"],"sourcesContent":["import React, { forwardRef } from 'react';\nimport styled from '@emotion/styled';\nimport { resetFocusStyles, transitionStyles } from '@os-design/styles';\nimport { omitEmotionProps } from '@os-design/utils';\nimport { clr } from '@os-design/theming';\nimport { css } from '@emotion/react';\nimport { m } from '@os-design/media';\nimport { LinkProps, ReactRouterLinkProps } from '../Link';\n\ntype JsxAProps = Omit<JSX.IntrinsicElements['a'], 'ref'>;\nexport interface NavigationItemProps\n extends JsxAProps,\n ReactRouterLinkProps,\n Pick<LinkProps, 'as'> {\n /**\n * The icon of the item.\n * @default undefined\n */\n icon: React.ReactElement;\n /**\n * Whether the item is the current page.\n * @default false\n */\n currentPage?: boolean;\n}\n\nconst currentPageStyles = (p) =>\n p.currentPage &&\n css`\n background-color: ${clr(p.theme.navigationItemColorBgActive)};\n color: ${clr(p.theme.navigationItemColorTextActive)};\n `;\n\ntype NavigationLinkProps = Pick<NavigationItemProps, 'currentPage'>;\nconst NavigationLink = styled(\n 'a',\n omitEmotionProps('currentPage', 'as')\n)<NavigationLinkProps>`\n ${resetFocusStyles};\n text-decoration: none;\n cursor: pointer;\n overflow: hidden;\n border-radius: ${(p) => p.theme.borderRadius}em;\n\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n\n color: ${(p) => clr(p.theme.navigationItemColorText)};\n @media (hover: hover) {\n &:hover,\n &:focus {\n background-color: ${(p) => clr(p.theme.navigationItemColorBgHover)};\n }\n }\n\n // Tab navigator\n width: ${(p) => p.theme.navigationItemTabWidth}em;\n min-width: ${(p) => p.theme.navigationItemTabWidth}em;\n height: calc(${(p) => p.theme.navigationTabHeight}em - 1px);\n\n // Side navigator\n ${m.min.md} {\n // Reset tab navigator styles\n min-width: unset;\n\n width: 100%;\n height: ${(p) => p.theme.navigationItemSideHeight}em;\n min-height: ${(p) => p.theme.navigationItemSideHeight}em;\n }\n\n ${currentPageStyles};\n ${transitionStyles('background-color', 'color')};\n`;\n\nconst IconContainer = styled.span`\n display: inherit;\n\n // Tab navigator\n font-size: 1.6em;\n\n // Side navigator\n ${m.min.md} {\n font-size: 1.8em;\n }\n`;\n\nconst Title = styled.span`\n font-size: 0.75em;\n font-weight: 500;\n white-space: nowrap;\n\n // Side navigator\n ${m.min.md} {\n margin-top: 0.3em;\n }\n`;\n\n/**\n * The item of the navigation.\n */\nconst NavigationItem = forwardRef<HTMLAnchorElement, NavigationItemProps>(\n (\n {\n icon,\n currentPage = false,\n as,\n onMouseDown = () => {},\n children,\n ...rest\n },\n ref\n ) => (\n <div role='listitem'>\n <NavigationLink\n currentPage={currentPage}\n as={as}\n onMouseDown={(e) => {\n onMouseDown(e);\n e.preventDefault();\n }}\n aria-current={currentPage ? 'page' : undefined}\n {...rest}\n ref={ref}\n >\n <IconContainer>{icon}</IconContainer>\n {children && <Title>{children}</Title>}\n </NavigationLink>\n </div>\n )\n);\n\nNavigationItem.displayName = 'NavigationItem';\n\nexport default NavigationItem;\n"],"mappings":"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"}
|
|
@@ -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 React, { forwardRef, useContext } from 'react';
|
|
5
4
|
import { horizontalPaddingStyles } from '@os-design/styles';
|
|
@@ -7,7 +6,6 @@ import { omitEmotionProps } from '@os-design/utils';
|
|
|
7
6
|
import { css } from '@emotion/react';
|
|
8
7
|
import { m } from '@os-design/media';
|
|
9
8
|
import LayoutContext from '../Layout/LayoutContext';
|
|
10
|
-
|
|
11
9
|
const hasNavigationStyles = p => p.hasNavigation && css`
|
|
12
10
|
${!p.hasList && css`
|
|
13
11
|
margin-bottom: calc(
|
|
@@ -19,34 +17,30 @@ const hasNavigationStyles = p => p.hasNavigation && css`
|
|
|
19
17
|
margin-left: ${p.theme.navigationSideWidth}em;
|
|
20
18
|
}
|
|
21
19
|
`;
|
|
22
|
-
|
|
23
20
|
const hasPageHeaderStyles = p => p.hasPageHeader && !p.hasList && css`
|
|
24
21
|
margin-top: ${p.theme.pageHeaderHeight[0]}em;
|
|
25
22
|
${m.min.md} {
|
|
26
23
|
margin-top: ${p.theme.pageHeaderHeight[1]}em;
|
|
27
24
|
}
|
|
28
25
|
`;
|
|
29
|
-
|
|
30
26
|
const notHasListStyles = p => !p.hasList && css`
|
|
31
27
|
padding-top: ${p.theme.pageContentPaddingVertical}em;
|
|
32
28
|
padding-bottom: ${p.theme.pageContentPaddingVertical}em;
|
|
33
29
|
${horizontalPaddingStyles()(p)};
|
|
34
30
|
`;
|
|
35
|
-
|
|
36
31
|
const notHasNavigationStyles = p => !p.hasNavigation && !p.hasList && css`
|
|
37
32
|
margin-bottom: env(safe-area-inset-bottom);
|
|
38
33
|
`;
|
|
39
|
-
|
|
40
34
|
const Container = styled('main', omitEmotionProps('hasNavigation', 'hasPageHeader', 'hasList'))`
|
|
41
35
|
${hasNavigationStyles};
|
|
42
36
|
${hasPageHeaderStyles};
|
|
43
37
|
${notHasListStyles};
|
|
44
38
|
${notHasNavigationStyles};
|
|
45
39
|
`;
|
|
40
|
+
|
|
46
41
|
/**
|
|
47
42
|
* The wrapper that adds padding to the page content.
|
|
48
43
|
*/
|
|
49
|
-
|
|
50
44
|
const PageContent = /*#__PURE__*/forwardRef(({
|
|
51
45
|
hasList = false,
|
|
52
46
|
children,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["styled","React","forwardRef","useContext","horizontalPaddingStyles","omitEmotionProps","css","m","LayoutContext","hasNavigationStyles","p","hasNavigation","hasList","theme","navigationTabHeight","min","md","navigationSideWidth","hasPageHeaderStyles","hasPageHeader","pageHeaderHeight","notHasListStyles","pageContentPaddingVertical","notHasNavigationStyles","Container","PageContent","children","rest","ref","displayName"],"sources":["../../../src/PageContent/index.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport React, { forwardRef, useContext } from 'react';\nimport { horizontalPaddingStyles } from '@os-design/styles';\nimport { omitEmotionProps } from '@os-design/utils';\nimport { css } from '@emotion/react';\nimport { m } from '@os-design/media';\nimport LayoutContext from '../Layout/LayoutContext';\n\ntype JsxDivProps = Omit<JSX.IntrinsicElements['div'], 'ref'>;\nexport interface PageContentProps extends JsxDivProps {\n /**\n * Whether there is the list in the page content.\n * @default false\n */\n hasList?: boolean;\n}\n\nconst hasNavigationStyles = (p) =>\n p.hasNavigation &&\n css`\n ${!p.hasList &&\n css`\n margin-bottom: calc(\n ${p.theme.navigationTabHeight}em + env(safe-area-inset-bottom)\n );\n `}\n ${m.min.md} {\n margin-bottom: 0;\n margin-left: ${p.theme.navigationSideWidth}em;\n }\n `;\n\nconst hasPageHeaderStyles = (p) =>\n p.hasPageHeader &&\n !p.hasList &&\n css`\n margin-top: ${p.theme.pageHeaderHeight[0]}em;\n ${m.min.md} {\n margin-top: ${p.theme.pageHeaderHeight[1]}em;\n }\n `;\n\nconst notHasListStyles = (p) =>\n !p.hasList &&\n css`\n padding-top: ${p.theme.pageContentPaddingVertical}em;\n padding-bottom: ${p.theme.pageContentPaddingVertical}em;\n ${horizontalPaddingStyles()(p)};\n `;\n\nconst notHasNavigationStyles = (p) =>\n !p.hasNavigation &&\n !p.hasList &&\n css`\n margin-bottom: env(safe-area-inset-bottom);\n `;\n\ninterface ContainerProps {\n hasNavigation?: boolean;\n hasPageHeader?: boolean;\n hasList?: boolean;\n}\nconst Container = styled(\n 'main',\n omitEmotionProps('hasNavigation', 'hasPageHeader', 'hasList')\n)<ContainerProps>`\n ${hasNavigationStyles};\n ${hasPageHeaderStyles};\n ${notHasListStyles};\n ${notHasNavigationStyles};\n`;\n\n/**\n * The wrapper that adds padding to the page content.\n */\nconst PageContent = forwardRef<HTMLElement, PageContentProps>(\n ({ hasList = false, children, ...rest }, ref) => {\n const { hasNavigation, hasPageHeader } = useContext(LayoutContext);\n\n return (\n <Container\n hasNavigation={hasNavigation}\n hasPageHeader={hasPageHeader}\n hasList={hasList}\n {...rest}\n ref={ref}\n >\n {children}\n </Container>\n );\n }\n);\n\nPageContent.displayName = 'PageContent';\n\nexport default PageContent;\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","names":["styled","React","forwardRef","useContext","horizontalPaddingStyles","omitEmotionProps","css","m","LayoutContext","hasNavigationStyles","p","hasNavigation","hasList","theme","navigationTabHeight","min","md","navigationSideWidth","hasPageHeaderStyles","hasPageHeader","pageHeaderHeight","notHasListStyles","pageContentPaddingVertical","notHasNavigationStyles","Container","PageContent","children","rest","ref","displayName"],"sources":["../../../src/PageContent/index.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport React, { forwardRef, useContext } from 'react';\nimport { horizontalPaddingStyles } from '@os-design/styles';\nimport { omitEmotionProps } from '@os-design/utils';\nimport { css } from '@emotion/react';\nimport { m } from '@os-design/media';\nimport LayoutContext from '../Layout/LayoutContext';\n\ntype JsxDivProps = Omit<JSX.IntrinsicElements['div'], 'ref'>;\nexport interface PageContentProps extends JsxDivProps {\n /**\n * Whether there is the list in the page content.\n * @default false\n */\n hasList?: boolean;\n}\n\nconst hasNavigationStyles = (p) =>\n p.hasNavigation &&\n css`\n ${!p.hasList &&\n css`\n margin-bottom: calc(\n ${p.theme.navigationTabHeight}em + env(safe-area-inset-bottom)\n );\n `}\n ${m.min.md} {\n margin-bottom: 0;\n margin-left: ${p.theme.navigationSideWidth}em;\n }\n `;\n\nconst hasPageHeaderStyles = (p) =>\n p.hasPageHeader &&\n !p.hasList &&\n css`\n margin-top: ${p.theme.pageHeaderHeight[0]}em;\n ${m.min.md} {\n margin-top: ${p.theme.pageHeaderHeight[1]}em;\n }\n `;\n\nconst notHasListStyles = (p) =>\n !p.hasList &&\n css`\n padding-top: ${p.theme.pageContentPaddingVertical}em;\n padding-bottom: ${p.theme.pageContentPaddingVertical}em;\n ${horizontalPaddingStyles()(p)};\n `;\n\nconst notHasNavigationStyles = (p) =>\n !p.hasNavigation &&\n !p.hasList &&\n css`\n margin-bottom: env(safe-area-inset-bottom);\n `;\n\ninterface ContainerProps {\n hasNavigation?: boolean;\n hasPageHeader?: boolean;\n hasList?: boolean;\n}\nconst Container = styled(\n 'main',\n omitEmotionProps('hasNavigation', 'hasPageHeader', 'hasList')\n)<ContainerProps>`\n ${hasNavigationStyles};\n ${hasPageHeaderStyles};\n ${notHasListStyles};\n ${notHasNavigationStyles};\n`;\n\n/**\n * The wrapper that adds padding to the page content.\n */\nconst PageContent = forwardRef<HTMLElement, PageContentProps>(\n ({ hasList = false, children, ...rest }, ref) => {\n const { hasNavigation, hasPageHeader } = useContext(LayoutContext);\n\n return (\n <Container\n hasNavigation={hasNavigation}\n hasPageHeader={hasPageHeader}\n hasList={hasList}\n {...rest}\n ref={ref}\n >\n {children}\n </Container>\n );\n }\n);\n\nPageContent.displayName = 'PageContent';\n\nexport default PageContent;\n"],"mappings":";AAAA,OAAOA,MAAM,MAAM,iBAAiB;AACpC,OAAOC,KAAK,IAAIC,UAAU,EAAEC,UAAU,QAAQ,OAAO;AACrD,SAASC,uBAAuB,QAAQ,mBAAmB;AAC3D,SAASC,gBAAgB,QAAQ,kBAAkB;AACnD,SAASC,GAAG,QAAQ,gBAAgB;AACpC,SAASC,CAAC,QAAQ,kBAAkB;AACpC,OAAOC,aAAa,MAAM,yBAAyB;AAWnD,MAAMC,mBAAmB,GAAIC,CAAC,IAC5BA,CAAC,CAACC,aAAa,IACfL,GAAI;AACN,MAAM,CAACI,CAAC,CAACE,OAAO,IACZN,GAAI;AACR;AACA,UAAUI,CAAC,CAACG,KAAK,CAACC,mBAAoB;AACtC;AACA,KAAM;AACN,MAAMP,CAAC,CAACQ,GAAG,CAACC,EAAG;AACf;AACA,qBAAqBN,CAAC,CAACG,KAAK,CAACI,mBAAoB;AACjD;AACA,GAAG;AAEH,MAAMC,mBAAmB,GAAIR,CAAC,IAC5BA,CAAC,CAACS,aAAa,IACf,CAACT,CAAC,CAACE,OAAO,IACVN,GAAI;AACN,kBAAkBI,CAAC,CAACG,KAAK,CAACO,gBAAgB,CAAC,CAAC,CAAE;AAC9C,MAAMb,CAAC,CAACQ,GAAG,CAACC,EAAG;AACf,oBAAoBN,CAAC,CAACG,KAAK,CAACO,gBAAgB,CAAC,CAAC,CAAE;AAChD;AACA,GAAG;AAEH,MAAMC,gBAAgB,GAAIX,CAAC,IACzB,CAACA,CAAC,CAACE,OAAO,IACVN,GAAI;AACN,mBAAmBI,CAAC,CAACG,KAAK,CAACS,0BAA2B;AACtD,sBAAsBZ,CAAC,CAACG,KAAK,CAACS,0BAA2B;AACzD,MAAMlB,uBAAuB,EAAE,CAACM,CAAC,CAAE;AACnC,GAAG;AAEH,MAAMa,sBAAsB,GAAIb,CAAC,IAC/B,CAACA,CAAC,CAACC,aAAa,IAChB,CAACD,CAAC,CAACE,OAAO,IACVN,GAAI;AACN;AACA,GAAG;AAOH,MAAMkB,SAAS,GAAGxB,MAAM,CACtB,MAAM,EACNK,gBAAgB,CAAC,eAAe,EAAE,eAAe,EAAE,SAAS,CAAC,CAC7C;AAClB,IAAII,mBAAoB;AACxB,IAAIS,mBAAoB;AACxB,IAAIG,gBAAiB;AACrB,IAAIE,sBAAuB;AAC3B,CAAC;;AAED;AACA;AACA;AACA,MAAME,WAAW,gBAAGvB,UAAU,CAC5B,CAAC;EAAEU,OAAO,GAAG,KAAK;EAAEc,QAAQ;EAAE,GAAGC;AAAK,CAAC,EAAEC,GAAG,KAAK;EAC/C,MAAM;IAAEjB,aAAa;IAAEQ;EAAc,CAAC,GAAGhB,UAAU,CAACK,aAAa,CAAC;EAElE,oBACE,oBAAC,SAAS;IACR,aAAa,EAAEG,aAAc;IAC7B,aAAa,EAAEQ,aAAc;IAC7B,OAAO,EAAEP;EAAQ,GACbe,IAAI;IACR,GAAG,EAAEC;EAAI,IAERF,QAAQ,CACC;AAEhB,CAAC,CACF;AAEDD,WAAW,CAACI,WAAW,GAAG,aAAa;AAEvC,eAAeJ,WAAW"}
|
|
@@ -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, useContext } from 'react';
|
|
4
3
|
import { ellipsisStyles } from '@os-design/styles';
|
|
5
4
|
import { omitEmotionProps } from '@os-design/utils';
|
|
@@ -11,14 +10,12 @@ import { css } from '@emotion/react';
|
|
|
11
10
|
import Button from '../Button';
|
|
12
11
|
import LayoutContext from '../Layout/LayoutContext';
|
|
13
12
|
import defaultLocale from './utils/defaultLocale';
|
|
14
|
-
|
|
15
13
|
const getReducedPadding = (p, isMinSm) => {
|
|
16
14
|
const i = isMinSm ? 1 : 0;
|
|
17
15
|
let padding = p.theme.horizontalPadding[i] - p.theme.buttonPaddingHorizontal;
|
|
18
16
|
if (padding < 0) padding = 0;
|
|
19
17
|
return padding;
|
|
20
18
|
};
|
|
21
|
-
|
|
22
19
|
const horizontalPaddingStyles = p => {
|
|
23
20
|
const reducedPadding = getReducedPadding(p, false);
|
|
24
21
|
const reducedPaddingSm = getReducedPadding(p, true);
|
|
@@ -32,13 +29,11 @@ const horizontalPaddingStyles = p => {
|
|
|
32
29
|
}
|
|
33
30
|
`;
|
|
34
31
|
};
|
|
35
|
-
|
|
36
32
|
const hasNavigationIndentStyles = p => p.hasNavigationIndent && css`
|
|
37
33
|
${m.min.md} {
|
|
38
34
|
left: ${p.theme.navigationSideWidth}em;
|
|
39
35
|
}
|
|
40
36
|
`;
|
|
41
|
-
|
|
42
37
|
export const PageHeaderContainer = styled('div', omitEmotionProps('leftIsGhostButton', 'rightIsGhostButton', 'hasNavigationIndent'))`
|
|
43
38
|
position: fixed;
|
|
44
39
|
top: 0;
|
|
@@ -69,11 +64,9 @@ const BackButton = styled(Button)`
|
|
|
69
64
|
const Content = styled.div`
|
|
70
65
|
overflow: hidden; // For ellipsis
|
|
71
66
|
`;
|
|
72
|
-
|
|
73
67
|
const notHasSubtitleStyles = p => !p.hasSubtitle && css`
|
|
74
68
|
font-size: ${p.theme.sizes.large}em;
|
|
75
69
|
`;
|
|
76
|
-
|
|
77
70
|
const Title = styled('h1', omitEmotionProps('hasSubtitle'))`
|
|
78
71
|
margin: 0;
|
|
79
72
|
font-size: 1em;
|
|
@@ -104,10 +97,10 @@ const RightAddon = styled(Addon)`
|
|
|
104
97
|
grid-auto-flow: column;
|
|
105
98
|
grid-column-gap: 0.4em;
|
|
106
99
|
`;
|
|
100
|
+
|
|
107
101
|
/**
|
|
108
102
|
* The header of the page.
|
|
109
103
|
*/
|
|
110
|
-
|
|
111
104
|
const PageHeader = /*#__PURE__*/forwardRef(({
|
|
112
105
|
title,
|
|
113
106
|
subtitle,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["React","forwardRef","useContext","ellipsisStyles","omitEmotionProps","styled","clr","ThemeOverrider","m","Left","css","Button","LayoutContext","defaultLocale","getReducedPadding","p","isMinSm","i","padding","theme","horizontalPadding","buttonPaddingHorizontal","horizontalPaddingStyles","reducedPadding","reducedPaddingSm","leftIsGhostButton","rightIsGhostButton","min","sm","hasNavigationIndentStyles","hasNavigationIndent","md","navigationSideWidth","PageHeaderContainer","pageHeaderHeight","pageHeaderColorBg","pageHeaderColorText","pageHeaderColorBorder","BackButton","Content","div","notHasSubtitleStyles","hasSubtitle","sizes","large","Title","Subtitle","small","pageHeaderSubtitleColorText","Addon","LeftAddon","pageHeaderAddonPaddingHorizontal","RightAddon","PageHeader","title","subtitle","left","right","onBack","locale","rest","ref","hasNavigation","t","pageHeaderButtonPaddingHorizontal","backLabel","displayName"],"sources":["../../../src/PageHeader/index.tsx"],"sourcesContent":["import React, { forwardRef, useContext } from 'react';\nimport { ellipsisStyles } from '@os-design/styles';\nimport { omitEmotionProps } from '@os-design/utils';\nimport styled from '@emotion/styled';\nimport { clr, ThemeOverrider } from '@os-design/theming';\nimport { m } from '@os-design/media';\nimport { Left } from '@os-design/icons';\nimport { css } from '@emotion/react';\nimport Button from '../Button';\nimport LayoutContext from '../Layout/LayoutContext';\nimport defaultLocale, { PageHeaderLocale } from './utils/defaultLocale';\n\ntype JsxDivProps = Omit<JSX.IntrinsicElements['div'], 'ref'>;\nexport interface PageHeaderProps extends JsxDivProps {\n /**\n * The title of the page.\n * @default undefined\n */\n title: string;\n /**\n * The subtitle of the page.\n * @default undefined\n */\n subtitle?: string;\n /**\n * The component located on the left side.\n * @default undefined\n */\n left?: React.ReactNode;\n /**\n * Reduces the left padding of the page header.\n * @default false\n */\n leftIsGhostButton?: boolean;\n /**\n * The component located on the right side.\n * @default undefined\n */\n right?: React.ReactNode;\n /**\n * Reduces the right padding of the page header.\n * @default false\n */\n rightIsGhostButton?: boolean;\n /**\n * The back event handler. If passed, the page header has the back button.\n * @default undefined\n */\n onBack?: () => void;\n /**\n * The locale.\n * @default undefined\n */\n locale?: PageHeaderLocale;\n}\n\nconst getReducedPadding = (p, isMinSm: boolean) => {\n const i = isMinSm ? 1 : 0;\n let padding = p.theme.horizontalPadding[i] - p.theme.buttonPaddingHorizontal;\n if (padding < 0) padding = 0;\n return padding;\n};\n\nconst horizontalPaddingStyles = (p) => {\n const reducedPadding = getReducedPadding(p, false);\n const reducedPaddingSm = getReducedPadding(p, true);\n return css`\n padding-left: ${p.leftIsGhostButton\n ? reducedPadding\n : p.theme.horizontalPadding[0]}em;\n padding-right: ${p.rightIsGhostButton\n ? reducedPadding\n : p.theme.horizontalPadding[0]}em;\n\n ${m.min.sm} {\n padding-left: ${p.leftIsGhostButton\n ? reducedPaddingSm\n : p.theme.horizontalPadding[1]}em;\n padding-right: ${p.rightIsGhostButton\n ? reducedPaddingSm\n : p.theme.horizontalPadding[1]}em;\n }\n `;\n};\n\nconst hasNavigationIndentStyles = (p) =>\n p.hasNavigationIndent &&\n css`\n ${m.min.md} {\n left: ${p.theme.navigationSideWidth}em;\n }\n `;\n\ninterface ContainerProps {\n leftIsGhostButton?: boolean;\n rightIsGhostButton?: boolean;\n hasNavigationIndent?: boolean;\n}\nexport const PageHeaderContainer = styled(\n 'div',\n omitEmotionProps(\n 'leftIsGhostButton',\n 'rightIsGhostButton',\n 'hasNavigationIndent'\n )\n)<ContainerProps>`\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n\n height: ${(p) => p.theme.pageHeaderHeight[0]}em;\n ${m.min.md} {\n height: ${(p) => p.theme.pageHeaderHeight[1]}em;\n }\n\n display: flex;\n align-items: center;\n box-sizing: border-box;\n z-index: 101;\n\n background-color: ${(p) => clr(p.theme.pageHeaderColorBg)};\n color: ${(p) => clr(p.theme.pageHeaderColorText)};\n border-bottom: 1px solid ${(p) => clr(p.theme.pageHeaderColorBorder)};\n\n ${horizontalPaddingStyles};\n ${hasNavigationIndentStyles};\n`;\n\nconst BackButton = styled(Button)`\n margin-right: 0.2em;\n flex-shrink: 0;\n`;\n\nconst Content = styled.div`\n overflow: hidden; // For ellipsis\n`;\n\nconst notHasSubtitleStyles = (p) =>\n !p.hasSubtitle &&\n css`\n font-size: ${p.theme.sizes.large}em;\n `;\n\ninterface TitleProps {\n hasSubtitle: boolean;\n}\nconst Title = styled('h1', omitEmotionProps('hasSubtitle'))<TitleProps>`\n margin: 0;\n font-size: 1em;\n font-weight: 500;\n line-height: 1.2;\n ${notHasSubtitleStyles};\n ${ellipsisStyles};\n`;\n\nconst Subtitle = styled.div`\n font-size: ${(p) => p.theme.sizes.small}em;\n color: ${(p) => clr(p.theme.pageHeaderSubtitleColorText)};\n line-height: 1;\n margin-top: 0.2em;\n ${ellipsisStyles};\n`;\n\nconst Addon = styled.div`\n display: flex;\n align-items: center;\n`;\n\nconst LeftAddon = styled(Addon)`\n padding-right: ${(p) => p.theme.pageHeaderAddonPaddingHorizontal}em;\n`;\n\nconst RightAddon = styled(Addon)`\n padding-left: ${(p) => p.theme.pageHeaderAddonPaddingHorizontal}em;\n margin-left: auto;\n\n display: grid;\n grid-auto-flow: column;\n grid-column-gap: 0.4em;\n`;\n\n/**\n * The header of the page.\n */\nconst PageHeader = forwardRef<HTMLDivElement, PageHeaderProps>(\n (\n {\n title,\n subtitle,\n left,\n leftIsGhostButton = false,\n right,\n rightIsGhostButton = false,\n onBack,\n locale = defaultLocale,\n ...rest\n },\n ref\n ) => {\n const { hasNavigation } = useContext(LayoutContext);\n\n return (\n <ThemeOverrider\n overrides={(t) => ({\n buttonPaddingHorizontal: t.pageHeaderButtonPaddingHorizontal,\n })}\n >\n <PageHeaderContainer\n leftIsGhostButton={leftIsGhostButton || !!onBack}\n rightIsGhostButton={rightIsGhostButton}\n hasNavigationIndent={hasNavigation}\n {...rest}\n ref={ref}\n >\n {onBack && (\n <BackButton\n type='ghost'\n wide='never'\n onClick={onBack}\n aria-label={locale.backLabel}\n >\n <Left />\n </BackButton>\n )}\n\n {left && <LeftAddon>{left}</LeftAddon>}\n\n <Content>\n <Title hasSubtitle={!!subtitle}>{title}</Title>\n {subtitle && <Subtitle>{subtitle}</Subtitle>}\n </Content>\n\n {right && <RightAddon>{right}</RightAddon>}\n </PageHeaderContainer>\n </ThemeOverrider>\n );\n }\n);\n\nPageHeader.displayName = 'PageHeader';\n\nexport default PageHeader;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["React","forwardRef","useContext","ellipsisStyles","omitEmotionProps","styled","clr","ThemeOverrider","m","Left","css","Button","LayoutContext","defaultLocale","getReducedPadding","p","isMinSm","i","padding","theme","horizontalPadding","buttonPaddingHorizontal","horizontalPaddingStyles","reducedPadding","reducedPaddingSm","leftIsGhostButton","rightIsGhostButton","min","sm","hasNavigationIndentStyles","hasNavigationIndent","md","navigationSideWidth","PageHeaderContainer","pageHeaderHeight","pageHeaderColorBg","pageHeaderColorText","pageHeaderColorBorder","BackButton","Content","div","notHasSubtitleStyles","hasSubtitle","sizes","large","Title","Subtitle","small","pageHeaderSubtitleColorText","Addon","LeftAddon","pageHeaderAddonPaddingHorizontal","RightAddon","PageHeader","title","subtitle","left","right","onBack","locale","rest","ref","hasNavigation","t","pageHeaderButtonPaddingHorizontal","backLabel","displayName"],"sources":["../../../src/PageHeader/index.tsx"],"sourcesContent":["import React, { forwardRef, useContext } from 'react';\nimport { ellipsisStyles } from '@os-design/styles';\nimport { omitEmotionProps } from '@os-design/utils';\nimport styled from '@emotion/styled';\nimport { clr, ThemeOverrider } from '@os-design/theming';\nimport { m } from '@os-design/media';\nimport { Left } from '@os-design/icons';\nimport { css } from '@emotion/react';\nimport Button from '../Button';\nimport LayoutContext from '../Layout/LayoutContext';\nimport defaultLocale, { PageHeaderLocale } from './utils/defaultLocale';\n\ntype JsxDivProps = Omit<JSX.IntrinsicElements['div'], 'ref'>;\nexport interface PageHeaderProps extends JsxDivProps {\n /**\n * The title of the page.\n * @default undefined\n */\n title: string;\n /**\n * The subtitle of the page.\n * @default undefined\n */\n subtitle?: string;\n /**\n * The component located on the left side.\n * @default undefined\n */\n left?: React.ReactNode;\n /**\n * Reduces the left padding of the page header.\n * @default false\n */\n leftIsGhostButton?: boolean;\n /**\n * The component located on the right side.\n * @default undefined\n */\n right?: React.ReactNode;\n /**\n * Reduces the right padding of the page header.\n * @default false\n */\n rightIsGhostButton?: boolean;\n /**\n * The back event handler. If passed, the page header has the back button.\n * @default undefined\n */\n onBack?: () => void;\n /**\n * The locale.\n * @default undefined\n */\n locale?: PageHeaderLocale;\n}\n\nconst getReducedPadding = (p, isMinSm: boolean) => {\n const i = isMinSm ? 1 : 0;\n let padding = p.theme.horizontalPadding[i] - p.theme.buttonPaddingHorizontal;\n if (padding < 0) padding = 0;\n return padding;\n};\n\nconst horizontalPaddingStyles = (p) => {\n const reducedPadding = getReducedPadding(p, false);\n const reducedPaddingSm = getReducedPadding(p, true);\n return css`\n padding-left: ${p.leftIsGhostButton\n ? reducedPadding\n : p.theme.horizontalPadding[0]}em;\n padding-right: ${p.rightIsGhostButton\n ? reducedPadding\n : p.theme.horizontalPadding[0]}em;\n\n ${m.min.sm} {\n padding-left: ${p.leftIsGhostButton\n ? reducedPaddingSm\n : p.theme.horizontalPadding[1]}em;\n padding-right: ${p.rightIsGhostButton\n ? reducedPaddingSm\n : p.theme.horizontalPadding[1]}em;\n }\n `;\n};\n\nconst hasNavigationIndentStyles = (p) =>\n p.hasNavigationIndent &&\n css`\n ${m.min.md} {\n left: ${p.theme.navigationSideWidth}em;\n }\n `;\n\ninterface ContainerProps {\n leftIsGhostButton?: boolean;\n rightIsGhostButton?: boolean;\n hasNavigationIndent?: boolean;\n}\nexport const PageHeaderContainer = styled(\n 'div',\n omitEmotionProps(\n 'leftIsGhostButton',\n 'rightIsGhostButton',\n 'hasNavigationIndent'\n )\n)<ContainerProps>`\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n\n height: ${(p) => p.theme.pageHeaderHeight[0]}em;\n ${m.min.md} {\n height: ${(p) => p.theme.pageHeaderHeight[1]}em;\n }\n\n display: flex;\n align-items: center;\n box-sizing: border-box;\n z-index: 101;\n\n background-color: ${(p) => clr(p.theme.pageHeaderColorBg)};\n color: ${(p) => clr(p.theme.pageHeaderColorText)};\n border-bottom: 1px solid ${(p) => clr(p.theme.pageHeaderColorBorder)};\n\n ${horizontalPaddingStyles};\n ${hasNavigationIndentStyles};\n`;\n\nconst BackButton = styled(Button)`\n margin-right: 0.2em;\n flex-shrink: 0;\n`;\n\nconst Content = styled.div`\n overflow: hidden; // For ellipsis\n`;\n\nconst notHasSubtitleStyles = (p) =>\n !p.hasSubtitle &&\n css`\n font-size: ${p.theme.sizes.large}em;\n `;\n\ninterface TitleProps {\n hasSubtitle: boolean;\n}\nconst Title = styled('h1', omitEmotionProps('hasSubtitle'))<TitleProps>`\n margin: 0;\n font-size: 1em;\n font-weight: 500;\n line-height: 1.2;\n ${notHasSubtitleStyles};\n ${ellipsisStyles};\n`;\n\nconst Subtitle = styled.div`\n font-size: ${(p) => p.theme.sizes.small}em;\n color: ${(p) => clr(p.theme.pageHeaderSubtitleColorText)};\n line-height: 1;\n margin-top: 0.2em;\n ${ellipsisStyles};\n`;\n\nconst Addon = styled.div`\n display: flex;\n align-items: center;\n`;\n\nconst LeftAddon = styled(Addon)`\n padding-right: ${(p) => p.theme.pageHeaderAddonPaddingHorizontal}em;\n`;\n\nconst RightAddon = styled(Addon)`\n padding-left: ${(p) => p.theme.pageHeaderAddonPaddingHorizontal}em;\n margin-left: auto;\n\n display: grid;\n grid-auto-flow: column;\n grid-column-gap: 0.4em;\n`;\n\n/**\n * The header of the page.\n */\nconst PageHeader = forwardRef<HTMLDivElement, PageHeaderProps>(\n (\n {\n title,\n subtitle,\n left,\n leftIsGhostButton = false,\n right,\n rightIsGhostButton = false,\n onBack,\n locale = defaultLocale,\n ...rest\n },\n ref\n ) => {\n const { hasNavigation } = useContext(LayoutContext);\n\n return (\n <ThemeOverrider\n overrides={(t) => ({\n buttonPaddingHorizontal: t.pageHeaderButtonPaddingHorizontal,\n })}\n >\n <PageHeaderContainer\n leftIsGhostButton={leftIsGhostButton || !!onBack}\n rightIsGhostButton={rightIsGhostButton}\n hasNavigationIndent={hasNavigation}\n {...rest}\n ref={ref}\n >\n {onBack && (\n <BackButton\n type='ghost'\n wide='never'\n onClick={onBack}\n aria-label={locale.backLabel}\n >\n <Left />\n </BackButton>\n )}\n\n {left && <LeftAddon>{left}</LeftAddon>}\n\n <Content>\n <Title hasSubtitle={!!subtitle}>{title}</Title>\n {subtitle && <Subtitle>{subtitle}</Subtitle>}\n </Content>\n\n {right && <RightAddon>{right}</RightAddon>}\n </PageHeaderContainer>\n </ThemeOverrider>\n );\n }\n);\n\nPageHeader.displayName = 'PageHeader';\n\nexport default PageHeader;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaultLocale.js","names":["defaultLocale","backLabel"],"sources":["../../../../src/PageHeader/utils/defaultLocale.ts"],"sourcesContent":["export interface PageHeaderLocale {\n backLabel: string;\n}\n\nconst defaultLocale: PageHeaderLocale = {\n backLabel: 'Back',\n};\n\nexport default defaultLocale;\n"],"mappings":"AAIA,MAAMA,aAA+B,GAAG;EACtCC,SAAS,EAAE;
|
|
1
|
+
{"version":3,"file":"defaultLocale.js","names":["defaultLocale","backLabel"],"sources":["../../../../src/PageHeader/utils/defaultLocale.ts"],"sourcesContent":["export interface PageHeaderLocale {\n backLabel: string;\n}\n\nconst defaultLocale: PageHeaderLocale = {\n backLabel: 'Back',\n};\n\nexport default defaultLocale;\n"],"mappings":"AAIA,MAAMA,aAA+B,GAAG;EACtCC,SAAS,EAAE;AACb,CAAC;AAED,eAAeD,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, { forwardRef, useContext, useState } from 'react';
|
|
4
3
|
import { Close, Search } from '@os-design/icons';
|
|
5
4
|
import styled from '@emotion/styled';
|
|
@@ -19,15 +18,12 @@ const fadeOut = keyframes`
|
|
|
19
18
|
from { transform: translateY(0); }
|
|
20
19
|
to { transform: translateY(-100%); }
|
|
21
20
|
`;
|
|
22
|
-
|
|
23
21
|
const visibleStyles = p => p.visible && css`
|
|
24
22
|
animation: ${fadeIn} ${p.theme.transitionDelay}ms forwards;
|
|
25
23
|
`;
|
|
26
|
-
|
|
27
24
|
const invisibleStyles = p => !p.visible && css`
|
|
28
25
|
animation: ${fadeOut} ${p.theme.transitionDelay}ms forwards;
|
|
29
26
|
`;
|
|
30
|
-
|
|
31
27
|
const Container = styled(PageHeaderContainer, omitEmotionProps('visible'))`
|
|
32
28
|
z-index: 102; // After PageHeaderContainer
|
|
33
29
|
${visibleStyles};
|
|
@@ -36,10 +32,10 @@ const Container = styled(PageHeaderContainer, omitEmotionProps('visible'))`
|
|
|
36
32
|
const CloseButton = styled(Button)`
|
|
37
33
|
margin-left: ${p => p.theme.pageHeaderAddonPaddingHorizontal}em;
|
|
38
34
|
`;
|
|
35
|
+
|
|
39
36
|
/**
|
|
40
37
|
* The search input for the page header.
|
|
41
38
|
*/
|
|
42
|
-
|
|
43
39
|
const PageHeaderInputSearch = /*#__PURE__*/forwardRef(({
|
|
44
40
|
locale = defaultLocale,
|
|
45
41
|
onClose = () => {},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["React","forwardRef","useContext","useState","Close","Search","styled","useClosable","omitEmotionProps","ThemeOverrider","useTheme","css","keyframes","InputSearch","Button","PageHeaderContainer","LayoutContext","defaultLocale","fadeIn","fadeOut","visibleStyles","p","visible","theme","transitionDelay","invisibleStyles","Container","CloseButton","pageHeaderAddonPaddingHorizontal","PageHeaderInputSearch","locale","onClose","rest","ref","setVisible","mounted","hasNavigation","searchLabel","t","buttonPaddingHorizontal","pageHeaderButtonPaddingHorizontal","closeLabel","displayName"],"sources":["../../../src/PageHeaderInputSearch/index.tsx"],"sourcesContent":["import React, { forwardRef, useContext, useState } from 'react';\nimport { Close, Search } from '@os-design/icons';\nimport styled from '@emotion/styled';\nimport { useClosable, omitEmotionProps } from '@os-design/utils';\nimport { ThemeOverrider, useTheme } from '@os-design/theming';\nimport { css, keyframes } from '@emotion/react';\nimport InputSearch, { InputSearchProps } from '../InputSearch';\nimport Button from '../Button';\nimport { PageHeaderContainer } from '../PageHeader';\nimport LayoutContext from '../Layout/LayoutContext';\nimport defaultLocale, {\n PageHeaderInputSearchLocale,\n} from './utils/defaultLocale';\n\nexport interface PageHeaderInputSearchProps\n extends Omit<InputSearchProps, 'size' | 'locale'> {\n /**\n * The locale.\n * @default undefined\n */\n locale?: PageHeaderInputSearchLocale;\n /**\n * The close event handler.\n * @default undefined\n */\n onClose?: () => void;\n}\n\nconst fadeIn = keyframes`\n from { transform: translateY(-100%); }\n to { transform: translateY(0); }\n`;\n\nconst fadeOut = keyframes`\n from { transform: translateY(0); }\n to { transform: translateY(-100%); }\n`;\n\nconst visibleStyles = (p) =>\n p.visible &&\n css`\n animation: ${fadeIn} ${p.theme.transitionDelay}ms forwards;\n `;\n\nconst invisibleStyles = (p) =>\n !p.visible &&\n css`\n animation: ${fadeOut} ${p.theme.transitionDelay}ms forwards;\n `;\n\ninterface ContainerProps {\n visible: boolean;\n}\nconst Container = styled(\n PageHeaderContainer,\n omitEmotionProps('visible')\n)<ContainerProps>`\n z-index: 102; // After PageHeaderContainer\n ${visibleStyles};\n ${invisibleStyles};\n`;\n\nconst CloseButton = styled(Button)`\n margin-left: ${(p) => p.theme.pageHeaderAddonPaddingHorizontal}em;\n`;\n\n/**\n * The search input for the page header.\n */\nconst PageHeaderInputSearch = forwardRef<\n HTMLInputElement,\n PageHeaderInputSearchProps\n>(({ locale = defaultLocale, onClose = () => {}, ...rest }, ref) => {\n const [visible, setVisible] = useState(false);\n const { theme } = useTheme();\n const mounted = useClosable(visible, theme.transitionDelay);\n const { hasNavigation } = useContext(LayoutContext);\n\n return (\n <>\n <Button\n type='ghost'\n wide='never'\n onClick={() => setVisible(true)}\n aria-label={locale.searchLabel}\n >\n <Search />\n </Button>\n\n {mounted && (\n <ThemeOverrider\n overrides={(t) => ({\n buttonPaddingHorizontal: t.pageHeaderButtonPaddingHorizontal,\n })}\n >\n <Container\n visible={visible}\n rightIsGhostButton\n hasNavigationIndent={hasNavigation}\n >\n <InputSearch autoFocus locale={locale} {...rest} ref={ref} />\n <CloseButton\n type='ghost'\n wide='never'\n onClick={() => {\n setVisible(false);\n onClose();\n }}\n aria-label={locale.closeLabel}\n >\n <Close />\n </CloseButton>\n </Container>\n </ThemeOverrider>\n )}\n </>\n );\n});\n\nPageHeaderInputSearch.displayName = 'PageHeaderInputSearch';\n\nexport default PageHeaderInputSearch;\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","names":["React","forwardRef","useContext","useState","Close","Search","styled","useClosable","omitEmotionProps","ThemeOverrider","useTheme","css","keyframes","InputSearch","Button","PageHeaderContainer","LayoutContext","defaultLocale","fadeIn","fadeOut","visibleStyles","p","visible","theme","transitionDelay","invisibleStyles","Container","CloseButton","pageHeaderAddonPaddingHorizontal","PageHeaderInputSearch","locale","onClose","rest","ref","setVisible","mounted","hasNavigation","searchLabel","t","buttonPaddingHorizontal","pageHeaderButtonPaddingHorizontal","closeLabel","displayName"],"sources":["../../../src/PageHeaderInputSearch/index.tsx"],"sourcesContent":["import React, { forwardRef, useContext, useState } from 'react';\nimport { Close, Search } from '@os-design/icons';\nimport styled from '@emotion/styled';\nimport { useClosable, omitEmotionProps } from '@os-design/utils';\nimport { ThemeOverrider, useTheme } from '@os-design/theming';\nimport { css, keyframes } from '@emotion/react';\nimport InputSearch, { InputSearchProps } from '../InputSearch';\nimport Button from '../Button';\nimport { PageHeaderContainer } from '../PageHeader';\nimport LayoutContext from '../Layout/LayoutContext';\nimport defaultLocale, {\n PageHeaderInputSearchLocale,\n} from './utils/defaultLocale';\n\nexport interface PageHeaderInputSearchProps\n extends Omit<InputSearchProps, 'size' | 'locale'> {\n /**\n * The locale.\n * @default undefined\n */\n locale?: PageHeaderInputSearchLocale;\n /**\n * The close event handler.\n * @default undefined\n */\n onClose?: () => void;\n}\n\nconst fadeIn = keyframes`\n from { transform: translateY(-100%); }\n to { transform: translateY(0); }\n`;\n\nconst fadeOut = keyframes`\n from { transform: translateY(0); }\n to { transform: translateY(-100%); }\n`;\n\nconst visibleStyles = (p) =>\n p.visible &&\n css`\n animation: ${fadeIn} ${p.theme.transitionDelay}ms forwards;\n `;\n\nconst invisibleStyles = (p) =>\n !p.visible &&\n css`\n animation: ${fadeOut} ${p.theme.transitionDelay}ms forwards;\n `;\n\ninterface ContainerProps {\n visible: boolean;\n}\nconst Container = styled(\n PageHeaderContainer,\n omitEmotionProps('visible')\n)<ContainerProps>`\n z-index: 102; // After PageHeaderContainer\n ${visibleStyles};\n ${invisibleStyles};\n`;\n\nconst CloseButton = styled(Button)`\n margin-left: ${(p) => p.theme.pageHeaderAddonPaddingHorizontal}em;\n`;\n\n/**\n * The search input for the page header.\n */\nconst PageHeaderInputSearch = forwardRef<\n HTMLInputElement,\n PageHeaderInputSearchProps\n>(({ locale = defaultLocale, onClose = () => {}, ...rest }, ref) => {\n const [visible, setVisible] = useState(false);\n const { theme } = useTheme();\n const mounted = useClosable(visible, theme.transitionDelay);\n const { hasNavigation } = useContext(LayoutContext);\n\n return (\n <>\n <Button\n type='ghost'\n wide='never'\n onClick={() => setVisible(true)}\n aria-label={locale.searchLabel}\n >\n <Search />\n </Button>\n\n {mounted && (\n <ThemeOverrider\n overrides={(t) => ({\n buttonPaddingHorizontal: t.pageHeaderButtonPaddingHorizontal,\n })}\n >\n <Container\n visible={visible}\n rightIsGhostButton\n hasNavigationIndent={hasNavigation}\n >\n <InputSearch autoFocus locale={locale} {...rest} ref={ref} />\n <CloseButton\n type='ghost'\n wide='never'\n onClick={() => {\n setVisible(false);\n onClose();\n }}\n aria-label={locale.closeLabel}\n >\n <Close />\n </CloseButton>\n </Container>\n </ThemeOverrider>\n )}\n </>\n );\n});\n\nPageHeaderInputSearch.displayName = 'PageHeaderInputSearch';\n\nexport default PageHeaderInputSearch;\n"],"mappings":";AAAA,OAAOA,KAAK,IAAIC,UAAU,EAAEC,UAAU,EAAEC,QAAQ,QAAQ,OAAO;AAC/D,SAASC,KAAK,EAAEC,MAAM,QAAQ,kBAAkB;AAChD,OAAOC,MAAM,MAAM,iBAAiB;AACpC,SAASC,WAAW,EAAEC,gBAAgB,QAAQ,kBAAkB;AAChE,SAASC,cAAc,EAAEC,QAAQ,QAAQ,oBAAoB;AAC7D,SAASC,GAAG,EAAEC,SAAS,QAAQ,gBAAgB;AAC/C,OAAOC,WAAW,MAA4B,gBAAgB;AAC9D,OAAOC,MAAM,MAAM,WAAW;AAC9B,SAASC,mBAAmB,QAAQ,eAAe;AACnD,OAAOC,aAAa,MAAM,yBAAyB;AACnD,OAAOC,aAAa,MAEb,uBAAuB;AAgB9B,MAAMC,MAAM,GAAGN,SAAU;AACzB;AACA;AACA,CAAC;AAED,MAAMO,OAAO,GAAGP,SAAU;AAC1B;AACA;AACA,CAAC;AAED,MAAMQ,aAAa,GAAIC,CAAC,IACtBA,CAAC,CAACC,OAAO,IACTX,GAAI;AACN,iBAAiBO,MAAO,IAAGG,CAAC,CAACE,KAAK,CAACC,eAAgB;AACnD,GAAG;AAEH,MAAMC,eAAe,GAAIJ,CAAC,IACxB,CAACA,CAAC,CAACC,OAAO,IACVX,GAAI;AACN,iBAAiBQ,OAAQ,IAAGE,CAAC,CAACE,KAAK,CAACC,eAAgB;AACpD,GAAG;AAKH,MAAME,SAAS,GAAGpB,MAAM,CACtBS,mBAAmB,EACnBP,gBAAgB,CAAC,SAAS,CAAC,CACX;AAClB;AACA,IAAIY,aAAc;AAClB,IAAIK,eAAgB;AACpB,CAAC;AAED,MAAME,WAAW,GAAGrB,MAAM,CAACQ,MAAM,CAAE;AACnC,iBAAkBO,CAAC,IAAKA,CAAC,CAACE,KAAK,CAACK,gCAAiC;AACjE,CAAC;;AAED;AACA;AACA;AACA,MAAMC,qBAAqB,gBAAG5B,UAAU,CAGtC,CAAC;EAAE6B,MAAM,GAAGb,aAAa;EAAEc,OAAO,GAAG,MAAM,CAAC,CAAC;EAAE,GAAGC;AAAK,CAAC,EAAEC,GAAG,KAAK;EAClE,MAAM,CAACX,OAAO,EAAEY,UAAU,CAAC,GAAG/B,QAAQ,CAAC,KAAK,CAAC;EAC7C,MAAM;IAAEoB;EAAM,CAAC,GAAGb,QAAQ,EAAE;EAC5B,MAAMyB,OAAO,GAAG5B,WAAW,CAACe,OAAO,EAAEC,KAAK,CAACC,eAAe,CAAC;EAC3D,MAAM;IAAEY;EAAc,CAAC,GAAGlC,UAAU,CAACc,aAAa,CAAC;EAEnD,oBACE,uDACE,oBAAC,MAAM;IACL,IAAI,EAAC,OAAO;IACZ,IAAI,EAAC,OAAO;IACZ,OAAO,EAAE,MAAMkB,UAAU,CAAC,IAAI,CAAE;IAChC,cAAYJ,MAAM,CAACO;EAAY,gBAE/B,oBAAC,MAAM,OAAG,CACH,EAERF,OAAO,iBACN,oBAAC,cAAc;IACb,SAAS,EAAGG,CAAC,KAAM;MACjBC,uBAAuB,EAAED,CAAC,CAACE;IAC7B,CAAC;EAAE,gBAEH,oBAAC,SAAS;IACR,OAAO,EAAElB,OAAQ;IACjB,kBAAkB;IAClB,mBAAmB,EAAEc;EAAc,gBAEnC,oBAAC,WAAW;IAAC,SAAS;IAAC,MAAM,EAAEN;EAAO,GAAKE,IAAI;IAAE,GAAG,EAAEC;EAAI,GAAG,eAC7D,oBAAC,WAAW;IACV,IAAI,EAAC,OAAO;IACZ,IAAI,EAAC,OAAO;IACZ,OAAO,EAAE,MAAM;MACbC,UAAU,CAAC,KAAK,CAAC;MACjBH,OAAO,EAAE;IACX,CAAE;IACF,cAAYD,MAAM,CAACW;EAAW,gBAE9B,oBAAC,KAAK,OAAG,CACG,CACJ,CAEf,CACA;AAEP,CAAC,CAAC;AAEFZ,qBAAqB,CAACa,WAAW,GAAG,uBAAuB;AAE3D,eAAeb,qBAAqB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaultLocale.js","names":["inputSearchDefaultLocale","defaultLocale","searchLabel","closeLabel"],"sources":["../../../../src/PageHeaderInputSearch/utils/defaultLocale.ts"],"sourcesContent":["import inputSearchDefaultLocale, {\n InputSearchLocale,\n} from '../../InputSearch/utils/defaultLocale';\n\nexport interface PageHeaderInputSearchLocale extends InputSearchLocale {\n searchLabel: string;\n closeLabel: string;\n}\n\nconst defaultLocale: PageHeaderInputSearchLocale = {\n ...inputSearchDefaultLocale,\n searchLabel: 'Search',\n closeLabel: 'Close search',\n};\n\nexport default defaultLocale;\n"],"mappings":"AAAA,OAAOA,
|
|
1
|
+
{"version":3,"file":"defaultLocale.js","names":["inputSearchDefaultLocale","defaultLocale","searchLabel","closeLabel"],"sources":["../../../../src/PageHeaderInputSearch/utils/defaultLocale.ts"],"sourcesContent":["import inputSearchDefaultLocale, {\n InputSearchLocale,\n} from '../../InputSearch/utils/defaultLocale';\n\nexport interface PageHeaderInputSearchLocale extends InputSearchLocale {\n searchLabel: string;\n closeLabel: string;\n}\n\nconst defaultLocale: PageHeaderInputSearchLocale = {\n ...inputSearchDefaultLocale,\n searchLabel: 'Search',\n closeLabel: 'Close search',\n};\n\nexport default defaultLocale;\n"],"mappings":"AAAA,OAAOA,wBAAwB,MAExB,uCAAuC;AAO9C,MAAMC,aAA0C,GAAG;EACjD,GAAGD,wBAAwB;EAC3BE,WAAW,EAAE,QAAQ;EACrBC,UAAU,EAAE;AACd,CAAC;AAED,eAAeF,aAAa"}
|
|
@@ -1,10 +1,8 @@
|
|
|
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, useContext } from 'react';
|
|
4
3
|
import Skeleton from '../Skeleton';
|
|
5
4
|
import { PageHeaderContainer } from '../PageHeader';
|
|
6
5
|
import LayoutContext from '../Layout/LayoutContext';
|
|
7
|
-
|
|
8
6
|
/**
|
|
9
7
|
* Provides a page header placeholder while a user waits for
|
|
10
8
|
* the content to load.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["React","forwardRef","useContext","Skeleton","PageHeaderContainer","LayoutContext","PageHeaderSkeleton","width","rest","ref","hasNavigation","displayName"],"sources":["../../../src/PageHeaderSkeleton/index.tsx"],"sourcesContent":["import React, { forwardRef, useContext } from 'react';\nimport { WithSize } from '@os-design/styles';\nimport Skeleton, { SkeletonProps } from '../Skeleton';\nimport { PageHeaderContainer } from '../PageHeader';\nimport LayoutContext from '../Layout/LayoutContext';\n\nexport type PageHeaderSkeletonProps = SkeletonProps & WithSize;\n\n/**\n * Provides a page header placeholder while a user waits for\n * the content to load.\n */\nconst PageHeaderSkeleton = forwardRef<HTMLDivElement, PageHeaderSkeletonProps>(\n ({ width = '30%', ...rest }, ref) => {\n const { hasNavigation } = useContext(LayoutContext);\n\n return (\n <PageHeaderContainer\n hasNavigationIndent={hasNavigation}\n {...rest}\n ref={ref}\n >\n <Skeleton width={width} />\n </PageHeaderContainer>\n );\n }\n);\n\nPageHeaderSkeleton.displayName = 'PageHeaderSkeleton';\n\nexport default PageHeaderSkeleton;\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","names":["React","forwardRef","useContext","Skeleton","PageHeaderContainer","LayoutContext","PageHeaderSkeleton","width","rest","ref","hasNavigation","displayName"],"sources":["../../../src/PageHeaderSkeleton/index.tsx"],"sourcesContent":["import React, { forwardRef, useContext } from 'react';\nimport { WithSize } from '@os-design/styles';\nimport Skeleton, { SkeletonProps } from '../Skeleton';\nimport { PageHeaderContainer } from '../PageHeader';\nimport LayoutContext from '../Layout/LayoutContext';\n\nexport type PageHeaderSkeletonProps = SkeletonProps & WithSize;\n\n/**\n * Provides a page header placeholder while a user waits for\n * the content to load.\n */\nconst PageHeaderSkeleton = forwardRef<HTMLDivElement, PageHeaderSkeletonProps>(\n ({ width = '30%', ...rest }, ref) => {\n const { hasNavigation } = useContext(LayoutContext);\n\n return (\n <PageHeaderContainer\n hasNavigationIndent={hasNavigation}\n {...rest}\n ref={ref}\n >\n <Skeleton width={width} />\n </PageHeaderContainer>\n );\n }\n);\n\nPageHeaderSkeleton.displayName = 'PageHeaderSkeleton';\n\nexport default PageHeaderSkeleton;\n"],"mappings":";AAAA,OAAOA,KAAK,IAAIC,UAAU,EAAEC,UAAU,QAAQ,OAAO;AAErD,OAAOC,QAAQ,MAAyB,aAAa;AACrD,SAASC,mBAAmB,QAAQ,eAAe;AACnD,OAAOC,aAAa,MAAM,yBAAyB;AAInD;AACA;AACA;AACA;AACA,MAAMC,kBAAkB,gBAAGL,UAAU,CACnC,CAAC;EAAEM,KAAK,GAAG,KAAK;EAAE,GAAGC;AAAK,CAAC,EAAEC,GAAG,KAAK;EACnC,MAAM;IAAEC;EAAc,CAAC,GAAGR,UAAU,CAACG,aAAa,CAAC;EAEnD,oBACE,oBAAC,mBAAmB;IAClB,mBAAmB,EAAEK;EAAc,GAC/BF,IAAI;IACR,GAAG,EAAEC;EAAI,iBAET,oBAAC,QAAQ;IAAC,KAAK,EAAEF;EAAM,EAAG,CACN;AAE1B,CAAC,CACF;AAEDD,kBAAkB,CAACK,WAAW,GAAG,oBAAoB;AAErD,eAAeL,kBAAkB"}
|
|
@@ -1,15 +1,12 @@
|
|
|
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 React, { forwardRef } from 'react';
|
|
5
4
|
import { omitEmotionProps } from '@os-design/utils';
|
|
6
5
|
import { css } from '@emotion/react';
|
|
7
6
|
import Skeleton from '../Skeleton';
|
|
8
|
-
|
|
9
7
|
const hasMarginStyles = p => p.hasMargin && css`
|
|
10
8
|
margin-bottom: ${p.theme.paragraphMarginBottom + (p.theme.lineHeight - 1)}em;
|
|
11
9
|
`;
|
|
12
|
-
|
|
13
10
|
const Container = styled('div', omitEmotionProps('hasMargin'))`
|
|
14
11
|
& > *:not(:last-of-type) {
|
|
15
12
|
margin-bottom: ${p => p.theme.lineHeight - 1}em;
|
|
@@ -17,10 +14,10 @@ const Container = styled('div', omitEmotionProps('hasMargin'))`
|
|
|
17
14
|
${hasMarginStyles};
|
|
18
15
|
`;
|
|
19
16
|
let key = 0;
|
|
17
|
+
|
|
20
18
|
/**
|
|
21
19
|
* Provides a paragraph placeholder while a user waits for the content to load.
|
|
22
20
|
*/
|
|
23
|
-
|
|
24
21
|
const ParagraphSkeleton = /*#__PURE__*/forwardRef(({
|
|
25
22
|
rows = 4,
|
|
26
23
|
width = '70%',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["styled","React","forwardRef","omitEmotionProps","css","Skeleton","hasMarginStyles","p","hasMargin","theme","paragraphMarginBottom","lineHeight","Container","key","ParagraphSkeleton","rows","width","rest","ref","Array","fill","map","_","index","displayName"],"sources":["../../../src/ParagraphSkeleton/index.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport React, { forwardRef } from 'react';\nimport { omitEmotionProps } from '@os-design/utils';\nimport { css } from '@emotion/react';\nimport Skeleton, { SkeletonProps } from '../Skeleton';\n\nexport interface ParagraphSkeletonProps extends SkeletonProps {\n /**\n * The number of rows.\n * @default 4\n */\n rows?: number;\n /**\n * The width of the last row.\n * @default 70%\n */\n width?: string;\n /**\n * Whether the paragraph has a bottom margin.\n * @default false\n */\n hasMargin?: boolean;\n}\n\nconst hasMarginStyles = (p) =>\n p.hasMargin &&\n css`\n margin-bottom: ${p.theme.paragraphMarginBottom +\n (p.theme.lineHeight - 1)}em;\n `;\n\ntype ContainerProps = Pick<ParagraphSkeletonProps, 'hasMargin'>;\nconst Container = styled('div', omitEmotionProps('hasMargin'))<ContainerProps>`\n & > *:not(:last-of-type) {\n margin-bottom: ${(p) => p.theme.lineHeight - 1}em;\n }\n ${hasMarginStyles};\n`;\n\nlet key = 0;\n\n/**\n * Provides a paragraph placeholder while a user waits for the content to load.\n */\nconst ParagraphSkeleton = forwardRef<HTMLDivElement, ParagraphSkeletonProps>(\n ({ rows = 4, width = '70%', hasMargin = false, ...rest }, ref) => (\n <Container hasMargin={hasMargin} {...rest} ref={ref}>\n {Array(rows)\n .fill({})\n .map((_, index) => {\n key += 1;\n return (\n <Skeleton key={key} width={index < rows - 1 ? '100%' : width} />\n );\n })}\n </Container>\n )\n);\n\nParagraphSkeleton.displayName = 'ParagraphSkeleton';\n\nexport default ParagraphSkeleton;\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","names":["styled","React","forwardRef","omitEmotionProps","css","Skeleton","hasMarginStyles","p","hasMargin","theme","paragraphMarginBottom","lineHeight","Container","key","ParagraphSkeleton","rows","width","rest","ref","Array","fill","map","_","index","displayName"],"sources":["../../../src/ParagraphSkeleton/index.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport React, { forwardRef } from 'react';\nimport { omitEmotionProps } from '@os-design/utils';\nimport { css } from '@emotion/react';\nimport Skeleton, { SkeletonProps } from '../Skeleton';\n\nexport interface ParagraphSkeletonProps extends SkeletonProps {\n /**\n * The number of rows.\n * @default 4\n */\n rows?: number;\n /**\n * The width of the last row.\n * @default 70%\n */\n width?: string;\n /**\n * Whether the paragraph has a bottom margin.\n * @default false\n */\n hasMargin?: boolean;\n}\n\nconst hasMarginStyles = (p) =>\n p.hasMargin &&\n css`\n margin-bottom: ${p.theme.paragraphMarginBottom +\n (p.theme.lineHeight - 1)}em;\n `;\n\ntype ContainerProps = Pick<ParagraphSkeletonProps, 'hasMargin'>;\nconst Container = styled('div', omitEmotionProps('hasMargin'))<ContainerProps>`\n & > *:not(:last-of-type) {\n margin-bottom: ${(p) => p.theme.lineHeight - 1}em;\n }\n ${hasMarginStyles};\n`;\n\nlet key = 0;\n\n/**\n * Provides a paragraph placeholder while a user waits for the content to load.\n */\nconst ParagraphSkeleton = forwardRef<HTMLDivElement, ParagraphSkeletonProps>(\n ({ rows = 4, width = '70%', hasMargin = false, ...rest }, ref) => (\n <Container hasMargin={hasMargin} {...rest} ref={ref}>\n {Array(rows)\n .fill({})\n .map((_, index) => {\n key += 1;\n return (\n <Skeleton key={key} width={index < rows - 1 ? '100%' : width} />\n );\n })}\n </Container>\n )\n);\n\nParagraphSkeleton.displayName = 'ParagraphSkeleton';\n\nexport default ParagraphSkeleton;\n"],"mappings":";AAAA,OAAOA,MAAM,MAAM,iBAAiB;AACpC,OAAOC,KAAK,IAAIC,UAAU,QAAQ,OAAO;AACzC,SAASC,gBAAgB,QAAQ,kBAAkB;AACnD,SAASC,GAAG,QAAQ,gBAAgB;AACpC,OAAOC,QAAQ,MAAyB,aAAa;AAoBrD,MAAMC,eAAe,GAAIC,CAAC,IACxBA,CAAC,CAACC,SAAS,IACXJ,GAAI;AACN,qBAAqBG,CAAC,CAACE,KAAK,CAACC,qBAAqB,IAC7CH,CAAC,CAACE,KAAK,CAACE,UAAU,GAAG,CAAC,CAAE;AAC7B,GAAG;AAGH,MAAMC,SAAS,GAAGZ,MAAM,CAAC,KAAK,EAAEG,gBAAgB,CAAC,WAAW,CAAC,CAAkB;AAC/E;AACA,qBAAsBI,CAAC,IAAKA,CAAC,CAACE,KAAK,CAACE,UAAU,GAAG,CAAE;AACnD;AACA,IAAIL,eAAgB;AACpB,CAAC;AAED,IAAIO,GAAG,GAAG,CAAC;;AAEX;AACA;AACA;AACA,MAAMC,iBAAiB,gBAAGZ,UAAU,CAClC,CAAC;EAAEa,IAAI,GAAG,CAAC;EAAEC,KAAK,GAAG,KAAK;EAAER,SAAS,GAAG,KAAK;EAAE,GAAGS;AAAK,CAAC,EAAEC,GAAG,kBAC3D,oBAAC,SAAS;EAAC,SAAS,EAAEV;AAAU,GAAKS,IAAI;EAAE,GAAG,EAAEC;AAAI,IACjDC,KAAK,CAACJ,IAAI,CAAC,CACTK,IAAI,CAAC,CAAC,CAAC,CAAC,CACRC,GAAG,CAAC,CAACC,CAAC,EAAEC,KAAK,KAAK;EACjBV,GAAG,IAAI,CAAC;EACR,oBACE,oBAAC,QAAQ;IAAC,GAAG,EAAEA,GAAI;IAAC,KAAK,EAAEU,KAAK,GAAGR,IAAI,GAAG,CAAC,GAAG,MAAM,GAAGC;EAAM,EAAG;AAEpE,CAAC,CAAC,CAEP,CACF;AAEDF,iBAAiB,CAACU,WAAW,GAAG,mBAAmB;AAEnD,eAAeV,iBAAiB"}
|
|
@@ -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, useEffect, useMemo, useState } from 'react';
|
|
4
3
|
import { sizeStyles } from '@os-design/styles';
|
|
5
4
|
import { omitEmotionProps, useClickOutside, useClosable, useEvent, useForwardedRef, useResizeObserver, useBrowserLayoutEffect } from '@os-design/utils';
|
|
@@ -16,15 +15,12 @@ const fadeOut = keyframes`
|
|
|
16
15
|
from { opacity: 1; }
|
|
17
16
|
to { opacity: 0; }
|
|
18
17
|
`;
|
|
19
|
-
|
|
20
18
|
const visibleStyles = p => p.visible && css`
|
|
21
19
|
animation: ${fadeIn} ${p.theme.transitionDelay}ms forwards;
|
|
22
20
|
`;
|
|
23
|
-
|
|
24
21
|
const invisibleStyles = p => !p.visible && css`
|
|
25
22
|
animation: ${fadeOut} ${p.theme.transitionDelay}ms forwards;
|
|
26
23
|
`;
|
|
27
|
-
|
|
28
24
|
const Container = styled('div', omitEmotionProps('top', 'left', 'visible', 'size'))`
|
|
29
25
|
position: absolute;
|
|
30
26
|
top: ${p => p.top}px;
|
|
@@ -47,10 +43,10 @@ const emptyRect = {
|
|
|
47
43
|
width: 0,
|
|
48
44
|
height: 0
|
|
49
45
|
};
|
|
46
|
+
|
|
50
47
|
/**
|
|
51
48
|
* The pop-up window located next to the element.
|
|
52
49
|
*/
|
|
53
|
-
|
|
54
50
|
const Popover = /*#__PURE__*/forwardRef(({
|
|
55
51
|
trigger,
|
|
56
52
|
placement = 'top',
|
|
@@ -68,8 +64,9 @@ const Popover = /*#__PURE__*/forwardRef(({
|
|
|
68
64
|
const {
|
|
69
65
|
theme
|
|
70
66
|
} = useTheme();
|
|
71
|
-
const mounted = useClosable(visible, theme.transitionDelay);
|
|
67
|
+
const mounted = useClosable(visible, theme.transitionDelay);
|
|
72
68
|
|
|
69
|
+
// Init the rect of the popover and update it when the popover size changes
|
|
73
70
|
const popoverResizeListener = useCallback(() => {
|
|
74
71
|
if (!popoverRef.current) return;
|
|
75
72
|
setPopoverRect(popoverRef.current.getBoundingClientRect());
|
|
@@ -79,9 +76,10 @@ const Popover = /*#__PURE__*/forwardRef(({
|
|
|
79
76
|
if (node === null) return;
|
|
80
77
|
setPopoverRect(node.getBoundingClientRect());
|
|
81
78
|
mergedPopoverRef(node);
|
|
82
|
-
}, [mergedPopoverRef]);
|
|
83
|
-
// or scrolled
|
|
79
|
+
}, [mergedPopoverRef]);
|
|
84
80
|
|
|
81
|
+
// Init the rect of the trigger and update it when the window was resized
|
|
82
|
+
// or scrolled
|
|
85
83
|
const triggerResizeListener = useCallback(() => {
|
|
86
84
|
window.requestAnimationFrame(() => {
|
|
87
85
|
if (!trigger) return;
|
|
@@ -103,19 +101,18 @@ const Popover = /*#__PURE__*/forwardRef(({
|
|
|
103
101
|
if (!trigger || trigger.current !== undefined) return;
|
|
104
102
|
setTriggerRect(trigger);
|
|
105
103
|
}, [trigger]);
|
|
106
|
-
const popoverId = useMemo(() => id || `popover-${Math.random().toString(36).slice(2, 11)}`, [id]);
|
|
104
|
+
const popoverId = useMemo(() => id || `popover-${Math.random().toString(36).slice(2, 11)}`, [id]);
|
|
107
105
|
|
|
106
|
+
// Set the aria tags to support accessibility features
|
|
108
107
|
useBrowserLayoutEffect(() => {
|
|
109
108
|
if (!trigger) return;
|
|
110
109
|
const {
|
|
111
110
|
current
|
|
112
111
|
} = trigger;
|
|
113
112
|
if (!current) return;
|
|
114
|
-
|
|
115
113
|
if (current.getAttribute('aria-haspopup') === null) {
|
|
116
114
|
current.setAttribute('aria-haspopup', 'dialog');
|
|
117
115
|
}
|
|
118
|
-
|
|
119
116
|
current.setAttribute('aria-controls', popoverId);
|
|
120
117
|
}, []);
|
|
121
118
|
useBrowserLayoutEffect(() => {
|
|
@@ -125,8 +122,9 @@ const Popover = /*#__PURE__*/forwardRef(({
|
|
|
125
122
|
} = trigger;
|
|
126
123
|
if (!current) return;
|
|
127
124
|
current.setAttribute('aria-expanded', visible.toString());
|
|
128
|
-
}, [visible]);
|
|
125
|
+
}, [visible]);
|
|
129
126
|
|
|
127
|
+
// Get the popover coordinates
|
|
130
128
|
const {
|
|
131
129
|
top,
|
|
132
130
|
left
|
|
@@ -136,8 +134,9 @@ const Popover = /*#__PURE__*/forwardRef(({
|
|
|
136
134
|
placement,
|
|
137
135
|
gap,
|
|
138
136
|
flip
|
|
139
|
-
});
|
|
137
|
+
});
|
|
140
138
|
|
|
139
|
+
// Close the popover when the user clicks outside of it
|
|
141
140
|
useClickOutside(popoverRef, onClose);
|
|
142
141
|
if (!mounted) return null;
|
|
143
142
|
return /*#__PURE__*/React.createElement(Portal, null, /*#__PURE__*/React.createElement(Container, _extends({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["React","forwardRef","useCallback","useEffect","useMemo","useState","sizeStyles","omitEmotionProps","useClickOutside","useClosable","useEvent","useForwardedRef","useResizeObserver","useBrowserLayoutEffect","styled","clr","useTheme","css","keyframes","Portal","usePopoverPosition","fadeIn","fadeOut","visibleStyles","p","visible","theme","transitionDelay","invisibleStyles","Container","top","left","borderRadius","popoverColorBg","popoverColorText","popoverColorBorder","popoverColorBoxShadow","emptyRect","width","height","Popover","trigger","placement","gap","flip","onClose","id","children","rest","ref","popoverRef","mergedPopoverRef","popoverRect","setPopoverRect","triggerRect","setTriggerRect","mounted","popoverResizeListener","current","getBoundingClientRect","measuredPopoverRef","node","triggerResizeListener","window","requestAnimationFrame","document","undefined","popoverId","Math","random","toString","slice","getAttribute","setAttribute","elementRect","displayName"],"sources":["../../../src/Popover/index.tsx"],"sourcesContent":["import React, {\n forwardRef,\n RefCallback,\n RefObject,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport { sizeStyles, WithSize } from '@os-design/styles';\nimport {\n omitEmotionProps,\n useClickOutside,\n useClosable,\n useEvent,\n useForwardedRef,\n useResizeObserver,\n useBrowserLayoutEffect,\n} from '@os-design/utils';\nimport styled from '@emotion/styled';\nimport { clr, useTheme } from '@os-design/theming';\nimport { css, keyframes } from '@emotion/react';\nimport Portal from '@os-design/portal';\nimport usePopoverPosition, {\n Placement,\n Rect,\n} from './utils/usePopoverPosition';\n\ntype JsxDivProps = Omit<JSX.IntrinsicElements['div'], 'ref'>;\nexport interface PopoverProps extends JsxDivProps, WithSize {\n /**\n * The element next to which the popover appears.\n * @default undefined\n */\n trigger?: RefObject<Element> | Rect;\n /**\n * On which side of the element the popover will appear.\n * @default top\n */\n placement?: Placement;\n /**\n * The gap between the element and the popover in em.\n * @default 0.2\n */\n gap?: number;\n /**\n * Whether the popover to flip if it does not fit in the window.\n * @default true\n */\n flip?: boolean;\n /**\n * Whether the popover is visible.\n * @default false\n */\n visible?: boolean;\n /**\n * The close event handler.\n * @default undefined\n */\n onClose?: () => void;\n}\n\nconst fadeIn = keyframes`\n from { opacity: 0; }\n to { opacity: 1; }\n`;\n\nconst fadeOut = keyframes`\n from { opacity: 1; }\n to { opacity: 0; }\n`;\n\nconst visibleStyles = (p) =>\n p.visible &&\n css`\n animation: ${fadeIn} ${p.theme.transitionDelay}ms forwards;\n `;\n\nconst invisibleStyles = (p) =>\n !p.visible &&\n css`\n animation: ${fadeOut} ${p.theme.transitionDelay}ms forwards;\n `;\n\ninterface ContainerProps extends Pick<PopoverProps, 'visible' | 'size'> {\n top: number;\n left: number;\n}\nconst Container = styled(\n 'div',\n omitEmotionProps('top', 'left', 'visible', 'size')\n)<ContainerProps>`\n position: absolute;\n top: ${(p) => p.top}px;\n left: ${(p) => p.left}px;\n\n border-radius: ${(p) => p.theme.borderRadius}em;\n background-color: ${(p) => clr(p.theme.popoverColorBg)};\n color: ${(p) => clr(p.theme.popoverColorText)};\n border: 1px solid ${(p) => clr(p.theme.popoverColorBorder)};\n box-shadow: 0 0.15em 0.8em ${(p) => clr(p.theme.popoverColorBoxShadow)};\n z-index: 1000; // Greater than the z-index of the Drawer\n\n ${visibleStyles};\n ${invisibleStyles};\n ${sizeStyles};\n`;\n\nconst emptyRect: Rect = {\n top: 0,\n left: 0,\n width: 0,\n height: 0,\n};\n\n/**\n * The pop-up window located next to the element.\n */\nconst Popover = forwardRef<HTMLDivElement, PopoverProps>(\n (\n {\n trigger,\n placement = 'top',\n gap = 0.2,\n flip = true,\n visible = false,\n onClose = () => {},\n id,\n children,\n ...rest\n },\n ref\n ) => {\n const [popoverRef, mergedPopoverRef] = useForwardedRef(ref);\n const [popoverRect, setPopoverRect] = useState(emptyRect);\n const [triggerRect, setTriggerRect] = useState(emptyRect);\n const { theme } = useTheme();\n const mounted = useClosable(visible, theme.transitionDelay);\n\n // Init the rect of the popover and update it when the popover size changes\n const popoverResizeListener = useCallback(() => {\n if (!popoverRef.current) return;\n setPopoverRect(popoverRef.current.getBoundingClientRect());\n }, [popoverRef]);\n useResizeObserver(\n popoverRef.current as HTMLDivElement,\n popoverResizeListener\n );\n\n const measuredPopoverRef = useCallback<RefCallback<HTMLDivElement>>(\n (node) => {\n if (node === null) return;\n setPopoverRect(node.getBoundingClientRect());\n mergedPopoverRef(node);\n },\n [mergedPopoverRef]\n );\n\n // Init the rect of the trigger and update it when the window was resized\n // or scrolled\n const triggerResizeListener = useCallback(() => {\n window.requestAnimationFrame(() => {\n if (!trigger) return;\n const { current } = trigger as RefObject<Element>;\n if (!current) return;\n setTriggerRect(current.getBoundingClientRect());\n });\n }, [trigger]);\n useBrowserLayoutEffect(() => {\n if (!visible) return;\n triggerResizeListener();\n }, [triggerResizeListener, visible]);\n useResizeObserver(trigger as never, triggerResizeListener);\n useEvent(\n (typeof window === 'undefined' ? null : window) as never,\n 'resize',\n triggerResizeListener\n );\n useEvent(document, 'scroll', triggerResizeListener);\n\n useEffect(() => {\n if (!trigger || (trigger as RefObject<Element>).current !== undefined)\n return;\n setTriggerRect(trigger as Rect);\n }, [trigger]);\n\n const popoverId = useMemo(\n () => id || `popover-${Math.random().toString(36).slice(2, 11)}`,\n [id]\n );\n\n // Set the aria tags to support accessibility features\n useBrowserLayoutEffect(() => {\n if (!trigger) return;\n const { current } = trigger as RefObject<Element>;\n if (!current) return;\n if (current.getAttribute('aria-haspopup') === null) {\n current.setAttribute('aria-haspopup', 'dialog');\n }\n current.setAttribute('aria-controls', popoverId);\n }, []);\n useBrowserLayoutEffect(() => {\n if (!trigger) return;\n const { current } = trigger as RefObject<Element>;\n if (!current) return;\n current.setAttribute('aria-expanded', visible.toString());\n }, [visible]);\n\n // Get the popover coordinates\n const { top, left } = usePopoverPosition({\n elementRect: triggerRect,\n popoverRect,\n placement,\n gap,\n flip,\n });\n\n // Close the popover when the user clicks outside of it\n useClickOutside(popoverRef, onClose);\n\n if (!mounted) return null;\n\n return (\n <Portal>\n <Container\n top={top}\n left={left}\n visible={visible}\n id={popoverId}\n role='dialog'\n {...rest}\n ref={measuredPopoverRef}\n >\n {children}\n </Container>\n </Portal>\n );\n }\n);\n\nPopover.displayName = 'Popover';\n\nexport default Popover;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["React","forwardRef","useCallback","useEffect","useMemo","useState","sizeStyles","omitEmotionProps","useClickOutside","useClosable","useEvent","useForwardedRef","useResizeObserver","useBrowserLayoutEffect","styled","clr","useTheme","css","keyframes","Portal","usePopoverPosition","fadeIn","fadeOut","visibleStyles","p","visible","theme","transitionDelay","invisibleStyles","Container","top","left","borderRadius","popoverColorBg","popoverColorText","popoverColorBorder","popoverColorBoxShadow","emptyRect","width","height","Popover","trigger","placement","gap","flip","onClose","id","children","rest","ref","popoverRef","mergedPopoverRef","popoverRect","setPopoverRect","triggerRect","setTriggerRect","mounted","popoverResizeListener","current","getBoundingClientRect","measuredPopoverRef","node","triggerResizeListener","window","requestAnimationFrame","document","undefined","popoverId","Math","random","toString","slice","getAttribute","setAttribute","elementRect","displayName"],"sources":["../../../src/Popover/index.tsx"],"sourcesContent":["import React, {\n forwardRef,\n RefCallback,\n RefObject,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from 'react';\nimport { sizeStyles, WithSize } from '@os-design/styles';\nimport {\n omitEmotionProps,\n useClickOutside,\n useClosable,\n useEvent,\n useForwardedRef,\n useResizeObserver,\n useBrowserLayoutEffect,\n} from '@os-design/utils';\nimport styled from '@emotion/styled';\nimport { clr, useTheme } from '@os-design/theming';\nimport { css, keyframes } from '@emotion/react';\nimport Portal from '@os-design/portal';\nimport usePopoverPosition, {\n Placement,\n Rect,\n} from './utils/usePopoverPosition';\n\ntype JsxDivProps = Omit<JSX.IntrinsicElements['div'], 'ref'>;\nexport interface PopoverProps extends JsxDivProps, WithSize {\n /**\n * The element next to which the popover appears.\n * @default undefined\n */\n trigger?: RefObject<Element> | Rect;\n /**\n * On which side of the element the popover will appear.\n * @default top\n */\n placement?: Placement;\n /**\n * The gap between the element and the popover in em.\n * @default 0.2\n */\n gap?: number;\n /**\n * Whether the popover to flip if it does not fit in the window.\n * @default true\n */\n flip?: boolean;\n /**\n * Whether the popover is visible.\n * @default false\n */\n visible?: boolean;\n /**\n * The close event handler.\n * @default undefined\n */\n onClose?: () => void;\n}\n\nconst fadeIn = keyframes`\n from { opacity: 0; }\n to { opacity: 1; }\n`;\n\nconst fadeOut = keyframes`\n from { opacity: 1; }\n to { opacity: 0; }\n`;\n\nconst visibleStyles = (p) =>\n p.visible &&\n css`\n animation: ${fadeIn} ${p.theme.transitionDelay}ms forwards;\n `;\n\nconst invisibleStyles = (p) =>\n !p.visible &&\n css`\n animation: ${fadeOut} ${p.theme.transitionDelay}ms forwards;\n `;\n\ninterface ContainerProps extends Pick<PopoverProps, 'visible' | 'size'> {\n top: number;\n left: number;\n}\nconst Container = styled(\n 'div',\n omitEmotionProps('top', 'left', 'visible', 'size')\n)<ContainerProps>`\n position: absolute;\n top: ${(p) => p.top}px;\n left: ${(p) => p.left}px;\n\n border-radius: ${(p) => p.theme.borderRadius}em;\n background-color: ${(p) => clr(p.theme.popoverColorBg)};\n color: ${(p) => clr(p.theme.popoverColorText)};\n border: 1px solid ${(p) => clr(p.theme.popoverColorBorder)};\n box-shadow: 0 0.15em 0.8em ${(p) => clr(p.theme.popoverColorBoxShadow)};\n z-index: 1000; // Greater than the z-index of the Drawer\n\n ${visibleStyles};\n ${invisibleStyles};\n ${sizeStyles};\n`;\n\nconst emptyRect: Rect = {\n top: 0,\n left: 0,\n width: 0,\n height: 0,\n};\n\n/**\n * The pop-up window located next to the element.\n */\nconst Popover = forwardRef<HTMLDivElement, PopoverProps>(\n (\n {\n trigger,\n placement = 'top',\n gap = 0.2,\n flip = true,\n visible = false,\n onClose = () => {},\n id,\n children,\n ...rest\n },\n ref\n ) => {\n const [popoverRef, mergedPopoverRef] = useForwardedRef(ref);\n const [popoverRect, setPopoverRect] = useState(emptyRect);\n const [triggerRect, setTriggerRect] = useState(emptyRect);\n const { theme } = useTheme();\n const mounted = useClosable(visible, theme.transitionDelay);\n\n // Init the rect of the popover and update it when the popover size changes\n const popoverResizeListener = useCallback(() => {\n if (!popoverRef.current) return;\n setPopoverRect(popoverRef.current.getBoundingClientRect());\n }, [popoverRef]);\n useResizeObserver(\n popoverRef.current as HTMLDivElement,\n popoverResizeListener\n );\n\n const measuredPopoverRef = useCallback<RefCallback<HTMLDivElement>>(\n (node) => {\n if (node === null) return;\n setPopoverRect(node.getBoundingClientRect());\n mergedPopoverRef(node);\n },\n [mergedPopoverRef]\n );\n\n // Init the rect of the trigger and update it when the window was resized\n // or scrolled\n const triggerResizeListener = useCallback(() => {\n window.requestAnimationFrame(() => {\n if (!trigger) return;\n const { current } = trigger as RefObject<Element>;\n if (!current) return;\n setTriggerRect(current.getBoundingClientRect());\n });\n }, [trigger]);\n useBrowserLayoutEffect(() => {\n if (!visible) return;\n triggerResizeListener();\n }, [triggerResizeListener, visible]);\n useResizeObserver(trigger as never, triggerResizeListener);\n useEvent(\n (typeof window === 'undefined' ? null : window) as never,\n 'resize',\n triggerResizeListener\n );\n useEvent(document, 'scroll', triggerResizeListener);\n\n useEffect(() => {\n if (!trigger || (trigger as RefObject<Element>).current !== undefined)\n return;\n setTriggerRect(trigger as Rect);\n }, [trigger]);\n\n const popoverId = useMemo(\n () => id || `popover-${Math.random().toString(36).slice(2, 11)}`,\n [id]\n );\n\n // Set the aria tags to support accessibility features\n useBrowserLayoutEffect(() => {\n if (!trigger) return;\n const { current } = trigger as RefObject<Element>;\n if (!current) return;\n if (current.getAttribute('aria-haspopup') === null) {\n current.setAttribute('aria-haspopup', 'dialog');\n }\n current.setAttribute('aria-controls', popoverId);\n }, []);\n useBrowserLayoutEffect(() => {\n if (!trigger) return;\n const { current } = trigger as RefObject<Element>;\n if (!current) return;\n current.setAttribute('aria-expanded', visible.toString());\n }, [visible]);\n\n // Get the popover coordinates\n const { top, left } = usePopoverPosition({\n elementRect: triggerRect,\n popoverRect,\n placement,\n gap,\n flip,\n });\n\n // Close the popover when the user clicks outside of it\n useClickOutside(popoverRef, onClose);\n\n if (!mounted) return null;\n\n return (\n <Portal>\n <Container\n top={top}\n left={left}\n visible={visible}\n id={popoverId}\n role='dialog'\n {...rest}\n ref={measuredPopoverRef}\n >\n {children}\n </Container>\n </Portal>\n );\n }\n);\n\nPopover.displayName = 'Popover';\n\nexport default Popover;\n"],"mappings":"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"}
|