@devalok/shilp-sutra 0.56.0 → 0.59.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 (374) hide show
  1. package/MIGRATION.md +198 -0
  2. package/dist/_chunks/badge-group.js +75 -174
  3. package/dist/_chunks/badge-group.js.map +1 -1
  4. package/dist/_chunks/chat.js +270 -253
  5. package/dist/_chunks/chat.js.map +1 -1
  6. package/dist/_chunks/document-preview.js +1 -1
  7. package/dist/_chunks/document-preview.js.map +1 -1
  8. package/dist/_chunks/emoji-suggestion.js +1 -1
  9. package/dist/_chunks/emoji-suggestion.js.map +1 -1
  10. package/dist/_chunks/image-preview.js +71 -70
  11. package/dist/_chunks/image-preview.js.map +1 -1
  12. package/dist/_chunks/mention-suggestion.js +2 -2
  13. package/dist/_chunks/mention-suggestion.js.map +1 -1
  14. package/dist/_chunks/motion-preference.js +15 -0
  15. package/dist/_chunks/motion-preference.js.map +1 -0
  16. package/dist/_chunks/motion-provider.js +1 -1
  17. package/dist/_chunks/motion-provider.js.map +1 -1
  18. package/dist/_chunks/oauth-button.js +1 -1
  19. package/dist/_chunks/oauth-button.js.map +1 -1
  20. package/dist/_chunks/popover.js +50 -49
  21. package/dist/_chunks/popover.js.map +1 -1
  22. package/dist/_chunks/primitives-internal.js +29 -29
  23. package/dist/_chunks/primitives-internal.js.map +1 -1
  24. package/dist/_chunks/shared.js +48 -47
  25. package/dist/_chunks/shared.js.map +1 -1
  26. package/dist/_chunks/success.js +36 -36
  27. package/dist/_chunks/success.js.map +1 -1
  28. package/dist/_chunks/tree-view.js +1 -1
  29. package/dist/_chunks/tree-view.js.map +1 -1
  30. package/dist/_chunks/use-calendar.js +4 -4
  31. package/dist/_chunks/use-calendar.js.map +1 -1
  32. package/dist/ai/block-renderer.js +8 -8
  33. package/dist/ai/blocks/text.js +1 -1
  34. package/dist/ai/blocks/text.js.map +1 -1
  35. package/dist/ai/command-bar.js +67 -67
  36. package/dist/ai/command-bar.js.map +1 -1
  37. package/dist/ai/conversation.js +35 -35
  38. package/dist/ai/conversation.js.map +1 -1
  39. package/dist/ai/index.js +4 -4
  40. package/dist/composed/activity-feed.d.ts.map +1 -1
  41. package/dist/composed/activity-feed.js +109 -108
  42. package/dist/composed/activity-feed.js.map +1 -1
  43. package/dist/composed/avatar-group.d.ts +7 -2
  44. package/dist/composed/avatar-group.d.ts.map +1 -1
  45. package/dist/composed/avatar-group.js +3 -3
  46. package/dist/composed/avatar-group.js.map +1 -1
  47. package/dist/composed/command-palette.js +137 -137
  48. package/dist/composed/command-palette.js.map +1 -1
  49. package/dist/composed/content-card.js +2 -2
  50. package/dist/composed/content-card.js.map +1 -1
  51. package/dist/composed/date-picker/index.js +9 -9
  52. package/dist/composed/date-picker/index.js.map +1 -1
  53. package/dist/composed/diff.d.ts +23 -2
  54. package/dist/composed/diff.d.ts.map +1 -1
  55. package/dist/composed/diff.js +341 -260
  56. package/dist/composed/diff.js.map +1 -1
  57. package/dist/composed/emoji-picker.js +3 -3
  58. package/dist/composed/emoji-picker.js.map +1 -1
  59. package/dist/composed/empty-state.js +4 -4
  60. package/dist/composed/error-boundary.js +2 -2
  61. package/dist/composed/error-boundary.js.map +1 -1
  62. package/dist/composed/file-preview/image-preview.d.ts.map +1 -1
  63. package/dist/composed/file-preview/shared.d.ts.map +1 -1
  64. package/dist/composed/file-preview/video-preview.d.ts.map +1 -1
  65. package/dist/composed/file-preview.js +152 -151
  66. package/dist/composed/file-preview.js.map +1 -1
  67. package/dist/composed/filter-bar.d.ts.map +1 -1
  68. package/dist/composed/filter-bar.js +53 -52
  69. package/dist/composed/filter-bar.js.map +1 -1
  70. package/dist/composed/form-section.d.ts.map +1 -1
  71. package/dist/composed/form-section.js +38 -37
  72. package/dist/composed/form-section.js.map +1 -1
  73. package/dist/composed/inline-edit.js +1 -1
  74. package/dist/composed/inline-edit.js.map +1 -1
  75. package/dist/composed/loading-skeleton.js +3 -3
  76. package/dist/composed/loading-skeleton.js.map +1 -1
  77. package/dist/composed/master-detail.d.ts.map +1 -1
  78. package/dist/composed/master-detail.js +1 -1
  79. package/dist/composed/master-detail.js.map +1 -1
  80. package/dist/composed/member-picker.js +1 -1
  81. package/dist/composed/member-picker.js.map +1 -1
  82. package/dist/composed/multi-select-popover.d.ts.map +1 -1
  83. package/dist/composed/multi-select-popover.js +109 -108
  84. package/dist/composed/multi-select-popover.js.map +1 -1
  85. package/dist/composed/page-skeletons.js +4 -4
  86. package/dist/composed/page-skeletons.js.map +1 -1
  87. package/dist/composed/responsive-modal.js +1 -1
  88. package/dist/composed/responsive-modal.js.map +1 -1
  89. package/dist/composed/rich-chat-input/attachment-strip.d.ts.map +1 -1
  90. package/dist/composed/rich-chat-input/reply-banner.d.ts.map +1 -1
  91. package/dist/composed/rich-chat-input/schedule-send.d.ts.map +1 -1
  92. package/dist/composed/rich-chat-input.d.ts.map +1 -1
  93. package/dist/composed/rich-chat-input.js +473 -472
  94. package/dist/composed/rich-chat-input.js.map +1 -1
  95. package/dist/composed/rich-text-editor.js +6 -6
  96. package/dist/composed/rich-text-editor.js.map +1 -1
  97. package/dist/composed/schedule-view.js +5 -5
  98. package/dist/composed/schedule-view.js.map +1 -1
  99. package/dist/composed/status-badge.d.ts.map +1 -1
  100. package/dist/composed/status-badge.js +29 -28
  101. package/dist/composed/status-badge.js.map +1 -1
  102. package/dist/hooks/index.d.ts +1 -0
  103. package/dist/hooks/index.d.ts.map +1 -1
  104. package/dist/hooks/index.js +4 -3
  105. package/dist/hooks/use-container-size.d.ts +18 -0
  106. package/dist/hooks/use-container-size.d.ts.map +1 -0
  107. package/dist/hooks/use-container-size.js +28 -0
  108. package/dist/hooks/use-container-size.js.map +1 -0
  109. package/dist/motion/index.d.ts +1 -0
  110. package/dist/motion/index.d.ts.map +1 -1
  111. package/dist/motion/index.js +2 -15
  112. package/dist/motion/motion-preference.d.ts +36 -0
  113. package/dist/motion/motion-preference.d.ts.map +1 -0
  114. package/dist/motion/motion-provider.d.ts +2 -1
  115. package/dist/motion/motion-provider.d.ts.map +1 -1
  116. package/dist/motion/primitives-index.js +103 -102
  117. package/dist/motion/primitives-index.js.map +1 -1
  118. package/dist/motion/primitives.d.ts.map +1 -1
  119. package/dist/shell/app-shell.d.ts +101 -0
  120. package/dist/shell/app-shell.d.ts.map +1 -0
  121. package/dist/shell/app-shell.js +76 -0
  122. package/dist/shell/app-shell.js.map +1 -0
  123. package/dist/shell/bottom-navbar.js +21 -21
  124. package/dist/shell/bottom-navbar.js.map +1 -1
  125. package/dist/shell/index.d.ts +2 -1
  126. package/dist/shell/index.d.ts.map +1 -1
  127. package/dist/shell/index.js +6 -5
  128. package/dist/shell/notification-center.d.ts +17 -0
  129. package/dist/shell/notification-center.d.ts.map +1 -1
  130. package/dist/shell/notification-center.js +110 -105
  131. package/dist/shell/notification-center.js.map +1 -1
  132. package/dist/shell/notification-preferences.js +1 -1
  133. package/dist/shell/notification-preferences.js.map +1 -1
  134. package/dist/shell/top-bar.js +7 -7
  135. package/dist/shell/top-bar.js.map +1 -1
  136. package/dist/tokens/generate-scale.d.ts +49 -0
  137. package/dist/tokens/generate-scale.d.ts.map +1 -1
  138. package/dist/tokens/index.css +1 -0
  139. package/dist/tokens/palettes.css +292 -0
  140. package/dist/tokens/primitives.css +29 -26
  141. package/dist/tokens/semantic.css +170 -47
  142. package/dist/tokens/shilp-sutra.css +1 -0
  143. package/dist/tokens/utilities.css +10 -7
  144. package/dist/tokens/variants.css +1 -1
  145. package/dist/ui/accordion.d.ts.map +1 -1
  146. package/dist/ui/accordion.js +27 -26
  147. package/dist/ui/accordion.js.map +1 -1
  148. package/dist/ui/alert-dialog.d.ts.map +1 -1
  149. package/dist/ui/alert-dialog.js +60 -59
  150. package/dist/ui/alert-dialog.js.map +1 -1
  151. package/dist/ui/alert.d.ts.map +1 -1
  152. package/dist/ui/alert.js +55 -113
  153. package/dist/ui/alert.js.map +1 -1
  154. package/dist/ui/autocomplete.js +80 -80
  155. package/dist/ui/autocomplete.js.map +1 -1
  156. package/dist/ui/avatar.d.ts.map +1 -1
  157. package/dist/ui/avatar.js +71 -70
  158. package/dist/ui/avatar.js.map +1 -1
  159. package/dist/ui/badge-indicator.d.ts +4 -8
  160. package/dist/ui/badge-indicator.d.ts.map +1 -1
  161. package/dist/ui/badge-indicator.js +3 -8
  162. package/dist/ui/badge-indicator.js.map +1 -1
  163. package/dist/ui/badge.d.ts +55 -34
  164. package/dist/ui/badge.d.ts.map +1 -1
  165. package/dist/ui/banner.d.ts.map +1 -1
  166. package/dist/ui/banner.js +43 -41
  167. package/dist/ui/banner.js.map +1 -1
  168. package/dist/ui/button-group.d.ts.map +1 -1
  169. package/dist/ui/button-group.js +3 -23
  170. package/dist/ui/button-group.js.map +1 -1
  171. package/dist/ui/button.d.ts +10 -1
  172. package/dist/ui/button.d.ts.map +1 -1
  173. package/dist/ui/button.js +79 -212
  174. package/dist/ui/button.js.map +1 -1
  175. package/dist/ui/card.d.ts.map +1 -1
  176. package/dist/ui/card.js +78 -75
  177. package/dist/ui/card.js.map +1 -1
  178. package/dist/ui/charts/radar-chart.d.ts.map +1 -1
  179. package/dist/ui/charts/radar-chart.js +1 -1
  180. package/dist/ui/charts/radar-chart.js.map +1 -1
  181. package/dist/ui/chat/date-separator.d.ts +8 -1
  182. package/dist/ui/chat/date-separator.d.ts.map +1 -1
  183. package/dist/ui/chat/message-list.d.ts.map +1 -1
  184. package/dist/ui/chat/message.d.ts.map +1 -1
  185. package/dist/ui/chat/typing-indicator.d.ts.map +1 -1
  186. package/dist/ui/checkbox.js +1 -1
  187. package/dist/ui/checkbox.js.map +1 -1
  188. package/dist/ui/code.js +2 -2
  189. package/dist/ui/code.js.map +1 -1
  190. package/dist/ui/color-input.d.ts.map +1 -1
  191. package/dist/ui/color-input.js +151 -150
  192. package/dist/ui/color-input.js.map +1 -1
  193. package/dist/ui/combobox.d.ts +14 -0
  194. package/dist/ui/combobox.d.ts.map +1 -1
  195. package/dist/ui/combobox.js +156 -152
  196. package/dist/ui/combobox.js.map +1 -1
  197. package/dist/ui/context-menu.d.ts.map +1 -1
  198. package/dist/ui/context-menu.js +70 -69
  199. package/dist/ui/context-menu.js.map +1 -1
  200. package/dist/ui/data-table-body.d.ts +3 -1
  201. package/dist/ui/data-table-body.d.ts.map +1 -1
  202. package/dist/ui/data-table-body.js +93 -92
  203. package/dist/ui/data-table-body.js.map +1 -1
  204. package/dist/ui/data-table-bulk-actions.d.ts +7 -1
  205. package/dist/ui/data-table-bulk-actions.d.ts.map +1 -1
  206. package/dist/ui/data-table-bulk-actions.js +14 -8
  207. package/dist/ui/data-table-bulk-actions.js.map +1 -1
  208. package/dist/ui/data-table-card.d.ts.map +1 -1
  209. package/dist/ui/data-table-card.js +66 -47
  210. package/dist/ui/data-table-card.js.map +1 -1
  211. package/dist/ui/data-table-context.d.ts +4 -0
  212. package/dist/ui/data-table-context.d.ts.map +1 -1
  213. package/dist/ui/data-table-context.js +2 -2
  214. package/dist/ui/data-table-context.js.map +1 -1
  215. package/dist/ui/data-table-header.d.ts.map +1 -1
  216. package/dist/ui/data-table-header.js +50 -46
  217. package/dist/ui/data-table-header.js.map +1 -1
  218. package/dist/ui/data-table-pagination.js +3 -3
  219. package/dist/ui/data-table-pagination.js.map +1 -1
  220. package/dist/ui/data-table-toolbar.d.ts +11 -1
  221. package/dist/ui/data-table-toolbar.d.ts.map +1 -1
  222. package/dist/ui/data-table-toolbar.js +7 -7
  223. package/dist/ui/data-table-toolbar.js.map +1 -1
  224. package/dist/ui/data-table.d.ts +52 -5
  225. package/dist/ui/data-table.d.ts.map +1 -1
  226. package/dist/ui/data-table.js +181 -169
  227. package/dist/ui/data-table.js.map +1 -1
  228. package/dist/ui/dialog.d.ts.map +1 -1
  229. package/dist/ui/dialog.js +62 -61
  230. package/dist/ui/dialog.js.map +1 -1
  231. package/dist/ui/dot.d.ts.map +1 -1
  232. package/dist/ui/dot.js +10 -41
  233. package/dist/ui/dot.js.map +1 -1
  234. package/dist/ui/dropdown-menu.d.ts.map +1 -1
  235. package/dist/ui/dropdown-menu.js +79 -78
  236. package/dist/ui/dropdown-menu.js.map +1 -1
  237. package/dist/ui/file-upload.d.ts.map +1 -1
  238. package/dist/ui/file-upload.js +117 -116
  239. package/dist/ui/file-upload.js.map +1 -1
  240. package/dist/ui/form.d.ts.map +1 -1
  241. package/dist/ui/form.js +27 -26
  242. package/dist/ui/form.js.map +1 -1
  243. package/dist/ui/hover-card.d.ts.map +1 -1
  244. package/dist/ui/hover-card.js +26 -25
  245. package/dist/ui/hover-card.js.map +1 -1
  246. package/dist/ui/icon.js +7 -7
  247. package/dist/ui/index.d.ts +2 -2
  248. package/dist/ui/index.d.ts.map +1 -1
  249. package/dist/ui/index.js +3 -3
  250. package/dist/ui/index.js.map +1 -1
  251. package/dist/ui/input-otp.js +1 -1
  252. package/dist/ui/input-otp.js.map +1 -1
  253. package/dist/ui/input.js +8 -8
  254. package/dist/ui/input.js.map +1 -1
  255. package/dist/ui/menubar.d.ts.map +1 -1
  256. package/dist/ui/menubar.js +73 -72
  257. package/dist/ui/menubar.js.map +1 -1
  258. package/dist/ui/navigation-menu.d.ts.map +1 -1
  259. package/dist/ui/navigation-menu.js +80 -79
  260. package/dist/ui/navigation-menu.js.map +1 -1
  261. package/dist/ui/number-input.js +3 -3
  262. package/dist/ui/number-input.js.map +1 -1
  263. package/dist/ui/pagination.js +1 -1
  264. package/dist/ui/pagination.js.map +1 -1
  265. package/dist/ui/popover.d.ts.map +1 -1
  266. package/dist/ui/progress-ring.js +2 -2
  267. package/dist/ui/progress-ring.js.map +1 -1
  268. package/dist/ui/progress.d.ts.map +1 -1
  269. package/dist/ui/progress.js +82 -74
  270. package/dist/ui/progress.js.map +1 -1
  271. package/dist/ui/radio.d.ts.map +1 -1
  272. package/dist/ui/radio.js +32 -31
  273. package/dist/ui/radio.js.map +1 -1
  274. package/dist/ui/search-input.d.ts.map +1 -1
  275. package/dist/ui/search-input.js +28 -27
  276. package/dist/ui/search-input.js.map +1 -1
  277. package/dist/ui/select.d.ts.map +1 -1
  278. package/dist/ui/select.js +67 -66
  279. package/dist/ui/select.js.map +1 -1
  280. package/dist/ui/sheet.js +1 -1
  281. package/dist/ui/sheet.js.map +1 -1
  282. package/dist/ui/sidebar.d.ts.map +1 -1
  283. package/dist/ui/sidebar.js +14 -14
  284. package/dist/ui/sidebar.js.map +1 -1
  285. package/dist/ui/slider.d.ts +63 -9
  286. package/dist/ui/slider.d.ts.map +1 -1
  287. package/dist/ui/slider.js +75 -33
  288. package/dist/ui/slider.js.map +1 -1
  289. package/dist/ui/split-button.d.ts +8 -2
  290. package/dist/ui/split-button.d.ts.map +1 -1
  291. package/dist/ui/split-button.js +49 -95
  292. package/dist/ui/split-button.js.map +1 -1
  293. package/dist/ui/stat-card.d.ts.map +1 -1
  294. package/dist/ui/stat-card.js +89 -88
  295. package/dist/ui/stat-card.js.map +1 -1
  296. package/dist/ui/stat-flash.js +16 -16
  297. package/dist/ui/stepper.d.ts.map +1 -1
  298. package/dist/ui/stepper.js +63 -62
  299. package/dist/ui/stepper.js.map +1 -1
  300. package/dist/ui/surface.d.ts.map +1 -1
  301. package/dist/ui/surface.js +2 -2
  302. package/dist/ui/surface.js.map +1 -1
  303. package/dist/ui/switch.js +1 -1
  304. package/dist/ui/switch.js.map +1 -1
  305. package/dist/ui/table.js +3 -3
  306. package/dist/ui/table.js.map +1 -1
  307. package/dist/ui/tabs.d.ts.map +1 -1
  308. package/dist/ui/tabs.js +68 -67
  309. package/dist/ui/tabs.js.map +1 -1
  310. package/dist/ui/textarea.js +5 -5
  311. package/dist/ui/textarea.js.map +1 -1
  312. package/dist/ui/toast.d.ts.map +1 -1
  313. package/dist/ui/toast.js +196 -195
  314. package/dist/ui/toast.js.map +1 -1
  315. package/dist/ui/toggle.d.ts.map +1 -1
  316. package/dist/ui/toggle.js +26 -24
  317. package/dist/ui/toggle.js.map +1 -1
  318. package/dist/ui/tooltip.d.ts.map +1 -1
  319. package/dist/ui/tooltip.js +37 -36
  320. package/dist/ui/tooltip.js.map +1 -1
  321. package/dist/ui/tree-view/tree-item.d.ts.map +1 -1
  322. package/docs/components/composed/avatar-group.md +4 -4
  323. package/docs/components/composed/diff.md +10 -2
  324. package/docs/components/composed/schedule-view.md +1 -1
  325. package/docs/components/shell/app-shell.md +132 -0
  326. package/docs/components/ui/avatar.md +1 -1
  327. package/docs/components/ui/button.md +1 -1
  328. package/docs/components/ui/chat.md +7 -1
  329. package/docs/components/ui/color-swatch.md +1 -1
  330. package/docs/components/ui/data-table-toolbar.md +6 -2
  331. package/docs/components/ui/data-table.md +41 -7
  332. package/docs/components/ui/dot.md +1 -1
  333. package/docs/components/ui/progress.md +1 -0
  334. package/docs/components/ui/surface.md +3 -3
  335. package/docs/components/ui/table.md +2 -2
  336. package/docs/recipes/customize-brand.md +58 -0
  337. package/docs/recipes/install-astro.md +1 -0
  338. package/docs/recipes/install-next-app-router.md +1 -0
  339. package/docs/recipes/install-next-pages.md +22 -1
  340. package/docs/recipes/install-remix.md +1 -0
  341. package/docs/recipes/install-tanstack-start.md +1 -0
  342. package/docs/recipes/install-vite.md +2 -0
  343. package/docs/recipes/server-components.md +7 -4
  344. package/docs/recipes/troubleshoot.md +1 -0
  345. package/llms.txt +2 -1
  346. package/make-kit/Guidelines.md +2 -2
  347. package/make-kit/components/button.md +1 -1
  348. package/make-kit/components/card.md +6 -6
  349. package/make-kit/components/surface.md +4 -4
  350. package/make-kit/foundations/color.md +4 -4
  351. package/make-kit/foundations/dark-mode.md +1 -1
  352. package/make-kit/foundations/radius.md +1 -1
  353. package/make-kit/foundations/surfaces.md +9 -9
  354. package/mcp-manifest.json +358 -35
  355. package/package.json +8 -4
  356. package/skill/SKILL.md +12 -6
  357. package/skill/references/components.md +2 -1
  358. package/skill/references/customize-brand.md +58 -0
  359. package/skill/references/server-components.md +7 -4
  360. package/skill/references/setup-astro.md +1 -0
  361. package/skill/references/setup-next-app-router.md +1 -0
  362. package/skill/references/setup-next-pages.md +22 -1
  363. package/skill/references/setup-remix.md +1 -0
  364. package/skill/references/setup-tanstack-start.md +1 -0
  365. package/skill/references/setup-vite.md +2 -0
  366. package/skill/references/troubleshoot.md +1 -0
  367. package/dist/motion/check-motion-provider.d.ts +0 -2
  368. package/dist/motion/check-motion-provider.d.ts.map +0 -1
  369. package/dist/motion/index.js.map +0 -1
  370. package/dist/primitives/react-toast.d.ts +0 -120
  371. package/dist/ui/charts/_internal/scales.d.ts +0 -5
  372. package/dist/ui/charts/_internal/scales.d.ts.map +0 -1
  373. package/dist/ui/lib/slot.d.ts +0 -8
  374. package/dist/ui/lib/slot.d.ts.map +0 -1
