@shadow-js/ui 0.0.0-stage → 1.0.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 (190) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/LICENSE +21 -0
  3. package/README.md +598 -2
  4. package/dist/cli.mjs +2293 -0
  5. package/dist/dev/cli/schema.d.ts +73 -0
  6. package/dist/dev/index.d.ts +6 -0
  7. package/dist/dev/index.js +5 -0
  8. package/dist/dev/locales/ar.d.ts +141 -0
  9. package/dist/dev/locales/ar.js +128 -0
  10. package/dist/dev/locales/ar.js.map +1 -0
  11. package/dist/dev/locales/en.d.ts +141 -0
  12. package/dist/dev/locales/en.js +128 -0
  13. package/dist/dev/locales/en.js.map +1 -0
  14. package/dist/dev/registry/utils/utils.d.ts +29 -0
  15. package/dist/dev/registry/utils/utils.js +27 -0
  16. package/dist/dev/registry/utils/utils.js.map +1 -0
  17. package/dist/dev/theme/theme-logic.d.ts +187 -0
  18. package/dist/dev/theme/theme-logic.js +184 -0
  19. package/dist/dev/theme/theme-logic.js.map +1 -0
  20. package/dist/dev/theme/theme-provider.d.ts +90 -0
  21. package/dist/dev/theme/theme-provider.js +150 -0
  22. package/dist/dev/theme/theme-provider.js.map +1 -0
  23. package/dist/prod/index.js +1 -0
  24. package/dist/prod/locales/ar.js +2 -0
  25. package/dist/prod/locales/ar.js.map +1 -0
  26. package/dist/prod/locales/en.js +2 -0
  27. package/dist/prod/locales/en.js.map +1 -0
  28. package/dist/prod/registry/utils/utils.js +2 -0
  29. package/dist/prod/registry/utils/utils.js.map +1 -0
  30. package/dist/prod/theme/theme-logic.js +2 -0
  31. package/dist/prod/theme/theme-logic.js.map +1 -0
  32. package/dist/prod/theme/theme-provider.js +2 -0
  33. package/dist/prod/theme/theme-provider.js.map +1 -0
  34. package/package.json +102 -4
  35. package/registry/accordion/accordion.tsx +210 -0
  36. package/registry/accordion/item.json +4 -0
  37. package/registry/alert/alert.tsx +200 -0
  38. package/registry/alert/item.json +4 -0
  39. package/registry/alert-dialog/alert-dialog.tsx +530 -0
  40. package/registry/alert-dialog/item.json +4 -0
  41. package/registry/aspect-ratio/aspect-ratio.tsx +71 -0
  42. package/registry/aspect-ratio/item.json +4 -0
  43. package/registry/attachment/attachment.tsx +459 -0
  44. package/registry/attachment/item.json +4 -0
  45. package/registry/avatar/avatar.tsx +385 -0
  46. package/registry/avatar/item.json +4 -0
  47. package/registry/badge/badge.tsx +108 -0
  48. package/registry/badge/item.json +4 -0
  49. package/registry/breadcrumb/breadcrumb.tsx +354 -0
  50. package/registry/breadcrumb/item.json +4 -0
  51. package/registry/bubble/bubble.tsx +260 -0
  52. package/registry/bubble/item.json +4 -0
  53. package/registry/button/button.tsx +125 -0
  54. package/registry/button/item.json +4 -0
  55. package/registry/button-group/button-group.tsx +189 -0
  56. package/registry/button-group/item.json +4 -0
  57. package/registry/calendar/calendar.tsx +348 -0
  58. package/registry/calendar/item.json +4 -0
  59. package/registry/card/card.tsx +311 -0
  60. package/registry/card/item.json +4 -0
  61. package/registry/carousel/carousel.tsx +851 -0
  62. package/registry/carousel/item.json +4 -0
  63. package/registry/chart/chart.tsx +1956 -0
  64. package/registry/chart/item.json +4 -0
  65. package/registry/chart-scale/chart-scale.ts +670 -0
  66. package/registry/chart-scale/item.json +5 -0
  67. package/registry/checkbox/checkbox.tsx +79 -0
  68. package/registry/checkbox/item.json +4 -0
  69. package/registry/code-block/code-block.tsx +470 -0
  70. package/registry/code-block/item.json +4 -0
  71. package/registry/collapsible/collapsible.tsx +117 -0
  72. package/registry/collapsible/item.json +4 -0
  73. package/registry/combobox/combobox.tsx +977 -0
  74. package/registry/combobox/item.json +4 -0
  75. package/registry/command/command.tsx +757 -0
  76. package/registry/command/item.json +4 -0
  77. package/registry/context-menu/context-menu.tsx +697 -0
  78. package/registry/context-menu/item.json +4 -0
  79. package/registry/data-table/data-table.tsx +437 -0
  80. package/registry/data-table/item.json +4 -0
  81. package/registry/date-picker/date-picker.tsx +349 -0
  82. package/registry/date-picker/item.json +4 -0
  83. package/registry/dialog/dialog.tsx +412 -0
  84. package/registry/dialog/item.json +4 -0
  85. package/registry/direction/direction.tsx +88 -0
  86. package/registry/direction/item.json +4 -0
  87. package/registry/drawer/drawer.tsx +787 -0
  88. package/registry/drawer/item.json +4 -0
  89. package/registry/dropdown-menu/dropdown-menu.tsx +692 -0
  90. package/registry/dropdown-menu/item.json +4 -0
  91. package/registry/empty/empty.tsx +240 -0
  92. package/registry/empty/item.json +4 -0
  93. package/registry/field/field.tsx +624 -0
  94. package/registry/field/item.json +4 -0
  95. package/registry/form/form.tsx +1112 -0
  96. package/registry/form/item.json +4 -0
  97. package/registry/hover-card/hover-card.tsx +144 -0
  98. package/registry/hover-card/item.json +4 -0
  99. package/registry/icons/icons.tsx +1691 -0
  100. package/registry/icons/item.json +4 -0
  101. package/registry/input/input.tsx +43 -0
  102. package/registry/input/item.json +4 -0
  103. package/registry/input-group/input-group.tsx +315 -0
  104. package/registry/input-group/item.json +4 -0
  105. package/registry/input-otp/input-otp.tsx +329 -0
  106. package/registry/input-otp/item.json +4 -0
  107. package/registry/item/item.json +4 -0
  108. package/registry/item/item.tsx +439 -0
  109. package/registry/kbd/item.json +4 -0
  110. package/registry/kbd/kbd.tsx +65 -0
  111. package/registry/label/item.json +4 -0
  112. package/registry/label/label.tsx +60 -0
  113. package/registry/marker/item.json +4 -0
  114. package/registry/marker/marker.tsx +175 -0
  115. package/registry/menubar/item.json +4 -0
  116. package/registry/menubar/menubar.tsx +694 -0
  117. package/registry/message/item.json +4 -0
  118. package/registry/message/message.tsx +280 -0
  119. package/registry/message-scroller/item.json +4 -0
  120. package/registry/message-scroller/message-scroller.tsx +262 -0
  121. package/registry/native-select/item.json +4 -0
  122. package/registry/native-select/native-select.tsx +113 -0
  123. package/registry/navigation-menu/item.json +4 -0
  124. package/registry/navigation-menu/navigation-menu.tsx +362 -0
  125. package/registry/pagination/item.json +4 -0
  126. package/registry/pagination/pagination.tsx +460 -0
  127. package/registry/password-input/item.json +5 -0
  128. package/registry/password-input/password-input.tsx +494 -0
  129. package/registry/popover/item.json +4 -0
  130. package/registry/popover/popover.tsx +284 -0
  131. package/registry/progress/item.json +4 -0
  132. package/registry/progress/progress.tsx +190 -0
  133. package/registry/questionnaire/item.json +4 -0
  134. package/registry/questionnaire/questionnaire.tsx +569 -0
  135. package/registry/radio-group/item.json +4 -0
  136. package/registry/radio-group/radio-group.tsx +101 -0
  137. package/registry/resizable/item.json +4 -0
  138. package/registry/resizable/resizable.tsx +455 -0
  139. package/registry/scroll-area/item.json +4 -0
  140. package/registry/scroll-area/scroll-area.tsx +149 -0
  141. package/registry/select/item.json +4 -0
  142. package/registry/select/select.tsx +571 -0
  143. package/registry/separator/item.json +4 -0
  144. package/registry/separator/separator.tsx +52 -0
  145. package/registry/sheet/item.json +4 -0
  146. package/registry/sheet/sheet.tsx +476 -0
  147. package/registry/sidebar/item.json +4 -0
  148. package/registry/sidebar/sidebar.tsx +1870 -0
  149. package/registry/skeleton/item.json +4 -0
  150. package/registry/skeleton/skeleton.tsx +47 -0
  151. package/registry/slider/item.json +4 -0
  152. package/registry/slider/slider.tsx +149 -0
  153. package/registry/spinner/item.json +4 -0
  154. package/registry/spinner/spinner.tsx +51 -0
  155. package/registry/switch/item.json +4 -0
  156. package/registry/switch/switch.tsx +93 -0
  157. package/registry/table/item.json +4 -0
  158. package/registry/table/table.tsx +373 -0
  159. package/registry/tabs/item.json +4 -0
  160. package/registry/tabs/tabs.tsx +209 -0
  161. package/registry/textarea/item.json +4 -0
  162. package/registry/textarea/textarea.tsx +51 -0
  163. package/registry/toast/item.json +4 -0
  164. package/registry/toast/toast.tsx +949 -0
  165. package/registry/toggle/item.json +4 -0
  166. package/registry/toggle/toggle.tsx +110 -0
  167. package/registry/toggle-group/item.json +4 -0
  168. package/registry/toggle-group/toggle-group.tsx +189 -0
  169. package/registry/tooltip/item.json +4 -0
  170. package/registry/tooltip/tooltip.tsx +169 -0
  171. package/registry/trace/item.json +4 -0
  172. package/registry/trace/trace.tsx +356 -0
  173. package/registry/ui-strings/item.json +5 -0
  174. package/registry/ui-strings/ui-strings.tsx +454 -0
  175. package/registry/use-highlighted-code/item.json +5 -0
  176. package/registry/use-highlighted-code/use-highlighted-code.tsx +145 -0
  177. package/registry/use-mobile/item.json +5 -0
  178. package/registry/use-mobile/use-mobile.ts +46 -0
  179. package/registry/utils/item.json +5 -0
  180. package/registry/utils/utils.ts +38 -0
  181. package/registry.json +3274 -0
  182. package/styles/animations.css +321 -0
  183. package/styles/theme-core.css +55 -0
  184. package/styles/theme.css +12 -0
  185. package/styles/themes/gray.css +69 -0
  186. package/styles/themes/neutral.css +69 -0
  187. package/styles/themes/slate.css +69 -0
  188. package/styles/themes/stone.css +69 -0
  189. package/styles/themes/zinc.css +69 -0
  190. package/styles/typeset.css +251 -0
