@devalok/shilp-sutra 0.57.0 → 0.60.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 (288) hide show
  1. package/MIGRATION.md +163 -0
  2. package/dist/_chunks/badge-group.js +75 -188
  3. package/dist/_chunks/badge-group.js.map +1 -1
  4. package/dist/_chunks/chat.js +244 -243
  5. package/dist/_chunks/chat.js.map +1 -1
  6. package/dist/_chunks/image-preview.js +71 -70
  7. package/dist/_chunks/image-preview.js.map +1 -1
  8. package/dist/_chunks/motion-preference.js +15 -0
  9. package/dist/_chunks/motion-preference.js.map +1 -0
  10. package/dist/_chunks/motion-provider.js +1 -1
  11. package/dist/_chunks/motion-provider.js.map +1 -1
  12. package/dist/_chunks/popover.js +50 -49
  13. package/dist/_chunks/popover.js.map +1 -1
  14. package/dist/_chunks/primitives-internal.js +29 -29
  15. package/dist/_chunks/primitives-internal.js.map +1 -1
  16. package/dist/_chunks/shared.js +48 -47
  17. package/dist/_chunks/shared.js.map +1 -1
  18. package/dist/_chunks/success.js +34 -34
  19. package/dist/_chunks/tree-view.js +1 -1
  20. package/dist/_chunks/tree-view.js.map +1 -1
  21. package/dist/ai/block-renderer.js +8 -8
  22. package/dist/ai/command-bar.js +65 -65
  23. package/dist/ai/command-bar.js.map +1 -1
  24. package/dist/ai/conversation.js +35 -35
  25. package/dist/ai/conversation.js.map +1 -1
  26. package/dist/ai/index.js +4 -4
  27. package/dist/composed/activity-feed.d.ts.map +1 -1
  28. package/dist/composed/activity-feed.js +108 -107
  29. package/dist/composed/activity-feed.js.map +1 -1
  30. package/dist/composed/avatar-group.js +3 -3
  31. package/dist/composed/avatar-group.js.map +1 -1
  32. package/dist/composed/bulk-action-bar.d.ts +9 -35
  33. package/dist/composed/bulk-action-bar.d.ts.map +1 -1
  34. package/dist/composed/bulk-action-bar.js +2 -139
  35. package/dist/composed/command-palette.js +137 -137
  36. package/dist/composed/command-palette.js.map +1 -1
  37. package/dist/composed/content-card.js +1 -1
  38. package/dist/composed/content-card.js.map +1 -1
  39. package/dist/composed/date-picker/index.js +5 -5
  40. package/dist/composed/date-picker/index.js.map +1 -1
  41. package/dist/composed/empty-state.js +4 -4
  42. package/dist/composed/file-preview/image-preview.d.ts.map +1 -1
  43. package/dist/composed/file-preview/shared.d.ts.map +1 -1
  44. package/dist/composed/file-preview/video-preview.d.ts.map +1 -1
  45. package/dist/composed/file-preview.js +151 -150
  46. package/dist/composed/file-preview.js.map +1 -1
  47. package/dist/composed/filter-bar.d.ts.map +1 -1
  48. package/dist/composed/filter-bar.js +53 -52
  49. package/dist/composed/filter-bar.js.map +1 -1
  50. package/dist/composed/form-section.d.ts.map +1 -1
  51. package/dist/composed/form-section.js +38 -37
  52. package/dist/composed/form-section.js.map +1 -1
  53. package/dist/composed/index.js +6 -5
  54. package/dist/composed/master-detail.d.ts.map +1 -1
  55. package/dist/composed/master-detail.js +1 -1
  56. package/dist/composed/master-detail.js.map +1 -1
  57. package/dist/composed/multi-select-popover.d.ts.map +1 -1
  58. package/dist/composed/multi-select-popover.js +109 -108
  59. package/dist/composed/multi-select-popover.js.map +1 -1
  60. package/dist/composed/rich-chat-input/attachment-strip.d.ts.map +1 -1
  61. package/dist/composed/rich-chat-input/reply-banner.d.ts.map +1 -1
  62. package/dist/composed/rich-chat-input/schedule-send.d.ts.map +1 -1
  63. package/dist/composed/rich-chat-input.d.ts.map +1 -1
  64. package/dist/composed/rich-chat-input.js +467 -466
  65. package/dist/composed/rich-chat-input.js.map +1 -1
  66. package/dist/composed/rich-text-editor.js +3 -3
  67. package/dist/composed/rich-text-editor.js.map +1 -1
  68. package/dist/composed/schedule-view.js +2 -2
  69. package/dist/composed/schedule-view.js.map +1 -1
  70. package/dist/composed/status-badge.d.ts.map +1 -1
  71. package/dist/composed/status-badge.js +29 -28
  72. package/dist/composed/status-badge.js.map +1 -1
  73. package/dist/motion/index.d.ts +1 -0
  74. package/dist/motion/index.d.ts.map +1 -1
  75. package/dist/motion/index.js +2 -15
  76. package/dist/motion/motion-preference.d.ts +36 -0
  77. package/dist/motion/motion-preference.d.ts.map +1 -0
  78. package/dist/motion/motion-provider.d.ts +2 -1
  79. package/dist/motion/motion-provider.d.ts.map +1 -1
  80. package/dist/motion/primitives-index.js +103 -102
  81. package/dist/motion/primitives-index.js.map +1 -1
  82. package/dist/motion/primitives.d.ts.map +1 -1
  83. package/dist/shell/bottom-navbar.js +19 -19
  84. package/dist/shell/bottom-navbar.js.map +1 -1
  85. package/dist/shell/index.d.ts +1 -1
  86. package/dist/shell/index.d.ts.map +1 -1
  87. package/dist/shell/notification-center.d.ts +17 -0
  88. package/dist/shell/notification-center.d.ts.map +1 -1
  89. package/dist/shell/notification-center.js +109 -104
  90. package/dist/shell/notification-center.js.map +1 -1
  91. package/dist/shell/notification-preferences.js +1 -1
  92. package/dist/shell/notification-preferences.js.map +1 -1
  93. package/dist/shell/top-bar.js +1 -1
  94. package/dist/shell/top-bar.js.map +1 -1
  95. package/dist/tokens/index.css +1 -0
  96. package/dist/tokens/palettes.css +292 -0
  97. package/dist/tokens/semantic.css +157 -11
  98. package/dist/tokens/shilp-sutra.css +1 -0
  99. package/dist/tokens/utilities.css +10 -7
  100. package/dist/ui/accordion.d.ts.map +1 -1
  101. package/dist/ui/accordion.js +27 -26
  102. package/dist/ui/accordion.js.map +1 -1
  103. package/dist/ui/alert-dialog.d.ts.map +1 -1
  104. package/dist/ui/alert-dialog.js +60 -59
  105. package/dist/ui/alert-dialog.js.map +1 -1
  106. package/dist/ui/alert.d.ts.map +1 -1
  107. package/dist/ui/alert.js +55 -113
  108. package/dist/ui/alert.js.map +1 -1
  109. package/dist/ui/autocomplete.js +80 -80
  110. package/dist/ui/autocomplete.js.map +1 -1
  111. package/dist/ui/avatar.d.ts.map +1 -1
  112. package/dist/ui/avatar.js +71 -70
  113. package/dist/ui/avatar.js.map +1 -1
  114. package/dist/ui/badge-indicator.d.ts +4 -8
  115. package/dist/ui/badge-indicator.d.ts.map +1 -1
  116. package/dist/ui/badge-indicator.js +3 -8
  117. package/dist/ui/badge-indicator.js.map +1 -1
  118. package/dist/ui/badge.d.ts +8 -1
  119. package/dist/ui/badge.d.ts.map +1 -1
  120. package/dist/ui/banner.d.ts.map +1 -1
  121. package/dist/ui/banner.js +42 -40
  122. package/dist/ui/banner.js.map +1 -1
  123. package/dist/ui/bulk-action-bar.d.ts +59 -0
  124. package/dist/ui/bulk-action-bar.d.ts.map +1 -0
  125. package/dist/ui/bulk-action-bar.js +145 -0
  126. package/dist/ui/bulk-action-bar.js.map +1 -0
  127. package/dist/ui/button-group.d.ts.map +1 -1
  128. package/dist/ui/button-group.js +3 -23
  129. package/dist/ui/button-group.js.map +1 -1
  130. package/dist/ui/button.d.ts +10 -1
  131. package/dist/ui/button.d.ts.map +1 -1
  132. package/dist/ui/button.js +79 -212
  133. package/dist/ui/button.js.map +1 -1
  134. package/dist/ui/card.d.ts.map +1 -1
  135. package/dist/ui/card.js +75 -72
  136. package/dist/ui/card.js.map +1 -1
  137. package/dist/ui/charts/radar-chart.d.ts.map +1 -1
  138. package/dist/ui/charts/radar-chart.js +1 -1
  139. package/dist/ui/charts/radar-chart.js.map +1 -1
  140. package/dist/ui/chat/message-list.d.ts.map +1 -1
  141. package/dist/ui/chat/message.d.ts.map +1 -1
  142. package/dist/ui/chat/typing-indicator.d.ts.map +1 -1
  143. package/dist/ui/checkbox.d.ts.map +1 -1
  144. package/dist/ui/checkbox.js +1 -1
  145. package/dist/ui/checkbox.js.map +1 -1
  146. package/dist/ui/code.js +1 -1
  147. package/dist/ui/code.js.map +1 -1
  148. package/dist/ui/color-input.d.ts.map +1 -1
  149. package/dist/ui/color-input.js +151 -150
  150. package/dist/ui/color-input.js.map +1 -1
  151. package/dist/ui/combobox.d.ts +14 -0
  152. package/dist/ui/combobox.d.ts.map +1 -1
  153. package/dist/ui/combobox.js +162 -158
  154. package/dist/ui/combobox.js.map +1 -1
  155. package/dist/ui/context-menu.d.ts.map +1 -1
  156. package/dist/ui/context-menu.js +70 -69
  157. package/dist/ui/context-menu.js.map +1 -1
  158. package/dist/ui/data-table-body.d.ts.map +1 -1
  159. package/dist/ui/data-table-body.js +4 -3
  160. package/dist/ui/data-table-body.js.map +1 -1
  161. package/dist/ui/data-table-bulk-actions.d.ts +26 -1
  162. package/dist/ui/data-table-bulk-actions.d.ts.map +1 -1
  163. package/dist/ui/data-table-bulk-actions.js +21 -46
  164. package/dist/ui/data-table-bulk-actions.js.map +1 -1
  165. package/dist/ui/data-table-context.d.ts +36 -2
  166. package/dist/ui/data-table-context.d.ts.map +1 -1
  167. package/dist/ui/data-table-context.js +25 -21
  168. package/dist/ui/data-table-context.js.map +1 -1
  169. package/dist/ui/data-table-header.d.ts.map +1 -1
  170. package/dist/ui/data-table-header.js +42 -40
  171. package/dist/ui/data-table-header.js.map +1 -1
  172. package/dist/ui/data-table-pagination.js +2 -2
  173. package/dist/ui/data-table-pagination.js.map +1 -1
  174. package/dist/ui/dialog.d.ts.map +1 -1
  175. package/dist/ui/dialog.js +61 -60
  176. package/dist/ui/dialog.js.map +1 -1
  177. package/dist/ui/dot.d.ts.map +1 -1
  178. package/dist/ui/dot.js +10 -41
  179. package/dist/ui/dot.js.map +1 -1
  180. package/dist/ui/dropdown-menu.d.ts.map +1 -1
  181. package/dist/ui/dropdown-menu.js +79 -78
  182. package/dist/ui/dropdown-menu.js.map +1 -1
  183. package/dist/ui/file-upload.d.ts.map +1 -1
  184. package/dist/ui/file-upload.js +116 -115
  185. package/dist/ui/file-upload.js.map +1 -1
  186. package/dist/ui/form.d.ts.map +1 -1
  187. package/dist/ui/form.js +27 -26
  188. package/dist/ui/form.js.map +1 -1
  189. package/dist/ui/hover-card.d.ts.map +1 -1
  190. package/dist/ui/hover-card.js +26 -25
  191. package/dist/ui/hover-card.js.map +1 -1
  192. package/dist/ui/icon.js +7 -7
  193. package/dist/ui/index.d.ts +3 -2
  194. package/dist/ui/index.d.ts.map +1 -1
  195. package/dist/ui/index.js +60 -59
  196. package/dist/ui/index.js.map +1 -1
  197. package/dist/ui/input.d.ts.map +1 -1
  198. package/dist/ui/input.js +7 -7
  199. package/dist/ui/input.js.map +1 -1
  200. package/dist/ui/menubar.d.ts.map +1 -1
  201. package/dist/ui/menubar.js +73 -72
  202. package/dist/ui/menubar.js.map +1 -1
  203. package/dist/ui/navigation-menu.d.ts.map +1 -1
  204. package/dist/ui/navigation-menu.js +80 -79
  205. package/dist/ui/navigation-menu.js.map +1 -1
  206. package/dist/ui/popover.d.ts.map +1 -1
  207. package/dist/ui/progress.d.ts.map +1 -1
  208. package/dist/ui/progress.js +72 -68
  209. package/dist/ui/progress.js.map +1 -1
  210. package/dist/ui/radio.d.ts.map +1 -1
  211. package/dist/ui/radio.js +35 -34
  212. package/dist/ui/radio.js.map +1 -1
  213. package/dist/ui/search-input.d.ts.map +1 -1
  214. package/dist/ui/search-input.js +28 -27
  215. package/dist/ui/search-input.js.map +1 -1
  216. package/dist/ui/select.d.ts.map +1 -1
  217. package/dist/ui/select.js +70 -69
  218. package/dist/ui/select.js.map +1 -1
  219. package/dist/ui/sidebar.d.ts.map +1 -1
  220. package/dist/ui/sidebar.js +4 -4
  221. package/dist/ui/sidebar.js.map +1 -1
  222. package/dist/ui/slider.d.ts +63 -9
  223. package/dist/ui/slider.d.ts.map +1 -1
  224. package/dist/ui/slider.js +74 -32
  225. package/dist/ui/slider.js.map +1 -1
  226. package/dist/ui/split-button.d.ts +8 -2
  227. package/dist/ui/split-button.d.ts.map +1 -1
  228. package/dist/ui/split-button.js +49 -95
  229. package/dist/ui/split-button.js.map +1 -1
  230. package/dist/ui/stat-card.d.ts.map +1 -1
  231. package/dist/ui/stat-card.js +89 -88
  232. package/dist/ui/stat-card.js.map +1 -1
  233. package/dist/ui/stat-flash.js +16 -16
  234. package/dist/ui/stepper.d.ts.map +1 -1
  235. package/dist/ui/stepper.js +63 -62
  236. package/dist/ui/stepper.js.map +1 -1
  237. package/dist/ui/switch.d.ts.map +1 -1
  238. package/dist/ui/switch.js +2 -2
  239. package/dist/ui/switch.js.map +1 -1
  240. package/dist/ui/table.d.ts.map +1 -1
  241. package/dist/ui/table.js +3 -3
  242. package/dist/ui/table.js.map +1 -1
  243. package/dist/ui/tabs.d.ts.map +1 -1
  244. package/dist/ui/tabs.js +67 -66
  245. package/dist/ui/tabs.js.map +1 -1
  246. package/dist/ui/textarea.d.ts.map +1 -1
  247. package/dist/ui/textarea.js +7 -7
  248. package/dist/ui/textarea.js.map +1 -1
  249. package/dist/ui/toast.d.ts.map +1 -1
  250. package/dist/ui/toast.js +196 -195
  251. package/dist/ui/toast.js.map +1 -1
  252. package/dist/ui/toggle.d.ts.map +1 -1
  253. package/dist/ui/toggle.js +24 -22
  254. package/dist/ui/toggle.js.map +1 -1
  255. package/dist/ui/tooltip.d.ts.map +1 -1
  256. package/dist/ui/tooltip.js +37 -36
  257. package/dist/ui/tooltip.js.map +1 -1
  258. package/dist/ui/tree-view/tree-item.d.ts.map +1 -1
  259. package/docs/components/composed/bulk-action-bar.md +14 -7
  260. package/docs/components/ui/bulk-action-bar.md +72 -0
  261. package/docs/recipes/customize-brand.md +58 -0
  262. package/docs/recipes/install-astro.md +1 -1
  263. package/docs/recipes/install-next-app-router.md +1 -1
  264. package/docs/recipes/install-next-pages.md +22 -1
  265. package/docs/recipes/install-remix.md +1 -1
  266. package/docs/recipes/install-tanstack-start.md +1 -1
  267. package/docs/recipes/install-vite.md +2 -1
  268. package/docs/recipes/server-components.md +7 -4
  269. package/docs/recipes/troubleshoot.md +1 -0
  270. package/llms.txt +2 -2
  271. package/make-kit/foundations/color.md +3 -1
  272. package/mcp-manifest.json +184 -151
  273. package/package.json +8 -2
  274. package/skill/SKILL.md +1 -1
  275. package/skill/references/components.md +2 -2
  276. package/skill/references/customize-brand.md +58 -0
  277. package/skill/references/server-components.md +7 -4
  278. package/skill/references/setup-astro.md +1 -1
  279. package/skill/references/setup-next-app-router.md +1 -1
  280. package/skill/references/setup-next-pages.md +22 -1
  281. package/skill/references/setup-remix.md +1 -1
  282. package/skill/references/setup-tanstack-start.md +1 -1
  283. package/skill/references/setup-vite.md +2 -1
  284. package/skill/references/troubleshoot.md +1 -0
  285. package/dist/composed/bulk-action-bar.js.map +0 -1
  286. package/dist/motion/check-motion-provider.d.ts +0 -2
  287. package/dist/motion/check-motion-provider.d.ts.map +0 -1
  288. package/dist/motion/index.js.map +0 -1