@@ -163,17 +163,26 @@
163
163
  --color-surface-3: var(--neutral-3);
164
164
  --color-surface-4: var(--neutral-4);
165
165
 
166
- --color-surface-base: var(--neutral-2);
167
- --color-surface-sunken: var(--color-surface-0);
168
- --color-surface-raised: var(--neutral-1);
169
- --color-surface-overlay: var(--neutral-1);
170
- --color-surface-raised-hover: var(--neutral-3);
171
- --color-surface-raised-active: var(--neutral-4);
172
- /* App chrome (TopBar, Sidebar, BottomNavbar). Its own tier so chrome's
173
- surface is an explicit, independently-tunable decision (per the Carbon/
174
- Atlassian/Ant model), not coupled to the card surface. Starts equal to
175
- `raised` — zero visual change — but can now diverge without touching cards. */
176
- --color-surface-chrome: var(--neutral-1);
166
+ /* GROUNDS take the brand tint; OBJECTS hold neutral. In light the page, the
167
+ panel and an overlay are all pure white — an edge is what makes a card a
168
+ card. See docs/plans/2026-08-26-surface-model-rebuild.md */
169
+ --color-surface-base: var(--neutral-0);
170
+ --color-surface-panel: var(--neutral-0);
171
+ --color-surface-overlay: var(--neutral-0);
172
+ --color-surface-panel-hover: var(--neutral-2);
173
+ --color-surface-panel-active: var(--neutral-3);
174
+ --color-surface-sunken: var(--neutral-sunken);
175
+ --color-surface-sunken-hover: var(--neutral-3);
176
+
177
+ /* DEPRECATED, removed next major. `surface-raised` is renamed `surface-panel`
178
+ because in light it is not raised — it is the same white as the page.
179
+ Aliased so nothing breaks mid-migration; `pnpm lint --fix` rewrites them.
180
+ NOTE hover/focus utilities must retarget to `-panel-hover`, NOT rename: a
181
+ hover painted with a container value is invisible. That is what made every
182
+ menu item's hover a no-op in light before this rebuild. */
183
+ --color-surface-raised: var(--color-surface-panel);
184
+ --color-surface-raised-hover: var(--color-surface-panel-hover);
185
+ --color-surface-raised-active: var(--color-surface-panel-active);
177
186
  --color-surface-inverted: var(--neutral-12);