@@ -0,0 +1,321 @@
1
+ /*
2
+ * @shadow-js/ui animations: the small subset of tw-animate-css the components use, so no extra
3
+ * package is needed. `data-[state=open]:animate-in data-[state=closed]:animate-out` plus
4
+ * `fade-*`, `zoom-*` and `slide-*` modifiers drive every overlay; `animate-accordion-*` drive
5
+ * the accordion and collapsible. Reduced motion switches all of it off.
6
+ */
7
+
8
+ @theme inline {
9
+ --animate-accordion-down: accordion-down 0.2s ease-out;
10
+ --animate-accordion-up: accordion-up 0.2s ease-out;
11
+ --animate-collapsible-down: collapsible-down 0.2s ease-out;
12
+ --animate-collapsible-up: collapsible-up 0.2s ease-out;
13
+
14
+ @keyframes accordion-down {
15
+ from {
16
+ height: 0;
17
+ }
18
+ to {
19
+ height: var(--primitives-accordion-content-height);
20
+ }
21
+ }
22
+ @keyframes accordion-up {
23
+ from {
24
+ height: var(--primitives-accordion-content-height);
25
+ }
26
+ to {
27
+ height: 0;
28
+ }
29
+ }
30
+ @keyframes collapsible-down {
31
+ from {
32
+ height: 0;
33
+ }
34
+ to {
35
+ height: var(--primitives-collapsible-content-height);
36
+ }
37
+ }
38
+ @keyframes collapsible-up {
39
+ from {
40
+ height: var(--primitives-collapsible-content-height);
41
+ }
42
+ to {
43
+ height: 0;
44
+ }
45
+ }
46
+ }
47
+
48
+ @keyframes enter {
49
+ from {
50
+ opacity: var(--tw-enter-opacity, 1);
51
+ transform: translate3d(var(--tw-enter-translate-x, 0), var(--tw-enter-translate-y, 0), 0)
52
+ scale3d(var(--tw-enter-scale, 1), var(--tw-enter-scale, 1), var(--tw-enter-scale, 1));
53
+ }
54
+ }
55
+ @keyframes exit {
56
+ to {
57
+ opacity: var(--tw-exit-opacity, 1);
58
+ transform: translate3d(var(--tw-exit-translate-x, 0), var(--tw-exit-translate-y, 0), 0)
59
+ scale3d(var(--tw-exit-scale, 1), var(--tw-exit-scale, 1), var(--tw-exit-scale, 1));
60
+ }
61
+ }
62
+
63
+ /*
64
+ * `backwards`, not `both`: a forwards fill keeps `transform` animated (an identity matrix) for as
65
+ * long as the element lives, which makes it the containing block of its `position: fixed`
66
+ * descendants. A submenu inside a scrolling menu was then clipped by that menu's overflow.
67
+ */
68
+ @utility animate-in {
69
+ animation-name: enter;
70
+ animation-duration: var(--tw-animation-duration, var(--tw-duration, 150ms));
71
+ animation-timing-function: var(--tw-ease, ease);
72
+ animation-fill-mode: backwards;
73
+ }
74
+
75
+ @utility animate-out {
76
+ animation-name: exit;
77
+ animation-duration: var(--tw-animation-duration, var(--tw-duration, 150ms));
78
+ animation-timing-function: var(--tw-ease, ease);
79
+ animation-fill-mode: both;
80
+ }
81
+
82
+ @utility fade-in {
83
+ --tw-enter-opacity: 0;
84
+ }
85
+ @utility fade-in-* {
86
+ --tw-enter-opacity: calc(--value(integer) / 100);
87
+ }
88
+ @utility fade-out {
89
+ --tw-exit-opacity: 0;
90
+ }
91
+ @utility fade-out-* {
92
+ --tw-exit-opacity: calc(--value(integer) / 100);
93
+ }
94
+
95
+ @utility zoom-in {
96
+ --tw-enter-scale: 0;
97
+ }
98
+ @utility zoom-in-* {
99
+ --tw-enter-scale: calc(--value(integer) / 100);
100
+ }
101
+ @utility zoom-out {
102
+ --tw-exit-scale: 0;
103
+ }
104
+ @utility zoom-out-* {
105
+ --tw-exit-scale: calc(--value(integer) / 100);
106
+ }
107
+
108
+ @utility slide-in-from-top {
109
+ --tw-enter-translate-y: -100%;
110
+ }
111
+ @utility slide-in-from-top-* {
112
+ --tw-enter-translate-y: calc(--spacing(--value(integer)) * -1);
113
+ }
114
+ @utility slide-in-from-bottom {
115
+ --tw-enter-translate-y: 100%;
116
+ }
117
+ @utility slide-in-from-bottom-* {
118
+ --tw-enter-translate-y: --spacing(--value(integer));
119
+ }
120
+ @utility slide-in-from-left {
121
+ --tw-enter-translate-x: -100%;
122
+ }
123
+ @utility slide-in-from-left-* {
124
+ --tw-enter-translate-x: calc(--spacing(--value(integer)) * -1);
125
+ }
126
+ @utility slide-in-from-right {
127
+ --tw-enter-translate-x: 100%;
128
+ }
129
+ @utility slide-in-from-right-* {
130
+ --tw-enter-translate-x: --spacing(--value(integer));
131
+ }
132
+ @utility slide-out-to-top {
133
+ --tw-exit-translate-y: -100%;
134
+ }
135
+ @utility slide-out-to-top-* {
136
+ --tw-exit-translate-y: calc(--spacing(--value(integer)) * -1);
137
+ }
138
+ @utility slide-out-to-bottom {
139
+ --tw-exit-translate-y: 100%;
140
+ }
141
+ @utility slide-out-to-bottom-* {
142
+ --tw-exit-translate-y: --spacing(--value(integer));
143
+ }
144
+ @utility slide-out-to-left {
145
+ --tw-exit-translate-x: -100%;
146
+ }
147
+ @utility slide-out-to-left-* {
148
+ --tw-exit-translate-x: calc(--spacing(--value(integer)) * -1);
149
+ }
150
+ @utility slide-out-to-right {
151
+ --tw-exit-translate-x: 100%;
152
+ }
153
+ @utility slide-out-to-right-* {
154
+ --tw-exit-translate-x: --spacing(--value(integer));
155
+ }
156
+
157
+ /* Reduced motion: overlays appear and disappear at once. */
158
+ @media (prefers-reduced-motion: reduce) {
159
+ .animate-in,
160
+ .animate-out,
161
+ [class*="animate-accordion-"],
162
+ [class*="animate-collapsible-"] {
163
+ animation-duration: 0.01ms !important;
164
+ animation-iteration-count: 1 !important;
165
+ }
166
+ }
167
+
168
+ /* progress: the indeterminate bar sweeps along the track (margin-inline-start keeps it RTL-safe). */
169
+ @theme inline {
170
+ --animate-progress-indeterminate: progress-indeterminate 1.5s ease-in-out infinite;
171
+
172
+ @keyframes progress-indeterminate {
173
+ from {
174
+ margin-inline-start: -40%;
175
+ }
176
+ to {
177
+ margin-inline-start: 100%;
178
+ }
179
+ }
180
+ }
181
+
182
+ /* chart: lines draw in, bars rise and slices fade in; the components add motion-reduce:animate-none. */
183
+ @theme inline {
184
+ --animate-chart-draw: chart-draw 0.9s ease-out both;
185
+ --animate-chart-rise: chart-rise 0.6s ease-out both;
186
+ --animate-chart-fade: chart-fade 0.6s ease-out both;
187
+
188
+ @keyframes chart-draw {
189
+ from {
190
+ stroke-dashoffset: 1;
191
+ }
192
+ to {
193
+ stroke-dashoffset: 0;
194
+ }
195
+ }
196
+
197
+ @keyframes chart-rise {
198
+ from {
199
+ transform: scaleY(0);
200
+ }
201
+ to {
202
+ transform: scaleY(1);
203
+ }
204
+ }
205
+
206
+ @keyframes chart-fade {
207
+ from {
208
+ opacity: 0;
209
+ }
210
+ to {
211
+ opacity: 1;
212
+ }
213
+ }
214
+ }
215
+
216
+ /*
217
+ * shimmer and scroll-fade: two utilities the conversation components use (attachment, marker, trace).
218
+ *
219
+ * `shimmer` sweeps a highlight across text that is still arriving (a streaming title, "Thinking...").
220
+ * `scroll-fade-y` and `scroll-fade-x` fade the edges of a scroll container toward the side that has
221
+ * more to read: each fade grows from nothing as you scroll away from that edge, driven by the
222
+ * scroll position itself (CSS scroll-driven animation, which follows the reader's hand and is not
223
+ * motion of its own), with no script. Where the browser has no scroll-driven
224
+ * animation, or the content does not overflow, nothing is faded. `--scroll-fade-size` sets how far the fade reaches.
225
+ */
226
+ @property --scroll-fade-start {
227
+ syntax: "<length>";
228
+ inherits: false;
229
+ initial-value: 0px;
230
+ }
231
+
232
+ @property --scroll-fade-end {
233
+ syntax: "<length>";
234
+ inherits: false;
235
+ initial-value: 0px;
236
+ }
237
+
238
+ @keyframes shimmer {
239
+ from {
240
+ background-position: 100% 0;
241
+ }
242
+ to {
243
+ background-position: -100% 0;
244
+ }
245
+ }
246
+
247
+ @keyframes scroll-fade {
248
+ 0% {
249
+ --scroll-fade-start: 0px;
250
+ --scroll-fade-end: var(--scroll-fade-size, 1.5rem);
251
+ }
252
+ 5% {
253
+ --scroll-fade-start: var(--scroll-fade-size, 1.5rem);
254
+ }
255
+ 95% {
256
+ --scroll-fade-end: var(--scroll-fade-size, 1.5rem);
257
+ }
258
+ 100% {
259
+ --scroll-fade-start: var(--scroll-fade-size, 1.5rem);
260
+ --scroll-fade-end: 0px;
261
+ }
262
+ }
263
+
264
+ @utility shimmer {
265
+ color: transparent;
266
+ background-image: linear-gradient(
267
+ 90deg,
268
+ var(--muted-foreground) 0%,
269
+ var(--muted-foreground) 35%,
270
+ var(--foreground) 50%,
271
+ var(--muted-foreground) 65%,
272
+ var(--muted-foreground) 100%
273
+ );
274
+ background-size: 200% 100%;
275
+ background-clip: text;
276
+ -webkit-background-clip: text;
277
+ animation: shimmer 2s linear infinite;
278
+ @media (prefers-reduced-motion: reduce) {
279
+ animation: none;
280
+ color: var(--muted-foreground);
281
+ background-image: none;
282
+ }
283
+ @media (forced-colors: active) {
284
+ animation: none;
285
+ color: inherit;
286
+ background-image: none;
287
+ }
288
+ }
289
+
290
+ @utility scroll-fade-y {
291
+ mask-image: linear-gradient(
292
+ to bottom,
293
+ transparent,
294
+ #000 var(--scroll-fade-start),
295
+ #000 calc(100% - var(--scroll-fade-end)),
296
+ transparent
297
+ );
298
+ animation: scroll-fade linear both;
299
+ animation-timeline: scroll(self block);
300
+ }
301
+
302
+ @utility scroll-fade-x {
303
+ mask-image: linear-gradient(
304
+ to right,
305
+ transparent,
306
+ #000 var(--scroll-fade-start),
307
+ #000 calc(100% - var(--scroll-fade-end)),
308
+ transparent
309
+ );
310
+ animation: scroll-fade linear both;
311
+ animation-timeline: scroll(self inline);
312
+ &:dir(rtl) {
313
+ mask-image: linear-gradient(
314
+ to left,
315
+ transparent,
316
+ #000 var(--scroll-fade-start),
317
+ #000 calc(100% - var(--scroll-fade-end)),
318
+ transparent
319
+ );
320
+ }
321
+ }
@@ -0,0 +1,55 @@
1
+ /*
2
+ * @shadow-js/ui theme core: the dark variant, the Tailwind v4 token mapping and the base layer.
3
+ * The color values live in themes/<base>.css (neutral, zinc, slate, stone, gray).
4
+ */
5
+
6
+ /* Dark mode is the `.dark` class on <html> (see ThemeProvider / themeScript). */
7
+ @custom-variant dark (&:is(.dark, .dark *));
8
+
9
+ @theme inline {
10
+ --color-background: var(--background);
11
+ --color-foreground: var(--foreground);
12
+ --color-card: var(--card);
13
+ --color-card-foreground: var(--card-foreground);
14
+ --color-popover: var(--popover);
15
+ --color-popover-foreground: var(--popover-foreground);
16
+ --color-primary: var(--primary);
17
+ --color-primary-foreground: var(--primary-foreground);
18
+ --color-secondary: var(--secondary);
19
+ --color-secondary-foreground: var(--secondary-foreground);
20
+ --color-muted: var(--muted);
21
+ --color-muted-foreground: var(--muted-foreground);
22
+ --color-accent: var(--accent);
23
+ --color-accent-foreground: var(--accent-foreground);
24
+ --color-destructive: var(--destructive);
25
+ --color-border: var(--border);
26
+ --color-input: var(--input);
27
+ --color-ring: var(--ring);
28
+ --color-chart-1: var(--chart-1);
29
+ --color-chart-2: var(--chart-2);
30
+ --color-chart-3: var(--chart-3);
31
+ --color-chart-4: var(--chart-4);
32
+ --color-chart-5: var(--chart-5);
33
+ --color-sidebar: var(--sidebar);
34
+ --color-sidebar-foreground: var(--sidebar-foreground);
35
+ --color-sidebar-primary: var(--sidebar-primary);
36
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
37
+ --color-sidebar-accent: var(--sidebar-accent);
38
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
39
+ --color-sidebar-border: var(--sidebar-border);
40
+ --color-sidebar-ring: var(--sidebar-ring);
41
+
42
+ --radius-sm: calc(var(--radius) - 4px);
43
+ --radius-md: calc(var(--radius) - 2px);
44
+ --radius-lg: var(--radius);
45
+ --radius-xl: calc(var(--radius) + 4px);
46
+ }
47
+
48
+ @layer base {
49
+ * {
50
+ @apply border-border outline-ring/50;
51
+ }
52
+ body {
53
+ @apply bg-background text-foreground;
54
+ }
55
+ }
@@ -0,0 +1,12 @@
1
+ /*
2
+ * @shadow-js/ui theme: shadcn's neutral base color, the Tailwind v4 token mapping and the base
3
+ * layer. Import it after Tailwind:
4
+ *
5
+ * @import "tailwindcss";
6
+ * @import "@shadow-js/ui/theme.css";
7
+ * @import "@shadow-js/ui/animations.css";
8
+ *
9
+ * For another base color import `@shadow-js/ui/themes/<zinc|slate|stone|gray>.css` after this file.
10
+ */
11
+ @import "./themes/neutral.css";
12
+ @import "./theme-core.css";
@@ -0,0 +1,69 @@
1
+ /* gray base color. Generated by scripts/build-themes.mjs. */
2
+ :root {
3
+ --radius: 0.625rem;
4
+ --background: oklch(1 0 0);
5
+ --foreground: oklch(0.13 0.028 261.692);
6
+ --card: oklch(1 0 0);
7
+ --card-foreground: oklch(0.13 0.028 261.692);
8
+ --popover: oklch(1 0 0);
9
+ --popover-foreground: oklch(0.13 0.028 261.692);
10
+ --primary: oklch(0.21 0.034 264.665);
11
+ --primary-foreground: oklch(0.985 0.002 247.839);
12
+ --secondary: oklch(0.967 0.003 264.542);
13
+ --secondary-foreground: oklch(0.21 0.034 264.665);
14
+ --muted: oklch(0.967 0.003 264.542);
15
+ --muted-foreground: oklch(0.446 0.03 256.802);
16
+ --accent: oklch(0.967 0.003 264.542);
17
+ --accent-foreground: oklch(0.21 0.034 264.665);
18
+ --destructive: oklch(0.546 0.22 27.325);
19
+ --border: oklch(0.928 0.006 264.531);
20
+ --input: oklch(0.928 0.006 264.531);
21
+ --ring: oklch(0.707 0.022 261.325);
22
+ --chart-1: oklch(0.646 0.222 41.116);
23
+ --chart-2: oklch(0.6 0.118 184.704);
24
+ --chart-3: oklch(0.398 0.07 227.392);
25
+ --chart-4: oklch(0.828 0.189 84.429);
26
+ --chart-5: oklch(0.769 0.188 70.08);
27
+ --sidebar: oklch(0.985 0.002 247.839);
28
+ --sidebar-foreground: oklch(0.13 0.028 261.692);
29
+ --sidebar-primary: oklch(0.21 0.034 264.665);
30
+ --sidebar-primary-foreground: oklch(0.985 0.002 247.839);
31
+ --sidebar-accent: oklch(0.967 0.003 264.542);
32
+ --sidebar-accent-foreground: oklch(0.21 0.034 264.665);
33
+ --sidebar-border: oklch(0.928 0.006 264.531);
34
+ --sidebar-ring: oklch(0.707 0.022 261.325);
35
+ }
36
+
37
+ .dark {
38
+ --background: oklch(0.13 0.028 261.692);
39
+ --foreground: oklch(0.985 0.002 247.839);
40
+ --card: oklch(0.21 0.034 264.665);
41
+ --card-foreground: oklch(0.985 0.002 247.839);
42
+ --popover: oklch(0.21 0.034 264.665);
43
+ --popover-foreground: oklch(0.985 0.002 247.839);
44
+ --primary: oklch(0.928 0.006 264.531);
45
+ --primary-foreground: oklch(0.21 0.034 264.665);
46
+ --secondary: oklch(0.278 0.033 256.848);
47
+ --secondary-foreground: oklch(0.985 0.002 247.839);
48
+ --muted: oklch(0.278 0.033 256.848);
49
+ --muted-foreground: oklch(0.707 0.022 261.325);
50
+ --accent: oklch(0.278 0.033 256.848);
51
+ --accent-foreground: oklch(0.985 0.002 247.839);
52
+ --destructive: oklch(0.704 0.191 22.216);
53
+ --border: oklch(1 0 0 / 10%);
54
+ --input: oklch(1 0 0 / 15%);
55
+ --ring: oklch(0.551 0.027 264.364);
56
+ --chart-1: oklch(0.488 0.243 264.376);
57
+ --chart-2: oklch(0.696 0.17 162.48);
58
+ --chart-3: oklch(0.769 0.188 70.08);
59
+ --chart-4: oklch(0.627 0.265 303.9);
60
+ --chart-5: oklch(0.645 0.246 16.439);
61
+ --sidebar: oklch(0.21 0.034 264.665);
62
+ --sidebar-foreground: oklch(0.985 0.002 247.839);
63
+ --sidebar-primary: oklch(0.488 0.243 264.376);
64
+ --sidebar-primary-foreground: oklch(0.985 0.002 247.839);
65
+ --sidebar-accent: oklch(0.278 0.033 256.848);
66
+ --sidebar-accent-foreground: oklch(0.985 0.002 247.839);
67
+ --sidebar-border: oklch(1 0 0 / 10%);
68
+ --sidebar-ring: oklch(0.551 0.027 264.364);
69
+ }
@@ -0,0 +1,69 @@
1
+ /* neutral base color. Generated by scripts/build-themes.mjs. */
2
+ :root {
3
+ --radius: 0.625rem;
4
+ --background: oklch(1 0 0);
5
+ --foreground: oklch(0.145 0 0);
6
+ --card: oklch(1 0 0);
7
+ --card-foreground: oklch(0.145 0 0);
8
+ --popover: oklch(1 0 0);
9
+ --popover-foreground: oklch(0.145 0 0);
10
+ --primary: oklch(0.205 0 0);
11
+ --primary-foreground: oklch(0.985 0 0);
12
+ --secondary: oklch(0.97 0 0);
13
+ --secondary-foreground: oklch(0.205 0 0);
14
+ --muted: oklch(0.97 0 0);
15
+ --muted-foreground: oklch(0.439 0 0);
16
+ --accent: oklch(0.97 0 0);
17
+ --accent-foreground: oklch(0.205 0 0);
18
+ --destructive: oklch(0.546 0.22 27.325);
19
+ --border: oklch(0.922 0 0);
20
+ --input: oklch(0.922 0 0);
21
+ --ring: oklch(0.708 0 0);
22
+ --chart-1: oklch(0.646 0.222 41.116);
23
+ --chart-2: oklch(0.6 0.118 184.704);
24
+ --chart-3: oklch(0.398 0.07 227.392);
25
+ --chart-4: oklch(0.828 0.189 84.429);
26
+ --chart-5: oklch(0.769 0.188 70.08);
27
+ --sidebar: oklch(0.985 0 0);
28
+ --sidebar-foreground: oklch(0.145 0 0);
29
+ --sidebar-primary: oklch(0.205 0 0);
30
+ --sidebar-primary-foreground: oklch(0.985 0 0);
31
+ --sidebar-accent: oklch(0.97 0 0);
32
+ --sidebar-accent-foreground: oklch(0.205 0 0);
33
+ --sidebar-border: oklch(0.922 0 0);
34
+ --sidebar-ring: oklch(0.708 0 0);
35
+ }
36
+
37
+ .dark {
38
+ --background: oklch(0.145 0 0);
39
+ --foreground: oklch(0.985 0 0);
40
+ --card: oklch(0.205 0 0);
41
+ --card-foreground: oklch(0.985 0 0);
42
+ --popover: oklch(0.205 0 0);
43
+ --popover-foreground: oklch(0.985 0 0);
44
+ --primary: oklch(0.922 0 0);
45
+ --primary-foreground: oklch(0.205 0 0);
46
+ --secondary: oklch(0.269 0 0);
47
+ --secondary-foreground: oklch(0.985 0 0);
48
+ --muted: oklch(0.269 0 0);
49
+ --muted-foreground: oklch(0.708 0 0);
50
+ --accent: oklch(0.269 0 0);
51
+ --accent-foreground: oklch(0.985 0 0);
52
+ --destructive: oklch(0.704 0.191 22.216);
53
+ --border: oklch(1 0 0 / 10%);
54
+ --input: oklch(1 0 0 / 15%);
55
+ --ring: oklch(0.556 0 0);
56
+ --chart-1: oklch(0.488 0.243 264.376);
57
+ --chart-2: oklch(0.696 0.17 162.48);
58
+ --chart-3: oklch(0.769 0.188 70.08);
59
+ --chart-4: oklch(0.627 0.265 303.9);
60
+ --chart-5: oklch(0.645 0.246 16.439);
61
+ --sidebar: oklch(0.205 0 0);
62
+ --sidebar-foreground: oklch(0.985 0 0);
63
+ --sidebar-primary: oklch(0.488 0.243 264.376);
64
+ --sidebar-primary-foreground: oklch(0.985 0 0);
65
+ --sidebar-accent: oklch(0.269 0 0);
66
+ --sidebar-accent-foreground: oklch(0.985 0 0);
67
+ --sidebar-border: oklch(1 0 0 / 10%);
68
+ --sidebar-ring: oklch(0.556 0 0);
69
+ }
@@ -0,0 +1,69 @@
1
+ /* slate base color. Generated by scripts/build-themes.mjs. */
2
+ :root {
3
+ --radius: 0.625rem;
4
+ --background: oklch(1 0 0);
5
+ --foreground: oklch(0.129 0.042 264.695);
6
+ --card: oklch(1 0 0);
7
+ --card-foreground: oklch(0.129 0.042 264.695);
8
+ --popover: oklch(1 0 0);
9
+ --popover-foreground: oklch(0.129 0.042 264.695);
10
+ --primary: oklch(0.208 0.042 265.755);
11
+ --primary-foreground: oklch(0.984 0.003 247.858);
12
+ --secondary: oklch(0.968 0.007 247.896);
13
+ --secondary-foreground: oklch(0.208 0.042 265.755);
14
+ --muted: oklch(0.968 0.007 247.896);
15
+ --muted-foreground: oklch(0.446 0.043 257.281);
16
+ --accent: oklch(0.968 0.007 247.896);
17
+ --accent-foreground: oklch(0.208 0.042 265.755);
18
+ --destructive: oklch(0.546 0.22 27.325);
19
+ --border: oklch(0.929 0.013 255.508);
20
+ --input: oklch(0.929 0.013 255.508);
21
+ --ring: oklch(0.704 0.04 256.788);
22
+ --chart-1: oklch(0.646 0.222 41.116);
23
+ --chart-2: oklch(0.6 0.118 184.704);
24
+ --chart-3: oklch(0.398 0.07 227.392);
25
+ --chart-4: oklch(0.828 0.189 84.429);
26
+ --chart-5: oklch(0.769 0.188 70.08);
27
+ --sidebar: oklch(0.984 0.003 247.858);
28
+ --sidebar-foreground: oklch(0.129 0.042 264.695);
29
+ --sidebar-primary: oklch(0.208 0.042 265.755);
30
+ --sidebar-primary-foreground: oklch(0.984 0.003 247.858);
31
+ --sidebar-accent: oklch(0.968 0.007 247.896);
32
+ --sidebar-accent-foreground: oklch(0.208 0.042 265.755);
33
+ --sidebar-border: oklch(0.929 0.013 255.508);
34
+ --sidebar-ring: oklch(0.704 0.04 256.788);
35
+ }
36
+
37
+ .dark {
38
+ --background: oklch(0.129 0.042 264.695);
39
+ --foreground: oklch(0.984 0.003 247.858);
40
+ --card: oklch(0.208 0.042 265.755);
41
+ --card-foreground: oklch(0.984 0.003 247.858);
42
+ --popover: oklch(0.208 0.042 265.755);
43
+ --popover-foreground: oklch(0.984 0.003 247.858);
44
+ --primary: oklch(0.929 0.013 255.508);
45
+ --primary-foreground: oklch(0.208 0.042 265.755);
46
+ --secondary: oklch(0.279 0.041 260.031);
47
+ --secondary-foreground: oklch(0.984 0.003 247.858);
48
+ --muted: oklch(0.279 0.041 260.031);
49
+ --muted-foreground: oklch(0.704 0.04 256.788);
50
+ --accent: oklch(0.279 0.041 260.031);
51
+ --accent-foreground: oklch(0.984 0.003 247.858);
52
+ --destructive: oklch(0.704 0.191 22.216);
53
+ --border: oklch(1 0 0 / 10%);
54
+ --input: oklch(1 0 0 / 15%);
55
+ --ring: oklch(0.554 0.046 257.417);
56
+ --chart-1: oklch(0.488 0.243 264.376);
57
+ --chart-2: oklch(0.696 0.17 162.48);
58
+ --chart-3: oklch(0.769 0.188 70.08);
59
+ --chart-4: oklch(0.627 0.265 303.9);
60
+ --chart-5: oklch(0.645 0.246 16.439);
61
+ --sidebar: oklch(0.208 0.042 265.755);
62
+ --sidebar-foreground: oklch(0.984 0.003 247.858);
63
+ --sidebar-primary: oklch(0.488 0.243 264.376);
64
+ --sidebar-primary-foreground: oklch(0.984 0.003 247.858);
65
+ --sidebar-accent: oklch(0.279 0.041 260.031);
66
+ --sidebar-accent-foreground: oklch(0.984 0.003 247.858);
67
+ --sidebar-border: oklch(1 0 0 / 10%);
68
+ --sidebar-ring: oklch(0.554 0.046 257.417);
69
+ }
@@ -0,0 +1,69 @@
1
+ /* stone base color. Generated by scripts/build-themes.mjs. */
2
+ :root {
3
+ --radius: 0.625rem;
4
+ --background: oklch(1 0 0);
5
+ --foreground: oklch(0.147 0.004 49.25);
6
+ --card: oklch(1 0 0);
7
+ --card-foreground: oklch(0.147 0.004 49.25);
8
+ --popover: oklch(1 0 0);
9
+ --popover-foreground: oklch(0.147 0.004 49.25);
10
+ --primary: oklch(0.216 0.006 56.043);
11
+ --primary-foreground: oklch(0.985 0.001 106.423);
12
+ --secondary: oklch(0.97 0.001 106.424);
13
+ --secondary-foreground: oklch(0.216 0.006 56.043);
14
+ --muted: oklch(0.97 0.001 106.424);
15
+ --muted-foreground: oklch(0.444 0.011 73.639);
16
+ --accent: oklch(0.97 0.001 106.424);
17
+ --accent-foreground: oklch(0.216 0.006 56.043);
18
+ --destructive: oklch(0.546 0.22 27.325);
19
+ --border: oklch(0.923 0.003 48.717);
20
+ --input: oklch(0.923 0.003 48.717);
21
+ --ring: oklch(0.709 0.01 56.259);
22
+ --chart-1: oklch(0.646 0.222 41.116);
23
+ --chart-2: oklch(0.6 0.118 184.704);
24
+ --chart-3: oklch(0.398 0.07 227.392);
25
+ --chart-4: oklch(0.828 0.189 84.429);
26
+ --chart-5: oklch(0.769 0.188 70.08);
27
+ --sidebar: oklch(0.985 0.001 106.423);
28
+ --sidebar-foreground: oklch(0.147 0.004 49.25);
29
+ --sidebar-primary: oklch(0.216 0.006 56.043);
30
+ --sidebar-primary-foreground: oklch(0.985 0.001 106.423);
31
+ --sidebar-accent: oklch(0.97 0.001 106.424);
32
+ --sidebar-accent-foreground: oklch(0.216 0.006 56.043);
33
+ --sidebar-border: oklch(0.923 0.003 48.717);
34
+ --sidebar-ring: oklch(0.709 0.01 56.259);
35
+ }
36
+
37
+ .dark {
38
+ --background: oklch(0.147 0.004 49.25);
39
+ --foreground: oklch(0.985 0.001 106.423);
40
+ --card: oklch(0.216 0.006 56.043);
41
+ --card-foreground: oklch(0.985 0.001 106.423);
42
+ --popover: oklch(0.216 0.006 56.043);
43
+ --popover-foreground: oklch(0.985 0.001 106.423);
44
+ --primary: oklch(0.923 0.003 48.717);
45
+ --primary-foreground: oklch(0.216 0.006 56.043);
46
+ --secondary: oklch(0.268 0.007 34.298);
47
+ --secondary-foreground: oklch(0.985 0.001 106.423);
48
+ --muted: oklch(0.268 0.007 34.298);
49
+ --muted-foreground: oklch(0.709 0.01 56.259);
50
+ --accent: oklch(0.268 0.007 34.298);
51
+ --accent-foreground: oklch(0.985 0.001 106.423);
52
+ --destructive: oklch(0.704 0.191 22.216);
53
+ --border: oklch(1 0 0 / 10%);
54
+ --input: oklch(1 0 0 / 15%);
55
+ --ring: oklch(0.553 0.013 58.071);
56
+ --chart-1: oklch(0.488 0.243 264.376);
57
+ --chart-2: oklch(0.696 0.17 162.48);
58
+ --chart-3: oklch(0.769 0.188 70.08);
59
+ --chart-4: oklch(0.627 0.265 303.9);
60
+ --chart-5: oklch(0.645 0.246 16.439);
61
+ --sidebar: oklch(0.216 0.006 56.043);
62
+ --sidebar-foreground: oklch(0.985 0.001 106.423);
63
+ --sidebar-primary: oklch(0.488 0.243 264.376);
64
+ --sidebar-primary-foreground: oklch(0.985 0.001 106.423);
65
+ --sidebar-accent: oklch(0.268 0.007 34.298);
66
+ --sidebar-accent-foreground: oklch(0.985 0.001 106.423);
67
+ --sidebar-border: oklch(1 0 0 / 10%);
68
+ --sidebar-ring: oklch(0.553 0.013 58.071);
69
+ }