@multicomma/arkcn 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.
Files changed (237) hide show
  1. package/README.md +78 -0
  2. package/bin/arkcn.mjs +78 -0
  3. package/cli/commands.mjs +251 -0
  4. package/cli/project.mjs +168 -0
  5. package/cli/registry.mjs +50 -0
  6. package/cli/ui.mjs +46 -0
  7. package/mcp/server.mjs +149 -0
  8. package/package.json +201 -0
  9. package/registry/base.css +680 -0
  10. package/registry/index.json +1833 -0
  11. package/registry/items/accordion.json +18 -0
  12. package/registry/items/activity-feed.json +18 -0
  13. package/registry/items/alert-dialog.json +18 -0
  14. package/registry/items/alert.json +17 -0
  15. package/registry/items/angle-slider.json +17 -0
  16. package/registry/items/app-shell.json +28 -0
  17. package/registry/items/aspect-ratio.json +13 -0
  18. package/registry/items/attachment.json +19 -0
  19. package/registry/items/avatar.json +17 -0
  20. package/registry/items/badge.json +18 -0
  21. package/registry/items/breadcrumb.json +18 -0
  22. package/registry/items/bubble.json +18 -0
  23. package/registry/items/button-group.json +19 -0
  24. package/registry/items/button.json +18 -0
  25. package/registry/items/calendar.json +19 -0
  26. package/registry/items/canvas.json +24 -0
  27. package/registry/items/card.json +15 -0
  28. package/registry/items/carousel.json +19 -0
  29. package/registry/items/cascader.json +23 -0
  30. package/registry/items/chart.json +17 -0
  31. package/registry/items/chat.json +23 -0
  32. package/registry/items/checkbox.json +18 -0
  33. package/registry/items/clipboard.json +19 -0
  34. package/registry/items/collapsible.json +15 -0
  35. package/registry/items/color-picker.json +19 -0
  36. package/registry/items/combobox.json +20 -0
  37. package/registry/items/command.json +21 -0
  38. package/registry/items/comment-thread.json +25 -0
  39. package/registry/items/context-menu.json +18 -0
  40. package/registry/items/controllable.json +14 -0
  41. package/registry/items/data-grid.json +24 -0
  42. package/registry/items/data-table-adapter.json +14 -0
  43. package/registry/items/data-table.json +32 -0
  44. package/registry/items/date-input.json +17 -0
  45. package/registry/items/dialog.json +19 -0
  46. package/registry/items/direction.json +13 -0
  47. package/registry/items/drag-preview.json +16 -0
  48. package/registry/items/drawer.json +18 -0
  49. package/registry/items/dropdown-menu.json +18 -0
  50. package/registry/items/editable.json +17 -0
  51. package/registry/items/empty.json +17 -0
  52. package/registry/items/field.json +19 -0
  53. package/registry/items/file-upload.json +19 -0
  54. package/registry/items/floating-panel.json +19 -0
  55. package/registry/items/floating-toolbar.json +16 -0
  56. package/registry/items/form.json +14 -0
  57. package/registry/items/format.json +15 -0
  58. package/registry/items/gantt.json +22 -0
  59. package/registry/items/history.json +14 -0
  60. package/registry/items/hotkeys.json +18 -0
  61. package/registry/items/hover-card.json +17 -0
  62. package/registry/items/image-cropper.json +17 -0
  63. package/registry/items/input-group.json +20 -0
  64. package/registry/items/input-otp.json +18 -0
  65. package/registry/items/input.json +15 -0
  66. package/registry/items/item.json +19 -0
  67. package/registry/items/json-tree-view.json +17 -0
  68. package/registry/items/kanban.json +26 -0
  69. package/registry/items/kbd.json +15 -0
  70. package/registry/items/label.json +15 -0
  71. package/registry/items/live-region.json +16 -0
  72. package/registry/items/marker.json +18 -0
  73. package/registry/items/marquee.json +17 -0
  74. package/registry/items/menubar.json +19 -0
  75. package/registry/items/message.json +15 -0
  76. package/registry/items/navigation-menu.json +19 -0
  77. package/registry/items/node-graph.json +22 -0
  78. package/registry/items/number-input.json +18 -0
  79. package/registry/items/pagination.json +18 -0
  80. package/registry/items/password-input.json +18 -0
  81. package/registry/items/popconfirm.json +20 -0
  82. package/registry/items/popover.json +18 -0
  83. package/registry/items/progress.json +17 -0
  84. package/registry/items/qr-code.json +17 -0
  85. package/registry/items/query-builder.json +23 -0
  86. package/registry/items/radio-group.json +17 -0
  87. package/registry/items/rating-group.json +18 -0
  88. package/registry/items/resizable.json +17 -0
  89. package/registry/items/rich-text-editor.json +37 -0
  90. package/registry/items/row-layout.json +15 -0
  91. package/registry/items/scheduler.json +23 -0
  92. package/registry/items/scroll-area.json +17 -0
  93. package/registry/items/segment-group.json +17 -0
  94. package/registry/items/select.json +19 -0
  95. package/registry/items/separator.json +15 -0
  96. package/registry/items/sheet.json +19 -0
  97. package/registry/items/sidebar.json +27 -0
  98. package/registry/items/signature-pad.json +19 -0
  99. package/registry/items/skeleton.json +15 -0
  100. package/registry/items/slider.json +17 -0
  101. package/registry/items/sonner.json +17 -0
  102. package/registry/items/spinner.json +17 -0
  103. package/registry/items/steps.json +19 -0
  104. package/registry/items/swap.json +17 -0
  105. package/registry/items/switch.json +17 -0
  106. package/registry/items/table.json +16 -0
  107. package/registry/items/tabs.json +18 -0
  108. package/registry/items/tags-input.json +18 -0
  109. package/registry/items/textarea.json +15 -0
  110. package/registry/items/time.json +14 -0
  111. package/registry/items/timer.json +18 -0
  112. package/registry/items/toc.json +17 -0
  113. package/registry/items/toggle-group.json +19 -0
  114. package/registry/items/toggle.json +18 -0
  115. package/registry/items/tooltip.json +17 -0
  116. package/registry/items/tour.json +19 -0
  117. package/registry/items/transfer-list.json +24 -0
  118. package/registry/items/tree-select.json +24 -0
  119. package/registry/items/tree-view.json +18 -0
  120. package/registry/items/use-mobile.json +13 -0
  121. package/registry/items/utils.json +17 -0
  122. package/registry/items/virtual-list.json +16 -0
  123. package/src/components/ui/accordion.tsx +111 -0
  124. package/src/components/ui/activity-feed.tsx +228 -0
  125. package/src/components/ui/alert-dialog.tsx +204 -0
  126. package/src/components/ui/alert.tsx +55 -0
  127. package/src/components/ui/angle-slider.tsx +117 -0
  128. package/src/components/ui/app-shell.tsx +985 -0
  129. package/src/components/ui/aspect-ratio.tsx +35 -0
  130. package/src/components/ui/attachment.tsx +193 -0
  131. package/src/components/ui/avatar.tsx +94 -0
  132. package/src/components/ui/badge.tsx +45 -0
  133. package/src/components/ui/breadcrumb.tsx +93 -0
  134. package/src/components/ui/bubble.tsx +119 -0
  135. package/src/components/ui/button-group.tsx +79 -0
  136. package/src/components/ui/button.tsx +65 -0
  137. package/src/components/ui/calendar.tsx +172 -0
  138. package/src/components/ui/canvas.tsx +723 -0
  139. package/src/components/ui/card.tsx +69 -0
  140. package/src/components/ui/carousel.tsx +228 -0
  141. package/src/components/ui/cascader.tsx +754 -0
  142. package/src/components/ui/chart.tsx +303 -0
  143. package/src/components/ui/chat.tsx +544 -0
  144. package/src/components/ui/checkbox.tsx +94 -0
  145. package/src/components/ui/clipboard.tsx +94 -0
  146. package/src/components/ui/collapsible.tsx +32 -0
  147. package/src/components/ui/color-picker.tsx +441 -0
  148. package/src/components/ui/combobox.tsx +400 -0
  149. package/src/components/ui/command.tsx +292 -0
  150. package/src/components/ui/comment-thread.tsx +923 -0
  151. package/src/components/ui/context-menu.tsx +331 -0
  152. package/src/components/ui/data-grid.tsx +1227 -0
  153. package/src/components/ui/data-table.tsx +993 -0
  154. package/src/components/ui/date-input.tsx +103 -0
  155. package/src/components/ui/dialog.tsx +159 -0
  156. package/src/components/ui/direction.tsx +32 -0
  157. package/src/components/ui/drawer.tsx +200 -0
  158. package/src/components/ui/dropdown-menu.tsx +329 -0
  159. package/src/components/ui/editable.tsx +90 -0
  160. package/src/components/ui/empty.tsx +86 -0
  161. package/src/components/ui/field.tsx +218 -0
  162. package/src/components/ui/file-upload.tsx +204 -0
  163. package/src/components/ui/floating-panel.tsx +199 -0
  164. package/src/components/ui/floating-toolbar.tsx +79 -0
  165. package/src/components/ui/format.tsx +22 -0
  166. package/src/components/ui/gantt.tsx +950 -0
  167. package/src/components/ui/hotkeys.tsx +340 -0
  168. package/src/components/ui/hover-card.tsx +83 -0
  169. package/src/components/ui/image-cropper.tsx +100 -0
  170. package/src/components/ui/input-group.tsx +133 -0
  171. package/src/components/ui/input-otp.tsx +82 -0
  172. package/src/components/ui/input.tsx +18 -0
  173. package/src/components/ui/item.tsx +174 -0
  174. package/src/components/ui/json-tree-view.tsx +37 -0
  175. package/src/components/ui/kanban.tsx +884 -0
  176. package/src/components/ui/kbd.tsx +20 -0
  177. package/src/components/ui/label.tsx +30 -0
  178. package/src/components/ui/live-region.tsx +54 -0
  179. package/src/components/ui/marker.tsx +66 -0
  180. package/src/components/ui/marquee.tsx +61 -0
  181. package/src/components/ui/menubar.tsx +456 -0
  182. package/src/components/ui/message.tsx +74 -0
  183. package/src/components/ui/navigation-menu.tsx +202 -0
  184. package/src/components/ui/node-graph.tsx +1723 -0
  185. package/src/components/ui/number-input.tsx +148 -0
  186. package/src/components/ui/pagination.tsx +88 -0
  187. package/src/components/ui/password-input.tsx +104 -0
  188. package/src/components/ui/popconfirm.tsx +149 -0
  189. package/src/components/ui/popover.tsx +126 -0
  190. package/src/components/ui/progress.tsx +114 -0
  191. package/src/components/ui/qr-code.tsx +51 -0
  192. package/src/components/ui/query-builder.tsx +938 -0
  193. package/src/components/ui/radio-group.tsx +108 -0
  194. package/src/components/ui/rating-group.tsx +91 -0
  195. package/src/components/ui/resizable.tsx +41 -0
  196. package/src/components/ui/rich-text-editor.tsx +845 -0
  197. package/src/components/ui/scheduler.tsx +1164 -0
  198. package/src/components/ui/scroll-area.tsx +82 -0
  199. package/src/components/ui/segment-group.tsx +95 -0
  200. package/src/components/ui/select.tsx +354 -0
  201. package/src/components/ui/separator.tsx +32 -0
  202. package/src/components/ui/sheet.tsx +130 -0
  203. package/src/components/ui/sidebar.tsx +665 -0
  204. package/src/components/ui/signature-pad.tsx +112 -0
  205. package/src/components/ui/skeleton.tsx +7 -0
  206. package/src/components/ui/slider.tsx +183 -0
  207. package/src/components/ui/sonner.tsx +37 -0
  208. package/src/components/ui/spinner.tsx +16 -0
  209. package/src/components/ui/steps.tsx +152 -0
  210. package/src/components/ui/swap.tsx +33 -0
  211. package/src/components/ui/switch.tsx +83 -0
  212. package/src/components/ui/table.tsx +72 -0
  213. package/src/components/ui/tabs.tsx +100 -0
  214. package/src/components/ui/tags-input.tsx +153 -0
  215. package/src/components/ui/textarea.tsx +17 -0
  216. package/src/components/ui/timer.tsx +67 -0
  217. package/src/components/ui/toc.tsx +64 -0
  218. package/src/components/ui/toggle-group.tsx +89 -0
  219. package/src/components/ui/toggle.tsx +46 -0
  220. package/src/components/ui/tooltip.tsx +113 -0
  221. package/src/components/ui/tour.tsx +168 -0
  222. package/src/components/ui/transfer-list.tsx +700 -0
  223. package/src/components/ui/tree-select.tsx +638 -0
  224. package/src/components/ui/tree-view.tsx +217 -0
  225. package/src/components/ui/virtual-list.tsx +343 -0
  226. package/src/hooks/use-mobile.ts +19 -0
  227. package/src/lib/controllable.ts +31 -0
  228. package/src/lib/data-table-adapter.ts +67 -0
  229. package/src/lib/drag-preview.ts +39 -0
  230. package/src/lib/form.ts +39 -0
  231. package/src/lib/history.ts +55 -0
  232. package/src/lib/row-layout.ts +81 -0
  233. package/src/lib/table.ts +483 -0
  234. package/src/lib/time.ts +37 -0
  235. package/src/lib/utils.ts +6 -0
  236. package/src/styles/arkcn.css +764 -0
  237. package/src/styles/index.css +3 -0