178
187
  --color-surface-inverted-fg: var(--neutral-1);
179
188
  --color-surface-disabled: var(--neutral-2);
@@ -181,11 +190,17 @@
181
190
  --color-surface-fg: var(--neutral-12);
182
191
  --color-surface-fg-muted: var(--neutral-11);
183
192
  --color-surface-fg-subtle: var(--neutral-9); /* 4.664:1 on surface-base — WCAG AA (verify, don't assume: see neutral-9) */
184
- --color-surface-border: var(--neutral-6); /* bumped for WCAG 1.4.11 (interactive/control edge) */
185
- --color-surface-border-strong: var(--neutral-7);
186
- --color-surface-border-subtle: var(--neutral-5);
187
- /* Card/panel edge — a faint hairline (NOT for interactive controls, which need the contrast-bumped token above). */
188
- --color-surface-border-card: color-mix(in oklch, var(--neutral-5) 30%, transparent);
193
+ /* OBJECT edges translucent, so an edge darkens whatever it lands on and can
194
+ never coincide with it. `surface-border` on white computes to #e8e8e8. */
195
+ --color-surface-border-subtle: oklch(0 0 0 / 0.05);
196
+ --color-surface-border: oklch(0 0 0 / 0.09);
197
+ --color-surface-border-strong: oklch(0 0 0 / 0.14);
198
+ --color-surface-border-card: var(--color-surface-border);
199
+
200
+ /* CONTROL edges — solid, so their contrast is measurable. WCAG 1.4.11 applies
201
+ to these and NOT to the decorative tiers above. */
202
+ --color-surface-border-interactive: var(--neutral-6);
203
+ --color-surface-border-interactive-strong: var(--neutral-7);
189
204
  --color-backdrop: oklch(0 0 0 / 0.4);
