@os-design/core 1.0.254 → 1.0.255
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 +5 -5
- package/dist/cjs/Alert/index.js.map +1 -1
- package/dist/cjs/Avatar/index.js +5 -5
- package/dist/cjs/Avatar/index.js.map +1 -1
- package/dist/cjs/AvatarSkeleton/index.js +5 -5
- package/dist/cjs/AvatarSkeleton/index.js.map +1 -1
- package/dist/cjs/Badge/index.js +9 -9
- package/dist/cjs/Badge/index.js.map +1 -1
- package/dist/cjs/Breadcrumb/index.js +7 -7
- package/dist/cjs/Breadcrumb/index.js.map +1 -1
- package/dist/cjs/BreadcrumbItem/index.js +5 -5
- package/dist/cjs/BreadcrumbItem/index.js.map +1 -1
- package/dist/cjs/Button/ButtonContent.js +2 -2
- package/dist/cjs/Button/ButtonContent.js.map +1 -1
- package/dist/cjs/Button/index.js +5 -5
- package/dist/cjs/Button/index.js.map +1 -1
- package/dist/cjs/ButtonLink/index.js +5 -5
- package/dist/cjs/ButtonLink/index.js.map +1 -1
- package/dist/cjs/Checkbox/index.js +9 -9
- package/dist/cjs/Checkbox/index.js.map +1 -1
- package/dist/cjs/CheckboxSkeleton/index.js +5 -5
- package/dist/cjs/CheckboxSkeleton/index.js.map +1 -1
- package/dist/cjs/DatePicker/DatePickerCalendar.js +8 -8
- package/dist/cjs/DatePicker/DatePickerCalendar.js.map +1 -1
- package/dist/cjs/DatePicker/index.js +9 -9
- package/dist/cjs/DatePicker/index.js.map +1 -1
- package/dist/cjs/Drawer/index.js +5 -5
- package/dist/cjs/Drawer/index.js.map +1 -1
- package/dist/cjs/Form/FormConfigContext.js +1 -1
- package/dist/cjs/Form/FormConfigContext.js.map +1 -1
- package/dist/cjs/Form/index.js +5 -5
- package/dist/cjs/Form/index.js.map +1 -1
- package/dist/cjs/FormDivider/index.js +5 -5
- package/dist/cjs/FormDivider/index.js.map +1 -1
- package/dist/cjs/FormItem/index.js +5 -5
- package/dist/cjs/FormItem/index.js.map +1 -1
- package/dist/cjs/Gallery/Status.js +2 -2
- package/dist/cjs/Gallery/Status.js.map +1 -1
- package/dist/cjs/Gallery/index.js +9 -9
- package/dist/cjs/Gallery/index.js.map +1 -1
- package/dist/cjs/GlobalStyles/index.js +1 -1
- package/dist/cjs/GlobalStyles/index.js.map +1 -1
- package/dist/cjs/GlobalStyles/resetStyles.js +1 -1
- package/dist/cjs/GlobalStyles/resetStyles.js.map +1 -1
- package/dist/cjs/GlobalStyles/typographyStyles.js +2 -2
- package/dist/cjs/GlobalStyles/typographyStyles.js.map +1 -1
- package/dist/cjs/HeaderSkeleton/index.js +5 -5
- package/dist/cjs/HeaderSkeleton/index.js.map +1 -1
- package/dist/cjs/Image/index.js +5 -5
- package/dist/cjs/Image/index.js.map +1 -1
- package/dist/cjs/ImageSkeleton/index.js +3 -3
- package/dist/cjs/ImageSkeleton/index.js.map +1 -1
- package/dist/cjs/Input/index.js +9 -9
- package/dist/cjs/Input/index.js.map +1 -1
- package/dist/cjs/Input/utils/getFocusableElements.js +5 -5
- package/dist/cjs/InputNumber/index.js +8 -8
- package/dist/cjs/InputNumber/index.js.map +1 -1
- package/dist/cjs/InputPassword/index.js +9 -9
- package/dist/cjs/InputPassword/index.js.map +1 -1
- package/dist/cjs/InputSearch/index.js +9 -9
- package/dist/cjs/InputSearch/index.js.map +1 -1
- package/dist/cjs/InputSkeleton/index.js +3 -3
- package/dist/cjs/InputSkeleton/index.js.map +1 -1
- package/dist/cjs/Layout/LayoutContext.js +1 -1
- package/dist/cjs/Layout/LayoutContext.js.map +1 -1
- package/dist/cjs/Layout/index.js +1 -1
- package/dist/cjs/Layout/index.js.map +1 -1
- package/dist/cjs/Link/index.js +5 -5
- package/dist/cjs/Link/index.js.map +1 -1
- package/dist/cjs/LinkButton/index.js +5 -5
- package/dist/cjs/LinkButton/index.js.map +1 -1
- package/dist/cjs/List/index.js +9 -9
- package/dist/cjs/List/index.js.map +1 -1
- package/dist/cjs/List/utils/frameTimeout.js +3 -3
- package/dist/cjs/List/utils/frameTimeout.js.map +1 -1
- package/dist/cjs/ListItem/index.js +5 -5
- package/dist/cjs/ListItem/index.js.map +1 -1
- package/dist/cjs/ListItemActions/index.js +12 -12
- package/dist/cjs/ListItemActions/index.js.map +1 -1
- package/dist/cjs/ListItemLink/index.js +10 -10
- package/dist/cjs/ListItemLink/index.js.map +1 -1
- package/dist/cjs/ListItemSkeleton/index.js +5 -5
- package/dist/cjs/ListItemSkeleton/index.js.map +1 -1
- package/dist/cjs/ListSkeleton/index.js +4 -4
- package/dist/cjs/ListSkeleton/index.js.map +1 -1
- package/dist/cjs/LogoLink/index.js +5 -5
- package/dist/cjs/LogoLink/index.js.map +1 -1
- package/dist/cjs/Menu/index.js +9 -9
- package/dist/cjs/Menu/index.js.map +1 -1
- package/dist/cjs/Menu/utils/useFocusWithArrows.js +5 -5
- package/dist/cjs/Menu/utils/useFocusWithArrows.js.map +1 -1
- package/dist/cjs/MenuDivider/index.js +3 -3
- package/dist/cjs/MenuDivider/index.js.map +1 -1
- package/dist/cjs/MenuGroup/index.js +13 -13
- package/dist/cjs/MenuGroup/index.js.map +1 -1
- package/dist/cjs/MenuItem/index.js +5 -5
- package/dist/cjs/MenuItem/index.js.map +1 -1
- package/dist/cjs/Modal/index.js +5 -5
- package/dist/cjs/Modal/index.js.map +1 -1
- package/dist/cjs/Navigation/index.js +5 -5
- package/dist/cjs/Navigation/index.js.map +1 -1
- package/dist/cjs/Navigation/utils/useScrollFlags.js +4 -4
- package/dist/cjs/Navigation/utils/useScrollFlags.js.map +1 -1
- package/dist/cjs/NavigationItem/index.js +5 -5
- package/dist/cjs/NavigationItem/index.js.map +1 -1
- package/dist/cjs/PageContent/index.js +5 -5
- package/dist/cjs/PageContent/index.js.map +1 -1
- package/dist/cjs/PageHeader/index.js +5 -5
- package/dist/cjs/PageHeader/index.js.map +1 -1
- package/dist/cjs/PageHeaderInputSearch/index.js +9 -9
- package/dist/cjs/PageHeaderInputSearch/index.js.map +1 -1
- package/dist/cjs/PageHeaderInputSearch/utils/defaultLocale.js +2 -2
- package/dist/cjs/PageHeaderInputSearch/utils/defaultLocale.js.map +1 -1
- package/dist/cjs/PageHeaderSkeleton/index.js +4 -4
- package/dist/cjs/PageHeaderSkeleton/index.js.map +1 -1
- package/dist/cjs/ParagraphSkeleton/index.js +5 -5
- package/dist/cjs/ParagraphSkeleton/index.js.map +1 -1
- package/dist/cjs/Popover/index.js +9 -9
- package/dist/cjs/Popover/index.js.map +1 -1
- package/dist/cjs/Popover/utils/usePopoverPosition.js +6 -6
- package/dist/cjs/Popover/utils/usePopoverPosition.js.map +1 -1
- package/dist/cjs/Progress/index.js +5 -5
- package/dist/cjs/Progress/index.js.map +1 -1
- package/dist/cjs/RadioGroup/index.js +9 -9
- package/dist/cjs/RadioGroup/index.js.map +1 -1
- package/dist/cjs/RadioGroupSkeleton/index.js +5 -5
- package/dist/cjs/RadioGroupSkeleton/index.js.map +1 -1
- package/dist/cjs/Result/index.js +5 -5
- package/dist/cjs/Result/index.js.map +1 -1
- package/dist/cjs/ScrollButton/index.js +5 -5
- package/dist/cjs/ScrollButton/index.js.map +1 -1
- package/dist/cjs/ScrollButton/utils/useContainerPosition.js +4 -4
- package/dist/cjs/ScrollButton/utils/useContainerPosition.js.map +1 -1
- package/dist/cjs/ScrollButton/utils/useVisibility.js +4 -4
- package/dist/cjs/ScrollButton/utils/useVisibility.js.map +1 -1
- package/dist/cjs/Select/index.js +13 -13
- package/dist/cjs/Select/index.js.map +1 -1
- package/dist/cjs/Skeleton/index.js +5 -5
- package/dist/cjs/Skeleton/index.js.map +1 -1
- package/dist/cjs/Switch/index.js +9 -9
- package/dist/cjs/Switch/index.js.map +1 -1
- package/dist/cjs/SwitchSkeleton/index.js +3 -3
- package/dist/cjs/SwitchSkeleton/index.js.map +1 -1
- package/dist/cjs/Tag/index.js +5 -5
- package/dist/cjs/Tag/index.js.map +1 -1
- package/dist/cjs/TagLink/index.js +5 -5
- package/dist/cjs/TagLink/index.js.map +1 -1
- package/dist/cjs/TagList/index.js +9 -9
- package/dist/cjs/TagList/index.js.map +1 -1
- package/dist/cjs/TagListSkeleton/index.js +4 -4
- package/dist/cjs/TagListSkeleton/index.js.map +1 -1
- package/dist/cjs/TagSkeleton/index.js +5 -5
- package/dist/cjs/TagSkeleton/index.js.map +1 -1
- package/dist/cjs/TextArea/index.js +9 -9
- package/dist/cjs/TextArea/index.js.map +1 -1
- package/dist/cjs/TextAreaSkeleton/index.js +3 -3
- package/dist/cjs/TextAreaSkeleton/index.js.map +1 -1
- package/dist/cjs/ThemeSwitcher/index.js +4 -4
- package/dist/cjs/ThemeSwitcher/index.js.map +1 -1
- package/dist/cjs/TimePicker/index.js +8 -8
- package/dist/cjs/TimePicker/index.js.map +1 -1
- package/dist/cjs/Video/index.js +5 -5
- package/dist/cjs/Video/index.js.map +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/message/AlertIcon.js +2 -2
- package/dist/cjs/message/AlertIcon.js.map +1 -1
- package/dist/cjs/message/Message.js +2 -2
- package/dist/cjs/message/Message.js.map +1 -1
- package/dist/cjs/message/index.js +1 -1
- package/dist/cjs/message/index.js.map +1 -1
- package/dist/cjs/message/styles.js +4 -4
- package/dist/esm/Alert/index.js +1 -1
- package/dist/esm/Alert/index.js.map +1 -1
- package/dist/esm/Avatar/index.js +1 -1
- package/dist/esm/Avatar/index.js.map +1 -1
- package/dist/esm/Avatar/utils/nameToInitials.js.map +1 -1
- package/dist/esm/AvatarSkeleton/index.js +1 -1
- package/dist/esm/AvatarSkeleton/index.js.map +1 -1
- package/dist/esm/Badge/index.js +1 -1
- package/dist/esm/Badge/index.js.map +1 -1
- package/dist/esm/Breadcrumb/index.js +2 -2
- package/dist/esm/Breadcrumb/index.js.map +1 -1
- package/dist/esm/BreadcrumbItem/index.js +1 -1
- package/dist/esm/BreadcrumbItem/index.js.map +1 -1
- package/dist/esm/Button/ButtonContent.js.map +1 -1
- package/dist/esm/Button/index.js +1 -1
- package/dist/esm/Button/index.js.map +1 -1
- package/dist/esm/Button/utils/useButtonColors.js.map +1 -1
- package/dist/esm/ButtonLink/index.js +1 -1
- package/dist/esm/ButtonLink/index.js.map +1 -1
- package/dist/esm/Checkbox/index.js +1 -1
- package/dist/esm/Checkbox/index.js.map +1 -1
- package/dist/esm/CheckboxSkeleton/index.js +1 -1
- package/dist/esm/CheckboxSkeleton/index.js.map +1 -1
- package/dist/esm/DatePicker/DatePickerCalendar.js +1 -1
- package/dist/esm/DatePicker/DatePickerCalendar.js.map +1 -1
- package/dist/esm/DatePicker/index.js +1 -1
- package/dist/esm/DatePicker/index.js.map +1 -1
- package/dist/esm/Drawer/index.js +1 -1
- package/dist/esm/Drawer/index.js.map +1 -1
- package/dist/esm/Form/index.js +1 -1
- package/dist/esm/Form/index.js.map +1 -1
- package/dist/esm/FormDivider/index.js +1 -1
- package/dist/esm/FormDivider/index.js.map +1 -1
- package/dist/esm/FormItem/index.js +1 -1
- package/dist/esm/FormItem/index.js.map +1 -1
- package/dist/esm/Gallery/Status.js.map +1 -1
- package/dist/esm/Gallery/index.js +1 -1
- package/dist/esm/Gallery/index.js.map +1 -1
- package/dist/esm/GlobalStyles/resetStyles.js.map +1 -1
- package/dist/esm/GlobalStyles/typographyStyles.js.map +1 -1
- package/dist/esm/HeaderSkeleton/index.js +1 -1
- package/dist/esm/HeaderSkeleton/index.js.map +1 -1
- package/dist/esm/Image/index.js +1 -1
- package/dist/esm/Image/index.js.map +1 -1
- package/dist/esm/ImageSkeleton/index.js +1 -1
- package/dist/esm/ImageSkeleton/index.js.map +1 -1
- package/dist/esm/Input/index.js +1 -1
- package/dist/esm/Input/index.js.map +1 -1
- package/dist/esm/InputNumber/index.js +1 -1
- package/dist/esm/InputPassword/index.js +1 -1
- package/dist/esm/InputPassword/index.js.map +1 -1
- package/dist/esm/InputSearch/index.js +1 -1
- package/dist/esm/InputSearch/index.js.map +1 -1
- package/dist/esm/InputSkeleton/index.js +1 -1
- package/dist/esm/InputSkeleton/index.js.map +1 -1
- package/dist/esm/Link/index.js +1 -1
- package/dist/esm/Link/index.js.map +1 -1
- package/dist/esm/LinkButton/index.js +1 -1
- package/dist/esm/LinkButton/index.js.map +1 -1
- package/dist/esm/List/index.js +1 -1
- package/dist/esm/List/index.js.map +1 -1
- package/dist/esm/ListItem/index.js +1 -1
- package/dist/esm/ListItem/index.js.map +1 -1
- package/dist/esm/ListItemActions/index.js +1 -1
- package/dist/esm/ListItemActions/index.js.map +1 -1
- package/dist/esm/ListItemLink/index.js +1 -1
- package/dist/esm/ListItemLink/index.js.map +1 -1
- package/dist/esm/ListItemSkeleton/index.js +1 -1
- package/dist/esm/ListItemSkeleton/index.js.map +1 -1
- package/dist/esm/ListSkeleton/index.js +1 -1
- package/dist/esm/LogoLink/index.js +1 -1
- package/dist/esm/LogoLink/index.js.map +1 -1
- package/dist/esm/Menu/index.js +1 -1
- package/dist/esm/Menu/index.js.map +1 -1
- package/dist/esm/MenuDivider/index.js +1 -1
- package/dist/esm/MenuDivider/index.js.map +1 -1
- package/dist/esm/MenuGroup/index.js +1 -1
- package/dist/esm/MenuGroup/index.js.map +1 -1
- package/dist/esm/MenuItem/index.js +1 -1
- package/dist/esm/MenuItem/index.js.map +1 -1
- package/dist/esm/Modal/index.js +1 -1
- package/dist/esm/Modal/index.js.map +1 -1
- package/dist/esm/Navigation/index.js +1 -1
- package/dist/esm/Navigation/index.js.map +1 -1
- package/dist/esm/NavigationItem/index.js +1 -1
- package/dist/esm/NavigationItem/index.js.map +1 -1
- package/dist/esm/PageContent/index.js +1 -1
- package/dist/esm/PageContent/index.js.map +1 -1
- package/dist/esm/PageHeader/index.js +1 -1
- package/dist/esm/PageHeader/index.js.map +1 -1
- package/dist/esm/PageHeaderInputSearch/index.js +1 -1
- package/dist/esm/PageHeaderInputSearch/index.js.map +1 -1
- package/dist/esm/PageHeaderSkeleton/index.js +1 -1
- package/dist/esm/ParagraphSkeleton/index.js +1 -1
- package/dist/esm/ParagraphSkeleton/index.js.map +1 -1
- package/dist/esm/Popover/index.js +1 -1
- package/dist/esm/Popover/index.js.map +1 -1
- package/dist/esm/Progress/index.js +1 -1
- package/dist/esm/Progress/index.js.map +1 -1
- package/dist/esm/RadioGroup/index.js +1 -1
- package/dist/esm/RadioGroup/index.js.map +1 -1
- package/dist/esm/RadioGroupSkeleton/index.js +1 -1
- package/dist/esm/RadioGroupSkeleton/index.js.map +1 -1
- package/dist/esm/Result/index.js +1 -1
- package/dist/esm/Result/index.js.map +1 -1
- package/dist/esm/ScrollButton/index.js +1 -1
- package/dist/esm/ScrollButton/index.js.map +1 -1
- package/dist/esm/Select/index.js +1 -1
- package/dist/esm/Select/index.js.map +1 -1
- package/dist/esm/Skeleton/index.js +1 -1
- package/dist/esm/Skeleton/index.js.map +1 -1
- package/dist/esm/Switch/index.js +1 -1
- package/dist/esm/Switch/index.js.map +1 -1
- package/dist/esm/SwitchSkeleton/index.js +1 -1
- package/dist/esm/SwitchSkeleton/index.js.map +1 -1
- package/dist/esm/Tag/index.js +1 -1
- package/dist/esm/Tag/index.js.map +1 -1
- package/dist/esm/TagLink/index.js +1 -1
- package/dist/esm/TagLink/index.js.map +1 -1
- package/dist/esm/TagList/index.js +1 -1
- package/dist/esm/TagList/index.js.map +1 -1
- package/dist/esm/TagListSkeleton/index.js +1 -1
- package/dist/esm/TagSkeleton/index.js +1 -1
- package/dist/esm/TagSkeleton/index.js.map +1 -1
- package/dist/esm/TextArea/index.js +1 -1
- package/dist/esm/TextArea/index.js.map +1 -1
- package/dist/esm/TextAreaSkeleton/index.js +1 -1
- package/dist/esm/TextAreaSkeleton/index.js.map +1 -1
- package/dist/esm/ThemeSwitcher/index.js +1 -1
- package/dist/esm/TimePicker/index.js +1 -1
- package/dist/esm/Video/index.js +1 -1
- package/dist/esm/Video/index.js.map +1 -1
- package/dist/esm/message/AlertIcon.js.map +1 -1
- package/dist/esm/message/Message.js.map +1 -1
- package/dist/types/Button/index.d.ts +2 -2
- package/dist/types/Button/index.d.ts.map +1 -1
- package/dist/types/ButtonLink/index.d.ts +14 -13
- package/dist/types/ButtonLink/index.d.ts.map +1 -1
- package/dist/types/Input/index.d.ts +4 -4
- package/dist/types/Input/index.d.ts.map +1 -1
- package/dist/types/Link/index.d.ts +4 -4
- package/dist/types/Link/index.d.ts.map +1 -1
- package/dist/types/Menu/utils/useFocusWithArrows.d.ts.map +1 -1
- package/dist/types/Modal/index.d.ts +2 -2
- package/dist/types/Modal/index.d.ts.map +1 -1
- package/dist/types/Navigation/utils/useScrollFlags.d.ts.map +1 -1
- package/dist/types/PageHeader/index.d.ts +2 -2
- package/dist/types/PageHeader/index.d.ts.map +1 -1
- package/dist/types/ScrollButton/utils/useContainerPosition.d.ts.map +1 -1
- package/dist/types/Select/index.d.ts +21 -21
- package/dist/types/Select/index.d.ts.map +1 -1
- package/dist/types/Tag/index.d.ts +6 -6
- package/dist/types/Tag/index.d.ts.map +1 -1
- package/dist/types/ThemeSwitcher/index.d.ts +14 -13
- package/dist/types/ThemeSwitcher/index.d.ts.map +1 -1
- package/dist/types/message/styles.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["css","styled","omitEmotionProps","React","forwardRef","useCallback","EMPTY_IMAGE","coverStyles","p","cover","StyledImage","theme","borderRadius","Image","url","sizes","defaultSize","cropped","className","rest","ref","getUrl","size","createElement","_extends","src","srcSet","map","join","filter","i","displayName"],"sources":["../../../src/Image/index.tsx"],"sourcesContent":["import { css } from '@emotion/react';\nimport styled from '@emotion/styled';\nimport { omitEmotionProps } from '@os-design/utils';\nimport React, { forwardRef, useCallback } from 'react';\n\nconst EMPTY_IMAGE =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mO8+R8AArcB2pIvCSwAAAAASUVORK5CYII=';\n\ntype JsxImgProps = Omit<JSX.IntrinsicElements['img'], 'sizes' | 'ref'>;\nexport interface ImageProps extends JsxImgProps {\n /**\n * The image URL.\n * @default undefined\n */\n url?: string;\n /**\n * All available sizes of the image.\n * @default [72, 192, 512, 1024, 2560]\n */\n sizes?: number[];\n /**\n * The image size if the browser does not support lazy loading.\n * @default 72\n */\n defaultSize?: number;\n /**\n * Whether the image is cropped.\n * @default false\n */\n cropped?: boolean;\n /**\n * Sets object-fit: cover.\n * @default false\n */\n cover?: boolean;\n}\n\nconst coverStyles = (p) =>\n p.cover &&\n css`\n height: 100%;\n object-fit: cover;\n `;\n\ntype StyledImageProps = Pick<ImageProps, 'cover'>;\nconst StyledImage = styled('img', omitEmotionProps('cover'))<StyledImageProps>`\n display: block; // To remove the indent under the image\n width: 100%;\n border-radius: ${(p) => p.theme.borderRadius}em;\n ${coverStyles};\n`;\n\n/**\n * The image with lazy loading. Required lazysizes.\n * Should be loaded by @os-team/image-storage.\n */\nconst Image = forwardRef<HTMLImageElement, ImageProps>(\n (\n {\n url,\n sizes = [72, 192, 512, 1024, 2560],\n defaultSize = 72,\n cropped = false,\n cover = false,\n className,\n ...rest\n },\n ref\n ) => {\n const getUrl = useCallback(\n (size: number) => `${url}-${size}${cropped ? '-c' : ''}`,\n [url, cropped]\n );\n\n if (!url) {\n return (\n <StyledImage\n src={EMPTY_IMAGE}\n className={className}\n {...rest}\n ref={ref}\n />\n );\n }\n\n return (\n <StyledImage\n src={getUrl(defaultSize)}\n srcSet={EMPTY_IMAGE}\n data-sizes='auto'\n data-srcset={sizes.map((size) => `${getUrl(size)} ${size}w`).join(', ')}\n cover={cover}\n className={[className, 'lazyload'].filter((i) => i).join(' ')}\n {...rest}\n ref={ref}\n />\n );\n }\n);\n\nImage.displayName = 'Image';\n\nexport default Image;\n"],"mappings":";AAAA,SAASA,GAAG,QAAQ,gBAAgB;AACpC,OAAOC,MAAM,MAAM,iBAAiB;AACpC,SAASC,gBAAgB,QAAQ,kBAAkB;AACnD,OAAOC,KAAK,IAAIC,UAAU,EAAEC,WAAW,QAAQ,OAAO;AAEtD,MAAMC,WAAW,GACf,oHAAoH;AA+BtH,MAAMC,WAAW,GAAIC,CAAC,IACpBA,CAAC,CAACC,KAAK,IACPT,
|
|
1
|
+
{"version":3,"file":"index.js","names":["css","styled","omitEmotionProps","React","forwardRef","useCallback","EMPTY_IMAGE","coverStyles","p","cover","StyledImage","theme","borderRadius","Image","url","sizes","defaultSize","cropped","className","rest","ref","getUrl","size","createElement","_extends","src","srcSet","map","join","filter","i","displayName"],"sources":["../../../src/Image/index.tsx"],"sourcesContent":["import { css } from '@emotion/react';\nimport styled from '@emotion/styled';\nimport { omitEmotionProps } from '@os-design/utils';\nimport React, { forwardRef, useCallback } from 'react';\n\nconst EMPTY_IMAGE =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mO8+R8AArcB2pIvCSwAAAAASUVORK5CYII=';\n\ntype JsxImgProps = Omit<JSX.IntrinsicElements['img'], 'sizes' | 'ref'>;\nexport interface ImageProps extends JsxImgProps {\n /**\n * The image URL.\n * @default undefined\n */\n url?: string;\n /**\n * All available sizes of the image.\n * @default [72, 192, 512, 1024, 2560]\n */\n sizes?: number[];\n /**\n * The image size if the browser does not support lazy loading.\n * @default 72\n */\n defaultSize?: number;\n /**\n * Whether the image is cropped.\n * @default false\n */\n cropped?: boolean;\n /**\n * Sets object-fit: cover.\n * @default false\n */\n cover?: boolean;\n}\n\nconst coverStyles = (p) =>\n p.cover &&\n css`\n height: 100%;\n object-fit: cover;\n `;\n\ntype StyledImageProps = Pick<ImageProps, 'cover'>;\nconst StyledImage = styled('img', omitEmotionProps('cover'))<StyledImageProps>`\n display: block; // To remove the indent under the image\n width: 100%;\n border-radius: ${(p) => p.theme.borderRadius}em;\n ${coverStyles};\n`;\n\n/**\n * The image with lazy loading. Required lazysizes.\n * Should be loaded by @os-team/image-storage.\n */\nconst Image = forwardRef<HTMLImageElement, ImageProps>(\n (\n {\n url,\n sizes = [72, 192, 512, 1024, 2560],\n defaultSize = 72,\n cropped = false,\n cover = false,\n className,\n ...rest\n },\n ref\n ) => {\n const getUrl = useCallback(\n (size: number) => `${url}-${size}${cropped ? '-c' : ''}`,\n [url, cropped]\n );\n\n if (!url) {\n return (\n <StyledImage\n src={EMPTY_IMAGE}\n className={className}\n {...rest}\n ref={ref}\n />\n );\n }\n\n return (\n <StyledImage\n src={getUrl(defaultSize)}\n srcSet={EMPTY_IMAGE}\n data-sizes='auto'\n data-srcset={sizes.map((size) => `${getUrl(size)} ${size}w`).join(', ')}\n cover={cover}\n className={[className, 'lazyload'].filter((i) => i).join(' ')}\n {...rest}\n ref={ref}\n />\n );\n }\n);\n\nImage.displayName = 'Image';\n\nexport default Image;\n"],"mappings":";AAAA,SAASA,GAAG,QAAQ,gBAAgB;AACpC,OAAOC,MAAM,MAAM,iBAAiB;AACpC,SAASC,gBAAgB,QAAQ,kBAAkB;AACnD,OAAOC,KAAK,IAAIC,UAAU,EAAEC,WAAW,QAAQ,OAAO;AAEtD,MAAMC,WAAW,GACf,oHAAoH;AA+BtH,MAAMC,WAAW,GAAIC,CAAC,IACpBA,CAAC,CAACC,KAAK,IACPT,GAAG;AACL;AACA;AACA,GAAG;AAGH,MAAMU,WAAW,GAAGT,MAAM,CAAC,KAAK,EAAEC,gBAAgB,CAAC,OAAO,CAAC,CAAmB;AAC9E;AACA;AACA,mBAAoBM,CAAC,IAAKA,CAAC,CAACG,KAAK,CAACC,YAAY;AAC9C,IAAIL,WAAW;AACf,CAAC;;AAED;AACA;AACA;AACA;AACA,MAAMM,KAAK,gBAAGT,UAAU,CACtB,CACE;EACEU,GAAG;EACHC,KAAK,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC;EAClCC,WAAW,GAAG,EAAE;EAChBC,OAAO,GAAG,KAAK;EACfR,KAAK,GAAG,KAAK;EACbS,SAAS;EACT,GAAGC;AACL,CAAC,EACDC,GAAG,KACA;EACH,MAAMC,MAAM,GAAGhB,WAAW,CACvBiB,IAAY,IAAK,GAAGR,GAAG,IAAIQ,IAAI,GAAGL,OAAO,GAAG,IAAI,GAAG,EAAE,EAAE,EACxD,CAACH,GAAG,EAAEG,OAAO,CACf,CAAC;EAED,IAAI,CAACH,GAAG,EAAE;IACR,oBACEX,KAAA,CAAAoB,aAAA,CAACb,WAAW,EAAAc,QAAA;MACVC,GAAG,EAAEnB,WAAY;MACjBY,SAAS,EAAEA;IAAU,GACjBC,IAAI;MACRC,GAAG,EAAEA;IAAI,EACV,CAAC;EAEN;EAEA,oBACEjB,KAAA,CAAAoB,aAAA,CAACb,WAAW,EAAAc,QAAA;IACVC,GAAG,EAAEJ,MAAM,CAACL,WAAW,CAAE;IACzBU,MAAM,EAAEpB,WAAY;IACpB,cAAW,MAAM;IACjB,eAAaS,KAAK,CAACY,GAAG,CAAEL,IAAI,IAAK,GAAGD,MAAM,CAACC,IAAI,CAAC,IAAIA,IAAI,GAAG,CAAC,CAACM,IAAI,CAAC,IAAI,CAAE;IACxEnB,KAAK,EAAEA,KAAM;IACbS,SAAS,EAAE,CAACA,SAAS,EAAE,UAAU,CAAC,CAACW,MAAM,CAAEC,CAAC,IAAKA,CAAC,CAAC,CAACF,IAAI,CAAC,GAAG;EAAE,GAC1DT,IAAI;IACRC,GAAG,EAAEA;EAAI,EACV,CAAC;AAEN,CACF,CAAC;AAEDP,KAAK,CAACkB,WAAW,GAAG,OAAO;AAE3B,eAAelB,KAAK","ignoreList":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (
|
|
1
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
2
2
|
import styled from '@emotion/styled';
|
|
3
3
|
import React, { forwardRef } from 'react';
|
|
4
4
|
import Skeleton from '../Skeleton';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["styled","React","forwardRef","Skeleton","StyledImageSkeleton","ImageSkeleton","props","ref","createElement","_extends","width","displayName"],"sources":["../../../src/ImageSkeleton/index.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport React, { forwardRef } from 'react';\nimport Skeleton, { SkeletonProps } from '../Skeleton';\n\nexport type ImageSkeletonProps = Omit<SkeletonProps, 'width'>;\n\nconst StyledImageSkeleton = styled(Skeleton)`\n height: 100%;\n`;\n\n/**\n * Provides an image placeholder while a user waits for the content to load.\n */\nconst ImageSkeleton = forwardRef<HTMLDivElement, ImageSkeletonProps>(\n (props, ref) => <StyledImageSkeleton width='100%' {...props} ref={ref} />\n);\n\nImageSkeleton.displayName = 'ImageSkeleton';\n\nexport default ImageSkeleton;\n"],"mappings":";AAAA,OAAOA,MAAM,MAAM,iBAAiB;AACpC,OAAOC,KAAK,IAAIC,UAAU,QAAQ,OAAO;AACzC,OAAOC,QAAQ,MAAyB,aAAa;AAIrD,MAAMC,mBAAmB,GAAGJ,MAAM,CAACG,QAAQ,
|
|
1
|
+
{"version":3,"file":"index.js","names":["styled","React","forwardRef","Skeleton","StyledImageSkeleton","ImageSkeleton","props","ref","createElement","_extends","width","displayName"],"sources":["../../../src/ImageSkeleton/index.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport React, { forwardRef } from 'react';\nimport Skeleton, { SkeletonProps } from '../Skeleton';\n\nexport type ImageSkeletonProps = Omit<SkeletonProps, 'width'>;\n\nconst StyledImageSkeleton = styled(Skeleton)`\n height: 100%;\n`;\n\n/**\n * Provides an image placeholder while a user waits for the content to load.\n */\nconst ImageSkeleton = forwardRef<HTMLDivElement, ImageSkeletonProps>(\n (props, ref) => <StyledImageSkeleton width='100%' {...props} ref={ref} />\n);\n\nImageSkeleton.displayName = 'ImageSkeleton';\n\nexport default ImageSkeleton;\n"],"mappings":";AAAA,OAAOA,MAAM,MAAM,iBAAiB;AACpC,OAAOC,KAAK,IAAIC,UAAU,QAAQ,OAAO;AACzC,OAAOC,QAAQ,MAAyB,aAAa;AAIrD,MAAMC,mBAAmB,GAAGJ,MAAM,CAACG,QAAQ,CAAC;AAC5C;AACA,CAAC;;AAED;AACA;AACA;AACA,MAAME,aAAa,gBAAGH,UAAU,CAC9B,CAACI,KAAK,EAAEC,GAAG,kBAAKN,KAAA,CAAAO,aAAA,CAACJ,mBAAmB,EAAAK,QAAA;EAACC,KAAK,EAAC;AAAM,GAAKJ,KAAK;EAAEC,GAAG,EAAEA;AAAI,EAAE,CAC1E,CAAC;AAEDF,aAAa,CAACM,WAAW,GAAG,eAAe;AAE3C,eAAeN,aAAa","ignoreList":[]}
|
package/dist/esm/Input/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (
|
|
1
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
2
2
|
import { css } from '@emotion/react';
|
|
3
3
|
import styled from '@emotion/styled';
|
|
4
4
|
import { Loading } from '@os-design/icons';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["css","styled","Loading","resetFocusStyles","sizeStyles","transitionStyles","clr","ThemeOverrider","omitEmotionProps","useForwardedRef","React","forwardRef","useCallback","useMemo","getFocusableElements","hoverStyles","p","disabled","theme","inputHoverColorBorder","focusStyles","inputFocusColorBorder","inputFocusColorShadow","disabledStyles","inputDisabledColorText","inputDisabledColorBg","inputDisabledColorBorder","inputDisabledColorPlaceholder","InputContainer","baseHeight","inputColorBg","inputBorderWidth","inputColorBorder","borderRadius","notHasLeftStyles","hasLeft","inputPaddingHorizontal","notHasRightStyles","hasRight","hideSpinButton","StyledInput","inputColorText","inputColorPlaceholder","Addon","LeftAddon","inputAddonPaddingHorizontal","hasPadding","RightAddon","Input","type","left","leftHasPadding","right","rightHasPadding","loading","containerRef","containerProps","size","value","onChange","rest","ref","innerContainerRef","mergedContainerRef","rightValue","createElement","rightHasPaddingValue","onFocus","e","target","current","focusableElements","focus","onKeyDown","document","inputFocusableElements","firstInputElementIsFocused","activeElement","key","shiftKey","inputContainerIndex","findIndex","el","elementBeforeInputContainer","_extends","tabIndex","overrides","buttonPaddingHorizontal","displayName"],"sources":["../../../src/Input/index.tsx"],"sourcesContent":["import { css } from '@emotion/react';\nimport styled from '@emotion/styled';\nimport { Loading } from '@os-design/icons';\nimport {\n resetFocusStyles,\n sizeStyles,\n transitionStyles,\n WithSize,\n} from '@os-design/styles';\nimport { clr, ThemeOverrider } from '@os-design/theming';\nimport { omitEmotionProps, useForwardedRef } from '@os-design/utils';\nimport React, {\n ChangeEvent,\n FocusEventHandler,\n ForwardedRef,\n forwardRef,\n KeyboardEventHandler,\n useCallback,\n useMemo,\n} from 'react';\nimport getFocusableElements from './utils/getFocusableElements';\n\ntype JsxInputProps = Omit<\n JSX.IntrinsicElements['input'],\n 'value' | 'onChange' | 'size' | 'ref'\n>;\nexport interface InputProps extends JsxInputProps, WithSize {\n /**\n * Type of the input.\n * @default text\n */\n type?: JsxInputProps['type'];\n /**\n * The component located on the left side.\n * @default undefined\n */\n left?: React.ReactNode;\n /**\n * Adds padding to the left component.\n * It can be useful when passing an icon or text in the left component.\n * @default false\n */\n leftHasPadding?: boolean;\n /**\n * The component located on the right side.\n * @default undefined\n */\n right?: React.ReactNode;\n /**\n * Adds padding to the right component.\n * It can be useful when passing an icon or text in the right component.\n * @default false\n */\n rightHasPadding?: boolean;\n /**\n * Whether the input is disabled.\n * @default false\n */\n disabled?: boolean;\n /**\n * Shows the loading status.\n * @default false\n */\n loading?: boolean;\n /**\n * The ref of the input container.\n * @default undefined\n */\n containerRef?: ForwardedRef<HTMLDivElement>;\n /**\n * The props of the input container.\n * @default undefined\n */\n containerProps?: JSX.IntrinsicElements['div'];\n /**\n * The input value.\n * @default undefined\n */\n value?: string;\n /**\n * The change event handler.\n * @default undefined\n */\n onChange?: (value: string, e: ChangeEvent<HTMLInputElement>) => void;\n}\n\nconst hoverStyles = (p) =>\n !p.disabled &&\n css`\n @media (hover: hover) {\n &:hover {\n border-color: ${clr(p.theme.inputHoverColorBorder)};\n }\n }\n `;\n\nconst focusStyles = (p) =>\n !p.disabled &&\n css`\n &:focus-within {\n border-color: ${clr(p.theme.inputFocusColorBorder)};\n box-shadow: 0 0 0 0.15em ${clr(p.theme.inputFocusColorShadow)};\n }\n `;\n\nconst disabledStyles = (p) =>\n p.disabled &&\n css`\n cursor: not-allowed;\n color: ${clr(p.theme.inputDisabledColorText)};\n background-color: ${clr(p.theme.inputDisabledColorBg)};\n border-color: ${clr(p.theme.inputDisabledColorBorder)};\n\n input,\n textarea {\n cursor: not-allowed;\n &::placeholder {\n color: ${clr(p.theme.inputDisabledColorPlaceholder)};\n }\n }\n `;\n\ntype InputContainerProps = Pick<InputProps, 'disabled' | 'size'>;\nexport const InputContainer = styled(\n 'div',\n omitEmotionProps('disabled', 'size')\n)<InputContainerProps>`\n ${resetFocusStyles};\n\n display: inline-flex;\n width: 100%;\n height: ${(p) => p.theme.baseHeight}em;\n box-sizing: border-box;\n background-color: ${(p) => clr(p.theme.inputColorBg)};\n\n border: ${(p) => p.theme.inputBorderWidth}px solid\n ${(p) => clr(p.theme.inputColorBorder)};\n border-radius: ${(p) => p.theme.borderRadius}em;\n\n ${hoverStyles};\n ${focusStyles};\n ${disabledStyles};\n ${sizeStyles};\n ${transitionStyles('border-color', 'box-shadow')};\n`;\n\nconst notHasLeftStyles = (p) =>\n !p.hasLeft &&\n css`\n padding-left: ${p.theme.inputPaddingHorizontal}em;\n `;\n\nconst notHasRightStyles = (p) =>\n !p.hasRight &&\n css`\n padding-right: ${p.theme.inputPaddingHorizontal}em;\n `;\n\nconst hideSpinButton = css`\n /* Chrome, Safari, Edge, Opera */\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n /* Firefox */\n appearance: textfield;\n`;\n\ninterface StyledInputProps {\n hasLeft?: boolean;\n hasRight?: boolean;\n}\nexport const StyledInput = styled(\n 'input',\n omitEmotionProps('hasLeft', 'hasRight')\n)<StyledInputProps>`\n ${resetFocusStyles};\n border: none;\n font-size: 1em;\n flex: 1;\n width: 100%;\n overflow: hidden;\n\n color: ${(p) => clr(p.theme.inputColorText)};\n background-color: transparent;\n\n &::placeholder {\n color: ${(p) => clr(p.theme.inputColorPlaceholder)};\n }\n\n ${hideSpinButton};\n ${notHasLeftStyles};\n ${notHasRightStyles};\n`;\n\ninterface AddonProps {\n hasPadding: boolean;\n}\nconst Addon = styled('span', omitEmotionProps('hasPadding'))<AddonProps>`\n display: flex;\n align-items: center;\n user-select: none;\n color: ${(p) => clr(p.theme.inputColorPlaceholder)};\n\n svg {\n transform: scale(1.2);\n }\n`;\n\nconst LeftAddon = styled(Addon)`\n padding-right: ${(p) => p.theme.inputAddonPaddingHorizontal}em;\n ${(p) =>\n p.hasPadding &&\n css`\n padding-left: ${p.theme.inputPaddingHorizontal}em;\n `}\n`;\n\nconst RightAddon = styled(Addon)`\n padding-left: ${(p) => p.theme.inputAddonPaddingHorizontal}em;\n ${(p) =>\n p.hasPadding &&\n css`\n padding-right: ${p.theme.inputPaddingHorizontal}em;\n `}\n`;\n\n/**\n * The basic input component.\n */\nconst Input = forwardRef<HTMLInputElement, InputProps>(\n (\n {\n type = 'text',\n left,\n leftHasPadding = false,\n right,\n rightHasPadding = false,\n disabled = false,\n loading = false,\n containerRef,\n containerProps = {},\n size,\n value,\n onChange = () => {},\n ...rest\n },\n ref\n ) => {\n const [innerContainerRef, mergedContainerRef] =\n useForwardedRef(containerRef);\n\n const rightValue = useMemo(\n () => (loading ? <Loading /> : right),\n [loading, right]\n );\n\n const rightHasPaddingValue = useMemo(\n () => (loading ? true : rightHasPadding),\n [loading, rightHasPadding]\n );\n\n const onFocus = useCallback<FocusEventHandler>(\n (e) => {\n // Focus the next element if the container element was focused.\n // The next element will be the input or button in the addon.\n if (disabled || e.target !== innerContainerRef.current) return;\n const focusableElements = getFocusableElements(\n innerContainerRef.current\n );\n focusableElements[0].focus();\n },\n [disabled, innerContainerRef]\n );\n\n const onKeyDown = useCallback<KeyboardEventHandler>(\n (e) => {\n // Focus the previous element if the first element in the input\n // container is focused and the Shift + Tab combination is pressed.\n const focusableElements = getFocusableElements(document);\n const inputFocusableElements = innerContainerRef.current\n ? getFocusableElements(innerContainerRef.current)\n : [];\n const firstInputElementIsFocused =\n inputFocusableElements[0] === document.activeElement;\n if (firstInputElementIsFocused && e.key === 'Tab' && e.shiftKey) {\n const inputContainerIndex = focusableElements.findIndex(\n (el) => el === innerContainerRef.current\n );\n if (inputContainerIndex === 0) return;\n const elementBeforeInputContainer =\n focusableElements[inputContainerIndex - 1];\n elementBeforeInputContainer.focus();\n }\n },\n [innerContainerRef]\n );\n\n return (\n <InputContainer\n disabled={disabled}\n size={size}\n tabIndex={!disabled ? 0 : -1}\n onFocus={onFocus}\n onKeyDown={onKeyDown}\n ref={mergedContainerRef}\n {...containerProps}\n >\n {left && (\n <ThemeOverrider overrides={{ buttonPaddingHorizontal: 0.8 }}>\n <LeftAddon hasPadding={leftHasPadding}>{left}</LeftAddon>\n </ThemeOverrider>\n )}\n\n <StyledInput\n type={type}\n disabled={disabled}\n hasLeft={!!left}\n hasRight={!!right}\n value={value || ''}\n onChange={(e) => onChange(e.target.value, e)}\n {...rest}\n ref={ref}\n />\n\n {rightValue && (\n <ThemeOverrider overrides={{ buttonPaddingHorizontal: 0.8 }}>\n <RightAddon hasPadding={rightHasPaddingValue}>\n {rightValue}\n </RightAddon>\n </ThemeOverrider>\n )}\n </InputContainer>\n );\n }\n);\n\nInput.displayName = 'Input';\n\nexport default Input;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["css","styled","Loading","resetFocusStyles","sizeStyles","transitionStyles","clr","ThemeOverrider","omitEmotionProps","useForwardedRef","React","forwardRef","useCallback","useMemo","getFocusableElements","hoverStyles","p","disabled","theme","inputHoverColorBorder","focusStyles","inputFocusColorBorder","inputFocusColorShadow","disabledStyles","inputDisabledColorText","inputDisabledColorBg","inputDisabledColorBorder","inputDisabledColorPlaceholder","InputContainer","baseHeight","inputColorBg","inputBorderWidth","inputColorBorder","borderRadius","notHasLeftStyles","hasLeft","inputPaddingHorizontal","notHasRightStyles","hasRight","hideSpinButton","StyledInput","inputColorText","inputColorPlaceholder","Addon","LeftAddon","inputAddonPaddingHorizontal","hasPadding","RightAddon","Input","type","left","leftHasPadding","right","rightHasPadding","loading","containerRef","containerProps","size","value","onChange","rest","ref","innerContainerRef","mergedContainerRef","rightValue","createElement","rightHasPaddingValue","onFocus","e","target","current","focusableElements","focus","onKeyDown","document","inputFocusableElements","firstInputElementIsFocused","activeElement","key","shiftKey","inputContainerIndex","findIndex","el","elementBeforeInputContainer","_extends","tabIndex","overrides","buttonPaddingHorizontal","displayName"],"sources":["../../../src/Input/index.tsx"],"sourcesContent":["import { css } from '@emotion/react';\nimport styled from '@emotion/styled';\nimport { Loading } from '@os-design/icons';\nimport {\n resetFocusStyles,\n sizeStyles,\n transitionStyles,\n WithSize,\n} from '@os-design/styles';\nimport { clr, ThemeOverrider } from '@os-design/theming';\nimport { omitEmotionProps, useForwardedRef } from '@os-design/utils';\nimport React, {\n ChangeEvent,\n FocusEventHandler,\n ForwardedRef,\n forwardRef,\n KeyboardEventHandler,\n useCallback,\n useMemo,\n} from 'react';\nimport getFocusableElements from './utils/getFocusableElements';\n\ntype JsxInputProps = Omit<\n JSX.IntrinsicElements['input'],\n 'value' | 'onChange' | 'size' | 'ref'\n>;\nexport interface InputProps extends JsxInputProps, WithSize {\n /**\n * Type of the input.\n * @default text\n */\n type?: JsxInputProps['type'];\n /**\n * The component located on the left side.\n * @default undefined\n */\n left?: React.ReactNode;\n /**\n * Adds padding to the left component.\n * It can be useful when passing an icon or text in the left component.\n * @default false\n */\n leftHasPadding?: boolean;\n /**\n * The component located on the right side.\n * @default undefined\n */\n right?: React.ReactNode;\n /**\n * Adds padding to the right component.\n * It can be useful when passing an icon or text in the right component.\n * @default false\n */\n rightHasPadding?: boolean;\n /**\n * Whether the input is disabled.\n * @default false\n */\n disabled?: boolean;\n /**\n * Shows the loading status.\n * @default false\n */\n loading?: boolean;\n /**\n * The ref of the input container.\n * @default undefined\n */\n containerRef?: ForwardedRef<HTMLDivElement>;\n /**\n * The props of the input container.\n * @default undefined\n */\n containerProps?: JSX.IntrinsicElements['div'];\n /**\n * The input value.\n * @default undefined\n */\n value?: string;\n /**\n * The change event handler.\n * @default undefined\n */\n onChange?: (value: string, e: ChangeEvent<HTMLInputElement>) => void;\n}\n\nconst hoverStyles = (p) =>\n !p.disabled &&\n css`\n @media (hover: hover) {\n &:hover {\n border-color: ${clr(p.theme.inputHoverColorBorder)};\n }\n }\n `;\n\nconst focusStyles = (p) =>\n !p.disabled &&\n css`\n &:focus-within {\n border-color: ${clr(p.theme.inputFocusColorBorder)};\n box-shadow: 0 0 0 0.15em ${clr(p.theme.inputFocusColorShadow)};\n }\n `;\n\nconst disabledStyles = (p) =>\n p.disabled &&\n css`\n cursor: not-allowed;\n color: ${clr(p.theme.inputDisabledColorText)};\n background-color: ${clr(p.theme.inputDisabledColorBg)};\n border-color: ${clr(p.theme.inputDisabledColorBorder)};\n\n input,\n textarea {\n cursor: not-allowed;\n &::placeholder {\n color: ${clr(p.theme.inputDisabledColorPlaceholder)};\n }\n }\n `;\n\ntype InputContainerProps = Pick<InputProps, 'disabled' | 'size'>;\nexport const InputContainer = styled(\n 'div',\n omitEmotionProps('disabled', 'size')\n)<InputContainerProps>`\n ${resetFocusStyles};\n\n display: inline-flex;\n width: 100%;\n height: ${(p) => p.theme.baseHeight}em;\n box-sizing: border-box;\n background-color: ${(p) => clr(p.theme.inputColorBg)};\n\n border: ${(p) => p.theme.inputBorderWidth}px solid\n ${(p) => clr(p.theme.inputColorBorder)};\n border-radius: ${(p) => p.theme.borderRadius}em;\n\n ${hoverStyles};\n ${focusStyles};\n ${disabledStyles};\n ${sizeStyles};\n ${transitionStyles('border-color', 'box-shadow')};\n`;\n\nconst notHasLeftStyles = (p) =>\n !p.hasLeft &&\n css`\n padding-left: ${p.theme.inputPaddingHorizontal}em;\n `;\n\nconst notHasRightStyles = (p) =>\n !p.hasRight &&\n css`\n padding-right: ${p.theme.inputPaddingHorizontal}em;\n `;\n\nconst hideSpinButton = css`\n /* Chrome, Safari, Edge, Opera */\n &::-webkit-outer-spin-button,\n &::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n /* Firefox */\n appearance: textfield;\n`;\n\ninterface StyledInputProps {\n hasLeft?: boolean;\n hasRight?: boolean;\n}\nexport const StyledInput = styled(\n 'input',\n omitEmotionProps('hasLeft', 'hasRight')\n)<StyledInputProps>`\n ${resetFocusStyles};\n border: none;\n font-size: 1em;\n flex: 1;\n width: 100%;\n overflow: hidden;\n\n color: ${(p) => clr(p.theme.inputColorText)};\n background-color: transparent;\n\n &::placeholder {\n color: ${(p) => clr(p.theme.inputColorPlaceholder)};\n }\n\n ${hideSpinButton};\n ${notHasLeftStyles};\n ${notHasRightStyles};\n`;\n\ninterface AddonProps {\n hasPadding: boolean;\n}\nconst Addon = styled('span', omitEmotionProps('hasPadding'))<AddonProps>`\n display: flex;\n align-items: center;\n user-select: none;\n color: ${(p) => clr(p.theme.inputColorPlaceholder)};\n\n svg {\n transform: scale(1.2);\n }\n`;\n\nconst LeftAddon = styled(Addon)`\n padding-right: ${(p) => p.theme.inputAddonPaddingHorizontal}em;\n ${(p) =>\n p.hasPadding &&\n css`\n padding-left: ${p.theme.inputPaddingHorizontal}em;\n `}\n`;\n\nconst RightAddon = styled(Addon)`\n padding-left: ${(p) => p.theme.inputAddonPaddingHorizontal}em;\n ${(p) =>\n p.hasPadding &&\n css`\n padding-right: ${p.theme.inputPaddingHorizontal}em;\n `}\n`;\n\n/**\n * The basic input component.\n */\nconst Input = forwardRef<HTMLInputElement, InputProps>(\n (\n {\n type = 'text',\n left,\n leftHasPadding = false,\n right,\n rightHasPadding = false,\n disabled = false,\n loading = false,\n containerRef,\n containerProps = {},\n size,\n value,\n onChange = () => {},\n ...rest\n },\n ref\n ) => {\n const [innerContainerRef, mergedContainerRef] =\n useForwardedRef(containerRef);\n\n const rightValue = useMemo(\n () => (loading ? <Loading /> : right),\n [loading, right]\n );\n\n const rightHasPaddingValue = useMemo(\n () => (loading ? true : rightHasPadding),\n [loading, rightHasPadding]\n );\n\n const onFocus = useCallback<FocusEventHandler>(\n (e) => {\n // Focus the next element if the container element was focused.\n // The next element will be the input or button in the addon.\n if (disabled || e.target !== innerContainerRef.current) return;\n const focusableElements = getFocusableElements(\n innerContainerRef.current\n );\n focusableElements[0].focus();\n },\n [disabled, innerContainerRef]\n );\n\n const onKeyDown = useCallback<KeyboardEventHandler>(\n (e) => {\n // Focus the previous element if the first element in the input\n // container is focused and the Shift + Tab combination is pressed.\n const focusableElements = getFocusableElements(document);\n const inputFocusableElements = innerContainerRef.current\n ? getFocusableElements(innerContainerRef.current)\n : [];\n const firstInputElementIsFocused =\n inputFocusableElements[0] === document.activeElement;\n if (firstInputElementIsFocused && e.key === 'Tab' && e.shiftKey) {\n const inputContainerIndex = focusableElements.findIndex(\n (el) => el === innerContainerRef.current\n );\n if (inputContainerIndex === 0) return;\n const elementBeforeInputContainer =\n focusableElements[inputContainerIndex - 1];\n elementBeforeInputContainer.focus();\n }\n },\n [innerContainerRef]\n );\n\n return (\n <InputContainer\n disabled={disabled}\n size={size}\n tabIndex={!disabled ? 0 : -1}\n onFocus={onFocus}\n onKeyDown={onKeyDown}\n ref={mergedContainerRef}\n {...containerProps}\n >\n {left && (\n <ThemeOverrider overrides={{ buttonPaddingHorizontal: 0.8 }}>\n <LeftAddon hasPadding={leftHasPadding}>{left}</LeftAddon>\n </ThemeOverrider>\n )}\n\n <StyledInput\n type={type}\n disabled={disabled}\n hasLeft={!!left}\n hasRight={!!right}\n value={value || ''}\n onChange={(e) => onChange(e.target.value, e)}\n {...rest}\n ref={ref}\n />\n\n {rightValue && (\n <ThemeOverrider overrides={{ buttonPaddingHorizontal: 0.8 }}>\n <RightAddon hasPadding={rightHasPaddingValue}>\n {rightValue}\n </RightAddon>\n </ThemeOverrider>\n )}\n </InputContainer>\n );\n }\n);\n\nInput.displayName = 'Input';\n\nexport default Input;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (
|
|
1
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
2
2
|
import { getNextCaret, getNextState, numberToFormattedString, useGetCaretWithinValue, useValidate } from '@os-design/input-number-utils';
|
|
3
3
|
import { useForwardedRef } from '@os-design/utils';
|
|
4
4
|
import React, { forwardRef, useEffect, useMemo, useState } from 'react';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (
|
|
1
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
2
2
|
import styled from '@emotion/styled';
|
|
3
3
|
import { Eye, EyeInvisible } from '@os-design/icons';
|
|
4
4
|
import { ThemeOverrider, useTheme } from '@os-design/theming';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["styled","Eye","EyeInvisible","ThemeOverrider","useTheme","useForwardedRef","useForwardedState","getPasswordScore","React","forwardRef","useEffect","useMemo","useState","Button","Input","Progress","defaultLocale","StrengthMeterProgress","InputPassword","showStrengthMeter","strengthNames","strengthThresholds","locale","value","defaultValue","onChange","onSelect","disabled","right","rest","ref","inputRef","mergedInputRef","forwardedValue","setForwardedValue","selection","setSelection","start","end","invisible","setInvisible","theme","current","setSelectionRange","score","strength","name","color","inputPasswordColorPowerful","inputPasswordColorStrong","inputPasswordColorGood","inputPasswordColorWeak","createElement","Fragment","_extends","type","key","wide","size","onClick","focus","showLabel","hideLabel","e","selectionStart","selectionEnd","currentTarget","overrides","progressColorStroke","progressColorStrokeSuccess","height","percent","text","undefined","displayName"],"sources":["../../../src/InputPassword/index.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport { Eye, EyeInvisible } from '@os-design/icons';\nimport { ThemeOverrider, useTheme } from '@os-design/theming';\nimport { useForwardedRef, useForwardedState } from '@os-design/utils';\nimport getPasswordScore from '@os-team/password-score';\nimport React, { forwardRef, useEffect, useMemo, useState } from 'react';\nimport Button from '../Button';\nimport Input, { InputProps } from '../Input';\nimport Progress from '../Progress';\nimport defaultLocale, { InputPasswordLocale } from './utils/defaultLocale';\n\nexport interface InputPasswordProps extends Omit<InputProps, 'type'> {\n /**\n * Whether the password strength meter is visible.\n * @default false\n */\n showStrengthMeter?: boolean;\n /**\n * The name of a weak, good, strong, and powerful password.\n * Located to the right of the password strength meter.\n * @default undefined\n */\n strengthNames?: Record<'weak' | 'good' | 'strong' | 'powerful', string>;\n /**\n * From what number of score the password is considered\n * good, strong, and powerful.\n * @default [30, 60, 80]\n */\n strengthThresholds?: [number, number, number];\n /**\n * The locale.\n * @default undefined\n */\n locale?: InputPasswordLocale;\n /**\n * The input value.\n * @default undefined\n */\n value?: string;\n /**\n * The default value.\n * @default undefined\n */\n defaultValue?: string;\n /**\n * The change event handler.\n * @default undefined\n */\n onChange?: (value: string) => void;\n}\n\ninterface Selection {\n start: number;\n end: number;\n}\n\nconst StrengthMeterProgress = styled(Progress)`\n margin-top: 0.4em;\n`;\n\n/**\n * The input for entering a password.\n */\nconst InputPassword = forwardRef<HTMLInputElement, InputPasswordProps>(\n (\n {\n showStrengthMeter = false,\n strengthNames,\n strengthThresholds = [30, 60, 80],\n locale = defaultLocale,\n value,\n defaultValue,\n onChange = () => {},\n onSelect = () => {},\n disabled,\n right,\n ...rest\n },\n ref\n ) => {\n const [inputRef, mergedInputRef] = useForwardedRef(ref);\n const [forwardedValue, setForwardedValue] = useForwardedState({\n value,\n defaultValue,\n onChange,\n });\n const [selection, setSelection] = useState<Selection>({ start: 0, end: 0 });\n const [invisible, setInvisible] = useState(true);\n const { theme } = useTheme();\n\n // Update the selection of the input when changing the invisible flag\n useEffect(() => {\n if (!inputRef.current) return;\n inputRef.current.setSelectionRange(selection.start, selection.end);\n }, [inputRef, selection, invisible]);\n\n const score = useMemo(\n () => getPasswordScore(forwardedValue || ''),\n [forwardedValue]\n );\n\n const strength = useMemo(() => {\n if (score >= strengthThresholds[2]) {\n return {\n name: 'powerful',\n color: theme.inputPasswordColorPowerful,\n };\n }\n if (score >= strengthThresholds[1]) {\n return {\n name: 'strong',\n color: theme.inputPasswordColorStrong,\n };\n }\n if (score >= strengthThresholds[0]) {\n return {\n name: 'good',\n color: theme.inputPasswordColorGood,\n };\n }\n return {\n name: 'weak',\n color: theme.inputPasswordColorWeak,\n };\n }, [\n score,\n strengthThresholds,\n theme.inputPasswordColorPowerful,\n theme.inputPasswordColorStrong,\n theme.inputPasswordColorGood,\n theme.inputPasswordColorWeak,\n ]);\n\n return (\n <>\n <Input\n type={invisible ? 'password' : 'text'}\n right={\n <>\n <Button\n key='invisible-button'\n type='ghost'\n wide='never'\n size='small'\n disabled={disabled}\n onClick={() => {\n setInvisible(!invisible);\n if (!inputRef.current) return;\n inputRef.current.focus();\n }}\n aria-label={invisible ? locale.showLabel : locale.hideLabel}\n >\n {invisible ? <EyeInvisible /> : <Eye />}\n </Button>\n {right}\n </>\n }\n value={forwardedValue}\n onChange={setForwardedValue}\n onSelect={(e) => {\n // Update the selection state\n const { selectionStart, selectionEnd } = e.currentTarget;\n setSelection({\n start: selectionStart || 0,\n end: selectionEnd || 0,\n });\n onSelect(e);\n }}\n disabled={disabled}\n {...rest}\n ref={mergedInputRef}\n />\n {showStrengthMeter && (\n <ThemeOverrider\n overrides={{\n progressColorStroke: strength.color,\n get progressColorStrokeSuccess() {\n // eslint-disable-next-line react/no-this-in-sfc\n return this.progressColorStroke;\n },\n }}\n >\n <StrengthMeterProgress\n size='small'\n height='0.25em'\n percent={score}\n text={strengthNames ? strengthNames[strength.name] : undefined}\n />\n </ThemeOverrider>\n )}\n </>\n );\n }\n);\n\nInputPassword.displayName = 'InputPassword';\n\nexport default InputPassword;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["styled","Eye","EyeInvisible","ThemeOverrider","useTheme","useForwardedRef","useForwardedState","getPasswordScore","React","forwardRef","useEffect","useMemo","useState","Button","Input","Progress","defaultLocale","StrengthMeterProgress","InputPassword","showStrengthMeter","strengthNames","strengthThresholds","locale","value","defaultValue","onChange","onSelect","disabled","right","rest","ref","inputRef","mergedInputRef","forwardedValue","setForwardedValue","selection","setSelection","start","end","invisible","setInvisible","theme","current","setSelectionRange","score","strength","name","color","inputPasswordColorPowerful","inputPasswordColorStrong","inputPasswordColorGood","inputPasswordColorWeak","createElement","Fragment","_extends","type","key","wide","size","onClick","focus","showLabel","hideLabel","e","selectionStart","selectionEnd","currentTarget","overrides","progressColorStroke","progressColorStrokeSuccess","height","percent","text","undefined","displayName"],"sources":["../../../src/InputPassword/index.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport { Eye, EyeInvisible } from '@os-design/icons';\nimport { ThemeOverrider, useTheme } from '@os-design/theming';\nimport { useForwardedRef, useForwardedState } from '@os-design/utils';\nimport getPasswordScore from '@os-team/password-score';\nimport React, { forwardRef, useEffect, useMemo, useState } from 'react';\nimport Button from '../Button';\nimport Input, { InputProps } from '../Input';\nimport Progress from '../Progress';\nimport defaultLocale, { InputPasswordLocale } from './utils/defaultLocale';\n\nexport interface InputPasswordProps extends Omit<InputProps, 'type'> {\n /**\n * Whether the password strength meter is visible.\n * @default false\n */\n showStrengthMeter?: boolean;\n /**\n * The name of a weak, good, strong, and powerful password.\n * Located to the right of the password strength meter.\n * @default undefined\n */\n strengthNames?: Record<'weak' | 'good' | 'strong' | 'powerful', string>;\n /**\n * From what number of score the password is considered\n * good, strong, and powerful.\n * @default [30, 60, 80]\n */\n strengthThresholds?: [number, number, number];\n /**\n * The locale.\n * @default undefined\n */\n locale?: InputPasswordLocale;\n /**\n * The input value.\n * @default undefined\n */\n value?: string;\n /**\n * The default value.\n * @default undefined\n */\n defaultValue?: string;\n /**\n * The change event handler.\n * @default undefined\n */\n onChange?: (value: string) => void;\n}\n\ninterface Selection {\n start: number;\n end: number;\n}\n\nconst StrengthMeterProgress = styled(Progress)`\n margin-top: 0.4em;\n`;\n\n/**\n * The input for entering a password.\n */\nconst InputPassword = forwardRef<HTMLInputElement, InputPasswordProps>(\n (\n {\n showStrengthMeter = false,\n strengthNames,\n strengthThresholds = [30, 60, 80],\n locale = defaultLocale,\n value,\n defaultValue,\n onChange = () => {},\n onSelect = () => {},\n disabled,\n right,\n ...rest\n },\n ref\n ) => {\n const [inputRef, mergedInputRef] = useForwardedRef(ref);\n const [forwardedValue, setForwardedValue] = useForwardedState({\n value,\n defaultValue,\n onChange,\n });\n const [selection, setSelection] = useState<Selection>({ start: 0, end: 0 });\n const [invisible, setInvisible] = useState(true);\n const { theme } = useTheme();\n\n // Update the selection of the input when changing the invisible flag\n useEffect(() => {\n if (!inputRef.current) return;\n inputRef.current.setSelectionRange(selection.start, selection.end);\n }, [inputRef, selection, invisible]);\n\n const score = useMemo(\n () => getPasswordScore(forwardedValue || ''),\n [forwardedValue]\n );\n\n const strength = useMemo(() => {\n if (score >= strengthThresholds[2]) {\n return {\n name: 'powerful',\n color: theme.inputPasswordColorPowerful,\n };\n }\n if (score >= strengthThresholds[1]) {\n return {\n name: 'strong',\n color: theme.inputPasswordColorStrong,\n };\n }\n if (score >= strengthThresholds[0]) {\n return {\n name: 'good',\n color: theme.inputPasswordColorGood,\n };\n }\n return {\n name: 'weak',\n color: theme.inputPasswordColorWeak,\n };\n }, [\n score,\n strengthThresholds,\n theme.inputPasswordColorPowerful,\n theme.inputPasswordColorStrong,\n theme.inputPasswordColorGood,\n theme.inputPasswordColorWeak,\n ]);\n\n return (\n <>\n <Input\n type={invisible ? 'password' : 'text'}\n right={\n <>\n <Button\n key='invisible-button'\n type='ghost'\n wide='never'\n size='small'\n disabled={disabled}\n onClick={() => {\n setInvisible(!invisible);\n if (!inputRef.current) return;\n inputRef.current.focus();\n }}\n aria-label={invisible ? locale.showLabel : locale.hideLabel}\n >\n {invisible ? <EyeInvisible /> : <Eye />}\n </Button>\n {right}\n </>\n }\n value={forwardedValue}\n onChange={setForwardedValue}\n onSelect={(e) => {\n // Update the selection state\n const { selectionStart, selectionEnd } = e.currentTarget;\n setSelection({\n start: selectionStart || 0,\n end: selectionEnd || 0,\n });\n onSelect(e);\n }}\n disabled={disabled}\n {...rest}\n ref={mergedInputRef}\n />\n {showStrengthMeter && (\n <ThemeOverrider\n overrides={{\n progressColorStroke: strength.color,\n get progressColorStrokeSuccess() {\n // eslint-disable-next-line react/no-this-in-sfc\n return this.progressColorStroke;\n },\n }}\n >\n <StrengthMeterProgress\n size='small'\n height='0.25em'\n percent={score}\n text={strengthNames ? strengthNames[strength.name] : undefined}\n />\n </ThemeOverrider>\n )}\n </>\n );\n }\n);\n\nInputPassword.displayName = 'InputPassword';\n\nexport default InputPassword;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (
|
|
1
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
2
2
|
import { keyframes } from '@emotion/react';
|
|
3
3
|
import styled from '@emotion/styled';
|
|
4
4
|
import { CloseCircle, Search } from '@os-design/icons';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["keyframes","styled","CloseCircle","Search","ThemeOverrider","useForwardedRef","useForwardedState","React","forwardRef","Button","Input","defaultLocale","fadeIn","ClearButton","p","theme","transitionDelay","InputSearch","locale","value","defaultValue","onChange","disabled","left","leftHasPadding","right","rest","ref","inputRef","mergedInputRef","forwardedValue","setForwardedValue","createElement","_extends","type","key","Fragment","overrides","buttonIconScaleFactor","wide","size","onClick","current","focus","clearLabel","role","displayName"],"sources":["../../../src/InputSearch/index.tsx"],"sourcesContent":["import { keyframes } from '@emotion/react';\nimport styled from '@emotion/styled';\nimport { CloseCircle, Search } from '@os-design/icons';\nimport { ThemeOverrider } from '@os-design/theming';\nimport { useForwardedRef, useForwardedState } from '@os-design/utils';\nimport React, { forwardRef } from 'react';\nimport Button from '../Button';\nimport Input, { InputProps } from '../Input';\nimport defaultLocale, { InputSearchLocale } from './utils/defaultLocale';\n\nexport interface InputSearchProps\n extends Omit<InputProps, 'type' | 'onChange'> {\n /**\n * The locale.\n * @default undefined\n */\n locale?: InputSearchLocale;\n /**\n * The input value.\n * @default undefined\n */\n value?: string;\n /**\n * The default value.\n * @default undefined\n */\n defaultValue?: string;\n /**\n * The change event handler.\n * @default undefined\n */\n onChange?: (value: string) => void;\n}\n\nconst fadeIn = keyframes`\n from { opacity: 0; }\n to { opacity: 1; }\n`;\n\nconst ClearButton = styled(Button)`\n animation: ${fadeIn} ${(p) => p.theme.transitionDelay}ms;\n`;\n\n/**\n * The search input.\n */\nconst InputSearch = forwardRef<HTMLInputElement, InputSearchProps>(\n (\n {\n locale = defaultLocale,\n value,\n defaultValue,\n onChange = () => {},\n disabled,\n left,\n leftHasPadding = true,\n right,\n ...rest\n },\n ref\n ) => {\n const [inputRef, mergedInputRef] = useForwardedRef(ref);\n const [forwardedValue, setForwardedValue] = useForwardedState({\n value,\n defaultValue,\n onChange,\n });\n\n return (\n <Input\n type='text'\n left={left || <Search key='search-icon' />}\n leftHasPadding={leftHasPadding}\n right={\n <>\n {!!forwardedValue && (\n <ThemeOverrider overrides={{ buttonIconScaleFactor: 1.2 }}>\n <ClearButton\n key='clear-button'\n type='ghost'\n wide='never'\n size='small'\n disabled={disabled}\n onClick={() => {\n setForwardedValue('');\n if (!inputRef.current) return;\n inputRef.current.focus();\n }}\n aria-label={locale.clearLabel}\n >\n <CloseCircle />\n </ClearButton>\n </ThemeOverrider>\n )}\n {right}\n </>\n }\n value={forwardedValue}\n onChange={setForwardedValue}\n role='searchbox'\n disabled={disabled}\n {...rest}\n ref={mergedInputRef}\n />\n );\n }\n);\n\nInputSearch.displayName = 'InputSearch';\n\nexport default InputSearch;\n"],"mappings":";AAAA,SAASA,SAAS,QAAQ,gBAAgB;AAC1C,OAAOC,MAAM,MAAM,iBAAiB;AACpC,SAASC,WAAW,EAAEC,MAAM,QAAQ,kBAAkB;AACtD,SAASC,cAAc,QAAQ,oBAAoB;AACnD,SAASC,eAAe,EAAEC,iBAAiB,QAAQ,kBAAkB;AACrE,OAAOC,KAAK,IAAIC,UAAU,QAAQ,OAAO;AACzC,OAAOC,MAAM,MAAM,WAAW;AAC9B,OAAOC,KAAK,MAAsB,UAAU;AAC5C,OAAOC,aAAa,MAA6B,uBAAuB;AA0BxE,MAAMC,MAAM,GAAGZ,
|
|
1
|
+
{"version":3,"file":"index.js","names":["keyframes","styled","CloseCircle","Search","ThemeOverrider","useForwardedRef","useForwardedState","React","forwardRef","Button","Input","defaultLocale","fadeIn","ClearButton","p","theme","transitionDelay","InputSearch","locale","value","defaultValue","onChange","disabled","left","leftHasPadding","right","rest","ref","inputRef","mergedInputRef","forwardedValue","setForwardedValue","createElement","_extends","type","key","Fragment","overrides","buttonIconScaleFactor","wide","size","onClick","current","focus","clearLabel","role","displayName"],"sources":["../../../src/InputSearch/index.tsx"],"sourcesContent":["import { keyframes } from '@emotion/react';\nimport styled from '@emotion/styled';\nimport { CloseCircle, Search } from '@os-design/icons';\nimport { ThemeOverrider } from '@os-design/theming';\nimport { useForwardedRef, useForwardedState } from '@os-design/utils';\nimport React, { forwardRef } from 'react';\nimport Button from '../Button';\nimport Input, { InputProps } from '../Input';\nimport defaultLocale, { InputSearchLocale } from './utils/defaultLocale';\n\nexport interface InputSearchProps\n extends Omit<InputProps, 'type' | 'onChange'> {\n /**\n * The locale.\n * @default undefined\n */\n locale?: InputSearchLocale;\n /**\n * The input value.\n * @default undefined\n */\n value?: string;\n /**\n * The default value.\n * @default undefined\n */\n defaultValue?: string;\n /**\n * The change event handler.\n * @default undefined\n */\n onChange?: (value: string) => void;\n}\n\nconst fadeIn = keyframes`\n from { opacity: 0; }\n to { opacity: 1; }\n`;\n\nconst ClearButton = styled(Button)`\n animation: ${fadeIn} ${(p) => p.theme.transitionDelay}ms;\n`;\n\n/**\n * The search input.\n */\nconst InputSearch = forwardRef<HTMLInputElement, InputSearchProps>(\n (\n {\n locale = defaultLocale,\n value,\n defaultValue,\n onChange = () => {},\n disabled,\n left,\n leftHasPadding = true,\n right,\n ...rest\n },\n ref\n ) => {\n const [inputRef, mergedInputRef] = useForwardedRef(ref);\n const [forwardedValue, setForwardedValue] = useForwardedState({\n value,\n defaultValue,\n onChange,\n });\n\n return (\n <Input\n type='text'\n left={left || <Search key='search-icon' />}\n leftHasPadding={leftHasPadding}\n right={\n <>\n {!!forwardedValue && (\n <ThemeOverrider overrides={{ buttonIconScaleFactor: 1.2 }}>\n <ClearButton\n key='clear-button'\n type='ghost'\n wide='never'\n size='small'\n disabled={disabled}\n onClick={() => {\n setForwardedValue('');\n if (!inputRef.current) return;\n inputRef.current.focus();\n }}\n aria-label={locale.clearLabel}\n >\n <CloseCircle />\n </ClearButton>\n </ThemeOverrider>\n )}\n {right}\n </>\n }\n value={forwardedValue}\n onChange={setForwardedValue}\n role='searchbox'\n disabled={disabled}\n {...rest}\n ref={mergedInputRef}\n />\n );\n }\n);\n\nInputSearch.displayName = 'InputSearch';\n\nexport default InputSearch;\n"],"mappings":";AAAA,SAASA,SAAS,QAAQ,gBAAgB;AAC1C,OAAOC,MAAM,MAAM,iBAAiB;AACpC,SAASC,WAAW,EAAEC,MAAM,QAAQ,kBAAkB;AACtD,SAASC,cAAc,QAAQ,oBAAoB;AACnD,SAASC,eAAe,EAAEC,iBAAiB,QAAQ,kBAAkB;AACrE,OAAOC,KAAK,IAAIC,UAAU,QAAQ,OAAO;AACzC,OAAOC,MAAM,MAAM,WAAW;AAC9B,OAAOC,KAAK,MAAsB,UAAU;AAC5C,OAAOC,aAAa,MAA6B,uBAAuB;AA0BxE,MAAMC,MAAM,GAAGZ,SAAS;AACxB;AACA;AACA,CAAC;AAED,MAAMa,WAAW,GAAGZ,MAAM,CAACQ,MAAM,CAAC;AAClC,eAAeG,MAAM,IAAKE,CAAC,IAAKA,CAAC,CAACC,KAAK,CAACC,eAAe;AACvD,CAAC;;AAED;AACA;AACA;AACA,MAAMC,WAAW,gBAAGT,UAAU,CAC5B,CACE;EACEU,MAAM,GAAGP,aAAa;EACtBQ,KAAK;EACLC,YAAY;EACZC,QAAQ,GAAGA,CAAA,KAAM,CAAC,CAAC;EACnBC,QAAQ;EACRC,IAAI;EACJC,cAAc,GAAG,IAAI;EACrBC,KAAK;EACL,GAAGC;AACL,CAAC,EACDC,GAAG,KACA;EACH,MAAM,CAACC,QAAQ,EAAEC,cAAc,CAAC,GAAGxB,eAAe,CAACsB,GAAG,CAAC;EACvD,MAAM,CAACG,cAAc,EAAEC,iBAAiB,CAAC,GAAGzB,iBAAiB,CAAC;IAC5Da,KAAK;IACLC,YAAY;IACZC;EACF,CAAC,CAAC;EAEF,oBACEd,KAAA,CAAAyB,aAAA,CAACtB,KAAK,EAAAuB,QAAA;IACJC,IAAI,EAAC,MAAM;IACXX,IAAI,EAAEA,IAAI,iBAAIhB,KAAA,CAAAyB,aAAA,CAAC7B,MAAM;MAACgC,GAAG,EAAC;IAAa,CAAE,CAAE;IAC3CX,cAAc,EAAEA,cAAe;IAC/BC,KAAK,eACHlB,KAAA,CAAAyB,aAAA,CAAAzB,KAAA,CAAA6B,QAAA,QACG,CAAC,CAACN,cAAc,iBACfvB,KAAA,CAAAyB,aAAA,CAAC5B,cAAc;MAACiC,SAAS,EAAE;QAAEC,qBAAqB,EAAE;MAAI;IAAE,gBACxD/B,KAAA,CAAAyB,aAAA,CAACnB,WAAW;MACVsB,GAAG,EAAC,cAAc;MAClBD,IAAI,EAAC,OAAO;MACZK,IAAI,EAAC,OAAO;MACZC,IAAI,EAAC,OAAO;MACZlB,QAAQ,EAAEA,QAAS;MACnBmB,OAAO,EAAEA,CAAA,KAAM;QACbV,iBAAiB,CAAC,EAAE,CAAC;QACrB,IAAI,CAACH,QAAQ,CAACc,OAAO,EAAE;QACvBd,QAAQ,CAACc,OAAO,CAACC,KAAK,CAAC,CAAC;MAC1B,CAAE;MACF,cAAYzB,MAAM,CAAC0B;IAAW,gBAE9BrC,KAAA,CAAAyB,aAAA,CAAC9B,WAAW,MAAE,CACH,CACC,CACjB,EACAuB,KACD,CACH;IACDN,KAAK,EAAEW,cAAe;IACtBT,QAAQ,EAAEU,iBAAkB;IAC5Bc,IAAI,EAAC,WAAW;IAChBvB,QAAQ,EAAEA;EAAS,GACfI,IAAI;IACRC,GAAG,EAAEE;EAAe,EACrB,CAAC;AAEN,CACF,CAAC;AAEDZ,WAAW,CAAC6B,WAAW,GAAG,aAAa;AAEvC,eAAe7B,WAAW","ignoreList":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (
|
|
1
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
2
2
|
import styled from '@emotion/styled';
|
|
3
3
|
import { sizeStyles } from '@os-design/styles';
|
|
4
4
|
import { omitEmotionProps } from '@os-design/utils';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["styled","sizeStyles","omitEmotionProps","React","forwardRef","Skeleton","StyledInputSkeleton","p","theme","baseHeight","InputSkeleton","props","ref","createElement","_extends","width","displayName"],"sources":["../../../src/InputSkeleton/index.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport { sizeStyles, WithSize } from '@os-design/styles';\nimport { omitEmotionProps } from '@os-design/utils';\nimport React, { forwardRef } from 'react';\nimport Skeleton, { SkeletonProps } from '../Skeleton';\n\nexport type InputSkeletonProps = Omit<SkeletonProps, 'width'> & WithSize;\n\nconst StyledInputSkeleton = styled(\n Skeleton,\n omitEmotionProps('size')\n)<WithSize>`\n height: ${(p) => p.theme.baseHeight}em;\n ${sizeStyles};\n`;\n\n/**\n * Provides an input placeholder while a user waits for the content to load.\n */\nconst InputSkeleton = forwardRef<HTMLDivElement, InputSkeletonProps>(\n (props, ref) => <StyledInputSkeleton width='100%' {...props} ref={ref} />\n);\n\nInputSkeleton.displayName = 'InputSkeleton';\n\nexport default InputSkeleton;\n"],"mappings":";AAAA,OAAOA,MAAM,MAAM,iBAAiB;AACpC,SAASC,UAAU,QAAkB,mBAAmB;AACxD,SAASC,gBAAgB,QAAQ,kBAAkB;AACnD,OAAOC,KAAK,IAAIC,UAAU,QAAQ,OAAO;AACzC,OAAOC,QAAQ,MAAyB,aAAa;AAIrD,MAAMC,mBAAmB,GAAGN,MAAM,CAChCK,QAAQ,EACRH,gBAAgB,CAAC,MAAM,CACzB,
|
|
1
|
+
{"version":3,"file":"index.js","names":["styled","sizeStyles","omitEmotionProps","React","forwardRef","Skeleton","StyledInputSkeleton","p","theme","baseHeight","InputSkeleton","props","ref","createElement","_extends","width","displayName"],"sources":["../../../src/InputSkeleton/index.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport { sizeStyles, WithSize } from '@os-design/styles';\nimport { omitEmotionProps } from '@os-design/utils';\nimport React, { forwardRef } from 'react';\nimport Skeleton, { SkeletonProps } from '../Skeleton';\n\nexport type InputSkeletonProps = Omit<SkeletonProps, 'width'> & WithSize;\n\nconst StyledInputSkeleton = styled(\n Skeleton,\n omitEmotionProps('size')\n)<WithSize>`\n height: ${(p) => p.theme.baseHeight}em;\n ${sizeStyles};\n`;\n\n/**\n * Provides an input placeholder while a user waits for the content to load.\n */\nconst InputSkeleton = forwardRef<HTMLDivElement, InputSkeletonProps>(\n (props, ref) => <StyledInputSkeleton width='100%' {...props} ref={ref} />\n);\n\nInputSkeleton.displayName = 'InputSkeleton';\n\nexport default InputSkeleton;\n"],"mappings":";AAAA,OAAOA,MAAM,MAAM,iBAAiB;AACpC,SAASC,UAAU,QAAkB,mBAAmB;AACxD,SAASC,gBAAgB,QAAQ,kBAAkB;AACnD,OAAOC,KAAK,IAAIC,UAAU,QAAQ,OAAO;AACzC,OAAOC,QAAQ,MAAyB,aAAa;AAIrD,MAAMC,mBAAmB,GAAGN,MAAM,CAChCK,QAAQ,EACRH,gBAAgB,CAAC,MAAM,CACzB,CAAW;AACX,YAAaK,CAAC,IAAKA,CAAC,CAACC,KAAK,CAACC,UAAU;AACrC,IAAIR,UAAU;AACd,CAAC;;AAED;AACA;AACA;AACA,MAAMS,aAAa,gBAAGN,UAAU,CAC9B,CAACO,KAAK,EAAEC,GAAG,kBAAKT,KAAA,CAAAU,aAAA,CAACP,mBAAmB,EAAAQ,QAAA;EAACC,KAAK,EAAC;AAAM,GAAKJ,KAAK;EAAEC,GAAG,EAAEA;AAAI,EAAE,CAC1E,CAAC;AAEDF,aAAa,CAACM,WAAW,GAAG,eAAe;AAE3C,eAAeN,aAAa","ignoreList":[]}
|
package/dist/esm/Link/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (
|
|
1
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
2
2
|
import { css } from '@emotion/react';
|
|
3
3
|
import styled from '@emotion/styled';
|
|
4
4
|
import { resetFocusStyles, sizeStyles, transitionStyles } from '@os-design/styles';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["css","styled","resetFocusStyles","sizeStyles","transitionStyles","clr","omitEmotionProps","React","forwardRef","underlineBaseStyles","p","theme","linkColor","underlineHoverStyles","underline","underlineAlwaysStyles","disabledStyles","disabled","inputColorPlaceholder","DisabledWrapper","div","StyledLink","Link","as","onMouseDown","rest","ref","createElement","_extends","e","preventDefault","displayName"],"sources":["../../../src/Link/index.tsx"],"sourcesContent":["import { css } from '@emotion/react';\nimport styled from '@emotion/styled';\nimport {\n resetFocusStyles,\n sizeStyles,\n transitionStyles,\n WithSize,\n} from '@os-design/styles';\nimport { clr } from '@os-design/theming';\nimport { omitEmotionProps } from '@os-design/utils';\nimport React, { forwardRef } from 'react';\n\nexport interface ReactRouterLinkProps {\n to?: string;\n replace?: boolean;\n}\n\ntype JsxAProps = Omit<JSX.IntrinsicElements['a'], 'ref'>;\nexport interface LinkProps extends JsxAProps, ReactRouterLinkProps, WithSize {\n /**\n * Type of the underline styles.\n * @default hover\n */\n underline?: 'hover' | 'always' | 'never';\n /**\n * Whether the link is disabled.\n * @default false\n */\n disabled?: boolean;\n /**\n * The custom link component.\n * For example, the Link from react-router-dom.\n * @default undefined\n */\n as?: React.ElementType;\n}\n\nconst underlineBaseStyles = (p) => css`\n position: relative;\n display: inline-block;\n\n &::after {\n position: absolute;\n bottom: 0;\n left: 0;\n content: '';\n height: 0.125em;\n background-color: ${clr(p.theme.linkColor)};\n }\n`;\n\nexport const underlineHoverStyles = (p) =>\n p.underline === 'hover' &&\n css`\n @media (hover: hover) {\n ${underlineBaseStyles(p)};\n\n &::after {\n width: 0;\n opacity: 0;\n ${transitionStyles('width', 'opacity')(p)};\n }\n\n &:hover::after,\n &:focus::after {\n width: 100%;\n opacity: 1;\n }\n }\n `;\n\nexport const underlineAlwaysStyles = (p) =>\n p.underline === 'always' &&\n css`\n ${underlineBaseStyles(p)};\n\n &::after {\n width: 100%;\n opacity: 1;\n }\n `;\n\nconst disabledStyles = (p) =>\n p.disabled &&\n css`\n pointer-events: none;\n\n &,\n &:active,\n &:focus {\n color: ${clr(p.theme.inputColorPlaceholder)};\n }\n `;\n\nexport const DisabledWrapper = styled.div`\n display: inline-block;\n cursor: not-allowed;\n line-height: 1.2;\n`;\n\nconst StyledLink = styled(\n 'a',\n omitEmotionProps('size', 'underline', 'disabled', 'as')\n)<LinkProps>`\n ${resetFocusStyles};\n\n cursor: pointer;\n text-decoration: none;\n line-height: 1.2;\n padding-bottom: 0.1em;\n\n &,\n &:active,\n &:focus {\n color: ${(p) => clr(p.theme.linkColor)};\n }\n\n ${underlineHoverStyles};\n ${underlineAlwaysStyles};\n ${disabledStyles};\n ${sizeStyles};\n`;\n\n/**\n * The link component to navigate between pages.\n */\nconst Link = forwardRef<HTMLAnchorElement, LinkProps>(\n (\n {\n underline = 'hover',\n disabled = false,\n as,\n onMouseDown = () => {},\n ...rest\n },\n ref\n ) => {\n if (disabled) {\n return (\n <DisabledWrapper>\n <StyledLink disabled {...rest} ref={ref} />\n </DisabledWrapper>\n );\n }\n\n return (\n <StyledLink\n underline={underline}\n as={as}\n onMouseDown={(e) => {\n onMouseDown(e);\n e.preventDefault();\n }}\n {...rest}\n ref={ref}\n />\n );\n }\n);\n\nLink.displayName = 'Link';\n\nexport default Link;\n"],"mappings":";AAAA,SAASA,GAAG,QAAQ,gBAAgB;AACpC,OAAOC,MAAM,MAAM,iBAAiB;AACpC,SACEC,gBAAgB,EAChBC,UAAU,EACVC,gBAAgB,QAEX,mBAAmB;AAC1B,SAASC,GAAG,QAAQ,oBAAoB;AACxC,SAASC,gBAAgB,QAAQ,kBAAkB;AACnD,OAAOC,KAAK,IAAIC,UAAU,QAAQ,OAAO;AA2BzC,MAAMC,mBAAmB,GAAIC,CAAC,IAAKV,
|
|
1
|
+
{"version":3,"file":"index.js","names":["css","styled","resetFocusStyles","sizeStyles","transitionStyles","clr","omitEmotionProps","React","forwardRef","underlineBaseStyles","p","theme","linkColor","underlineHoverStyles","underline","underlineAlwaysStyles","disabledStyles","disabled","inputColorPlaceholder","DisabledWrapper","div","StyledLink","Link","as","onMouseDown","rest","ref","createElement","_extends","e","preventDefault","displayName"],"sources":["../../../src/Link/index.tsx"],"sourcesContent":["import { css } from '@emotion/react';\nimport styled from '@emotion/styled';\nimport {\n resetFocusStyles,\n sizeStyles,\n transitionStyles,\n WithSize,\n} from '@os-design/styles';\nimport { clr } from '@os-design/theming';\nimport { omitEmotionProps } from '@os-design/utils';\nimport React, { forwardRef } from 'react';\n\nexport interface ReactRouterLinkProps {\n to?: string;\n replace?: boolean;\n}\n\ntype JsxAProps = Omit<JSX.IntrinsicElements['a'], 'ref'>;\nexport interface LinkProps extends JsxAProps, ReactRouterLinkProps, WithSize {\n /**\n * Type of the underline styles.\n * @default hover\n */\n underline?: 'hover' | 'always' | 'never';\n /**\n * Whether the link is disabled.\n * @default false\n */\n disabled?: boolean;\n /**\n * The custom link component.\n * For example, the Link from react-router-dom.\n * @default undefined\n */\n as?: React.ElementType;\n}\n\nconst underlineBaseStyles = (p) => css`\n position: relative;\n display: inline-block;\n\n &::after {\n position: absolute;\n bottom: 0;\n left: 0;\n content: '';\n height: 0.125em;\n background-color: ${clr(p.theme.linkColor)};\n }\n`;\n\nexport const underlineHoverStyles = (p) =>\n p.underline === 'hover' &&\n css`\n @media (hover: hover) {\n ${underlineBaseStyles(p)};\n\n &::after {\n width: 0;\n opacity: 0;\n ${transitionStyles('width', 'opacity')(p)};\n }\n\n &:hover::after,\n &:focus::after {\n width: 100%;\n opacity: 1;\n }\n }\n `;\n\nexport const underlineAlwaysStyles = (p) =>\n p.underline === 'always' &&\n css`\n ${underlineBaseStyles(p)};\n\n &::after {\n width: 100%;\n opacity: 1;\n }\n `;\n\nconst disabledStyles = (p) =>\n p.disabled &&\n css`\n pointer-events: none;\n\n &,\n &:active,\n &:focus {\n color: ${clr(p.theme.inputColorPlaceholder)};\n }\n `;\n\nexport const DisabledWrapper = styled.div`\n display: inline-block;\n cursor: not-allowed;\n line-height: 1.2;\n`;\n\nconst StyledLink = styled(\n 'a',\n omitEmotionProps('size', 'underline', 'disabled', 'as')\n)<LinkProps>`\n ${resetFocusStyles};\n\n cursor: pointer;\n text-decoration: none;\n line-height: 1.2;\n padding-bottom: 0.1em;\n\n &,\n &:active,\n &:focus {\n color: ${(p) => clr(p.theme.linkColor)};\n }\n\n ${underlineHoverStyles};\n ${underlineAlwaysStyles};\n ${disabledStyles};\n ${sizeStyles};\n`;\n\n/**\n * The link component to navigate between pages.\n */\nconst Link = forwardRef<HTMLAnchorElement, LinkProps>(\n (\n {\n underline = 'hover',\n disabled = false,\n as,\n onMouseDown = () => {},\n ...rest\n },\n ref\n ) => {\n if (disabled) {\n return (\n <DisabledWrapper>\n <StyledLink disabled {...rest} ref={ref} />\n </DisabledWrapper>\n );\n }\n\n return (\n <StyledLink\n underline={underline}\n as={as}\n onMouseDown={(e) => {\n onMouseDown(e);\n e.preventDefault();\n }}\n {...rest}\n ref={ref}\n />\n );\n }\n);\n\nLink.displayName = 'Link';\n\nexport default Link;\n"],"mappings":";AAAA,SAASA,GAAG,QAAQ,gBAAgB;AACpC,OAAOC,MAAM,MAAM,iBAAiB;AACpC,SACEC,gBAAgB,EAChBC,UAAU,EACVC,gBAAgB,QAEX,mBAAmB;AAC1B,SAASC,GAAG,QAAQ,oBAAoB;AACxC,SAASC,gBAAgB,QAAQ,kBAAkB;AACnD,OAAOC,KAAK,IAAIC,UAAU,QAAQ,OAAO;AA2BzC,MAAMC,mBAAmB,GAAIC,CAAC,IAAKV,GAAG;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwBK,GAAG,CAACK,CAAC,CAACC,KAAK,CAACC,SAAS,CAAC;AAC9C;AACA,CAAC;AAED,OAAO,MAAMC,oBAAoB,GAAIH,CAAC,IACpCA,CAAC,CAACI,SAAS,KAAK,OAAO,IACvBd,GAAG;AACL;AACA,QAAQS,mBAAmB,CAACC,CAAC,CAAC;AAC9B;AACA;AACA;AACA;AACA,UAAUN,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,CAACM,CAAC,CAAC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AAEH,OAAO,MAAMK,qBAAqB,GAAIL,CAAC,IACrCA,CAAC,CAACI,SAAS,KAAK,QAAQ,IACxBd,GAAG;AACL,MAAMS,mBAAmB,CAACC,CAAC,CAAC;AAC5B;AACA;AACA;AACA;AACA;AACA,GAAG;AAEH,MAAMM,cAAc,GAAIN,CAAC,IACvBA,CAAC,CAACO,QAAQ,IACVjB,GAAG;AACL;AACA;AACA;AACA;AACA;AACA,eAAeK,GAAG,CAACK,CAAC,CAACC,KAAK,CAACO,qBAAqB,CAAC;AACjD;AACA,GAAG;AAEH,OAAO,MAAMC,eAAe,GAAGlB,MAAM,CAACmB,GAAG;AACzC;AACA;AACA;AACA,CAAC;AAED,MAAMC,UAAU,GAAGpB,MAAM,CACvB,GAAG,EACHK,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,CACxD,CAAY;AACZ,IAAIJ,gBAAgB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAcQ,CAAC,IAAKL,GAAG,CAACK,CAAC,CAACC,KAAK,CAACC,SAAS,CAAC;AAC1C;AACA;AACA,IAAIC,oBAAoB;AACxB,IAAIE,qBAAqB;AACzB,IAAIC,cAAc;AAClB,IAAIb,UAAU;AACd,CAAC;;AAED;AACA;AACA;AACA,MAAMmB,IAAI,gBAAGd,UAAU,CACrB,CACE;EACEM,SAAS,GAAG,OAAO;EACnBG,QAAQ,GAAG,KAAK;EAChBM,EAAE;EACFC,WAAW,GAAGA,CAAA,KAAM,CAAC,CAAC;EACtB,GAAGC;AACL,CAAC,EACDC,GAAG,KACA;EACH,IAAIT,QAAQ,EAAE;IACZ,oBACEV,KAAA,CAAAoB,aAAA,CAACR,eAAe,qBACdZ,KAAA,CAAAoB,aAAA,CAACN,UAAU,EAAAO,QAAA;MAACX,QAAQ;IAAA,GAAKQ,IAAI;MAAEC,GAAG,EAAEA;IAAI,EAAE,CAC3B,CAAC;EAEtB;EAEA,oBACEnB,KAAA,CAAAoB,aAAA,CAACN,UAAU,EAAAO,QAAA;IACTd,SAAS,EAAEA,SAAU;IACrBS,EAAE,EAAEA,EAAG;IACPC,WAAW,EAAGK,CAAC,IAAK;MAClBL,WAAW,CAACK,CAAC,CAAC;MACdA,CAAC,CAACC,cAAc,CAAC,CAAC;IACpB;EAAE,GACEL,IAAI;IACRC,GAAG,EAAEA;EAAI,EACV,CAAC;AAEN,CACF,CAAC;AAEDJ,IAAI,CAACS,WAAW,GAAG,MAAM;AAEzB,eAAeT,IAAI","ignoreList":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (
|
|
1
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
2
2
|
import { css } from '@emotion/react';
|
|
3
3
|
import styled from '@emotion/styled';
|
|
4
4
|
import { resetButtonStyles, sizeStyles } from '@os-design/styles';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["css","styled","resetButtonStyles","sizeStyles","clr","omitEmotionProps","React","forwardRef","DisabledWrapper","underlineAlwaysStyles","underlineHoverStyles","disabledStyles","p","disabled","theme","inputColorPlaceholder","StyledButton","linkColor","LinkButton","underline","onMouseDown","rest","ref","createElement","_extends","e","preventDefault","displayName"],"sources":["../../../src/LinkButton/index.tsx"],"sourcesContent":["import { css } from '@emotion/react';\nimport styled from '@emotion/styled';\nimport { resetButtonStyles, sizeStyles, WithSize } from '@os-design/styles';\nimport { clr } from '@os-design/theming';\nimport { omitEmotionProps } from '@os-design/utils';\nimport React, { forwardRef } from 'react';\nimport {\n DisabledWrapper,\n underlineAlwaysStyles,\n underlineHoverStyles,\n} from '../Link';\n\ntype JsxButtonProps = Omit<JSX.IntrinsicElements['button'], 'ref'>;\n\nexport interface LinkButtonProps extends JsxButtonProps, WithSize {\n /**\n * Type of the underline styles.\n * @default hover\n */\n underline?: 'hover' | 'always' | 'never';\n /**\n * Whether the link is disabled.\n * @default false\n */\n disabled?: boolean;\n}\n\nconst disabledStyles = (p) =>\n p.disabled &&\n css`\n cursor: inherit;\n color: ${clr(p.theme.inputColorPlaceholder)};\n `;\n\nconst StyledButton = styled(\n 'button',\n omitEmotionProps('size', 'underline')\n)<LinkButtonProps>`\n ${resetButtonStyles};\n\n cursor: pointer;\n text-align: left;\n line-height: 1.2;\n padding-bottom: 0.1em;\n color: ${(p) => clr(p.theme.linkColor)};\n\n ${underlineHoverStyles};\n ${underlineAlwaysStyles};\n ${disabledStyles};\n ${sizeStyles};\n`;\n\n/**\n * The link component that is rendered as a button.\n */\nconst LinkButton = forwardRef<HTMLButtonElement, LinkButtonProps>(\n (\n { underline = 'hover', disabled = false, onMouseDown = () => {}, ...rest },\n ref\n ) => {\n if (disabled) {\n return (\n <DisabledWrapper>\n <StyledButton disabled {...rest} ref={ref} />\n </DisabledWrapper>\n );\n }\n\n return (\n <StyledButton\n underline={underline}\n onMouseDown={(e) => {\n onMouseDown(e);\n e.preventDefault();\n }}\n {...rest}\n ref={ref}\n />\n );\n }\n);\n\nLinkButton.displayName = 'LinkButton';\n\nexport default LinkButton;\n"],"mappings":";AAAA,SAASA,GAAG,QAAQ,gBAAgB;AACpC,OAAOC,MAAM,MAAM,iBAAiB;AACpC,SAASC,iBAAiB,EAAEC,UAAU,QAAkB,mBAAmB;AAC3E,SAASC,GAAG,QAAQ,oBAAoB;AACxC,SAASC,gBAAgB,QAAQ,kBAAkB;AACnD,OAAOC,KAAK,IAAIC,UAAU,QAAQ,OAAO;AACzC,SACEC,eAAe,EACfC,qBAAqB,EACrBC,oBAAoB,QACf,SAAS;AAiBhB,MAAMC,cAAc,GAAIC,CAAC,IACvBA,CAAC,CAACC,QAAQ,IACVb,
|
|
1
|
+
{"version":3,"file":"index.js","names":["css","styled","resetButtonStyles","sizeStyles","clr","omitEmotionProps","React","forwardRef","DisabledWrapper","underlineAlwaysStyles","underlineHoverStyles","disabledStyles","p","disabled","theme","inputColorPlaceholder","StyledButton","linkColor","LinkButton","underline","onMouseDown","rest","ref","createElement","_extends","e","preventDefault","displayName"],"sources":["../../../src/LinkButton/index.tsx"],"sourcesContent":["import { css } from '@emotion/react';\nimport styled from '@emotion/styled';\nimport { resetButtonStyles, sizeStyles, WithSize } from '@os-design/styles';\nimport { clr } from '@os-design/theming';\nimport { omitEmotionProps } from '@os-design/utils';\nimport React, { forwardRef } from 'react';\nimport {\n DisabledWrapper,\n underlineAlwaysStyles,\n underlineHoverStyles,\n} from '../Link';\n\ntype JsxButtonProps = Omit<JSX.IntrinsicElements['button'], 'ref'>;\n\nexport interface LinkButtonProps extends JsxButtonProps, WithSize {\n /**\n * Type of the underline styles.\n * @default hover\n */\n underline?: 'hover' | 'always' | 'never';\n /**\n * Whether the link is disabled.\n * @default false\n */\n disabled?: boolean;\n}\n\nconst disabledStyles = (p) =>\n p.disabled &&\n css`\n cursor: inherit;\n color: ${clr(p.theme.inputColorPlaceholder)};\n `;\n\nconst StyledButton = styled(\n 'button',\n omitEmotionProps('size', 'underline')\n)<LinkButtonProps>`\n ${resetButtonStyles};\n\n cursor: pointer;\n text-align: left;\n line-height: 1.2;\n padding-bottom: 0.1em;\n color: ${(p) => clr(p.theme.linkColor)};\n\n ${underlineHoverStyles};\n ${underlineAlwaysStyles};\n ${disabledStyles};\n ${sizeStyles};\n`;\n\n/**\n * The link component that is rendered as a button.\n */\nconst LinkButton = forwardRef<HTMLButtonElement, LinkButtonProps>(\n (\n { underline = 'hover', disabled = false, onMouseDown = () => {}, ...rest },\n ref\n ) => {\n if (disabled) {\n return (\n <DisabledWrapper>\n <StyledButton disabled {...rest} ref={ref} />\n </DisabledWrapper>\n );\n }\n\n return (\n <StyledButton\n underline={underline}\n onMouseDown={(e) => {\n onMouseDown(e);\n e.preventDefault();\n }}\n {...rest}\n ref={ref}\n />\n );\n }\n);\n\nLinkButton.displayName = 'LinkButton';\n\nexport default LinkButton;\n"],"mappings":";AAAA,SAASA,GAAG,QAAQ,gBAAgB;AACpC,OAAOC,MAAM,MAAM,iBAAiB;AACpC,SAASC,iBAAiB,EAAEC,UAAU,QAAkB,mBAAmB;AAC3E,SAASC,GAAG,QAAQ,oBAAoB;AACxC,SAASC,gBAAgB,QAAQ,kBAAkB;AACnD,OAAOC,KAAK,IAAIC,UAAU,QAAQ,OAAO;AACzC,SACEC,eAAe,EACfC,qBAAqB,EACrBC,oBAAoB,QACf,SAAS;AAiBhB,MAAMC,cAAc,GAAIC,CAAC,IACvBA,CAAC,CAACC,QAAQ,IACVb,GAAG;AACL;AACA,aAAaI,GAAG,CAACQ,CAAC,CAACE,KAAK,CAACC,qBAAqB,CAAC;AAC/C,GAAG;AAEH,MAAMC,YAAY,GAAGf,MAAM,CACzB,QAAQ,EACRI,gBAAgB,CAAC,MAAM,EAAE,WAAW,CACtC,CAAkB;AAClB,IAAIH,iBAAiB;AACrB;AACA;AACA;AACA;AACA;AACA,WAAYU,CAAC,IAAKR,GAAG,CAACQ,CAAC,CAACE,KAAK,CAACG,SAAS,CAAC;AACxC;AACA,IAAIP,oBAAoB;AACxB,IAAID,qBAAqB;AACzB,IAAIE,cAAc;AAClB,IAAIR,UAAU;AACd,CAAC;;AAED;AACA;AACA;AACA,MAAMe,UAAU,gBAAGX,UAAU,CAC3B,CACE;EAAEY,SAAS,GAAG,OAAO;EAAEN,QAAQ,GAAG,KAAK;EAAEO,WAAW,GAAGA,CAAA,KAAM,CAAC,CAAC;EAAE,GAAGC;AAAK,CAAC,EAC1EC,GAAG,KACA;EACH,IAAIT,QAAQ,EAAE;IACZ,oBACEP,KAAA,CAAAiB,aAAA,CAACf,eAAe,qBACdF,KAAA,CAAAiB,aAAA,CAACP,YAAY,EAAAQ,QAAA;MAACX,QAAQ;IAAA,GAAKQ,IAAI;MAAEC,GAAG,EAAEA;IAAI,EAAE,CAC7B,CAAC;EAEtB;EAEA,oBACEhB,KAAA,CAAAiB,aAAA,CAACP,YAAY,EAAAQ,QAAA;IACXL,SAAS,EAAEA,SAAU;IACrBC,WAAW,EAAGK,CAAC,IAAK;MAClBL,WAAW,CAACK,CAAC,CAAC;MACdA,CAAC,CAACC,cAAc,CAAC,CAAC;IACpB;EAAE,GACEL,IAAI;IACRC,GAAG,EAAEA;EAAI,EACV,CAAC;AAEN,CACF,CAAC;AAEDJ,UAAU,CAACS,WAAW,GAAG,YAAY;AAErC,eAAeT,UAAU","ignoreList":[]}
|
package/dist/esm/List/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (
|
|
1
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
2
2
|
import { useIsMinWidth } from '@os-design/media';
|
|
3
3
|
import { useTheme } from '@os-design/theming';
|
|
4
4
|
import { useFontSize, useForwardedRef, useSafeAreaInset, useSize } from '@os-design/utils';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["useIsMinWidth","useTheme","useFontSize","useForwardedRef","useSafeAreaInset","useSize","React","forwardRef","useCallback","useContext","useMemo","FixedSizeList","LayoutContext","WindowScroller","useRWLoadNext","List","itemCount","itemHeight","threshold","overscanCount","height","heightProp","paddingTop","paddingBottom","style","empty","onLoadNext","itemRenderer","rest","ref","listRef","mergedListRef","size","fontSize","document","body","hasNavigation","hasPageHeader","theme","isMinMd","safeAreaInset","itemSize","paddingTopSize","pageHeaderHeight","paddingBottomSize","navigationTabHeight","bottom","loadNext","windowScrollHandler","top","current","scrollTo","InnerElement","innerStyle","innerRest","createElement","_extends","parseFloat","listChildren","childrenStyle","childrenRest","toString","EmptyComponent","Fragment","renderList","width","onScroll","scrollOffset","undefined","innerElementType","displayName","default"],"sources":["../../../src/List/index.tsx"],"sourcesContent":["import { useIsMinWidth } from '@os-design/media';\nimport { useTheme } from '@os-design/theming';\nimport {\n useFontSize,\n useForwardedRef,\n useSafeAreaInset,\n useSize,\n} from '@os-design/utils';\nimport React, {\n CSSProperties,\n forwardRef,\n useCallback,\n useContext,\n useMemo,\n} from 'react';\nimport {\n FixedSizeList,\n ListChildComponentProps,\n ListProps as RWListProps,\n} from 'react-window';\nimport LayoutContext from '../Layout/LayoutContext';\nimport WindowScroller, { ScrollPosition } from './WindowScroller';\nimport useRWLoadNext from './utils/useRWLoadNext';\n\nexport interface ListProps extends Partial<RWListProps> {\n /**\n * Total number of items in the list.\n */\n itemCount: number;\n /**\n * The item height in em.\n * @default 4\n */\n itemHeight?: number;\n /**\n * A threshold N means that the onLoadNext function calls when a user scrolls all items except N.\n * @default 10\n */\n threshold?: number;\n /**\n * Defines how many items outside of the visible \"window\" to render at all times.\n * @default 10\n */\n overscanCount?: number;\n /**\n * The height of the list in px.\n * @default undefined\n */\n height?: number;\n /**\n * The top padding in em.\n * @default 0\n */\n paddingTop?: number;\n /**\n * The bottom padding in em.\n * @default 0\n */\n paddingBottom?: number;\n /**\n * The inline css style.\n * @default undefined\n */\n style?: CSSProperties;\n /**\n * The component that renders if the list is empty.\n * @default undefined\n */\n empty?: React.ReactNode;\n /**\n * The callback to load more items.\n * @default undefined\n */\n onLoadNext?: () => void;\n /**\n * The callback to render items.\n * @default () => null\n */\n itemRenderer?: React.FC<ListChildComponentProps>;\n}\n\n/**\n * Virtualized list.\n * Used the react-window library.\n */\nconst List = forwardRef<FixedSizeList, ListProps>(\n (\n {\n itemCount,\n itemHeight = 4,\n threshold = 10,\n overscanCount = 10,\n height: heightProp,\n paddingTop = 0,\n paddingBottom = 0,\n style = {},\n empty,\n onLoadNext = () => {},\n itemRenderer = () => null,\n ...rest\n },\n ref\n ) => {\n const [listRef, mergedListRef] = useForwardedRef(ref);\n const size = useSize();\n const fontSize = useFontSize(document.body);\n const { hasNavigation, hasPageHeader } = useContext(LayoutContext);\n const { theme } = useTheme();\n const isMinMd = useIsMinWidth('md');\n const safeAreaInset = useSafeAreaInset();\n\n const itemSize = useMemo(\n () => itemHeight * fontSize,\n [itemHeight, fontSize]\n );\n\n const paddingTopSize = useMemo(\n () =>\n ((hasPageHeader ? theme.pageHeaderHeight[isMinMd ? 1 : 0] : 0) +\n paddingTop) *\n fontSize,\n [hasPageHeader, theme.pageHeaderHeight, isMinMd, paddingTop, fontSize]\n );\n\n const paddingBottomSize = useMemo(\n () =>\n ((hasNavigation && !isMinMd ? theme.navigationTabHeight : 0) +\n paddingBottom) *\n fontSize +\n safeAreaInset.bottom,\n [\n hasNavigation,\n theme.navigationTabHeight,\n isMinMd,\n paddingBottom,\n fontSize,\n safeAreaInset.bottom,\n ]\n );\n\n const height = useMemo(\n () => heightProp || size.height,\n [heightProp, size.height]\n );\n\n const loadNext = useRWLoadNext({\n itemCount,\n threshold,\n itemSize,\n paddingTop: paddingTopSize,\n height,\n onLoadNext,\n });\n\n const windowScrollHandler = useCallback(\n ({ top }: ScrollPosition) => {\n // Set the scroll position to the list\n if (listRef.current) listRef.current.scrollTo(top);\n loadNext(top);\n },\n [listRef, loadNext]\n );\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const InnerElement = useCallback(\n ({ style: innerStyle, ...innerRest }) => (\n <div\n style={{\n ...innerStyle,\n height: `${\n parseFloat(innerStyle.height) + paddingTopSize + paddingBottomSize\n }px`,\n }}\n {...innerRest}\n />\n ),\n [paddingBottomSize, paddingTopSize]\n );\n\n const listChildren = useCallback<RWListProps['children']>(\n ({ style: childrenStyle, ...childrenRest }) =>\n itemRenderer({\n style: {\n ...childrenStyle,\n top: `${\n parseFloat(\n childrenStyle.top ? childrenStyle.top.toString() : '0'\n ) + paddingTopSize\n }px`,\n },\n ...childrenRest,\n }),\n [itemRenderer, paddingTopSize]\n );\n\n // eslint-disable-next-line react/jsx-no-useless-fragment\n const EmptyComponent = useCallback(() => <>{empty}</>, [empty]);\n\n const renderList = useCallback(\n () => (\n <FixedSizeList\n ref={mergedListRef}\n itemCount={itemCount}\n width='100%'\n height={height}\n itemSize={itemSize}\n style={heightProp ? style : { ...style, height: '100% important!' }}\n overscanCount={overscanCount}\n onScroll={\n heightProp\n ? ({ scrollOffset }) => loadNext(scrollOffset)\n : undefined\n }\n innerElementType={itemCount > 0 ? InnerElement : EmptyComponent}\n {...rest}\n >\n {listChildren}\n </FixedSizeList>\n ),\n [\n EmptyComponent,\n InnerElement,\n height,\n heightProp,\n itemCount,\n itemSize,\n listChildren,\n loadNext,\n mergedListRef,\n overscanCount,\n rest,\n style,\n ]\n );\n\n if (heightProp) {\n return renderList();\n }\n\n return (\n <WindowScroller onScroll={windowScrollHandler}>\n {renderList()}\n </WindowScroller>\n );\n }\n);\n\nList.displayName = 'List';\n\nexport { default as WindowScroller } from './WindowScroller';\nexport { default as useRWLoadNext } from './utils/useRWLoadNext';\n\nexport default List;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["useIsMinWidth","useTheme","useFontSize","useForwardedRef","useSafeAreaInset","useSize","React","forwardRef","useCallback","useContext","useMemo","FixedSizeList","LayoutContext","WindowScroller","useRWLoadNext","List","itemCount","itemHeight","threshold","overscanCount","height","heightProp","paddingTop","paddingBottom","style","empty","onLoadNext","itemRenderer","rest","ref","listRef","mergedListRef","size","fontSize","document","body","hasNavigation","hasPageHeader","theme","isMinMd","safeAreaInset","itemSize","paddingTopSize","pageHeaderHeight","paddingBottomSize","navigationTabHeight","bottom","loadNext","windowScrollHandler","top","current","scrollTo","InnerElement","innerStyle","innerRest","createElement","_extends","parseFloat","listChildren","childrenStyle","childrenRest","toString","EmptyComponent","Fragment","renderList","width","onScroll","scrollOffset","undefined","innerElementType","displayName","default"],"sources":["../../../src/List/index.tsx"],"sourcesContent":["import { useIsMinWidth } from '@os-design/media';\nimport { useTheme } from '@os-design/theming';\nimport {\n useFontSize,\n useForwardedRef,\n useSafeAreaInset,\n useSize,\n} from '@os-design/utils';\nimport React, {\n CSSProperties,\n forwardRef,\n useCallback,\n useContext,\n useMemo,\n} from 'react';\nimport {\n FixedSizeList,\n ListChildComponentProps,\n ListProps as RWListProps,\n} from 'react-window';\nimport LayoutContext from '../Layout/LayoutContext';\nimport WindowScroller, { ScrollPosition } from './WindowScroller';\nimport useRWLoadNext from './utils/useRWLoadNext';\n\nexport interface ListProps extends Partial<RWListProps> {\n /**\n * Total number of items in the list.\n */\n itemCount: number;\n /**\n * The item height in em.\n * @default 4\n */\n itemHeight?: number;\n /**\n * A threshold N means that the onLoadNext function calls when a user scrolls all items except N.\n * @default 10\n */\n threshold?: number;\n /**\n * Defines how many items outside of the visible \"window\" to render at all times.\n * @default 10\n */\n overscanCount?: number;\n /**\n * The height of the list in px.\n * @default undefined\n */\n height?: number;\n /**\n * The top padding in em.\n * @default 0\n */\n paddingTop?: number;\n /**\n * The bottom padding in em.\n * @default 0\n */\n paddingBottom?: number;\n /**\n * The inline css style.\n * @default undefined\n */\n style?: CSSProperties;\n /**\n * The component that renders if the list is empty.\n * @default undefined\n */\n empty?: React.ReactNode;\n /**\n * The callback to load more items.\n * @default undefined\n */\n onLoadNext?: () => void;\n /**\n * The callback to render items.\n * @default () => null\n */\n itemRenderer?: React.FC<ListChildComponentProps>;\n}\n\n/**\n * Virtualized list.\n * Used the react-window library.\n */\nconst List = forwardRef<FixedSizeList, ListProps>(\n (\n {\n itemCount,\n itemHeight = 4,\n threshold = 10,\n overscanCount = 10,\n height: heightProp,\n paddingTop = 0,\n paddingBottom = 0,\n style = {},\n empty,\n onLoadNext = () => {},\n itemRenderer = () => null,\n ...rest\n },\n ref\n ) => {\n const [listRef, mergedListRef] = useForwardedRef(ref);\n const size = useSize();\n const fontSize = useFontSize(document.body);\n const { hasNavigation, hasPageHeader } = useContext(LayoutContext);\n const { theme } = useTheme();\n const isMinMd = useIsMinWidth('md');\n const safeAreaInset = useSafeAreaInset();\n\n const itemSize = useMemo(\n () => itemHeight * fontSize,\n [itemHeight, fontSize]\n );\n\n const paddingTopSize = useMemo(\n () =>\n ((hasPageHeader ? theme.pageHeaderHeight[isMinMd ? 1 : 0] : 0) +\n paddingTop) *\n fontSize,\n [hasPageHeader, theme.pageHeaderHeight, isMinMd, paddingTop, fontSize]\n );\n\n const paddingBottomSize = useMemo(\n () =>\n ((hasNavigation && !isMinMd ? theme.navigationTabHeight : 0) +\n paddingBottom) *\n fontSize +\n safeAreaInset.bottom,\n [\n hasNavigation,\n theme.navigationTabHeight,\n isMinMd,\n paddingBottom,\n fontSize,\n safeAreaInset.bottom,\n ]\n );\n\n const height = useMemo(\n () => heightProp || size.height,\n [heightProp, size.height]\n );\n\n const loadNext = useRWLoadNext({\n itemCount,\n threshold,\n itemSize,\n paddingTop: paddingTopSize,\n height,\n onLoadNext,\n });\n\n const windowScrollHandler = useCallback(\n ({ top }: ScrollPosition) => {\n // Set the scroll position to the list\n if (listRef.current) listRef.current.scrollTo(top);\n loadNext(top);\n },\n [listRef, loadNext]\n );\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const InnerElement = useCallback(\n ({ style: innerStyle, ...innerRest }) => (\n <div\n style={{\n ...innerStyle,\n height: `${\n parseFloat(innerStyle.height) + paddingTopSize + paddingBottomSize\n }px`,\n }}\n {...innerRest}\n />\n ),\n [paddingBottomSize, paddingTopSize]\n );\n\n const listChildren = useCallback<RWListProps['children']>(\n ({ style: childrenStyle, ...childrenRest }) =>\n itemRenderer({\n style: {\n ...childrenStyle,\n top: `${\n parseFloat(\n childrenStyle.top ? childrenStyle.top.toString() : '0'\n ) + paddingTopSize\n }px`,\n },\n ...childrenRest,\n }),\n [itemRenderer, paddingTopSize]\n );\n\n // eslint-disable-next-line react/jsx-no-useless-fragment\n const EmptyComponent = useCallback(() => <>{empty}</>, [empty]);\n\n const renderList = useCallback(\n () => (\n <FixedSizeList\n ref={mergedListRef}\n itemCount={itemCount}\n width='100%'\n height={height}\n itemSize={itemSize}\n style={heightProp ? style : { ...style, height: '100% important!' }}\n overscanCount={overscanCount}\n onScroll={\n heightProp\n ? ({ scrollOffset }) => loadNext(scrollOffset)\n : undefined\n }\n innerElementType={itemCount > 0 ? InnerElement : EmptyComponent}\n {...rest}\n >\n {listChildren}\n </FixedSizeList>\n ),\n [\n EmptyComponent,\n InnerElement,\n height,\n heightProp,\n itemCount,\n itemSize,\n listChildren,\n loadNext,\n mergedListRef,\n overscanCount,\n rest,\n style,\n ]\n );\n\n if (heightProp) {\n return renderList();\n }\n\n return (\n <WindowScroller onScroll={windowScrollHandler}>\n {renderList()}\n </WindowScroller>\n );\n }\n);\n\nList.displayName = 'List';\n\nexport { default as WindowScroller } from './WindowScroller';\nexport { default as useRWLoadNext } from './utils/useRWLoadNext';\n\nexport default List;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (
|
|
1
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
2
2
|
import styled from '@emotion/styled';
|
|
3
3
|
import { ellipsisStyles, horizontalPaddingStyles } from '@os-design/styles';
|
|
4
4
|
import { clr } from '@os-design/theming';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["styled","ellipsisStyles","horizontalPaddingStyles","clr","React","forwardRef","ListItemActions","Container","p","theme","listItemColorBorder","Content","div","Title","colorText","Description","listItemColorDescription","sizes","small","LeftAddon","listItemAddonPaddingHorizontal","RightAddon","ListItem","title","description","left","right","children","rest","ref","createElement","_extends","displayName"],"sources":["../../../src/ListItem/index.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport { ellipsisStyles, horizontalPaddingStyles } from '@os-design/styles';\nimport { clr } from '@os-design/theming';\nimport React, { forwardRef } from 'react';\nimport ListItemActions, { ListItemActionsProps } from '../ListItemActions';\n\nexport interface ListItemProps extends ListItemActionsProps {\n /**\n * The title of the item.\n */\n title?: string;\n /**\n * The description of the item.\n * @default undefined\n */\n description?: string;\n /**\n * The component located on the left side.\n * For example, avatar, button, checkbox.\n * @default undefined\n */\n left?: React.ReactNode;\n /**\n * The component located on the right side.\n * For example, date.\n */\n right?: React.ReactNode;\n}\n\nconst Container = styled(ListItemActions)`\n box-sizing: border-box;\n min-height: 4em;\n overflow: hidden;\n\n display: flex;\n align-items: center;\n\n &:not(:last-of-type) {\n border-bottom: 1px solid ${(p) => clr(p.theme.listItemColorBorder)};\n }\n\n ${horizontalPaddingStyles()};\n`;\n\nconst Content = styled.div`\n overflow: hidden;\n`;\n\nconst Title = styled.div`\n color: ${(p) => clr(p.theme.colorText)};\n font-weight: 500;\n ${ellipsisStyles};\n`;\n\nconst Description = styled.div`\n color: ${(p) => clr(p.theme.listItemColorDescription)};\n font-size: ${(p) => p.theme.sizes.small}em;\n ${ellipsisStyles};\n`;\n\nconst LeftAddon = styled.div`\n color: ${(p) => clr(p.theme.colorText)};\n padding-right: ${(p) => p.theme.listItemAddonPaddingHorizontal}em;\n`;\n\nconst RightAddon = styled.div`\n color: ${(p) => clr(p.theme.colorText)};\n margin-left: auto;\n padding-left: ${(p) => p.theme.listItemAddonPaddingHorizontal}em;\n`;\n\n/**\n * The base list item.\n */\nconst ListItem = forwardRef<HTMLDivElement, ListItemProps>(\n ({ title, description, left, right, children, ...rest }, ref) => (\n <Container {...rest} ref={ref}>\n {left && <LeftAddon>{left}</LeftAddon>}\n\n {children || (\n <Content>\n <Title>{title}</Title>\n {description && <Description>{description}</Description>}\n </Content>\n )}\n\n {right && <RightAddon>{right}</RightAddon>}\n </Container>\n )\n);\n\nListItem.displayName = 'ListItem';\n\nexport default ListItem;\n"],"mappings":";AAAA,OAAOA,MAAM,MAAM,iBAAiB;AACpC,SAASC,cAAc,EAAEC,uBAAuB,QAAQ,mBAAmB;AAC3E,SAASC,GAAG,QAAQ,oBAAoB;AACxC,OAAOC,KAAK,IAAIC,UAAU,QAAQ,OAAO;AACzC,OAAOC,eAAe,MAAgC,oBAAoB;AAyB1E,MAAMC,SAAS,GAAGP,MAAM,CAACM,eAAe,
|
|
1
|
+
{"version":3,"file":"index.js","names":["styled","ellipsisStyles","horizontalPaddingStyles","clr","React","forwardRef","ListItemActions","Container","p","theme","listItemColorBorder","Content","div","Title","colorText","Description","listItemColorDescription","sizes","small","LeftAddon","listItemAddonPaddingHorizontal","RightAddon","ListItem","title","description","left","right","children","rest","ref","createElement","_extends","displayName"],"sources":["../../../src/ListItem/index.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport { ellipsisStyles, horizontalPaddingStyles } from '@os-design/styles';\nimport { clr } from '@os-design/theming';\nimport React, { forwardRef } from 'react';\nimport ListItemActions, { ListItemActionsProps } from '../ListItemActions';\n\nexport interface ListItemProps extends ListItemActionsProps {\n /**\n * The title of the item.\n */\n title?: string;\n /**\n * The description of the item.\n * @default undefined\n */\n description?: string;\n /**\n * The component located on the left side.\n * For example, avatar, button, checkbox.\n * @default undefined\n */\n left?: React.ReactNode;\n /**\n * The component located on the right side.\n * For example, date.\n */\n right?: React.ReactNode;\n}\n\nconst Container = styled(ListItemActions)`\n box-sizing: border-box;\n min-height: 4em;\n overflow: hidden;\n\n display: flex;\n align-items: center;\n\n &:not(:last-of-type) {\n border-bottom: 1px solid ${(p) => clr(p.theme.listItemColorBorder)};\n }\n\n ${horizontalPaddingStyles()};\n`;\n\nconst Content = styled.div`\n overflow: hidden;\n`;\n\nconst Title = styled.div`\n color: ${(p) => clr(p.theme.colorText)};\n font-weight: 500;\n ${ellipsisStyles};\n`;\n\nconst Description = styled.div`\n color: ${(p) => clr(p.theme.listItemColorDescription)};\n font-size: ${(p) => p.theme.sizes.small}em;\n ${ellipsisStyles};\n`;\n\nconst LeftAddon = styled.div`\n color: ${(p) => clr(p.theme.colorText)};\n padding-right: ${(p) => p.theme.listItemAddonPaddingHorizontal}em;\n`;\n\nconst RightAddon = styled.div`\n color: ${(p) => clr(p.theme.colorText)};\n margin-left: auto;\n padding-left: ${(p) => p.theme.listItemAddonPaddingHorizontal}em;\n`;\n\n/**\n * The base list item.\n */\nconst ListItem = forwardRef<HTMLDivElement, ListItemProps>(\n ({ title, description, left, right, children, ...rest }, ref) => (\n <Container {...rest} ref={ref}>\n {left && <LeftAddon>{left}</LeftAddon>}\n\n {children || (\n <Content>\n <Title>{title}</Title>\n {description && <Description>{description}</Description>}\n </Content>\n )}\n\n {right && <RightAddon>{right}</RightAddon>}\n </Container>\n )\n);\n\nListItem.displayName = 'ListItem';\n\nexport default ListItem;\n"],"mappings":";AAAA,OAAOA,MAAM,MAAM,iBAAiB;AACpC,SAASC,cAAc,EAAEC,uBAAuB,QAAQ,mBAAmB;AAC3E,SAASC,GAAG,QAAQ,oBAAoB;AACxC,OAAOC,KAAK,IAAIC,UAAU,QAAQ,OAAO;AACzC,OAAOC,eAAe,MAAgC,oBAAoB;AAyB1E,MAAMC,SAAS,GAAGP,MAAM,CAACM,eAAe,CAAC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAAgCE,CAAC,IAAKL,GAAG,CAACK,CAAC,CAACC,KAAK,CAACC,mBAAmB,CAAC;AACtE;AACA;AACA,IAAIR,uBAAuB,CAAC,CAAC;AAC7B,CAAC;AAED,MAAMS,OAAO,GAAGX,MAAM,CAACY,GAAG;AAC1B;AACA,CAAC;AAED,MAAMC,KAAK,GAAGb,MAAM,CAACY,GAAG;AACxB,WAAYJ,CAAC,IAAKL,GAAG,CAACK,CAAC,CAACC,KAAK,CAACK,SAAS,CAAC;AACxC;AACA,IAAIb,cAAc;AAClB,CAAC;AAED,MAAMc,WAAW,GAAGf,MAAM,CAACY,GAAG;AAC9B,WAAYJ,CAAC,IAAKL,GAAG,CAACK,CAAC,CAACC,KAAK,CAACO,wBAAwB,CAAC;AACvD,eAAgBR,CAAC,IAAKA,CAAC,CAACC,KAAK,CAACQ,KAAK,CAACC,KAAK;AACzC,IAAIjB,cAAc;AAClB,CAAC;AAED,MAAMkB,SAAS,GAAGnB,MAAM,CAACY,GAAG;AAC5B,WAAYJ,CAAC,IAAKL,GAAG,CAACK,CAAC,CAACC,KAAK,CAACK,SAAS,CAAC;AACxC,mBAAoBN,CAAC,IAAKA,CAAC,CAACC,KAAK,CAACW,8BAA8B;AAChE,CAAC;AAED,MAAMC,UAAU,GAAGrB,MAAM,CAACY,GAAG;AAC7B,WAAYJ,CAAC,IAAKL,GAAG,CAACK,CAAC,CAACC,KAAK,CAACK,SAAS,CAAC;AACxC;AACA,kBAAmBN,CAAC,IAAKA,CAAC,CAACC,KAAK,CAACW,8BAA8B;AAC/D,CAAC;;AAED;AACA;AACA;AACA,MAAME,QAAQ,gBAAGjB,UAAU,CACzB,CAAC;EAAEkB,KAAK;EAAEC,WAAW;EAAEC,IAAI;EAAEC,KAAK;EAAEC,QAAQ;EAAE,GAAGC;AAAK,CAAC,EAAEC,GAAG,kBAC1DzB,KAAA,CAAA0B,aAAA,CAACvB,SAAS,EAAAwB,QAAA,KAAKH,IAAI;EAAEC,GAAG,EAAEA;AAAI,IAC3BJ,IAAI,iBAAIrB,KAAA,CAAA0B,aAAA,CAACX,SAAS,QAAEM,IAAgB,CAAC,EAErCE,QAAQ,iBACPvB,KAAA,CAAA0B,aAAA,CAACnB,OAAO,qBACNP,KAAA,CAAA0B,aAAA,CAACjB,KAAK,QAAEU,KAAa,CAAC,EACrBC,WAAW,iBAAIpB,KAAA,CAAA0B,aAAA,CAACf,WAAW,QAAES,WAAyB,CAChD,CACV,EAEAE,KAAK,iBAAItB,KAAA,CAAA0B,aAAA,CAACT,UAAU,QAAEK,KAAkB,CAChC,CAEf,CAAC;AAEDJ,QAAQ,CAACU,WAAW,GAAG,UAAU;AAEjC,eAAeV,QAAQ","ignoreList":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (
|
|
1
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
2
2
|
import { css } from '@emotion/react';
|
|
3
3
|
import styled from '@emotion/styled';
|
|
4
4
|
import { sizeStyles, transitionStyles } from '@os-design/styles';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["css","styled","sizeStyles","transitionStyles","clr","isTouchDevice","omitEmotionProps","useForwardedRef","useSwipe","React","forwardRef","useCallback","useLayoutEffect","useMemo","useState","Button","Container","div","swipeableStyles","p","swipeable","openedStyles","opened","Actions","theme","listItemActionsPaddingLeft","paddingRight","colorBg","slice","actionIndex","ListItemActions","actions","onTouchStart","onTouchMove","onTouchEnd","children","size","rest","ref","containerRef","mergedContainerRef","handlers","touchStartHandler","e","touchMoveHandler","touchEndHandler","setPaddingRight","current","value","Number","window","getComputedStyle","getPropertyValue","replace","actionsComponent","length","items","map","icon","onClick","actionRest","createElement","_extends","key","type","wide","preventDefault","stopPropagation","displayName"],"sources":["../../../src/ListItemActions/index.tsx"],"sourcesContent":["import { css } from '@emotion/react';\nimport styled from '@emotion/styled';\nimport { sizeStyles, transitionStyles, WithSize } from '@os-design/styles';\nimport { clr, Color } from '@os-design/theming';\nimport {\n isTouchDevice,\n omitEmotionProps,\n useForwardedRef,\n useSwipe,\n} from '@os-design/utils';\nimport React, {\n forwardRef,\n useCallback,\n useLayoutEffect,\n useMemo,\n useState,\n} from 'react';\nimport Button, { ButtonProps } from '../Button';\n\nexport interface ListItemAction extends Omit<ButtonProps, 'type' | 'wide'> {\n icon: React.ReactElement;\n}\n\ntype JsxDivProps = Omit<JSX.IntrinsicElements['div'], 'ref'>;\nexport interface ListItemActionsProps extends JsxDivProps, WithSize {\n /**\n * Buttons to control the item.\n * For example, edit, delete.\n * @default undefined\n */\n actions?: ListItemAction[];\n}\n\nconst Container = styled.div`\n position: relative;\n overflow: hidden;\n\n @media (hover: hover) {\n // Hide actions by default\n & > nav {\n opacity: 0;\n }\n\n // Display actions either on focus, or on hover\n &:hover,\n &:focus-within {\n & > nav {\n opacity: 1;\n }\n }\n }\n`;\n\nconst swipeableStyles = (p) =>\n p.swipeable &&\n css`\n transform: translateX(100%);\n ${transitionStyles('transform')(p)};\n `;\n\nconst openedStyles = (p) =>\n p.opened &&\n css`\n transform: translateX(0);\n `;\n\ninterface ActionsProps extends WithSize {\n swipeable: boolean;\n opened: boolean;\n paddingRight: number;\n}\nconst Actions = styled(\n 'nav',\n omitEmotionProps('swipeable', 'opened', 'paddingRight', 'size')\n)<ActionsProps>`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n\n display: flex;\n align-items: center;\n\n padding-left: ${(p) => p.theme.listItemActionsPaddingLeft}em;\n padding-right: ${(p) => p.paddingRight}px;\n\n background: linear-gradient(\n to right,\n ${(p) => clr([...p.theme.colorBg.slice(0, 3), 0] as Color)},\n ${(p) => clr(p.theme.colorBg)}\n ${(p) => p.theme.listItemActionsPaddingLeft}em\n );\n\n ${swipeableStyles};\n ${openedStyles};\n ${sizeStyles}\n`;\n\nlet actionIndex = 0;\n\n/**\n * Shows the menu in the list item.\n */\nconst ListItemActions = forwardRef<HTMLDivElement, ListItemActionsProps>(\n (\n {\n actions = [],\n onTouchStart = () => {},\n onTouchMove = () => {},\n onTouchEnd = () => {},\n children,\n size,\n ...rest\n },\n ref\n ) => {\n const [containerRef, mergedContainerRef] = useForwardedRef(ref);\n const { opened, handlers } = useSwipe();\n const swipeable = useMemo(() => isTouchDevice(), []);\n\n const touchStartHandler = useCallback(\n (e) => {\n handlers.onTouchStart(e);\n onTouchStart(e);\n },\n [handlers, onTouchStart]\n );\n\n const touchMoveHandler = useCallback(\n (e) => {\n handlers.onTouchMove(e);\n onTouchMove(e);\n },\n [handlers, onTouchMove]\n );\n\n const touchEndHandler = useCallback(\n (e) => {\n handlers.onTouchEnd(e);\n onTouchEnd(e);\n },\n [handlers, onTouchEnd]\n );\n\n const [paddingRight, setPaddingRight] = useState(0);\n useLayoutEffect(() => {\n if (!containerRef.current) return;\n const value = Number(\n window\n .getComputedStyle(containerRef.current)\n .getPropertyValue('padding-right')\n .replace('px', '')\n );\n setPaddingRight(value);\n }, [containerRef]);\n\n const actionsComponent = useMemo(() => {\n if (actions.length === 0) return null;\n const items = actions.map(\n ({ icon, onClick = () => {}, ...actionRest }) => {\n actionIndex += 1;\n return (\n <Button\n key={actionIndex}\n type='ghost'\n wide='never'\n size={size}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n onClick(e);\n }}\n {...actionRest}\n >\n {icon}\n </Button>\n );\n }\n );\n return (\n <Actions\n swipeable={swipeable}\n opened={opened}\n paddingRight={paddingRight}\n size={size}\n >\n {items}\n </Actions>\n );\n }, [actions, opened, paddingRight, size, swipeable]);\n\n return (\n <Container\n onTouchStart={touchStartHandler}\n onTouchMove={touchMoveHandler}\n onTouchEnd={touchEndHandler}\n {...rest}\n ref={mergedContainerRef}\n >\n {children}\n {actionsComponent}\n </Container>\n );\n }\n);\n\nListItemActions.displayName = 'ListItemActions';\n\nexport default ListItemActions;\n"],"mappings":";AAAA,SAASA,GAAG,QAAQ,gBAAgB;AACpC,OAAOC,MAAM,MAAM,iBAAiB;AACpC,SAASC,UAAU,EAAEC,gBAAgB,QAAkB,mBAAmB;AAC1E,SAASC,GAAG,QAAe,oBAAoB;AAC/C,SACEC,aAAa,EACbC,gBAAgB,EAChBC,eAAe,EACfC,QAAQ,QACH,kBAAkB;AACzB,OAAOC,KAAK,IACVC,UAAU,EACVC,WAAW,EACXC,eAAe,EACfC,OAAO,EACPC,QAAQ,QACH,OAAO;AACd,OAAOC,MAAM,MAAuB,WAAW;AAgB/C,MAAMC,SAAS,GAAGf,MAAM,CAACgB,
|
|
1
|
+
{"version":3,"file":"index.js","names":["css","styled","sizeStyles","transitionStyles","clr","isTouchDevice","omitEmotionProps","useForwardedRef","useSwipe","React","forwardRef","useCallback","useLayoutEffect","useMemo","useState","Button","Container","div","swipeableStyles","p","swipeable","openedStyles","opened","Actions","theme","listItemActionsPaddingLeft","paddingRight","colorBg","slice","actionIndex","ListItemActions","actions","onTouchStart","onTouchMove","onTouchEnd","children","size","rest","ref","containerRef","mergedContainerRef","handlers","touchStartHandler","e","touchMoveHandler","touchEndHandler","setPaddingRight","current","value","Number","window","getComputedStyle","getPropertyValue","replace","actionsComponent","length","items","map","icon","onClick","actionRest","createElement","_extends","key","type","wide","preventDefault","stopPropagation","displayName"],"sources":["../../../src/ListItemActions/index.tsx"],"sourcesContent":["import { css } from '@emotion/react';\nimport styled from '@emotion/styled';\nimport { sizeStyles, transitionStyles, WithSize } from '@os-design/styles';\nimport { clr, Color } from '@os-design/theming';\nimport {\n isTouchDevice,\n omitEmotionProps,\n useForwardedRef,\n useSwipe,\n} from '@os-design/utils';\nimport React, {\n forwardRef,\n useCallback,\n useLayoutEffect,\n useMemo,\n useState,\n} from 'react';\nimport Button, { ButtonProps } from '../Button';\n\nexport interface ListItemAction extends Omit<ButtonProps, 'type' | 'wide'> {\n icon: React.ReactElement;\n}\n\ntype JsxDivProps = Omit<JSX.IntrinsicElements['div'], 'ref'>;\nexport interface ListItemActionsProps extends JsxDivProps, WithSize {\n /**\n * Buttons to control the item.\n * For example, edit, delete.\n * @default undefined\n */\n actions?: ListItemAction[];\n}\n\nconst Container = styled.div`\n position: relative;\n overflow: hidden;\n\n @media (hover: hover) {\n // Hide actions by default\n & > nav {\n opacity: 0;\n }\n\n // Display actions either on focus, or on hover\n &:hover,\n &:focus-within {\n & > nav {\n opacity: 1;\n }\n }\n }\n`;\n\nconst swipeableStyles = (p) =>\n p.swipeable &&\n css`\n transform: translateX(100%);\n ${transitionStyles('transform')(p)};\n `;\n\nconst openedStyles = (p) =>\n p.opened &&\n css`\n transform: translateX(0);\n `;\n\ninterface ActionsProps extends WithSize {\n swipeable: boolean;\n opened: boolean;\n paddingRight: number;\n}\nconst Actions = styled(\n 'nav',\n omitEmotionProps('swipeable', 'opened', 'paddingRight', 'size')\n)<ActionsProps>`\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n\n display: flex;\n align-items: center;\n\n padding-left: ${(p) => p.theme.listItemActionsPaddingLeft}em;\n padding-right: ${(p) => p.paddingRight}px;\n\n background: linear-gradient(\n to right,\n ${(p) => clr([...p.theme.colorBg.slice(0, 3), 0] as Color)},\n ${(p) => clr(p.theme.colorBg)}\n ${(p) => p.theme.listItemActionsPaddingLeft}em\n );\n\n ${swipeableStyles};\n ${openedStyles};\n ${sizeStyles}\n`;\n\nlet actionIndex = 0;\n\n/**\n * Shows the menu in the list item.\n */\nconst ListItemActions = forwardRef<HTMLDivElement, ListItemActionsProps>(\n (\n {\n actions = [],\n onTouchStart = () => {},\n onTouchMove = () => {},\n onTouchEnd = () => {},\n children,\n size,\n ...rest\n },\n ref\n ) => {\n const [containerRef, mergedContainerRef] = useForwardedRef(ref);\n const { opened, handlers } = useSwipe();\n const swipeable = useMemo(() => isTouchDevice(), []);\n\n const touchStartHandler = useCallback(\n (e) => {\n handlers.onTouchStart(e);\n onTouchStart(e);\n },\n [handlers, onTouchStart]\n );\n\n const touchMoveHandler = useCallback(\n (e) => {\n handlers.onTouchMove(e);\n onTouchMove(e);\n },\n [handlers, onTouchMove]\n );\n\n const touchEndHandler = useCallback(\n (e) => {\n handlers.onTouchEnd(e);\n onTouchEnd(e);\n },\n [handlers, onTouchEnd]\n );\n\n const [paddingRight, setPaddingRight] = useState(0);\n useLayoutEffect(() => {\n if (!containerRef.current) return;\n const value = Number(\n window\n .getComputedStyle(containerRef.current)\n .getPropertyValue('padding-right')\n .replace('px', '')\n );\n setPaddingRight(value);\n }, [containerRef]);\n\n const actionsComponent = useMemo(() => {\n if (actions.length === 0) return null;\n const items = actions.map(\n ({ icon, onClick = () => {}, ...actionRest }) => {\n actionIndex += 1;\n return (\n <Button\n key={actionIndex}\n type='ghost'\n wide='never'\n size={size}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n onClick(e);\n }}\n {...actionRest}\n >\n {icon}\n </Button>\n );\n }\n );\n return (\n <Actions\n swipeable={swipeable}\n opened={opened}\n paddingRight={paddingRight}\n size={size}\n >\n {items}\n </Actions>\n );\n }, [actions, opened, paddingRight, size, swipeable]);\n\n return (\n <Container\n onTouchStart={touchStartHandler}\n onTouchMove={touchMoveHandler}\n onTouchEnd={touchEndHandler}\n {...rest}\n ref={mergedContainerRef}\n >\n {children}\n {actionsComponent}\n </Container>\n );\n }\n);\n\nListItemActions.displayName = 'ListItemActions';\n\nexport default ListItemActions;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (
|
|
1
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
2
2
|
import styled from '@emotion/styled';
|
|
3
3
|
import { resetFocusStyles } from '@os-design/styles';
|
|
4
4
|
import { clr } from '@os-design/theming';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["styled","resetFocusStyles","clr","React","forwardRef","ListItem","Link","a","p","theme","listItemColorBorder","listItemColorBgHover","slice","listItemActionsPaddingLeft","ListItemLink","title","description","left","right","actions","children","rest","ref","createElement","_extends","displayName"],"sources":["../../../src/ListItemLink/index.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport { resetFocusStyles } from '@os-design/styles';\nimport { clr, Color } from '@os-design/theming';\nimport React, { forwardRef } from 'react';\nimport { LinkProps, ReactRouterLinkProps } from '../Link';\nimport ListItem, { ListItemProps } from '../ListItem';\n\ntype JsxAProps = Omit<JSX.IntrinsicElements['a'], 'ref'>;\nexport type ListItemLinkProps = JsxAProps &\n ReactRouterLinkProps &\n Pick<LinkProps, 'as'> &\n ListItemProps;\n\nconst Link = styled.a`\n ${resetFocusStyles};\n\n cursor: pointer;\n text-decoration: none;\n\n &:not(:last-of-type) {\n border-bottom: 1px solid ${(p) => clr(p.theme.listItemColorBorder)};\n }\n\n @media (hover: hover) {\n &:hover,\n &:focus-within {\n & > div {\n background-color: ${(p) => clr(p.theme.listItemColorBgHover)};\n\n & > nav {\n background: linear-gradient(\n to right,\n ${(p) =>\n clr([...p.theme.listItemColorBgHover.slice(0, 3), 0] as Color)},\n ${(p) => clr(p.theme.listItemColorBgHover)}\n ${(p) => p.theme.listItemActionsPaddingLeft}em\n );\n }\n }\n }\n }\n`;\n\n/**\n * The list item with a link.\n */\nconst ListItemLink = forwardRef<HTMLAnchorElement, ListItemLinkProps>(\n ({ title, description, left, right, actions, children, ...rest }, ref) => (\n <Link {...rest} ref={ref}>\n <ListItem\n title={title}\n description={description}\n left={left}\n right={right}\n actions={actions}\n >\n {children}\n </ListItem>\n </Link>\n )\n);\n\nListItemLink.displayName = 'ListItemLink';\n\nexport default ListItemLink;\n"],"mappings":";AAAA,OAAOA,MAAM,MAAM,iBAAiB;AACpC,SAASC,gBAAgB,QAAQ,mBAAmB;AACpD,SAASC,GAAG,QAAe,oBAAoB;AAC/C,OAAOC,KAAK,IAAIC,UAAU,QAAQ,OAAO;AAEzC,OAAOC,QAAQ,MAAyB,aAAa;AAQrD,MAAMC,IAAI,GAAGN,MAAM,CAACO,
|
|
1
|
+
{"version":3,"file":"index.js","names":["styled","resetFocusStyles","clr","React","forwardRef","ListItem","Link","a","p","theme","listItemColorBorder","listItemColorBgHover","slice","listItemActionsPaddingLeft","ListItemLink","title","description","left","right","actions","children","rest","ref","createElement","_extends","displayName"],"sources":["../../../src/ListItemLink/index.tsx"],"sourcesContent":["import styled from '@emotion/styled';\nimport { resetFocusStyles } from '@os-design/styles';\nimport { clr, Color } from '@os-design/theming';\nimport React, { forwardRef } from 'react';\nimport { LinkProps, ReactRouterLinkProps } from '../Link';\nimport ListItem, { ListItemProps } from '../ListItem';\n\ntype JsxAProps = Omit<JSX.IntrinsicElements['a'], 'ref'>;\nexport type ListItemLinkProps = JsxAProps &\n ReactRouterLinkProps &\n Pick<LinkProps, 'as'> &\n ListItemProps;\n\nconst Link = styled.a`\n ${resetFocusStyles};\n\n cursor: pointer;\n text-decoration: none;\n\n &:not(:last-of-type) {\n border-bottom: 1px solid ${(p) => clr(p.theme.listItemColorBorder)};\n }\n\n @media (hover: hover) {\n &:hover,\n &:focus-within {\n & > div {\n background-color: ${(p) => clr(p.theme.listItemColorBgHover)};\n\n & > nav {\n background: linear-gradient(\n to right,\n ${(p) =>\n clr([...p.theme.listItemColorBgHover.slice(0, 3), 0] as Color)},\n ${(p) => clr(p.theme.listItemColorBgHover)}\n ${(p) => p.theme.listItemActionsPaddingLeft}em\n );\n }\n }\n }\n }\n`;\n\n/**\n * The list item with a link.\n */\nconst ListItemLink = forwardRef<HTMLAnchorElement, ListItemLinkProps>(\n ({ title, description, left, right, actions, children, ...rest }, ref) => (\n <Link {...rest} ref={ref}>\n <ListItem\n title={title}\n description={description}\n left={left}\n right={right}\n actions={actions}\n >\n {children}\n </ListItem>\n </Link>\n )\n);\n\nListItemLink.displayName = 'ListItemLink';\n\nexport default ListItemLink;\n"],"mappings":";AAAA,OAAOA,MAAM,MAAM,iBAAiB;AACpC,SAASC,gBAAgB,QAAQ,mBAAmB;AACpD,SAASC,GAAG,QAAe,oBAAoB;AAC/C,OAAOC,KAAK,IAAIC,UAAU,QAAQ,OAAO;AAEzC,OAAOC,QAAQ,MAAyB,aAAa;AAQrD,MAAMC,IAAI,GAAGN,MAAM,CAACO,CAAC;AACrB,IAAIN,gBAAgB;AACpB;AACA;AACA;AACA;AACA;AACA,+BAAgCO,CAAC,IAAKN,GAAG,CAACM,CAAC,CAACC,KAAK,CAACC,mBAAmB,CAAC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA,4BAA6BF,CAAC,IAAKN,GAAG,CAACM,CAAC,CAACC,KAAK,CAACE,oBAAoB,CAAC;AACpE;AACA;AACA;AACA;AACA,cAAeH,CAAC,IACFN,GAAG,CAAC,CAAC,GAAGM,CAAC,CAACC,KAAK,CAACE,oBAAoB,CAACC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAU,CAAC;AAC5E,cAAeJ,CAAC,IAAKN,GAAG,CAACM,CAAC,CAACC,KAAK,CAACE,oBAAoB,CAAC;AACtD,gBAAiBH,CAAC,IAAKA,CAAC,CAACC,KAAK,CAACI,0BAA0B;AACzD;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,MAAMC,YAAY,gBAAGV,UAAU,CAC7B,CAAC;EAAEW,KAAK;EAAEC,WAAW;EAAEC,IAAI;EAAEC,KAAK;EAAEC,OAAO;EAAEC,QAAQ;EAAE,GAAGC;AAAK,CAAC,EAAEC,GAAG,kBACnEnB,KAAA,CAAAoB,aAAA,CAACjB,IAAI,EAAAkB,QAAA,KAAKH,IAAI;EAAEC,GAAG,EAAEA;AAAI,iBACvBnB,KAAA,CAAAoB,aAAA,CAAClB,QAAQ;EACPU,KAAK,EAAEA,KAAM;EACbC,WAAW,EAAEA,WAAY;EACzBC,IAAI,EAAEA,IAAK;EACXC,KAAK,EAAEA,KAAM;EACbC,OAAO,EAAEA;AAAQ,GAEhBC,QACO,CACN,CAEV,CAAC;AAEDN,YAAY,CAACW,WAAW,GAAG,cAAc;AAEzC,eAAeX,YAAY","ignoreList":[]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (
|
|
1
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
2
2
|
import styled from '@emotion/styled';
|
|
3
3
|
import React, { forwardRef } from 'react';
|
|
4
4
|
import ListItem from '../ListItem';
|