@@ -0,0 +1,680 @@
1
+ @import "tw-animate-css";
2
+ @plugin "@tailwindcss/typography";
3
+
4
+ @custom-variant dark (&:is(.dark *));
5
+
6
+ @theme inline {
7
+ --font-heading: var(--font-sans);
8
+ --font-sans: "Geist Variable", sans-serif;
9
+ --color-sidebar-ring: var(--sidebar-ring);
10
+ --color-sidebar-border: var(--sidebar-border);
11
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
12
+ --color-sidebar-accent: var(--sidebar-accent);
13
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
14
+ --color-sidebar-primary: var(--sidebar-primary);
15
+ --color-sidebar-foreground: var(--sidebar-foreground);
16
+ --color-sidebar: var(--sidebar);
17
+ --color-chart-5: var(--chart-5);
18
+ --color-chart-4: var(--chart-4);
19
+ --color-chart-3: var(--chart-3);
20
+ --color-chart-2: var(--chart-2);
21
+ --color-chart-1: var(--chart-1);
22
+ --color-ring: var(--ring);
23
+ --color-input: var(--input);
24
+ --color-border: var(--border);
25
+ --color-destructive: var(--destructive);
26
+ --color-accent-foreground: var(--accent-foreground);
27
+ --color-accent: var(--accent);
28
+ --color-muted-foreground: var(--muted-foreground);
29
+ --color-muted: var(--muted);
30
+ --color-secondary-foreground: var(--secondary-foreground);
31
+ --color-secondary: var(--secondary);
32
+ --color-primary-foreground: var(--primary-foreground);
33
+ --color-primary: var(--primary);
34
+ --color-popover-foreground: var(--popover-foreground);
35
+ --color-popover: var(--popover);
36
+ --color-card-foreground: var(--card-foreground);
37
+ --color-card: var(--card);
38
+ --color-foreground: var(--foreground);
39
+ --color-background: var(--background);
40
+ --radius-sm: calc(var(--radius) * 0.6);
41
+ --radius-md: calc(var(--radius) * 0.8);
42
+ --radius-lg: var(--radius);
43
+ --radius-xl: calc(var(--radius) * 1.4);
44
+ --radius-2xl: calc(var(--radius) * 1.8);
45
+ --radius-3xl: calc(var(--radius) * 2.2);
46
+ --radius-4xl: calc(var(--radius) * 2.6);
47
+ --animate-marquee-x: marquee-x var(--marquee-duration) linear var(--marquee-delay) var(--marquee-loop-count);
48
+ --animate-marquee-y: marquee-y var(--marquee-duration) linear var(--marquee-delay) var(--marquee-loop-count);
49
+
50
+ @keyframes marquee-x {
51
+ to {
52
+ transform: translateX(var(--marquee-translate));
53
+ }
54
+ }
55
+ @keyframes marquee-y {
56
+ to {
57
+ transform: translateY(var(--marquee-translate));
58
+ }
59
+ }
60
+
61
+ @keyframes accordion-down {
62
+ from {
63
+ height: 0;
64
+ }
65
+ to {
66
+ height: var(--accordion-panel-height, auto);
67
+ }
68
+ }
69
+
70
+ @keyframes accordion-up {
71
+ from {
72
+ height: var(--accordion-panel-height, auto);
73
+ }
74
+ to {
75
+ height: 0;
76
+ }
77
+ }
78
+
79
+ @keyframes scroll-fade-reveal-t {
80
+ from {
81
+ --scroll-fade-t: 0px;
82
+ }
83
+ to {
84
+ --scroll-fade-t: var(--_scroll-fade-size-t, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
85
+ }
86
+ }
87
+ @keyframes scroll-fade-reveal-b {
88
+ from {
89
+ --scroll-fade-b: var(--_scroll-fade-size-b, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
90
+ }
91
+ to {
92
+ --scroll-fade-b: 0px;
93
+ }
94
+ }
95
+ @keyframes scroll-fade-reveal-s {
96
+ from {
97
+ --scroll-fade-s: 0px;
98
+ }
99
+ to {
100
+ --scroll-fade-s: var(--_scroll-fade-size-s, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
101
+ }
102
+ }
103
+ @keyframes scroll-fade-reveal-e {
104
+ from {
105
+ --scroll-fade-e: var(--_scroll-fade-size-e, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
106
+ }
107
+ to {
108
+ --scroll-fade-e: 0px;
109
+ }
110
+ }
111
+
112
+ @keyframes tw-shimmer {
113
+ from {
114
+ background-position: 100% 0;
115
+ }
116
+ to {
117
+ background-position: 0 0;
118
+ }
119
+ }
120
+
121
+ --animate-node-graph-flow: node-graph-flow 0.6s linear infinite;
122
+ @keyframes node-graph-flow {
123
+ to {
124
+ stroke-dashoffset: -16;
125
+ }
126
+ }
127
+ --animate-node-graph-wait: node-graph-wait 1s linear forwards;
128
+ @keyframes node-graph-wait {
129
+ from {
130
+ transform: scaleX(0);
131
+ }
132
+ to {
133
+ transform: scaleX(1);
134
+ }
135
+ }
136
+ }
137
+
138
+ /* Custom variants, properties, and utilities used by src/components/ui */
139
+ /* Custom variants */
140
+ @custom-variant data-open {
141
+ &:where([data-state="open"]),
142
+ &:where([data-open]:not([data-open="false"])) {
143
+ @slot;
144
+ }
145
+ }
146
+
147
+ @custom-variant data-closed {
148
+ &:where([data-state="closed"]),
149
+ &:where([data-closed]:not([data-closed="false"])) {
150
+ @slot;
151
+ }
152
+ }
153
+
154
+ @custom-variant data-checked {
155
+ &:where([data-state="checked"]),
156
+ &:where([data-checked]:not([data-checked="false"])) {
157
+ @slot;
158
+ }
159
+ }
160
+
161
+ @custom-variant data-unchecked {
162
+ &:where([data-state="unchecked"]),
163
+ &:where([data-unchecked]:not([data-unchecked="false"])) {
164
+ @slot;
165
+ }
166
+ }
167
+
168
+ @custom-variant data-selected {
169
+ &:where([data-selected="true"]),
170
+ &:where([data-selected]:not([data-selected="false"])) {
171
+ @slot;
172
+ }
173
+ }
174
+
175
+ @custom-variant data-disabled {
176
+ &:where([data-disabled="true"]),
177
+ &:where([data-disabled]:not([data-disabled="false"])) {
178
+ @slot;
179
+ }
180
+ }
181
+
182
+ @custom-variant data-active {
183
+ &:where([data-state="active"]),
184
+ &:where([data-active]:not([data-active="false"])) {
185
+ @slot;
186
+ }
187
+ }
188
+
189
+ @custom-variant data-horizontal {
190
+ &:where([data-orientation="horizontal"]) {
191
+ @slot;
192
+ }
193
+ }
194
+
195
+ @custom-variant data-vertical {
196
+ &:where([data-orientation="vertical"]) {
197
+ @slot;
198
+ }
199
+ }
200
+
201
+ @utility no-scrollbar {
202
+ -ms-overflow-style: none;
203
+ scrollbar-width: none;
204
+
205
+ &::-webkit-scrollbar {
206
+ display: none;
207
+ }
208
+ }
209
+
210
+ /* scroll-fade */
211
+ @property --scroll-fade-t {
212
+ syntax: "<length-percentage>";
213
+ inherits: false;
214
+ initial-value: 0px;
215
+ }
216
+ @property --scroll-fade-b {
217
+ syntax: "<length-percentage>";
218
+ inherits: false;
219
+ initial-value: 0px;
220
+ }
221
+ @property --scroll-fade-s {
222
+ syntax: "<length-percentage>";
223
+ inherits: false;
224
+ initial-value: 0px;
225
+ }
226
+ @property --scroll-fade-e {
227
+ syntax: "<length-percentage>";
228
+ inherits: false;
229
+ initial-value: 0px;
230
+ }
231
+ @property --scroll-fade-mask {
232
+ syntax: "*";
233
+ inherits: false;
234
+ }
235
+
236
+ @utility scroll-fade {
237
+ --_scroll-fade-size-t: var(--scroll-fade-t-size, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
238
+ --_scroll-fade-size-b: var(--scroll-fade-b-size, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
239
+ --scroll-fade-block: linear-gradient(
240
+ to bottom,
241
+ transparent 0,
242
+ #000 var(--scroll-fade-t, 0px),
243
+ #000 calc(100% - var(--scroll-fade-b, 0px)),
244
+ transparent 100%
245
+ );
246
+ -webkit-mask-image: var(--scroll-fade-mask, var(--scroll-fade-block));
247
+ mask-image: var(--scroll-fade-mask, var(--scroll-fade-block));
248
+ -webkit-mask-composite: source-in;
249
+ mask-composite: intersect;
250
+ -webkit-mask-repeat: no-repeat;
251
+ mask-repeat: no-repeat;
252
+
253
+ @supports (animation-timeline: scroll()) {
254
+ animation:
255
+ scroll-fade-reveal-t 1ms ease-in-out,
256
+ scroll-fade-reveal-b 1ms ease-in-out;
257
+ animation-timeline: scroll(self y), scroll(self y);
258
+ animation-range:
259
+ 0 var(--scroll-fade-reveal, calc(var(--spacing) * 24)),
260
+ calc(100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24))) 100%;
261
+ animation-fill-mode: both;
262
+ }
263
+
264
+ @supports not (animation-timeline: scroll()) {
265
+ --scroll-fade-t: var(--_scroll-fade-size-t);
266
+ --scroll-fade-b: var(--_scroll-fade-size-b);
267
+ }
268
+ }
269
+
270
+ @utility scroll-fade-y {
271
+ --_scroll-fade-size-t: var(--scroll-fade-t-size, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
272
+ --_scroll-fade-size-b: var(--scroll-fade-b-size, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
273
+ --scroll-fade-block: linear-gradient(
274
+ to bottom,
275
+ transparent 0,
276
+ #000 var(--scroll-fade-t, 0px),
277
+ #000 calc(100% - var(--scroll-fade-b, 0px)),
278
+ transparent 100%
279
+ );
280
+ -webkit-mask-image: var(--scroll-fade-mask, var(--scroll-fade-block));
281
+ mask-image: var(--scroll-fade-mask, var(--scroll-fade-block));
282
+ -webkit-mask-composite: source-in;
283
+ mask-composite: intersect;
284
+ -webkit-mask-repeat: no-repeat;
285
+ mask-repeat: no-repeat;
286
+
287
+ @supports (animation-timeline: scroll()) {
288
+ animation:
289
+ scroll-fade-reveal-t 1ms ease-in-out,
290
+ scroll-fade-reveal-b 1ms ease-in-out;
291
+ animation-timeline: scroll(self y), scroll(self y);
292
+ animation-range:
293
+ 0 var(--scroll-fade-reveal, calc(var(--spacing) * 24)),
294
+ calc(100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24))) 100%;
295
+ animation-fill-mode: both;
296
+ }
297
+
298
+ @supports not (animation-timeline: scroll()) {
299
+ --scroll-fade-t: var(--_scroll-fade-size-t);
300
+ --scroll-fade-b: var(--_scroll-fade-size-b);
301
+ }
302
+ }
303
+
304
+ @utility scroll-fade-x {
305
+ --_scroll-fade-size-s: var(--scroll-fade-s-size, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
306
+ --_scroll-fade-size-e: var(--scroll-fade-e-size, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
307
+ --scroll-fade-inline: linear-gradient(
308
+ to right,
309
+ transparent 0,
310
+ #000 var(--scroll-fade-s, 0px),
311
+ #000 calc(100% - var(--scroll-fade-e, 0px)),
312
+ transparent 100%
313
+ );
314
+ &:where([dir="rtl"], [dir="rtl"] *) {
315
+ --scroll-fade-inline: linear-gradient(
316
+ to left,
317
+ transparent 0,
318
+ #000 var(--scroll-fade-s, 0px),
319
+ #000 calc(100% - var(--scroll-fade-e, 0px)),
320
+ transparent 100%
321
+ );
322
+ }
323
+ -webkit-mask-image: var(--scroll-fade-mask, var(--scroll-fade-inline));
324
+ mask-image: var(--scroll-fade-mask, var(--scroll-fade-inline));
325
+ -webkit-mask-composite: source-in;
326
+ mask-composite: intersect;
327
+ -webkit-mask-repeat: no-repeat;
328
+ mask-repeat: no-repeat;
329
+
330
+ @supports (animation-timeline: scroll()) {
331
+ animation:
332
+ scroll-fade-reveal-s 1ms ease-in-out,
333
+ scroll-fade-reveal-e 1ms ease-in-out;
334
+ animation-timeline: scroll(self inline), scroll(self inline);
335
+ animation-range:
336
+ 0 var(--scroll-fade-reveal, calc(var(--spacing) * 24)),
337
+ calc(100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24))) 100%;
338
+ animation-fill-mode: both;
339
+ }
340
+
341
+ @supports not (animation-timeline: scroll()) {
342
+ --scroll-fade-s: var(--_scroll-fade-size-s);
343
+ --scroll-fade-e: var(--_scroll-fade-size-e);
344
+ }
345
+ }
346
+
347
+ @utility scroll-fade-t {
348
+ --_scroll-fade-size-t: var(--scroll-fade-t-size, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
349
+ --scroll-fade-mask: linear-gradient(to bottom, transparent 0, #000 var(--scroll-fade-t, 0px), #000 100%);
350
+ -webkit-mask-image: var(--scroll-fade-mask);
351
+ mask-image: var(--scroll-fade-mask);
352
+ -webkit-mask-composite: source-in;
353
+ mask-composite: intersect;
354
+ -webkit-mask-repeat: no-repeat;
355
+ mask-repeat: no-repeat;
356
+
357
+ @supports (animation-timeline: scroll()) {
358
+ animation: scroll-fade-reveal-t 1ms ease-in-out;
359
+ animation-timeline: scroll(self y);
360
+ animation-range: 0 var(--scroll-fade-reveal, calc(var(--spacing) * 24));
361
+ animation-fill-mode: both;
362
+ }
363
+
364
+ @supports not (animation-timeline: scroll()) {
365
+ --scroll-fade-t: var(--_scroll-fade-size-t);
366
+ }
367
+ }
368
+
369
+ @utility scroll-fade-b {
370
+ --_scroll-fade-size-b: var(--scroll-fade-b-size, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
371
+ --scroll-fade-mask: linear-gradient(to bottom, #000 0, #000 calc(100% - var(--scroll-fade-b, 0px)), transparent 100%);
372
+ -webkit-mask-image: var(--scroll-fade-mask);
373
+ mask-image: var(--scroll-fade-mask);
374
+ -webkit-mask-composite: source-in;
375
+ mask-composite: intersect;
376
+ -webkit-mask-repeat: no-repeat;
377
+ mask-repeat: no-repeat;
378
+
379
+ @supports (animation-timeline: scroll()) {
380
+ animation: scroll-fade-reveal-b 1ms ease-in-out;
381
+ animation-timeline: scroll(self y);
382
+ animation-range: calc(100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24))) 100%;
383
+ animation-fill-mode: both;
384
+ }
385
+
386
+ @supports not (animation-timeline: scroll()) {
387
+ --scroll-fade-b: var(--_scroll-fade-size-b);
388
+ }
389
+ }
390
+
391
+ @utility scroll-fade-l {
392
+ --_scroll-fade-size-s: var(--scroll-fade-s-size, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
393
+ --scroll-fade-mask: linear-gradient(to right, transparent 0, #000 var(--scroll-fade-s, 0px), #000 100%);
394
+ -webkit-mask-image: var(--scroll-fade-mask);
395
+ mask-image: var(--scroll-fade-mask);
396
+ -webkit-mask-composite: source-in;
397
+ mask-composite: intersect;
398
+ -webkit-mask-repeat: no-repeat;
399
+ mask-repeat: no-repeat;
400
+
401
+ @supports (animation-timeline: scroll()) {
402
+ animation: scroll-fade-reveal-s 1ms ease-in-out;
403
+ animation-timeline: scroll(self x);
404
+ animation-range: 0 var(--scroll-fade-reveal, calc(var(--spacing) * 24));
405
+ animation-fill-mode: both;
406
+ }
407
+
408
+ @supports not (animation-timeline: scroll()) {
409
+ --scroll-fade-s: var(--_scroll-fade-size-s);
410
+ }
411
+ }
412
+
413
+ @utility scroll-fade-r {
414
+ --_scroll-fade-size-e: var(--scroll-fade-e-size, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
415
+ --scroll-fade-mask: linear-gradient(to right, #000 0, #000 calc(100% - var(--scroll-fade-e, 0px)), transparent 100%);
416
+ -webkit-mask-image: var(--scroll-fade-mask);
417
+ mask-image: var(--scroll-fade-mask);
418
+ -webkit-mask-composite: source-in;
419
+ mask-composite: intersect;
420
+ -webkit-mask-repeat: no-repeat;
421
+ mask-repeat: no-repeat;
422
+
423
+ @supports (animation-timeline: scroll()) {
424
+ animation: scroll-fade-reveal-e 1ms ease-in-out;
425
+ animation-timeline: scroll(self x);
426
+ animation-range: calc(100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24))) 100%;
427
+ animation-fill-mode: both;
428
+ }
429
+
430
+ @supports not (animation-timeline: scroll()) {
431
+ --scroll-fade-e: var(--_scroll-fade-size-e);
432
+ }
433
+ }
434
+
435
+ @utility scroll-fade-s {
436
+ --_scroll-fade-size-s: var(--scroll-fade-s-size, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
437
+ --scroll-fade-mask: linear-gradient(to right, transparent 0, #000 var(--scroll-fade-s, 0px), #000 100%);
438
+ &:where([dir="rtl"], [dir="rtl"] *) {
439
+ --scroll-fade-mask: linear-gradient(to left, transparent 0, #000 var(--scroll-fade-s, 0px), #000 100%);
440
+ }
441
+ -webkit-mask-image: var(--scroll-fade-mask);
442
+ mask-image: var(--scroll-fade-mask);
443
+ -webkit-mask-composite: source-in;
444
+ mask-composite: intersect;
445
+ -webkit-mask-repeat: no-repeat;
446
+ mask-repeat: no-repeat;
447
+
448
+ @supports (animation-timeline: scroll()) {
449
+ animation: scroll-fade-reveal-s 1ms ease-in-out;
450
+ animation-timeline: scroll(self inline);
451
+ animation-range: 0 var(--scroll-fade-reveal, calc(var(--spacing) * 24));
452
+ animation-fill-mode: both;
453
+ }
454
+
455
+ @supports not (animation-timeline: scroll()) {
456
+ --scroll-fade-s: var(--_scroll-fade-size-s);
457
+ }
458
+ }
459
+
460
+ @utility scroll-fade-e {
461
+ --_scroll-fade-size-e: var(--scroll-fade-e-size, var(--scroll-fade-size, min(12%, calc(var(--spacing) * 10))));
462
+ --scroll-fade-mask: linear-gradient(to right, #000 0, #000 calc(100% - var(--scroll-fade-e, 0px)), transparent 100%);
463
+ &:where([dir="rtl"], [dir="rtl"] *) {
464
+ --scroll-fade-mask: linear-gradient(to left, #000 0, #000 calc(100% - var(--scroll-fade-e, 0px)), transparent 100%);
465
+ }
466
+ -webkit-mask-image: var(--scroll-fade-mask);
467
+ mask-image: var(--scroll-fade-mask);
468
+ -webkit-mask-composite: source-in;
469
+ mask-composite: intersect;
470
+ -webkit-mask-repeat: no-repeat;
471
+ mask-repeat: no-repeat;
472
+
473
+ @supports (animation-timeline: scroll()) {
474
+ animation: scroll-fade-reveal-e 1ms ease-in-out;
475
+ animation-timeline: scroll(self inline);
476
+ animation-range: calc(100% - var(--scroll-fade-reveal, calc(var(--spacing) * 24))) 100%;
477
+ animation-fill-mode: both;
478
+ }
479
+
480
+ @supports not (animation-timeline: scroll()) {
481
+ --scroll-fade-e: var(--_scroll-fade-size-e);
482
+ }
483
+ }
484
+
485
+ @utility scroll-fade-* {
486
+ --scroll-fade-size: calc(var(--spacing) * --value(integer));
487
+ --scroll-fade-size: --value([length], [percentage]);
488
+ }
489
+
490
+ @utility scroll-fade-t-* {
491
+ --scroll-fade-t-size: calc(var(--spacing) * --value(integer));
492
+ --scroll-fade-t-size: --value([length], [percentage]);
493
+ }
494
+
495
+ @utility scroll-fade-b-* {
496
+ --scroll-fade-b-size: calc(var(--spacing) * --value(integer));
497
+ --scroll-fade-b-size: --value([length], [percentage]);
498
+ }
499
+
500
+ @utility scroll-fade-s-* {
501
+ --scroll-fade-s-size: calc(var(--spacing) * --value(integer));
502
+ --scroll-fade-s-size: --value([length], [percentage]);
503
+ }
504
+
505
+ @utility scroll-fade-e-* {
506
+ --scroll-fade-e-size: calc(var(--spacing) * --value(integer));
507
+ --scroll-fade-e-size: --value([length], [percentage]);
508
+ }
509
+
510
+ @utility scroll-fade-none {
511
+ --scroll-fade-mask: none;
512
+ }
513
+
514
+ /* shimmer */
515
+ @property --shimmer-angle {
516
+ syntax: "<angle>";
517
+ inherits: true;
518
+ initial-value: 20deg;
519
+ }
520
+ @property --shimmer-image {
521
+ syntax: "*";
522
+ inherits: false;
523
+ }
524
+ @property --shimmer-text-fill {
525
+ syntax: "*";
526
+ inherits: false;
527
+ }
528
+
529
+ @utility shimmer {
530
+ --_spread: var(--shimmer-spread, calc(3ch + 40px));
531
+ --_base: currentColor;
532
+ --_highlight: var(--shimmer-color, oklch(from currentColor l c h / calc(alpha* 0.2)));
533
+
534
+ background-image: var(
535
+ --shimmer-image,
536
+ linear-gradient(
537
+ calc(90deg + var(--shimmer-angle)),
538
+ var(--_base) calc(50% - var(--_spread)),
539
+ color-mix(in oklch, var(--_highlight), var(--_base) 50%) calc(50% - var(--_spread) * 0.5),
540
+ var(--_highlight) 50%,
541
+ color-mix(in oklch, var(--_highlight), var(--_base) 50%) calc(50% + var(--_spread) * 0.5),
542
+ var(--_base) calc(50% + var(--_spread))
543
+ )
544
+ );
545
+ background-repeat: no-repeat;
546
+ background-size: calc(200% + var(--_spread) * 2) 100%;
547
+ background-position: 0 0;
548
+ background-clip: text;
549
+ -webkit-background-clip: text;
550
+ -webkit-text-fill-color: var(--shimmer-text-fill, transparent);
551
+ animation: tw-shimmer var(--shimmer-duration, 2s) linear infinite;
552
+
553
+ @variant dark {
554
+ --_highlight: var(--shimmer-color, oklch(from currentColor max(0.8, calc(l + 0.4)) c h / calc(alpha + 0.4)));
555
+ }
556
+
557
+ &:where([dir="rtl"], [dir="rtl"] *) {
558
+ animation-direction: reverse;
559
+ }
560
+ }
561
+
562
+ @utility shimmer-once {
563
+ animation-iteration-count: 1;
564
+ }
565
+
566
+ @utility shimmer-reverse {
567
+ animation-direction: reverse;
568
+ }
569
+
570
+ @utility shimmer-none {
571
+ --shimmer-image: none;
572
+ --shimmer-text-fill: currentColor;
573
+ }
574
+
575
+ @utility shimmer-color-* {
576
+ --shimmer-color: --value(--color, [color]);
577
+ --shimmer-color: color-mix(in oklch, --value(--color, [color]) calc(--modifier(integer) * 1%), transparent);
578
+ }
579
+
580
+ @utility shimmer-duration-* {
581
+ --shimmer-duration: calc(--value(integer) * 1ms);
582
+ }
583
+
584
+ @utility shimmer-spread-* {
585
+ --shimmer-spread: calc(var(--spacing) * --value(integer));
586
+ --shimmer-spread: --value([length], [percentage]);
587
+ }
588
+
589
+ @utility shimmer-angle-* {
590
+ --shimmer-angle: calc(--value(integer) * 1deg);
591
+ }
592
+
593
+ @media (prefers-reduced-motion: reduce) {
594
+ .shimmer {
595
+ animation: none;
596
+ background-image: none;
597
+ -webkit-text-fill-color: currentColor;
598
+ }
599
+ }
600
+
601
+ :root {
602
+ --background: oklch(1 0 0);
603
+ --foreground: oklch(0.145 0 0);
604
+ --card: oklch(1 0 0);
605
+ --card-foreground: oklch(0.145 0 0);
606
+ --popover: oklch(1 0 0);
607
+ --popover-foreground: oklch(0.145 0 0);
608
+ --primary: oklch(0.205 0 0);
609
+ --primary-foreground: oklch(0.985 0 0);
610
+ --secondary: oklch(0.97 0 0);
611
+ --secondary-foreground: oklch(0.205 0 0);
612
+ --muted: oklch(0.97 0 0);
613
+ --muted-foreground: oklch(0.556 0 0);
614
+ --accent: oklch(0.97 0 0);
615
+ --accent-foreground: oklch(0.205 0 0);
616
+ --destructive: oklch(0.577 0.245 27.325);
617
+ --border: oklch(0.922 0 0);
618
+ --input: oklch(0.922 0 0);
619
+ --ring: oklch(0.708 0 0);
620
+ --chart-1: oklch(0.87 0 0);
621
+ --chart-2: oklch(0.556 0 0);
622
+ --chart-3: oklch(0.439 0 0);
623
+ --chart-4: oklch(0.371 0 0);
624
+ --chart-5: oklch(0.269 0 0);
625
+ --radius: 0.625rem;
626
+ --sidebar: oklch(0.985 0 0);
627
+ --sidebar-foreground: oklch(0.145 0 0);
628
+ --sidebar-primary: oklch(0.205 0 0);
629
+ --sidebar-primary-foreground: oklch(0.985 0 0);
630
+ --sidebar-accent: oklch(0.97 0 0);
631
+ --sidebar-accent-foreground: oklch(0.205 0 0);
632
+ --sidebar-border: oklch(0.922 0 0);
633
+ --sidebar-ring: oklch(0.708 0 0);
634
+ }
635
+
636
+ .dark {
637
+ --background: oklch(0.145 0 0);
638
+ --foreground: oklch(0.985 0 0);
639
+ --card: oklch(0.205 0 0);
640
+ --card-foreground: oklch(0.985 0 0);
641
+ --popover: oklch(0.205 0 0);
642
+ --popover-foreground: oklch(0.985 0 0);
643
+ --primary: oklch(0.922 0 0);
644
+ --primary-foreground: oklch(0.205 0 0);
645
+ --secondary: oklch(0.269 0 0);
646
+ --secondary-foreground: oklch(0.985 0 0);
647
+ --muted: oklch(0.269 0 0);
648
+ --muted-foreground: oklch(0.708 0 0);
649
+ --accent: oklch(0.269 0 0);
650
+ --accent-foreground: oklch(0.985 0 0);
651
+ --destructive: oklch(0.704 0.191 22.216);
652
+ --border: oklch(1 0 0 / 10%);
653
+ --input: oklch(1 0 0 / 15%);
654
+ --ring: oklch(0.556 0 0);
655
+ --chart-1: oklch(0.87 0 0);
656
+ --chart-2: oklch(0.556 0 0);
657
+ --chart-3: oklch(0.439 0 0);
658
+ --chart-4: oklch(0.371 0 0);
659
+ --chart-5: oklch(0.269 0 0);
660
+ --sidebar: oklch(0.205 0 0);
661
+ --sidebar-foreground: oklch(0.985 0 0);
662
+ --sidebar-primary: oklch(0.488 0.243 264.376);
663
+ --sidebar-primary-foreground: oklch(0.985 0 0);
664
+ --sidebar-accent: oklch(0.269 0 0);
665
+ --sidebar-accent-foreground: oklch(0.985 0 0);
666
+ --sidebar-border: oklch(1 0 0 / 10%);
667
+ --sidebar-ring: oklch(0.556 0 0);
668
+ }
669
+
670
+ @layer base {
671
+ * {
672
+ @apply border-border outline-ring/50;
673
+ }
674
+ body {
675
+ @apply bg-background text-foreground;
676
+ }
677
+ html {
678
+ @apply font-sans;
679
+ }
680
+ }