190
205
 
191
206
  /* Segmented control — translucent recess + raised thumb. Alpha, NOT a fixed
@@ -264,37 +279,58 @@
264
279
  /* ───────────────────────────────────────────────────────────
265
280
  CATEGORY COLORS (Sapta Varna — step subsets)
266
281
  ─────────────────────────────────────────────────────────── */
282
+ /* Foreground for solid category fills. Category step 9 LIGHTENS in dark mode,
283
+ the opposite of the intent ramps, so a fixed white fails AA there. neutral-1
284
+ inverts with the theme: near-white in light, near-black in dark.
285
+ Measured: light 4.59-4.97 on all seven, dark 5.55-6.24. Badge labels are 10px,
286
+ so AA body (4.5) is the bar, not large text. */
287
+ --color-category-fg: var(--neutral-0);
288
+
289
+ --color-category-teal-2: var(--teal-2);
267
290
  --color-category-teal-3: var(--teal-3);
291
+ --color-category-teal-4: var(--teal-4);
268
292
  --color-category-teal-7: var(--teal-7);
269
293
  --color-category-teal-9: var(--teal-9);
270
294
  --color-category-teal-11: var(--teal-11);
271
295
 
296
+ --color-category-amber-2: var(--amber-2);
272
297
  --color-category-amber-3: var(--amber-3);
