@namroodinc/liquid-editorial 0.0.0-stage → 0.1.0
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 +67 -2
- 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/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/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 +178 -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 +19 -0
- package/dist/components/Field/index.d.cts.map +1 -0
- package/dist/components/Field/index.d.ts +19 -0
- package/dist/components/Field/index.d.ts.map +1 -0
- package/dist/components/Field/index.js +41 -0
- package/dist/components/Field/index.js.map +1 -0
- package/dist/components/Field/style.css +100 -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/index.cjs +2 -0
- package/dist/components/RichTextEditor/index.cjs.map +1 -0
- package/dist/components/RichTextEditor/index.d.cts +23 -0
- package/dist/components/RichTextEditor/index.d.cts.map +1 -0
- package/dist/components/RichTextEditor/index.d.ts +23 -0
- package/dist/components/RichTextEditor/index.d.ts.map +1 -0
- package/dist/components/RichTextEditor/index.js +175 -0
- package/dist/components/RichTextEditor/index.js.map +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 +77 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.ts +77 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38 -0
- package/dist/reset.css +15 -0
- package/dist/reset.css.d.ts +2 -0
- package/dist/styles.css +39 -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 +130 -4
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
@layer components {
|
|
2
|
+
/* The collection frame. Heavy outer stroke, hairline inner rules, a solid
|
|
3
|
+
* rail on the selected row — the house idea, in one component. */
|
|
4
|
+
.ds-table-frame {
|
|
5
|
+
--field-bg: var(--color-surface);
|
|
6
|
+
|
|
7
|
+
border: var(--frame-width) solid var(--frame-color);
|
|
8
|
+
border-radius: var(--radius-lg);
|
|
9
|
+
background: var(--color-surface);
|
|
10
|
+
overflow: hidden;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.ds-table-frame__scroll {
|
|
14
|
+
overflow-x: auto;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.ds-table-toolbar {
|
|
18
|
+
display: flex;
|
|
19
|
+
align-items: center;
|
|
20
|
+
justify-content: space-between;
|
|
21
|
+
gap: var(--space-4);
|
|
22
|
+
padding: var(--space-4) var(--table-row-pad-inline);
|
|
23
|
+
background: var(--color-surface-subtle);
|
|
24
|
+
border-block-end: var(--rule-width) solid var(--rule-color);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.ds-table-toolbar__group {
|
|
28
|
+
display: flex;
|
|
29
|
+
align-items: center;
|
|
30
|
+
gap: var(--space-3);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.ds-table-toolbar__title {
|
|
34
|
+
font-size: var(--font-size-md);
|
|
35
|
+
font-weight: var(--font-weight-bold);
|
|
36
|
+
line-height: var(--line-height-tight);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.ds-table {
|
|
40
|
+
inline-size: 100%;
|
|
41
|
+
border-collapse: collapse;
|
|
42
|
+
font-size: var(--table-cell-size);
|
|
43
|
+
color: var(--color-text);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.ds-table th {
|
|
47
|
+
text-align: start;
|
|
48
|
+
font-size: var(--table-head-size);
|
|
49
|
+
font-weight: var(--table-head-weight);
|
|
50
|
+
letter-spacing: var(--table-head-tracking);
|
|
51
|
+
text-transform: uppercase;
|
|
52
|
+
color: var(--color-text-muted);
|
|
53
|
+
padding: var(--space-3) var(--table-row-pad-inline);
|
|
54
|
+
border-block-end: var(--rule-width) solid var(--rule-color);
|
|
55
|
+
white-space: nowrap;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.ds-table th[data-align="end"],
|
|
59
|
+
.ds-table td[data-align="end"] {
|
|
60
|
+
text-align: end;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.ds-table th[data-width="control"],
|
|
64
|
+
.ds-table td[data-width="control"] {
|
|
65
|
+
inline-size: var(--space-12);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.ds-table td {
|
|
69
|
+
padding: var(--table-row-pad-block) var(--table-row-pad-inline);
|
|
70
|
+
vertical-align: middle;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.ds-table td[data-emphasis="primary"] {
|
|
74
|
+
font-size: var(--table-cell-primary-size);
|
|
75
|
+
font-weight: var(--font-weight-medium);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.ds-table td[data-emphasis="muted"] {
|
|
79
|
+
color: var(--color-text-muted);
|
|
80
|
+
font-size: var(--font-size-sm);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.ds-table tbody tr {
|
|
84
|
+
border-block-end: var(--rule-width) solid var(--rule-color);
|
|
85
|
+
/* The rail exists at every row so selection never shifts the layout. */
|
|
86
|
+
box-shadow: inset var(--rail-width) 0 0 0 transparent;
|
|
87
|
+
transition: background-color var(--duration-fast) var(--ease-standard);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.ds-table tbody tr:last-child {
|
|
91
|
+
border-block-end: none;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.ds-table tbody tr[data-interactive]:hover {
|
|
95
|
+
background: var(--field-hover);
|
|
96
|
+
cursor: pointer;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.ds-table tbody tr[data-selected] {
|
|
100
|
+
background: var(--color-primary-soft);
|
|
101
|
+
box-shadow: inset var(--rail-width) 0 0 0 var(--rail-color);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.ds-table tbody tr[data-selected]:hover {
|
|
105
|
+
background: var(--color-primary-soft-hover);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.ds-table tbody tr:focus-visible {
|
|
109
|
+
outline: var(--control-border-width) solid var(--color-focus);
|
|
110
|
+
outline-offset: -2px;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
.ds-table-empty {
|
|
114
|
+
display: flex;
|
|
115
|
+
flex-direction: column;
|
|
116
|
+
align-items: center;
|
|
117
|
+
gap: var(--space-3);
|
|
118
|
+
padding: var(--space-12) var(--space-6);
|
|
119
|
+
color: var(--color-text-muted);
|
|
120
|
+
text-align: center;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../chunks/Icon-CWsA1W83.cjs");;/* empty css */let t=require("react"),n=require("react/jsx-runtime");function r(...e){return e.filter(Boolean).join(` `)}var i=(0,t.forwardRef)(function({value:i,defaultValue:a=[],onValueChange:o,placeholder:s=`Add a tag`,size:c=`md`,max:l,isDisabled:u=!1,isInvalid:d=!1,className:f,...p},m){let[h,g]=(0,t.useState)(a),_=i??h,[v,y]=(0,t.useState)(``),b=(0,t.useRef)(null),x=e=>{i===void 0&&g(e),o?.(e)},S=e=>{let t=e.trim();t&&!_.includes(t)&&(l!==void 0&&_.length>=l||x([..._,t]))};return(0,n.jsxs)(`div`,{className:r(`ds-field-skin`,`ds-tags`,f),"data-size":c,"data-disabled":u||void 0,"aria-invalid":d||void 0,onClick:()=>b.current?.focus(),children:[_.map(t=>(0,n.jsxs)(`span`,{className:`ds-tags__tag`,children:[t,(0,n.jsx)(`button`,{type:`button`,className:`ds-tags__remove`,"aria-label":`Remove ${t}`,disabled:u,onClick:e=>{e.stopPropagation(),x(_.filter(e=>e!==t))},children:(0,n.jsx)(e.t,{name:`x`,size:16})})]},t)),(0,n.jsx)(`input`,{ref:e=>{b.current=e,typeof m==`function`?m(e):m&&(m.current=e)},type:`text`,className:`ds-tags__input`,value:v,placeholder:_.length===0?s:``,disabled:u,onChange:e=>y(e.target.value),onKeyDown:e=>{e.key===`Enter`||e.key===`,`?(e.preventDefault(),S(v),y(``)):e.key===`Backspace`&&v===``&&_.length>0&&x(_.slice(0,-1))},onBlur:()=>{S(v),y(``)},...p})]})});exports.TagsInput=i;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["forwardRef","useState","useRef","Icon","require_Icon","react","react_jsx_runtime","cx","parts","TagsInput","rest","internal","setInternal","defaultValue","current","value","draft","setDraft","inputRef","commit","next","onValueChange","add","tag","raw","max","className","size","isDisabled","isInvalid","event","item","node","ref","placeholder"],"sources":["../../../src/components/TagsInput/index.tsx"],"sourcesContent":["import { forwardRef, useRef, useState, type KeyboardEvent } from \"react\";\nimport { Icon } from \"../Icon\";\nimport type { FieldSize } from \"../Field\";\nimport \"../Field/style.css\";\nimport \"./style.css\";\n\nfunction cx(...parts: (string | undefined | false)[]) {\n return parts.filter(Boolean).join(\" \");\n}\n\nexport interface TagsInputProps {\n value?: string[];\n defaultValue?: string[];\n onValueChange?: (value: string[]) => void;\n placeholder?: string;\n size?: FieldSize;\n /** Stop accepting new tags past this count. */\n max?: number;\n isDisabled?: boolean;\n isInvalid?: boolean;\n id?: string;\n className?: string;\n \"aria-label\"?: string;\n \"aria-describedby\"?: string;\n}\n\n/**\n * Free-text keywords. Enter or comma commits a tag, Backspace on an empty\n * input removes the last one. Tags are plain strings — never status tones.\n */\nexport const TagsInput = forwardRef<HTMLInputElement, TagsInputProps>(function TagsInput(\n {\n value,\n defaultValue = [],\n onValueChange,\n placeholder = \"Add a tag\",\n size = \"md\",\n max,\n isDisabled = false,\n isInvalid = false,\n className,\n ...rest\n },\n ref,\n) {\n const [internal, setInternal] = useState<string[]>(defaultValue);\n const current = value ?? internal;\n const [draft, setDraft] = useState(\"\");\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n const commit = (next: string[]) => {\n if (value === undefined) setInternal(next);\n onValueChange?.(next);\n };\n\n const add = (raw: string) => {\n const tag = raw.trim();\n if (!tag || current.includes(tag)) return;\n if (max !== undefined && current.length >= max) return;\n commit([...current, tag]);\n };\n\n const onKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Enter\" || event.key === \",\") {\n event.preventDefault();\n add(draft);\n setDraft(\"\");\n } else if (event.key === \"Backspace\" && draft === \"\" && current.length > 0) {\n commit(current.slice(0, -1));\n }\n };\n\n return (\n <div\n className={cx(\"ds-field-skin\", \"ds-tags\", className)}\n data-size={size}\n data-disabled={isDisabled || undefined}\n aria-invalid={isInvalid || undefined}\n onClick={() => inputRef.current?.focus()}\n >\n {current.map((tag) => (\n <span key={tag} className=\"ds-tags__tag\">\n {tag}\n <button\n type=\"button\"\n className=\"ds-tags__remove\"\n aria-label={`Remove ${tag}`}\n disabled={isDisabled}\n onClick={(event) => {\n event.stopPropagation();\n commit(current.filter((item) => item !== tag));\n }}\n >\n <Icon name=\"x\" size={16} />\n </button>\n </span>\n ))}\n <input\n ref={(node) => {\n inputRef.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n }}\n type=\"text\"\n className=\"ds-tags__input\"\n value={draft}\n placeholder={current.length === 0 ? placeholder : \"\"}\n disabled={isDisabled}\n onChange={(event) => setDraft(event.target.value)}\n onKeyDown={onKeyDown}\n onBlur={() => {\n add(draft);\n setDraft(\"\");\n }}\n {...rest}\n />\n </div>\n );\n});\n"],"mappings":"A,sNAMA,SAASO,EAAG,GAAGC,EAAuC,CACpD,OAAOA,EAAM,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG,CACvC,CAsBA,IAAaC,GAAA,EAAYT,EAAAA,WAAAA,CAA6C,SACpE,CACE,QACA,eAAe,CAAC,EAChB,gBACA,cAAc,YACd,OAAO,KACP,MACA,aAAa,GACb,YAAY,GACZ,YACA,GAAGU,GAEL,EACA,CACA,GAAM,CAACC,EAAUC,IAAA,EAAeX,EAAAA,SAAAA,CAAmBY,CAAY,EACzDC,EAAUC,GAASJ,EACnB,CAACK,EAAOC,IAAA,EAAYhB,EAAAA,SAAAA,CAAS,EAAE,EAC/BiB,GAAA,EAAWhB,EAAAA,OAAAA,CAAgC,IAAI,EAE/CiB,EAAU,GAAmB,CAC7BJ,IAAU,IAAA,IAAWH,EAAYQ,CAAI,EACzCC,IAAgBD,CAAI,CACtB,EAEME,EAAO,GAAgB,CAC3B,IAAMC,EAAMC,EAAI,KAAK,EAChBD,GAAO,GAAQ,SAASA,CAAG,IAC5BE,IAAQ,IAAA,IAAaX,EAAQ,QAAUW,GAC3CN,EAAO,CAAC,GAAGL,EAASS,CAAG,CAAC,EAC1B,EAYA,OACE,EAAAjB,EAAA,KAAA,CAAC,MAAD,CACE,UAAWC,EAAG,gBAAiB,UAAWmB,CAAS,EACnD,YAAWC,EACX,gBAAeC,GAAc,IAAA,GAC7B,eAAcC,GAAa,IAAA,GAC3B,YAAeX,EAAS,SAAS,MAAM,EALzC,SAAA,CAOGJ,EAAQ,IAAK,IACZ,EAAAR,EAAA,KAAA,CAAC,OAAD,CAAgB,UAAU,eAA1B,SAAA,CACGiB,GACD,EAAAjB,EAAA,IAAA,CAAC,SAAD,CACE,KAAK,SACL,UAAU,kBACV,aAAY,UAAUiB,IACtB,SAAUK,EACV,QAAU,GAAU,CAClBE,EAAM,gBAAgB,EACtBX,EAAOL,EAAQ,OAAQ,GAASiB,IAASR,CAAG,CAAC,CAC/C,EAEA,UAAA,EAAAjB,EAAA,IAAA,CAACH,EAAAA,EAAD,CAAM,KAAK,IAAI,KAAM,EAAK,CAAA,CACpB,CAAA,CACJ,CAdK,EAAAoB,CAcL,CACP,GACD,EAAAjB,EAAA,IAAA,CAAC,QAAD,CACE,IAAM,GAAS,CACb,EAAS,QAAU0B,EACf,OAAOC,GAAQ,WAAYA,EAAID,CAAI,EAC9BC,IAAK,EAAI,QAAUD,EAC9B,EACA,KAAK,OACL,UAAU,iBACV,MAAOhB,EACP,YAAaF,EAAQ,SAAW,EAAIoB,EAAc,GAClD,SAAUN,EACV,SAAW,GAAUX,EAASa,EAAM,OAAO,KAAK,EACrC,UA/CE,GAA2C,CACxDA,EAAM,MAAQ,SAAWA,EAAM,MAAQ,KACzCA,EAAM,eAAe,EACrBR,EAAIN,CAAK,EACTC,EAAS,EAAE,GACFa,EAAM,MAAQ,aAAed,IAAU,IAAMF,EAAQ,OAAS,GACvEK,EAAOL,EAAQ,MAAM,EAAG,EAAE,CAAC,CAE/B,EAwCM,WAAc,CACZQ,EAAIN,CAAK,EACTC,EAAS,EAAE,CACb,EACA,GAAIP,CACL,CAAA,CACE,C,EAET,CAAC,E"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { FieldSize } from "../Field/index.cjs";
|
|
2
|
+
export interface TagsInputProps {
|
|
3
|
+
value?: string[];
|
|
4
|
+
defaultValue?: string[];
|
|
5
|
+
onValueChange?: (value: string[]) => void;
|
|
6
|
+
placeholder?: string;
|
|
7
|
+
size?: FieldSize;
|
|
8
|
+
/** Stop accepting new tags past this count. */
|
|
9
|
+
max?: number;
|
|
10
|
+
isDisabled?: boolean;
|
|
11
|
+
isInvalid?: boolean;
|
|
12
|
+
id?: string;
|
|
13
|
+
className?: string;
|
|
14
|
+
"aria-label"?: string;
|
|
15
|
+
"aria-describedby"?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Free-text keywords. Enter or comma commits a tag, Backspace on an empty
|
|
19
|
+
* input removes the last one. Tags are plain strings — never status tones.
|
|
20
|
+
*/
|
|
21
|
+
export declare const TagsInput: import("react").ForwardRefExoticComponent<TagsInputProps & import("react").RefAttributes<HTMLInputElement>>;
|
|
22
|
+
//# sourceMappingURL=index.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../../src/components/TagsInput/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,oBAAoB,CAAC;AAC5B,OAAO,aAAa,CAAC;AAMrB,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,+CAA+C;IAC/C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;GAGG;AACH,eAAO,MAAM,SAAS,6GAwFpB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { FieldSize } from "../Field/index.js";
|
|
2
|
+
export interface TagsInputProps {
|
|
3
|
+
value?: string[];
|
|
4
|
+
defaultValue?: string[];
|
|
5
|
+
onValueChange?: (value: string[]) => void;
|
|
6
|
+
placeholder?: string;
|
|
7
|
+
size?: FieldSize;
|
|
8
|
+
/** Stop accepting new tags past this count. */
|
|
9
|
+
max?: number;
|
|
10
|
+
isDisabled?: boolean;
|
|
11
|
+
isInvalid?: boolean;
|
|
12
|
+
id?: string;
|
|
13
|
+
className?: string;
|
|
14
|
+
"aria-label"?: string;
|
|
15
|
+
"aria-describedby"?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Free-text keywords. Enter or comma commits a tag, Backspace on an empty
|
|
19
|
+
* input removes the last one. Tags are plain strings — never status tones.
|
|
20
|
+
*/
|
|
21
|
+
export declare const TagsInput: import("react").ForwardRefExoticComponent<TagsInputProps & import("react").RefAttributes<HTMLInputElement>>;
|
|
22
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/TagsInput/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,oBAAoB,CAAC;AAC5B,OAAO,aAAa,CAAC;AAMrB,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,+CAA+C;IAC/C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;GAGG;AACH,eAAO,MAAM,SAAS,6GAwFpB,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { t as e } from "../../chunks/Icon-CGY1FNXT.js";
|
|
2
|
+
/* empty css */
|
|
3
|
+
import { forwardRef as t, useRef as n, useState as r } from "react";
|
|
4
|
+
import { jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
5
|
+
//#region src/components/TagsInput/index.tsx
|
|
6
|
+
function o(...e) {
|
|
7
|
+
return e.filter(Boolean).join(" ");
|
|
8
|
+
}
|
|
9
|
+
var s = t(function({ value: t, defaultValue: s = [], onValueChange: c, placeholder: l = "Add a tag", size: u = "md", max: d, isDisabled: f = !1, isInvalid: p = !1, className: m, ...h }, g) {
|
|
10
|
+
let [_, v] = r(s), y = t ?? _, [b, x] = r(""), S = n(null), C = (e) => {
|
|
11
|
+
t === void 0 && v(e), c?.(e);
|
|
12
|
+
}, w = (e) => {
|
|
13
|
+
let t = e.trim();
|
|
14
|
+
t && !y.includes(t) && (d !== void 0 && y.length >= d || C([...y, t]));
|
|
15
|
+
};
|
|
16
|
+
return /* @__PURE__ */ a("div", {
|
|
17
|
+
className: o("ds-field-skin", "ds-tags", m),
|
|
18
|
+
"data-size": u,
|
|
19
|
+
"data-disabled": f || void 0,
|
|
20
|
+
"aria-invalid": p || void 0,
|
|
21
|
+
onClick: () => S.current?.focus(),
|
|
22
|
+
children: [y.map((t) => /* @__PURE__ */ a("span", {
|
|
23
|
+
className: "ds-tags__tag",
|
|
24
|
+
children: [t, /* @__PURE__ */ i("button", {
|
|
25
|
+
type: "button",
|
|
26
|
+
className: "ds-tags__remove",
|
|
27
|
+
"aria-label": `Remove ${t}`,
|
|
28
|
+
disabled: f,
|
|
29
|
+
onClick: (e) => {
|
|
30
|
+
e.stopPropagation(), C(y.filter((e) => e !== t));
|
|
31
|
+
},
|
|
32
|
+
children: /* @__PURE__ */ i(e, {
|
|
33
|
+
name: "x",
|
|
34
|
+
size: 16
|
|
35
|
+
})
|
|
36
|
+
})]
|
|
37
|
+
}, t)), /* @__PURE__ */ i("input", {
|
|
38
|
+
ref: (e) => {
|
|
39
|
+
S.current = e, typeof g == "function" ? g(e) : g && (g.current = e);
|
|
40
|
+
},
|
|
41
|
+
type: "text",
|
|
42
|
+
className: "ds-tags__input",
|
|
43
|
+
value: b,
|
|
44
|
+
placeholder: y.length === 0 ? l : "",
|
|
45
|
+
disabled: f,
|
|
46
|
+
onChange: (e) => x(e.target.value),
|
|
47
|
+
onKeyDown: (e) => {
|
|
48
|
+
e.key === "Enter" || e.key === "," ? (e.preventDefault(), w(b), x("")) : e.key === "Backspace" && b === "" && y.length > 0 && C(y.slice(0, -1));
|
|
49
|
+
},
|
|
50
|
+
onBlur: () => {
|
|
51
|
+
w(b), x("");
|
|
52
|
+
},
|
|
53
|
+
...h
|
|
54
|
+
})]
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
//#endregion
|
|
58
|
+
export { s as TagsInput };
|
|
59
|
+
|
|
60
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["Icon","cx","parts","TagsInput","forwardRef","rest","internal","setInternal","useState","defaultValue","current","value","draft","setDraft","inputRef","useRef","commit","next","onValueChange","add","tag","raw","max","className","size","isDisabled","isInvalid","event","item","node","ref","placeholder"],"sources":["../../../src/components/TagsInput/index.tsx"],"sourcesContent":["import { forwardRef, useRef, useState, type KeyboardEvent } from \"react\";\nimport { Icon } from \"../Icon\";\nimport type { FieldSize } from \"../Field\";\nimport \"../Field/style.css\";\nimport \"./style.css\";\n\nfunction cx(...parts: (string | undefined | false)[]) {\n return parts.filter(Boolean).join(\" \");\n}\n\nexport interface TagsInputProps {\n value?: string[];\n defaultValue?: string[];\n onValueChange?: (value: string[]) => void;\n placeholder?: string;\n size?: FieldSize;\n /** Stop accepting new tags past this count. */\n max?: number;\n isDisabled?: boolean;\n isInvalid?: boolean;\n id?: string;\n className?: string;\n \"aria-label\"?: string;\n \"aria-describedby\"?: string;\n}\n\n/**\n * Free-text keywords. Enter or comma commits a tag, Backspace on an empty\n * input removes the last one. Tags are plain strings — never status tones.\n */\nexport const TagsInput = forwardRef<HTMLInputElement, TagsInputProps>(function TagsInput(\n {\n value,\n defaultValue = [],\n onValueChange,\n placeholder = \"Add a tag\",\n size = \"md\",\n max,\n isDisabled = false,\n isInvalid = false,\n className,\n ...rest\n },\n ref,\n) {\n const [internal, setInternal] = useState<string[]>(defaultValue);\n const current = value ?? internal;\n const [draft, setDraft] = useState(\"\");\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n const commit = (next: string[]) => {\n if (value === undefined) setInternal(next);\n onValueChange?.(next);\n };\n\n const add = (raw: string) => {\n const tag = raw.trim();\n if (!tag || current.includes(tag)) return;\n if (max !== undefined && current.length >= max) return;\n commit([...current, tag]);\n };\n\n const onKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Enter\" || event.key === \",\") {\n event.preventDefault();\n add(draft);\n setDraft(\"\");\n } else if (event.key === \"Backspace\" && draft === \"\" && current.length > 0) {\n commit(current.slice(0, -1));\n }\n };\n\n return (\n <div\n className={cx(\"ds-field-skin\", \"ds-tags\", className)}\n data-size={size}\n data-disabled={isDisabled || undefined}\n aria-invalid={isInvalid || undefined}\n onClick={() => inputRef.current?.focus()}\n >\n {current.map((tag) => (\n <span key={tag} className=\"ds-tags__tag\">\n {tag}\n <button\n type=\"button\"\n className=\"ds-tags__remove\"\n aria-label={`Remove ${tag}`}\n disabled={isDisabled}\n onClick={(event) => {\n event.stopPropagation();\n commit(current.filter((item) => item !== tag));\n }}\n >\n <Icon name=\"x\" size={16} />\n </button>\n </span>\n ))}\n <input\n ref={(node) => {\n inputRef.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n }}\n type=\"text\"\n className=\"ds-tags__input\"\n value={draft}\n placeholder={current.length === 0 ? placeholder : \"\"}\n disabled={isDisabled}\n onChange={(event) => setDraft(event.target.value)}\n onKeyDown={onKeyDown}\n onBlur={() => {\n add(draft);\n setDraft(\"\");\n }}\n {...rest}\n />\n </div>\n );\n});\n"],"mappings":";;;;;AAMA,SAASC,EAAG,GAAGC,GAAuC;CACpD,OAAOA,EAAM,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG;AACvC;AAsBA,IAAaC,IAAYC,EAA6C,SACpE,EACE,UACA,kBAAe,CAAC,GAChB,kBACA,iBAAc,aACd,UAAO,MACP,QACA,gBAAa,IACb,eAAY,IACZ,cACA,GAAGC,KAEL,GACA;CACA,IAAM,CAACC,GAAUC,KAAeC,EAAmBC,CAAY,GACzDC,IAAUC,KAASL,GACnB,CAACM,GAAOC,KAAYL,EAAS,EAAE,GAC/BM,IAAWC,EAAgC,IAAI,GAE/CC,KAAU,MAAmB;EAEjC,AADIL,MAAU,KAAA,KAAWJ,EAAYU,CAAI,GACzCC,IAAgBD,CAAI;CACtB,GAEME,KAAO,MAAgB;EAC3B,IAAMC,IAAMC,EAAI,KAAK;EACrB,AAAKD,KAAO,GAAQ,SAASA,CAAG,MAC5BE,MAAQ,KAAA,KAAaZ,EAAQ,UAAUY,KAC3CN,EAAO,CAAC,GAAGN,GAASU,CAAG,CAAC;CAC1B;CAYA,OACE,kBAAC,OAAD;EACE,WAAWnB,EAAG,iBAAiB,WAAWsB,CAAS;EACnD,aAAWC;EACX,iBAAeC,KAAc,KAAA;EAC7B,gBAAcC,KAAa,KAAA;EAC3B,eAAeZ,EAAS,SAAS,MAAM;EALzC,UAAA,CAOGJ,EAAQ,KAAK,MACZ,kBAAC,QAAD;GAAgB,WAAU;GAA1B,UAAA,CACGU,GACD,kBAAC,UAAD;IACE,MAAK;IACL,WAAU;IACV,cAAY,UAAUA;IACtB,UAAUK;IACV,UAAU,MAAU;KAElB,AADAE,EAAM,gBAAgB,GACtBX,EAAON,EAAQ,QAAQ,MAASkB,MAASR,CAAG,CAAC;IAC/C;IAEA,UAAA,kBAACpB,GAAD;KAAM,MAAK;KAAI,MAAM;IAAK,CAAA;GACpB,CAAA,CACJ;EAdK,GAAAoB,CAcL,CACP,GACD,kBAAC,SAAD;GACE,MAAM,MAAS;IAEb,AADA,EAAS,UAAUS,GACf,OAAOC,KAAQ,aAAYA,EAAID,CAAI,IAC9BC,MAAK,EAAI,UAAUD;GAC9B;GACA,MAAK;GACL,WAAU;GACV,OAAOjB;GACP,aAAaF,EAAQ,WAAW,IAAIqB,IAAc;GAClD,UAAUN;GACV,WAAW,MAAUZ,EAASc,EAAM,OAAO,KAAK;GACrC,YA/CE,MAA2C;IAC5D,AAAIA,EAAM,QAAQ,WAAWA,EAAM,QAAQ,OACzCA,EAAM,eAAe,GACrBR,EAAIP,CAAK,GACTC,EAAS,EAAE,KACFc,EAAM,QAAQ,eAAef,MAAU,MAAMF,EAAQ,SAAS,KACvEM,EAAON,EAAQ,MAAM,GAAG,EAAE,CAAC;GAE/B;GAwCM,cAAc;IAEZ,AADAS,EAAIP,CAAK,GACTC,EAAS,EAAE;GACb;GACA,GAAIR;EACL,CAAA,CACE;;AAET,CAAC"}
|
|
@@ -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":"A,iKAWA,SAASS,EAAG,GAAGC,EAAuC,CACpD,OAAOA,EAAM,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG,CACvC,CAEA,IAAMC,EAAS,CACb,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACF,EAEMC,EAAS,IACTC,EAAO,GAAKD,EACZE,EAAM,GAAKD,EACXE,EAAO,EAAID,EAEjB,SAASE,EAAI,EAAe,CAC1B,OAAO,OAAOC,CAAK,CAAC,CAAC,SAAS,EAAG,GAAG,CACtC,CAGA,SAAgBC,EAAmB,EAAY,EAAiC,CAAC,EAAG,CAClF,GAAM,CAAE,UAAU,IAASC,EACrBC,EAAO,GAAGC,EAAK,QAAQ,EAAE,GAAGV,EAAOU,EAAK,SAAS,KACvD,OAAOC,EAAU,GAAGF,EAAK,GAAGC,EAAK,YAAY,IAAMD,CACrD,CAGA,SAAgBG,EAAmB,EAAY,EAAqC,CAAC,EAAG,CACtF,GAAM,CAAE,cAAc,IAASJ,EACzBK,EAAQ,GAAGN,EAAmBG,CAAI,EAAE,IAAIL,EAAIK,EAAK,SAAS,CAAC,EAAE,GAAGL,EAAIK,EAAK,WAAW,CAAC,IAC3F,GAAI,CAACI,EAAa,OAAOD,EACzB,IAAME,EAAO,IAAI,KAAK,eAAe,IAAA,GAAW,CAAE,aAAc,OAAQ,CAAC,CAAC,CACvE,cAAcL,CAAI,CAAC,CACnB,KAAM,GAASM,EAAK,OAAS,cAAc,CAAC,EAAE,MACjD,OAAOD,EAAO,GAAGF,EAAM,GAAGE,IAASF,CACrC,CAMA,SAAgBI,EAAmB,EAAY,EAAY,IAAI,KAAQ,CACrE,IAAMC,EAAQC,EAAI,QAAQ,EAAIT,EAAK,QAAQ,EAC3C,GAAIQ,EAAQ,EACV,OAAOX,EAAmBG,EAAM,CAAE,QAASA,EAAK,YAAY,IAAMS,EAAI,YAAY,CAAE,CAAC,EAEvF,GAAID,EAAQjB,EAAQ,MAAO,WAC3B,GAAIiB,EAAQhB,EAAM,MAAO,GAAG,KAAK,MAAMgB,EAAQjB,CAAM,EAAE,OACvD,GAAIiB,EAAQf,EAAK,MAAO,GAAG,KAAK,MAAMe,EAAQhB,CAAI,EAAE,OACpD,GAAIgB,EAAQd,EAAM,CAChB,IAAMgB,EAAO,KAAK,MAAMF,EAAQf,CAAG,EACnC,MAAO,GAAGiB,EAAK,GAAGA,IAAS,EAAI,MAAQ,OAAO,KAChD,CACA,OAAOb,EAAmBG,EAAM,CAAE,QAASA,EAAK,YAAY,IAAMS,EAAI,YAAY,CAAE,CAAC,CACvF,CAuBA,IAAaE,GAAA,EAAOhC,EAAAA,WAAAA,CAAuC,SACzD,CACE,QACA,SAAS,OACT,aAAa,GACb,cAAc,GACd,MACA,kBAAkB,IAClB,YACA,WACA,QACA,eACA,eACA,UACA,SACA,YACA,mBAAoBiC,EACpB,GAAGC,GAEL,EACA,CACA,IAAMb,EAAOJ,aAAiB,KAAOA,EAAQ,IAAI,KAAKA,CAAK,EACrDkB,GAAA,EAAYlC,EAAAA,OAAAA,CAA+B,IAAI,EAC/C,CAACmC,EAAQC,IAAA,EAAanC,EAAAA,SAAAA,CAAS,EAAK,EACpCoC,GAAA,EAAYnC,EAAAA,MAAAA,CAAM,EAClB,EAAGoC,IAAA,EAAWrC,EAAAA,SAAAA,CAAS,CAAC,EAQ9B,IANA,EAAAK,EAAA,UAAA,KAAgB,CACd,GAAIiC,IAAW,YAAcV,EAAK,OAClC,IAAMW,EAAK,OAAO,gBAAkBF,EAAS,GAAMG,EAAI,CAAC,EAAGC,CAAe,EAC1E,UAAa,OAAO,cAAcF,CAAE,CACtC,EAAG,CAACD,EAAQV,EAAKa,CAAe,CAAC,EAE7B,OAAO,MAAMtB,EAAK,QAAQ,CAAC,EAAG,OAAO,KAGzC,IAAMuB,EACJJ,IAAW,WACPtB,EAAmBG,CAAI,EACvBO,EAAmBP,EAJPS,GAAO,IAAI,IAIW,EAClCN,EAAQD,EAAmBF,EAAM,CAAE,aAAY,CAAC,EAChDwB,EAAWC,GAAcF,IAAUpB,EAEzC,OACE,EAAAhB,EAAA,KAAA,CAAAJ,EAAAA,SAAA,CAAA,SAAA,EACE,EAAAI,EAAA,IAAA,CAAC,OAAD,CACE,IAAM,GAAS,CACb,EAAU,QAAUuC,EAChB,OAAOC,GAAQ,WAAYA,EAAID,CAAI,EAC9BC,IAAK,EAAI,QAAUD,EAC9B,EACA,SAAU1B,EAAK,YAAY,EAC3B,yBAAA,GACA,UAAWZ,EAAG,UAAW,CAACoC,GAAY,iBAAkBI,CAAS,EACjE,SAAUC,IAAaL,EAAW,EAAI,IAAA,IACtC,mBAAkB,CAACZ,EAAaY,GAAYT,GAAUE,CAAS,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,GAAG,GAAK,IAAA,GAC9F,MAAOa,IAAUN,EAAW,IAAA,GAAYrB,GACxC,aAAe,GAAU,CACvB4B,IAAeC,CAAK,EAChBR,GAAY,CAACQ,EAAM,kBAAkBhB,EAAU,EAAI,CACzD,EACA,aAAe,GAAU,CACvBiB,IAAeD,CAAK,EAChBR,GAAY,CAACQ,EAAM,kBAAkBhB,EAAU,EAAK,CAC1D,EACA,QAAU,GAAU,CAClBkB,IAAUF,CAAK,EACXR,GAAY,CAACQ,EAAM,kBAAkBhB,EAAU,EAAI,CACzD,EACA,OAAS,GAAU,CACjBmB,IAASH,CAAK,EACVR,GAAY,CAACQ,EAAM,kBAAkBhB,EAAU,EAAK,CAC1D,EACA,UAAY,GAAU,CACpBoB,IAAYJ,CAAK,EACbR,GAAY,CAACQ,EAAM,kBAAoBA,EAAM,MAAQ,UAAUhB,EAAU,EAAK,CACpF,EACA,GAAIH,EAEH,SAAAU,CACG,CAAA,EACLC,IACC,EAAArC,EAAA,IAAA,CAACH,EAAAA,QAAD,CACa,YACH,SACR,GAAIiC,EACJ,KAAK,UACL,UAAU,oCAET,SAAAd,CACM,CAAA,CAEX,CAAA,CAAA,CAEN,CAAC,E"}
|
|
@@ -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"}
|