@tydavidson/design-system 1.2.2 → 1.2.3

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,698 @@
1
+ /**
2
+ * Global CSS for Design System
3
+ *
4
+ * This file defines the color system based on our Figma design tokens.
5
+ * It follows a layered approach:
6
+ * 1. Foundational Colors: Raw color values from design system
7
+ * 2. Semantic Variables: Meaningful variables that map to foundational colors
8
+ * 3. shadcn Variables: Variables required by shadcn components
9
+ * 4. Component-specific Variables: Imported from component CSS files
10
+ *
11
+ * This structure allows changes at any level without breaking the entire system.
12
+ */
13
+
14
+ /* REMOVE BODY TEST STYLES */
15
+ /*
16
+ body {
17
+ border: 20px solid lime !important;
18
+ background-color: orange !important;
19
+ }
20
+ */
21
+
22
+ @tailwind base;
23
+ @tailwind components;
24
+ @tailwind utilities;
25
+
26
+ @import '../styles/components/button.css';
27
+ @import '../styles/components/input.css';
28
+ @import '../styles/components/input-dropdown.css';
29
+ @import '../styles/components/card.css';
30
+ @import '../styles/components/sidebar.css';
31
+
32
+ /* FORCEFUL SIDEBAR ROOT STYLES - OUTSIDE ANY LAYER */
33
+ .float-sidebar-root {
34
+ width: var(--sidebar-width, 240px) !important;
35
+ flex-shrink: 0 !important;
36
+ position: relative !important; /* CRITICAL FOR FLOW */
37
+ z-index: 10 !important;
38
+ height: 100vh !important;
39
+ /* Add your sidebar background and border here if necessary, or ensure they are in sidebar.css and not conflicting */
40
+ /* e.g., background-color: var(--bg-primary); border-right: 1px solid var(--border-secondary); */
41
+ }
42
+
43
+ @layer base {
44
+ /* Basic styles without problematic classes */
45
+ * {
46
+ box-sizing: border-box;
47
+ border-color: var(--border-secondary);
48
+ }
49
+
50
+ body {
51
+ background-color: var(--bg-primary);
52
+ color: var(--text-primary);
53
+ font-family: sans-serif;
54
+ margin: 0;
55
+ padding: 0;
56
+ }
57
+
58
+ :root {
59
+ /* -------------------------------- */
60
+ /* Foundational Colors: Light Theme */
61
+ /* -------------------------------- */
62
+
63
+ /* Gray Scale */
64
+ --color-gray-25: #fcfcfc;
65
+ --color-gray-50: #fafafa;
66
+ --color-gray-100: #f4f4f5;
67
+ --color-gray-200: #e4e4e7;
68
+ --color-gray-300: #d1d1d6;
69
+ --color-gray-400: #a0a0ab;
70
+ --color-gray-500: #70707b;
71
+ --color-gray-600: #51515c;
72
+ --color-gray-700: #3f3f46;
73
+ --color-gray-800: #26262b;
74
+ --color-gray-900: #1a1a1e;
75
+ --color-gray-950: #131316;
76
+
77
+ /* Brand Colors */
78
+ --color-brand-25: #f8faff;
79
+ --color-brand-50: #edf2ff;
80
+ --color-brand-100: #dee4fa;
81
+ --color-brand-200: #c6cdf4;
82
+ --color-brand-300: #a6afec;
83
+ --color-brand-400: #8f97e0;
84
+ --color-brand-500: #7479d6;
85
+ --color-brand-600: #6063bd;
86
+ --color-brand-700: #4a49a6;
87
+ --color-brand-800: #343688;
88
+ --color-brand-900: #232469;
89
+ --color-brand-950: #15154d;
90
+
91
+ /* Error Colors */
92
+ --color-error-25: #fffbfa;
93
+ --color-error-50: #ffefeb;
94
+ --color-error-100: #fcdad1;
95
+ --color-error-200: #f7b8a8;
96
+ --color-error-300: #ef927a;
97
+ --color-error-400: #e37559;
98
+ --color-error-500: #d3593a;
99
+ --color-error-600: #bd3e1e;
100
+ --color-error-700: #99371e;
101
+ --color-error-800: #732c1a;
102
+ --color-error-900: #4d2014;
103
+ --color-error-950: #29120c;
104
+
105
+ /* Warning Colors */
106
+ --color-warning-25: #fefdf0;
107
+ --color-warning-50: #fffce8;
108
+ --color-warning-100: #fef7c3;
109
+ --color-warning-200: #feee95;
110
+ --color-warning-300: #fde272;
111
+ --color-warning-400: #fac515;
112
+ --color-warning-500: #eaaa08;
113
+ --color-warning-600: #ca8504;
114
+ --color-warning-700: #a15c07;
115
+ --color-warning-800: #854a0e;
116
+ --color-warning-900: #713b12;
117
+ --color-warning-950: #542c0d;
118
+
119
+ /* Success Colors */
120
+ --color-success-25: #f6fefb;
121
+ --color-success-50: #e6f5ee;
122
+ --color-success-100: #ccf0e0;
123
+ --color-success-200: #a6ebcd;
124
+ --color-success-300: #73e2b2;
125
+ --color-success-400: #3ccb8d;
126
+ --color-success-500: #36b37d;
127
+ --color-success-600: #2c9266;
128
+ --color-success-700: #1f744e;
129
+ --color-success-800: #185c3e;
130
+ --color-success-900: #084c2e;
131
+ --color-success-950: #0a2e1e;
132
+
133
+ /* Base Colors */
134
+ --color-white: #ffffff;
135
+ --color-black: #000000;
136
+
137
+ /* ------------------------------- */
138
+ /* Semantic Variables: Light Theme */
139
+ /* ------------------------------- */
140
+
141
+ /* Text Colors - Used for typography elements */
142
+ --text-primary: rgb(0 0 0 / 0.87); /* Main text color for body content */
143
+ --text-secondary: rgb(0 0 0 / 0.75); /* Secondary text, used for descriptions, labels */
144
+ --text-tertiary: rgb(0 0 0 / 0.60); /* Tertiary text, used for less important information */
145
+ --text-disabled: rgb(0 0 0 / 0.38); /* Text for disabled elements */
146
+
147
+ --text-brand-primary: var(--color-gray-50); /* Primary text on brand color backgrounds */
148
+ --text-brand-secondary: var(--color-gray-300); /* Secondary text on brand backgrounds */
149
+ --text-brand-tertiary: var(--color-gray-400); /* Tertiary text on brand backgrounds */
150
+
151
+ --text-error-primary: var(--color-error-600); /* Error message text */
152
+ --text-warning-primary: var(--color-warning-600); /* Warning message text */
153
+ --text-success-primary: var(--color-success-600); /* Success message text */
154
+
155
+ /* Border Colors - Used for element boundaries */
156
+ --border-primary: var(--color-gray-300); /* Primary border, used for inputs, cards */
157
+ --border-secondary: var(--color-gray-200); /* Secondary border, for subtle separations */
158
+ --border-tertiary: var(--color-gray-100); /* Tertiary border, very subtle */
159
+ --border-disabled: var(--color-gray-300); /* Border for disabled elements */
160
+
161
+ --border-brand: var(--color-brand-400); /* Brand-colored borders for emphasis */
162
+ --border-brand-solid: var(--color-brand-600); /* Solid brand borders for stronger emphasis */
163
+
164
+ --border-error: var(--color-error-400); /* Error state borders */
165
+ --border-error-solid: var(--color-error-500); /* Strong error borders */
166
+
167
+ --border-warning: var(--color-warning-400); /* Warning state borders */
168
+ --border-warning-solid: var(--color-warning-500); /* Strong warning borders */
169
+
170
+ --border-success: var(--color-success-400); /* Success state borders */
171
+ --border-success-solid: var(--color-success-500); /* Strong success borders */
172
+
173
+ /* Background Colors - Used for surfaces */
174
+ --bg-primary: var(--color-white); /* Main background color */
175
+ --bg-secondary: var(--color-gray-50); /* Secondary background, for subtle contrast */
176
+ --bg-tertiary: var(--color-gray-100); /* Tertiary background, for stronger contrast */
177
+ --bg-quaternary: var(--color-gray-200); /* Deeper background contrast */
178
+ --bg-disabled: var(--color-gray-100); /* Background for disabled elements */
179
+ --bg-overlay: var(--color-gray-800); /* Background for overlays with reduced opacity */
180
+
181
+ --bg-brand-primary: var(--color-brand-50); /* Subtle brand background */
182
+ --bg-brand-secondary: var(--color-brand-100); /* Stronger brand background */
183
+ --bg-brand-solid: var(--color-brand-600); /* Solid brand background */
184
+
185
+ --bg-error-primary: var(--color-error-50); /* Subtle error background */
186
+ --bg-error-secondary: var(--color-error-100); /* Stronger error background */
187
+ --bg-error-solid: var(--color-error-600); /* Solid error background */
188
+
189
+ --bg-warning-primary: var(--color-warning-50); /* Subtle warning background */
190
+ --bg-warning-secondary: var(--color-warning-100); /* Stronger warning background */
191
+ --bg-warning-solid: var(--color-warning-600); /* Solid warning background */
192
+
193
+ --bg-success-primary: var(--color-success-50); /* Subtle success background */
194
+ --bg-success-secondary: var(--color-success-100); /* Stronger success background */
195
+ --bg-success-solid: var(--color-success-600); /* Solid success background */
196
+
197
+ /* Foreground Colors - Used for interactive elements */
198
+ --fg-primary: var(--color-gray-900); /* Primary foreground for icons, buttons */
199
+ --fg-secondary: var(--color-gray-700); /* Secondary foreground, less emphasis */
200
+ --fg-tertiary: var(--color-gray-600); /* Tertiary foreground, minimal emphasis */
201
+ --fg-quaternary: var(--color-gray-500); /* Quaternary foreground, very light emphasis */
202
+ --fg-quinary: var(--color-gray-400); /* Quinary foreground, extremely subtle */
203
+ --fg-disabled: var(--color-gray-400); /* Foreground for disabled elements */
204
+
205
+ --fg-brand-primary: var(--color-brand-600); /* Brand-colored foreground elements */
206
+ --fg-brand-secondary: var(--color-brand-500); /* Secondary brand foreground */
207
+
208
+ --fg-error-primary: var(--color-error-500); /* Error foreground for icons, indicators */
209
+ --fg-error-secondary: var(--color-error-400); /* Secondary error foreground */
210
+
211
+ --fg-warning-primary: var(--color-warning-500); /* Warning foreground */
212
+ --fg-warning-secondary: var(--color-warning-400); /* Secondary warning foreground */
213
+
214
+ --fg-success-primary: var(--color-success-500); /* Success foreground */
215
+ --fg-success-secondary: var(--color-success-400); /* Secondary success foreground */
216
+
217
+ --fg-white: var(--color-white); /* White foreground for contrast on dark backgrounds */
218
+
219
+ /* ---------------------------------------- */
220
+ /* shadcn Required Variables: Light Theme */
221
+ /* ---------------------------------------- */
222
+
223
+ /* IMPORTANT: shadcn variables need to contain HSL parameters only, not complete colors.
224
+ These parameters will be wrapped in hsl() when used. */
225
+
226
+ /* Base Theme Colors */
227
+ --background: 0 0% 100%; /* Main app background (white) */
228
+ --foreground: 240 10% 3.9%; /* Main text (gray-900) */
229
+
230
+ /* Card Component Colors */
231
+ --card: 0 0% 100%; /* Card background (white) */
232
+ --card-foreground: 240 10% 3.9%; /* Card text (gray-900) */
233
+
234
+ /* Popover/Dropdown Colors */
235
+ --popover: 0 0% 100%; /* Popover background (white) */
236
+ --popover-foreground: 240 10% 3.9%; /* Popover text (gray-900) */
237
+
238
+ /* Primary Button Colors */
239
+ --primary: 242 48% 56%; /* Primary button (brand-600) */
240
+ --primary-foreground: 0 0% 100%; /* Primary button text (white) */
241
+
242
+ /* Secondary Button/Element Colors */
243
+ --secondary: 240 5% 96%; /* Secondary button (gray-100) */
244
+ --secondary-foreground: 240 5% 26%; /* Secondary button text (gray-700) */
245
+
246
+ /* Muted Elements Colors */
247
+ --muted: 240 5% 96%; /* Muted background (gray-100) */
248
+ --muted-foreground: 240 4% 46%; /* Muted text (gray-500) */
249
+
250
+ /* Accent Elements */
251
+ --accent: 245 100% 97%; /* Accent background (brand-50) */
252
+ --accent-foreground: 242 48% 56%; /* Accent text (brand-600) */
253
+
254
+ /* Destructive Elements */
255
+ --destructive: 11 70% 44%; /* Destructive background (error-600) */
256
+ --destructive-foreground: 0 0% 100%; /* Destructive text (white) */
257
+
258
+ /* UI Element Border and Focus */
259
+ --border: 240 5% 84%; /* Border color (gray-300) */
260
+ --input: var(--input-border-hsl); /* Input field border (gray-300) */
261
+ --ring: var(--input-ring-hsl); /* Focus ring color (brand-400) */
262
+
263
+ /* Component Shape */
264
+ --radius: 0.5rem; /* Border radius for components */
265
+
266
+ /* Sidebar Component Variables */
267
+ --sidebar-background: 0 0% 100%; /* Maps to --bg-primary in light mode */
268
+ --sidebar-foreground: 240 10% 3.9%; /* Maps to --text-primary */
269
+ --sidebar-primary: 242 48% 56%; /* Maps to brand-600 */
270
+ --sidebar-primary-foreground: 0 0% 100%; /* Maps to white */
271
+ --sidebar-accent: 240 5% 96%; /* Maps to --bg-tertiary */
272
+ --sidebar-accent-foreground: 240 5.9% 10%; /* Maps to --text-primary */
273
+ --sidebar-border: 240 5% 84%; /* Maps to --border-secondary */
274
+ --sidebar-ring: 242 83% 60%; /* Maps to brand/ring color for focus */
275
+
276
+ /* Map sidebar variables to shadcn values for better compatibility */
277
+ --sidebar-bg: hsl(var(--sidebar-background));
278
+ --sidebar-border: hsl(var(--sidebar-border));
279
+ --sidebar-item-bg-hover: hsl(var(--sidebar-accent));
280
+ --sidebar-item-bg-active: hsl(var(--sidebar-primary) / 0.1);
281
+ --sidebar-item-text-active: hsl(var(--sidebar-primary));
282
+
283
+ /* Ensure --sidebar-width and --sidebar-width-collapsed are defined here or in sidebar.css */
284
+ --sidebar-width: 240px; /* Default if not defined elsewhere */
285
+ --sidebar-width-collapsed: 64px; /* Default if not defined elsewhere */
286
+
287
+ --bg-app-base: #F9FAFB; /* App foundation background (gray-50) */
288
+ }
289
+
290
+ /* Dark theme variables */
291
+ .dark {
292
+ /* -------------------------------- */
293
+ /* Foundational Colors: Dark Theme */
294
+ /* -------------------------------- */
295
+
296
+ /* Note: We're not redefining the base color variables in dark mode.
297
+ Instead, we're just updating the semantic variables to point to different colors. */
298
+
299
+ /* ------------------------------- */
300
+ /* Semantic Variables: Dark Theme */
301
+ /* ------------------------------- */
302
+
303
+ /* Text Colors - Adjusted for dark mode */
304
+ --text-primary: rgb(255 255 255 / 1); /* Light text on dark background */
305
+ --text-secondary: rgb(255 255 255 / 0.73); /* Secondary text on dark background */
306
+ --text-tertiary: rgb(255 255 255 / 0.60); /* Tertiary text on dark background */
307
+ --text-disabled: rgb(255 255 255 / 0.38); /* Disabled text on dark background */
308
+
309
+ --text-brand-primary: #edf2ff; /* Brand text in dark mode */
310
+ --text-brand-secondary: #c6cdf4; /* Secondary brand text */
311
+ --text-brand-tertiary: #a6afec; /* Tertiary brand text */
312
+
313
+ --text-error-primary: #ef927a; /* Error text in dark mode */
314
+ --text-warning-primary: #fde272; /* Warning text in dark mode */
315
+ --text-success-primary: #73e2b2; /* Success text in dark mode */
316
+
317
+ /* Border Colors - Adjusted for dark mode */
318
+ --border-primary: #3f3f46; /* Main border color in dark mode */
319
+ --border-secondary: #26262b; /* Secondary border in dark mode */
320
+ --border-tertiary: #26262b; /* Tertiary border in dark mode */
321
+ --border-disabled: #3f3f46; /* Disabled borders in dark mode */
322
+
323
+ --border-brand: #7479d6; /* Brand border in dark mode */
324
+ --border-brand-solid: #a6afec; /* Solid brand border */
325
+
326
+ --border-error: #e37559; /* Error border in dark mode */
327
+ --border-error-solid: #ef927a; /* Solid error border */
328
+
329
+ --border-warning: #fac515; /* Warning border in dark mode */
330
+ --border-warning-solid: #fde272; /* Solid warning border */
331
+
332
+ --border-success: #3ccb8d; /* Success border in dark mode */
333
+ --border-success-solid: #73e2b2; /* Solid success border */
334
+
335
+ /* Background Colors - Adjusted for dark mode */
336
+ --bg-primary: #131316; /* Main dark theme background */
337
+ --bg-secondary: #1a1a1e; /* Secondary dark background */
338
+ --bg-tertiary: #26262b; /* Tertiary dark background */
339
+ --bg-quaternary: #3f3f46; /* Quaternary dark background */
340
+ --bg-disabled: #26262b; /* Disabled background in dark mode */
341
+ --bg-overlay: #26262b; /* Overlay background */
342
+
343
+ --bg-brand-primary: #1a1a1e; /* Brand section background in dark mode */
344
+ --bg-brand-secondary: #131316; /* Secondary brand background */
345
+ --bg-brand-solid: #4a49a6; /* Solid brand background */
346
+
347
+ --bg-error-primary: #d3593a; /* Error background in dark mode */
348
+ --bg-error-secondary: #ef927a; /* Secondary error background */
349
+ --bg-error-solid: #bd3e1e; /* Solid error background */
350
+
351
+ --bg-warning-primary: #eaaa08; /* Warning background */
352
+ --bg-warning-secondary: #fde272; /* Secondary warning background */
353
+ --bg-warning-solid: #ca8504; /* Solid warning background */
354
+
355
+ --bg-success-primary: #36b37d; /* Success background */
356
+ --bg-success-secondary: #73e2b2; /* Secondary success background */
357
+ --bg-success-solid: #2c9266; /* Solid success background */
358
+
359
+ /* Foreground Colors - Adjusted for dark mode */
360
+ --fg-primary: #ffffff; /* Primary foreground in dark mode */
361
+ --fg-secondary: #d1d1d6; /* Secondary foreground */
362
+ --fg-tertiary: #a0a0ab; /* Tertiary foreground */
363
+ --fg-quaternary: #70707b; /* Quaternary foreground */
364
+ --fg-quinary: #a0a0ab; /* Quinary foreground */
365
+ --fg-disabled: #70707b; /* Disabled foreground */
366
+
367
+ --fg-brand-primary: #a6afec; /* Brand foreground in dark mode */
368
+ --fg-brand-secondary: #7479d6; /* Secondary brand foreground */
369
+
370
+ --fg-error-primary: #ef927a; /* Error foreground */
371
+ --fg-error-secondary: #e37559; /* Secondary error foreground */
372
+
373
+ --fg-warning-primary: #fde272; /* Warning foreground */
374
+ --fg-warning-secondary: #fac515; /* Secondary warning foreground */
375
+
376
+ --fg-success-primary: #73e2b2; /* Success foreground */
377
+ --fg-success-secondary: #3ccb8d; /* Secondary success foreground */
378
+
379
+ /* ---------------------------------------- */
380
+ /* shadcn Required Variables: Dark Theme */
381
+ /* ---------------------------------------- */
382
+
383
+ /* IMPORTANT: shadcn variables need to contain HSL parameters only, not complete colors.
384
+ These parameters will be wrapped in hsl() when used. */
385
+
386
+ /* Base Theme Colors */
387
+ --background: 240 10% 3.9%; /* Main dark theme background */
388
+ --foreground: 0 0% 98%; /* Main content text in dark mode */
389
+
390
+ /* Card Component Colors */
391
+ --card: 240 10% 3.9%; /* Card background */
392
+ --card-foreground: 0 0% 98%; /* Card text */
393
+
394
+ /* Popover/Dropdown Colors */
395
+ --popover: 240 10% 3.9%; /* Popover background */
396
+ --popover-foreground: 0 0% 98%; /* Popover text */
397
+
398
+ /* Primary Button Colors */
399
+ --primary: 242 48% 56%; /* Primary button background */
400
+ --primary-foreground: 240 10% 3.9%; /* Primary button text */
401
+
402
+ /* Secondary Button/Element Colors */
403
+ --secondary: 240 4% 16%; /* Secondary button background */
404
+ --secondary-foreground: 0 0% 98%; /* Secondary button text */
405
+
406
+ /* Muted Elements Colors */
407
+ --muted: 240 4% 16%; /* Muted background */
408
+ --muted-foreground: 240 5% 64.9%; /* Muted text */
409
+
410
+ /* Accent Elements */
411
+ --accent: 240 4% 16%; /* Accent background */
412
+ --accent-foreground: 0 0% 98%; /* Accent text */
413
+
414
+ /* Destructive Elements */
415
+ --destructive: 0 62% 45%; /* Destructive action background */
416
+ --destructive-foreground: 240 10% 3.9%; /* Destructive action text */
417
+
418
+ /* UI Element Border and Focus */
419
+ --border: 240 4% 16%; /* Border color */
420
+ --input: var(--input-border-hsl); /* Input field border */
421
+ --ring: var(--input-ring-hsl); /* Focus ring color */
422
+
423
+ /* Sidebar Component Variables - Dark Mode */
424
+ --sidebar-background: 240 5.9% 10%; /* Maps to --bg-primary in dark mode */
425
+ --sidebar-foreground: 240 4.8% 95.9%; /* Maps to --text-primary in dark mode */
426
+ --sidebar-primary: 224.3 76.3% 48%; /* Maps to brand color in dark mode */
427
+ --sidebar-primary-foreground: 0 0% 100%; /* Maps to white */
428
+ --sidebar-accent: 240 3.7% 15.9%; /* Maps to --bg-tertiary in dark mode */
429
+ --sidebar-accent-foreground: 240 4.8% 95.9%; /* Maps to --text-primary in dark mode */
430
+ --sidebar-border: 240 3.7% 15.9%; /* Maps to --border-secondary in dark mode */
431
+ --sidebar-ring: 217.2 91.2% 59.8%; /* Maps to brand/ring color for focus */
432
+
433
+ /* Map sidebar variables to shadcn values for better compatibility in dark mode */
434
+ --sidebar-bg: hsl(var(--sidebar-background));
435
+ --sidebar-border: hsl(var(--sidebar-border));
436
+ --sidebar-item-bg-hover: hsl(var(--sidebar-accent));
437
+ --sidebar-item-bg-active: hsl(var(--sidebar-primary) / 0.2);
438
+ --sidebar-item-text-active: hsl(var(--sidebar-primary));
439
+
440
+ --bg-app-base: #0C0C0C; /* App foundation background (dark) */
441
+ }
442
+ }
443
+
444
+ /* ---------------------------------------- */
445
+ /* Component Specific Variables: Badge */
446
+ /* ---------------------------------------- */
447
+ :root {
448
+ /* Primary Badge (mimics Button Primary) */
449
+ --badge-bg-primary: var(--button-bg-primary);
450
+ --badge-text-primary: var(--button-text-primary);
451
+ --badge-border-primary: var(--button-border-primary);
452
+ --badge-bg-primary-hover: var(--button-bg-primary-hover);
453
+ --badge-text-primary-hover: var(--button-text-primary-hover);
454
+ --badge-border-primary-hover: var(--button-border-primary-hover);
455
+
456
+ /* Gray Badge (mimics Button Secondary) */
457
+ --badge-bg-gray: var(--button-bg-secondary);
458
+ --badge-text-gray: var(--button-text-secondary);
459
+ --badge-border-gray: var(--button-border-secondary);
460
+ --badge-bg-gray-hover: var(--button-bg-secondary-hover);
461
+ --badge-text-gray-hover: var(--button-text-secondary-hover);
462
+ --badge-border-gray-hover: var(--button-border-secondary-hover);
463
+
464
+ /* Destructive Badge (mimics Button Destructive) */
465
+ --badge-bg-destructive: var(--button-bg-destructive);
466
+ --badge-text-destructive: var(--button-text-destructive);
467
+ --badge-border-destructive: var(--button-border-destructive);
468
+ --badge-bg-destructive-hover: var(--button-bg-destructive-hover);
469
+ --badge-text-destructive-hover: var(--button-text-destructive-hover);
470
+ --badge-border-destructive-hover: var(--button-border-destructive-hover);
471
+
472
+ /* Ghost Badge (mimics Button Ghost) */
473
+ --badge-text-ghost: var(--button-text-ghost);
474
+ --badge-bg-ghost-hover: var(--button-bg-ghost-hover);
475
+ --badge-text-ghost-hover: var(--button-text-ghost-hover);
476
+ /* Ghost badges typically don't have a border in their resting state */
477
+ --badge-border-ghost: transparent;
478
+ --badge-border-ghost-hover: transparent;
479
+
480
+
481
+ /* Outline Badge (mimics Button Outline) */
482
+ --badge-bg-outline: transparent; /* Outline badges are typically transparent */
483
+ --badge-text-outline: var(--button-text-outline);
484
+ --badge-border-outline: var(--button-border-outline);
485
+ --badge-bg-outline-hover: var(--button-bg-outline-hover);
486
+ --badge-text-outline-hover: var(--button-text-outline-hover);
487
+ --badge-border-outline-hover: var(--button-border-outline-hover);
488
+ }
489
+
490
+ /* No specific dark theme overrides needed here if button variables correctly handle dark theme */
491
+
492
+ /* ---------------------------------------- */
493
+ /* Component Specific Variables: Checkbox */
494
+ /* ---------------------------------------- */
495
+ :root {
496
+ /* Unchecked State */
497
+ --checkbox-border: var(--border-primary);
498
+ --checkbox-bg: transparent; /* Typically transparent when unchecked */
499
+
500
+ /* Checked State */
501
+ --checkbox-bg-checked: var(--bg-brand-solid);
502
+ --checkbox-border-checked: var(--bg-brand-solid); /* Border often matches background when checked */
503
+ --checkbox-indicator-checked: var(--text-brand-primary); /* Checkmark color */
504
+
505
+ /* Hover State (Unchecked) - Can be subtle or rely on focus ring */
506
+ --checkbox-border-hover: var(--border-brand);
507
+
508
+ /* Hover State (Checked) */
509
+ --checkbox-bg-checked-hover: var(--bg-brand-solid); /* Might be same as checked or slightly darker/lighter */
510
+ --checkbox-border-checked-hover: var(--bg-brand-solid);
511
+
512
+ /* Focus State - Uses existing --ring for the ring color */
513
+
514
+ /* Disabled State (Unchecked) */
515
+ --checkbox-border-disabled: var(--border-disabled);
516
+ --checkbox-bg-disabled: var(--bg-disabled);
517
+
518
+ /* Disabled State (Checked) */
519
+ --checkbox-bg-disabled-checked: var(--border-disabled); /* Using border-disabled to appear grayed out */
520
+ --checkbox-border-disabled-checked: var(--border-disabled);
521
+ --checkbox-indicator-disabled-checked: var(--text-disabled);
522
+ }
523
+
524
+ .dark {
525
+ /* Unchecked State */
526
+ --checkbox-border: var(--border-primary); /* Uses dark theme variable */
527
+ --checkbox-bg: transparent;
528
+
529
+ /* Checked State */
530
+ --checkbox-bg-checked: var(--bg-brand-solid); /* Uses dark theme variable */
531
+ --checkbox-border-checked: var(--bg-brand-solid); /* Uses dark theme variable */
532
+ --checkbox-indicator-checked: var(--text-brand-primary); /* Uses dark theme variable */
533
+
534
+ /* Hover State (Unchecked) */
535
+ --checkbox-border-hover: var(--border-brand); /* Uses dark theme variable */
536
+
537
+ /* Hover State (Checked) */
538
+ --checkbox-bg-checked-hover: var(--bg-brand-solid); /* Uses dark theme variable */
539
+ --checkbox-border-checked-hover: var(--bg-brand-solid); /* Uses dark theme variable */
540
+
541
+ /* Disabled State (Unchecked) */
542
+ --checkbox-border-disabled: var(--border-disabled); /* Uses dark theme variable */
543
+ --checkbox-bg-disabled: var(--bg-disabled); /* Uses dark theme variable */
544
+
545
+ /* Disabled State (Checked) */
546
+ --checkbox-bg-disabled-checked: var(--border-disabled); /* Uses dark theme variable */
547
+ --checkbox-border-disabled-checked: var(--border-disabled); /* Uses dark theme variable */
548
+ --checkbox-indicator-disabled-checked: var(--text-disabled); /* Uses dark theme variable */
549
+ }
550
+
551
+ /* ---------------------------------------- */
552
+ /* Component Specific Variables: Radio */
553
+ /* ---------------------------------------- */
554
+ :root {
555
+ /* Unchecked State */
556
+ --radio-border: var(--border-primary);
557
+ --radio-bg: transparent;
558
+
559
+ /* Checked State */
560
+ --radio-border-checked: var(--border-brand); /* Often a brand color for the border when checked */
561
+ --radio-indicator-checked: var(--fg-brand-primary); /* The inner dot color */
562
+
563
+ /* Hover State (Unchecked) */
564
+ --radio-border-hover: var(--border-brand);
565
+
566
+ /* Hover State (Checked) - Indicator usually doesn't change on hover, border might */
567
+ --radio-border-checked-hover: var(--border-brand); /* Or a slightly different shade */
568
+
569
+ /* Focus State - Uses existing --ring */
570
+
571
+ /* Disabled State (Unchecked) */
572
+ --radio-border-disabled: var(--border-disabled);
573
+ --radio-bg-disabled: var(--bg-disabled);
574
+
575
+ /* Disabled State (Checked) */
576
+ --radio-border-disabled-checked: var(--border-disabled);
577
+ --radio-indicator-disabled-checked: var(--text-disabled);
578
+ }
579
+
580
+ .dark {
581
+ /* Unchecked State */
582
+ --radio-border: var(--border-primary);
583
+ --radio-bg: transparent;
584
+
585
+ /* Checked State */
586
+ --radio-border-checked: var(--border-brand);
587
+ --radio-indicator-checked: var(--fg-brand-primary);
588
+
589
+ /* Hover State (Unchecked) */
590
+ --radio-border-hover: var(--border-brand);
591
+
592
+ /* Hover State (Checked) */
593
+ --radio-border-checked-hover: var(--border-brand);
594
+
595
+ /* Disabled State (Unchecked) */
596
+ --radio-border-disabled: var(--border-disabled);
597
+ --radio-bg-disabled: var(--bg-disabled);
598
+
599
+ /* Disabled State (Checked) */
600
+ --radio-border-disabled-checked: var(--border-disabled);
601
+ --radio-indicator-disabled-checked: var(--text-disabled);
602
+ }
603
+
604
+ @layer components {
605
+ /**
606
+ * Component Utilities
607
+ *
608
+ * Define reusable utility classes for common component styles.
609
+ * These can be used to apply consistent styling across components.
610
+ */
611
+
612
+ /* Example utility classes - add your own as needed */
613
+ .text-brand-heading {
614
+ @apply text-lg font-semibold text-[var(--text-brand-primary)];
615
+ }
616
+
617
+ .card-highlight {
618
+ @apply border-[var(--border-brand)] bg-[var(--bg-brand-primary)];
619
+ }
620
+
621
+ .alert-error {
622
+ @apply bg-[var(--bg-error-secondary)] border-[var(--border-error)] text-[var(--text-error-primary)];
623
+ }
624
+
625
+ .alert-warning {
626
+ @apply bg-[var(--bg-warning-secondary)] border-[var(--border-warning)] text-[var(--text-warning-primary)];
627
+ }
628
+
629
+ .alert-success {
630
+ @apply bg-[var(--bg-success-secondary)] border-[var(--border-success)] text-[var(--text-success-primary)];
631
+ }
632
+
633
+ .alert-brand {
634
+ @apply bg-[var(--bg-brand-secondary)] border-[var(--border-brand)] text-[var(--text-brand-primary)];
635
+ }
636
+
637
+ /* Styling for the SidebarMenu (ul) component from sidebar.tsx */
638
+ /* The component itself applies cn("space-y-1", className) */
639
+ /* We target it by assuming it might get a specific class or by being a descendant */
640
+ .float-sidebar-menu {
641
+ /* @apply space-y-1; /* This is already on the component */
642
+ @apply px-2; /* This is 8px padding on x-axis for the UL */
643
+ /* For spacing between ULs, this class would need to be on each UL */
644
+ /* Alternatively, manage spacing via elements between ULs */
645
+ }
646
+
647
+ /* Sidebar Menu Button */
648
+ .float-sidebar-menu-button {
649
+ /* Padding is now p-2 (0.5rem) from SidebarMenuButton component in sidebar.tsx */
650
+ /* Base styles are mostly from the component, this class is for potential overrides or specific child targeting */
651
+ @apply flex items-center w-full text-[14px] rounded-md h-9; /* h-9 might need adjustment based on p-2 */
652
+ @apply bg-[var(--sidebar-item-bg)] border border-transparent;
653
+ @apply transition-all duration-200;
654
+ }
655
+
656
+ /* Icon within the button */
657
+ .float-sidebar-menu-button-icon {
658
+ @apply h-5 w-5 text-[var(--sidebar-item-icon)];
659
+ /* margin-right: 8px !important; /* REMOVED - Rely on gap-2 from parent button */
660
+ @apply transition-colors duration-200;
661
+ }
662
+
663
+ .float-sidebar-menu-button:hover .float-sidebar-menu-button-icon {
664
+ color: var(--sidebar-item-icon-hover) !important;
665
+ }
666
+
667
+ /* Text within the button */
668
+ .float-sidebar-menu-button-text {
669
+ @apply truncate font-normal text-[var(--text-secondary)];
670
+ font-size: 14px;
671
+ @apply transition-colors duration-200;
672
+ }
673
+
674
+ .float-sidebar-menu-button:hover .float-sidebar-menu-button-text {
675
+ color: var(--text-primary);
676
+ }
677
+
678
+ /* Section Label - for spacing between menu groups */
679
+ .float-sidebar-section-label {
680
+ @apply px-[18px] pt-8 pb-2 text-[13px] font-medium text-[var(--sidebar-group-text)];
681
+ /* pt-8 (32px) to create space above it (below previous UL), pb-2 for space below label before next UL */
682
+ }
683
+
684
+ /* Collapsed state */
685
+ .float-sidebar-root[data-state="collapsed"] {
686
+ width: var(--sidebar-width-collapsed, 64px) !important;
687
+ }
688
+ .float-sidebar-root[data-state="collapsed"] .float-sidebar-menu-button-icon {
689
+ margin-right: 0 !important;
690
+ }
691
+ .float-sidebar-root[data-state="collapsed"] .float-sidebar-menu-button-text {
692
+ @apply hidden;
693
+ }
694
+ }
695
+
696
+ /* Remove any duplicated .float-sidebar-root or .float-sidebar-menu-button:hover from the bottom of this file if they exist */
697
+
698
+ /* End of file */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tydavidson/design-system",
3
- "version": "1.2.2",
3
+ "version": "1.2.3",
4
4
  "description": "Float Design System with email components and theme system",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -26,7 +26,8 @@
26
26
  "import": "./dist/tokens/index.mjs",
27
27
  "require": "./dist/tokens/index.js"
28
28
  },
29
- "./themes/theme.css": "./dist/themes/theme.css"
29
+ "./themes/theme.css": "./dist/themes/theme.css",
30
+ "./dist/styles/globals.css": "./dist/styles/globals.css"
30
31
  },
31
32
  "files": [
32
33
  "dist",
@@ -57,7 +58,8 @@
57
58
  "build-storybook": "storybook build",
58
59
  "build:lib": "tsup",
59
60
  "build:email": "tsc --project tsconfig.email.json",
60
- "build:all": "npm run build:lib && npm run build:email",
61
+ "build:all": "npm run build:lib && npm run build:email && npm run copy-css",
62
+ "copy-css": "mkdir -p dist/styles && cp src/app/globals.css dist/styles/globals.css",
61
63
  "prepublishOnly": "npm run build:all",
62
64
  "clean": "rm -rf dist",
63
65
  "dev:lib": "npm run build:all -- --watch"