@deftui/react 0.0.0-stage → 0.0.2

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.
Files changed (95) hide show
  1. package/dist/index.d.mts +24 -0
  2. package/dist/index.mjs +24 -0
  3. package/dist/styles.css +88 -0
  4. package/dist/styles.shadcn.css +537 -0
  5. package/dist/styles.tokens.css +87 -0
  6. package/dist/vendor/coss/form.d.mts +4 -0
  7. package/dist/vendor/coss/form.mjs +12 -0
  8. package/dist/vendor/coss/hooks/use-copy-to-clipboard.d.mts +7 -0
  9. package/dist/vendor/coss/hooks/use-copy-to-clipboard.mjs +30 -0
  10. package/dist/vendor/coss/hooks/use-media-query.d.mts +20 -0
  11. package/dist/vendor/coss/hooks/use-media-query.mjs +57 -0
  12. package/dist/vendor/coss/scroll-area.d.mts +10 -0
  13. package/dist/vendor/coss/scroll-area.mjs +39 -0
  14. package/dist/vendor/shadcn/alert-dialog.d.mts +14 -0
  15. package/dist/vendor/shadcn/alert-dialog.mjs +80 -0
  16. package/dist/vendor/shadcn/badge.d.mts +7 -0
  17. package/dist/vendor/shadcn/badge.mjs +28 -0
  18. package/dist/vendor/shadcn/breadcrumb.d.mts +10 -0
  19. package/dist/vendor/shadcn/breadcrumb.mjs +71 -0
  20. package/dist/vendor/shadcn/button.d.mts +8 -0
  21. package/dist/vendor/shadcn/button.mjs +43 -0
  22. package/dist/vendor/shadcn/calendar.d.mts +7 -0
  23. package/dist/vendor/shadcn/calendar.mjs +107 -0
  24. package/dist/vendor/shadcn/card.d.mts +11 -0
  25. package/dist/vendor/shadcn/card.mjs +55 -0
  26. package/dist/vendor/shadcn/carousel.d.mts +19 -0
  27. package/dist/vendor/shadcn/carousel.mjs +131 -0
  28. package/dist/vendor/shadcn/combobox.d.mts +20 -0
  29. package/dist/vendor/shadcn/combobox.mjs +151 -0
  30. package/dist/vendor/shadcn/dialog.d.mts +15 -0
  31. package/dist/vendor/shadcn/dialog.mjs +91 -0
  32. package/dist/vendor/shadcn/drawer.d.mts +13 -0
  33. package/dist/vendor/shadcn/drawer.mjs +122 -0
  34. package/dist/vendor/shadcn/dropdown-menu.d.mts +28 -0
  35. package/dist/vendor/shadcn/dropdown-menu.mjs +130 -0
  36. package/dist/vendor/shadcn/empty.d.mts +11 -0
  37. package/dist/vendor/shadcn/empty.mjs +58 -0
  38. package/dist/vendor/shadcn/field.d.mts +14 -0
  39. package/dist/vendor/shadcn/field.mjs +60 -0
  40. package/dist/vendor/shadcn/input-group.d.mts +12 -0
  41. package/dist/vendor/shadcn/input-group.mjs +78 -0
  42. package/dist/vendor/shadcn/input.d.mts +3 -0
  43. package/dist/vendor/shadcn/input.mjs +14 -0
  44. package/dist/vendor/shadcn/kbd.d.mts +3 -0
  45. package/dist/vendor/shadcn/kbd.mjs +18 -0
  46. package/dist/vendor/shadcn/label.d.mts +3 -0
  47. package/dist/vendor/shadcn/label.mjs +13 -0
  48. package/dist/vendor/shadcn/lib/utils.mjs +1 -0
  49. package/dist/vendor/shadcn/pagination.d.mts +17 -0
  50. package/dist/vendor/shadcn/pagination.mjs +79 -0
  51. package/dist/vendor/shadcn/popover.d.mts +8 -0
  52. package/dist/vendor/shadcn/popover.mjs +47 -0
  53. package/dist/vendor/shadcn/progress.d.mts +7 -0
  54. package/dist/vendor/shadcn/progress.mjs +43 -0
  55. package/dist/vendor/shadcn/radio-group.d.mts +5 -0
  56. package/dist/vendor/shadcn/radio-group.mjs +26 -0
  57. package/dist/vendor/shadcn/select.d.mts +12 -0
  58. package/dist/vendor/shadcn/select.mjs +97 -0
  59. package/dist/vendor/shadcn/separator.d.mts +3 -0
  60. package/dist/vendor/shadcn/separator.mjs +14 -0
  61. package/dist/vendor/shadcn/sheet.mjs +69 -0
  62. package/dist/vendor/shadcn/sidebar.d.mts +60 -0
  63. package/dist/vendor/shadcn/sidebar.mjs +366 -0
  64. package/dist/vendor/shadcn/skeleton.mjs +3 -0
  65. package/dist/vendor/shadcn/spinner.d.mts +2 -0
  66. package/dist/vendor/shadcn/spinner.mjs +14 -0
  67. package/dist/vendor/shadcn/switch.d.mts +5 -0
  68. package/dist/vendor/shadcn/switch.mjs +18 -0
  69. package/dist/vendor/shadcn/table.d.mts +9 -0
  70. package/dist/vendor/shadcn/table.mjs +59 -0
  71. package/dist/vendor/shadcn/tabs.d.mts +10 -0
  72. package/dist/vendor/shadcn/tabs.mjs +44 -0
  73. package/dist/vendor/shadcn/textarea.d.mts +3 -0
  74. package/dist/vendor/shadcn/textarea.mjs +12 -0
  75. package/dist/vendor/shadcn/toast.d.mts +5 -0
  76. package/dist/vendor/shadcn/toast.mjs +122 -0
  77. package/dist/vendor/shadcn/tooltip.d.mts +5 -0
  78. package/dist/vendor/shadcn/tooltip.mjs +33 -0
  79. package/dist/vendor.css +1 -0
  80. package/dist/widgets/breadcrumb.d.mts +17 -0
  81. package/dist/widgets/breadcrumb.mjs +22 -0
  82. package/dist/widgets/datetime-picker.d.mts +25 -0
  83. package/dist/widgets/datetime-picker.mjs +75 -0
  84. package/dist/widgets/image-display.d.mts +12 -0
  85. package/dist/widgets/image-display.mjs +29 -0
  86. package/dist/widgets/index.d.mts +186 -0
  87. package/dist/widgets/index.mjs +187 -0
  88. package/dist/widgets/pagination.d.mts +10 -0
  89. package/dist/widgets/pagination.mjs +12 -0
  90. package/dist/widgets/sidebar.d.mts +26 -0
  91. package/dist/widgets/sidebar.mjs +27 -0
  92. package/dist/widgets/toast.d.mts +2 -0
  93. package/dist/widgets/toast.mjs +1 -0
  94. package/package.json +53 -4
  95. package/README.md +0 -3