@@ -211,6 +211,21 @@
211
211
  --color-segment-track: color-mix(in oklch, var(--neutral-12) 6%, transparent);
212
212
  --color-segment-thumb: var(--neutral-1);
213
213
 
214
+ /* Form-control ground (Input, Select, Textarea, Combobox). A ROLE token, not
215
+ a surface tier: the control is defined by its BORDER, so its fill sits
216
+ essentially flush with whatever it is dropped onto and the edge does the
217
+ work. Design 2026-08-24 moved light from neutral-2 to neutral-1.
218
+
219
+ The spec was authored light-only. Taking it literally in dark would be a
220
+ regression — neutral-1 in dark IS surface-base, so the field would vanish
221
+ into the page at 1.000:1 (the Table-striped / linear-Progress failure).
222
+ Dark therefore takes the step that preserves the INTENT, not the number.
223
+ Measured: light field #fcfcfc = 1.026:1 vs the page, hover lifts 1.063:1;
224
+ dark field #181818 = 1.000:1 vs a panel / 1.115:1 vs the page, hover lifts
225
+ 1.173:1. Same relationship in both themes. */
226
+ --color-field: var(--neutral-1);
227
+ --color-field-hover: var(--neutral-2);
228
+
214
229
  /* Overlay + disabled — promoted from internal :root into @theme so
215
230
  `bg-overlay`, `text-overlay`, `bg-disabled`, `text-disabled` emit. */