298
+ --color-category-amber-4: var(--amber-4);
273
299
  --color-category-amber-7: var(--amber-7);
274
300
  --color-category-amber-9: var(--amber-9);
275
301
  --color-category-amber-11: var(--amber-11);
276
302
 
303
+ --color-category-slate-2: var(--slate-2);
277
304
  --color-category-slate-3: var(--slate-3);
305
+ --color-category-slate-4: var(--slate-4);
278
306
  --color-category-slate-7: var(--slate-7);
279
307
  --color-category-slate-9: var(--slate-9);
280
308
  --color-category-slate-11: var(--slate-11);
281
309
 
310
+ --color-category-indigo-2: var(--indigo-2);
282
311
  --color-category-indigo-3: var(--indigo-3);
312
+ --color-category-indigo-4: var(--indigo-4);
283
313
  --color-category-indigo-7: var(--indigo-7);
284
314
  --color-category-indigo-9: var(--indigo-9);
285
315
  --color-category-indigo-11: var(--indigo-11);
286
316
 
317
+ --color-category-cyan-2: var(--cyan-2);
287
318
  --color-category-cyan-3: var(--cyan-3);
319
+ --color-category-cyan-4: var(--cyan-4);
288
320
  --color-category-cyan-7: var(--cyan-7);
289
321
  --color-category-cyan-9: var(--cyan-9);
