@machinemetrics/mm-react-components 0.2.3-2 → 0.2.3-20

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 (160) hide show
  1. package/README.md +89 -30
  2. package/agent-docs/agent-documentation-reference.md +364 -0
  3. package/agent-docs/ai-agent-guide.md +558 -0
  4. package/agent-docs/ai-agent-init-guide.md +465 -0
  5. package/agent-docs/chakra-migration-readme.md +265 -0
  6. package/agent-docs/chakra-migration-troubleshooting.md +649 -0
  7. package/agent-docs/component-mapping-reference.md +466 -0
  8. package/agent-docs/init-readme.md +283 -0
  9. package/agent-docs/init-troubleshooting.md +550 -0
  10. package/agent-docs/setup-reference.md +365 -0
  11. package/dist/App.d.ts.map +1 -1
  12. package/dist/README.md +89 -30
  13. package/dist/components/ui/alert-dialog.d.ts +15 -0
  14. package/dist/components/ui/alert-dialog.d.ts.map +1 -0
  15. package/dist/components/ui/alert.d.ts +10 -0
  16. package/dist/components/ui/alert.d.ts.map +1 -0
  17. package/dist/components/ui/avatar.d.ts +7 -0
  18. package/dist/components/ui/avatar.d.ts.map +1 -0
  19. package/dist/components/ui/breadcrumb.d.ts +12 -0
  20. package/dist/components/ui/breadcrumb.d.ts.map +1 -0
  21. package/dist/components/ui/button.d.ts.map +1 -1
  22. package/dist/components/ui/card.d.ts +10 -0
  23. package/dist/components/ui/card.d.ts.map +1 -0
  24. package/dist/components/ui/chart.d.ts +41 -0
  25. package/dist/components/ui/chart.d.ts.map +1 -0
  26. package/dist/components/ui/command.d.ts +19 -0
  27. package/dist/components/ui/command.d.ts.map +1 -0
  28. package/dist/components/ui/data-table/TableView.d.ts.map +1 -1
  29. package/dist/components/ui/data-table/cards/RowCard.d.ts.map +1 -1
  30. package/dist/components/ui/data-table/index.d.ts +3 -1
  31. package/dist/components/ui/data-table/index.d.ts.map +1 -1
  32. package/dist/components/ui/data-table/parts/BatchActionsToolbar.d.ts +6 -0
  33. package/dist/components/ui/data-table/parts/BatchActionsToolbar.d.ts.map +1 -0
  34. package/dist/components/ui/data-table/parts/CellContent.d.ts +7 -0
  35. package/dist/components/ui/data-table/parts/CellContent.d.ts.map +1 -0
  36. package/dist/components/ui/data-table/parts/ColGroup.d.ts +7 -0
  37. package/dist/components/ui/data-table/parts/ColGroup.d.ts.map +1 -0
  38. package/dist/components/ui/data-table/parts/SortableHeader.d.ts +13 -0
  39. package/dist/components/ui/data-table/parts/SortableHeader.d.ts.map +1 -0
  40. package/dist/components/ui/data-table/parts/TableBody.d.ts +11 -0
  41. package/dist/components/ui/data-table/parts/TableBody.d.ts.map +1 -0
  42. package/dist/components/ui/data-table/parts/TableHeader.d.ts +15 -0
  43. package/dist/components/ui/data-table/parts/TableHeader.d.ts.map +1 -0
  44. package/dist/components/ui/data-table/toolbar/DataTableToolbar.d.ts.map +1 -1
  45. package/dist/components/ui/data-table/types.d.ts +18 -10
  46. package/dist/components/ui/data-table/types.d.ts.map +1 -1
  47. package/dist/components/ui/data-table/utils.d.ts +2 -0
  48. package/dist/components/ui/data-table/utils.d.ts.map +1 -1
  49. package/dist/components/ui/date-picker.d.ts +36 -0
  50. package/dist/components/ui/date-picker.d.ts.map +1 -0
  51. package/dist/components/ui/dropdown-menu.d.ts +1 -1
  52. package/dist/components/ui/dropdown-menu.d.ts.map +1 -1
  53. package/dist/components/ui/form.d.ts +25 -0
  54. package/dist/components/ui/form.d.ts.map +1 -0
  55. package/dist/components/ui/hero-metric-card/HeroMetricCard.d.ts +4 -0
  56. package/dist/components/ui/hero-metric-card/HeroMetricCard.d.ts.map +1 -0
  57. package/dist/components/ui/hero-metric-card/HeroMetricCardItem.d.ts +4 -0
  58. package/dist/components/ui/hero-metric-card/HeroMetricCardItem.d.ts.map +1 -0
  59. package/dist/components/ui/hero-metric-card/constants.d.ts +13 -0
  60. package/dist/components/ui/hero-metric-card/constants.d.ts.map +1 -0
  61. package/dist/components/ui/hero-metric-card/grid.d.ts +4 -0
  62. package/dist/components/ui/hero-metric-card/grid.d.ts.map +1 -0
  63. package/dist/components/ui/hero-metric-card/hooks.d.ts +6 -0
  64. package/dist/components/ui/hero-metric-card/hooks.d.ts.map +1 -0
  65. package/dist/components/ui/hero-metric-card/index.d.ts +5 -0
  66. package/dist/components/ui/hero-metric-card/index.d.ts.map +1 -0
  67. package/dist/components/ui/hero-metric-card/parsing.d.ts +11 -0
  68. package/dist/components/ui/hero-metric-card/parsing.d.ts.map +1 -0
  69. package/dist/components/ui/hero-metric-card/refs.d.ts +3 -0
  70. package/dist/components/ui/hero-metric-card/refs.d.ts.map +1 -0
  71. package/dist/components/ui/hero-metric-card/trend.d.ts +4 -0
  72. package/dist/components/ui/hero-metric-card/trend.d.ts.map +1 -0
  73. package/dist/components/ui/hero-metric-card/types.d.ts +60 -0
  74. package/dist/components/ui/hero-metric-card/types.d.ts.map +1 -0
  75. package/dist/components/ui/hero-metric-card/utils.d.ts +10 -0
  76. package/dist/components/ui/hero-metric-card/utils.d.ts.map +1 -0
  77. package/dist/components/ui/pagination.d.ts +14 -0
  78. package/dist/components/ui/pagination.d.ts.map +1 -0
  79. package/dist/components/ui/progress.d.ts +1 -0
  80. package/dist/components/ui/progress.d.ts.map +1 -1
  81. package/dist/components/ui/separator.d.ts +5 -0
  82. package/dist/components/ui/separator.d.ts.map +1 -0
  83. package/dist/components/ui/simple-pagination.d.ts +8 -0
  84. package/dist/components/ui/simple-pagination.d.ts.map +1 -0
  85. package/dist/components/ui/sonner.d.ts +4 -0
  86. package/dist/components/ui/sonner.d.ts.map +1 -0
  87. package/dist/components/ui/spinner-carbide.d.ts +5 -0
  88. package/dist/components/ui/spinner-carbide.d.ts.map +1 -0
  89. package/dist/components/ui/spinner.d.ts +4 -0
  90. package/dist/components/ui/spinner.d.ts.map +1 -0
  91. package/dist/components/ui/textarea.d.ts +4 -0
  92. package/dist/components/ui/textarea.d.ts.map +1 -0
  93. package/dist/docs/GETTING_STARTED.md +13 -5
  94. package/dist/index.d.ts +22 -0
  95. package/dist/index.d.ts.map +1 -1
  96. package/dist/lib/mm-react-components.css +1 -0
  97. package/dist/main.d.ts +1 -2
  98. package/dist/main.d.ts.map +1 -1
  99. package/dist/mm-react-components.es.js +16536 -7051
  100. package/dist/mm-react-components.es.js.map +1 -1
  101. package/dist/mm-react-components.umd.js +28 -11
  102. package/dist/mm-react-components.umd.js.map +1 -1
  103. package/dist/preview/AlertDialogPreview.d.ts +2 -0
  104. package/dist/preview/AlertDialogPreview.d.ts.map +1 -0
  105. package/dist/preview/AlertPreview.d.ts +2 -0
  106. package/dist/preview/AlertPreview.d.ts.map +1 -0
  107. package/dist/preview/AvatarPreview.d.ts +2 -0
  108. package/dist/preview/AvatarPreview.d.ts.map +1 -0
  109. package/dist/preview/BreadcrumbPreview.d.ts +2 -0
  110. package/dist/preview/BreadcrumbPreview.d.ts.map +1 -0
  111. package/dist/preview/CardPreview.d.ts +2 -0
  112. package/dist/preview/CardPreview.d.ts.map +1 -0
  113. package/dist/preview/ChartPreview.d.ts +2 -0
  114. package/dist/preview/ChartPreview.d.ts.map +1 -0
  115. package/dist/preview/ColorsPreview.d.ts +7 -0
  116. package/dist/preview/ColorsPreview.d.ts.map +1 -0
  117. package/dist/preview/CommandPreview.d.ts +2 -0
  118. package/dist/preview/CommandPreview.d.ts.map +1 -0
  119. package/dist/preview/DataTablePreview.d.ts.map +1 -1
  120. package/dist/preview/DatePickerPreview.d.ts +2 -0
  121. package/dist/preview/DatePickerPreview.d.ts.map +1 -0
  122. package/dist/preview/DateRangePickerPreview.d.ts.map +1 -1
  123. package/dist/preview/FormPreview.d.ts +2 -0
  124. package/dist/preview/FormPreview.d.ts.map +1 -0
  125. package/dist/preview/HeroMetricCardPreview.d.ts +2 -0
  126. package/dist/preview/HeroMetricCardPreview.d.ts.map +1 -0
  127. package/dist/preview/PaginationPreview.d.ts +2 -0
  128. package/dist/preview/PaginationPreview.d.ts.map +1 -0
  129. package/dist/preview/SeparatorPreview.d.ts +2 -0
  130. package/dist/preview/SeparatorPreview.d.ts.map +1 -0
  131. package/dist/preview/SonnerPreview.d.ts +2 -0
  132. package/dist/preview/SonnerPreview.d.ts.map +1 -0
  133. package/dist/preview/SpinnerPreview.d.ts +2 -0
  134. package/dist/preview/SpinnerPreview.d.ts.map +1 -0
  135. package/dist/preview/TextareaPreview.d.ts +2 -0
  136. package/dist/preview/TextareaPreview.d.ts.map +1 -0
  137. package/dist/scripts/chakra-to-shadcn-migrator/chakra-to-shadcn.config.json +577 -0
  138. package/dist/scripts/chakra-to-shadcn-migrator/lib/args.js +63 -0
  139. package/dist/scripts/chakra-to-shadcn-migrator/lib/colors.js +14 -0
  140. package/dist/scripts/chakra-to-shadcn-migrator/lib/config.js +15 -0
  141. package/dist/scripts/chakra-to-shadcn-migrator/lib/deps.js +125 -0
  142. package/dist/scripts/chakra-to-shadcn-migrator/lib/file-io.js +44 -0
  143. package/dist/scripts/chakra-to-shadcn-migrator/lib/render.js +89 -0
  144. package/dist/scripts/chakra-to-shadcn-migrator/lib/transform.js +550 -0
  145. package/dist/scripts/chakra-to-shadcn-migrator/package.json +11 -0
  146. package/dist/scripts/init.cjs +216 -0
  147. package/dist/scripts/npx-init.cjs +418 -0
  148. package/dist/tailwind.base.config.js +89 -0
  149. package/dist/themes/carbide.css +369 -91
  150. package/package.json +40 -10
  151. package/src/index.css +111 -498
  152. package/dist/index.css +0 -536
  153. package/dist/themes/base.css +0 -536
  154. package/dist/themes/complete.css +0 -8
  155. package/scripts/README.md +0 -171
  156. package/scripts/chakra-to-shadcn-migrator/README.md +0 -107
  157. package/src/themes/base.css +0 -536
  158. package/src/themes/carbide.css +0 -1257
  159. package/src/themes/complete.css +0 -8
  160. /package/{scripts → dist/scripts}/chakra-to-shadcn-migrator/bin/chakra-to-shadcn.js +0 -0