216
231
  --color-overlay: oklch(0 0 0 / 0.50);
@@ -228,6 +243,11 @@
228
243
  --color-error-5: var(--red-5);
229
244
  --color-error-6: var(--red-6);
230
245
  --color-error-7: var(--red-7);
246
+ /* Step 8 exists so validation EDGES can clear WCAG 1.4.11. Step 7 measures
247
+ 2.831:1 on a light field; step 8 is 3.929:1 (dark: 2.397:1 → 3.440:1).
248
+ Bridged 2026-08-24 — the primitive was always there, the semantic alias
249
+ was not, so `border-error-8` silently emitted nothing. */
250
+ --color-error-8: var(--red-8);
231
251
  --color-error-9: var(--red-9);
232
252
  --color-error-10: var(--red-10);
233
253
  --color-error-11: var(--red-11);
@@ -240,6 +260,8 @@
240
260
  --color-success-5: var(--green-5);
241
261
  --color-success-6: var(--green-6);
242
262
  --color-success-7: var(--green-7);
263
+ /* See --color-error-8. 2.557:1 → 3.441:1 light, 2.660:1 → 3.971:1 dark. */
264
+ --color-success-8: var(--green-8);
243
265
  --color-success-9: var(--green-9);
244
266
  --color-success-10: var(--green-10);
245
267
  --color-success-11: var(--green-11);
@@ -486,6 +508,10 @@
486
508
  --shadow-warning: 0 2px 8px oklch(0.78 0.16 65 / 0.22), 0 6px 20px oklch(0.78 0.16 65 / 0.15);
487
509
 
488
510
  /* Keyboard shortcut badge shadow */
511
+ /* A key cap's bottom bevel. Black works on a light cap; on a dark one it is
512
+ invisible (1.02:1), so the cap loses the only thing making it look pressable.
513
+ `.dark` flips it to a top highlight, which is how a raised surface catches
514
+ light from above in a dark UI. See the .dark block below. */
489
515
  --shadow-kbd: inset 0 -1px 0 oklch(0 0 0 / 0.1);
490
516
 
491
517
  /* ───────────────────────────────────────────────────────────
@@ -522,7 +548,12 @@
522
548
  /* Action state opacities (reflected by preset `opacity-action-*` util) */
523
549
  --action-hover-opacity: 0.04;
524
550
  --action-selected-opacity: 0.08;
525
- --action-disabled-opacity: 0.38;
551
+ /* 0.38 → 0.45 (design, 2026-08-24). Disabled text is exempt from WCAG 1.4.3,
552
+ so this is a legibility call, not a pass/fail one — and it moves the right
553
+ way on every ground. Measured over surface-panel, worst case first:
554
+ surface-fg-subtle 1.673:1 → 1.859:1, surface-fg-muted 1.879:1 → 2.169:1,
555
+ surface-fg 2.144:1 → 2.523:1 in light; surface-fg 3.046:1 → 3.745:1 in dark. */
556
+ --action-disabled-opacity: 0.45;
526
557
  --action-focus-opacity: 0.12;
527
558
  --action-active-opacity: 0.12;
528
559
 
@@ -536,25 +567,45 @@
536
567
  the public `--shadow-raised`/`--shadow-floating` @theme values above.
537
568
  They depend on `--shadow-color` (a runtime var) so they cannot live
538
569
  in @theme (TW4 may statically-inline theme values). */
539
- --shadow-color: 0.15 0.015 260; /* cool blue tint */
570
+ /* Light ink matches the Figma library's `#1c2533` exactly, so a designer
571
+ measuring a shadow in Figma and a developer measuring it in the browser
572
+ get the same answer. The two had drifted; Figma won on cost, not merit —
573
+ one value here against 26 in the library, for a difference measured at
574
+ **1/255** at the strongest light layer. Below what anyone can see.
575
+ DARK overrides this (see the .dark block) and must keep a darker ink:
576
+ dark multiplies every alpha by --shadow-strength 2.5, and at that weight
577
+ this lighter ink composites LIGHTER than the panel it sits on — a glow,
578
+ not a shadow. Measured before adopting; the light-mode reasoning does not
579
+ survive the multiplier. */
580
+ --shadow-color: 0.263 0.029 259; /* #1c2533 — cool blue tint, light */
540
581
  --shadow-strength: 1;
541
582
  --shadow-transition: box-shadow var(--duration-fast-02) var(--ease-productive-standard);
542
583
 
584
+ /* Hairline edge ring — the shadow's own 1px border-substitute (make-kit rule #6:
585
+ shadow already carries the ring, so components never add an explicit border).
586
+ Light: cool tint. Dark: a light ring, since drop shadows barely read on dark.
587
+
588
+ Declared BEFORE the internals below because all four consume it. It used to
589
+ sit between sm and md, and only md/lg referenced it — xs and sm hardcoded
590
+ their own near-black ring and so never received the dark-mode correction.
591
+ That left `shadow-raised` / `-raised-hover` at 1.00–1.03:1 in dark, i.e. no
592
+ edge, for every component using them as its only boundary. */
593
+ --shadow-edge-ring: 0 0 0 1px oklch(var(--shadow-color) / calc(0.09 * var(--shadow-strength)));
594
+ /* xs/sm take the ring at a lighter weight than md/lg — a raised card should
595
+ not read as strongly as a floating overlay. `--shadow-edge-ring-subtle`
596
+ mirrors `--shadow-edge-ring` and is likewise dark-corrected below. */
597
+ --shadow-edge-ring-subtle: 0 0 0 1px oklch(var(--shadow-color) / calc(0.035 * var(--shadow-strength)));
543
598
  --shadow-xs-internal:
544
- 0 0 0 1px oklch(var(--shadow-color) / calc(0.035 * var(--shadow-strength))),
599
+ var(--shadow-edge-ring-subtle),
545
600
  0 0.5px 1px -0.5px oklch(var(--shadow-color) / calc(0.045 * var(--shadow-strength))),
546
601
  0 1.5px 3px -1px oklch(var(--shadow-color) / calc(0.04 * var(--shadow-strength))),
547
602
  0 3px 7px -2px oklch(var(--shadow-color) / calc(0.03 * var(--shadow-strength)));
548
603
  --shadow-sm-internal:
549
- 0 0 0 1px oklch(var(--shadow-color) / calc(0.035 * var(--shadow-strength))),
604
+ var(--shadow-edge-ring-subtle),
550
605
  0 0.5px 1px -0.5px oklch(var(--shadow-color) / calc(0.04 * var(--shadow-strength))),
551
606
  0 2px 4px -1.5px oklch(var(--shadow-color) / calc(0.045 * var(--shadow-strength))),
552
607
  0 6px 12px -3px oklch(var(--shadow-color) / calc(0.035 * var(--shadow-strength))),
553
608
  0 14px 28px -8px oklch(var(--shadow-color) / calc(0.025 * var(--shadow-strength)));
554
- /* Hairline edge ring — the shadow's own 1px border-substitute (make-kit rule #6:
555
- shadow already carries the ring, so components never add an explicit border).
556
- Light: cool tint. Dark: a light ring, since drop shadows barely read on dark. */
557
- --shadow-edge-ring: 0 0 0 1px oklch(var(--shadow-color) / calc(0.09 * var(--shadow-strength)));
558
609
  --shadow-md-internal:
559
610
  var(--shadow-edge-ring),
560
611
  0 1px 2px -1px oklch(var(--shadow-color) / calc(0.05 * var(--shadow-strength))),
@@ -657,6 +708,12 @@
657
708
  --color-surface-raised-hover: var(--color-surface-panel-hover);
658
709
  --color-surface-raised-active: var(--color-surface-panel-active);
659
710
 
711
+ /* Form-control ground — one step up from the light values, NOT the same
712
+ neutral step. neutral-1 in dark is surface-base, so reusing the light
713
+ number would sink the field into the page. See the :root note. */
714
+ --color-field: var(--neutral-2);
715
+ --color-field-hover: var(--neutral-3);
716
+
660
717
  /* Object edges invert to translucent white. */
661
718
  --color-surface-border-subtle: oklch(1 0 0 / 0.06);
662
719
  --color-surface-border: oklch(1 0 0 / 0.10);
@@ -668,9 +725,14 @@
668
725
  --color-backdrop: oklch(0 0 0 / 0.6);
669
726
 