290
322
  --color-category-cyan-11: var(--cyan-11);
291
323
 
324
+ --color-category-orange-2: var(--orange-2);
292
325
  --color-category-orange-3: var(--orange-3);
326
+ --color-category-orange-4: var(--orange-4);
293
327
  --color-category-orange-7: var(--orange-7);
294
328
  --color-category-orange-9: var(--orange-9);
295
329
  --color-category-orange-11: var(--orange-11);
296
330
 
331
+ --color-category-emerald-2: var(--emerald-2);
297
332
  --color-category-emerald-3: var(--emerald-3);
333
+ --color-category-emerald-4: var(--emerald-4);
298
334
  --color-category-emerald-7: var(--emerald-7);
299
335
  --color-category-emerald-9: var(--emerald-9);
300
336
  --color-category-emerald-11: var(--emerald-11);
@@ -450,6 +486,10 @@
450
486
  --shadow-warning: 0 2px 8px oklch(0.78 0.16 65 / 0.22), 0 6px 20px oklch(0.78 0.16 65 / 0.15);
451
487
 
452
488
  /* Keyboard shortcut badge shadow */
489
+ /* A key cap's bottom bevel. Black works on a light cap; on a dark one it is
490
+ invisible (1.02:1), so the cap loses the only thing making it look pressable.
491
+ `.dark` flips it to a top highlight, which is how a raised surface catches
492
+ light from above in a dark UI. See the .dark block below. */
453
493
  --shadow-kbd: inset 0 -1px 0 oklch(0 0 0 / 0.1);
454
494
 
455
495
  /* ───────────────────────────────────────────────────────────
@@ -504,21 +544,31 @@
504
544
  --shadow-strength: 1;
505
545
  --shadow-transition: box-shadow var(--duration-fast-02) var(--ease-productive-standard);
506
546
 
547
+ /* Hairline edge ring — the shadow's own 1px border-substitute (make-kit rule #6:
548
+ shadow already carries the ring, so components never add an explicit border).
549
+ Light: cool tint. Dark: a light ring, since drop shadows barely read on dark.
550
+
551
+ Declared BEFORE the internals below because all four consume it. It used to
552
+ sit between sm and md, and only md/lg referenced it — xs and sm hardcoded
553
+ their own near-black ring and so never received the dark-mode correction.
554
+ That left `shadow-raised` / `-raised-hover` at 1.00–1.03:1 in dark, i.e. no
555
+ edge, for every component using them as its only boundary. */
556
+ --shadow-edge-ring: 0 0 0 1px oklch(var(--shadow-color) / calc(0.09 * var(--shadow-strength)));
557
+ /* xs/sm take the ring at a lighter weight than md/lg — a raised card should
558
+ not read as strongly as a floating overlay. `--shadow-edge-ring-subtle`
559
+ mirrors `--shadow-edge-ring` and is likewise dark-corrected below. */
560
+ --shadow-edge-ring-subtle: 0 0 0 1px oklch(var(--shadow-color) / calc(0.035 * var(--shadow-strength)));
507
561
  --shadow-xs-internal:
508
- 0 0 0 1px oklch(var(--shadow-color) / calc(0.035 * var(--shadow-strength))),
562
+ var(--shadow-edge-ring-subtle),
509
563
  0 0.5px 1px -0.5px oklch(var(--shadow-color) / calc(0.045 * var(--shadow-strength))),
510
564
  0 1.5px 3px -1px oklch(var(--shadow-color) / calc(0.04 * var(--shadow-strength))),
511
565
  0 3px 7px -2px oklch(var(--shadow-color) / calc(0.03 * var(--shadow-strength)));
512
566
  --shadow-sm-internal:
513
- 0 0 0 1px oklch(var(--shadow-color) / calc(0.035 * var(--shadow-strength))),
567
+ var(--shadow-edge-ring-subtle),
514
568
  0 0.5px 1px -0.5px oklch(var(--shadow-color) / calc(0.04 * var(--shadow-strength))),
515
569
  0 2px 4px -1.5px oklch(var(--shadow-color) / calc(0.045 * var(--shadow-strength))),
516
570
  0 6px 12px -3px oklch(var(--shadow-color) / calc(0.035 * var(--shadow-strength))),
517
571
  0 14px 28px -8px oklch(var(--shadow-color) / calc(0.025 * var(--shadow-strength)));
518
- /* Hairline edge ring — the shadow's own 1px border-substitute (make-kit rule #6:
519
- shadow already carries the ring, so components never add an explicit border).
520
- Light: cool tint. Dark: a light ring, since drop shadows barely read on dark. */
521
- --shadow-edge-ring: 0 0 0 1px oklch(var(--shadow-color) / calc(0.09 * var(--shadow-strength)));
522
572
  --shadow-md-internal:
523
573
  var(--shadow-edge-ring),
524
574
  0 1px 2px -1px oklch(var(--shadow-color) / calc(0.05 * var(--shadow-strength))),
@@ -592,6 +642,9 @@
592
642
  --color-success-fg: var(--neutral-0);
593
643
  --color-info-fg: var(--neutral-0);
594
644
 
645
+ /* Category fills lighten in dark, so their label goes near-black, not white */
646
+ --color-category-fg: var(--neutral-1);
647
+
595
648
  /* Warning: amber-bright dark ramp */
596
649
  --color-warning-2: var(--amber-bright-2);
597
650
  --color-warning-3: var(--amber-bright-3);
@@ -603,22 +656,40 @@
603
656
  --color-warning-11: var(--amber-bright-11);
604
657
  --color-warning-fg: var(--neutral-0);
605
658
 
606
- /* Surface — dark page, lighter cards */
607
- --color-surface-base: var(--neutral-1); /* 0.11L */
608
- --color-surface-raised: var(--neutral-2); /* 0.17L */
609
- --color-surface-chrome: var(--neutral-2); /* chrome tier — matches raised for now */
610
- --color-surface-border: var(--neutral-4);
611
- --color-surface-border-strong: var(--neutral-5);
612
- --color-surface-overlay: oklch(0.13 0.0002 350);
613
- --color-surface-border-subtle: var(--neutral-3);
614
- /* Card edge in dark: a hair stronger so it still reads on the near-black base. */
615
- --color-surface-border-card: color-mix(in oklch, var(--neutral-6) 45%, transparent);
659
+ /* Surface — dark page, lighter cards. Unlike light, dark HAS room above the
660
+ page, so panel and overlay genuinely lift. */
661
+ --color-surface-base: var(--neutral-1); /* 0.147L */
662
+ --color-surface-panel: var(--neutral-2); /* 0.207L */
663
+ --color-surface-overlay: var(--neutral-2); /* same as panel + shadow */
664
+ --color-surface-panel-hover: var(--neutral-3);
665
+ --color-surface-panel-active: var(--neutral-4);
666
+ --color-surface-sunken: var(--neutral-sunken); /* coincides with the page */
667
+ --color-surface-sunken-hover: var(--neutral-2);
668
+
669
+ /* DEPRECATED — see the light block. */
670
+ --color-surface-raised: var(--color-surface-panel);
671
+ --color-surface-raised-hover: var(--color-surface-panel-hover);
672
+ --color-surface-raised-active: var(--color-surface-panel-active);
673
+
674
+ /* Object edges invert to translucent white. */
675
+ --color-surface-border-subtle: oklch(1 0 0 / 0.06);
676
+ --color-surface-border: oklch(1 0 0 / 0.10);
677
+ --color-surface-border-strong: oklch(1 0 0 / 0.16);
678
+ --color-surface-border-card: var(--color-surface-border);
679
+
680
+ --color-surface-border-interactive: var(--neutral-6);
681
+ --color-surface-border-interactive-strong: var(--neutral-7);
616
682
  --color-backdrop: oklch(0 0 0 / 0.6);
617
683
 
618
684
  /* Segmented control — inverted elevation in dark: track is a faint LIGHTER
619
- fill (can't go darker than a near-black page), thumb steps lighter still. */
685
+ fill (can't go darker than a near-black page), thumb steps lighter still.
686
+ The model is right; the value was one step short. neutral-3 (#262626) is
687
+ DARKER than the track composited over a panel (#282828), so the selected
688
+ segment read as a dent — 1.028:1, inverted. neutral-5 clears the track on
689
+ both grounds a segmented control actually sits on: 1.46:1 over a panel,
690
+ 1.69:1 over the page. */
620
691
  --color-segment-track: color-mix(in oklch, oklch(1 0 0) 7%, transparent);
621
- --color-segment-thumb: var(--neutral-3);
692
+ --color-segment-thumb: var(--neutral-5);
622
693
 
623
694
  /* Overlay */
624
695
  --color-overlay: oklch(0 0 0 / 0.70);
@@ -639,6 +710,18 @@
639
710
  --shadow-strength: 2.5;
640
711
  /* Light ring on dark — a dark-tinted ring would vanish against dark surfaces. */
641
712
  --shadow-edge-ring: 0 0 0 1px oklch(1 0 0 / 0.12);
713
+ /* Same correction for the raised tier. Without this, `shadow-raised` /
714
+ `-raised-hover` keep a near-black ring that measures ~1.00:1 on a dark
715
+ ground, so anything using them as its only edge has none. 0.07 keeps a
716
+ raised card quieter than a floating overlay while still reading. */
717
+ --shadow-edge-ring-subtle: 0 0 0 1px oklch(1 0 0 / 0.07);
718
+ --shadow-kbd: inset 0 1px 0 oklch(1 0 0 / 0.10);
719
+ /* The segmented thumb is documented as deliberately ring-less, the shadow
720
+ being its whole edge. That works in light and cannot work in dark, where
721
+ the shadow is near-black on a near-black ground — so the fallback failed in
722
+ the same theme as the fill it was meant to rescue. In dark it takes a ring
723
+ like everything else. */
724
+ --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);
642
725
  --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);
643
726
  --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);