@@ -0,0 +1,24 @@
1
+ import { useCopyToClipboard } from "./vendor/coss/hooks/use-copy-to-clipboard.mjs";
2
+ import { useIsMobile, useMediaQuery } from "./vendor/coss/hooks/use-media-query.mjs";
3
+ import { Button } from "./vendor/shadcn/button.mjs";
4
+ import { Label } from "./vendor/shadcn/label.mjs";
5
+ import { Toaster, toast } from "./vendor/shadcn/toast.mjs";
6
+ import { Input } from "./vendor/shadcn/input.mjs";
7
+ import { Separator } from "./vendor/shadcn/separator.mjs";
8
+ import { useSidebar } from "./vendor/shadcn/sidebar.mjs";
9
+ import { Sidebar } from "./widgets/sidebar.mjs";
10
+ import { Breadcrumb } from "./widgets/breadcrumb.mjs";
11
+ import { Pagination } from "./widgets/pagination.mjs";
12
+ import { Carousel, FadeImage } from "./widgets/image-display.mjs";
13
+ import { DatePicker, DateRange, DateRangePicker, TimePicker } from "./widgets/datetime-picker.mjs";
14
+ import { Form } from "./vendor/coss/form.mjs";
15
+ import { Badge } from "./vendor/shadcn/badge.mjs";
16
+ import { Switch } from "./vendor/shadcn/switch.mjs";
17
+ import { Spinner } from "./vendor/shadcn/spinner.mjs";
18
+ import { Textarea } from "./vendor/shadcn/textarea.mjs";
19
+ import { ScrollArea } from "./vendor/coss/scroll-area.mjs";
20
+ import { AlertDialog, Card, Combobox, Dialog, Drawer, Dropdown, Empty, Field, InputGroup, Kbd, Popover, Progress, Radio, Select, Table, Tabs, Tooltip } from "./widgets/index.mjs";
21
+ import { cn } from "cn";
22
+ import { cva } from "class-variance-authority";
23
+ import { mergeProps } from "@base-ui/react/merge-props";
24
+ export { AlertDialog, Badge, Breadcrumb, Button, Card, Carousel, Combobox, DatePicker, type DateRange, DateRangePicker, Dialog, Drawer, Dropdown, Empty, FadeImage, Field, Form, Input, InputGroup, Kbd, Label, Pagination, Popover, Progress, Radio, ScrollArea, Select, Separator, Sidebar, Spinner, Switch, Table, Tabs, Textarea, TimePicker, Toaster as ToastProvider, Tooltip, cn, cva, mergeProps, toast, useCopyToClipboard, useIsMobile, useMediaQuery, useSidebar };
package/dist/index.mjs ADDED
@@ -0,0 +1,24 @@
1
+ import { useCopyToClipboard } from "./vendor/coss/hooks/use-copy-to-clipboard.mjs";
2
+ import { useIsMobile, useMediaQuery } from "./vendor/coss/hooks/use-media-query.mjs";
3
+ import { Button } from "./vendor/shadcn/button.mjs";
4
+ import { Input } from "./vendor/shadcn/input.mjs";
5
+ import { Textarea } from "./vendor/shadcn/textarea.mjs";
6
+ import { Label } from "./vendor/shadcn/label.mjs";
7
+ import { Separator } from "./vendor/shadcn/separator.mjs";
8
+ import { Toaster, toast } from "./vendor/shadcn/toast.mjs";
9
+ import { useSidebar } from "./vendor/shadcn/sidebar.mjs";
10
+ import { Sidebar } from "./widgets/sidebar.mjs";
11
+ import { Breadcrumb } from "./widgets/breadcrumb.mjs";
12
+ import { Pagination } from "./widgets/pagination.mjs";
13
+ import { Carousel, FadeImage } from "./widgets/image-display.mjs";
14
+ import { DatePicker, DateRangePicker, TimePicker } from "./widgets/datetime-picker.mjs";
15
+ import { Form } from "./vendor/coss/form.mjs";
16
+ import { Badge } from "./vendor/shadcn/badge.mjs";
17
+ import { Switch } from "./vendor/shadcn/switch.mjs";
18
+ import { Spinner } from "./vendor/shadcn/spinner.mjs";
19
+ import { ScrollArea } from "./vendor/coss/scroll-area.mjs";
20
+ import { AlertDialog, Card, Combobox, Dialog, Drawer, Dropdown, Empty, Field, InputGroup, Kbd, Popover, Progress, Radio, Select, Table, Tabs, Tooltip } from "./widgets/index.mjs";
21
+ import { cn } from "cn";
22
+ import { cva } from "class-variance-authority";
23
+ import { mergeProps } from "@base-ui/react/merge-props";
24
+ export { AlertDialog, Badge, Breadcrumb, Button, Card, Carousel, Combobox, DatePicker, DateRangePicker, Dialog, Drawer, Dropdown, Empty, FadeImage, Field, Form, Input, InputGroup, Kbd, Label, Pagination, Popover, Progress, Radio, ScrollArea, Select, Separator, Sidebar, Spinner, Switch, Table, Tabs, Textarea, TimePicker, Toaster as ToastProvider, Tooltip, cn, cva, mergeProps, toast, useCopyToClipboard, useIsMobile, useMediaQuery, useSidebar };
@@ -0,0 +1,88 @@
1
+ @source "./";
2
+
3
+ @import "tailwindcss";
4
+ @import "tw-animate-css";
5
+ @import "@fontsource-variable/inter";
6
+
7
+ @import "./styles.shadcn.css";
8
+ @import "./styles.tokens.css";
9
+
10
+ @custom-variant dark (&:is(.dark *));
11
+
12
+ @theme inline {
13
+ --font-sans: "Inter Variable", system-ui, sans-serif;
14
+ --font-mono: "Maple Mono", ui-monospace, monospace;
15
+ --font-heading: var(--font-sans);
16
+
17
+ --color-background: var(--background);
18
+ --color-foreground: var(--foreground);
19
+
20
+ --color-ring: var(--ring);
21
+ --color-input: var(--input);
22
+ --color-border: var(--border);
23
+
24
+ --color-card: var(--card);
25
+ --color-muted: var(--muted);
26
+ --color-accent: var(--accent);
27
+ --color-popover: var(--popover);
28
+ --color-primary: var(--primary);
29
+ --color-secondary: var(--secondary);
30
+
31
+ --color-card-foreground: var(--card-foreground);
32
+ --color-muted-foreground: var(--muted-foreground);
33
+ --color-accent-foreground: var(--accent-foreground);
34
+ --color-popover-foreground: var(--popover-foreground);
35
+ --color-primary-foreground: var(--primary-foreground);
36
+ --color-secondary-foreground: var(--secondary-foreground);
37
+
38
+ --color-info: var(--info);
39
+ --color-warning: var(--warning);
40
+ --color-success: var(--success);
41
+ --color-destructive: var(--destructive);
42
+
43
+ --color-code: var(--code);
44
+ --color-code-highlight: var(--code-highlight);
45
+ --color-code-foreground: var(--code-foreground);
46
+
47
+ --color-chart-1: var(--chart-1);
48
+ --color-chart-2: var(--chart-2);
49
+ --color-chart-3: var(--chart-3);
50
+ --color-chart-4: var(--chart-4);
51
+ --color-chart-5: var(--chart-5);
52
+
53
+ --color-sidebar: var(--sidebar);
54
+ --color-sidebar-ring: var(--sidebar-ring);
55
+ --color-sidebar-border: var(--sidebar-border);
56
+ --color-sidebar-accent: var(--sidebar-accent);
57
+ --color-sidebar-primary: var(--sidebar-primary);
58
+ --color-sidebar-foreground: var(--sidebar-foreground);
59
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
60
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
61
+
62
+ --radius-sm: calc(var(--radius) * 0.6);
63
+ --radius-md: calc(var(--radius) * 0.8);
64
+ --radius-lg: calc(var(--radius) * 1);
65
+ --radius-xl: calc(var(--radius) * 1.4);
66
+ --radius-2xl: calc(var(--radius) * 1.8);
67
+ --radius-3xl: calc(var(--radius) * 2.2);
68
+ --radius-4xl: calc(var(--radius) * 2.6);
69
+ }
70
+
71
+ @layer base {
72
+ * {
73
+ @apply border-border outline-ring/50;
74
+ }
75
+ body {
76
+ @apply bg-background text-foreground;
77
+ }
78
+
79
+ pre,
80
+ kbd,
81
+ samp,
82
+ code {
83
+ @apply font-mono;
84
+ }
85
+ html {
86
+ @apply font-sans;
87
+ }
88
+ }
@@ -0,0 +1,537 @@
1
+ /* Ejected from shadcn v4.22.2 — cSpell: disable */
2
+
3
+ @theme inline {
4
+ @keyframes accordion-down {
5
+ from {
6
+ height: 0;
7
+ }
8
+ to {
9
+ height: var(--radix-accordion-content-height, var(--accordion-panel-height, auto));
10
+ }
11
+ }
12
+
13
+ @keyframes accordion-up {
14
+ from {
15
+ height: var(--radix-accordion-content-height, var(--accordion-panel-height, auto));
16
+ }
17
+ to {
18
+ height: 0;
19
+ }
20
+ }
21
+ }
22
+
23
+ /* Custom variants */
24
+ @custom-variant data-open {
25
+ &:where([data-state="open"]),
26
+ &:where([data-open]:not([data-open="false"])) {
27
+ @slot;
28
+ }
29
+ }
30
+
31
+ @custom-variant data-closed {
32
+ &:where([data-state="closed"]),
33
+ &:where([data-closed]:not([data-closed="false"])) {
34
+ @slot;
35
+ }
36
+ }
37
+
38
+ @custom-variant data-checked {
39
+ &:where([data-state="checked"]),
40
+ &:where([data-checked]:not([data-checked="false"])) {
41
+ @slot;
42
+ }
43
+ }
44
+
45
+ @custom-variant data-unchecked {
46
+ &:where([data-state="unchecked"]),
47
+ &:where([data-unchecked]:not([data-unchecked="false"])) {
48
+ @slot;
49
+ }
50
+ }
51
+
52
+ @custom-variant data-selected {
53
+ &:where([data-selected="true"]),
54
+ &:where([data-selected]:not([data-selected="false"])) {
55
+ @slot;
56
+ }
57
+ }
58
+
59
+ @custom-variant data-disabled {
60
+ &:where([data-disabled="true"]),
61
+ &:where([data-disabled]:not([data-disabled="false"])) {
62
+ @slot;
63
+ }
64
+ }
65
+
66
+ @custom-variant data-active {
67
+ &:where([data-state="active"]),
68
+ &:where([data-active]:not([data-active="false"])) {
69
+ @slot;
70
+ }
71
+ }
72
+
73
+ @custom-variant data-horizontal {
74
+ &:where([data-orientation="horizontal"]) {
75
+ @slot;
76
+ }
77
+ }
78
+
79
+ @custom-variant data-vertical {
80
+ &:where([data-orientation="vertical"]) {
81
+ @slot;
82
+ }
83
+ }
84
+
85
+ @utility no-scrollbar {
86
+ -ms-overflow-style: none;
87
+ scrollbar-width: none;
88
+
89
+ &::-webkit-scrollbar {
90
+ display: none;
91
+ }
92
+ }
93
+
94
+ /* scroll-fade */
95
+ @property --scroll-fade-t {
96
+ syntax: "<length-percentage>";
97
+ inherits: false;
98
+ initial-value: 0px;
99
+ }
100
+ @property --scroll-fade-b {
101
+ syntax: "<length-percentage>";
102
+ inherits: false;
103
+ initial-value: 0px;
104
+ }
105
+ @property --scroll-fade-s {
106
+ syntax: "<length-percentage>";
107
+ inherits: false;
108
+ initial-value: 0px;
109
+ }
110
+ @property --scroll-fade-e {
111
+ syntax: "<length-percentage>";
112
+ inherits: false;
113
+ initial-value: 0px;
114
+ }
115
+ @property --scroll-fade-mask {
116
+ syntax: "*";
117
+ inherits: false;
118
+ }
119
+
120
+ @theme inline {
121
+ @keyframes scroll-fade-reveal-t {
122
+ from {
123
+ --scroll-fade-t: 0px;
124
+ }
125
+ to {
126
+ --scroll-fade-t: var(--_scroll-fade-size-t, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
127
+ }
128
+ }
129
+ @keyframes scroll-fade-reveal-b {
130
+ from {
131
+ --scroll-fade-b: var(--_scroll-fade-size-b, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
132
+ }
133
+ to {
134
+ --scroll-fade-b: 0px;
135
+ }
136
+ }
137
+ @keyframes scroll-fade-reveal-s {
138
+ from {
139
+ --scroll-fade-s: 0px;
140
+ }
141
+ to {
142
+ --scroll-fade-s: var(--_scroll-fade-size-s, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
143
+ }
144
+ }
145
+ @keyframes scroll-fade-reveal-e {
146
+ from {
147
+ --scroll-fade-e: var(--_scroll-fade-size-e, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
148
+ }
149
+ to {
150
+ --scroll-fade-e: 0px;
151
+ }
152
+ }
153
+ }
154
+
155
+ @utility scroll-fade {
156
+ --_scroll-fade-size-t: var(--scroll-fade-t-size, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
157
+ --_scroll-fade-size-b: var(--scroll-fade-b-size, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
158
+ --scroll-fade-block: linear-gradient(
159
+ to bottom,
160
+ transparent 0,
161
+ #000 var(--scroll-fade-t, 0px),
162
+ #000 calc(100% - var(--scroll-fade-b, 0px)),
163
+ transparent 100%
164
+ );
165
+ -webkit-mask-image: var(--scroll-fade-mask, var(--scroll-fade-block));
166
+ mask-image: var(--scroll-fade-mask, var(--scroll-fade-block));
167
+ -webkit-mask-composite: source-in;
168
+ mask-composite: intersect;
169
+ -webkit-mask-repeat: no-repeat;
170
+ mask-repeat: no-repeat;
171
+
172
+ @supports (animation-timeline: scroll()) {
173
+ animation:
174
+ scroll-fade-reveal-t 1ms ease-in-out,
175
+ scroll-fade-reveal-b 1ms ease-in-out;
176
+ animation-timeline: scroll(self y), scroll(self y);
177
+ animation-range:
178
+ 0 var(--scroll-fade-reveal, calc(var(--spacing) * 24)),
179
+ calc(100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24))) 100%;
180
+ animation-fill-mode: both;
181
+ }
182
+
183
+ @supports not (animation-timeline: scroll()) {
184
+ --scroll-fade-t: var(--_scroll-fade-size-t);
185
+ --scroll-fade-b: var(--_scroll-fade-size-b);
186
+ }
187
+ }
188
+
189
+ @utility scroll-fade-y {
190
+ --_scroll-fade-size-t: var(--scroll-fade-t-size, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
191
+ --_scroll-fade-size-b: var(--scroll-fade-b-size, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
192
+ --scroll-fade-block: linear-gradient(
193
+ to bottom,
194
+ transparent 0,
195
+ #000 var(--scroll-fade-t, 0px),
196
+ #000 calc(100% - var(--scroll-fade-b, 0px)),
197
+ transparent 100%
198
+ );
199
+ -webkit-mask-image: var(--scroll-fade-mask, var(--scroll-fade-block));
200
+ mask-image: var(--scroll-fade-mask, var(--scroll-fade-block));
201
+ -webkit-mask-composite: source-in;
202
+ mask-composite: intersect;
203
+ -webkit-mask-repeat: no-repeat;
204
+ mask-repeat: no-repeat;
205
+
206
+ @supports (animation-timeline: scroll()) {
207
+ animation:
208
+ scroll-fade-reveal-t 1ms ease-in-out,
209
+ scroll-fade-reveal-b 1ms ease-in-out;
210
+ animation-timeline: scroll(self y), scroll(self y);
211
+ animation-range:
212
+ 0 var(--scroll-fade-reveal, calc(var(--spacing) * 24)),
213
+ calc(100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24))) 100%;
214
+ animation-fill-mode: both;
215
+ }
216
+
217
+ @supports not (animation-timeline: scroll()) {
218
+ --scroll-fade-t: var(--_scroll-fade-size-t);
219
+ --scroll-fade-b: var(--_scroll-fade-size-b);
220
+ }
221
+ }
222
+
223
+ @utility scroll-fade-x {
224
+ --_scroll-fade-size-s: var(--scroll-fade-s-size, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
225
+ --_scroll-fade-size-e: var(--scroll-fade-e-size, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
226
+ --scroll-fade-inline: linear-gradient(
227
+ to right,
228
+ transparent 0,
229
+ #000 var(--scroll-fade-s, 0px),
230
+ #000 calc(100% - var(--scroll-fade-e, 0px)),
231
+ transparent 100%
232
+ );
233
+ &:where([dir="rtl"], [dir="rtl"] *) {
234
+ --scroll-fade-inline: linear-gradient(
235
+ to left,
236
+ transparent 0,
237
+ #000 var(--scroll-fade-s, 0px),
238
+ #000 calc(100% - var(--scroll-fade-e, 0px)),
239
+ transparent 100%
240
+ );
241
+ }
242
+ -webkit-mask-image: var(--scroll-fade-mask, var(--scroll-fade-inline));
243
+ mask-image: var(--scroll-fade-mask, var(--scroll-fade-inline));
244
+ -webkit-mask-composite: source-in;
245
+ mask-composite: intersect;
246
+ -webkit-mask-repeat: no-repeat;
247
+ mask-repeat: no-repeat;
248
+
249
+ @supports (animation-timeline: scroll()) {
250
+ animation:
251
+ scroll-fade-reveal-s 1ms ease-in-out,
252
+ scroll-fade-reveal-e 1ms ease-in-out;
253
+ animation-timeline: scroll(self inline), scroll(self inline);
254
+ animation-range:
255
+ 0 var(--scroll-fade-reveal, calc(var(--spacing) * 24)),
256
+ calc(100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24))) 100%;
257
+ animation-fill-mode: both;
258
+ }
259
+
260
+ @supports not (animation-timeline: scroll()) {
261
+ --scroll-fade-s: var(--_scroll-fade-size-s);
262
+ --scroll-fade-e: var(--_scroll-fade-size-e);
263
+ }
264
+ }
265
+
266
+ @utility scroll-fade-t {
267
+ --_scroll-fade-size-t: var(--scroll-fade-t-size, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
268
+ --scroll-fade-mask: linear-gradient(to bottom, transparent 0, #000 var(--scroll-fade-t, 0px), #000 100%);
269
+ -webkit-mask-image: var(--scroll-fade-mask);
270
+ mask-image: var(--scroll-fade-mask);
271
+ -webkit-mask-composite: source-in;
272
+ mask-composite: intersect;
273
+ -webkit-mask-repeat: no-repeat;
274
+ mask-repeat: no-repeat;
275
+
276
+ @supports (animation-timeline: scroll()) {
277
+ animation: scroll-fade-reveal-t 1ms ease-in-out;
278
+ animation-timeline: scroll(self y);
279
+ animation-range: 0 var(--scroll-fade-reveal, calc(var(--spacing) * 24));
280
+ animation-fill-mode: both;
281
+ }
282
+
283
+ @supports not (animation-timeline: scroll()) {
284
+ --scroll-fade-t: var(--_scroll-fade-size-t);
285
+ }
286
+ }
287
+
288
+ @utility scroll-fade-b {
289
+ --_scroll-fade-size-b: var(--scroll-fade-b-size, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
290
+ --scroll-fade-mask: linear-gradient(to bottom, #000 0, #000 calc(100% - var(--scroll-fade-b, 0px)), transparent 100%);
291
+ -webkit-mask-image: var(--scroll-fade-mask);
292
+ mask-image: var(--scroll-fade-mask);
293
+ -webkit-mask-composite: source-in;
294
+ mask-composite: intersect;
295
+ -webkit-mask-repeat: no-repeat;
296
+ mask-repeat: no-repeat;
297
+
298
+ @supports (animation-timeline: scroll()) {
299
+ animation: scroll-fade-reveal-b 1ms ease-in-out;
300
+ animation-timeline: scroll(self y);
301
+ animation-range: calc(100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24))) 100%;
302
+ animation-fill-mode: both;
303
+ }
304
+
305
+ @supports not (animation-timeline: scroll()) {
306
+ --scroll-fade-b: var(--_scroll-fade-size-b);
307
+ }
308
+ }
309
+
310
+ @utility scroll-fade-l {
311
+ --_scroll-fade-size-s: var(--scroll-fade-s-size, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
312
+ --scroll-fade-mask: linear-gradient(to right, transparent 0, #000 var(--scroll-fade-s, 0px), #000 100%);
313
+ -webkit-mask-image: var(--scroll-fade-mask);
314
+ mask-image: var(--scroll-fade-mask);
315
+ -webkit-mask-composite: source-in;
316
+ mask-composite: intersect;
317
+ -webkit-mask-repeat: no-repeat;
318
+ mask-repeat: no-repeat;
319
+
320
+ @supports (animation-timeline: scroll()) {
321
+ animation: scroll-fade-reveal-s 1ms ease-in-out;
322
+ animation-timeline: scroll(self x);
323
+ animation-range: 0 var(--scroll-fade-reveal, calc(var(--spacing) * 24));
324
+ animation-fill-mode: both;
325
+ }
326
+
327
+ @supports not (animation-timeline: scroll()) {
328
+ --scroll-fade-s: var(--_scroll-fade-size-s);
329
+ }
330
+ }
331
+
332
+ @utility scroll-fade-r {
333
+ --_scroll-fade-size-e: var(--scroll-fade-e-size, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
334
+ --scroll-fade-mask: linear-gradient(to right, #000 0, #000 calc(100% - var(--scroll-fade-e, 0px)), transparent 100%);
335
+ -webkit-mask-image: var(--scroll-fade-mask);
336
+ mask-image: var(--scroll-fade-mask);
337
+ -webkit-mask-composite: source-in;
338
+ mask-composite: intersect;
339
+ -webkit-mask-repeat: no-repeat;
340
+ mask-repeat: no-repeat;
341
+
342
+ @supports (animation-timeline: scroll()) {
343
+ animation: scroll-fade-reveal-e 1ms ease-in-out;
344
+ animation-timeline: scroll(self x);
345
+ animation-range: calc(100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24))) 100%;
346
+ animation-fill-mode: both;
347
+ }
348
+
349
+ @supports not (animation-timeline: scroll()) {
350
+ --scroll-fade-e: var(--_scroll-fade-size-e);
351
+ }
352
+ }
353
+
354
+ @utility scroll-fade-s {
355
+ --_scroll-fade-size-s: var(--scroll-fade-s-size, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
356
+ --scroll-fade-mask: linear-gradient(to right, transparent 0, #000 var(--scroll-fade-s, 0px), #000 100%);
357
+ &:where([dir="rtl"], [dir="rtl"] *) {
358
+ --scroll-fade-mask: linear-gradient(to left, transparent 0, #000 var(--scroll-fade-s, 0px), #000 100%);
359
+ }
360
+ -webkit-mask-image: var(--scroll-fade-mask);
361
+ mask-image: var(--scroll-fade-mask);
362
+ -webkit-mask-composite: source-in;
363
+ mask-composite: intersect;
364
+ -webkit-mask-repeat: no-repeat;
365
+ mask-repeat: no-repeat;
366
+
367
+ @supports (animation-timeline: scroll()) {
368
+ animation: scroll-fade-reveal-s 1ms ease-in-out;
369
+ animation-timeline: scroll(self inline);
370
+ animation-range: 0 var(--scroll-fade-reveal, calc(var(--spacing) * 24));
371
+ animation-fill-mode: both;
372
+ }
373
+
374
+ @supports not (animation-timeline: scroll()) {
375
+ --scroll-fade-s: var(--_scroll-fade-size-s);
376
+ }
377
+ }
378
+
379
+ @utility scroll-fade-e {
380
+ --_scroll-fade-size-e: var(--scroll-fade-e-size, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
381
+ --scroll-fade-mask: linear-gradient(to right, #000 0, #000 calc(100% - var(--scroll-fade-e, 0px)), transparent 100%);
382
+ &:where([dir="rtl"], [dir="rtl"] *) {
383
+ --scroll-fade-mask: linear-gradient(to left, #000 0, #000 calc(100% - var(--scroll-fade-e, 0px)), transparent 100%);
384
+ }
385
+ -webkit-mask-image: var(--scroll-fade-mask);
386
+ mask-image: var(--scroll-fade-mask);
387
+ -webkit-mask-composite: source-in;
388
+ mask-composite: intersect;
389
+ -webkit-mask-repeat: no-repeat;
390
+ mask-repeat: no-repeat;
391
+
392
+ @supports (animation-timeline: scroll()) {
393
+ animation: scroll-fade-reveal-e 1ms ease-in-out;
394
+ animation-timeline: scroll(self inline);
395
+ animation-range: calc(100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24))) 100%;
396
+ animation-fill-mode: both;
397
+ }
398
+
399
+ @supports not (animation-timeline: scroll()) {
400
+ --scroll-fade-e: var(--_scroll-fade-size-e);
401
+ }
402
+ }
403
+
404
+ @utility scroll-fade-* {
405
+ --scroll-fade-size: calc(var(--spacing) * --value(integer));
406
+ --scroll-fade-size: --value([length], [percentage]);
407
+ }
408
+
409
+ @utility scroll-fade-t-* {
410
+ --scroll-fade-t-size: calc(var(--spacing) * --value(integer));
411
+ --scroll-fade-t-size: --value([length], [percentage]);
412
+ }
413
+
414
+ @utility scroll-fade-b-* {
415
+ --scroll-fade-b-size: calc(var(--spacing) * --value(integer));
416
+ --scroll-fade-b-size: --value([length], [percentage]);
417
+ }
418
+
419
+ @utility scroll-fade-s-* {
420
+ --scroll-fade-s-size: calc(var(--spacing) * --value(integer));
421
+ --scroll-fade-s-size: --value([length], [percentage]);
422
+ }
423
+
424
+ @utility scroll-fade-e-* {
425
+ --scroll-fade-e-size: calc(var(--spacing) * --value(integer));
426
+ --scroll-fade-e-size: --value([length], [percentage]);
427
+ }
428
+
429
+ @utility scroll-fade-none {
430
+ --scroll-fade-mask: none;
431
+ }
432
+
433
+ /* shimmer */
434
+ @property --shimmer-angle {
435
+ syntax: "<angle>";
436
+ inherits: true;
437
+ initial-value: 20deg;
438
+ }
439
+ @property --shimmer-image {
440
+ syntax: "*";
441
+ inherits: false;
442
+ }
443
+ @property --shimmer-text-fill {
444
+ syntax: "*";
445
+ inherits: false;
446
+ }
447
+
448
+ @theme inline {
449
+ @keyframes tw-shimmer {
450
+ from {
451
+ background-position: 100% 0;
452
+ }
453
+ to {
454
+ background-position: 0 0;
455
+ }
456
+ }
457
+ }
458
+
459
+ @utility shimmer {
460
+ --_spread: var(--shimmer-spread, calc(3ch + 40px));
461
+ --_base: currentColor;
462
+ --_highlight: var(--shimmer-color, oklch(from currentColor l c h / calc(alpha* 0.2)));
463
+
464
+ background-image: var(
465
+ --shimmer-image,
466
+ linear-gradient(
467
+ calc(90deg + var(--shimmer-angle)),
468
+ var(--_base) calc(50% - var(--_spread)),
469
+ color-mix(in oklch, var(--_highlight), var(--_base) 50%) calc(50% - var(--_spread) * 0.5),
470
+ var(--_highlight) 50%,
471
+ color-mix(in oklch, var(--_highlight), var(--_base) 50%) calc(50% + var(--_spread) * 0.5),
472
+ var(--_base) calc(50% + var(--_spread))
473
+ )
474
+ );
475
+ background-repeat: no-repeat;
476
+ background-size: calc(200% + var(--_spread) * 2) 100%;
477
+ background-position: 0 0;
478
+ background-clip: text;
479
+ -webkit-background-clip: text;
480
+ -webkit-text-fill-color: var(--shimmer-text-fill, transparent);
481
+ animation: tw-shimmer var(--shimmer-duration, 2s) linear infinite;
482
+
483
+ @variant dark {
484
+ --_highlight: var(--shimmer-color, oklch(from currentColor max(0.8, calc(l + 0.4)) c h / calc(alpha + 0.4)));
485
+ }
486
+
487
+ &:where([dir="rtl"], [dir="rtl"] *) {
488
+ animation-direction: reverse;
489
+ }
490
+
491
+ @media (prefers-reduced-motion: reduce) {
492
+ animation: none;
493
+ background-image: none;
494
+ -webkit-text-fill-color: currentColor;
495
+ }
496
+ }
497
+
498
+ @utility shimmer-once {
499
+ animation-iteration-count: 1;
500
+ }
501
+
502
+ @utility shimmer-reverse {
503
+ animation-direction: reverse;
504
+ }
505
+
506
+ @utility shimmer-none {
507
+ --shimmer-image: none;
508
+ --shimmer-text-fill: currentColor;
509
+ }
510
+
511
+ @utility shimmer-color-* {
512
+ --shimmer-color: --value(--color, [color]);
513
+ --shimmer-color: color-mix(in oklch, --value(--color, [color]) calc(--modifier(integer) * 1%), transparent);
514
+ }
515
+
516
+ @utility shimmer-duration-* {
517
+ --shimmer-duration: calc(--value(integer) * 1ms);
518
+ }
519
+
520
+ @utility shimmer-spread-* {
521
+ --shimmer-spread: calc(var(--spacing) * --value(integer));
522
+ --shimmer-spread: --value([length], [percentage]);
523
+ }
524
+
525
+ @utility shimmer-angle-* {
526
+ --shimmer-angle: calc(--value(integer) * 1deg);
527
+ }
528
+
529
+ /* Kept for backwards compatibility. Unlayered, so it still wins over other
530
+ utilities on a plain .shimmer element. Variants are handled in the utility. */
531
+ @media (prefers-reduced-motion: reduce) {
532
+ .shimmer {
533
+ animation: none;
534
+ background-image: none;
535
+ -webkit-text-fill-color: currentColor;
536
+ }
537
+ }