@namroodinc/liquid-editorial 0.0.0-stage → 0.1.1
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/LICENSE +21 -0
- package/README.md +128 -2
- package/dist/chunks/EntryEditor-BF808OZR.js +181 -0
- package/dist/chunks/EntryEditor-BF808OZR.js.map +1 -0
- package/dist/chunks/EntryEditor-cjDk4vdH.cjs +2 -0
- package/dist/chunks/EntryEditor-cjDk4vdH.cjs.map +1 -0
- package/dist/chunks/Icon-CGY1FNXT.js +77 -0
- package/dist/chunks/Icon-CGY1FNXT.js.map +1 -0
- package/dist/chunks/Icon-CWsA1W83.cjs +2 -0
- package/dist/chunks/Icon-CWsA1W83.cjs.map +1 -0
- package/dist/chunks/RichTextEditor-DRt-kibg.js +248 -0
- package/dist/chunks/RichTextEditor-DRt-kibg.js.map +1 -0
- package/dist/chunks/RichTextEditor-tFkISOvq.cjs +2 -0
- package/dist/chunks/RichTextEditor-tFkISOvq.cjs.map +1 -0
- package/dist/components/AssetGrid/index.cjs +2 -0
- package/dist/components/AssetGrid/index.cjs.map +1 -0
- package/dist/components/AssetGrid/index.d.cts +54 -0
- package/dist/components/AssetGrid/index.d.cts.map +1 -0
- package/dist/components/AssetGrid/index.d.ts +54 -0
- package/dist/components/AssetGrid/index.d.ts.map +1 -0
- package/dist/components/AssetGrid/index.js +137 -0
- package/dist/components/AssetGrid/index.js.map +1 -0
- package/dist/components/AssetGrid/style.css +196 -0
- package/dist/components/Avatar/index.cjs +2 -0
- package/dist/components/Avatar/index.cjs.map +1 -0
- package/dist/components/Avatar/index.d.cts +24 -0
- package/dist/components/Avatar/index.d.cts.map +1 -0
- package/dist/components/Avatar/index.d.ts +24 -0
- package/dist/components/Avatar/index.d.ts.map +1 -0
- package/dist/components/Avatar/index.js +43 -0
- package/dist/components/Avatar/index.js.map +1 -0
- package/dist/components/Avatar/style.css +70 -0
- package/dist/components/Badge/index.cjs +2 -0
- package/dist/components/Badge/index.cjs.map +1 -0
- package/dist/components/Badge/index.d.cts +25 -0
- package/dist/components/Badge/index.d.cts.map +1 -0
- package/dist/components/Badge/index.d.ts +25 -0
- package/dist/components/Badge/index.d.ts.map +1 -0
- package/dist/components/Badge/index.js +28 -0
- package/dist/components/Badge/index.js.map +1 -0
- package/dist/components/Badge/style.css +103 -0
- package/dist/components/Board/index.cjs +2 -0
- package/dist/components/Board/index.cjs.map +1 -0
- package/dist/components/Board/index.d.cts +62 -0
- package/dist/components/Board/index.d.cts.map +1 -0
- package/dist/components/Board/index.d.ts +62 -0
- package/dist/components/Board/index.d.ts.map +1 -0
- package/dist/components/Board/index.js +227 -0
- package/dist/components/Board/index.js.map +1 -0
- package/dist/components/Board/style.css +145 -0
- package/dist/components/Button/index.cjs +2 -0
- package/dist/components/Button/index.cjs.map +1 -0
- package/dist/components/Button/index.d.cts +22 -0
- package/dist/components/Button/index.d.cts.map +1 -0
- package/dist/components/Button/index.d.ts +22 -0
- package/dist/components/Button/index.d.ts.map +1 -0
- package/dist/components/Button/index.js +37 -0
- package/dist/components/Button/index.js.map +1 -0
- package/dist/components/Button/style.css +139 -0
- package/dist/components/ButtonGroup/index.cjs +2 -0
- package/dist/components/ButtonGroup/index.cjs.map +1 -0
- package/dist/components/ButtonGroup/index.d.cts +17 -0
- package/dist/components/ButtonGroup/index.d.cts.map +1 -0
- package/dist/components/ButtonGroup/index.d.ts +17 -0
- package/dist/components/ButtonGroup/index.d.ts.map +1 -0
- package/dist/components/ButtonGroup/index.js +18 -0
- package/dist/components/ButtonGroup/index.js.map +1 -0
- package/dist/components/ButtonGroup/style.css +66 -0
- package/dist/components/Choice/index.cjs +2 -0
- package/dist/components/Choice/index.cjs.map +1 -0
- package/dist/components/Choice/index.d.cts +25 -0
- package/dist/components/Choice/index.d.cts.map +1 -0
- package/dist/components/Choice/index.d.ts +25 -0
- package/dist/components/Choice/index.d.ts.map +1 -0
- package/dist/components/Choice/index.js +58 -0
- package/dist/components/Choice/index.js.map +1 -0
- package/dist/components/Choice/style.css +96 -0
- package/dist/components/Container/index.cjs +2 -0
- package/dist/components/Container/index.cjs.map +1 -0
- package/dist/components/Container/index.d.cts +19 -0
- package/dist/components/Container/index.d.cts.map +1 -0
- package/dist/components/Container/index.d.ts +19 -0
- package/dist/components/Container/index.d.ts.map +1 -0
- package/dist/components/Container/index.js +20 -0
- package/dist/components/Container/index.js.map +1 -0
- package/dist/components/Container/style.css +41 -0
- package/dist/components/DatePicker/index.cjs +2 -0
- package/dist/components/DatePicker/index.cjs.map +1 -0
- package/dist/components/DatePicker/index.d.cts +57 -0
- package/dist/components/DatePicker/index.d.cts.map +1 -0
- package/dist/components/DatePicker/index.d.ts +57 -0
- package/dist/components/DatePicker/index.d.ts.map +1 -0
- package/dist/components/DatePicker/index.js +248 -0
- package/dist/components/DatePicker/index.js.map +1 -0
- package/dist/components/DatePicker/style.css +149 -0
- package/dist/components/Drawer/index.cjs +2 -0
- package/dist/components/Drawer/index.cjs.map +1 -0
- package/dist/components/Drawer/index.d.cts +23 -0
- package/dist/components/Drawer/index.d.cts.map +1 -0
- package/dist/components/Drawer/index.d.ts +23 -0
- package/dist/components/Drawer/index.d.ts.map +1 -0
- package/dist/components/Drawer/index.js +85 -0
- package/dist/components/Drawer/index.js.map +1 -0
- package/dist/components/Drawer/style.css +147 -0
- package/dist/components/EntryEditor/index.cjs +1 -0
- package/dist/components/EntryEditor/index.d.cts +21 -0
- package/dist/components/EntryEditor/index.d.cts.map +1 -0
- package/dist/components/EntryEditor/index.d.ts +21 -0
- package/dist/components/EntryEditor/index.d.ts.map +1 -0
- package/dist/components/EntryEditor/index.js +6 -0
- package/dist/components/EntryEditor/model.d.cts +33 -0
- package/dist/components/EntryEditor/model.d.cts.map +1 -0
- package/dist/components/EntryEditor/model.d.ts +33 -0
- package/dist/components/EntryEditor/model.d.ts.map +1 -0
- package/dist/components/EntryEditor/style.css +8 -0
- package/dist/components/EntryPicker/index.cjs +2 -0
- package/dist/components/EntryPicker/index.cjs.map +1 -0
- package/dist/components/EntryPicker/index.d.cts +36 -0
- package/dist/components/EntryPicker/index.d.cts.map +1 -0
- package/dist/components/EntryPicker/index.d.ts +36 -0
- package/dist/components/EntryPicker/index.d.ts.map +1 -0
- package/dist/components/EntryPicker/index.js +181 -0
- package/dist/components/EntryPicker/index.js.map +1 -0
- package/dist/components/EntryPicker/style.css +162 -0
- package/dist/components/Field/index.cjs +2 -0
- package/dist/components/Field/index.cjs.map +1 -0
- package/dist/components/Field/index.d.cts +22 -0
- package/dist/components/Field/index.d.cts.map +1 -0
- package/dist/components/Field/index.d.ts +22 -0
- package/dist/components/Field/index.d.ts.map +1 -0
- package/dist/components/Field/index.js +47 -0
- package/dist/components/Field/index.js.map +1 -0
- package/dist/components/Field/style.css +112 -0
- package/dist/components/FieldAffix/index.cjs +2 -0
- package/dist/components/FieldAffix/index.cjs.map +1 -0
- package/dist/components/FieldAffix/index.d.cts +19 -0
- package/dist/components/FieldAffix/index.d.cts.map +1 -0
- package/dist/components/FieldAffix/index.d.ts +19 -0
- package/dist/components/FieldAffix/index.d.ts.map +1 -0
- package/dist/components/FieldAffix/index.js +45 -0
- package/dist/components/FieldAffix/index.js.map +1 -0
- package/dist/components/FieldAffix/style.css +54 -0
- package/dist/components/Grid/index.cjs +2 -0
- package/dist/components/Grid/index.cjs.map +1 -0
- package/dist/components/Grid/index.d.cts +44 -0
- package/dist/components/Grid/index.d.cts.map +1 -0
- package/dist/components/Grid/index.d.ts +44 -0
- package/dist/components/Grid/index.d.ts.map +1 -0
- package/dist/components/Grid/index.js +49 -0
- package/dist/components/Grid/index.js.map +1 -0
- package/dist/components/Grid/style.css +226 -0
- package/dist/components/Icon/icons.d.cts +64 -0
- package/dist/components/Icon/icons.d.cts.map +1 -0
- package/dist/components/Icon/icons.d.ts +64 -0
- package/dist/components/Icon/icons.d.ts.map +1 -0
- package/dist/components/Icon/index.cjs +1 -0
- package/dist/components/Icon/index.d.cts +15 -0
- package/dist/components/Icon/index.d.cts.map +1 -0
- package/dist/components/Icon/index.d.ts +15 -0
- package/dist/components/Icon/index.d.ts.map +1 -0
- package/dist/components/Icon/index.js +1 -0
- package/dist/components/Icon/style.css +10 -0
- package/dist/components/ImageCropper/index.cjs +2 -0
- package/dist/components/ImageCropper/index.cjs.map +1 -0
- package/dist/components/ImageCropper/index.d.cts +66 -0
- package/dist/components/ImageCropper/index.d.cts.map +1 -0
- package/dist/components/ImageCropper/index.d.ts +66 -0
- package/dist/components/ImageCropper/index.d.ts.map +1 -0
- package/dist/components/ImageCropper/index.js +263 -0
- package/dist/components/ImageCropper/index.js.map +1 -0
- package/dist/components/ImageCropper/style.css +160 -0
- package/dist/components/Menu/index.cjs +2 -0
- package/dist/components/Menu/index.cjs.map +1 -0
- package/dist/components/Menu/index.d.cts +35 -0
- package/dist/components/Menu/index.d.cts.map +1 -0
- package/dist/components/Menu/index.d.ts +35 -0
- package/dist/components/Menu/index.d.ts.map +1 -0
- package/dist/components/Menu/index.js +110 -0
- package/dist/components/Menu/index.js.map +1 -0
- package/dist/components/Menu/style.css +87 -0
- package/dist/components/Modal/index.cjs +2 -0
- package/dist/components/Modal/index.cjs.map +1 -0
- package/dist/components/Modal/index.d.cts +19 -0
- package/dist/components/Modal/index.d.cts.map +1 -0
- package/dist/components/Modal/index.d.ts +19 -0
- package/dist/components/Modal/index.d.ts.map +1 -0
- package/dist/components/Modal/index.js +84 -0
- package/dist/components/Modal/index.js.map +1 -0
- package/dist/components/Modal/style.css +106 -0
- package/dist/components/NumberField/index.cjs +2 -0
- package/dist/components/NumberField/index.cjs.map +1 -0
- package/dist/components/NumberField/index.d.cts +50 -0
- package/dist/components/NumberField/index.d.cts.map +1 -0
- package/dist/components/NumberField/index.d.ts +50 -0
- package/dist/components/NumberField/index.d.ts.map +1 -0
- package/dist/components/NumberField/index.js +124 -0
- package/dist/components/NumberField/index.js.map +1 -0
- package/dist/components/NumberField/style.css +85 -0
- package/dist/components/Popover/index.cjs +2 -0
- package/dist/components/Popover/index.cjs.map +1 -0
- package/dist/components/Popover/index.d.cts +28 -0
- package/dist/components/Popover/index.d.cts.map +1 -0
- package/dist/components/Popover/index.d.ts +28 -0
- package/dist/components/Popover/index.d.ts.map +1 -0
- package/dist/components/Popover/index.js +52 -0
- package/dist/components/Popover/index.js.map +1 -0
- package/dist/components/Popover/style.css +23 -0
- package/dist/components/RichTextEditor/document.d.cts +10 -0
- package/dist/components/RichTextEditor/document.d.cts.map +1 -0
- package/dist/components/RichTextEditor/document.d.ts +10 -0
- package/dist/components/RichTextEditor/document.d.ts.map +1 -0
- package/dist/components/RichTextEditor/index.cjs +1 -0
- package/dist/components/RichTextEditor/index.d.cts +38 -0
- package/dist/components/RichTextEditor/index.d.cts.map +1 -0
- package/dist/components/RichTextEditor/index.d.ts +38 -0
- package/dist/components/RichTextEditor/index.d.ts.map +1 -0
- package/dist/components/RichTextEditor/index.js +1 -0
- package/dist/components/RichTextEditor/style.css +136 -0
- package/dist/components/SearchField/index.cjs +2 -0
- package/dist/components/SearchField/index.cjs.map +1 -0
- package/dist/components/SearchField/index.d.cts +11 -0
- package/dist/components/SearchField/index.d.cts.map +1 -0
- package/dist/components/SearchField/index.d.ts +11 -0
- package/dist/components/SearchField/index.d.ts.map +1 -0
- package/dist/components/SearchField/index.js +49 -0
- package/dist/components/SearchField/index.js.map +1 -0
- package/dist/components/SearchField/style.css +27 -0
- package/dist/components/Select/index.cjs +2 -0
- package/dist/components/Select/index.cjs.map +1 -0
- package/dist/components/Select/index.d.cts +26 -0
- package/dist/components/Select/index.d.cts.map +1 -0
- package/dist/components/Select/index.d.ts +26 -0
- package/dist/components/Select/index.d.ts.map +1 -0
- package/dist/components/Select/index.js +129 -0
- package/dist/components/Select/index.js.map +1 -0
- package/dist/components/Select/style.css +88 -0
- package/dist/components/SelectionCard/index.cjs +2 -0
- package/dist/components/SelectionCard/index.cjs.map +1 -0
- package/dist/components/SelectionCard/index.d.cts +32 -0
- package/dist/components/SelectionCard/index.d.cts.map +1 -0
- package/dist/components/SelectionCard/index.d.ts +32 -0
- package/dist/components/SelectionCard/index.d.ts.map +1 -0
- package/dist/components/SelectionCard/index.js +71 -0
- package/dist/components/SelectionCard/index.js.map +1 -0
- package/dist/components/SelectionCard/style.css +133 -0
- package/dist/components/SideNav/index.cjs +2 -0
- package/dist/components/SideNav/index.cjs.map +1 -0
- package/dist/components/SideNav/index.d.cts +58 -0
- package/dist/components/SideNav/index.d.cts.map +1 -0
- package/dist/components/SideNav/index.d.ts +58 -0
- package/dist/components/SideNav/index.d.ts.map +1 -0
- package/dist/components/SideNav/index.js +113 -0
- package/dist/components/SideNav/index.js.map +1 -0
- package/dist/components/SideNav/style.css +184 -0
- package/dist/components/Skeleton/index.cjs +2 -0
- package/dist/components/Skeleton/index.cjs.map +1 -0
- package/dist/components/Skeleton/index.d.cts +21 -0
- package/dist/components/Skeleton/index.d.cts.map +1 -0
- package/dist/components/Skeleton/index.d.ts +21 -0
- package/dist/components/Skeleton/index.d.ts.map +1 -0
- package/dist/components/Skeleton/index.js +31 -0
- package/dist/components/Skeleton/index.js.map +1 -0
- package/dist/components/Skeleton/style.css +55 -0
- package/dist/components/Slider/index.cjs +2 -0
- package/dist/components/Slider/index.cjs.map +1 -0
- package/dist/components/Slider/index.d.cts +40 -0
- package/dist/components/Slider/index.d.cts.map +1 -0
- package/dist/components/Slider/index.d.ts +40 -0
- package/dist/components/Slider/index.d.ts.map +1 -0
- package/dist/components/Slider/index.js +117 -0
- package/dist/components/Slider/index.js.map +1 -0
- package/dist/components/Slider/style.css +156 -0
- package/dist/components/SortableList/index.cjs +2 -0
- package/dist/components/SortableList/index.cjs.map +1 -0
- package/dist/components/SortableList/index.d.cts +27 -0
- package/dist/components/SortableList/index.d.cts.map +1 -0
- package/dist/components/SortableList/index.d.ts +27 -0
- package/dist/components/SortableList/index.d.ts.map +1 -0
- package/dist/components/SortableList/index.js +85 -0
- package/dist/components/SortableList/index.js.map +1 -0
- package/dist/components/SortableList/style.css +71 -0
- package/dist/components/Stepper/index.cjs +2 -0
- package/dist/components/Stepper/index.cjs.map +1 -0
- package/dist/components/Stepper/index.d.cts +32 -0
- package/dist/components/Stepper/index.d.cts.map +1 -0
- package/dist/components/Stepper/index.d.ts +32 -0
- package/dist/components/Stepper/index.d.ts.map +1 -0
- package/dist/components/Stepper/index.js +69 -0
- package/dist/components/Stepper/index.js.map +1 -0
- package/dist/components/Stepper/style.css +154 -0
- package/dist/components/SubNav/index.cjs +2 -0
- package/dist/components/SubNav/index.cjs.map +1 -0
- package/dist/components/SubNav/index.d.cts +31 -0
- package/dist/components/SubNav/index.d.cts.map +1 -0
- package/dist/components/SubNav/index.d.ts +31 -0
- package/dist/components/SubNav/index.d.ts.map +1 -0
- package/dist/components/SubNav/index.js +62 -0
- package/dist/components/SubNav/index.js.map +1 -0
- package/dist/components/SubNav/style.css +86 -0
- package/dist/components/Switch/index.cjs +2 -0
- package/dist/components/Switch/index.cjs.map +1 -0
- package/dist/components/Switch/index.d.cts +12 -0
- package/dist/components/Switch/index.d.cts.map +1 -0
- package/dist/components/Switch/index.d.ts +12 -0
- package/dist/components/Switch/index.d.ts.map +1 -0
- package/dist/components/Switch/index.js +37 -0
- package/dist/components/Switch/index.js.map +1 -0
- package/dist/components/Switch/style.css +65 -0
- package/dist/components/Table/index.cjs +2 -0
- package/dist/components/Table/index.cjs.map +1 -0
- package/dist/components/Table/index.d.cts +54 -0
- package/dist/components/Table/index.d.cts.map +1 -0
- package/dist/components/Table/index.d.ts +54 -0
- package/dist/components/Table/index.d.ts.map +1 -0
- package/dist/components/Table/index.js +102 -0
- package/dist/components/Table/index.js.map +1 -0
- package/dist/components/Table/style.css +122 -0
- package/dist/components/TagsInput/index.cjs +2 -0
- package/dist/components/TagsInput/index.cjs.map +1 -0
- package/dist/components/TagsInput/index.d.cts +22 -0
- package/dist/components/TagsInput/index.d.cts.map +1 -0
- package/dist/components/TagsInput/index.d.ts +22 -0
- package/dist/components/TagsInput/index.d.ts.map +1 -0
- package/dist/components/TagsInput/index.js +60 -0
- package/dist/components/TagsInput/index.js.map +1 -0
- package/dist/components/TagsInput/style.css +83 -0
- package/dist/components/TextField/index.cjs +2 -0
- package/dist/components/TextField/index.cjs.map +1 -0
- package/dist/components/TextField/index.d.cts +11 -0
- package/dist/components/TextField/index.d.cts.map +1 -0
- package/dist/components/TextField/index.d.ts +11 -0
- package/dist/components/TextField/index.d.ts.map +1 -0
- package/dist/components/TextField/index.js +29 -0
- package/dist/components/TextField/index.js.map +1 -0
- package/dist/components/TextField/style.css +1 -0
- package/dist/components/Time/index.cjs +2 -0
- package/dist/components/Time/index.cjs.map +1 -0
- package/dist/components/Time/index.d.cts +35 -0
- package/dist/components/Time/index.d.cts.map +1 -0
- package/dist/components/Time/index.d.ts +35 -0
- package/dist/components/Time/index.d.ts.map +1 -0
- package/dist/components/Time/index.js +98 -0
- package/dist/components/Time/index.js.map +1 -0
- package/dist/components/Time/style.css +30 -0
- package/dist/components/Toast/index.cjs +2 -0
- package/dist/components/Toast/index.cjs.map +1 -0
- package/dist/components/Toast/index.d.cts +30 -0
- package/dist/components/Toast/index.d.cts.map +1 -0
- package/dist/components/Toast/index.d.ts +30 -0
- package/dist/components/Toast/index.d.ts.map +1 -0
- package/dist/components/Toast/index.js +96 -0
- package/dist/components/Toast/index.js.map +1 -0
- package/dist/components/Toast/style.css +80 -0
- package/dist/components/TopNav/index.cjs +2 -0
- package/dist/components/TopNav/index.cjs.map +1 -0
- package/dist/components/TopNav/index.d.cts +28 -0
- package/dist/components/TopNav/index.d.cts.map +1 -0
- package/dist/components/TopNav/index.d.ts +28 -0
- package/dist/components/TopNav/index.d.ts.map +1 -0
- package/dist/components/TopNav/index.js +45 -0
- package/dist/components/TopNav/index.js.map +1 -0
- package/dist/components/TopNav/style.css +80 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.cts +79 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.ts +79 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/reset.css +15 -0
- package/dist/reset.css.d.ts +2 -0
- package/dist/styles.css +40 -0
- package/dist/styles.css.d.ts +2 -0
- package/dist/tokens.css +457 -0
- package/dist/tokens.css.d.ts +2 -0
- package/package.json +156 -4
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
@layer components {
|
|
2
|
+
.ds-tags {
|
|
3
|
+
display: flex;
|
|
4
|
+
flex-wrap: wrap;
|
|
5
|
+
align-items: center;
|
|
6
|
+
gap: var(--space-2);
|
|
7
|
+
min-block-size: var(--field-height-md);
|
|
8
|
+
padding: var(--space-1) var(--space-2);
|
|
9
|
+
cursor: text;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.ds-tags[data-size="sm"] {
|
|
13
|
+
min-block-size: var(--field-height-sm);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.ds-tags[data-size="lg"] {
|
|
17
|
+
min-block-size: var(--field-height-lg);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.ds-tags:focus-within {
|
|
21
|
+
background: var(--field-focus);
|
|
22
|
+
outline: var(--control-border-width) solid var(--color-focus);
|
|
23
|
+
outline-offset: 2px;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.ds-tags[data-disabled] {
|
|
27
|
+
opacity: 45%;
|
|
28
|
+
cursor: not-allowed;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.ds-tags__tag {
|
|
32
|
+
display: inline-flex;
|
|
33
|
+
align-items: center;
|
|
34
|
+
gap: var(--space-1);
|
|
35
|
+
padding: 2px var(--space-1) 2px var(--space-2);
|
|
36
|
+
border: var(--badge-border-width) solid var(--control-border-color);
|
|
37
|
+
border-radius: var(--radius-pill);
|
|
38
|
+
background: var(--color-surface);
|
|
39
|
+
font-size: var(--font-size-xs);
|
|
40
|
+
font-weight: var(--font-weight-semibold);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.ds-tags__remove {
|
|
44
|
+
display: grid;
|
|
45
|
+
place-items: center;
|
|
46
|
+
inline-size: var(--space-5);
|
|
47
|
+
block-size: var(--space-5);
|
|
48
|
+
padding: 0;
|
|
49
|
+
border: none;
|
|
50
|
+
border-radius: var(--radius-pill);
|
|
51
|
+
background: transparent;
|
|
52
|
+
color: var(--color-text-muted);
|
|
53
|
+
cursor: pointer;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.ds-tags__remove:hover:not(:disabled) {
|
|
57
|
+
background: var(--field-hover);
|
|
58
|
+
color: var(--color-text);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.ds-tags__remove:focus-visible {
|
|
62
|
+
outline: var(--control-border-width) solid var(--color-focus);
|
|
63
|
+
outline-offset: 1px;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.ds-tags__input {
|
|
67
|
+
flex: 1;
|
|
68
|
+
min-inline-size: 6rem;
|
|
69
|
+
border: none;
|
|
70
|
+
background: transparent;
|
|
71
|
+
color: var(--color-text);
|
|
72
|
+
font-family: var(--font-sans);
|
|
73
|
+
font-size: var(--field-font-size-md);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.ds-tags__input:focus {
|
|
77
|
+
outline: none;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.ds-tags__input::placeholder {
|
|
81
|
+
color: var(--color-text-muted);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});/* empty css */let e=require("react"),t=require("react/jsx-runtime");var n=(0,e.forwardRef)(function({size:e=`md`,className:n,type:r=`text`,...i},a){return(0,t.jsx)(`input`,{ref:a,type:r,"data-size":e,className:[`ds-field-skin`,n].filter(Boolean).join(` `),...i})}),r=(0,e.forwardRef)(function({rows:n=3,className:r,onInput:i,...a},o){let s=(0,e.useCallback)(e=>{let t=e.currentTarget;t.style.height=`auto`,t.style.height=`${t.scrollHeight}px`,i?.(e)},[i]);return(0,t.jsx)(`textarea`,{ref:o,rows:n,onInput:s,className:[`ds-field-skin`,r].filter(Boolean).join(` `),...a})});exports.TextArea=r,exports.TextField=n;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["forwardRef","useCallback","react","react_jsx_runtime","TextField","rest","size","className","TextArea","autoGrow","el","event","onInput"],"sources":["../../../src/components/TextField/index.tsx"],"sourcesContent":["import {\n forwardRef,\n useCallback,\n type FormEvent,\n type InputHTMLAttributes,\n type TextareaHTMLAttributes,\n} from \"react\";\nimport type { FieldSize } from \"../Field\";\nimport \"../Field/style.css\";\n\nexport interface TextFieldProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, \"size\"> {\n size?: FieldSize;\n}\n\n/** Single-line input wearing the shared field skin. */\nexport const TextField = forwardRef<HTMLInputElement, TextFieldProps>(\n function TextField({ size = \"md\", className, type = \"text\", ...rest }, ref) {\n return (\n <input\n ref={ref}\n type={type}\n data-size={size}\n className={[\"ds-field-skin\", className].filter(Boolean).join(\" \")}\n {...rest}\n />\n );\n },\n);\n\nexport type TextAreaProps = TextareaHTMLAttributes<HTMLTextAreaElement>;\n\n/** Multi-line input. Grows to its content and never scrolls. */\nexport const TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>(\n function TextArea({ rows = 3, className, onInput, ...rest }, ref) {\n const autoGrow = useCallback(\n (event: FormEvent<HTMLTextAreaElement>) => {\n const el = event.currentTarget;\n el.style.height = \"auto\";\n el.style.height = `${el.scrollHeight}px`;\n onInput?.(event as Parameters<NonNullable<typeof onInput>>[0]);\n },\n [onInput],\n );\n\n return (\n <textarea\n ref={ref}\n rows={rows}\n onInput={autoGrow}\n className={[\"ds-field-skin\", className].filter(Boolean).join(\" \")}\n {...rest}\n />\n );\n },\n);\n"],"mappings":"A,oKAgBA,IAAaI,GAAA,EAAYJ,EAAAA,WAAAA,CACvB,SAAmB,CAAE,OAAO,KAAM,YAAW,OAAO,OAAQ,GAAGK,GAAQ,EAAK,CAC1E,OACE,EAAAF,EAAA,IAAA,CAAC,QAAD,CACO,MACC,OACN,YAAWG,EACX,UAAW,CAAC,gBAAiBC,CAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG,EAChE,GAAIF,CACL,CAAA,CAEL,CACF,EAKaG,GAAA,EAAWR,EAAAA,WAAAA,CACtB,SAAkB,CAAE,OAAO,EAAG,YAAW,UAAS,GAAGK,GAAQ,EAAK,CAChE,IAAMI,GAAA,EAAWR,EAAAA,YAAAA,CACd,GAA0C,CACzC,IAAMS,EAAKC,EAAM,cACjB,EAAG,MAAM,OAAS,OAClB,EAAG,MAAM,OAAS,GAAGD,EAAG,aAAa,IACrCE,IAAUD,CAAmD,CAC/D,EACA,CAACC,CAAO,CACV,EAEA,OACE,EAAAT,EAAA,IAAA,CAAC,WAAD,CACO,MACC,OACN,QAASM,EACT,UAAW,CAAC,gBAAiBF,CAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG,EAChE,GAAIF,CACL,CAAA,CAEL,CACF,E"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type InputHTMLAttributes, type TextareaHTMLAttributes } from "react";
|
|
2
|
+
import type { FieldSize } from "../Field/index.cjs";
|
|
3
|
+
export interface TextFieldProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "size"> {
|
|
4
|
+
size?: FieldSize;
|
|
5
|
+
}
|
|
6
|
+
/** Single-line input wearing the shared field skin. */
|
|
7
|
+
export declare const TextField: import("react").ForwardRefExoticComponent<TextFieldProps & import("react").RefAttributes<HTMLInputElement>>;
|
|
8
|
+
export type TextAreaProps = TextareaHTMLAttributes<HTMLTextAreaElement>;
|
|
9
|
+
/** Multi-line input. Grows to its content and never scrolls. */
|
|
10
|
+
export declare const TextArea: import("react").ForwardRefExoticComponent<TextAreaProps & import("react").RefAttributes<HTMLTextAreaElement>>;
|
|
11
|
+
//# sourceMappingURL=index.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../../src/components/TextField/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC5B,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,oBAAoB,CAAC;AAE5B,MAAM,WAAW,cACf,SAAQ,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC3D,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED,uDAAuD;AACvD,eAAO,MAAM,SAAS,6GAYrB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,sBAAsB,CAAC,mBAAmB,CAAC,CAAC;AAExE,gEAAgE;AAChE,eAAO,MAAM,QAAQ,+GAsBpB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type InputHTMLAttributes, type TextareaHTMLAttributes } from "react";
|
|
2
|
+
import type { FieldSize } from "../Field/index.js";
|
|
3
|
+
export interface TextFieldProps extends Omit<InputHTMLAttributes<HTMLInputElement>, "size"> {
|
|
4
|
+
size?: FieldSize;
|
|
5
|
+
}
|
|
6
|
+
/** Single-line input wearing the shared field skin. */
|
|
7
|
+
export declare const TextField: import("react").ForwardRefExoticComponent<TextFieldProps & import("react").RefAttributes<HTMLInputElement>>;
|
|
8
|
+
export type TextAreaProps = TextareaHTMLAttributes<HTMLTextAreaElement>;
|
|
9
|
+
/** Multi-line input. Grows to its content and never scrolls. */
|
|
10
|
+
export declare const TextArea: import("react").ForwardRefExoticComponent<TextAreaProps & import("react").RefAttributes<HTMLTextAreaElement>>;
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/TextField/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,mBAAmB,EACxB,KAAK,sBAAsB,EAC5B,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,oBAAoB,CAAC;AAE5B,MAAM,WAAW,cACf,SAAQ,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC3D,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED,uDAAuD;AACvD,eAAO,MAAM,SAAS,6GAYrB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,sBAAsB,CAAC,mBAAmB,CAAC,CAAC;AAExE,gEAAgE;AAChE,eAAO,MAAM,QAAQ,+GAsBpB,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/* empty css */
|
|
2
|
+
import { forwardRef as e, useCallback as t } from "react";
|
|
3
|
+
import { jsx as n } from "react/jsx-runtime";
|
|
4
|
+
//#region src/components/TextField/index.tsx
|
|
5
|
+
var r = e(function({ size: e = "md", className: t, type: r = "text", ...i }, a) {
|
|
6
|
+
return /* @__PURE__ */ n("input", {
|
|
7
|
+
ref: a,
|
|
8
|
+
type: r,
|
|
9
|
+
"data-size": e,
|
|
10
|
+
className: ["ds-field-skin", t].filter(Boolean).join(" "),
|
|
11
|
+
...i
|
|
12
|
+
});
|
|
13
|
+
}), i = e(function({ rows: e = 3, className: r, onInput: i, ...a }, o) {
|
|
14
|
+
let s = t((e) => {
|
|
15
|
+
let t = e.currentTarget;
|
|
16
|
+
t.style.height = "auto", t.style.height = `${t.scrollHeight}px`, i?.(e);
|
|
17
|
+
}, [i]);
|
|
18
|
+
return /* @__PURE__ */ n("textarea", {
|
|
19
|
+
ref: o,
|
|
20
|
+
rows: e,
|
|
21
|
+
onInput: s,
|
|
22
|
+
className: ["ds-field-skin", r].filter(Boolean).join(" "),
|
|
23
|
+
...a
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
//#endregion
|
|
27
|
+
export { i as TextArea, r as TextField };
|
|
28
|
+
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["TextField","forwardRef","rest","size","className","TextArea","autoGrow","useCallback","el","event","onInput"],"sources":["../../../src/components/TextField/index.tsx"],"sourcesContent":["import {\n forwardRef,\n useCallback,\n type FormEvent,\n type InputHTMLAttributes,\n type TextareaHTMLAttributes,\n} from \"react\";\nimport type { FieldSize } from \"../Field\";\nimport \"../Field/style.css\";\n\nexport interface TextFieldProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, \"size\"> {\n size?: FieldSize;\n}\n\n/** Single-line input wearing the shared field skin. */\nexport const TextField = forwardRef<HTMLInputElement, TextFieldProps>(\n function TextField({ size = \"md\", className, type = \"text\", ...rest }, ref) {\n return (\n <input\n ref={ref}\n type={type}\n data-size={size}\n className={[\"ds-field-skin\", className].filter(Boolean).join(\" \")}\n {...rest}\n />\n );\n },\n);\n\nexport type TextAreaProps = TextareaHTMLAttributes<HTMLTextAreaElement>;\n\n/** Multi-line input. Grows to its content and never scrolls. */\nexport const TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>(\n function TextArea({ rows = 3, className, onInput, ...rest }, ref) {\n const autoGrow = useCallback(\n (event: FormEvent<HTMLTextAreaElement>) => {\n const el = event.currentTarget;\n el.style.height = \"auto\";\n el.style.height = `${el.scrollHeight}px`;\n onInput?.(event as Parameters<NonNullable<typeof onInput>>[0]);\n },\n [onInput],\n );\n\n return (\n <textarea\n ref={ref}\n rows={rows}\n onInput={autoGrow}\n className={[\"ds-field-skin\", className].filter(Boolean).join(\" \")}\n {...rest}\n />\n );\n },\n);\n"],"mappings":";;;;AAgBA,IAAaA,IAAYC,EACvB,SAAmB,EAAE,UAAO,MAAM,cAAW,UAAO,QAAQ,GAAGC,KAAQ,GAAK;CAC1E,OACE,kBAAC,SAAD;EACO;EACC;EACN,aAAWC;EACX,WAAW,CAAC,iBAAiBC,CAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;EAChE,GAAIF;CACL,CAAA;AAEL,CACF,GAKaG,IAAWJ,EACtB,SAAkB,EAAE,UAAO,GAAG,cAAW,YAAS,GAAGC,KAAQ,GAAK;CAChE,IAAMI,IAAWC,GACd,MAA0C;EACzC,IAAMC,IAAKC,EAAM;EAGjB,AAFA,EAAG,MAAM,SAAS,QAClB,EAAG,MAAM,SAAS,GAAGD,EAAG,aAAa,KACrCE,IAAUD,CAAmD;CAC/D,GACA,CAACC,CAAO,CACV;CAEA,OACE,kBAAC,YAAD;EACO;EACC;EACN,SAASJ;EACT,WAAW,CAAC,iBAAiBF,CAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;EAChE,GAAIF;CACL,CAAA;AAEL,CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/* TextField and TextArea use the shared field skin from ../Field/style.css. */
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../Popover/index.cjs");let t=require("react"),n=require("react/jsx-runtime");function r(...e){return e.filter(Boolean).join(` `)}var i=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`],a=6e4,o=60*a,s=24*o,c=7*s;function l(e){return String(e).padStart(2,`0`)}function u(e,t={}){let{hasYear:n=!0}=t,r=`${e.getDate()} ${i[e.getMonth()]}`;return n?`${r} ${e.getFullYear()}`:r}function d(e,t={}){let{hasTimeZone:n=!0}=t,r=`${u(e)}, ${l(e.getHours())}:${l(e.getMinutes())}`;if(!n)return r;let i=new Intl.DateTimeFormat(void 0,{timeZoneName:`short`}).formatToParts(e).find(e=>e.type===`timeZoneName`)?.value;return i?`${r} ${i}`:r}function f(e,t=new Date){let n=t.getTime()-e.getTime();if(n<0)return u(e,{hasYear:e.getFullYear()!==t.getFullYear()});if(n<a)return`Just now`;if(n<o)return`${Math.floor(n/a)}m ago`;if(n<s)return`${Math.floor(n/o)}h ago`;if(n<c){let e=Math.floor(n/s);return`${e} ${e===1?`day`:`days`} ago`}return u(e,{hasYear:e.getFullYear()!==t.getFullYear()})}var p=(0,t.forwardRef)(function({value:i,format:a=`auto`,hasTooltip:o=!0,hasTimeZone:s=!0,now:c,refreshInterval:l=3e4,className:p,tabIndex:m,title:h,onMouseEnter:g,onMouseLeave:_,onFocus:v,onBlur:y,onKeyDown:b,"aria-describedby":x,...S},C){let w=i instanceof Date?i:new Date(i),T=(0,t.useRef)(null),[E,D]=(0,t.useState)(!1),O=(0,t.useId)(),[,k]=(0,t.useState)(0);if((0,t.useEffect)(()=>{if(a===`absolute`||c)return;let e=window.setInterval(()=>k(e=>e+1),l);return()=>window.clearInterval(e)},[a,c,l]),Number.isNaN(w.getTime()))return null;let A=a===`absolute`?u(w):f(w,c??new Date),j=d(w,{hasTimeZone:s}),M=o&&A!==j;return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(`time`,{ref:e=>{T.current=e,typeof C==`function`?C(e):C&&(C.current=e)},dateTime:w.toISOString(),suppressHydrationWarning:!0,className:r(`ds-time`,!M&&`ds-time--plain`,p),tabIndex:m??(M?0:void 0),"aria-describedby":[x,M&&E&&O].filter(Boolean).join(` `)||void 0,title:h??(M?void 0:j),onMouseEnter:e=>{g?.(e),M&&!e.defaultPrevented&&D(!0)},onMouseLeave:e=>{_?.(e),M&&!e.defaultPrevented&&D(!1)},onFocus:e=>{v?.(e),M&&!e.defaultPrevented&&D(!0)},onBlur:e=>{y?.(e),M&&!e.defaultPrevented&&D(!1)},onKeyDown:e=>{b?.(e),M&&!e.defaultPrevented&&e.key===`Escape`&&D(!1)},...S,children:A}),M&&(0,n.jsx)(e.Popover,{anchorRef:T,isOpen:E,id:O,role:`tooltip`,className:`ds-surface-raised ds-time-tooltip`,children:j})]})});exports.Time=p,exports.formatAbsoluteDate=u,exports.formatAbsoluteTime=d,exports.formatRelativeTime=f;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["forwardRef","useRef","useState","useId","_Fragment","Popover","require_components_Popover_index","react","react_jsx_runtime","cx","parts","MONTHS","MINUTE","HOUR","DAY","WEEK","pad","value","formatAbsoluteDate","options","stem","date","hasYear","formatAbsoluteTime","stamp","hasTimeZone","zone","part","formatRelativeTime","delta","now","days","Time","describedBy","rest","anchorRef","isOpen","setIsOpen","tooltipId","setTick","format","id","t","refreshInterval","label","isTipped","hasTooltip","node","ref","className","tabIndex","title","onMouseEnter","event","onMouseLeave","onFocus","onBlur","onKeyDown"],"sources":["../../../src/components/Time/index.tsx"],"sourcesContent":["import {\n forwardRef,\n useEffect,\n useId,\n useRef,\n useState,\n type HTMLAttributes,\n} from \"react\";\nimport { Popover } from \"../Popover\";\nimport \"./style.css\";\n\nfunction cx(...parts: (string | undefined | false)[]) {\n return parts.filter(Boolean).join(\" \");\n}\n\nconst MONTHS = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n];\n\nconst MINUTE = 60_000;\nconst HOUR = 60 * MINUTE;\nconst DAY = 24 * HOUR;\nconst WEEK = 7 * DAY;\n\nfunction pad(value: number) {\n return String(value).padStart(2, \"0\");\n}\n\n/** Day before month, one order everywhere: `12 Jun 2026`. */\nexport function formatAbsoluteDate(date: Date, options: { hasYear?: boolean } = {}) {\n const { hasYear = true } = options;\n const stem = `${date.getDate()} ${MONTHS[date.getMonth()]}`;\n return hasYear ? `${stem} ${date.getFullYear()}` : stem;\n}\n\n/** The tooltip form: `6 Aug 2026, 11:05`, with the reader's zone appended. */\nexport function formatAbsoluteTime(date: Date, options: { hasTimeZone?: boolean } = {}) {\n const { hasTimeZone = true } = options;\n const stamp = `${formatAbsoluteDate(date)}, ${pad(date.getHours())}:${pad(date.getMinutes())}`;\n if (!hasTimeZone) return stamp;\n const zone = new Intl.DateTimeFormat(undefined, { timeZoneName: \"short\" })\n .formatToParts(date)\n .find((part) => part.type === \"timeZoneName\")?.value;\n return zone ? `${stamp} ${zone}` : stamp;\n}\n\n/**\n * Relative up to a week, absolute after. Future dates are always absolute — a\n * scheduled publish reads `12 Jun`, never `in 3 days`.\n */\nexport function formatRelativeTime(date: Date, now: Date = new Date()) {\n const delta = now.getTime() - date.getTime();\n if (delta < 0) {\n return formatAbsoluteDate(date, { hasYear: date.getFullYear() !== now.getFullYear() });\n }\n if (delta < MINUTE) return \"Just now\";\n if (delta < HOUR) return `${Math.floor(delta / MINUTE)}m ago`;\n if (delta < DAY) return `${Math.floor(delta / HOUR)}h ago`;\n if (delta < WEEK) {\n const days = Math.floor(delta / DAY);\n return `${days} ${days === 1 ? \"day\" : \"days\"} ago`;\n }\n return formatAbsoluteDate(date, { hasYear: date.getFullYear() !== now.getFullYear() });\n}\n\nexport type TimeFormat = \"auto\" | \"relative\" | \"absolute\";\n\nexport interface TimeProps extends Omit<HTMLAttributes<HTMLElement>, \"children\"> {\n /** The instant to print — Date, epoch ms, or an ISO string. */\n value: Date | string | number;\n /** `auto` ages the value; `absolute` always prints the date. */\n format?: TimeFormat;\n /** Show the absolute stamp on hover and focus. */\n hasTooltip?: boolean;\n /** Append the reader's time zone to the tooltip. */\n hasTimeZone?: boolean;\n /** Pin \"now\" — useful for tests and stories. */\n now?: Date;\n /** Re-render interval in ms while the value is still relative. */\n refreshInterval?: number;\n}\n\n/**\n * A machine-readable `<time>` that ages itself. One form per cell: relative or\n * absolute, never both side by side.\n */\nexport const Time = forwardRef<HTMLTimeElement, TimeProps>(function Time(\n {\n value,\n format = \"auto\",\n hasTooltip = true,\n hasTimeZone = true,\n now,\n refreshInterval = 30_000,\n className,\n tabIndex,\n title,\n onMouseEnter,\n onMouseLeave,\n onFocus,\n onBlur,\n onKeyDown,\n \"aria-describedby\": describedBy,\n ...rest\n },\n ref,\n) {\n const date = value instanceof Date ? value : new Date(value);\n const anchorRef = useRef<HTMLTimeElement | null>(null);\n const [isOpen, setIsOpen] = useState(false);\n const tooltipId = useId();\n const [, setTick] = useState(0);\n\n useEffect(() => {\n if (format === \"absolute\" || now) return;\n const id = window.setInterval(() => setTick((t) => t + 1), refreshInterval);\n return () => window.clearInterval(id);\n }, [format, now, refreshInterval]);\n\n if (Number.isNaN(date.getTime())) return null;\n\n const reference = now ?? new Date();\n const label =\n format === \"absolute\"\n ? formatAbsoluteDate(date)\n : formatRelativeTime(date, reference);\n const stamp = formatAbsoluteTime(date, { hasTimeZone });\n const isTipped = hasTooltip && label !== stamp;\n\n return (\n <>\n <time\n ref={(node) => {\n anchorRef.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n }}\n dateTime={date.toISOString()}\n suppressHydrationWarning\n className={cx(\"ds-time\", !isTipped && \"ds-time--plain\", className)}\n tabIndex={tabIndex ?? (isTipped ? 0 : undefined)}\n aria-describedby={[describedBy, isTipped && isOpen && tooltipId].filter(Boolean).join(\" \") || undefined}\n title={title ?? (isTipped ? undefined : stamp)}\n onMouseEnter={(event) => {\n onMouseEnter?.(event);\n if (isTipped && !event.defaultPrevented) setIsOpen(true);\n }}\n onMouseLeave={(event) => {\n onMouseLeave?.(event);\n if (isTipped && !event.defaultPrevented) setIsOpen(false);\n }}\n onFocus={(event) => {\n onFocus?.(event);\n if (isTipped && !event.defaultPrevented) setIsOpen(true);\n }}\n onBlur={(event) => {\n onBlur?.(event);\n if (isTipped && !event.defaultPrevented) setIsOpen(false);\n }}\n onKeyDown={(event) => {\n onKeyDown?.(event);\n if (isTipped && !event.defaultPrevented && event.key === \"Escape\") setIsOpen(false);\n }}\n {...rest}\n >\n {label}\n </time>\n {isTipped && (\n <Popover\n anchorRef={anchorRef}\n isOpen={isOpen}\n id={tooltipId}\n role=\"tooltip\"\n className=\"ds-surface-raised ds-time-tooltip\"\n >\n {stamp}\n </Popover>\n )}\n </>\n );\n});\n"],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type HTMLAttributes } from "react";
|
|
2
|
+
/** Day before month, one order everywhere: `12 Jun 2026`. */
|
|
3
|
+
export declare function formatAbsoluteDate(date: Date, options?: {
|
|
4
|
+
hasYear?: boolean;
|
|
5
|
+
}): string;
|
|
6
|
+
/** The tooltip form: `6 Aug 2026, 11:05`, with the reader's zone appended. */
|
|
7
|
+
export declare function formatAbsoluteTime(date: Date, options?: {
|
|
8
|
+
hasTimeZone?: boolean;
|
|
9
|
+
}): string;
|
|
10
|
+
/**
|
|
11
|
+
* Relative up to a week, absolute after. Future dates are always absolute — a
|
|
12
|
+
* scheduled publish reads `12 Jun`, never `in 3 days`.
|
|
13
|
+
*/
|
|
14
|
+
export declare function formatRelativeTime(date: Date, now?: Date): string;
|
|
15
|
+
export type TimeFormat = "auto" | "relative" | "absolute";
|
|
16
|
+
export interface TimeProps extends Omit<HTMLAttributes<HTMLElement>, "children"> {
|
|
17
|
+
/** The instant to print — Date, epoch ms, or an ISO string. */
|
|
18
|
+
value: Date | string | number;
|
|
19
|
+
/** `auto` ages the value; `absolute` always prints the date. */
|
|
20
|
+
format?: TimeFormat;
|
|
21
|
+
/** Show the absolute stamp on hover and focus. */
|
|
22
|
+
hasTooltip?: boolean;
|
|
23
|
+
/** Append the reader's time zone to the tooltip. */
|
|
24
|
+
hasTimeZone?: boolean;
|
|
25
|
+
/** Pin "now" — useful for tests and stories. */
|
|
26
|
+
now?: Date;
|
|
27
|
+
/** Re-render interval in ms while the value is still relative. */
|
|
28
|
+
refreshInterval?: number;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* A machine-readable `<time>` that ages itself. One form per cell: relative or
|
|
32
|
+
* absolute, never both side by side.
|
|
33
|
+
*/
|
|
34
|
+
export declare const Time: import("react").ForwardRefExoticComponent<TimeProps & import("react").RefAttributes<HTMLTimeElement>>;
|
|
35
|
+
//# sourceMappingURL=index.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../../src/components/Time/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,cAAc,EACpB,MAAM,OAAO,CAAC;AAEf,OAAO,aAAa,CAAC;AA8BrB,6DAA6D;AAC7D,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,UAIjF;AAED,8EAA8E;AAC9E,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,UAQrF;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,GAAE,IAAiB,UAapE;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC;AAE1D,MAAM,WAAW,SAAU,SAAQ,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC;IAC9E,+DAA+D;IAC/D,KAAK,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;IAC9B,gEAAgE;IAChE,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,kDAAkD;IAClD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,oDAAoD;IACpD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gDAAgD;IAChD,GAAG,CAAC,EAAE,IAAI,CAAC;IACX,kEAAkE;IAClE,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,eAAO,MAAM,IAAI,uGA8Ff,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type HTMLAttributes } from "react";
|
|
2
|
+
/** Day before month, one order everywhere: `12 Jun 2026`. */
|
|
3
|
+
export declare function formatAbsoluteDate(date: Date, options?: {
|
|
4
|
+
hasYear?: boolean;
|
|
5
|
+
}): string;
|
|
6
|
+
/** The tooltip form: `6 Aug 2026, 11:05`, with the reader's zone appended. */
|
|
7
|
+
export declare function formatAbsoluteTime(date: Date, options?: {
|
|
8
|
+
hasTimeZone?: boolean;
|
|
9
|
+
}): string;
|
|
10
|
+
/**
|
|
11
|
+
* Relative up to a week, absolute after. Future dates are always absolute — a
|
|
12
|
+
* scheduled publish reads `12 Jun`, never `in 3 days`.
|
|
13
|
+
*/
|
|
14
|
+
export declare function formatRelativeTime(date: Date, now?: Date): string;
|
|
15
|
+
export type TimeFormat = "auto" | "relative" | "absolute";
|
|
16
|
+
export interface TimeProps extends Omit<HTMLAttributes<HTMLElement>, "children"> {
|
|
17
|
+
/** The instant to print — Date, epoch ms, or an ISO string. */
|
|
18
|
+
value: Date | string | number;
|
|
19
|
+
/** `auto` ages the value; `absolute` always prints the date. */
|
|
20
|
+
format?: TimeFormat;
|
|
21
|
+
/** Show the absolute stamp on hover and focus. */
|
|
22
|
+
hasTooltip?: boolean;
|
|
23
|
+
/** Append the reader's time zone to the tooltip. */
|
|
24
|
+
hasTimeZone?: boolean;
|
|
25
|
+
/** Pin "now" — useful for tests and stories. */
|
|
26
|
+
now?: Date;
|
|
27
|
+
/** Re-render interval in ms while the value is still relative. */
|
|
28
|
+
refreshInterval?: number;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* A machine-readable `<time>` that ages itself. One form per cell: relative or
|
|
32
|
+
* absolute, never both side by side.
|
|
33
|
+
*/
|
|
34
|
+
export declare const Time: import("react").ForwardRefExoticComponent<TimeProps & import("react").RefAttributes<HTMLTimeElement>>;
|
|
35
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Time/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,cAAc,EACpB,MAAM,OAAO,CAAC;AAEf,OAAO,aAAa,CAAC;AA8BrB,6DAA6D;AAC7D,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,UAIjF;AAED,8EAA8E;AAC9E,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAO,UAQrF;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,GAAE,IAAiB,UAapE;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC;AAE1D,MAAM,WAAW,SAAU,SAAQ,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,UAAU,CAAC;IAC9E,+DAA+D;IAC/D,KAAK,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;IAC9B,gEAAgE;IAChE,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,kDAAkD;IAClD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,oDAAoD;IACpD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gDAAgD;IAChD,GAAG,CAAC,EAAE,IAAI,CAAC;IACX,kEAAkE;IAClE,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,eAAO,MAAM,IAAI,uGA8Ff,CAAC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { Popover as e } from "../Popover/index.js";
|
|
2
|
+
import { forwardRef as t, useEffect as n, useId as r, useRef as i, useState as a } from "react";
|
|
3
|
+
import { Fragment as o, jsx as s, jsxs as c } from "react/jsx-runtime";
|
|
4
|
+
//#region src/components/Time/index.tsx
|
|
5
|
+
function l(...e) {
|
|
6
|
+
return e.filter(Boolean).join(" ");
|
|
7
|
+
}
|
|
8
|
+
var u = [
|
|
9
|
+
"Jan",
|
|
10
|
+
"Feb",
|
|
11
|
+
"Mar",
|
|
12
|
+
"Apr",
|
|
13
|
+
"May",
|
|
14
|
+
"Jun",
|
|
15
|
+
"Jul",
|
|
16
|
+
"Aug",
|
|
17
|
+
"Sep",
|
|
18
|
+
"Oct",
|
|
19
|
+
"Nov",
|
|
20
|
+
"Dec"
|
|
21
|
+
], d = 6e4, f = 60 * d, p = 24 * f, m = 7 * p;
|
|
22
|
+
function h(e) {
|
|
23
|
+
return String(e).padStart(2, "0");
|
|
24
|
+
}
|
|
25
|
+
function g(e, t = {}) {
|
|
26
|
+
let { hasYear: n = !0 } = t, r = `${e.getDate()} ${u[e.getMonth()]}`;
|
|
27
|
+
return n ? `${r} ${e.getFullYear()}` : r;
|
|
28
|
+
}
|
|
29
|
+
function _(e, t = {}) {
|
|
30
|
+
let { hasTimeZone: n = !0 } = t, r = `${g(e)}, ${h(e.getHours())}:${h(e.getMinutes())}`;
|
|
31
|
+
if (!n) return r;
|
|
32
|
+
let i = new Intl.DateTimeFormat(void 0, { timeZoneName: "short" }).formatToParts(e).find((e) => e.type === "timeZoneName")?.value;
|
|
33
|
+
return i ? `${r} ${i}` : r;
|
|
34
|
+
}
|
|
35
|
+
function v(e, t = /* @__PURE__ */ new Date()) {
|
|
36
|
+
let n = t.getTime() - e.getTime();
|
|
37
|
+
if (n < 0) return g(e, { hasYear: e.getFullYear() !== t.getFullYear() });
|
|
38
|
+
if (n < d) return "Just now";
|
|
39
|
+
if (n < f) return `${Math.floor(n / d)}m ago`;
|
|
40
|
+
if (n < p) return `${Math.floor(n / f)}h ago`;
|
|
41
|
+
if (n < m) {
|
|
42
|
+
let e = Math.floor(n / p);
|
|
43
|
+
return `${e} ${e === 1 ? "day" : "days"} ago`;
|
|
44
|
+
}
|
|
45
|
+
return g(e, { hasYear: e.getFullYear() !== t.getFullYear() });
|
|
46
|
+
}
|
|
47
|
+
var y = t(function({ value: t, format: u = "auto", hasTooltip: d = !0, hasTimeZone: f = !0, now: p, refreshInterval: m = 3e4, className: h, tabIndex: y, title: b, onMouseEnter: x, onMouseLeave: S, onFocus: C, onBlur: w, onKeyDown: T, "aria-describedby": E, ...D }, O) {
|
|
48
|
+
let k = t instanceof Date ? t : new Date(t), A = i(null), [j, M] = a(!1), N = r(), [, P] = a(0);
|
|
49
|
+
if (n(() => {
|
|
50
|
+
if (u === "absolute" || p) return;
|
|
51
|
+
let e = window.setInterval(() => P((e) => e + 1), m);
|
|
52
|
+
return () => window.clearInterval(e);
|
|
53
|
+
}, [
|
|
54
|
+
u,
|
|
55
|
+
p,
|
|
56
|
+
m
|
|
57
|
+
]), Number.isNaN(k.getTime())) return null;
|
|
58
|
+
let F = u === "absolute" ? g(k) : v(k, p ?? /* @__PURE__ */ new Date()), I = _(k, { hasTimeZone: f }), L = d && F !== I;
|
|
59
|
+
return /* @__PURE__ */ c(o, { children: [/* @__PURE__ */ s("time", {
|
|
60
|
+
ref: (e) => {
|
|
61
|
+
A.current = e, typeof O == "function" ? O(e) : O && (O.current = e);
|
|
62
|
+
},
|
|
63
|
+
dateTime: k.toISOString(),
|
|
64
|
+
suppressHydrationWarning: !0,
|
|
65
|
+
className: l("ds-time", !L && "ds-time--plain", h),
|
|
66
|
+
tabIndex: y ?? (L ? 0 : void 0),
|
|
67
|
+
"aria-describedby": [E, L && j && N].filter(Boolean).join(" ") || void 0,
|
|
68
|
+
title: b ?? (L ? void 0 : I),
|
|
69
|
+
onMouseEnter: (e) => {
|
|
70
|
+
x?.(e), L && !e.defaultPrevented && M(!0);
|
|
71
|
+
},
|
|
72
|
+
onMouseLeave: (e) => {
|
|
73
|
+
S?.(e), L && !e.defaultPrevented && M(!1);
|
|
74
|
+
},
|
|
75
|
+
onFocus: (e) => {
|
|
76
|
+
C?.(e), L && !e.defaultPrevented && M(!0);
|
|
77
|
+
},
|
|
78
|
+
onBlur: (e) => {
|
|
79
|
+
w?.(e), L && !e.defaultPrevented && M(!1);
|
|
80
|
+
},
|
|
81
|
+
onKeyDown: (e) => {
|
|
82
|
+
T?.(e), L && !e.defaultPrevented && e.key === "Escape" && M(!1);
|
|
83
|
+
},
|
|
84
|
+
...D,
|
|
85
|
+
children: F
|
|
86
|
+
}), L && /* @__PURE__ */ s(e, {
|
|
87
|
+
anchorRef: A,
|
|
88
|
+
isOpen: j,
|
|
89
|
+
id: N,
|
|
90
|
+
role: "tooltip",
|
|
91
|
+
className: "ds-surface-raised ds-time-tooltip",
|
|
92
|
+
children: I
|
|
93
|
+
})] });
|
|
94
|
+
});
|
|
95
|
+
//#endregion
|
|
96
|
+
export { y as Time, g as formatAbsoluteDate, _ as formatAbsoluteTime, v as formatRelativeTime };
|
|
97
|
+
|
|
98
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["_Fragment","cx","parts","MONTHS","MINUTE","HOUR","DAY","WEEK","pad","value","formatAbsoluteDate","options","stem","date","hasYear","formatAbsoluteTime","stamp","hasTimeZone","zone","part","formatRelativeTime","delta","now","days","Time","forwardRef","describedBy","rest","anchorRef","useRef","isOpen","setIsOpen","useState","tooltipId","useId","setTick","useEffect","format","id","t","refreshInterval","label","isTipped","hasTooltip","Fragment","node","ref","className","tabIndex","title","onMouseEnter","event","onMouseLeave","onFocus","onBlur","onKeyDown","Popover"],"sources":["../../../src/components/Time/index.tsx"],"sourcesContent":["import {\n forwardRef,\n useEffect,\n useId,\n useRef,\n useState,\n type HTMLAttributes,\n} from \"react\";\nimport { Popover } from \"../Popover\";\nimport \"./style.css\";\n\nfunction cx(...parts: (string | undefined | false)[]) {\n return parts.filter(Boolean).join(\" \");\n}\n\nconst MONTHS = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n];\n\nconst MINUTE = 60_000;\nconst HOUR = 60 * MINUTE;\nconst DAY = 24 * HOUR;\nconst WEEK = 7 * DAY;\n\nfunction pad(value: number) {\n return String(value).padStart(2, \"0\");\n}\n\n/** Day before month, one order everywhere: `12 Jun 2026`. */\nexport function formatAbsoluteDate(date: Date, options: { hasYear?: boolean } = {}) {\n const { hasYear = true } = options;\n const stem = `${date.getDate()} ${MONTHS[date.getMonth()]}`;\n return hasYear ? `${stem} ${date.getFullYear()}` : stem;\n}\n\n/** The tooltip form: `6 Aug 2026, 11:05`, with the reader's zone appended. */\nexport function formatAbsoluteTime(date: Date, options: { hasTimeZone?: boolean } = {}) {\n const { hasTimeZone = true } = options;\n const stamp = `${formatAbsoluteDate(date)}, ${pad(date.getHours())}:${pad(date.getMinutes())}`;\n if (!hasTimeZone) return stamp;\n const zone = new Intl.DateTimeFormat(undefined, { timeZoneName: \"short\" })\n .formatToParts(date)\n .find((part) => part.type === \"timeZoneName\")?.value;\n return zone ? `${stamp} ${zone}` : stamp;\n}\n\n/**\n * Relative up to a week, absolute after. Future dates are always absolute — a\n * scheduled publish reads `12 Jun`, never `in 3 days`.\n */\nexport function formatRelativeTime(date: Date, now: Date = new Date()) {\n const delta = now.getTime() - date.getTime();\n if (delta < 0) {\n return formatAbsoluteDate(date, { hasYear: date.getFullYear() !== now.getFullYear() });\n }\n if (delta < MINUTE) return \"Just now\";\n if (delta < HOUR) return `${Math.floor(delta / MINUTE)}m ago`;\n if (delta < DAY) return `${Math.floor(delta / HOUR)}h ago`;\n if (delta < WEEK) {\n const days = Math.floor(delta / DAY);\n return `${days} ${days === 1 ? \"day\" : \"days\"} ago`;\n }\n return formatAbsoluteDate(date, { hasYear: date.getFullYear() !== now.getFullYear() });\n}\n\nexport type TimeFormat = \"auto\" | \"relative\" | \"absolute\";\n\nexport interface TimeProps extends Omit<HTMLAttributes<HTMLElement>, \"children\"> {\n /** The instant to print — Date, epoch ms, or an ISO string. */\n value: Date | string | number;\n /** `auto` ages the value; `absolute` always prints the date. */\n format?: TimeFormat;\n /** Show the absolute stamp on hover and focus. */\n hasTooltip?: boolean;\n /** Append the reader's time zone to the tooltip. */\n hasTimeZone?: boolean;\n /** Pin \"now\" — useful for tests and stories. */\n now?: Date;\n /** Re-render interval in ms while the value is still relative. */\n refreshInterval?: number;\n}\n\n/**\n * A machine-readable `<time>` that ages itself. One form per cell: relative or\n * absolute, never both side by side.\n */\nexport const Time = forwardRef<HTMLTimeElement, TimeProps>(function Time(\n {\n value,\n format = \"auto\",\n hasTooltip = true,\n hasTimeZone = true,\n now,\n refreshInterval = 30_000,\n className,\n tabIndex,\n title,\n onMouseEnter,\n onMouseLeave,\n onFocus,\n onBlur,\n onKeyDown,\n \"aria-describedby\": describedBy,\n ...rest\n },\n ref,\n) {\n const date = value instanceof Date ? value : new Date(value);\n const anchorRef = useRef<HTMLTimeElement | null>(null);\n const [isOpen, setIsOpen] = useState(false);\n const tooltipId = useId();\n const [, setTick] = useState(0);\n\n useEffect(() => {\n if (format === \"absolute\" || now) return;\n const id = window.setInterval(() => setTick((t) => t + 1), refreshInterval);\n return () => window.clearInterval(id);\n }, [format, now, refreshInterval]);\n\n if (Number.isNaN(date.getTime())) return null;\n\n const reference = now ?? new Date();\n const label =\n format === \"absolute\"\n ? formatAbsoluteDate(date)\n : formatRelativeTime(date, reference);\n const stamp = formatAbsoluteTime(date, { hasTimeZone });\n const isTipped = hasTooltip && label !== stamp;\n\n return (\n <>\n <time\n ref={(node) => {\n anchorRef.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n }}\n dateTime={date.toISOString()}\n suppressHydrationWarning\n className={cx(\"ds-time\", !isTipped && \"ds-time--plain\", className)}\n tabIndex={tabIndex ?? (isTipped ? 0 : undefined)}\n aria-describedby={[describedBy, isTipped && isOpen && tooltipId].filter(Boolean).join(\" \") || undefined}\n title={title ?? (isTipped ? undefined : stamp)}\n onMouseEnter={(event) => {\n onMouseEnter?.(event);\n if (isTipped && !event.defaultPrevented) setIsOpen(true);\n }}\n onMouseLeave={(event) => {\n onMouseLeave?.(event);\n if (isTipped && !event.defaultPrevented) setIsOpen(false);\n }}\n onFocus={(event) => {\n onFocus?.(event);\n if (isTipped && !event.defaultPrevented) setIsOpen(true);\n }}\n onBlur={(event) => {\n onBlur?.(event);\n if (isTipped && !event.defaultPrevented) setIsOpen(false);\n }}\n onKeyDown={(event) => {\n onKeyDown?.(event);\n if (isTipped && !event.defaultPrevented && event.key === \"Escape\") setIsOpen(false);\n }}\n {...rest}\n >\n {label}\n </time>\n {isTipped && (\n <Popover\n anchorRef={anchorRef}\n isOpen={isOpen}\n id={tooltipId}\n role=\"tooltip\"\n className=\"ds-surface-raised ds-time-tooltip\"\n >\n {stamp}\n </Popover>\n )}\n </>\n );\n});\n"],"mappings":";;;;AAWA,SAASC,EAAG,GAAGC,GAAuC;CACpD,OAAOA,EAAM,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;AACvC;AAEA,IAAMC,IAAS;CACb;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,GAEMC,IAAS,KACTC,IAAO,KAAKD,GACZE,IAAM,KAAKD,GACXE,IAAO,IAAID;AAEjB,SAASE,EAAI,GAAe;CAC1B,OAAO,OAAOC,CAAK,CAAC,CAAC,SAAS,GAAG,GAAG;AACtC;AAGA,SAAgBC,EAAmB,GAAY,IAAiC,CAAC,GAAG;CAClF,IAAM,EAAE,aAAU,OAASC,GACrBC,IAAO,GAAGC,EAAK,QAAQ,EAAE,GAAGV,EAAOU,EAAK,SAAS;CACvD,OAAOC,IAAU,GAAGF,EAAK,GAAGC,EAAK,YAAY,MAAMD;AACrD;AAGA,SAAgBG,EAAmB,GAAY,IAAqC,CAAC,GAAG;CACtF,IAAM,EAAE,iBAAc,OAASJ,GACzBK,IAAQ,GAAGN,EAAmBG,CAAI,EAAE,IAAIL,EAAIK,EAAK,SAAS,CAAC,EAAE,GAAGL,EAAIK,EAAK,WAAW,CAAC;CAC3F,IAAI,CAACI,GAAa,OAAOD;CACzB,IAAME,IAAO,IAAI,KAAK,eAAe,KAAA,GAAW,EAAE,cAAc,QAAQ,CAAC,CAAC,CACvE,cAAcL,CAAI,CAAC,CACnB,MAAM,MAASM,EAAK,SAAS,cAAc,CAAC,EAAE;CACjD,OAAOD,IAAO,GAAGF,EAAM,GAAGE,MAASF;AACrC;AAMA,SAAgBI,EAAmB,GAAY,oBAAY,IAAI,KAAK,GAAG;CACrE,IAAMC,IAAQC,EAAI,QAAQ,IAAIT,EAAK,QAAQ;CAC3C,IAAIQ,IAAQ,GACV,OAAOX,EAAmBG,GAAM,EAAE,SAASA,EAAK,YAAY,MAAMS,EAAI,YAAY,EAAE,CAAC;CAEvF,IAAID,IAAQjB,GAAQ,OAAO;CAC3B,IAAIiB,IAAQhB,GAAM,OAAO,GAAG,KAAK,MAAMgB,IAAQjB,CAAM,EAAE;CACvD,IAAIiB,IAAQf,GAAK,OAAO,GAAG,KAAK,MAAMe,IAAQhB,CAAI,EAAE;CACpD,IAAIgB,IAAQd,GAAM;EAChB,IAAMgB,IAAO,KAAK,MAAMF,IAAQf,CAAG;EACnC,OAAO,GAAGiB,EAAK,GAAGA,MAAS,IAAI,QAAQ,OAAO;CAChD;CACA,OAAOb,EAAmBG,GAAM,EAAE,SAASA,EAAK,YAAY,MAAMS,EAAI,YAAY,EAAE,CAAC;AACvF;AAuBA,IAAaE,IAAOC,EAAuC,SACzD,EACE,UACA,YAAS,QACT,gBAAa,IACb,iBAAc,IACd,QACA,qBAAkB,KAClB,cACA,aACA,UACA,iBACA,iBACA,YACA,WACA,cACA,oBAAoBC,GACpB,GAAGC,KAEL,GACA;CACA,IAAMd,IAAOJ,aAAiB,OAAOA,IAAQ,IAAI,KAAKA,CAAK,GACrDmB,IAAYC,EAA+B,IAAI,GAC/C,CAACC,GAAQC,KAAaC,EAAS,EAAK,GACpCC,IAAYC,EAAM,GAClB,GAAGC,KAAWH,EAAS,CAAC;CAQ9B,IANAI,QAAgB;EACd,IAAIC,MAAW,cAAcf,GAAK;EAClC,IAAMgB,IAAK,OAAO,kBAAkBH,GAAS,MAAMI,IAAI,CAAC,GAAGC,CAAe;EAC1E,aAAa,OAAO,cAAcF,CAAE;CACtC,GAAG;EAACD;EAAQf;EAAKkB;CAAe,CAAC,GAE7B,OAAO,MAAM3B,EAAK,QAAQ,CAAC,GAAG,OAAO;CAGzC,IAAM4B,IACJJ,MAAW,aACP3B,EAAmBG,CAAI,IACvBO,EAAmBP,GAJPS,qBAAO,IAAI,KAAK,CAIM,GAClCN,IAAQD,EAAmBF,GAAM,EAAE,eAAY,CAAC,GAChD6B,IAAWC,KAAcF,MAAUzB;CAEzC,OACE,kBAAAhB,GAAA,EAAA,UAAA,CACE,kBAAC,QAAD;EACE,MAAM,MAAS;GAEb,AADA,EAAU,UAAU6C,GAChB,OAAOC,KAAQ,aAAYA,EAAID,CAAI,IAC9BC,MAAK,EAAI,UAAUD;EAC9B;EACA,UAAUhC,EAAK,YAAY;EAC3B,0BAAA;EACA,WAAWZ,EAAG,WAAW,CAACyC,KAAY,kBAAkBK,CAAS;EACjE,UAAUC,MAAaN,IAAW,IAAI,KAAA;EACtC,oBAAkB,CAAChB,GAAagB,KAAYZ,KAAUG,CAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG,KAAK,KAAA;EAC9F,OAAOgB,MAAUP,IAAW,KAAA,IAAY1B;EACxC,eAAe,MAAU;GAEvB,AADAkC,IAAeC,CAAK,GAChBT,KAAY,CAACS,EAAM,oBAAkBpB,EAAU,EAAI;EACzD;EACA,eAAe,MAAU;GAEvB,AADAqB,IAAeD,CAAK,GAChBT,KAAY,CAACS,EAAM,oBAAkBpB,EAAU,EAAK;EAC1D;EACA,UAAU,MAAU;GAElB,AADAsB,IAAUF,CAAK,GACXT,KAAY,CAACS,EAAM,oBAAkBpB,EAAU,EAAI;EACzD;EACA,SAAS,MAAU;GAEjB,AADAuB,IAASH,CAAK,GACVT,KAAY,CAACS,EAAM,oBAAkBpB,EAAU,EAAK;EAC1D;EACA,YAAY,MAAU;GAEpB,AADAwB,IAAYJ,CAAK,GACbT,KAAY,CAACS,EAAM,oBAAoBA,EAAM,QAAQ,YAAUpB,EAAU,EAAK;EACpF;EACA,GAAIJ;EAEH,UAAAc;CACG,CAAA,GACLC,KACC,kBAACc,GAAD;EACa;EACH;EACR,IAAIvB;EACJ,MAAK;EACL,WAAU;EAET,UAAAjB;CACM,CAAA,CAEX,EAAA,CAAA;AAEN,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
@layer components {
|
|
2
|
+
/* The dotted underline is the only affordance — no icon, no colour change. */
|
|
3
|
+
.ds-time {
|
|
4
|
+
font-variant-numeric: tabular-nums;
|
|
5
|
+
text-decoration: underline dotted
|
|
6
|
+
color-mix(in srgb, var(--color-text) 45%, transparent);
|
|
7
|
+
text-underline-offset: 3px;
|
|
8
|
+
cursor: help;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.ds-time:focus-visible {
|
|
12
|
+
outline: var(--control-border-width) solid var(--color-focus);
|
|
13
|
+
outline-offset: 2px;
|
|
14
|
+
border-radius: var(--radius-sm);
|
|
15
|
+
text-decoration: none;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.ds-time--plain {
|
|
19
|
+
text-decoration: none;
|
|
20
|
+
cursor: auto;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.ds-time-tooltip {
|
|
24
|
+
padding: var(--space-2) var(--space-3);
|
|
25
|
+
color: var(--color-text);
|
|
26
|
+
font-size: var(--font-size-xs);
|
|
27
|
+
white-space: nowrap;
|
|
28
|
+
font-variant-numeric: tabular-nums;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../chunks/Icon-CWsA1W83.cjs"),t=require("../Button/index.cjs");let n=require("react"),r=require("react/jsx-runtime");var i={neutral:`info`,info:`info`,success:`check`,warning:`alert-triangle`,danger:`alert-triangle`},a=(0,n.forwardRef)(function({tone:n=`neutral`,title:a,description:o,onDismiss:s,className:c,...l},u){return(0,r.jsxs)(`div`,{ref:u,role:`status`,"data-tone":n===`neutral`?void 0:n,className:[`ds-toast`,c].filter(Boolean).join(` `),...l,children:[(0,r.jsx)(e.t,{name:i[n],size:20,className:`ds-toast__icon`}),(0,r.jsxs)(`div`,{className:`ds-toast__body`,children:[(0,r.jsx)(`span`,{className:`ds-toast__title`,children:a}),o&&(0,r.jsx)(`span`,{className:`ds-toast__description`,children:o})]}),s&&(0,r.jsx)(t.Button,{variant:`simple`,size:`sm`,isIconOnly:!0,iconStart:`x`,"aria-label":`Dismiss notification`,onClick:s})]})}),o=(0,n.createContext)(null);function s({children:e}){let[t,i]=(0,n.useState)([]),a=(0,n.useRef)(0),s=(0,n.useCallback)(e=>{i(t=>t.filter(t=>t.id!==e))},[]),l=(0,n.useCallback)(e=>{i(t=>[...t,{...e,id:a.current++}])},[]),u=(0,n.useMemo)(()=>({toast:l,dismiss:s}),[l,s]);return(0,r.jsxs)(o.Provider,{value:u,children:[e,(0,r.jsx)(c,{items:t,onDismiss:s})]})}function c({items:e,onDismiss:t}){return e.length===0?null:(0,r.jsx)(`div`,{className:`ds-toast-region`,role:`region`,"aria-label":`Notifications`,children:e.map(e=>(0,r.jsx)(l,{item:e,onDismiss:t},e.id))})}function l({item:e,onDismiss:t}){return(0,n.useEffect)(()=>{let n=window.setTimeout(()=>t(e.id),e.duration??5e3);return()=>window.clearTimeout(n)},[e,t]),(0,r.jsx)(a,{tone:e.tone,title:e.title,description:e.description,onDismiss:()=>t(e.id)})}function u(){let e=(0,n.useContext)(o);if(!e)throw Error(`useToast must be used inside a <ToastProvider>.`);return e}exports.Toast=a,exports.ToastProvider=s,exports.useToast=u;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["forwardRef","Icon","Button","createContext","useState","useRef","useCallback","useMemo","useContext","require_Icon","require_components_Button_index","react","react_jsx_runtime","TONE_ICON","Toast","rest","tone","className","title","description","onDismiss","ToastContext","ToastProvider","items","setItems","nextId","dismiss","current","item","id","toast","options","value","children","ToastRegion","TimedToast","timer","useToast","context"],"sources":["../../../src/components/Toast/index.tsx"],"sourcesContent":["import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { Button } from \"../Button\";\nimport { Icon } from \"../Icon\";\nimport type { IconName } from \"../Icon/icons\";\nimport \"./style.css\";\n\nexport type ToastTone = \"neutral\" | \"info\" | \"success\" | \"warning\" | \"danger\";\n\nconst TONE_ICON: Record<ToastTone, IconName> = {\n neutral: \"info\",\n info: \"info\",\n success: \"check\",\n warning: \"alert-triangle\",\n danger: \"alert-triangle\",\n};\n\nexport interface ToastProps extends HTMLAttributes<HTMLDivElement> {\n tone?: ToastTone;\n title: string;\n description?: string;\n /** Renders a dismiss button. Omit for a toast that only times out. */\n onDismiss?: () => void;\n}\n\n/** One fact about something that already happened. Never a question. */\nexport const Toast = forwardRef<HTMLDivElement, ToastProps>(function Toast(\n { tone = \"neutral\", title, description, onDismiss, className, ...rest },\n ref,\n) {\n return (\n <div\n ref={ref}\n role=\"status\"\n data-tone={tone === \"neutral\" ? undefined : tone}\n className={[\"ds-toast\", className].filter(Boolean).join(\" \")}\n {...rest}\n >\n <Icon name={TONE_ICON[tone]} size={20} className=\"ds-toast__icon\" />\n <div className=\"ds-toast__body\">\n <span className=\"ds-toast__title\">{title}</span>\n {description && <span className=\"ds-toast__description\">{description}</span>}\n </div>\n {onDismiss && (\n <Button\n variant=\"simple\"\n size=\"sm\"\n isIconOnly\n iconStart=\"x\"\n aria-label=\"Dismiss notification\"\n onClick={onDismiss}\n />\n )}\n </div>\n );\n});\n\nexport interface ToastOptions {\n tone?: ToastTone;\n title: string;\n description?: string;\n /** Milliseconds before it dismisses itself. Defaults to `--toast-duration`. */\n duration?: number;\n}\n\ninterface ToastRecord extends ToastOptions {\n id: number;\n}\n\ninterface ToastContextValue {\n toast: (options: ToastOptions) => void;\n dismiss: (id: number) => void;\n}\n\nconst ToastContext = createContext<ToastContextValue | null>(null);\n\nexport interface ToastProviderProps {\n children: ReactNode;\n}\n\n/** Mount once, near the root. Everything below it can call `useToast()`. */\nexport function ToastProvider({ children }: ToastProviderProps) {\n const [items, setItems] = useState<ToastRecord[]>([]);\n const nextId = useRef(0);\n\n const dismiss = useCallback((id: number) => {\n setItems((current) => current.filter((item) => item.id !== id));\n }, []);\n\n const toast = useCallback((options: ToastOptions) => {\n setItems((current) => [...current, { ...options, id: nextId.current++ }]);\n }, []);\n\n const value = useMemo(() => ({ toast, dismiss }), [toast, dismiss]);\n\n return (\n <ToastContext.Provider value={value}>\n {children}\n <ToastRegion items={items} onDismiss={dismiss} />\n </ToastContext.Provider>\n );\n}\n\nfunction ToastRegion({\n items,\n onDismiss,\n}: {\n items: ToastRecord[];\n onDismiss: (id: number) => void;\n}) {\n if (items.length === 0) return null;\n return (\n <div className=\"ds-toast-region\" role=\"region\" aria-label=\"Notifications\">\n {items.map((item) => (\n <TimedToast key={item.id} item={item} onDismiss={onDismiss} />\n ))}\n </div>\n );\n}\n\nfunction TimedToast({\n item,\n onDismiss,\n}: {\n item: ToastRecord;\n onDismiss: (id: number) => void;\n}) {\n useEffect(() => {\n const timer = window.setTimeout(() => onDismiss(item.id), item.duration ?? 5000);\n return () => window.clearTimeout(timer);\n }, [item, onDismiss]);\n\n return (\n <Toast\n tone={item.tone}\n title={item.title}\n description={item.description}\n onDismiss={() => onDismiss(item.id)}\n />\n );\n}\n\nexport function useToast(): ToastContextValue {\n const context = useContext(ToastContext);\n if (!context) throw new Error(\"useToast must be used inside a <ToastProvider>.\");\n return context;\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type HTMLAttributes, type ReactNode } from "react";
|
|
2
|
+
export type ToastTone = "neutral" | "info" | "success" | "warning" | "danger";
|
|
3
|
+
export interface ToastProps extends HTMLAttributes<HTMLDivElement> {
|
|
4
|
+
tone?: ToastTone;
|
|
5
|
+
title: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
/** Renders a dismiss button. Omit for a toast that only times out. */
|
|
8
|
+
onDismiss?: () => void;
|
|
9
|
+
}
|
|
10
|
+
/** One fact about something that already happened. Never a question. */
|
|
11
|
+
export declare const Toast: import("react").ForwardRefExoticComponent<ToastProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
12
|
+
export interface ToastOptions {
|
|
13
|
+
tone?: ToastTone;
|
|
14
|
+
title: string;
|
|
15
|
+
description?: string;
|
|
16
|
+
/** Milliseconds before it dismisses itself. Defaults to `--toast-duration`. */
|
|
17
|
+
duration?: number;
|
|
18
|
+
}
|
|
19
|
+
interface ToastContextValue {
|
|
20
|
+
toast: (options: ToastOptions) => void;
|
|
21
|
+
dismiss: (id: number) => void;
|
|
22
|
+
}
|
|
23
|
+
export interface ToastProviderProps {
|
|
24
|
+
children: ReactNode;
|
|
25
|
+
}
|
|
26
|
+
/** Mount once, near the root. Everything below it can call `useToast()`. */
|
|
27
|
+
export declare function ToastProvider({ children }: ToastProviderProps): import("react").JSX.Element;
|
|
28
|
+
export declare function useToast(): ToastContextValue;
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=index.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../../src/components/Toast/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,cAAc,EACnB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAIf,OAAO,aAAa,CAAC;AAErB,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAU9E,MAAM,WAAW,UAAW,SAAQ,cAAc,CAAC,cAAc,CAAC;IAChE,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,wEAAwE;AACxE,eAAO,MAAM,KAAK,uGA6BhB,CAAC;AAEH,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAMD,UAAU,iBAAiB;IACzB,KAAK,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC;IACvC,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B;AAID,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,4EAA4E;AAC5E,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,EAAE,kBAAkB,+BAoB7D;AAyCD,wBAAgB,QAAQ,IAAI,iBAAiB,CAI5C"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type HTMLAttributes, type ReactNode } from "react";
|
|
2
|
+
export type ToastTone = "neutral" | "info" | "success" | "warning" | "danger";
|
|
3
|
+
export interface ToastProps extends HTMLAttributes<HTMLDivElement> {
|
|
4
|
+
tone?: ToastTone;
|
|
5
|
+
title: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
/** Renders a dismiss button. Omit for a toast that only times out. */
|
|
8
|
+
onDismiss?: () => void;
|
|
9
|
+
}
|
|
10
|
+
/** One fact about something that already happened. Never a question. */
|
|
11
|
+
export declare const Toast: import("react").ForwardRefExoticComponent<ToastProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
12
|
+
export interface ToastOptions {
|
|
13
|
+
tone?: ToastTone;
|
|
14
|
+
title: string;
|
|
15
|
+
description?: string;
|
|
16
|
+
/** Milliseconds before it dismisses itself. Defaults to `--toast-duration`. */
|
|
17
|
+
duration?: number;
|
|
18
|
+
}
|
|
19
|
+
interface ToastContextValue {
|
|
20
|
+
toast: (options: ToastOptions) => void;
|
|
21
|
+
dismiss: (id: number) => void;
|
|
22
|
+
}
|
|
23
|
+
export interface ToastProviderProps {
|
|
24
|
+
children: ReactNode;
|
|
25
|
+
}
|
|
26
|
+
/** Mount once, near the root. Everything below it can call `useToast()`. */
|
|
27
|
+
export declare function ToastProvider({ children }: ToastProviderProps): import("react").JSX.Element;
|
|
28
|
+
export declare function useToast(): ToastContextValue;
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Toast/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,cAAc,EACnB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAIf,OAAO,aAAa,CAAC;AAErB,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAU9E,MAAM,WAAW,UAAW,SAAQ,cAAc,CAAC,cAAc,CAAC;IAChE,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,wEAAwE;AACxE,eAAO,MAAM,KAAK,uGA6BhB,CAAC;AAEH,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAMD,UAAU,iBAAiB;IACzB,KAAK,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC;IACvC,OAAO,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B;AAID,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,4EAA4E;AAC5E,wBAAgB,aAAa,CAAC,EAAE,QAAQ,EAAE,EAAE,kBAAkB,+BAoB7D;AAyCD,wBAAgB,QAAQ,IAAI,iBAAiB,CAI5C"}
|