@@ -1,7 +1,154 @@
1
+ /* Note: Font imports are now handled in src/lib/styles.css to avoid @import ordering issues */
2
+
3
+ :root {
4
+ --radius: 0.5rem;
5
+ --radius-sm: 4px;
6
+ --radius-md: calc(var(--radius) - 2px);
7
+ --radius-lg: var(--radius);
8
+ --radius-xl: calc(var(--radius) + 4px);
9
+ --background: oklch(1 0 0);
10
+ --foreground: oklch(0.145 0 0);
11
+ --card: oklch(1 0 0);
12
+ --card-foreground: oklch(0.145 0 0);
13
+ --popover: oklch(1 0 0);
14
+ --popover-foreground: oklch(0.145 0 0);
15
+ --primary: oklch(0.205 0 0);
16
+ --primary-foreground: oklch(0.985 0 0);
17
+ --secondary: oklch(0.97 0 0);
18
+ --secondary-foreground: oklch(0.205 0 0);
19
+ --muted: oklch(0.97 0 0);
20
+ --muted-foreground: oklch(0.556 0 0);
21
+ --accent: oklch(0.97 0 0);
22
+ --accent-foreground: oklch(0.205 0 0);
23
+ --destructive: oklch(0.577 0.245 27.325);
24
+ --border: oklch(0.922 0 0);
25
+ --input: oklch(0.922 0 0);
26
+ --ring: oklch(0.708 0 0);
27
+ /* Chart colors are defined below via design tokens (indigo/teal/green/orange/purple). */
28
+ --sidebar: oklch(0.985 0 0);
29
+ --sidebar-foreground: oklch(0.145 0 0);
30
+ --sidebar-primary: oklch(0.205 0 0);
31
+ --sidebar-primary-foreground: oklch(0.985 0 0);
32
+ --sidebar-accent: oklch(0.97 0 0);
33
+ --sidebar-accent-foreground: oklch(0.205 0 0);
34
+ --sidebar-border: oklch(0.922 0 0);
35
+ --sidebar-ring: oklch(0.708 0 0);
36
+
37
+ /* Overlay token (base) */
38
+ --overlay-bg: rgba(0, 0, 0, 0.8);
39
+
40
+ /* --- Typography tokens (shadcn/ui reference) --- */
41
+ --font-sans:
42
+ ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI',
43
+ Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif,
44
+ 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
45
+ --font-mono:
46
+ ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono',
47
+ 'Courier New', monospace;
48
+ --font-heading: var(--font-sans);
49
+ --font-body: var(--font-sans);
50
+
51
+ --text-base-size: 1rem; /* 16px */
52
+ --text-sm-size: 0.875rem; /* 14px */
53
+ --text-lg-size: 1.125rem; /* 18px */
54
+
55
+ --font-weight-normal: 400;
56
+ --font-weight-medium: 500;
57
+ --font-weight-bold: 700;
58
+
59
+ --leading-tight: 1.25;
60
+ --leading-normal: 1.5;
61
+
62
+ --tracking-tight: -0.015em;
63
+ --tracking-normal: 0;
64
+ }
65
+
66
+ .dark {
67
+ --background: oklch(0.145 0 0);
68
+ --foreground: oklch(0.985 0 0);
69
+ --card: oklch(0.205 0 0);
70
+ --card-foreground: oklch(0.985 0 0);
71
+ --popover: oklch(0.205 0 0);
72
+ --popover-foreground: oklch(0.985 0 0);
73
+ --primary: oklch(0.922 0 0);
74
+ --primary-foreground: oklch(0.205 0 0);
75
+ --secondary: oklch(0.269 0 0);
76
+ --secondary-foreground: oklch(0.985 0 0);
77
+ --muted: oklch(0.269 0 0);
78
+ --muted-foreground: oklch(0.708 0 0);
79
+ --accent: oklch(0.269 0 0);
80
+ --accent-foreground: oklch(0.985 0 0);
81
+ --destructive: oklch(0.704 0.191 22.216);
82
+ --border: oklch(1 0 0 / 10%);
83
+ --input: oklch(1 0 0 / 15%);
84
+ --ring: oklch(0.556 0 0);
85
+ /* Removed redundant hard-coded chart swatches; values sourced via token mappings below */
86
+ --sidebar: oklch(0.205 0 0);
87
+ --sidebar-foreground: oklch(0.985 0 0);
88
+ --sidebar-primary: oklch(0.488 0.243 264.376);
89
+ --sidebar-primary-foreground: oklch(0.985 0 0);
90
+ --sidebar-accent: oklch(0.269 0 0);
91
+ --sidebar-accent-foreground: oklch(0.985 0 0);
92
+ --sidebar-border: oklch(1 0 0 / 10%);
93
+ --sidebar-ring: oklch(0.556 0 0);
94
+ }
95
+
96
+ /* Collapsible animations using Radix-provided height variable */
97
+ @keyframes mm-collapsible-down {
98
+ from {
99
+ height: 0;
100
+ opacity: 0;
101
+ }
102
+ to {
103
+ height: var(--radix-collapsible-content-height);
104
+ opacity: 1;
105
+ }
106
+ }
107
+
108
+ @keyframes mm-collapsible-up {
109
+ from {
110
+ height: var(--radix-collapsible-content-height);
111
+ opacity: 1;
112
+ }
113
+ to {
114
+ height: 0;
115
+ opacity: 0;
116
+ }
117
+ }
118
+
119
+ /* Accordion animations (core theme) */
120
+ @keyframes accordion-down {
121
+ from {
122
+ height: 0;
123
+ }
124
+ to {
125
+ height: var(--radix-accordion-content-height);
126
+ }
127
+ }
128
+
129
+ @keyframes accordion-up {
130
+ from {
131
+ height: var(--radix-accordion-content-height);
132
+ }
133
+ to {
134
+ height: 0;
135
+ }
136
+ }
137
+
138
+ /* JS-driven height animation now handles height. Keep only overflow hidden. */
139
+ [data-slot='collapsible-content'] {
140
+ overflow: hidden;
141
+ }
142
+ /* Radix sets hidden on closed when forceMount is used; override to enable CSS animation */
143
+ [data-slot='collapsible-content'][hidden] {
144
+ display: block !important;
145
+ }
146
+ /* JS controls height now; avoid conflicting state heights */
147
+
1
148
  .carbide {
2
149
  /* =============================
3
- TYPOGRAPHY
4
- ============================= */
150
+ TYPOGRAPHY
151
+ ============================= */
5
152
 
6
153
  /* Core Fonts */
7
154
  --font-sans:
@@ -17,8 +164,8 @@
17
164
  --font-weight-bold: 600;
18
165
 
19
166
  /* =============================
20
- COLORS
21
- ============================= */
167
+ COLORS
168
+ ============================= */
22
169
 
23
170
  /* Brand */
24
171
  --brand-green: #15a500;
@@ -193,13 +340,13 @@
193
340
 
194
341
  /* =============================
195
342
  SURFACES (GENERIC)
196
- ============================= */
343
+ ============================= */
197
344
  /* Neutral control rail/background surface used across components */
198
345
  --surface-neutral: var(--grey-300);
199
346
 
200
347
  /* =============================
201
348
  TABLIST
202
- ============================= */
349
+ ============================= */
203
350
  --tablist-bg: var(--grey-200);
204
351
  --tablist-fg: var(--grey-700);
205
352
  --tablist-active-bg: var(--grey-00);
@@ -208,14 +355,14 @@
208
355
 
209
356
  /* =============================
210
357
  TABLE HEADER
211
- ============================= */
358
+ ============================= */
212
359
  --tablehead-bg: var(--muted);
213
360
  --tablehead-fg: var(--foreground);
214
361
  --tablehead-border: var(--border);
215
362
 
216
363
  /* =============================
217
364
  BUTTONS
218
- ============================= */
365
+ ============================= */
219
366
  --button-secondary-bg: transparent;
220
367
  --button-secondary-border: var(--grey-700);
221
368
  --button-secondary-hover-bg: var(--grey-150);
@@ -225,85 +372,49 @@
225
372
  --button-destructive-hover-bg: var(--red-700);
226
373
  --button-outline-bg: var(--bg-input);
227
374
 
375
+ /* Spinner tokens (Carbide scope) */
376
+ --spinner-foreground: var(--indigo-600);
377
+ --spinner-background: var(--grey-300);
378
+
228
379
  /* Table action trigger hover (distinct from row hover) */
229
380
  --table-action-hover-bg: var(--grey-300);
230
381
 
231
382
  /* Overlay */
232
- --overlay-bg: rgba(0, 0, 0, 0.8);
233
- --overlay-border: #353b48;
383
+ /* --overlay-bg is already defined in :root; keep only border here. */
384
+ --overlay-border: var(--grey-800);
234
385
 
235
386
  /* =============================
236
387
  INPUT/OUTLINE/OVERLAY SURFACES
388
+ ============================= */
389
+ --input-surface-bg: var(--grey-900);
390
+ --input-surface-border: var(--grey-800);
391
+ --input-surface-hover-bg: var(--grey-850);
392
+
393
+ /* =============================
394
+ CODE (TYPOGRAPHY TOKENS)
237
395
  ============================= */
238
- --input-surface-bg: #202734;
239
- --input-surface-border: #2d3748;
240
- --input-surface-hover-bg: #242c3a;
396
+ --code-bg: color-mix(in srgb, var(--brand-green) 18%, transparent);
397
+ --code-fg: var(--brand-green);
398
+ --code-border: transparent;
241
399
  }