670
727
  /* Segmented control — inverted elevation in dark: track is a faint LIGHTER
671
- fill (can't go darker than a near-black page), thumb steps lighter still. */
728
+ fill (can't go darker than a near-black page), thumb steps lighter still.
729
+ The model is right; the value was one step short. neutral-3 (#262626) is
730
+ DARKER than the track composited over a panel (#282828), so the selected
731
+ segment read as a dent — 1.028:1, inverted. neutral-5 clears the track on
732
+ both grounds a segmented control actually sits on: 1.46:1 over a panel,
733
+ 1.69:1 over the page. */
672
734
  --color-segment-track: color-mix(in oklch, oklch(1 0 0) 7%, transparent);
673
- --color-segment-thumb: var(--neutral-3);
735
+ --color-segment-thumb: var(--neutral-5);
674
736
 
675
737
  /* Overlay */
676
738
  --color-overlay: oklch(0 0 0 / 0.70);
@@ -678,7 +740,8 @@
678
740
  /* Action state opacities (higher in dark mode) */
679
741
  --action-hover-opacity: 0.08;
680
742
  --action-selected-opacity: 0.12;
681
- --action-disabled-opacity: 0.38;
743
+ /* Tracks the light value — see the note on the :root declaration. */
744
+ --action-disabled-opacity: 0.45;
682
745
  --action-focus-opacity: 0.12;
683
746
  --action-active-opacity: 0.16;
684
747
 
@@ -689,8 +752,54 @@
689
752
  /* Shadows (heavier in dark mode) — brand-reactive via color-mix on
690
753
  --color-accent-9 so they follow consumer brand swaps. */
691
754
  --shadow-strength: 2.5;
755
+ /* Dark needs its OWN, DARKER ink, and the reason is worth reading before
756
+ touching this line.
757
+
758
+ Light moved to #1c2533 to match the Figma library. Dark cannot follow:
759
+ --shadow-strength is 2.5 here, and at that weight #1c2533 composites to
760
+ #1b1d21 over a #1a1a1a panel — LIGHTER than the surface it is meant to
761
+ darken. A glow, not a shadow. Worst case 9/255 in the wrong direction.
762
+
763
+ The previous dark ink (oklch(0.15 …)) had a milder version of the same
764
+ fault: it reads as a shadow on `surface-panel` but GLOWS on
765
+ `surface-base` (#0a0a0a), where it is itself the lighter colour. Measured
766
+ separation there was 1.001:1 — the drop layers contributed literally
767
+ nothing. 0.05 is below both grounds, so the sign is now correct everywhere.
768
+
769
+ What this does NOT do is make drop shadows carry dark elevation, and no
770
+ ink can. There is no headroom below a near-black ground: the best any ink
771
+ achieves at the strongest layer is 1.013:1 on base and 1.040:1 on panel.
772
+ **The white edge ring is what actually separates an elevated surface in
773
+ dark, and that is structural rather than a workaround.** If dark elevation
774
+ ever needs to read more strongly, the answer is the ring or a lighter
775
+ surface step — not a darker shadow, which has nowhere left to go. */
776
+ --shadow-color: 0.05 0.012 260;
692
777
  /* Light ring on dark — a dark-tinted ring would vanish against dark surfaces. */
693
778
  --shadow-edge-ring: 0 0 0 1px oklch(1 0 0 / 0.12);
779
+ /* Same correction for the raised tier. Without this, `shadow-raised` /
780
+ `-raised-hover` keep a near-black ring that measures ~1.00:1 on a dark
781
+ ground, so anything using them as its only edge has none. 0.07 keeps a
782
+ raised card quieter than a floating overlay while still reading. */
783
+ --shadow-edge-ring-subtle: 0 0 0 1px oklch(1 0 0 / 0.07);
784
+ /* The third ring, and the one that was missed. `--shadow-pressed` is also a
785
+ 1px ring built from `--shadow-color`, so in dark it composited to
786
+ **1.012:1** against `surface-panel` — a pressed control had no pressed
787
+ state at all. Its two siblings above were corrected; this was not, which is
788
+ the failure mode the comment on --shadow-edge-ring describes. White at 0.10
789
+ measures 2.640:1, between subtle (2.148:1) and the full edge ring
790
+ (2.968:1) — pressed should read more firmly than a resting card and less
791
+ than a floating overlay. Found while binding the Figma effect styles, where
792
+ it had been masked by a binding to the wrong variable.
793
+ All three rings stop deliberately short of 1.4.11's 3:1 —
794
+ deviation: SHADOW-RING-BELOW-NONTEXT */
795
+ --shadow-pressed: 0 0 0 1px oklch(1 0 0 / 0.10);
796
+ --shadow-kbd: inset 0 1px 0 oklch(1 0 0 / 0.10);
797
+ /* The segmented thumb is documented as deliberately ring-less, the shadow
798
+ being its whole edge. That works in light and cannot work in dark, where
799
+ the shadow is near-black on a near-black ground — so the fallback failed in
800
+ the same theme as the fill it was meant to rescue. In dark it takes a ring
801
+ like everything else. */
802
+ --shadow-segment: 0 0 0 1px oklch(1 0 0 / 0.07), 0 1px 2px -0.5px oklch(0 0 0 / 0.40), 0 3px 8px -2px oklch(0 0 0 / 0.30);
694
803
  --shadow-brand: 0 2px 8px color-mix(in oklch, var(--color-accent-9) 30%, transparent), 0 6px 20px color-mix(in oklch, var(--color-accent-9) 20%, transparent);
695
804
  --shadow-glow: 0 0 0 1.5px color-mix(in oklch, var(--color-accent-9) 35%, transparent), 0 0 10px color-mix(in oklch, var(--color-accent-9) 20%, transparent);
696
805
  --shadow-ring: 0 0 0 2px color-mix(in oklch, var(--color-accent-9) 45%, transparent);
@@ -722,6 +831,39 @@
722
831
  --color-text-shadow: oklch(0 0 0 / 0.40);
723
832
  }
724
833
 
834
+ /* ═══════════════════════════════════════════════════════════════════
835
+ HIGH CONTRAST — opt-in, via `data-contrast="high"` on any ancestor
836
+
837
+ WCAG 2.2 SC 1.4.11 asks for 3:1 between a control's edge and its
838
+ background. Our default control edge is 2.00:1 in light and 2.08:1 in
839
+ dark — deliberately softer, and deliberately under the bar. That gap is
840
+ recorded in docs/deviations.md as PALETTE-CONTROL-EDGE-BELOW-AA.
841
+
842
+ This block is the opt-out from that decision. Set the attribute on
843
+ <html> (or any wrapper) and every control edge in the subtree moves to
844
+ 3.64:1 light / 3.93:1 dark.
845
+
846
+ <html data-contrast="high"> <!-- whole app -->
847
+ <div data-contrast="high"> … </div> <!-- one region -->
848
+
849
+ It is an ATTRIBUTE rather than a React provider on purpose: `.dark`
850
+ already works this way, so a consumer's existing theme switcher can set
851
+ both, it needs no client component, and it survives SSR.
852
+
853
+ The steps are named, not literal, so a consumer who rebrands the neutral
854
+ ramp gets a correctly-scaled high-contrast mode for free. `--neutral-*`
855
+ is itself theme-aware, so ONE rule serves light and dark.
856
+
857
+ Placed after `.dark` deliberately: `[data-contrast='high']` and `.dark`
858
+ have the same specificity (0,1,0), so when both sit on <html> source
859
+ order is what decides. Moving this block above `.dark` silently breaks
860
+ high contrast in dark mode only.
861
+ ═══════════════════════════════════════════════════════════════════ */
862
+ [data-contrast='high'] {
863
+ --color-surface-border-interactive: var(--neutral-8);
864
+ --color-surface-border-interactive-strong: var(--neutral-9);
865
+ }
866
+
725
867
  /* ═══════════════════════════════════════════════════════════════════
726
868
  Ensure Radix popper content (Select, Combobox, Popover, etc.)
727
869
  renders above Sheet/Dialog overlays.
@@ -795,6 +937,8 @@
795
937
  --color-surface-disabled: Canvas;
796
938
  --color-surface-inverted: CanvasText;
797
939
  --color-surface-inverted-fg: Canvas;
940
+ --color-field: Canvas;
941
+ --color-field-hover: Canvas;
798
942
  /* Forced colours flatten the object/control split — every edge must be a
799
943
  system colour or it disappears entirely. */
800
944
  --color-surface-border: CanvasText;
@@ -834,6 +978,7 @@
834
978
  --color-error-4: Canvas;
835
979
  --color-error-5: Canvas;
836
980
  --color-error-7: CanvasText;
981
+ --color-error-8: CanvasText;
837
982
  --color-error-9: Mark;
838
983
  --color-error-10: Mark;
839
984
  --color-error-11: CanvasText;
@@ -843,6 +988,7 @@
843
988
  --color-success-4: Canvas;
844
989
  --color-success-5: Canvas;
845
990
  --color-success-7: CanvasText;
991
+ --color-success-8: CanvasText;
846
992
  --color-success-9: Highlight;
847
993
  --color-success-10: Highlight;
848
994
  --color-success-11: CanvasText;
@@ -18,6 +18,7 @@
18
18
  legacy subpath. */
19
19
  @import "./primitives.css";
20
20
  @import "./semantic.css";
21
+ @import "./palettes.css";
21
22
  @import "./typography.css";
22
23
  @import "./typography-semantic.css";
23
24
  @import "./base.css";
@@ -334,15 +334,18 @@
334
334
  @utility bg-gradient-brand-dark { background-image: var(--gradient-brand-dark); }
335
335
 
336
336
  /* ───────────────────────────────────────────────────────────────────
337
- Card edge — the faint hairline for card/panel containers (NOT interactive
338
- controls, which use border-surface-border/-strong for WCAG 1.4.11 contrast).
337
+ Card edge — the faint hairline for card/panel containers. These are the
338
+ DECORATIVE border tier: they mark objects. Interactive controls must NOT
339
+ use them — controls take `border-surface-border-interactive[-strong]`,
340
+ which is the tier that carries WCAG 1.4.11 non-text contrast.
341
+ (This comment previously said the opposite, and ~19 controls followed it.)
339
342
  Single tunable source of truth; pairs with `border` (width) on the element.
340
343
  ─────────────────────────────────────────────────────────────────── */
341
344
 
342
345
  @utility border-card { border-color: var(--color-surface-border-card); }
343
346
  /* Stronger card edge (kbd caps, code blocks, skeleton/panel outlines, chip
344
- borders) — one step up from the faint `border-card` mix. Dark-mode aware via
345
- the semantic token. Was referenced in ~11 components with no matching utility
346
- (dead class border fell back to currentColor); defined here to restore the
347
- intended hairline. */
348
- @utility border-card-strong { border-color: var(--color-surface-border); }
347
+ borders) — genuinely one step up from `border-card`. It previously pointed at
348
+ `--color-surface-border`, which is exactly what `--color-surface-border-card`
349
+ already aliases, so the two utilities were the SAME colour and the ~13 call
350
+ sites asking for a heavier edge silently got the faint one. */
351
+ @utility border-card-strong { border-color: var(--color-surface-border-strong); }
@@ -1 +1 @@
1
- {"version":3,"file":"accordion.d.ts","sourceRoot":"","sources":["../../src/ui/accordion.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,kBAAkB,MAAM,6BAA6B,CAAA;AAGjE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAM9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,QAAA,MAAM,SAAS,8JAA0B,CAAA;AAEzC,QAAA,MAAM,aAAa,iKASjB,CAAA;AAGF,UAAU,6BAA8B,SAAQ,KAAK,CAAC,wBAAwB,CAAC,OAAO,kBAAkB,CAAC,OAAO,CAAC;IAC/G,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CACnC;AAED,QAAA,MAAM,gBAAgB,yGAwBpB,CAAA;AAGF,QAAA,MAAM,gBAAgB,oKAiBpB,CAAA;AAGF,MAAM,MAAM,kBAAkB,GAAG,KAAK,CAAC,wBAAwB,CAAC,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAA;AAC/F,MAAM,MAAM,qBAAqB,GAAG,6BAA6B,CAAA;AACjE,MAAM,MAAM,qBAAqB,GAAG,KAAK,CAAC,wBAAwB,CAAC,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAA;AAErG,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAC,aAAa,EAAE,gBAAgB,EAAE,CAAA"}
1
+ {"version":3,"file":"accordion.d.ts","sourceRoot":"","sources":["../../src/ui/accordion.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,kBAAkB,MAAM,6BAA6B,CAAA;AAGjE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAO9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,QAAA,MAAM,SAAS,8JAA0B,CAAA;AAEzC,QAAA,MAAM,aAAa,iKASjB,CAAA;AAGF,UAAU,6BAA8B,SAAQ,KAAK,CAAC,wBAAwB,CAAC,OAAO,kBAAkB,CAAC,OAAO,CAAC;IAC/G,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CACnC;AAED,QAAA,MAAM,gBAAgB,yGAwBpB,CAAA;AAGF,QAAA,MAAM,gBAAgB,oKAmBpB,CAAA;AAGF,MAAM,MAAM,kBAAkB,GAAG,KAAK,CAAC,wBAAwB,CAAC,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAA;AAC/F,MAAM,MAAM,qBAAqB,GAAG,6BAA6B,CAAA;AACjE,MAAM,MAAM,qBAAqB,GAAG,KAAK,CAAC,wBAAwB,CAAC,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAA;AAErG,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAC,aAAa,EAAE,gBAAgB,EAAE,CAAA"}
@@ -1,54 +1,55 @@
1
1
  "use client";
2
2
  import { Content2 as e, Header as t, Item as n, Root2 as r, Trigger2 as i } from "../_chunks/primitives/react-accordion.js";
3
3
  import { tweens as a } from "./lib/motion.js";
4
- import { cn as o } from "./lib/utils.js";
5
- import { Icon as s } from "./icon.js";
6
- import * as c from "react";
7
- import { jsx as l, jsxs as u } from "react/jsx-runtime";
8
- import { IconChevronDown as d } from "@tabler/icons-react";
9
- import { motion as f } from "framer-motion";
4
+ import { MotionPreference as o } from "../_chunks/motion-preference.js";
5
+ import { cn as s } from "./lib/utils.js";
6
+ import { Icon as c } from "./icon.js";
7
+ import * as l from "react";
8
+ import { jsx as u, jsxs as d } from "react/jsx-runtime";
9
+ import { IconChevronDown as f } from "@tabler/icons-react";
10
+ import { motion as p } from "framer-motion";
10
11
  //#region src/ui/accordion.tsx
11
- var p = r, m = c.forwardRef(({ className: e, ...t }, r) => /* @__PURE__ */ l(n, {
12
+ var m = r, h = l.forwardRef(({ className: e, ...t }, r) => /* @__PURE__ */ u(n, {
12
13
  ref: r,
13
- className: o("border-b border-surface-border", e),
14
+ className: s("border-b border-surface-border", e),
14
15
  ...t
15
16
  }));
16
- m.displayName = "AccordionItem";
17
- var h = c.forwardRef(({ className: e, children: n, chevronPosition: r = "right", ...a }, c) => {
18
- let f = /* @__PURE__ */ l(s, {
19
- icon: d,
17
+ h.displayName = "AccordionItem";
18
+ var g = l.forwardRef(({ className: e, children: n, chevronPosition: r = "right", ...a }, o) => {
19
+ let l = /* @__PURE__ */ u(c, {
20
+ icon: f,
20
21
  size: "sm",
21
22
  className: "shrink-0 text-surface-fg-muted transition-transform duration-moderate-02 ease-productive-standard group-data-[state=open]:rotate-180"
22
23
  });
23
- return /* @__PURE__ */ l(t, {
24
+ return /* @__PURE__ */ u(t, {
24
25
  className: "flex",
25
- children: /* @__PURE__ */ u(i, {
26
- ref: c,
27
- className: o("group flex flex-1 items-center justify-between py-ds-05 text-left text-body-md font-medium hover:bg-surface-panel-hover rounded-control data-[state=open]:bg-surface-panel-hover focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-accent-9", e),
26
+ children: /* @__PURE__ */ d(i, {
27
+ ref: o,
28
+ className: s("group flex flex-1 items-center justify-between py-ds-05 text-left text-body-md font-medium hover:bg-surface-panel-hover rounded-control data-[state=open]:bg-surface-panel-hover focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-accent-9", e),
28
29
  ...a,
29
30
  children: [
30
- r === "left" && f,
31
+ r === "left" && l,
31
32
  n,
32
- r === "right" && f
33
+ r === "right" && l
33
34
  ]
34
35
  })
35
36
  });
36
37
  });
37
- h.displayName = i.displayName;
38
- var g = c.forwardRef(({ className: t, children: n, ...r }, i) => /* @__PURE__ */ l(e, {
38
+ g.displayName = i.displayName;
39
+ var _ = l.forwardRef(({ className: t, children: n, ...r }, i) => /* @__PURE__ */ u(o, { children: /* @__PURE__ */ u(e, {
39
40
  ref: i,
40
41
  className: "w-full overflow-hidden text-body-md data-[state=open]:animate-accordion-down data-[state=closed]:animate-accordion-up",
41
42
  ...r,
42
- children: /* @__PURE__ */ l(f.div, {
43
+ children: /* @__PURE__ */ u(p.div, {
43
44
  initial: !1,
44
45
  animate: { opacity: 1 },
45
46
  transition: a.fade,
46
- children: /* @__PURE__ */ l("div", {
47
- className: o("pb-ds-05 pt-ds-02", t),
47
+ children: /* @__PURE__ */ u("div", {
48
+ className: s("pb-ds-05 pt-ds-02", t),
48
49
  children: n
49
50
  })
50
51
  })
51
- }));
52
- g.displayName = e.displayName;
52
+ }) }));
53
+ _.displayName = e.displayName;
53
54
  //#endregion
54
- export { p as Accordion, g as AccordionContent, m as AccordionItem, h as AccordionTrigger };
55
+ export { m as Accordion, _ as AccordionContent, h as AccordionItem, g as AccordionTrigger };
@@ -1 +1 @@
1
- {"version":3,"file":"accordion.js","names":[],"sources":["../../src/ui/accordion.tsx"],"sourcesContent":["'use client'\n\nimport * as AccordionPrimitive from '@primitives/react-accordion'\nimport { IconChevronDown } from '@tabler/icons-react'\nimport { motion } from 'framer-motion'\nimport * as React from 'react'\n\nimport { Icon } from './icon'\nimport { tweens } from './lib/motion'\nimport { cn } from './lib/utils'\n\n/**\n * Accordion compound component — vertically stacked, collapsible content sections.\n *\n * **Parts (in composition order):**\n * - `Accordion` — root; controls single vs. multiple open panels (this root)\n * - `AccordionItem` — individual collapsible section (requires `value` prop)\n * - `AccordionTrigger` — the clickable header row (chevron icon auto-renders and rotates)\n * - `AccordionContent` — the collapsible body revealed when the item is open\n *\n * **`type` prop (required on root):**\n * - `\"single\"` — only one panel open at a time; supports `collapsible` prop to re-close the active item\n * - `\"multiple\"` — multiple panels open simultaneously (value is `string[]`); `collapsible` is NOT valid here\n *\n * @compound\n * @example\n * // Single-open FAQ accordion:\n * <Accordion type=\"single\" defaultValue=\"item-1\" collapsible>\n * <AccordionItem value=\"item-1\">\n * <AccordionTrigger>What is Shilp Sutra?</AccordionTrigger>\n * <AccordionContent>\n * A React design system built for Next.js App Router, with full accessibility baked in.\n * </AccordionContent>\n * </AccordionItem>\n * <AccordionItem value=\"item-2\">\n * <AccordionTrigger>Is dark mode supported?</AccordionTrigger>\n * <AccordionContent>\n * Yes — add the <code>.dark</code> class to the root element to activate it.\n * </AccordionContent>\n * </AccordionItem>\n * </Accordion>\n *\n * @example\n * // Multiple-open controlled accordion:\n * const [open, setOpen] = useState<string[]>(['billing'])\n * <Accordion type=\"multiple\" value={open} onValueChange={setOpen}>\n * <AccordionItem value=\"billing\">\n * <AccordionTrigger>Billing</AccordionTrigger>\n * <AccordionContent>Your billing details here.</AccordionContent>\n * </AccordionItem>\n * <AccordionItem value=\"security\">\n * <AccordionTrigger>Security</AccordionTrigger>\n * <AccordionContent>Security settings here.</AccordionContent>\n * </AccordionItem>\n * </Accordion>\n */\nconst Accordion = AccordionPrimitive.Root\n\nconst AccordionItem = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <AccordionPrimitive.Item\n ref={ref}\n className={cn('border-b border-surface-border', className)}\n {...props}\n />\n))\nAccordionItem.displayName = 'AccordionItem'\n\ninterface AccordionTriggerExtendedProps extends React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger> {\n chevronPosition?: 'left' | 'right'\n}\n\nconst AccordionTrigger = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Trigger>,\n AccordionTriggerExtendedProps\n>(({ className, children, chevronPosition = 'right', ...props }, ref) => {\n const chevron = (\n <Icon icon={IconChevronDown} size=\"sm\" className=\"shrink-0 text-surface-fg-muted transition-transform duration-moderate-02 ease-productive-standard group-data-[state=open]:rotate-180\" />\n )\n\n return (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(\n 'group flex flex-1 items-center justify-between py-ds-05 text-left text-body-md font-medium hover:bg-surface-panel-hover rounded-control data-[state=open]:bg-surface-panel-hover focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-accent-9',\n className,\n )}\n {...props}\n >\n {chevronPosition === 'left' && chevron}\n {children}\n {chevronPosition === 'right' && chevron}\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n )\n})\nAccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName\n\nconst AccordionContent = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <AccordionPrimitive.Content\n ref={ref}\n className=\"w-full overflow-hidden text-body-md data-[state=open]:animate-accordion-down data-[state=closed]:animate-accordion-up\"\n {...props}\n >\n <motion.div\n initial={false}\n animate={{ opacity: 1 }}\n transition={tweens.fade}\n >\n <div className={cn('pb-ds-05 pt-ds-02', className)}>{children}</div>\n </motion.div>\n </AccordionPrimitive.Content>\n))\nAccordionContent.displayName = AccordionPrimitive.Content.displayName\n\nexport type AccordionItemProps = React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\nexport type AccordionTriggerProps = AccordionTriggerExtendedProps\nexport type AccordionContentProps = React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n\nexport { Accordion, AccordionContent,AccordionItem, AccordionTrigger }\n"],"mappings":";;;;;;;;;;AAwDA,IAAM,IAAY,GAEZ,IAAgB,EAAM,YAGzB,EAAE,cAAW,GAAG,KAAS,MAC1B,kBAAC,GAAD;CACO;CACL,WAAW,EAAG,kCAAkC,CAAS;CACzD,GAAI;AACL,CAAA,CACF;AACD,EAAc,cAAc;AAM5B,IAAM,IAAmB,EAAM,YAG5B,EAAE,cAAW,aAAU,qBAAkB,SAAS,GAAG,KAAS,MAAQ;CACvE,IAAM,IACJ,kBAAC,GAAD;EAAM,MAAM;EAAiB,MAAK;EAAK,WAAU;CAAwI,CAAA;CAG3L,OACE,kBAAC,GAAD;EAA2B,WAAU;YACnC,kBAAC,GAAD;GACO;GACL,WAAW,EACT,kQACA,CACF;GACA,GAAI;aANN;IAQG,MAAoB,UAAU;IAC9B;IACA,MAAoB,WAAW;GACN;;CACH,CAAA;AAE/B,CAAC;AACD,EAAiB,cAAA,EAAyC;AAE1D,IAAM,IAAmB,EAAM,YAG5B,EAAE,cAAW,aAAU,GAAG,KAAS,MACpC,kBAAC,GAAD;CACO;CACL,WAAU;CACV,GAAI;WAEJ,kBAAC,EAAO,KAAR;EACE,SAAS;EACT,SAAS,EAAE,SAAS,EAAE;EACtB,YAAY,EAAO;YAEnB,kBAAC,OAAD;GAAK,WAAW,EAAG,qBAAqB,CAAS;GAAI;EAAc,CAAA;CACzD,CAAA;AACc,CAAA,CAC7B;AACD,EAAiB,cAAA,EAAyC"}
1
+ {"version":3,"file":"accordion.js","names":[],"sources":["../../src/ui/accordion.tsx"],"sourcesContent":["'use client'\n\nimport * as AccordionPrimitive from '@primitives/react-accordion'\nimport { IconChevronDown } from '@tabler/icons-react'\nimport { motion } from 'framer-motion'\nimport * as React from 'react'\n\nimport { MotionPreference } from '../motion/motion-preference'\nimport { Icon } from './icon'\nimport { tweens } from './lib/motion'\nimport { cn } from './lib/utils'\n\n/**\n * Accordion compound component — vertically stacked, collapsible content sections.\n *\n * **Parts (in composition order):**\n * - `Accordion` — root; controls single vs. multiple open panels (this root)\n * - `AccordionItem` — individual collapsible section (requires `value` prop)\n * - `AccordionTrigger` — the clickable header row (chevron icon auto-renders and rotates)\n * - `AccordionContent` — the collapsible body revealed when the item is open\n *\n * **`type` prop (required on root):**\n * - `\"single\"` — only one panel open at a time; supports `collapsible` prop to re-close the active item\n * - `\"multiple\"` — multiple panels open simultaneously (value is `string[]`); `collapsible` is NOT valid here\n *\n * @compound\n * @example\n * // Single-open FAQ accordion:\n * <Accordion type=\"single\" defaultValue=\"item-1\" collapsible>\n * <AccordionItem value=\"item-1\">\n * <AccordionTrigger>What is Shilp Sutra?</AccordionTrigger>\n * <AccordionContent>\n * A React design system built for Next.js App Router, with full accessibility baked in.\n * </AccordionContent>\n * </AccordionItem>\n * <AccordionItem value=\"item-2\">\n * <AccordionTrigger>Is dark mode supported?</AccordionTrigger>\n * <AccordionContent>\n * Yes — add the <code>.dark</code> class to the root element to activate it.\n * </AccordionContent>\n * </AccordionItem>\n * </Accordion>\n *\n * @example\n * // Multiple-open controlled accordion:\n * const [open, setOpen] = useState<string[]>(['billing'])\n * <Accordion type=\"multiple\" value={open} onValueChange={setOpen}>\n * <AccordionItem value=\"billing\">\n * <AccordionTrigger>Billing</AccordionTrigger>\n * <AccordionContent>Your billing details here.</AccordionContent>\n * </AccordionItem>\n * <AccordionItem value=\"security\">\n * <AccordionTrigger>Security</AccordionTrigger>\n * <AccordionContent>Security settings here.</AccordionContent>\n * </AccordionItem>\n * </Accordion>\n */\nconst Accordion = AccordionPrimitive.Root\n\nconst AccordionItem = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <AccordionPrimitive.Item\n ref={ref}\n className={cn('border-b border-surface-border', className)}\n {...props}\n />\n))\nAccordionItem.displayName = 'AccordionItem'\n\ninterface AccordionTriggerExtendedProps extends React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger> {\n chevronPosition?: 'left' | 'right'\n}\n\nconst AccordionTrigger = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Trigger>,\n AccordionTriggerExtendedProps\n>(({ className, children, chevronPosition = 'right', ...props }, ref) => {\n const chevron = (\n <Icon icon={IconChevronDown} size=\"sm\" className=\"shrink-0 text-surface-fg-muted transition-transform duration-moderate-02 ease-productive-standard group-data-[state=open]:rotate-180\" />\n )\n\n return (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n ref={ref}\n className={cn(\n 'group flex flex-1 items-center justify-between py-ds-05 text-left text-body-md font-medium hover:bg-surface-panel-hover rounded-control data-[state=open]:bg-surface-panel-hover focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-accent-9',\n className,\n )}\n {...props}\n >\n {chevronPosition === 'left' && chevron}\n {children}\n {chevronPosition === 'right' && chevron}\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n )\n})\nAccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName\n\nconst AccordionContent = React.forwardRef<\n React.ElementRef<typeof AccordionPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n <MotionPreference>\n <AccordionPrimitive.Content\n ref={ref}\n className=\"w-full overflow-hidden text-body-md data-[state=open]:animate-accordion-down data-[state=closed]:animate-accordion-up\"\n {...props}\n >\n <motion.div\n initial={false}\n animate={{ opacity: 1 }}\n transition={tweens.fade}\n >\n <div className={cn('pb-ds-05 pt-ds-02', className)}>{children}</div>\n </motion.div>\n </AccordionPrimitive.Content>\n </MotionPreference>\n))\nAccordionContent.displayName = AccordionPrimitive.Content.displayName\n\nexport type AccordionItemProps = React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\nexport type AccordionTriggerProps = AccordionTriggerExtendedProps\nexport type AccordionContentProps = React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n\nexport { Accordion, AccordionContent,AccordionItem, AccordionTrigger }\n"],"mappings":";;;;;;;;;;;AAyDA,IAAM,IAAY,GAEZ,IAAgB,EAAM,YAGzB,EAAE,cAAW,GAAG,KAAS,MAC1B,kBAAC,GAAD;CACO;CACL,WAAW,EAAG,kCAAkC,CAAS;CACzD,GAAI;AACL,CAAA,CACF;AACD,EAAc,cAAc;AAM5B,IAAM,IAAmB,EAAM,YAG5B,EAAE,cAAW,aAAU,qBAAkB,SAAS,GAAG,KAAS,MAAQ;CACvE,IAAM,IACJ,kBAAC,GAAD;EAAM,MAAM;EAAiB,MAAK;EAAK,WAAU;CAAwI,CAAA;CAG3L,OACE,kBAAC,GAAD;EAA2B,WAAU;YACnC,kBAAC,GAAD;GACO;GACL,WAAW,EACT,kQACA,CACF;GACA,GAAI;aANN;IAQG,MAAoB,UAAU;IAC9B;IACA,MAAoB,WAAW;GACN;;CACH,CAAA;AAE/B,CAAC;AACD,EAAiB,cAAA,EAAyC;AAE1D,IAAM,IAAmB,EAAM,YAG5B,EAAE,cAAW,aAAU,GAAG,KAAS,MACpC,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;CACO;CACL,WAAU;CACV,GAAI;WAEJ,kBAAC,EAAO,KAAR;EACE,SAAS;EACT,SAAS,EAAE,SAAS,EAAE;EACtB,YAAY,EAAO;YAEnB,kBAAC,OAAD;GAAK,WAAW,EAAG,qBAAqB,CAAS;GAAI;EAAc,CAAA;CACzD,CAAA;AACc,CAAA,EACZ,CAAA,CACnB;AACD,EAAiB,cAAA,EAAyC"}
@@ -1 +1 @@
1
- {"version":3,"file":"alert-dialog.d.ts","sourceRoot":"","sources":["../../src/ui/alert-dialog.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,oBAAoB,MAAM,gCAAgC,CAAA;AAEtE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAY9B,QAAA,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,wBAAwB,CAAC,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAyB3F,CAAA;AAGD,QAAA,MAAM,kBAAkB,wHAA+B,CAAA;AAEvD,QAAA,MAAM,iBAAiB,uDAA8B,CAAA;AAErD,QAAA,MAAM,kBAAkB,wKAatB,CAAA;AAGF,UAAU,uBAAwB,SAAQ,KAAK,CAAC,wBAAwB,CAAC,OAAO,oBAAoB,CAAC,OAAO,CAAC;IAC3G,oHAAoH;IACpH,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,QAAA,MAAM,kBAAkB,gGAiDtB,CAAA;AAGF,QAAA,MAAM,iBAAiB,6GAWtB,CAAA;AAGD,QAAA,MAAM,iBAAiB,6GAWtB,CAAA;AAGD,QAAA,MAAM,gBAAgB,8KAYpB,CAAA;AAGF,QAAA,MAAM,sBAAsB,wLAS1B,CAAA;AAIF,QAAA,MAAM,iBAAiB,6KAYrB,CAAA;AAGF,QAAA,MAAM,iBAAiB,6KAYrB,CAAA;AAGF,YAAY,EAAE,uBAAuB,EAAE,CAAA;AACvC,MAAM,MAAM,sBAAsB,GAAG,KAAK,CAAC,wBAAwB,CAAC,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAA;AACvG,MAAM,MAAM,sBAAsB,GAAG,KAAK,CAAC,wBAAwB,CAAC,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAA;AAEvG,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,GACnB,CAAA"}
1
+ {"version":3,"file":"alert-dialog.d.ts","sourceRoot":"","sources":["../../src/ui/alert-dialog.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,oBAAoB,MAAM,gCAAgC,CAAA;AAEtE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAa9B,QAAA,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,wBAAwB,CAAC,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAyB3F,CAAA;AAGD,QAAA,MAAM,kBAAkB,wHAA+B,CAAA;AAEvD,QAAA,MAAM,iBAAiB,uDAA8B,CAAA;AAErD,QAAA,MAAM,kBAAkB,wKAatB,CAAA;AAGF,UAAU,uBAAwB,SAAQ,KAAK,CAAC,wBAAwB,CAAC,OAAO,oBAAoB,CAAC,OAAO,CAAC;IAC3G,oHAAoH;IACpH,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,QAAA,MAAM,kBAAkB,gGAmDtB,CAAA;AAGF,QAAA,MAAM,iBAAiB,6GAWtB,CAAA;AAGD,QAAA,MAAM,iBAAiB,6GAWtB,CAAA;AAGD,QAAA,MAAM,gBAAgB,8KAYpB,CAAA;AAGF,QAAA,MAAM,sBAAsB,wLAS1B,CAAA;AAIF,QAAA,MAAM,iBAAiB,6KAYrB,CAAA;AAGF,QAAA,MAAM,iBAAiB,6KAYrB,CAAA;AAGF,YAAY,EAAE,uBAAuB,EAAE,CAAA;AACvC,MAAM,MAAM,sBAAsB,GAAG,KAAK,CAAC,wBAAwB,CAAC,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAA;AACvG,MAAM,MAAM,sBAAsB,GAAG,KAAK,CAAC,wBAAwB,CAAC,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAA;AAEvG,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,GACnB,CAAA"}
@@ -1,115 +1,116 @@
1
1
  "use client";
2
2
  import { springs as e, tweens as t } from "./lib/motion.js";
3
- import { cn as n } from "./lib/utils.js";
4
- import { Action as r, Cancel as i, Content2 as a, Description2 as o, Overlay2 as s, Portal2 as c, Root2 as l, Title2 as u, Trigger2 as d } from "../_chunks/primitives/react-alert-dialog.js";
5
- import { useIsMobile as f } from "../hooks/use-mobile.js";
6
- import * as p from "react";
7
- import { jsx as m, jsxs as h } from "react/jsx-runtime";
8
- import { AnimatePresence as g, motion as _ } from "framer-motion";
3
+ import { MotionPreference as n } from "../_chunks/motion-preference.js";
4
+ import { cn as r } from "./lib/utils.js";
5
+ import { Action as i, Cancel as a, Content2 as o, Description2 as s, Overlay2 as c, Portal2 as l, Root2 as u, Title2 as d, Trigger2 as f } from "../_chunks/primitives/react-alert-dialog.js";
6
+ import { useIsMobile as p } from "../hooks/use-mobile.js";
7
+ import * as m from "react";
8
+ import { jsx as h, jsxs as g } from "react/jsx-runtime";
9
+ import { AnimatePresence as _, motion as v } from "framer-motion";
9
10
  //#region src/ui/alert-dialog.tsx
10
- var v = p.createContext({ open: !1 }), y = () => p.useContext(v), b = ({ open: e, defaultOpen: t, onOpenChange: n, ...r }) => {
11
- let [i, a] = p.useState(t ?? !1), o = e !== void 0, s = o ? e : i, c = p.useCallback((e) => {
11
+ var y = m.createContext({ open: !1 }), b = () => m.useContext(y), x = ({ open: e, defaultOpen: t, onOpenChange: n, ...r }) => {
12
+ let [i, a] = m.useState(t ?? !1), o = e !== void 0, s = o ? e : i, c = m.useCallback((e) => {
12
13
  o || a(e), n?.(e);
13
- }, [o, n]), u = p.useMemo(() => ({ open: s }), [s]);
14
- return /* @__PURE__ */ m(v.Provider, {
15
- value: u,
16
- children: /* @__PURE__ */ m(l, {
14
+ }, [o, n]), l = m.useMemo(() => ({ open: s }), [s]);
15
+ return /* @__PURE__ */ h(y.Provider, {
16
+ value: l,
17
+ children: /* @__PURE__ */ h(u, {
17
18
  open: s,
18
19
  onOpenChange: c,
19
20
  ...r
20
21
  })
21
22
  });
22
23
  };
23
- b.displayName = "AlertDialog";
24
- var x = d, S = c, C = p.forwardRef(({ className: e, ...t }, r) => /* @__PURE__ */ m(s, {
25
- ref: r,
24
+ x.displayName = "AlertDialog";
25
+ var S = f, C = l, w = m.forwardRef(({ className: e, ...t }, n) => /* @__PURE__ */ h(c, {
26
+ ref: n,
26
27
  forceMount: !0,
27
- className: n("fixed inset-0 z-modal bg-overlay", e),
28
+ className: r("fixed inset-0 z-modal bg-overlay", e),
28
29
  ...t
29
30
  }));
30
- C.displayName = s.displayName;
31
- var w = p.forwardRef(({ className: r, children: i, responsive: o, ...s }, c) => {
32
- let { open: l } = y(), u = f(), d = o !== !1 && u;
33
- return /* @__PURE__ */ m(g, { children: l && /* @__PURE__ */ h(S, {
31
+ w.displayName = c.displayName;
32
+ var T = m.forwardRef(({ className: i, children: a, responsive: s, ...c }, l) => {
33
+ let { open: u } = b(), d = p(), f = s !== !1 && d;
34
+ return /* @__PURE__ */ h(n, { children: /* @__PURE__ */ h(_, { children: u && /* @__PURE__ */ g(C, {
34
35
  forceMount: !0,
35
- children: [/* @__PURE__ */ m(C, {
36
+ children: [/* @__PURE__ */ h(w, {
36
37
  asChild: !0,
37
- children: /* @__PURE__ */ m(_.div, {
38
+ children: /* @__PURE__ */ h(v.div, {
38
39
  initial: { opacity: 0 },
39
40
  animate: { opacity: 1 },
40
41
  exit: { opacity: 0 },
41
42
  transition: t.fade
42
43
  })
43
- }), /* @__PURE__ */ m(a, {
44
- ref: c,
44
+ }), /* @__PURE__ */ h(o, {
45
+ ref: l,
45
46
  forceMount: !0,
46
47
  asChild: !0,
47
- ...s,
48
- children: /* @__PURE__ */ m(_.div, {
49
- initial: d ? { y: "100%" } : {
48
+ ...c,
49
+ children: /* @__PURE__ */ h(v.div, {
50
+ initial: f ? { y: "100%" } : {
50
51
  opacity: 0,
51
52
  scale: .95,
52
53
  x: "-50%",
53
54
  y: "-50%"
54
55
  },
55
- animate: d ? { y: 0 } : {
56
+ animate: f ? { y: 0 } : {
56
57
  opacity: 1,
57
58
  scale: 1,
58
59
  x: "-50%",
59
60
  y: "-50%"
60
61
  },
61
- exit: d ? { y: "100%" } : {
62
+ exit: f ? { y: "100%" } : {
62
63
  opacity: 0,
63
64
  scale: .95,
64
65
  x: "-50%",
65
66
  y: "-50%"
66
67
  },
67
- transition: d ? e.smooth : {
68
+ transition: f ? e.smooth : {
68
69
  ...e.smooth,
69
70
  opacity: t.fade
70
71
  },
71
- className: n("fixed z-modal grid w-full gap-ds-05 bg-surface-overlay p-ds-06", o === !1 ? "left-[50%] top-[50%] max-w-lg rounded-overlay-lg shadow-overlay" : "inset-0 md:inset-auto md:left-[50%] md:top-[50%] md:max-w-lg md:rounded-overlay-lg md:shadow-overlay", r),
72
- children: i
72
+ className: r("fixed z-modal grid w-full gap-ds-05 bg-surface-overlay p-ds-06", s === !1 ? "left-[50%] top-[50%] max-w-lg rounded-overlay-lg shadow-overlay" : "inset-0 md:inset-auto md:left-[50%] md:top-[50%] md:max-w-lg md:rounded-overlay-lg md:shadow-overlay", i),
73
+ children: a
73
74
  })
74
75
  })]
75
- }) });
76
+ }) }) });
76
77
  });
77
- w.displayName = a.displayName;
78
- var T = p.forwardRef(({ className: e, ...t }, r) => /* @__PURE__ */ m("div", {
79
- ref: r,
80
- className: n("flex flex-col space-y-ds-02b text-center sm:text-left", e),
78
+ T.displayName = o.displayName;
79
+ var E = m.forwardRef(({ className: e, ...t }, n) => /* @__PURE__ */ h("div", {
80
+ ref: n,
81
+ className: r("flex flex-col space-y-ds-02b text-center sm:text-left", e),
81
82
  ...t
82
83
  }));
83
- T.displayName = "AlertDialogHeader";
84
- var E = p.forwardRef(({ className: e, ...t }, r) => /* @__PURE__ */ m("div", {
85
- ref: r,
86
- className: n("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-ds-03", e),
84
+ E.displayName = "AlertDialogHeader";
85
+ var D = m.forwardRef(({ className: e, ...t }, n) => /* @__PURE__ */ h("div", {
86
+ ref: n,
87
+ className: r("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-ds-03", e),
87
88
  ...t
88
89
  }));
89
- E.displayName = "AlertDialogFooter";
90
- var D = p.forwardRef(({ className: e, ...t }, r) => /* @__PURE__ */ m(u, {
91
- ref: r,
92
- className: n("text-heading-xs font-semibold", e),
90
+ D.displayName = "AlertDialogFooter";
91
+ var O = m.forwardRef(({ className: e, ...t }, n) => /* @__PURE__ */ h(d, {
92
+ ref: n,
93
+ className: r("text-heading-xs font-semibold", e),
93
94
  ...t
94
95
  }));
95
- D.displayName = u.displayName;
96
- var O = p.forwardRef(({ className: e, ...t }, r) => /* @__PURE__ */ m(o, {
97
- ref: r,
98
- className: n("text-body-md text-surface-fg-muted", e),
96
+ O.displayName = d.displayName;
97
+ var k = m.forwardRef(({ className: e, ...t }, n) => /* @__PURE__ */ h(s, {
98
+ ref: n,
99
+ className: r("text-body-md text-surface-fg-muted", e),
99
100
  ...t
100
101
  }));
101
- O.displayName = o.displayName;
102
- var k = p.forwardRef(({ className: e, ...t }, i) => /* @__PURE__ */ m(r, {
103
- ref: i,
104
- className: n("inline-flex h-ds-md items-center justify-center rounded-control px-ds-05 text-body-md font-semibold transition-colors bg-accent-9 text-accent-fg hover:bg-accent-10 active:bg-accent-10 shadow-raised focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-accent-9 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-action-disabled", e),
102
+ k.displayName = s.displayName;
103
+ var A = m.forwardRef(({ className: e, ...t }, n) => /* @__PURE__ */ h(i, {
104
+ ref: n,
105
+ className: r("inline-flex h-ds-md items-center justify-center rounded-control px-ds-05 text-body-md font-semibold transition-colors bg-accent-9 text-accent-fg hover:bg-accent-10 active:bg-accent-10 shadow-raised focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-accent-9 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-action-disabled", e),
105
106
  ...t
106
107
  }));
107
- k.displayName = r.displayName;
108
- var A = p.forwardRef(({ className: e, ...t }, r) => /* @__PURE__ */ m(i, {
109
- ref: r,
110
- className: n("inline-flex h-ds-md items-center justify-center rounded-control px-ds-05 text-body-md font-semibold transition-colors bg-transparent text-surface-fg-muted border border-surface-border-strong hover:bg-surface-panel-hover hover:text-surface-fg focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-accent-9 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-action-disabled", e),
108
+ A.displayName = i.displayName;
109
+ var j = m.forwardRef(({ className: e, ...t }, n) => /* @__PURE__ */ h(a, {
110
+ ref: n,
111
+ className: r("inline-flex h-ds-md items-center justify-center rounded-control px-ds-05 text-body-md font-semibold transition-colors bg-transparent text-surface-fg-muted border border-surface-border-interactive hover:bg-surface-panel-hover hover:text-surface-fg focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-accent-9 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-action-disabled", e),
111
112
  ...t
112
113
  }));
113
- A.displayName = i.displayName;
114
+ j.displayName = a.displayName;
114
115
  //#endregion
115
- export { b as AlertDialog, k as AlertDialogAction, A as AlertDialogCancel, w as AlertDialogContent, O as AlertDialogDescription, E as AlertDialogFooter, T as AlertDialogHeader, C as AlertDialogOverlay, S as AlertDialogPortal, D as AlertDialogTitle, x as AlertDialogTrigger };
116
+ export { x as AlertDialog, A as AlertDialogAction, j as AlertDialogCancel, T as AlertDialogContent, k as AlertDialogDescription, D as AlertDialogFooter, E as AlertDialogHeader, w as AlertDialogOverlay, C as AlertDialogPortal, O as AlertDialogTitle, S as AlertDialogTrigger };