644
727
  --shadow-ring: 0 0 0 2px color-mix(in oklch, var(--color-accent-9) 45%, transparent);
@@ -670,6 +753,39 @@
670
753
  --color-text-shadow: oklch(0 0 0 / 0.40);
671
754
  }
672
755
 
756
+ /* ═══════════════════════════════════════════════════════════════════
757
+ HIGH CONTRAST — opt-in, via `data-contrast="high"` on any ancestor
758
+
759
+ WCAG 2.2 SC 1.4.11 asks for 3:1 between a control's edge and its
760
+ background. Our default control edge is 2.00:1 in light and 2.08:1 in
761
+ dark — deliberately softer, and deliberately under the bar. That gap is
762
+ recorded in docs/deviations.md as PALETTE-CONTROL-EDGE-BELOW-AA.
763
+
764
+ This block is the opt-out from that decision. Set the attribute on
765
+ <html> (or any wrapper) and every control edge in the subtree moves to
766
+ 3.64:1 light / 3.93:1 dark.
767
+
768
+ <html data-contrast="high"> <!-- whole app -->
769
+ <div data-contrast="high"> … </div> <!-- one region -->
770
+
771
+ It is an ATTRIBUTE rather than a React provider on purpose: `.dark`
772
+ already works this way, so a consumer's existing theme switcher can set
773
+ both, it needs no client component, and it survives SSR.
774
+
775
+ The steps are named, not literal, so a consumer who rebrands the neutral
776
+ ramp gets a correctly-scaled high-contrast mode for free. `--neutral-*`
777
+ is itself theme-aware, so ONE rule serves light and dark.
778
+
779
+ Placed after `.dark` deliberately: `[data-contrast='high']` and `.dark`
780
+ have the same specificity (0,1,0), so when both sit on <html> source
781
+ order is what decides. Moving this block above `.dark` silently breaks
782
+ high contrast in dark mode only.
783
+ ═══════════════════════════════════════════════════════════════════ */
784
+ [data-contrast='high'] {
785
+ --color-surface-border-interactive: var(--neutral-8);
786
+ --color-surface-border-interactive-strong: var(--neutral-9);
787
+ }
788
+
673
789
  /* ═══════════════════════════════════════════════════════════════════
674
790
  Ensure Radix popper content (Select, Combobox, Popover, etc.)
675
791
  renders above Sheet/Dialog overlays.
@@ -730,20 +846,27 @@
730
846
  --color-surface-fg-muted: CanvasText;
731
847
  --color-surface-fg-subtle: GrayText;
732
848
  --color-surface-fg-disabled: GrayText;
733
- --color-surface-base: Canvas;
734
- --color-surface-sunken: Canvas;
735
- --color-surface-raised: Canvas;
736
- --color-surface-raised-hover: Canvas;
849
+ --color-surface-base: Canvas;
850
+ --color-surface-panel: Canvas;
851
+ --color-surface-overlay: Canvas;
852
+ --color-surface-panel-hover: Canvas;
853
+ --color-surface-panel-active: Canvas;
854
+ --color-surface-sunken: Canvas;
855
+ --color-surface-sunken-hover: Canvas;
856
+ --color-surface-raised: Canvas;
857
+ --color-surface-raised-hover: Canvas;
737
858
  --color-surface-raised-active: Canvas;
738
- --color-surface-chrome: Canvas;
739
- --color-surface-overlay: Canvas;
740
- --color-surface-disabled: Canvas;
741
- --color-surface-inverted: CanvasText;
742
- --color-surface-inverted-fg: Canvas;
743
- --color-surface-border: CanvasText;
744
- --color-surface-border-strong: CanvasText;
745
- --color-surface-border-subtle: GrayText;
746
- --color-surface-border-card: GrayText;
859
+ --color-surface-disabled: Canvas;
860
+ --color-surface-inverted: CanvasText;
861
+ --color-surface-inverted-fg: Canvas;
862
+ /* Forced colours flatten the object/control split — every edge must be a
863
+ system colour or it disappears entirely. */
864
+ --color-surface-border: CanvasText;
865
+ --color-surface-border-strong: CanvasText;
866
+ --color-surface-border-subtle: GrayText;
867
+ --color-surface-border-card: GrayText;
868
+ --color-surface-border-interactive: CanvasText;
869
+ --color-surface-border-interactive-strong: CanvasText;
747
870
  --color-backdrop: Canvas;
748
871
  --color-overlay: Canvas;
749
872
  --color-disabled: GrayText;
@@ -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); }
@@ -2,7 +2,7 @@
2
2
  CUSTOM VARIANTS (TW4 native)
3
3
 
4
4
  `@custom-variant <name> <selector>` registers a Tailwind 4 variant
5
- that consumers can use as a prefix, e.g. `dark:bg-surface-raised`.
5
+ that consumers can use as a prefix, e.g. `dark:bg-surface-panel`.
6
6
 
7
7
  Our dark variant matches TW3's classic `darkMode: 'class'` behavior
8
8
  plus one extra: the `.dark` element itself also receives `dark:*`
@@ -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-raised rounded-control data-[state=open]:bg-surface-raised 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-raised rounded-control data-[state=open]:bg-surface-raised 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,wPACA,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"}