242
400
 
243
401
  /* =============================
244
402
  BADGE: TYPOGRAPHY
245
- ============================= */
403
+ ============================= */
246
404
  .carbide [data-slot='badge'] {
247
405
  font-weight: 400;
248
406
  }
249
407
 
250
408
  /* =============================
251
409
  KNOWLEDGE HUB STATUS BADGES
252
- ============================= */
253
- .carbide .mmc-khub [data-slot='badge'] {
254
- border-radius: 9999px;
255
- }
256
-
257
- .carbide .mmc-khub [data-slot='badge'][data-status='Waiting'] {
258
- background-color: var(--indigo-200);
259
- color: var(--grey-700);
260
- border-color: var(--indigo-200);
261
- }
262
-
263
- .carbide .mmc-khub [data-slot='badge'][data-status='Uploading'],
264
- .carbide .mmc-khub [data-slot='badge'][data-status='Processing'] {
265
- background-color: transparent;
266
- color: var(--grey-700);
267
- border-color: transparent;
268
- padding-inline: 0;
269
- }
270
-
271
- .carbide .mmc-khub [data-slot='badge'][data-status='Failed'],
272
- .carbide .mmc-khub [data-slot='badge'][data-status='Upload Failed'],
273
- .carbide .mmc-khub [data-slot='badge'][data-status='Processing Failed'] {
274
- background-color: var(--red-200);
275
- color: var(--grey-700);
276
- border-color: var(--red-200);
277
- }
278
-
410
+ ============================= */
411
+ /* Keep intentional lighter tone for Processed in Knowledge Hub */
279
412
  .carbide .mmc-khub [data-slot='badge'][data-status='Processed'] {
280
413
  background-color: var(--grey-200);
281
414
  color: var(--grey-500);
282
415
  border-color: var(--grey-200);
283
416
  }
