@rock.star/ui 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.
@@ -0,0 +1,509 @@
1
+ @import "tailwindcss";
2
+ @import "tw-animate-css";
3
+ @import "shadcn/tailwind.css";
4
+ @import "goey-toast/styles.css";
5
+ @import "./loader.css";
6
+
7
+ @custom-variant dark (&:is(.dark *));
8
+ @custom-variant standalone (@media (display-mode: standalone));
9
+ @custom-variant native (&:is([data-native-app="true"] *));
10
+ @source "../";
11
+
12
+ @theme inline {
13
+ --color-brand: var(--brand);
14
+ --breakpoint-3xl: 1600px;
15
+ --breakpoint-4xl: 2000px;
16
+ --font-sans: var(--font-sans);
17
+ --font-heading: var(--font-heading);
18
+ --font-mono: var(--font-mono);
19
+ --radius-sm: calc(var(--radius) * 0.6);
20
+ --radius-md: calc(var(--radius) * 0.8);
21
+ --radius-lg: var(--radius);
22
+ --radius-xl: calc(var(--radius) * 1.4);
23
+ --radius-2xl: calc(var(--radius) * 1.8);
24
+ --radius-3xl: calc(var(--radius) * 2.2);
25
+ --radius-4xl: calc(var(--radius) * 2.6);
26
+ --color-background: var(--background);
27
+ --color-foreground: var(--foreground);
28
+ --color-card: var(--card);
29
+ --color-card-foreground: var(--card-foreground);
30
+ --color-popover: var(--popover);
31
+ --color-popover-foreground: var(--popover-foreground);
32
+ --color-primary: var(--primary);
33
+ --color-primary-foreground: var(--primary-foreground);
34
+ --color-secondary: var(--secondary);
35
+ --color-secondary-foreground: var(--secondary-foreground);
36
+ --color-muted: var(--muted);
37
+ --color-muted-foreground: var(--muted-foreground);
38
+ --color-accent: var(--accent);
39
+ --color-accent-foreground: var(--accent-foreground);
40
+ --color-destructive: var(--destructive);
41
+ --color-destructive-foreground: var(--destructive-foreground);
42
+ --color-border: var(--border);
43
+ --color-input: var(--input);
44
+ --color-ring: var(--brand);
45
+ --color-chart-1: var(--chart-1);
46
+ --color-chart-2: var(--chart-2);
47
+ --color-chart-3: var(--chart-3);
48
+ --color-chart-4: var(--chart-4);
49
+ --color-chart-5: var(--chart-5);
50
+ --color-sidebar: var(--sidebar);
51
+ --color-sidebar-foreground: var(--sidebar-foreground);
52
+ --color-sidebar-primary: var(--sidebar-primary);
53
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
54
+ --color-sidebar-accent: var(--sidebar-accent);
55
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
56
+ --color-sidebar-border: var(--sidebar-border);
57
+ --color-sidebar-ring: var(--sidebar-ring);
58
+ --color-surface: var(--surface);
59
+ --color-surface-foreground: var(--surface-foreground);
60
+ --color-code: var(--code);
61
+ --color-code-foreground: var(--code-foreground);
62
+ --color-code-highlight: var(--code-highlight);
63
+ --color-code-number: var(--code-number);
64
+ --kanban-board-circle-primary: var(--primary);
65
+ --color-kanban-board-circle-yellow: var(--kanban-board-circle-yellow);
66
+ --color-kanban-board-circle-violet: var(--kanban-board-circle-violet);
67
+ --color-kanban-board-circle-red: var(--kanban-board-circle-red);
68
+ --color-kanban-board-circle-purple: var(--kanban-board-circle-purple);
69
+ --color-kanban-board-circle-pink: var(--kanban-board-circle-pink);
70
+ --color-kanban-board-circle-indigo: var(--kanban-board-circle-indigo);
71
+ --color-kanban-board-circle-green: var(--kanban-board-circle-green);
72
+ --color-kanban-board-circle-gray: var(--kanban-board-circle-gray);
73
+ --color-kanban-board-circle-cyan: var(--kanban-board-circle-cyan);
74
+ --color-kanban-board-circle-blue: var(--kanban-board-circle-blue);
75
+ --color-chart-scale-pattern-color: var(----chart-scale-pattern-color);
76
+ --color-chart-scale-05: var(----chart-scale-05);
77
+ --color-chart-scale-04: var(----chart-scale-04);
78
+ --color-chart-scale-03: var(----chart-scale-03);
79
+ --color-chart-scale-02: var(----chart-scale-02);
80
+ --color-chart-scale-01: var(----chart-scale-01);
81
+ --color-chart-label: var(----chart-label);
82
+ --color-chart-marker-foreground: var(----chart-marker-foreground);
83
+ --color-chart-marker-border: var(----chart-marker-border);
84
+ --color-chart-marker-background: var(----chart-marker-background);
85
+ --color-chart-tooltip-muted: var(----chart-tooltip-muted);
86
+ --color-chart-tooltip-foreground: var(----chart-tooltip-foreground);
87
+ --color-chart-tooltip-background: var(----chart-tooltip-background);
88
+ --chart-brush-border: var(----chart-brush-border);
89
+ --color-chart-grid: var(----chart-grid);
90
+ --color-chart-crosshair: var(----chart-crosshair);
91
+ --chart-line-secondary: var(----chart-line-secondary);
92
+ --chart-line-primary: var(----chart-line-primary);
93
+ --color-chart-foreground-muted: var(----chart-foreground-muted);
94
+ --color-chart-foreground: var(----chart-foreground);
95
+ --color-chart-background: var(----chart-background);
96
+ --animate-skeleton: skeleton 2s -1s infinite linear;
97
+ @keyframes skeleton {
98
+ to {
99
+ background-position: -200% 0;
100
+ }
101
+ }
102
+ }
103
+
104
+ :root {
105
+ --brand: #f4511e;
106
+ --app-safe-top: var(--safe-area-inset-top, env(safe-area-inset-top, 0px));
107
+ --ease-out: cubic-bezier(0.23, 1, 0.32, 1);
108
+ --ease-in-out: cubic-bezier(0.77, 0, 0.175, 1);
109
+ --ease-drawer: cubic-bezier(0.32, 0.72, 0, 1);
110
+ --icon-swap-dur: 250ms;
111
+ --icon-swap-blur: 2px;
112
+ --icon-swap-start-scale: 0.25;
113
+ --icon-swap-ease: ease-in-out;
114
+ --success: oklch(0.72 0.16 145);
115
+ --success-foreground: oklch(0.98 0 0);
116
+
117
+ --warning: oklch(0.82 0.18 75);
118
+ --warning-foreground: oklch(0.22 0 0);
119
+
120
+ --info: oklch(0.68 0.12 245);
121
+ --info-foreground: oklch(0.98 0 0);
122
+
123
+ --card: oklch(1 0 0);
124
+ --card-foreground: oklch(0.145 0 0);
125
+ --popover: oklch(1 0 0);
126
+ --popover-foreground: oklch(0.145 0 0);
127
+ --primary: oklch(0.205 0 0);
128
+ --primary-foreground: oklch(0.985 0 0);
129
+ --secondary: oklch(0.97 0 0);
130
+ --secondary-foreground: oklch(0.205 0 0);
131
+ --muted: oklch(0.97 0 0);
132
+ --muted-foreground: oklch(0.556 0 0);
133
+ --accent: oklch(0.97 0 0);
134
+ --accent-foreground: oklch(0.205 0 0);
135
+ --destructive: oklch(0.577 0.245 27.325);
136
+ --border: oklch(0.922 0 0);
137
+ --input: oklch(0.922 0 0);
138
+ --ring: oklch(62.04% 0.195 253.83);
139
+ --chart-1: oklch(0.87 0 0);
140
+ --chart-2: oklch(0.556 0 0);
141
+ --chart-3: oklch(0.439 0 0);
142
+ --chart-4: oklch(0.371 0 0);
143
+ --chart-5: oklch(0.269 0 0);
144
+ --radius: 0.625rem;
145
+ --sidebar: oklch(0.985 0 0);
146
+ --sidebar-foreground: oklch(0.145 0 0);
147
+ --sidebar-primary: oklch(0.205 0 0);
148
+ --sidebar-primary-foreground: oklch(0.985 0 0);
149
+ --sidebar-accent: oklch(0.97 0 0);
150
+ --sidebar-accent-foreground: oklch(0.205 0 0);
151
+ --sidebar-border: oklch(0.922 0 0);
152
+ --sidebar-ring: oklch(0.708 0 0);
153
+ --background: oklch(1 0 0);
154
+ --foreground: oklch(0.145 0 0);
155
+ --kanban-board-circle-blue: oklch(0.6232 0.1879 259.8);
156
+ --kanban-board-circle-cyan: oklch(0.7146 0.1256 215.13);
157
+ --kanban-board-circle-gray: oklch(0.5513 0.0233 264.36);
158
+ --kanban-board-circle-green: oklch(0.7229 0.1921 149.58);
159
+ --kanban-board-circle-indigo: oklch(0.586 0.2037 277.12);
160
+ --kanban-board-circle-pink: oklch(0.6559 0.2117 354.34);
161
+ --kanban-board-circle-purple: oklch(0.6267 0.2325 303.86);
162
+ --kanban-board-circle-red: oklch(0.6368 0.2078 25.33);
163
+ --kanban-board-circle-violet: oklch(0.6059 0.2187 292.72);
164
+ --kanban-board-circle-yellow: oklch(0.7959 0.1618 86.05);
165
+ --chart-background: oklch(1 0 0);
166
+ --chart-foreground: oklch(0.145 0.004 285);
167
+ --chart-foreground-muted: oklch(0.55 0.014 260);
168
+ --chart-line-primary: var(--chart-1);
169
+ --chart-line-secondary: var(--chart-2);
170
+ --chart-crosshair: oklch(0.4 0.1828 274.34);
171
+ --chart-grid: oklch(0.9 0 0);
172
+ --chart-brush-border: var(--chart-grid);
173
+ --chart-tooltip-background: oklch(0.21 0.006 285 / 0.8);
174
+ --chart-tooltip-foreground: oklch(0.985 0 0);
175
+ --chart-tooltip-muted: oklch(0.65 0.01 260);
176
+ --chart-marker-background: oklch(0.97 0.005 260);
177
+ --chart-marker-border: oklch(0.85 0.01 260);
178
+ --chart-marker-foreground: oklch(0.3 0.01 260);
179
+ --chart-label: oklch(0.45 0.01 260);
180
+ --chart-scale-01: oklch(0.98 0.003 106);
181
+ --chart-scale-02: oklch(0.92 0.008 106);
182
+ --chart-scale-03: oklch(0.82 0.015 106);
183
+ --chart-scale-04: oklch(0.68 0.02 106);
184
+ --chart-scale-05: oklch(0.55 0.025 106);
185
+ --chart-scale-pattern-color: oklch(0.96 0.005 106);
186
+ }
187
+
188
+ .t-icon-swap {
189
+ position: relative;
190
+ display: inline-grid;
191
+ }
192
+
193
+ .t-icon-swap .t-icon {
194
+ grid-area: 1 / 1;
195
+ transition:
196
+ opacity var(--icon-swap-dur) var(--icon-swap-ease),
197
+ filter var(--icon-swap-dur) var(--icon-swap-ease),
198
+ transform var(--icon-swap-dur) var(--icon-swap-ease);
199
+ will-change: opacity, filter, transform;
200
+ }
201
+
202
+ .t-icon-swap[data-state="a"] .t-icon[data-icon="a"],
203
+ .t-icon-swap[data-state="b"] .t-icon[data-icon="b"] {
204
+ opacity: 1;
205
+ filter: blur(0);
206
+ transform: scale(1);
207
+ }
208
+
209
+ .t-icon-swap[data-state="a"] .t-icon[data-icon="b"],
210
+ .t-icon-swap[data-state="b"] .t-icon[data-icon="a"] {
211
+ opacity: 0;
212
+ filter: blur(var(--icon-swap-blur));
213
+ transform: scale(var(--icon-swap-start-scale));
214
+ }
215
+
216
+ @media (prefers-reduced-motion: reduce) {
217
+ .t-icon-swap .t-icon {
218
+ transition: none !important;
219
+ }
220
+ }
221
+
222
+ .dark {
223
+ --brand: #ff7a00;
224
+ --success: oklch(0.68 0.15 145);
225
+ --success-foreground: oklch(0.98 0 0);
226
+
227
+ --warning: oklch(0.74 0.16 75);
228
+ --warning-foreground: oklch(0.12 0 0);
229
+
230
+ --info: oklch(0.72 0.11 245);
231
+ --info-foreground: oklch(0.98 0 0);
232
+
233
+ --background: oklch(0 0 0);
234
+ --foreground: oklch(0.985 0 0);
235
+ --card: oklch(0.205 0 0);
236
+ --card-foreground: oklch(0.985 0 0);
237
+ --popover: oklch(0.205 0 0);
238
+ --popover-foreground: oklch(0.985 0 0);
239
+ --primary: oklch(0.922 0 0);
240
+ --primary-foreground: oklch(0.205 0 0);
241
+ --secondary: oklch(0.269 0 0);
242
+ --secondary-foreground: oklch(0.985 0 0);
243
+ --muted: oklch(0.269 0 0);
244
+ --muted-foreground: oklch(0.708 0 0);
245
+ --accent: oklch(0.269 0 0);
246
+ --accent-foreground: oklch(0.985 0 0);
247
+ --destructive: oklch(0.704 0.191 22.216);
248
+ --border: oklch(1 0 0 / 10%);
249
+ --input: oklch(1 0 0 / 15%);
250
+ --ring: oklch(62.04% 0.195 253.83);
251
+ --chart-1: oklch(0.87 0 0);
252
+ --chart-2: oklch(0.556 0 0);
253
+ --chart-3: oklch(0.439 0 0);
254
+ --chart-4: oklch(0.371 0 0);
255
+ --chart-5: oklch(0.269 0 0);
256
+ --sidebar: oklch(0.205 0 0);
257
+ --sidebar-foreground: oklch(0.985 0 0);
258
+ --sidebar-primary: oklch(0.488 0.243 264.376);
259
+ --sidebar-primary-foreground: oklch(0.985 0 0);
260
+ --sidebar-accent: oklch(0.269 0 0);
261
+ --sidebar-accent-foreground: oklch(0.985 0 0);
262
+ --sidebar-border: oklch(1 0 0 / 10%);
263
+ --sidebar-ring: oklch(0.556 0 0);
264
+ --kanban-board-circle-blue: oklch(0.7135 0.1435 254.61);
265
+ --kanban-board-circle-cyan: oklch(0.7973 0.1339 211.45);
266
+ --kanban-board-circle-gray: oklch(0.7137 0.0192 261.33);
267
+ --kanban-board-circle-green: oklch(0.8003 0.1823 151.7);
268
+ --kanban-board-circle-indigo: oklch(0.6797 0.1586 276.96);
269
+ --kanban-board-circle-pink: oklch(0.7253 0.1752 349.74);
270
+ --kanban-board-circle-purple: oklch(0.7218 0.1766 305.51);
271
+ --kanban-board-circle-red: oklch(0.7108 0.166 22.21);
272
+ --kanban-board-circle-violet: oklch(0.7093 0.1589 293.52);
273
+ --kanban-board-circle-yellow: oklch(0.8601 0.173 91.84);
274
+ --chart-background: oklch(0.145 0 0);
275
+ --chart-foreground: oklch(0.45 0 0);
276
+ --chart-foreground-muted: oklch(0.65 0.01 260);
277
+ --chart-crosshair: oklch(0.45 0 0);
278
+ --chart-grid: oklch(0.25 0 0);
279
+ --chart-brush-border: var(--chart-grid);
280
+ --chart-marker-background: oklch(0.25 0.01 260);
281
+ --chart-marker-border: oklch(0.4 0.01 260);
282
+ --chart-marker-foreground: oklch(0.9 0 0);
283
+ --chart-label: oklch(0.75 0.01 260);
284
+ --chart-scale-01: oklch(0.28 0.03 270);
285
+ --chart-scale-02: oklch(0.38 0.04 270);
286
+ --chart-scale-03: oklch(0.48 0.05 270);
287
+ --chart-scale-04: oklch(0.58 0.06 270);
288
+ --chart-scale-05: oklch(0.68 0.07 270);
289
+ --chart-scale-pattern-color: oklch(0.145 0 0);
290
+ }
291
+
292
+ @media (display-mode: standalone) {
293
+ :root {
294
+ --app-safe-top: env(safe-area-inset-top, 0px);
295
+ }
296
+ }
297
+
298
+ html[data-native-app="true"] {
299
+ --app-safe-top: var(--safe-area-inset-top, env(safe-area-inset-top, 0px));
300
+ }
301
+
302
+ /* iOS apps running on macOS expose the title-bar inset as a safe area even
303
+ * though the web view already starts below the window chrome. */
304
+ html[data-native-app="true"][data-native-device="mac"] {
305
+ --app-safe-top: 0px;
306
+ }
307
+
308
+ @layer base {
309
+ html {
310
+ background-color: var(--background);
311
+ scroll-padding-top: var(--header-height);
312
+ }
313
+ * {
314
+ @apply border-border;
315
+ }
316
+ html {
317
+ @apply overscroll-y-none;
318
+ }
319
+ body {
320
+ min-height: 100dvh;
321
+ position: relative;
322
+ background-color: var(--background);
323
+ font-synthesis-weight: none;
324
+ text-rendering: optimizeLegibility;
325
+ -webkit-tap-highlight-color: transparent;
326
+ @apply bg-background text-foreground;
327
+ }
328
+ [data-slot="layout"] {
329
+ @apply overscroll-none;
330
+ }
331
+
332
+ @supports (font: -apple-system-body) and (-webkit-appearance: none) {
333
+ [data-wrapper] {
334
+ @apply min-[1800px]:border-t;
335
+ }
336
+ }
337
+ input[type="number"] {
338
+ -moz-appearance: textfield;
339
+ }
340
+
341
+ input[type="number"]::-webkit-outer-spin-button,
342
+ input[type="number"]::-webkit-inner-spin-button {
343
+ margin: 0;
344
+ -webkit-appearance: none;
345
+ }
346
+ :root {
347
+ --color-kanban-board-circle-blue: var(--kanban-board-circle-blue);
348
+ --color-kanban-board-circle-cyan: var(--kanban-board-circle-cyan);
349
+ --color-kanban-board-circle-gray: var(--kanban-board-circle-gray);
350
+ --color-kanban-board-circle-green: var(--kanban-board-circle-green);
351
+ --color-kanban-board-circle-indigo: var(--kanban-board-circle-indigo);
352
+ --color-kanban-board-circle-pink: var(--kanban-board-circle-pink);
353
+ --color-kanban-board-circle-primary: var(--kanban-board-circle-primary);
354
+ --color-kanban-board-circle-purple: var(--kanban-board-circle-purple);
355
+ --color-kanban-board-circle-red: var(--kanban-board-circle-red);
356
+ --color-kanban-board-circle-violet: var(--kanban-board-circle-violet);
357
+ --color-kanban-board-circle-yellow: var(--kanban-board-circle-yellow);
358
+ }
359
+ }
360
+
361
+ /* Autofill - keep the values but remove Chrome/Safari styling */
362
+
363
+ input:-webkit-autofill,
364
+ input:-webkit-autofill:hover,
365
+ input:-webkit-autofill:focus,
366
+ textarea:-webkit-autofill,
367
+ textarea:-webkit-autofill:hover,
368
+ textarea:-webkit-autofill:focus,
369
+ select:-webkit-autofill,
370
+ select:-webkit-autofill:hover,
371
+ select:-webkit-autofill:focus {
372
+ -webkit-text-fill-color: currentColor;
373
+ caret-color: currentColor;
374
+
375
+ /* Light mode: transparent like your Input */
376
+ -webkit-box-shadow: 0 0 0 1000px transparent inset;
377
+ box-shadow: 0 0 0 1000px transparent inset;
378
+
379
+ transition: background-color 999999s ease-in-out 0s;
380
+ }
381
+
382
+ /* Dark mode: match dark:bg-input/30 */
383
+ .dark input:-webkit-autofill,
384
+ .dark input:-webkit-autofill:hover,
385
+ .dark input:-webkit-autofill:focus,
386
+ .dark textarea:-webkit-autofill,
387
+ .dark textarea:-webkit-autofill:focus,
388
+ .dark select:-webkit-autofill,
389
+ .dark select:-webkit-autofill:focus {
390
+ -webkit-box-shadow: 0 0 0 1000px hsl(var(--input) / 0.3) inset;
391
+ box-shadow: 0 0 0 1000px hsl(var(--input) / 0.3) inset;
392
+ }
393
+ input:autofill,
394
+ textarea:autofill,
395
+ select:autofill,
396
+ input:-webkit-autofill,
397
+ textarea:-webkit-autofill,
398
+ select:-webkit-autofill {
399
+ -webkit-text-fill-color: currentColor;
400
+ caret-color: currentColor;
401
+ -webkit-box-shadow: 0 0 0 1000px transparent inset;
402
+ }
403
+
404
+ .tabs__tab,
405
+ .tabs__tab:focus,
406
+ .tabs__tab:focus-visible,
407
+ .tabs__tab[data-focus-visible="true"] {
408
+ outline: none !important;
409
+ box-shadow: none !important;
410
+ }
411
+
412
+ /*
413
+ * Keep tab indicator slide motion when next-themes disableTransitionOnChange
414
+ * injects `* { transition: none !important }` during theme class flips.
415
+ * Only translate/size are preserved — colors still snap with the theme.
416
+ */
417
+ .tabs__indicator {
418
+ transition-duration: 250ms !important;
419
+ transition-property: translate, width, height !important;
420
+ transition-timing-function: var(--ease-out-fluid) !important;
421
+ }
422
+
423
+ @media (prefers-reduced-motion: reduce) {
424
+ .tabs__indicator {
425
+ transition: none !important;
426
+ }
427
+ }
428
+
429
+ @utility mobile {
430
+ @apply lg:hidden;
431
+ }
432
+
433
+ @utility desktop {
434
+ @apply hidden lg:block;
435
+ }
436
+
437
+ @utility no-scrollbar {
438
+ -ms-overflow-style: none;
439
+ scrollbar-width: none;
440
+
441
+ &::-webkit-scrollbar {
442
+ display: none;
443
+ }
444
+ }
445
+
446
+ @utility border-ghost {
447
+ @apply relative after:absolute after:inset-0 after:border after:border-border after:mix-blend-darken dark:after:mix-blend-lighten;
448
+ }
449
+
450
+ @layer components {
451
+ .dialog-ring {
452
+ @apply rounded-xl border-none bg-clip-padding shadow-2xl ring-4 ring-neutral-200/80 dark:bg-neutral-900 dark:ring-neutral-800;
453
+ }
454
+ }
455
+
456
+ @utility app-container {
457
+ width: 100%;
458
+ margin-inline: auto;
459
+ padding-left: 0.5rem;
460
+ padding-right: 0.5rem;
461
+ flex-grow: 1;
462
+
463
+ @media (width >= 96rem) {
464
+ padding-left: 10%;
465
+ padding-right: 10%;
466
+ }
467
+ }
468
+
469
+ @utility app-section {
470
+ padding-block: 0.5rem;
471
+ & > :not(:last-child) {
472
+ margin-bottom: 1rem;
473
+ }
474
+ @apply px-2;
475
+ }
476
+
477
+ @layer utilities {
478
+ :where(
479
+ a,
480
+ button,
481
+ input,
482
+ textarea,
483
+ select,
484
+ summary,
485
+ [role="button"],
486
+ [tabindex]:not([tabindex="-1"])
487
+ ):not([data-slot="input-group-control"]):not([data-no-ring]):focus-visible {
488
+ @apply ring-1 outline-none;
489
+ }
490
+
491
+ [data-slot="input-group"]:not([data-no-ring]):has(
492
+ [data-slot="input-group-control"]:focus-visible
493
+ ) {
494
+ @apply border-input! ring-1! ring-brand! outline-none!;
495
+ }
496
+
497
+ /* Completely disable focus ring */
498
+ [data-no-ring]:focus,
499
+ [data-no-ring]:focus-visible {
500
+ @apply border-input! ring-0! ring-offset-0! outline-none!;
501
+ }
502
+
503
+ /* Disable ring for compound components like InputGroup */
504
+ [data-slot="input-group"][data-no-ring]:has(
505
+ [data-slot="input-group-control"]:focus-visible
506
+ ) {
507
+ @apply border-input! ring-0! ring-offset-0! outline-none!;
508
+ }
509
+ }