284
417
 
285
- .carbide.dark .mmc-khub [data-slot='badge'][data-status='Waiting'] {
286
- background-color: var(--indigo-700);
287
- color: var(--grey-00);
288
- border-color: var(--indigo-700);
289
- }
290
-
291
- .carbide.dark .mmc-khub [data-slot='badge'][data-status='Uploading'],
292
- .carbide.dark .mmc-khub [data-slot='badge'][data-status='Processing'] {
293
- background-color: transparent;
294
- color: var(--grey-200);
295
- border-color: transparent;
296
- padding-inline: 0;
297
- }
298
-
299
- .carbide.dark .mmc-khub [data-slot='badge'][data-status='Failed'],
300
- .carbide.dark .mmc-khub [data-slot='badge'][data-status='Upload Failed'],
301
- .carbide.dark .mmc-khub [data-slot='badge'][data-status='Processing Failed'] {
302
- background-color: var(--red-700);
303
- color: var(--grey-00);
304
- border-color: var(--red-700);
305
- }
306
-
307
418
  .carbide.dark .mmc-khub [data-slot='badge'][data-status='Processed'] {
308
419
  background-color: var(--grey-750);
309
420
  color: var(--grey-300);
@@ -312,7 +423,7 @@
312
423
 
313
424
  /* =============================
314
425
  BUTTON: ICON SIZE DEFAULT
315
- ============================= */
426
+ ============================= */
316
427
  /* Default all button icons to 16px; :where() keeps specificity low so consumers can override */
317
428
  .carbide [data-slot='button'] svg {
318
429
  width: 16px;
@@ -321,7 +432,7 @@
321
432
 
322
433
  /* =============================
323
434
  BUTTON VARIANTS (LIGHT)
324
- ============================= */
435
+ ============================= */
325
436
  .carbide [data-slot='button'][data-variant='default']:not([disabled]) {
326
437
  background-color: var(--primary);
327
438
  color: var(--primary-foreground);
@@ -330,11 +441,28 @@
330
441
  background-color: var(--button-primary-hover-bg);
331
442
  }
332
443
 
333
- .carbide [data-slot='button'][data-variant='outline']:not([disabled]) {
444
+ .carbide [data-slot='button'][data-variant='outline']:not([disabled]),
445
+ .carbide [data-slot='popover-trigger'][data-variant='outline']:not([disabled]),
446
+ .carbide
447
+ [data-slot='dropdown-menu-trigger'][data-variant='outline']:not([disabled]),
448
+ .carbide
449
+ [data-slot='date-picker-trigger'][data-variant='outline']:not([disabled]),
450
+ .carbide [data-variant='outline']:not([disabled]) {
334
451
  background-color: var(--button-outline-bg);
335
452
  border-color: var(--button-outline-border);
336
453
  }
337
- .carbide [data-slot='button'][data-variant='outline']:not([disabled]):hover {
454
+ .carbide [data-slot='button'][data-variant='outline']:not([disabled]):hover,
455
+ .carbide
456
+ [data-slot='popover-trigger'][data-variant='outline']:not([disabled]):hover,
457
+ .carbide
458
+ [data-slot='dropdown-menu-trigger'][data-variant='outline']:not(
459
+ [disabled]
460
+ ):hover,
461
+ .carbide
462
+ [data-slot='date-picker-trigger'][data-variant='outline']:not(
463
+ [disabled]
464
+ ):hover,
465
+ .carbide [data-variant='outline']:not([disabled]):hover {
338
466
  background-color: var(--button-outline-hover-bg);
339
467
  }
340
468
 
@@ -435,6 +563,13 @@
435
563
  --tablehead-fg: var(--foreground);
436
564
  --tablehead-border: var(--border);
437
565
 
566
+ /* =============================
567
+ CODE (TYPOGRAPHY TOKENS - DARK)
568
+ ============================= */
569
+ --code-bg: color-mix(in srgb, var(--brand-green) 20%, transparent);
570
+ --code-fg: var(--brand-green);
571
+ --code-border: transparent;
572
+
438
573
  /* =============================
439
574
  BUTTONS
440
575
  ============================= */
@@ -451,13 +586,17 @@
451
586
  --button-destructive-hover-bg: var(--red-500);
452
587
  --button-outline-bg: color-mix(in srgb, var(--bg-input) 30%, transparent);
453
588
 
589
+ /* Spinner tokens (Carbide scope, dark) */
590
+ --spinner-foreground: var(--grey-00);
591
+ --spinner-background: color-mix(in srgb, var(--grey-00) 25%, transparent);
592
+
454
593
  /* Table action trigger hover (distinct from row hover) */
455
594
  --table-action-hover-bg: var(--grey-800);
456
595
  }
457
596
 
458
597
  /* =============================
459
598
  BUTTON VARIANTS (DARK)
460
- ============================= */
599
+ ============================= */
461
600
  .carbide.dark [data-slot='button'][data-variant='default']:not([disabled]) {
462
601
  background-color: var(--primary);
463
602
  color: var(--primary-foreground);
@@ -467,12 +606,30 @@
467
606
  background-color: var(--button-primary-hover-bg);
468
607
  }
469
608
 
470
- .carbide.dark [data-slot='button'][data-variant='outline']:not([disabled]) {
609
+ .carbide.dark [data-slot='button'][data-variant='outline']:not([disabled]),
610
+ .carbide.dark
611
+ [data-slot='popover-trigger'][data-variant='outline']:not([disabled]),
612
+ .carbide.dark
613
+ [data-slot='dropdown-menu-trigger'][data-variant='outline']:not([disabled]),
614
+ .carbide.dark
615
+ [data-slot='date-picker-trigger'][data-variant='outline']:not([disabled]),
616
+ .carbide.dark [data-variant='outline']:not([disabled]) {
471
617
  background-color: var(--button-outline-bg);
472
618
  border-color: var(--button-outline-border);
473
619
  }
474
620
  .carbide.dark
475
- [data-slot='button'][data-variant='outline']:not([disabled]):hover {
621
+ [data-slot='button'][data-variant='outline']:not([disabled]):hover,
622
+ .carbide.dark
623
+ [data-slot='popover-trigger'][data-variant='outline']:not([disabled]):hover,
624
+ .carbide.dark
625
+ [data-slot='dropdown-menu-trigger'][data-variant='outline']:not(
626
+ [disabled]
627
+ ):hover,
628
+ .carbide.dark
629
+ [data-slot='date-picker-trigger'][data-variant='outline']:not(
630
+ [disabled]
631
+ ):hover,
632
+ .carbide.dark [data-variant='outline']:not([disabled]):hover {
476
633
  background-color: var(--button-outline-hover-bg);
477
634
  }
478
635
 
@@ -514,7 +671,7 @@
514
671
 
515
672
  /* =============================
516
673
  INPUT
517
- ============================= */
674
+ ============================= */
518
675
  .carbide [data-slot='input'] {
519
676
  background-color: var(--bg-input);
520
677
  border-color: var(--border-input);
@@ -575,7 +732,7 @@
575
732
 
576
733
  /* =============================
577
734
  SELECT
578
- ============================= */
735
+ ============================= */
579
736
  .carbide [data-slot='select-trigger'] {
580
737
  background-color: var(--bg-input);
581
738
  border-color: var(--border-input);
@@ -646,16 +803,30 @@
646
803
  color: var(--muted-foreground);
647
804
  }
648
805
 
806
+ .carbide [data-slot='select-content'] {
807
+ background-color: var(--popover);
808
+ color: var(--popover-foreground);
809
+ border-color: var(--border);
810
+ box-shadow: 0 6px 24px rgba(15, 23, 42, 0.12);
811
+ }
812
+ .carbide.dark [data-slot='select-content'] {
813
+ background-color: var(--popover);
814
+ color: var(--popover-foreground);
815
+ border-color: var(--border);
816
+ }
817
+
649
818
  /* =============================
650
819
  DROPDOWN MENU
651
- ============================= */
652
- .carbide [data-slot='dropdown-menu-content'] {
820
+ ============================= */
821
+ .carbide [data-slot='dropdown-menu-content'],
822
+ .carbide [data-slot='dropdown-menu-sub-content'] {
653
823
  background-color: var(--popover);
654
824
  color: var(--popover-foreground);
655
825
  border-color: var(--border);
656
826
  box-shadow: 0 6px 24px rgba(15, 23, 42, 0.12);
657
827
  }
658
- .carbide.dark [data-slot='dropdown-menu-content'] {
828
+ .carbide.dark [data-slot='dropdown-menu-content'],
829
+ .carbide.dark [data-slot='dropdown-menu-sub-content'] {
659
830
  background-color: var(--popover);
660
831
  color: var(--popover-foreground);
661
832
  border-color: var(--border);
@@ -736,7 +907,7 @@
736
907
 
737
908
  /* =============================
738
909
  TOOLTIP
739
- ============================= */
910
+ ============================= */
740
911
  .carbide [data-slot='tooltip-content'] {
741
912
  background-color: var(--foreground);
742
913
  color: var(--background);
@@ -754,21 +925,24 @@
754
925
  }
755
926
 
756
927
  /* =============================
757
- OVERLAYS & DIALOG/SHEET/DRAWER
758
- ============================= */
928
+ OVERLAYS & DIALOG/SHEET/DRAWER/ALERT-DIALOG
929
+ ============================= */
759
930
  .carbide [data-slot='dialog-overlay'],
931
+ .carbide [data-slot='alert-dialog-overlay'],
760
932
  .carbide [data-slot='sheet-overlay'],
761
933
  .carbide [data-slot='drawer-overlay'] {
762
934
  background-color: color-mix(in srgb, var(--overlay-bg) 60%, transparent);
763
935
  backdrop-filter: blur(2px);
764
936
  }
765
937
  .carbide.dark [data-slot='dialog-overlay'],
938
+ .carbide.dark [data-slot='alert-dialog-overlay'],
766
939
  .carbide.dark [data-slot='sheet-overlay'],
767
940
  .carbide.dark [data-slot='drawer-overlay'] {
768
941
  background-color: color-mix(in srgb, var(--overlay-bg) 75%, transparent);
769
942
  }
770
943
 
771
944
  .carbide [data-slot='dialog-content'],
945
+ .carbide [data-slot='alert-dialog-content'],
772
946
  .carbide [data-slot='sheet-content'],
773
947
  .carbide [data-slot='drawer-content'] {
774
948
  background-color: var(--card);
@@ -777,6 +951,7 @@
777
951
  box-shadow: 0 24px 48px rgba(15, 23, 42, 0.18);
778
952
  }
779
953
  .carbide.dark [data-slot='dialog-content'],
954
+ .carbide.dark [data-slot='alert-dialog-content'],
780
955
  .carbide.dark [data-slot='sheet-content'],
781
956
  .carbide.dark [data-slot='drawer-content'] {
782
957
  box-shadow: 0 24px 48px rgba(15, 23, 42, 0.55);
@@ -810,12 +985,14 @@
810
985
  }
811
986
 
812
987
  .carbide [data-slot='dialog-title'],
988
+ .carbide [data-slot='alert-dialog-title'],
813
989
  .carbide [data-slot='sheet-title'],
814
990
  .carbide [data-slot='drawer-title'] {
815
991
  color: var(--card-foreground);
816
992
  }
817
993
 
818
994
  .carbide [data-slot='dialog-description'],
995
+ .carbide [data-slot='alert-dialog-description'],
819
996
  .carbide [data-slot='sheet-description'],
820
997
  .carbide [data-slot='drawer-description'] {
821
998
  color: var(--muted-foreground);
@@ -838,7 +1015,7 @@
838
1015
 
839
1016
  /* =============================
840
1017
  TABLE
841
- ============================= */
1018
+ ============================= */
842
1019
  .carbide [data-slot='table-wrapper'] {
843
1020
  background-color: var(--card);
844
1021
  color: var(--card-foreground);
@@ -850,9 +1027,53 @@
850
1027
  border-color: var(--border);
851
1028
  }
852
1029
 
1030
+ /* Data Table: Row actions trigger visibility */
1031
+ tr td[data-col-id='actions'] .mmc-table-action-trigger,
1032
+ tr td[data-col-id='actions'] [data-slot='table-action-trigger'] {
1033
+ opacity: 0;
1034
+ pointer-events: none;
1035
+ transition: opacity 0.15s ease-in-out;
1036
+ }
1037
+ /* Visible when row is hovered, trigger is keyboard-focused, menu is open, or row flagged */
1038
+ tr:hover td[data-col-id='actions'] .mmc-table-action-trigger,
1039
+ tr:hover td[data-col-id='actions'] [data-slot='table-action-trigger'],
1040
+ tr td[data-col-id='actions'] .mmc-table-action-trigger:focus-visible,
1041
+ tr td[data-col-id='actions'] [data-slot='table-action-trigger']:focus-visible,
1042
+ tr td[data-col-id='actions'] .mmc-table-action-trigger[aria-expanded='true'],
1043
+ tr
1044
+ td[data-col-id='actions']
1045
+ [data-slot='table-action-trigger'][aria-expanded='true'],
1046
+ tr[data-action-visible='true']
1047
+ td[data-col-id='actions']
1048
+ .mmc-table-action-trigger,
1049
+ tr[data-action-visible='true']
1050
+ td[data-col-id='actions']
1051
+ [data-slot='table-action-trigger'] {
1052
+ opacity: 1;
1053
+ pointer-events: auto;
1054
+ }
1055
+
1056
+ /* Keep trigger visible and indicate active when menu is open */
1057
+ tr td[data-col-id='actions'] .mmc-table-action-trigger[data-state='open'],
1058
+ tr
1059
+ td[data-col-id='actions']
1060
+ [data-slot='table-action-trigger'][data-state='open'] {
1061
+ opacity: 1;
1062
+ pointer-events: auto;
1063
+ }
1064
+
1065
+ .carbide [data-slot='table-action-trigger'][data-state='open'],
1066
+ .carbide [data-slot='table-action-trigger'][aria-expanded='true'] {
1067
+ background-color: var(--table-action-hover-bg);
1068
+ }
1069
+ .carbide.dark [data-slot='table-action-trigger'][data-state='open'],
1070
+ .carbide.dark [data-slot='table-action-trigger'][aria-expanded='true'] {
1071
+ background-color: var(--table-action-hover-bg);
1072
+ }
1073
+
853
1074
  /* =============================
854
1075
  TABS
855
- ============================= */
1076
+ ============================= */
856
1077
  .carbide [data-slot='tabs-list'][data-variant='default'] {
857
1078
  background-color: var(--tablist-bg);
858
1079
  color: var(--tablist-fg);
@@ -905,7 +1126,7 @@
905
1126
  }
906
1127
  /* =============================
907
1128
  UTILITY OVERRIDES
908
- ============================= */
1129
+ ============================= */
909
1130
 
910
1131
  /*
911
1132
  Force correct text color for destructive badges and elements using text-destructive-foreground.
@@ -915,6 +1136,63 @@
915
1136
  color: var(--destructive-foreground) !important;
916
1137
  }
917
1138
 
1139
+ /* =============================
1140
+ SPINNER (SEMANTIC HOOK)
1141
+ ============================= */
1142
+ .carbide [data-slot='spinner'] {
1143
+ color: var(--spinner-foreground);
1144
+ }
1145
+ .carbide [data-slot='spinner'] circle:first-of-type {
1146
+ /* track color */
1147
+ stroke: var(--spinner-background);
1148
+ }
1149
+ .carbide [data-slot='spinner'] circle:last-of-type {
1150
+ /* arc color sync with current color */
1151
+ stroke: currentColor;
1152
+ }
1153
+
1154
+ /* Contextual overrides when inside buttons */
1155
+ .carbide [data-slot='button'] [data-slot='spinner'] {
1156
+ /* Default button uses primary bg → use on-dark pair for contrast */
1157
+ --spinner-foreground: var(--primary-foreground);
1158
+ --spinner-background: color-mix(
1159
+ in srgb,
1160
+ var(--primary-foreground) 25%,
1161
+ transparent
1162
+ );
1163
+ }
1164
+ .carbide [data-slot='button'][data-variant='outline'] [data-slot='spinner'],
1165
+ .carbide [data-slot='button'][data-variant='secondary'] [data-slot='spinner'],
1166
+ .carbide [data-slot='button'][data-variant='ghost'] [data-slot='spinner'],
1167
+ .carbide [data-slot='button'][data-variant='link'] [data-slot='spinner'] {
1168
+ /* Light backgrounds → use on-light pair */
1169
+ --spinner-foreground: var(--indigo-600);
1170
+ --spinner-background: var(--grey-300);
1171
+ }
1172
+
1173
+ /* In dark theme, outline/secondary/ghost/link often sit on dark surfaces → use on-dark pair */
1174
+ .carbide.dark
1175
+ [data-slot='button'][data-variant='outline']
1176
+ [data-slot='spinner'],
1177
+ .carbide.dark
1178
+ [data-slot='button'][data-variant='secondary']
1179
+ [data-slot='spinner'],
1180
+ .carbide.dark [data-slot='button'][data-variant='ghost'] [data-slot='spinner'],
1181
+ .carbide.dark [data-slot='button'][data-variant='link'] [data-slot='spinner'] {
1182
+ --spinner-foreground: var(--grey-00);
1183
+ --spinner-background: color-mix(in srgb, var(--grey-00) 25%, transparent);
1184
+ }
1185
+
1186
+ /* Optional forcing utilities */
1187
+ .carbide .mmc-spinner--on-dark {
1188
+ --spinner-foreground: var(--grey-00);
1189
+ --spinner-background: color-mix(in srgb, var(--grey-00) 25%, transparent);
1190
+ }
1191
+ .carbide .mmc-spinner--on-light {
1192
+ --spinner-foreground: var(--indigo-600);
1193
+ --spinner-background: var(--grey-300);
1194
+ }
1195
+
918
1196
  /* Input Border Utility */
919
1197
  .carbide .border-input,
920
1198
  .carbide.dark .border-input {
@@ -932,7 +1210,7 @@
932
1210
 
933
1211
  /* =============================
934
1212
  PROGRESS (SEMANTIC HOOK)
935
- ============================= */
1213
+ ============================= */
936
1214
  .carbide [data-slot='progress'] {
937
1215
  background-color: var(--surface-neutral);
938
1216
  }
@@ -943,7 +1221,7 @@
943
1221
 
944
1222
  /* =============================
945
1223
  ACCORDION
946
- ============================= */
1224
+ ============================= */
947
1225
  .carbide [data-slot='accordion'] [data-slot='accordion-item'] {
948
1226
  border-bottom: 1px solid var(--border);
949
1227
  }
@@ -953,7 +1231,7 @@
953
1231
 
954
1232
  /* =============================
955
1233
  POPOVER
956
- ============================= */
1234
+ ============================= */
957
1235
  .carbide [data-slot='popover-content'] {
958
1236
  background-color: var(--popover);
959
1237
  color: var(--popover-foreground);
@@ -969,10 +1247,10 @@
969
1247
 
970
1248
  /* =============================
971
1249
  SLIDER (SEMANTIC HOOK)
972
- ============================= */
1250
+ ============================= */
973
1251
  /* =============================
974
1252
  CHECKBOX (SEMANTIC HOOK)
975
- ============================= */
1253
+ ============================= */
976
1254
  .carbide [data-slot='checkbox'] {
977
1255
  border-color: var(--border-input) !important;
978
1256
  background-color: var(--bg-input);
@@ -998,7 +1276,7 @@
998
1276
 
999
1277
  /* =============================
1000
1278
  RADIO GROUP ITEM
1001
- ============================= */
1279
+ ============================= */
1002
1280
  .carbide [data-slot='radio-group-item'] {
1003
1281
  border-color: var(--border-input);
1004
1282
  background-color: var(--bg-input);
@@ -1023,7 +1301,7 @@
1023
1301
 
1024
1302
  /* =============================
1025
1303
  FORM CONTROL FOCUS + INVALID STATES
1026
- ============================= */
1304
+ ============================= */
1027
1305
  .carbide [data-slot='checkbox']:focus-visible,
1028
1306
  .carbide [data-slot='radio-group-item']:focus-visible,
1029
1307
  .carbide [data-slot='switch']:focus-visible {
@@ -1046,7 +1324,7 @@
1046
1324
 
1047
1325
  /* =============================
1048
1326
  SWITCH (SEMANTIC HOOK)
1049
- ============================= */
1327
+ ============================= */
1050
1328
  .carbide [data-slot='switch'] {
1051
1329
  border-color: transparent;
1052
1330
  }
@@ -1074,7 +1352,7 @@
1074
1352
 
1075
1353
  /* =============================
1076
1354
  CALENDAR (SEMANTIC HOOK)
1077
- ============================= */
1355
+ ============================= */
1078
1356
  .carbide [data-slot='calendar'] {
1079
1357
  background-color: var(--card);
1080
1358
  color: var(--card-foreground);
@@ -1125,7 +1403,7 @@
1125
1403
 
1126
1404
  /* =============================
1127
1405
  DATA TABLE: ALIGNMENT BASELINE FIX
1128
- ============================= */
1406
+ ============================= */
1129
1407
  /* Unify left-aligned body cells to the sortable-header baseline (0.25rem) */
1130
1408
  .carbide
1131
1409
  td.text-left[data-col-id]:not([data-col-id='select']):not(