admin-ui-starter-kit 0.6.5 → 0.6.6

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 (1147) hide show
  1. package/.agents/skills/component-library-rules/references/components/base__cards.md +3 -4
  2. package/.agents/skills/component-library-rules/references/components/base__table.md +32 -11
  3. package/.agents/skills/component-library-rules/references/components/layout__layout-containers.md +2 -2
  4. package/dist/_shared/accordion-BRj4TDQx.js +135 -0
  5. package/dist/_shared/accordion-BRj4TDQx.js.map +1 -0
  6. package/dist/_shared/accordion-DvlDjk29.cjs +2 -0
  7. package/dist/_shared/accordion-DvlDjk29.cjs.map +1 -0
  8. package/dist/_shared/action-menu-BrHF4nss.cjs +2 -0
  9. package/dist/_shared/action-menu-BrHF4nss.cjs.map +1 -0
  10. package/dist/_shared/action-menu-Crn22LKo.js +96 -0
  11. package/dist/_shared/action-menu-Crn22LKo.js.map +1 -0
  12. package/dist/_shared/ai-artifact-BHgd3agA.js +1099 -0
  13. package/dist/_shared/ai-artifact-BHgd3agA.js.map +1 -0
  14. package/dist/_shared/ai-artifact-BRM5cvGv.cjs +3 -0
  15. package/dist/_shared/ai-artifact-BRM5cvGv.cjs.map +1 -0
  16. package/dist/_shared/alert-CMVVt2Br.js +81 -0
  17. package/dist/_shared/alert-CMVVt2Br.js.map +1 -0
  18. package/dist/_shared/alert-Dmhtbmpg.cjs +2 -0
  19. package/dist/_shared/alert-Dmhtbmpg.cjs.map +1 -0
  20. package/dist/_shared/app-shell-BZQJfTkf.cjs +2 -0
  21. package/dist/_shared/app-shell-BZQJfTkf.cjs.map +1 -0
  22. package/dist/_shared/app-shell-Da6GHxTZ.js +69 -0
  23. package/dist/_shared/app-shell-Da6GHxTZ.js.map +1 -0
  24. package/dist/_shared/auth-DZW6NkJx.cjs +2 -0
  25. package/dist/_shared/auth-DZW6NkJx.cjs.map +1 -0
  26. package/dist/_shared/auth-Dh790NI_.js +643 -0
  27. package/dist/_shared/auth-Dh790NI_.js.map +1 -0
  28. package/dist/_shared/badge-B8xGFpfM.cjs +2 -0
  29. package/dist/_shared/badge-B8xGFpfM.cjs.map +1 -0
  30. package/dist/_shared/badge-BYNwSWh5.js +110 -0
  31. package/dist/_shared/badge-BYNwSWh5.js.map +1 -0
  32. package/dist/_shared/breadcrumbs-CuT0YIfo.js +105 -0
  33. package/dist/_shared/breadcrumbs-CuT0YIfo.js.map +1 -0
  34. package/dist/_shared/breadcrumbs-jNzlYqS9.cjs +2 -0
  35. package/dist/_shared/breadcrumbs-jNzlYqS9.cjs.map +1 -0
  36. package/dist/_shared/button-BMiPFJIb.cjs +2 -0
  37. package/dist/_shared/button-BMiPFJIb.cjs.map +1 -0
  38. package/dist/_shared/button-vv59_uS_.js +189 -0
  39. package/dist/_shared/button-vv59_uS_.js.map +1 -0
  40. package/dist/_shared/buttons-CvqIMv3I.js +137 -0
  41. package/dist/_shared/buttons-CvqIMv3I.js.map +1 -0
  42. package/dist/_shared/buttons-tCkWktN3.cjs +2 -0
  43. package/dist/_shared/buttons-tCkWktN3.cjs.map +1 -0
  44. package/dist/_shared/card-radio-group-Bhe8gAbH.js +150 -0
  45. package/dist/_shared/card-radio-group-Bhe8gAbH.js.map +1 -0
  46. package/dist/_shared/card-radio-group-CdG1zr8M.cjs +2 -0
  47. package/dist/_shared/card-radio-group-CdG1zr8M.cjs.map +1 -0
  48. package/dist/_shared/cards-Cu6p1Brd.cjs +2 -0
  49. package/dist/_shared/cards-Cu6p1Brd.cjs.map +1 -0
  50. package/dist/_shared/cards-cQ9lL6zy.js +354 -0
  51. package/dist/_shared/cards-cQ9lL6zy.js.map +1 -0
  52. package/dist/_shared/combobox-BGYjyXeN.cjs +2 -0
  53. package/dist/_shared/combobox-BGYjyXeN.cjs.map +1 -0
  54. package/dist/_shared/combobox-DTwomOBt.js +954 -0
  55. package/dist/_shared/combobox-DTwomOBt.js.map +1 -0
  56. package/dist/_shared/comments-C97vL5km.js +952 -0
  57. package/dist/_shared/comments-C97vL5km.js.map +1 -0
  58. package/dist/_shared/comments-DBe6dP-d.cjs +2 -0
  59. package/dist/_shared/comments-DBe6dP-d.cjs.map +1 -0
  60. package/dist/_shared/copyable-BgFdERqs.js +38 -0
  61. package/dist/_shared/copyable-BgFdERqs.js.map +1 -0
  62. package/dist/_shared/copyable-Ce8rmE-V.cjs +2 -0
  63. package/dist/_shared/copyable-Ce8rmE-V.cjs.map +1 -0
  64. package/dist/_shared/data-display-DUWxoDKq.js +1873 -0
  65. package/dist/_shared/data-display-DUWxoDKq.js.map +1 -0
  66. package/dist/_shared/data-display-o-rbMuIA.cjs +2 -0
  67. package/dist/_shared/data-display-o-rbMuIA.cjs.map +1 -0
  68. package/dist/_shared/date-picker-Cxx9jllA.js +1361 -0
  69. package/dist/_shared/date-picker-Cxx9jllA.js.map +1 -0
  70. package/dist/_shared/date-picker-DE5A8yqN.cjs +2 -0
  71. package/dist/_shared/date-picker-DE5A8yqN.cjs.map +1 -0
  72. package/dist/_shared/date-pickers-Dex1Mfye.cjs +2 -0
  73. package/dist/_shared/date-pickers-Dex1Mfye.cjs.map +1 -0
  74. package/dist/_shared/date-pickers-m0dpDcqH.js +329 -0
  75. package/dist/_shared/date-pickers-m0dpDcqH.js.map +1 -0
  76. package/dist/_shared/display-Bro3Kufg.js +986 -0
  77. package/dist/_shared/display-Bro3Kufg.js.map +1 -0
  78. package/dist/_shared/display-CRQjSjgB.cjs +2 -0
  79. package/dist/_shared/display-CRQjSjgB.cjs.map +1 -0
  80. package/dist/_shared/form-sizing-DJus3nK3.cjs +2 -0
  81. package/dist/_shared/form-sizing-DJus3nK3.cjs.map +1 -0
  82. package/dist/_shared/form-sizing-DWjJsQSR.js +42 -0
  83. package/dist/_shared/form-sizing-DWjJsQSR.js.map +1 -0
  84. package/dist/_shared/forms-D-SNQmtB.cjs +2 -0
  85. package/dist/_shared/forms-D-SNQmtB.cjs.map +1 -0
  86. package/dist/_shared/forms-p7cfzJwf.js +3533 -0
  87. package/dist/_shared/forms-p7cfzJwf.js.map +1 -0
  88. package/dist/_shared/header-8C71wVRp.js +447 -0
  89. package/dist/_shared/header-8C71wVRp.js.map +1 -0
  90. package/dist/_shared/header-CYgFCnjZ.cjs +2 -0
  91. package/dist/_shared/header-CYgFCnjZ.cjs.map +1 -0
  92. package/dist/_shared/hooks-Ci1LFWRG.js +95 -0
  93. package/dist/_shared/hooks-Ci1LFWRG.js.map +1 -0
  94. package/dist/_shared/hooks-Cjl7LJpn.cjs +2 -0
  95. package/dist/_shared/hooks-Cjl7LJpn.cjs.map +1 -0
  96. package/dist/_shared/input-BgcP6x4C.js +182 -0
  97. package/dist/_shared/input-BgcP6x4C.js.map +1 -0
  98. package/dist/_shared/input-DV3g7Fm5.cjs +2 -0
  99. package/dist/_shared/input-DV3g7Fm5.cjs.map +1 -0
  100. package/dist/_shared/item-D7GTzvhf.js +226 -0
  101. package/dist/_shared/item-D7GTzvhf.js.map +1 -0
  102. package/dist/_shared/item-DTrnHpfm.cjs +2 -0
  103. package/dist/_shared/item-DTrnHpfm.cjs.map +1 -0
  104. package/dist/_shared/layout-BExg7Vlx.js +261 -0
  105. package/dist/_shared/layout-BExg7Vlx.js.map +1 -0
  106. package/dist/_shared/layout-CKRD_goE.cjs +2 -0
  107. package/dist/_shared/layout-CKRD_goE.cjs.map +1 -0
  108. package/dist/_shared/mentions-BtGhYisA.js +506 -0
  109. package/dist/_shared/mentions-BtGhYisA.js.map +1 -0
  110. package/dist/_shared/mentions-CnVOuQJU.cjs +2 -0
  111. package/dist/_shared/mentions-CnVOuQJU.cjs.map +1 -0
  112. package/dist/_shared/money-display-BvVpRUs5.cjs +2 -0
  113. package/dist/_shared/money-display-BvVpRUs5.cjs.map +1 -0
  114. package/dist/_shared/money-display-D6Qtvyyv.js +198 -0
  115. package/dist/_shared/money-display-D6Qtvyyv.js.map +1 -0
  116. package/dist/_shared/navigation-C4dO1I82.cjs +2 -0
  117. package/dist/_shared/navigation-C4dO1I82.cjs.map +1 -0
  118. package/dist/_shared/navigation-Ct-LFlpY.js +436 -0
  119. package/dist/_shared/navigation-Ct-LFlpY.js.map +1 -0
  120. package/dist/_shared/overlays-ChyqXn0n.js +735 -0
  121. package/dist/_shared/overlays-ChyqXn0n.js.map +1 -0
  122. package/dist/_shared/overlays-Dn2bt3CL.cjs +2 -0
  123. package/dist/_shared/overlays-Dn2bt3CL.cjs.map +1 -0
  124. package/dist/_shared/popover-menu-17Dxn25O.js +93 -0
  125. package/dist/_shared/popover-menu-17Dxn25O.js.map +1 -0
  126. package/dist/_shared/popover-menu-DXVN0bvj.cjs +2 -0
  127. package/dist/_shared/popover-menu-DXVN0bvj.cjs.map +1 -0
  128. package/dist/_shared/rich-text-editor-BRpcNkj1.js +620 -0
  129. package/dist/_shared/rich-text-editor-BRpcNkj1.js.map +1 -0
  130. package/dist/_shared/rich-text-editor-BXxGNbmI.cjs +2 -0
  131. package/dist/_shared/rich-text-editor-BXxGNbmI.cjs.map +1 -0
  132. package/dist/_shared/settings-CW9yzfQM.js +143 -0
  133. package/dist/_shared/settings-CW9yzfQM.js.map +1 -0
  134. package/dist/_shared/settings-cCPrw7si.cjs +2 -0
  135. package/dist/_shared/settings-cCPrw7si.cjs.map +1 -0
  136. package/dist/_shared/sidebar-Cq6J_I4l.cjs +2 -0
  137. package/dist/_shared/sidebar-Cq6J_I4l.cjs.map +1 -0
  138. package/dist/_shared/sidebar-DtF_ihE3.js +548 -0
  139. package/dist/_shared/sidebar-DtF_ihE3.js.map +1 -0
  140. package/dist/_shared/spinner-DY2de3Wt.cjs +2 -0
  141. package/dist/_shared/spinner-DY2de3Wt.cjs.map +1 -0
  142. package/dist/_shared/spinner-ZmIq_zsx.js +67 -0
  143. package/dist/_shared/spinner-ZmIq_zsx.js.map +1 -0
  144. package/dist/_shared/table-BBWc-wIw.js +1377 -0
  145. package/dist/_shared/table-BBWc-wIw.js.map +1 -0
  146. package/dist/_shared/table-DMDkdLzV.cjs +2 -0
  147. package/dist/_shared/table-DMDkdLzV.cjs.map +1 -0
  148. package/dist/_shared/textarea-C1TeJ7Vt.cjs +2 -0
  149. package/dist/_shared/textarea-C1TeJ7Vt.cjs.map +1 -0
  150. package/dist/_shared/textarea-CGRkgH5z.js +118 -0
  151. package/dist/_shared/textarea-CGRkgH5z.js.map +1 -0
  152. package/dist/_shared/typography-CzFVA1w1.js +201 -0
  153. package/dist/_shared/typography-CzFVA1w1.js.map +1 -0
  154. package/dist/_shared/typography-GtkgK9QX.cjs +2 -0
  155. package/dist/_shared/typography-GtkgK9QX.cjs.map +1 -0
  156. package/dist/_shared/workspace-BF5BtDhD.cjs +2 -0
  157. package/dist/_shared/workspace-BF5BtDhD.cjs.map +1 -0
  158. package/dist/_shared/workspace-IvsczduM.js +357 -0
  159. package/dist/_shared/workspace-IvsczduM.js.map +1 -0
  160. package/dist/components/base/accordion/index.cjs +1 -1
  161. package/dist/components/base/accordion/index.js +1 -1
  162. package/dist/components/base/badge/badge.d.ts.map +1 -1
  163. package/dist/components/base/badge/index.cjs +1 -1
  164. package/dist/components/base/badge/index.js +1 -1
  165. package/dist/components/base/buttons/index.cjs +1 -1
  166. package/dist/components/base/buttons/index.js +2 -2
  167. package/dist/components/base/cards/index.cjs +1 -1
  168. package/dist/components/base/cards/index.js +1 -1
  169. package/dist/components/base/cards/smart-card.types.d.ts +3 -3
  170. package/dist/components/base/carousel/index.cjs +1 -1
  171. package/dist/components/base/carousel/index.js +1 -1
  172. package/dist/components/base/combobox/index.cjs +1 -1
  173. package/dist/components/base/combobox/index.js +1 -1
  174. package/dist/components/base/copyable/index.cjs +1 -1
  175. package/dist/components/base/copyable/index.js +1 -1
  176. package/dist/components/base/currency/index.cjs +1 -1
  177. package/dist/components/base/currency/index.js +1 -1
  178. package/dist/components/base/date-pickers/index.cjs +1 -1
  179. package/dist/components/base/date-pickers/index.js +2 -2
  180. package/dist/components/base/display/chart.cjs +1 -1
  181. package/dist/components/base/display/chart.js +1 -1
  182. package/dist/components/base/display/index.cjs +1 -1
  183. package/dist/components/base/display/index.js +3 -3
  184. package/dist/components/base/event-calendar/index.cjs +1 -1
  185. package/dist/components/base/event-calendar/index.js +3 -3
  186. package/dist/components/base/forms/index.cjs +1 -1
  187. package/dist/components/base/forms/index.js +5 -5
  188. package/dist/components/base/item/index.cjs +1 -1
  189. package/dist/components/base/item/index.js +1 -1
  190. package/dist/components/base/map/index.cjs +1 -1
  191. package/dist/components/base/map/index.js +2 -2
  192. package/dist/components/base/navigation/index.cjs +1 -1
  193. package/dist/components/base/navigation/index.js +3 -3
  194. package/dist/components/base/popover-menu/index.cjs +1 -1
  195. package/dist/components/base/popover-menu/index.js +1 -1
  196. package/dist/components/base/spinner/index.cjs +1 -1
  197. package/dist/components/base/spinner/index.js +1 -1
  198. package/dist/components/base/table/data-table.d.ts.map +1 -1
  199. package/dist/components/base/table/index.cjs +1 -1
  200. package/dist/components/base/table/index.js +1 -1
  201. package/dist/components/composed/admin/index.cjs +1 -1
  202. package/dist/components/composed/admin/index.js +11 -11
  203. package/dist/components/composed/ai/index.cjs +1 -1
  204. package/dist/components/composed/ai/index.js +8 -8
  205. package/dist/components/composed/analytics/index.cjs +1 -1
  206. package/dist/components/composed/analytics/index.js +3 -3
  207. package/dist/components/composed/cards/index.cjs +1 -1
  208. package/dist/components/composed/cards/index.js +7 -7
  209. package/dist/components/composed/commerce/index.cjs +1 -1
  210. package/dist/components/composed/commerce/index.js +8 -8
  211. package/dist/components/composed/dark-surfaces/index.cjs +1 -1
  212. package/dist/components/composed/dark-surfaces/index.js +4 -4
  213. package/dist/components/composed/data-display/index.cjs +1 -1
  214. package/dist/components/composed/data-display/index.js +1 -1
  215. package/dist/components/composed/navigation/index.cjs +1 -1
  216. package/dist/components/composed/navigation/index.js +5 -5
  217. package/dist/components/composed/onboarding/index.cjs +1 -1
  218. package/dist/components/composed/onboarding/index.js +3 -3
  219. package/dist/components/composed/timelines/index.cjs +1 -1
  220. package/dist/components/composed/timelines/index.js +3 -3
  221. package/dist/components/features/activities/index.cjs +1 -1
  222. package/dist/components/features/activities/index.js +4 -4
  223. package/dist/components/features/ai-chat/index.cjs +1 -1
  224. package/dist/components/features/ai-chat/index.js +5 -5
  225. package/dist/components/features/card/index.cjs +1 -1
  226. package/dist/components/features/card/index.js +4 -4
  227. package/dist/components/features/comments/index.cjs +1 -1
  228. package/dist/components/features/comments/index.js +2 -2
  229. package/dist/components/features/data-view/index.cjs +1 -1
  230. package/dist/components/features/data-view/index.js +2 -2
  231. package/dist/components/features/event-log/index.cjs +1 -1
  232. package/dist/components/features/event-log/index.js +4 -4
  233. package/dist/components/features/filters/index.cjs +1 -1
  234. package/dist/components/features/filters/index.js +6 -6
  235. package/dist/components/features/global-search/index.cjs +1 -1
  236. package/dist/components/features/global-search/index.js +4 -4
  237. package/dist/components/features/kanban/index.cjs +1 -1
  238. package/dist/components/features/kanban/index.js +3 -3
  239. package/dist/components/features/media-library/index.cjs +1 -1
  240. package/dist/components/features/media-library/index.js +8 -8
  241. package/dist/components/features/mentions/index.cjs +1 -1
  242. package/dist/components/features/mentions/index.js +1 -1
  243. package/dist/components/features/overlays/index.cjs +1 -1
  244. package/dist/components/features/overlays/index.js +1 -1
  245. package/dist/components/features/products/index.cjs +1 -1
  246. package/dist/components/features/products/index.js +11 -11
  247. package/dist/components/features/resource/index.cjs +1 -1
  248. package/dist/components/features/resource/index.js +4 -4
  249. package/dist/components/features/rich-text-editor/index.cjs +1 -1
  250. package/dist/components/features/rich-text-editor/index.js +1 -1
  251. package/dist/components/features/schema-form/index.cjs +1 -1
  252. package/dist/components/features/schema-form/index.js +8 -8
  253. package/dist/components/features/suggestions/index.cjs +1 -1
  254. package/dist/components/features/suggestions/index.js +1 -1
  255. package/dist/components/features/sync/index.cjs +1 -1
  256. package/dist/components/features/sync/index.js +2 -2
  257. package/dist/components/layout/app-shell/index.cjs +1 -1
  258. package/dist/components/layout/app-shell/index.js +1 -1
  259. package/dist/components/layout/auth/index.cjs +1 -1
  260. package/dist/components/layout/auth/index.js +1 -1
  261. package/dist/components/layout/header/index.cjs +1 -1
  262. package/dist/components/layout/header/index.js +1 -1
  263. package/dist/components/layout/hooks/index.cjs +1 -1
  264. package/dist/components/layout/hooks/index.js +1 -1
  265. package/dist/components/layout/index.cjs +1 -1
  266. package/dist/components/layout/index.js +8 -8
  267. package/dist/components/layout/page/index.cjs +1 -1
  268. package/dist/components/layout/page/index.js +1 -1
  269. package/dist/components/layout/settings/index.cjs +1 -1
  270. package/dist/components/layout/settings/index.js +1 -1
  271. package/dist/components/layout/sidebar/index.cjs +1 -1
  272. package/dist/components/layout/sidebar/index.js +2 -2
  273. package/dist/components/layout/workspace/index.cjs +1 -1
  274. package/dist/components/layout/workspace/index.js +1 -1
  275. package/dist/components/typography/index.cjs +1 -1
  276. package/dist/components/typography/index.js +1 -1
  277. package/dist/services/actions/index.cjs +1 -1
  278. package/dist/services/actions/index.js +1 -1
  279. package/dist/showcase/assets/AreaChart-CsIm9z7Y.js +6 -0
  280. package/dist/showcase/assets/CompositeItem-D9zznn01.js +1 -0
  281. package/dist/showcase/assets/CompositeRoot-CvxtZ81W.js +1 -0
  282. package/dist/showcase/assets/DialogTrigger-C-osQGHu.js +1 -0
  283. package/dist/showcase/assets/LabelableContext-_EE-HBND.js +1 -0
  284. package/dist/showcase/assets/PreviewLayout-KdEsSl3b.js +1 -0
  285. package/dist/showcase/assets/RadioGroup-4jOeNTc1.js +1 -0
  286. package/dist/showcase/assets/ScrollAreaCorner-CXTdUcaE.js +1 -0
  287. package/dist/showcase/assets/Separator-CHVXO6nj.js +1 -0
  288. package/dist/showcase/assets/ToolbarRootContext-CM5tQGGX.js +1 -0
  289. package/dist/showcase/assets/accordion-CA84bxb2.js +171 -0
  290. package/dist/showcase/assets/accordion-variants-DqWzAOO3.js +1 -0
  291. package/dist/showcase/assets/action-menu-D0q5z-Kq.js +1 -0
  292. package/dist/showcase/assets/actions-DnqxABJU.js +310 -0
  293. package/dist/showcase/assets/activities-BC9hoMy9.js +500 -0
  294. package/dist/showcase/assets/activities-feed-card-D6wGLpbH.js +1 -0
  295. package/dist/showcase/assets/admin-CMnMsugJ.js +140 -0
  296. package/dist/showcase/assets/ai-B6_sE9Zg.js +207 -0
  297. package/dist/showcase/assets/ai-artifact-BVvbsSJB.js +2 -0
  298. package/dist/showcase/assets/ai-chat-lcXeqJrA.js +568 -0
  299. package/dist/showcase/assets/ai-elements-B32o_UjE.js +387 -0
  300. package/dist/showcase/assets/ai-tool-call-BLrAioKz.js +1 -0
  301. package/dist/showcase/assets/alert-B1p1Grce.js +62 -0
  302. package/dist/showcase/assets/alert-BBiffYsY.js +93 -0
  303. package/dist/showcase/assets/alert-vH0nJ8J9.js +1 -0
  304. package/dist/showcase/assets/api-key-list-BrSc6V1y.js +1 -0
  305. package/dist/showcase/assets/api-key-list-CoKe_PaL.js +73 -0
  306. package/dist/showcase/assets/app-sidebar-R93lRPB4.js +1 -0
  307. package/dist/showcase/assets/arrow-down-xxVIADbv.js +1 -0
  308. package/dist/showcase/assets/arrow-left-DxnlnN8R.js +1 -0
  309. package/dist/showcase/assets/arrow-right-S5k93UPM.js +1 -0
  310. package/dist/showcase/assets/arrow-up-OlEVG7a-.js +1 -0
  311. package/dist/showcase/assets/arrow-up-right-j55bbl4b.js +1 -0
  312. package/dist/showcase/assets/avatar-BbiXvZq7.js +67 -0
  313. package/dist/showcase/assets/avatar-Bwpw-hQo.js +57 -0
  314. package/dist/showcase/assets/avatar-D0DKQ1lK.js +1 -0
  315. package/dist/showcase/assets/avatar-WyjSBov9.js +1 -0
  316. package/dist/showcase/assets/badge-BzLZQO3L.js +31 -0
  317. package/dist/showcase/assets/badge-check-TFWm1m3F.js +1 -0
  318. package/dist/showcase/assets/bell-CmuQlO_k.js +1 -0
  319. package/dist/showcase/assets/bot-Bu518AJB.js +1 -0
  320. package/dist/showcase/assets/box-D-wrSdOJ.js +1 -0
  321. package/dist/showcase/assets/braces-CgCdmdAl.js +1 -0
  322. package/dist/showcase/assets/brain-DkHdwgHO.js +1 -0
  323. package/dist/showcase/assets/brand-CpovnVoG.js +36 -0
  324. package/dist/showcase/assets/breadcrumb-BUc0WC5d.js +1 -0
  325. package/dist/showcase/assets/breadcrumb-Do_Dazt1.js +52 -0
  326. package/dist/showcase/assets/breadcrumbs-Bj21o2zm.js +1 -0
  327. package/dist/showcase/assets/briefcase-CQBh2kok.js +1 -0
  328. package/dist/showcase/assets/building-2-D07Ej6iR.js +1 -0
  329. package/dist/showcase/assets/button-CCZ4KEGQ.js +44 -0
  330. package/dist/showcase/assets/button-group-BTjeHOvz.js +1 -0
  331. package/dist/showcase/assets/buttons-D45Wwiwn.js +272 -0
  332. package/dist/showcase/assets/calendar-BsEWULmZ.js +16 -0
  333. package/dist/showcase/assets/calendar-CkPefzIO.js +1 -0
  334. package/dist/showcase/assets/calendar-DZlT3qTq.js +1 -0
  335. package/dist/showcase/assets/calendar-days-C9awTMru.js +1 -0
  336. package/dist/showcase/assets/camera-CQhMw-RD.js +1 -0
  337. package/dist/showcase/assets/card-CKrz_UHt.js +1 -0
  338. package/dist/showcase/assets/card-DZgZgjXO.js +188 -0
  339. package/dist/showcase/assets/card-primitives-CpkDLK3Y.js +1 -0
  340. package/dist/showcase/assets/card-radio-group-BjXwMI4v.js +1 -0
  341. package/dist/showcase/assets/cards-Cd24XZ9l.js +353 -0
  342. package/dist/showcase/assets/carousel-Doon04yO.js +449 -0
  343. package/dist/showcase/assets/cell-renderers-CTay3duH.js +1 -0
  344. package/dist/showcase/assets/chart-CkvbdpWw.js +358 -0
  345. package/dist/showcase/assets/chart-column-Dz57kUMl.js +1 -0
  346. package/dist/showcase/assets/checkbox-L-L4-wvA.js +1 -0
  347. package/dist/showcase/assets/checkbox-sP254E7e.js +1 -0
  348. package/dist/showcase/assets/chevron-down-CLc_a2Ua.js +1 -0
  349. package/dist/showcase/assets/chevron-left-CMRIGOJt.js +1 -0
  350. package/dist/showcase/assets/chevron-up-BDw6LdDZ.js +1 -0
  351. package/dist/showcase/assets/chevrons-up-down-C519RKki.js +1 -0
  352. package/dist/showcase/assets/circle-B_tOHWTY.js +1 -0
  353. package/dist/showcase/assets/circle-alert-B56AFULT.js +1 -0
  354. package/dist/showcase/assets/circle-check-B4XZj4Ty.js +1 -0
  355. package/dist/showcase/assets/circle-check-big-C0iEkwPB.js +1 -0
  356. package/dist/showcase/assets/circle-dot-DPdJZkc6.js +1 -0
  357. package/dist/showcase/assets/circle-question-mark-LTetdrq6.js +1 -0
  358. package/dist/showcase/assets/circle-x-B4FwM-sI.js +1 -0
  359. package/dist/showcase/assets/clock-3-DZhjBuw8.js +1 -0
  360. package/dist/showcase/assets/clock-B9Fna2Q3.js +1 -0
  361. package/dist/showcase/assets/code-xml-B6Xb_vIg.js +1 -0
  362. package/dist/showcase/assets/collapsible-Bf7Oo37i.js +27 -0
  363. package/dist/showcase/assets/collapsible-BfLeooy8.js +1 -0
  364. package/dist/showcase/assets/combobox-4NYfJznY.js +685 -0
  365. package/dist/showcase/assets/command-7jRRucHf.js +1 -0
  366. package/dist/showcase/assets/command-D56CjgNc.js +1 -0
  367. package/dist/showcase/assets/comment-composer-BWeXIZfK.js +1 -0
  368. package/dist/showcase/assets/comment-item-ChkiK-ut.js +1 -0
  369. package/dist/showcase/assets/comments-YnEop7v3.js +357 -0
  370. package/dist/showcase/assets/commerce-7XxWJChs.js +267 -0
  371. package/dist/showcase/assets/composite-CHcyYCsk.js +1 -0
  372. package/dist/showcase/assets/contact-card-BXw-VuBm.js +65 -0
  373. package/dist/showcase/assets/content-container-C4uopCBg.js +1 -0
  374. package/dist/showcase/assets/copyable-CjVYEJ0P.js +1 -0
  375. package/dist/showcase/assets/copyable-Cz2jW7yL.js +96 -0
  376. package/dist/showcase/assets/course-card-CvK3dw9W.js +77 -0
  377. package/dist/showcase/assets/cpu-Vk5WgcC1.js +1 -0
  378. package/dist/showcase/assets/credit-card-CaigqZGk.js +1 -0
  379. package/dist/showcase/assets/css-variables-hLaBmeMt.js +1190 -0
  380. package/dist/showcase/assets/currency-yO1giHp1.js +149 -0
  381. package/dist/showcase/assets/dark-surfaces-BPQnyk9a.js +90 -0
  382. package/dist/showcase/assets/data-view-CjjXn5VT.js +124 -0
  383. package/dist/showcase/assets/data-view-DF0n8uva.js +4 -0
  384. package/dist/showcase/assets/database-ChUBDe8E.js +1 -0
  385. package/dist/showcase/assets/date-block-DUg1Oyn4.js +1 -0
  386. package/dist/showcase/assets/date-picker-CoQPZa34.js +1 -0
  387. package/dist/showcase/assets/date-pickers-B-IUbyXw.js +73 -0
  388. package/dist/showcase/assets/dense-info-zVQSWqOU.js +106 -0
  389. package/dist/showcase/assets/design-system-consistency-Bnz_h3-6.js +264 -0
  390. package/dist/showcase/assets/dialog-BtilpgxJ.js +1 -0
  391. package/dist/showcase/assets/dialog-kf9WwmTC.js +1 -0
  392. package/dist/showcase/assets/display-utilities-BBzG5EPX.js +267 -0
  393. package/dist/showcase/assets/dist-9gFIhkw-.js +45 -0
  394. package/dist/showcase/assets/dist-CGpz_7Mu.js +1 -0
  395. package/dist/showcase/assets/dollar-sign-CWbYI3Pd.js +1 -0
  396. package/dist/showcase/assets/download-Bt_z-poH.js +1 -0
  397. package/dist/showcase/assets/dropdown-menu-C1_SYTHm.js +1 -0
  398. package/dist/showcase/assets/dropzone-D5BGVTnl.js +1 -0
  399. package/dist/showcase/assets/earth-sP5mIgG3.js +1 -0
  400. package/dist/showcase/assets/ellipsis-vertical-BD7kMOzj.js +1 -0
  401. package/dist/showcase/assets/ellipsis-yqIF49C8.js +1 -0
  402. package/dist/showcase/assets/empty-DIrJgtrh.js +1 -0
  403. package/dist/showcase/assets/empty-item-GgnZk2yf.js +49 -0
  404. package/dist/showcase/assets/empty-state-ZGKkJ6sf.js +190 -0
  405. package/dist/showcase/assets/empty-state-n_Fspzt-.js +1 -0
  406. package/dist/showcase/assets/enhanced-activities-CCw_hZnZ.js +357 -0
  407. package/dist/showcase/assets/enhanced-combobox-bBF-ADDs.js +1 -0
  408. package/dist/showcase/assets/esm-CyFPn936.js +2 -0
  409. package/dist/showcase/assets/event-calendar-Czo7yBDx.js +138 -0
  410. package/dist/showcase/assets/event-log-DJ3B3nMV.js +330 -0
  411. package/dist/showcase/assets/example-eGsLGIcp.js +1 -0
  412. package/dist/showcase/assets/external-link-DPOQEVWH.js +1 -0
  413. package/dist/showcase/assets/eye-CN92NVL0.js +1 -0
  414. package/dist/showcase/assets/feature-announcement-BXkSW17e.js +34 -0
  415. package/dist/showcase/assets/file-CFHePlKG.js +1 -0
  416. package/dist/showcase/assets/file-text--WYCYQMw.js +1 -0
  417. package/dist/showcase/assets/filter-layout-B35gGmcO.js +1 -0
  418. package/dist/showcase/assets/filters-GDW_oiT3.js +139 -0
  419. package/dist/showcase/assets/flag-XsT9XFPr.js +1 -0
  420. package/dist/showcase/assets/folder-open-RtsQ8vxf.js +1 -0
  421. package/dist/showcase/assets/form-field-Bijd1Gex.js +1 -0
  422. package/dist/showcase/assets/form-sizing-Dltt6Fj-.js +1 -0
  423. package/dist/showcase/assets/format-Ckw4OM66.js +1 -0
  424. package/dist/showcase/assets/forms-00bU7LN8.js +915 -0
  425. package/dist/showcase/assets/funnel-qu25WlXD.js +1 -0
  426. package/dist/showcase/assets/generic-Bf82Wiol.js +1 -0
  427. package/dist/showcase/assets/getPseudoElementBounds-BR4_m2HH.js +1 -0
  428. package/dist/showcase/assets/gift-D4GQoqzV.js +1 -0
  429. package/dist/showcase/assets/giftcard-cards-CMutwaAY.js +85 -0
  430. package/dist/showcase/assets/git-branch-B2QG2zRg.js +1 -0
  431. package/dist/showcase/assets/global-search-CRAB9TSF.js +1 -0
  432. package/dist/showcase/assets/global-search-DY0cKfhY.js +215 -0
  433. package/dist/showcase/assets/globe-BxZW28rG.js +1 -0
  434. package/dist/showcase/assets/gradient-card-CQGnXG8r.js +58 -0
  435. package/dist/showcase/assets/hash-CsRtIoKK.js +1 -0
  436. package/dist/showcase/assets/header-DzYOgZLP.js +1 -0
  437. package/dist/showcase/assets/header-notifications-D_CJPbvs.js +1 -0
  438. package/dist/showcase/assets/heart-B2YsYprq.js +1 -0
  439. package/dist/showcase/assets/hooks-BhUMA4Tb.js +220 -0
  440. package/dist/showcase/assets/house-HeRFNhI0.js +1 -0
  441. package/dist/showcase/assets/icon-badge-CpDkc-S0.js +37 -0
  442. package/dist/showcase/assets/icon-badge-eNEGgpAV.js +1 -0
  443. package/dist/showcase/assets/image-T88JyDag.js +1 -0
  444. package/dist/showcase/assets/inbox-DLrLLnTR.js +1 -0
  445. package/dist/showcase/assets/index-DDZl6kOS.js +10 -0
  446. package/dist/showcase/assets/index-nOkXemgw.css +2 -0
  447. package/dist/showcase/assets/inertValue-BajuuRy4.js +1 -0
  448. package/dist/showcase/assets/info-CNYfw2Yz.js +1 -0
  449. package/dist/showcase/assets/inline-stat-BN6yhDR5.js +15 -0
  450. package/dist/showcase/assets/inline-stat-Bqw3lVfk.js +1 -0
  451. package/dist/showcase/assets/input-C-9K6F0N.js +1 -0
  452. package/dist/showcase/assets/input-DaZzfkZV.js +1 -0
  453. package/dist/showcase/assets/input-group-DE-Xdhv4.js +1 -0
  454. package/dist/showcase/assets/input-group-DIQZnytn.js +47 -0
  455. package/dist/showcase/assets/inputs-Cl_JgSR4.js +155 -0
  456. package/dist/showcase/assets/installation-DdhD4Dkq.js +134 -0
  457. package/dist/showcase/assets/invoice-header-DOs2ACqQ.js +36 -0
  458. package/dist/showcase/assets/invoice-items-1EuA62mF.js +36 -0
  459. package/dist/showcase/assets/invoice-mini-vCrYEtWp.js +14 -0
  460. package/dist/showcase/assets/invoice-table--mDTs1Iz.js +30 -0
  461. package/dist/showcase/assets/isSameDay-BNB1yam4.js +1 -0
  462. package/dist/showcase/assets/isToday-BugOpGJC.js +1 -0
  463. package/dist/showcase/assets/italic-Ck4UD2ZT.js +1 -0
  464. package/dist/showcase/assets/item-BcesxqFS.js +139 -0
  465. package/dist/showcase/assets/item-BgPlwUMv.js +1 -0
  466. package/dist/showcase/assets/item-CB9k_rmo.js +1 -0
  467. package/dist/showcase/assets/kanban-cPuSVqWY.js +188 -0
  468. package/dist/showcase/assets/key-round-BmYjd5dk.js +1 -0
  469. package/dist/showcase/assets/label-BTIBJBqN.js +1 -0
  470. package/dist/showcase/assets/languages-he6FNXRs.js +1 -0
  471. package/dist/showcase/assets/layers-B_48DtOz.js +1 -0
  472. package/dist/showcase/assets/layout-app-shell-zwLv6jTP.js +608 -0
  473. package/dist/showcase/assets/layout-auth-2Zv5lr52.js +790 -0
  474. package/dist/showcase/assets/layout-containers-Dzw3xlKn.js +101 -0
  475. package/dist/showcase/assets/layout-header-TJ-WVmG3.js +203 -0
  476. package/dist/showcase/assets/layout-page-CIVQCKXK.js +314 -0
  477. package/dist/showcase/assets/layout-primitives-i_O81fzT.js +34 -0
  478. package/dist/showcase/assets/layout-sidebar-eH_pwBq_.js +224 -0
  479. package/dist/showcase/assets/layout-users-CWSaFBLj.js +117 -0
  480. package/dist/showcase/assets/layout-workspace-w3oe32GE.js +191 -0
  481. package/dist/showcase/assets/lib-CoS0xjP8.js +1 -0
  482. package/dist/showcase/assets/list-checks-DecRPpK3.js +1 -0
  483. package/dist/showcase/assets/lock-D9f8uXol.js +1 -0
  484. package/dist/showcase/assets/lock-keyhole-C20eixH6.js +1 -0
  485. package/dist/showcase/assets/mail-CVgP8Qlo.js +1 -0
  486. package/dist/showcase/assets/mail-check-mplTKcSH.js +1 -0
  487. package/dist/showcase/assets/map-B6OGeOup.js +124 -0
  488. package/dist/showcase/assets/map-pin-BZXSwrzT.js +1 -0
  489. package/dist/showcase/assets/media-library-DSlVIM1Q.js +699 -0
  490. package/dist/showcase/assets/mention-inline-suggestions-CNAEeXgy.js +1 -0
  491. package/dist/showcase/assets/mentions-Cb3g4hDN.js +138 -0
  492. package/dist/showcase/assets/menus-CE0Hlj8N.js +171 -0
  493. package/dist/showcase/assets/message-square-HliU8vbW.js +1 -0
  494. package/dist/showcase/assets/metadata-list-CJ5v5Bvc.js +286 -0
  495. package/dist/showcase/assets/metadata-list-DY92-pw2.js +1 -0
  496. package/dist/showcase/assets/metric-DxMTjIvU.js +1 -0
  497. package/dist/showcase/assets/metric-bar-cW9nWCRl.js +1 -0
  498. package/dist/showcase/assets/metric-grid-CvfO52X1.js +1 -0
  499. package/dist/showcase/assets/metric-trend-chip-BmjQdRus.js +1 -0
  500. package/dist/showcase/assets/metrics-analytics-bar-BZqB5d1y.js +44 -0
  501. package/dist/showcase/assets/metrics-analytics-cards-jAhlrQCI.js +50 -0
  502. package/dist/showcase/assets/metrics-comparison-DURZ6qEL.js +76 -0
  503. package/dist/showcase/assets/metrics-heatmap-HhJDBguh.js +27 -0
  504. package/dist/showcase/assets/metrics-inline-badge-Dq5k-P6F.js +17 -0
  505. package/dist/showcase/assets/metrics-kpi-row-DXzhwa6z.js +31 -0
  506. package/dist/showcase/assets/metrics-micro-grid-C6O5b0wP.js +42 -0
  507. package/dist/showcase/assets/metrics-overview-Hv2mseb3.js +192 -0
  508. package/dist/showcase/assets/metrics-stat-cards-CW42vBCS.js +54 -0
  509. package/dist/showcase/assets/minus-BW62vCxf.js +1 -0
  510. package/dist/showcase/assets/money-display-CAdGk5Lr.js +1 -0
  511. package/dist/showcase/assets/month-year-picker-dHuvgz1E.js +1 -0
  512. package/dist/showcase/assets/navigation-C4uSLvbZ.js +90 -0
  513. package/dist/showcase/assets/navigation-SjsZrtIc.js +231 -0
  514. package/dist/showcase/assets/navigation-extras-CMVNVskk.js +43 -0
  515. package/dist/showcase/assets/onboarding-checklist-C1jwRdMU.js +119 -0
  516. package/dist/showcase/assets/overflow-tab-bar-BYFLpl5w.js +1 -0
  517. package/dist/showcase/assets/overlays-0Y8MAz39.js +159 -0
  518. package/dist/showcase/assets/overlays-ClOnjahL.js +408 -0
  519. package/dist/showcase/assets/overview-B5ztGmTp.js +184 -0
  520. package/dist/showcase/assets/package-check-MeSw6bS4.js +1 -0
  521. package/dist/showcase/assets/package-vYJ0q0QM.js +1 -0
  522. package/dist/showcase/assets/page-4lMKtBQ7.js +1 -0
  523. package/dist/showcase/assets/page-action-button-C5-TGSzy.js +1 -0
  524. package/dist/showcase/assets/page-header-C_-KYryO.js +1 -0
  525. package/dist/showcase/assets/pagination-D3L3Iwus.js +1 -0
  526. package/dist/showcase/assets/pagination-dZXPxwHx.js +42 -0
  527. package/dist/showcase/assets/paperclip-BZhdPOw8.js +1 -0
  528. package/dist/showcase/assets/password-input-CDSMtGxt.js +1 -0
  529. package/dist/showcase/assets/pencil-DiYr3CZ9.js +1 -0
  530. package/dist/showcase/assets/phone-Dm5qzlG8.js +1 -0
  531. package/dist/showcase/assets/plus-pfGaA3St.js +1 -0
  532. package/dist/showcase/assets/popover-CjVWDO7C.js +1 -0
  533. package/dist/showcase/assets/popover-menu-JcZyGV3Y.js +1 -0
  534. package/dist/showcase/assets/popover-pZ4Jbp0s.js +1 -0
  535. package/dist/showcase/assets/products-C62MKtAR.js +423 -0
  536. package/dist/showcase/assets/progress-Btw-ZUaU.js +18 -0
  537. package/dist/showcase/assets/progress-DpB5LL6R.js +1 -0
  538. package/dist/showcase/assets/props-table-Bjc9IHmp.js +1 -0
  539. package/dist/showcase/assets/quote-DcxVd1fj.js +1 -0
  540. package/dist/showcase/assets/receipt-BHns-S5Q.js +1 -0
  541. package/dist/showcase/assets/receipt-text-L0aYasyt.js +1 -0
  542. package/dist/showcase/assets/refinement-guide-BBOGBJ4I.js +189 -0
  543. package/dist/showcase/assets/refresh-cw-z6mlm0HI.js +1 -0
  544. package/dist/showcase/assets/resolveValueLabel-hsarzg5A.js +1 -0
  545. package/dist/showcase/assets/resource-CIn_zKZ4.js +139 -0
  546. package/dist/showcase/assets/resource-DxktLgEK.js +1 -0
  547. package/dist/showcase/assets/resource-selector-card-dkcEQ6bl.js +43 -0
  548. package/dist/showcase/assets/rich-text-editor-Dd-rWisw.js +124 -0
  549. package/dist/showcase/assets/rich-text-editor-DvJMFj48.js +143 -0
  550. package/dist/showcase/assets/rotate-ccw-DEz6nb5P.js +1 -0
  551. package/dist/showcase/assets/route-BeXaXTk8.js +1 -0
  552. package/dist/showcase/assets/save-EE7Tc5OT.js +1 -0
  553. package/dist/showcase/assets/schema-form-RK9Zpz1E.js +327 -0
  554. package/dist/showcase/assets/scroll-area-BejQJ0Q1.js +32 -0
  555. package/dist/showcase/assets/scroll-area-DS8LJ7LG.js +1 -0
  556. package/dist/showcase/assets/section-Cv8i4DIx.js +1 -0
  557. package/dist/showcase/assets/select-Cuy3YKW9.js +1 -0
  558. package/dist/showcase/assets/select-qFy1jm91.js +1 -0
  559. package/dist/showcase/assets/send-CXv0ST9u.js +1 -0
  560. package/dist/showcase/assets/separator-CecGyBaV.js +1 -0
  561. package/dist/showcase/assets/separator-CqtFQXrk.js +28 -0
  562. package/dist/showcase/assets/settings-2-CCeMwMOj.js +1 -0
  563. package/dist/showcase/assets/settings-CXjN6wTC.js +1 -0
  564. package/dist/showcase/assets/sheet-Csyrmkqp.js +1 -0
  565. package/dist/showcase/assets/shield-DR0ZfAFA.js +1 -0
  566. package/dist/showcase/assets/shield-alert-Bp1iFJ2q.js +1 -0
  567. package/dist/showcase/assets/shield-check-ClL4B_Cd.js +1 -0
  568. package/dist/showcase/assets/shopping-bag-DnSmbPUX.js +1 -0
  569. package/dist/showcase/assets/showcase-CQKt5VGi.js +132 -0
  570. package/dist/showcase/assets/sidebar-CXy94md1.js +1 -0
  571. package/dist/showcase/assets/sidebar.context-C8gkOwJ5.js +1 -0
  572. package/dist/showcase/assets/skeleton-B8wC5P66.js +29 -0
  573. package/dist/showcase/assets/skeleton-DBlCLlBC.js +1 -0
  574. package/dist/showcase/assets/slider-BcjkNx6W.js +1 -0
  575. package/dist/showcase/assets/smart-card-Cg6rtWH9.js +1 -0
  576. package/dist/showcase/assets/sonner-ZGBQ13wS.js +22 -0
  577. package/dist/showcase/assets/sortable.esm-CGFWc-Cn.js +5 -0
  578. package/dist/showcase/assets/sparkles-q1-9JZqa.js +1 -0
  579. package/dist/showcase/assets/spinner-CKg8QLHu.js +1 -0
  580. package/dist/showcase/assets/spinner-D1Ao9j9T.js +49 -0
  581. package/dist/showcase/assets/spinner-oahLIkgb.js +30 -0
  582. package/dist/showcase/assets/square-pen-DZ3bQJia.js +1 -0
  583. package/dist/showcase/assets/stacked-avatars-CKPtb3Hj.js +1 -0
  584. package/dist/showcase/assets/star-suetD-KI.js +1 -0
  585. package/dist/showcase/assets/startOfDay-OjIsUeiv.js +1 -0
  586. package/dist/showcase/assets/styles-1mYOoC2k.js +1 -0
  587. package/dist/showcase/assets/suggestions-DLYaI-In.js +126 -0
  588. package/dist/showcase/assets/switch-CTTrJNwo.js +1 -0
  589. package/dist/showcase/assets/switch-ChJWWmxN.js +1 -0
  590. package/dist/showcase/assets/sync-DsHYydvo.js +124 -0
  591. package/dist/showcase/assets/table-Ck2ptin2.js +686 -0
  592. package/dist/showcase/assets/table-DyJ9oADQ.js +1 -0
  593. package/dist/showcase/assets/table-actions-COU4zHfh.js +1 -0
  594. package/dist/showcase/assets/tabs-Bl_RHGIw.js +1 -0
  595. package/dist/showcase/assets/tabs-DS-4VSkb.js +19 -0
  596. package/dist/showcase/assets/tags-input-BlYzb5fF.js +1 -0
  597. package/dist/showcase/assets/text-button-OPdNs3fb.js +1 -0
  598. package/dist/showcase/assets/text-link-D27gqGeg.js +1 -0
  599. package/dist/showcase/assets/textarea-DpC7J5F-.js +1 -0
  600. package/dist/showcase/assets/textarea-JtXUjxvc.js +1 -0
  601. package/dist/showcase/assets/timelines-DQM-B4Xo.js +200 -0
  602. package/dist/showcase/assets/toggle-group-CMneKREH.js +1 -0
  603. package/dist/showcase/assets/toggles-CAXXgjO_.js +71 -0
  604. package/dist/showcase/assets/toggles-group-CHRqrpoM.js +32 -0
  605. package/dist/showcase/assets/tooltip-CwGZAioX.js +31 -0
  606. package/dist/showcase/assets/trash-2-BpMb9Zbb.js +1 -0
  607. package/dist/showcase/assets/trending-up-B1BzitCg.js +1 -0
  608. package/dist/showcase/assets/truck-CDSE5-HZ.js +1 -0
  609. package/dist/showcase/assets/typography-BoNJ1hRZ.js +223 -0
  610. package/dist/showcase/assets/ui-badge-Djh6NiB2.js +28 -0
  611. package/dist/showcase/assets/ui-card-QC_rl_H2.js +30 -0
  612. package/dist/showcase/assets/ui-table-qAGsc3qN.js +42 -0
  613. package/dist/showcase/assets/upload-tray-DKCJgW5u.js +138 -0
  614. package/dist/showcase/assets/use-layout-link-BPlsZ8Ys.js +1 -0
  615. package/dist/showcase/assets/useAnchoredPopupScrollLock-526MebAC.js +1 -0
  616. package/dist/showcase/assets/useAriaLabelledBy-CqySZiH9.js +1 -0
  617. package/dist/showcase/assets/useCollapsiblePanel-DWX7LbGX.js +1 -0
  618. package/dist/showcase/assets/useCompositeItem-DGEBUXgE.js +1 -0
  619. package/dist/showcase/assets/useCompositeListItem-B2nuNlc2.js +1 -0
  620. package/dist/showcase/assets/useLabelableId-DY4O1lpt.js +1 -0
  621. package/dist/showcase/assets/useOpenInteractionType-DxwujDvt.js +1 -0
  622. package/dist/showcase/assets/useRender-BPoNv-Lm.js +1 -0
  623. package/dist/showcase/assets/useTriggerFocusGuards-BnOSAjfy.js +1 -0
  624. package/dist/showcase/assets/useValueChanged-CXmDOWxx.js +1 -0
  625. package/dist/showcase/assets/user-BGchdtV_.js +1 -0
  626. package/dist/showcase/assets/user-plus-BifI_xVA.js +1 -0
  627. package/dist/showcase/assets/users-Cl5yYqdg.js +1 -0
  628. package/dist/showcase/assets/vendor-profile-BNW4FYna.js +37 -0
  629. package/dist/showcase/assets/video-BtQPixYN.js +1 -0
  630. package/dist/showcase/assets/wrench-CRalc5fG.js +1 -0
  631. package/dist/showcase/assets/x-D6hUY89S.js +1 -0
  632. package/dist/showcase/assets/zap-v_qbqeI5.js +1 -0
  633. package/dist/showcase/index.html +2 -2
  634. package/dist/style.css +1 -1
  635. package/package.json +1 -1
  636. package/src/css/themes/shadcn.default.css +6 -6
  637. package/src/css/tokens/foundation.css +6 -6
  638. package/dist/_shared/accordion-B9EjlZLY.js +0 -135
  639. package/dist/_shared/accordion-B9EjlZLY.js.map +0 -1
  640. package/dist/_shared/accordion-IFDIc0E7.cjs +0 -2
  641. package/dist/_shared/accordion-IFDIc0E7.cjs.map +0 -1
  642. package/dist/_shared/action-menu-B6yFRDz1.cjs +0 -2
  643. package/dist/_shared/action-menu-B6yFRDz1.cjs.map +0 -1
  644. package/dist/_shared/action-menu-CNS-fwQr.js +0 -96
  645. package/dist/_shared/action-menu-CNS-fwQr.js.map +0 -1
  646. package/dist/_shared/ai-artifact-B3qhuiKC.js +0 -1099
  647. package/dist/_shared/ai-artifact-B3qhuiKC.js.map +0 -1
  648. package/dist/_shared/ai-artifact-Dtr0bnVq.cjs +0 -3
  649. package/dist/_shared/ai-artifact-Dtr0bnVq.cjs.map +0 -1
  650. package/dist/_shared/alert-V0V36Sny.cjs +0 -2
  651. package/dist/_shared/alert-V0V36Sny.cjs.map +0 -1
  652. package/dist/_shared/alert-m-4s0Hqq.js +0 -81
  653. package/dist/_shared/alert-m-4s0Hqq.js.map +0 -1
  654. package/dist/_shared/app-shell-D3eGUtL-.js +0 -69
  655. package/dist/_shared/app-shell-D3eGUtL-.js.map +0 -1
  656. package/dist/_shared/app-shell-QJHARDMB.cjs +0 -2
  657. package/dist/_shared/app-shell-QJHARDMB.cjs.map +0 -1
  658. package/dist/_shared/auth-BZY91F5_.cjs +0 -2
  659. package/dist/_shared/auth-BZY91F5_.cjs.map +0 -1
  660. package/dist/_shared/auth-DcotjEbY.js +0 -643
  661. package/dist/_shared/auth-DcotjEbY.js.map +0 -1
  662. package/dist/_shared/badge-BeSKxX1u.cjs +0 -2
  663. package/dist/_shared/badge-BeSKxX1u.cjs.map +0 -1
  664. package/dist/_shared/badge-a2Z3K5aQ.js +0 -110
  665. package/dist/_shared/badge-a2Z3K5aQ.js.map +0 -1
  666. package/dist/_shared/breadcrumbs-AyLzxCJZ.cjs +0 -2
  667. package/dist/_shared/breadcrumbs-AyLzxCJZ.cjs.map +0 -1
  668. package/dist/_shared/breadcrumbs-B57Unsoe.js +0 -105
  669. package/dist/_shared/breadcrumbs-B57Unsoe.js.map +0 -1
  670. package/dist/_shared/button-Bd5bEIiB.cjs +0 -2
  671. package/dist/_shared/button-Bd5bEIiB.cjs.map +0 -1
  672. package/dist/_shared/button-DHksjMvc.js +0 -189
  673. package/dist/_shared/button-DHksjMvc.js.map +0 -1
  674. package/dist/_shared/buttons-Bek9F7qK.cjs +0 -2
  675. package/dist/_shared/buttons-Bek9F7qK.cjs.map +0 -1
  676. package/dist/_shared/buttons-DcynMPnE.js +0 -137
  677. package/dist/_shared/buttons-DcynMPnE.js.map +0 -1
  678. package/dist/_shared/card-radio-group-C2p_iBal.cjs +0 -2
  679. package/dist/_shared/card-radio-group-C2p_iBal.cjs.map +0 -1
  680. package/dist/_shared/card-radio-group-Fdi1Cz1j.js +0 -150
  681. package/dist/_shared/card-radio-group-Fdi1Cz1j.js.map +0 -1
  682. package/dist/_shared/cards-C1ythc0Q.js +0 -354
  683. package/dist/_shared/cards-C1ythc0Q.js.map +0 -1
  684. package/dist/_shared/cards-GSYfJ-oX.cjs +0 -2
  685. package/dist/_shared/cards-GSYfJ-oX.cjs.map +0 -1
  686. package/dist/_shared/combobox-BIe72dV3.js +0 -954
  687. package/dist/_shared/combobox-BIe72dV3.js.map +0 -1
  688. package/dist/_shared/combobox-CJiFDoTi.cjs +0 -2
  689. package/dist/_shared/combobox-CJiFDoTi.cjs.map +0 -1
  690. package/dist/_shared/comments-CmljtbAW.js +0 -952
  691. package/dist/_shared/comments-CmljtbAW.js.map +0 -1
  692. package/dist/_shared/comments-ColUq7eh.cjs +0 -2
  693. package/dist/_shared/comments-ColUq7eh.cjs.map +0 -1
  694. package/dist/_shared/copyable-Dopk9pEJ.js +0 -38
  695. package/dist/_shared/copyable-Dopk9pEJ.js.map +0 -1
  696. package/dist/_shared/copyable-rQwxsTJ3.cjs +0 -2
  697. package/dist/_shared/copyable-rQwxsTJ3.cjs.map +0 -1
  698. package/dist/_shared/data-display-BTsCY7A5.js +0 -1873
  699. package/dist/_shared/data-display-BTsCY7A5.js.map +0 -1
  700. package/dist/_shared/data-display-BdGQMXit.cjs +0 -2
  701. package/dist/_shared/data-display-BdGQMXit.cjs.map +0 -1
  702. package/dist/_shared/date-picker-BiUgIkjP.cjs +0 -2
  703. package/dist/_shared/date-picker-BiUgIkjP.cjs.map +0 -1
  704. package/dist/_shared/date-picker-DFkLiveH.js +0 -1361
  705. package/dist/_shared/date-picker-DFkLiveH.js.map +0 -1
  706. package/dist/_shared/date-pickers-C86tVD8e.cjs +0 -2
  707. package/dist/_shared/date-pickers-C86tVD8e.cjs.map +0 -1
  708. package/dist/_shared/date-pickers-D4oxOOHE.js +0 -329
  709. package/dist/_shared/date-pickers-D4oxOOHE.js.map +0 -1
  710. package/dist/_shared/display-B0wLVN8t.js +0 -986
  711. package/dist/_shared/display-B0wLVN8t.js.map +0 -1
  712. package/dist/_shared/display-Bin2vVex.cjs +0 -2
  713. package/dist/_shared/display-Bin2vVex.cjs.map +0 -1
  714. package/dist/_shared/form-sizing-C51oI3Di.js +0 -42
  715. package/dist/_shared/form-sizing-C51oI3Di.js.map +0 -1
  716. package/dist/_shared/form-sizing-Co53Drri.cjs +0 -2
  717. package/dist/_shared/form-sizing-Co53Drri.cjs.map +0 -1
  718. package/dist/_shared/forms-CEE1te78.cjs +0 -2
  719. package/dist/_shared/forms-CEE1te78.cjs.map +0 -1
  720. package/dist/_shared/forms-CQoGvG7q.js +0 -3533
  721. package/dist/_shared/forms-CQoGvG7q.js.map +0 -1
  722. package/dist/_shared/header-B9IPDQRW.js +0 -447
  723. package/dist/_shared/header-B9IPDQRW.js.map +0 -1
  724. package/dist/_shared/header-C_1x4-rd.cjs +0 -2
  725. package/dist/_shared/header-C_1x4-rd.cjs.map +0 -1
  726. package/dist/_shared/hooks---vunGQ6.js +0 -95
  727. package/dist/_shared/hooks---vunGQ6.js.map +0 -1
  728. package/dist/_shared/hooks-CjVzmgvY.cjs +0 -2
  729. package/dist/_shared/hooks-CjVzmgvY.cjs.map +0 -1
  730. package/dist/_shared/input-CB6hxh-5.cjs +0 -2
  731. package/dist/_shared/input-CB6hxh-5.cjs.map +0 -1
  732. package/dist/_shared/input-CfnHBT--.js +0 -182
  733. package/dist/_shared/input-CfnHBT--.js.map +0 -1
  734. package/dist/_shared/item-Xs-fgzaT.js +0 -226
  735. package/dist/_shared/item-Xs-fgzaT.js.map +0 -1
  736. package/dist/_shared/item-eUP9Rtmg.cjs +0 -2
  737. package/dist/_shared/item-eUP9Rtmg.cjs.map +0 -1
  738. package/dist/_shared/layout-BXrQqUKq.js +0 -262
  739. package/dist/_shared/layout-BXrQqUKq.js.map +0 -1
  740. package/dist/_shared/layout-DWicdsPI.cjs +0 -2
  741. package/dist/_shared/layout-DWicdsPI.cjs.map +0 -1
  742. package/dist/_shared/mentions-BahbwDwU.js +0 -506
  743. package/dist/_shared/mentions-BahbwDwU.js.map +0 -1
  744. package/dist/_shared/mentions-aHalksbt.cjs +0 -2
  745. package/dist/_shared/mentions-aHalksbt.cjs.map +0 -1
  746. package/dist/_shared/money-display-BLPNMmiT.cjs +0 -2
  747. package/dist/_shared/money-display-BLPNMmiT.cjs.map +0 -1
  748. package/dist/_shared/money-display-D_-Cb8-9.js +0 -198
  749. package/dist/_shared/money-display-D_-Cb8-9.js.map +0 -1
  750. package/dist/_shared/navigation-BcYAwgzo.js +0 -436
  751. package/dist/_shared/navigation-BcYAwgzo.js.map +0 -1
  752. package/dist/_shared/navigation-DAB7uuBj.cjs +0 -2
  753. package/dist/_shared/navigation-DAB7uuBj.cjs.map +0 -1
  754. package/dist/_shared/overlays-DW8OIK5R.js +0 -735
  755. package/dist/_shared/overlays-DW8OIK5R.js.map +0 -1
  756. package/dist/_shared/overlays-Du65iCkx.cjs +0 -2
  757. package/dist/_shared/overlays-Du65iCkx.cjs.map +0 -1
  758. package/dist/_shared/popover-menu-qxBZlTck.js +0 -93
  759. package/dist/_shared/popover-menu-qxBZlTck.js.map +0 -1
  760. package/dist/_shared/popover-menu-z9QTjl4o.cjs +0 -2
  761. package/dist/_shared/popover-menu-z9QTjl4o.cjs.map +0 -1
  762. package/dist/_shared/rich-text-editor-DeIiIDn7.cjs +0 -2
  763. package/dist/_shared/rich-text-editor-DeIiIDn7.cjs.map +0 -1
  764. package/dist/_shared/rich-text-editor-VIBlL0x3.js +0 -620
  765. package/dist/_shared/rich-text-editor-VIBlL0x3.js.map +0 -1
  766. package/dist/_shared/settings-Bfr6PgSi.cjs +0 -2
  767. package/dist/_shared/settings-Bfr6PgSi.cjs.map +0 -1
  768. package/dist/_shared/settings-CrPaYr4A.js +0 -143
  769. package/dist/_shared/settings-CrPaYr4A.js.map +0 -1
  770. package/dist/_shared/sidebar-CDOLD8fN.js +0 -548
  771. package/dist/_shared/sidebar-CDOLD8fN.js.map +0 -1
  772. package/dist/_shared/sidebar-DcsxeNml.cjs +0 -2
  773. package/dist/_shared/sidebar-DcsxeNml.cjs.map +0 -1
  774. package/dist/_shared/spinner-D35zNriU.cjs +0 -2
  775. package/dist/_shared/spinner-D35zNriU.cjs.map +0 -1
  776. package/dist/_shared/spinner-DMC2IIml.js +0 -67
  777. package/dist/_shared/spinner-DMC2IIml.js.map +0 -1
  778. package/dist/_shared/table-B_pqCQxC.js +0 -1377
  779. package/dist/_shared/table-B_pqCQxC.js.map +0 -1
  780. package/dist/_shared/table-CGVOXtdv.cjs +0 -2
  781. package/dist/_shared/table-CGVOXtdv.cjs.map +0 -1
  782. package/dist/_shared/textarea-B24qgdmd.cjs +0 -2
  783. package/dist/_shared/textarea-B24qgdmd.cjs.map +0 -1
  784. package/dist/_shared/textarea-ChLRmmVU.js +0 -118
  785. package/dist/_shared/textarea-ChLRmmVU.js.map +0 -1
  786. package/dist/_shared/typography-CO9uwZhF.cjs +0 -2
  787. package/dist/_shared/typography-CO9uwZhF.cjs.map +0 -1
  788. package/dist/_shared/typography-DE0NGEIE.js +0 -201
  789. package/dist/_shared/typography-DE0NGEIE.js.map +0 -1
  790. package/dist/_shared/workspace-C1twu23r.cjs +0 -2
  791. package/dist/_shared/workspace-C1twu23r.cjs.map +0 -1
  792. package/dist/_shared/workspace-CkOZLdcN.js +0 -357
  793. package/dist/_shared/workspace-CkOZLdcN.js.map +0 -1
  794. package/dist/showcase/assets/AreaChart-WJREayr9.js +0 -6
  795. package/dist/showcase/assets/CompositeItem-CY3XmFuI.js +0 -1
  796. package/dist/showcase/assets/CompositeRoot-BPMF0t1F.js +0 -1
  797. package/dist/showcase/assets/DialogTrigger-BzaF3YN8.js +0 -1
  798. package/dist/showcase/assets/LabelableContext-LKvvFFnV.js +0 -1
  799. package/dist/showcase/assets/PreviewLayout-B0n7l00P.js +0 -1
  800. package/dist/showcase/assets/RadioGroup-VBtGFETg.js +0 -1
  801. package/dist/showcase/assets/ScrollAreaCorner-BimGwdGs.js +0 -1
  802. package/dist/showcase/assets/Separator-BfKe0YiY.js +0 -1
  803. package/dist/showcase/assets/ToolbarRootContext-Cscyv1PN.js +0 -1
  804. package/dist/showcase/assets/accordion-BEN0VkL4.js +0 -171
  805. package/dist/showcase/assets/accordion-variants-QFG3H38z.js +0 -1
  806. package/dist/showcase/assets/action-menu-Bfw1tFqM.js +0 -1
  807. package/dist/showcase/assets/actions-CFpHs5IC.js +0 -310
  808. package/dist/showcase/assets/activities-CDxlaghU.js +0 -500
  809. package/dist/showcase/assets/activities-feed-card-BO1kcjRK.js +0 -1
  810. package/dist/showcase/assets/admin-DFpHXeuv.js +0 -140
  811. package/dist/showcase/assets/ai-DyO6VqQP.js +0 -207
  812. package/dist/showcase/assets/ai-artifact-MVA3ikv6.js +0 -2
  813. package/dist/showcase/assets/ai-chat-D-xcp6Jf.js +0 -568
  814. package/dist/showcase/assets/ai-elements-DlFqIOYp.js +0 -387
  815. package/dist/showcase/assets/ai-tool-call-DedG9TdK.js +0 -1
  816. package/dist/showcase/assets/alert-CmRK2lOe.js +0 -1
  817. package/dist/showcase/assets/alert-DCIVryEp.js +0 -62
  818. package/dist/showcase/assets/alert-DDP3Ktic.js +0 -93
  819. package/dist/showcase/assets/api-key-list-CWa997YX.js +0 -1
  820. package/dist/showcase/assets/api-key-list-mTPebHF3.js +0 -73
  821. package/dist/showcase/assets/app-sidebar-Cnfk9z5K.js +0 -1
  822. package/dist/showcase/assets/arrow-down-CCYWFimd.js +0 -1
  823. package/dist/showcase/assets/arrow-left-CrYjfZJ0.js +0 -1
  824. package/dist/showcase/assets/arrow-right-eLxbBrdm.js +0 -1
  825. package/dist/showcase/assets/arrow-up-kA33fcPv.js +0 -1
  826. package/dist/showcase/assets/arrow-up-right-BSWGQVDB.js +0 -1
  827. package/dist/showcase/assets/avatar-BDGhB3aA.js +0 -57
  828. package/dist/showcase/assets/avatar-CLBQvnYG.js +0 -1
  829. package/dist/showcase/assets/avatar-WUMW3Qjo.js +0 -1
  830. package/dist/showcase/assets/avatar-cKSNuTzf.js +0 -67
  831. package/dist/showcase/assets/badge--mqVg8Ry.js +0 -31
  832. package/dist/showcase/assets/badge-check-D7YjWqnm.js +0 -1
  833. package/dist/showcase/assets/bell-6YyocFK6.js +0 -1
  834. package/dist/showcase/assets/bot-BC4pGAB3.js +0 -1
  835. package/dist/showcase/assets/box-CPGIu4Nv.js +0 -1
  836. package/dist/showcase/assets/braces-9jywZtTA.js +0 -1
  837. package/dist/showcase/assets/brain-wf_S427C.js +0 -1
  838. package/dist/showcase/assets/brand-78lhbKSW.js +0 -36
  839. package/dist/showcase/assets/breadcrumb-6XHObtqO.js +0 -1
  840. package/dist/showcase/assets/breadcrumb-BVrrS53_.js +0 -52
  841. package/dist/showcase/assets/breadcrumbs-BwC3Iaae.js +0 -1
  842. package/dist/showcase/assets/briefcase-BViWYew9.js +0 -1
  843. package/dist/showcase/assets/building-2-CwR3gV1I.js +0 -1
  844. package/dist/showcase/assets/button-BWwsy37B.js +0 -44
  845. package/dist/showcase/assets/button-group-BTiMRQIO.js +0 -1
  846. package/dist/showcase/assets/buttons-D9pH8hPs.js +0 -272
  847. package/dist/showcase/assets/calendar-Bzl2i1lu.js +0 -1
  848. package/dist/showcase/assets/calendar-CNMlC7Fn.js +0 -16
  849. package/dist/showcase/assets/calendar-D5NdEmaD.js +0 -1
  850. package/dist/showcase/assets/calendar-days-j8QDBUc5.js +0 -1
  851. package/dist/showcase/assets/camera-Cwb84N8a.js +0 -1
  852. package/dist/showcase/assets/card-CX3vQ2Te.js +0 -1
  853. package/dist/showcase/assets/card-FLJkfdKP.js +0 -188
  854. package/dist/showcase/assets/card-primitives-C2s13Uvp.js +0 -1
  855. package/dist/showcase/assets/card-radio-group-BP27dErL.js +0 -1
  856. package/dist/showcase/assets/cards-DcdxRM9W.js +0 -354
  857. package/dist/showcase/assets/carousel-CTKyiHD2.js +0 -449
  858. package/dist/showcase/assets/cell-renderers-ouSypXTE.js +0 -1
  859. package/dist/showcase/assets/chart-CMsMyCah.js +0 -358
  860. package/dist/showcase/assets/chart-column-BrwpEFzy.js +0 -1
  861. package/dist/showcase/assets/checkbox-4qgEfnjv.js +0 -1
  862. package/dist/showcase/assets/checkbox-ratLYBAF.js +0 -1
  863. package/dist/showcase/assets/chevron-down-BInaIfd1.js +0 -1
  864. package/dist/showcase/assets/chevron-left-Bjy3FJ_M.js +0 -1
  865. package/dist/showcase/assets/chevron-up-Ufl6UEyV.js +0 -1
  866. package/dist/showcase/assets/chevrons-up-down-CrOH-P5z.js +0 -1
  867. package/dist/showcase/assets/circle-G0dEx2Ay.js +0 -1
  868. package/dist/showcase/assets/circle-alert-CiibDCe8.js +0 -1
  869. package/dist/showcase/assets/circle-check-Bqm54c03.js +0 -1
  870. package/dist/showcase/assets/circle-check-big-BfiY_qy_.js +0 -1
  871. package/dist/showcase/assets/circle-dot-VNm7CEgH.js +0 -1
  872. package/dist/showcase/assets/circle-question-mark-mM7PKy4G.js +0 -1
  873. package/dist/showcase/assets/circle-x-2tzzp_vB.js +0 -1
  874. package/dist/showcase/assets/clock-3-CfdZnMP2.js +0 -1
  875. package/dist/showcase/assets/clock-ByB7C11p.js +0 -1
  876. package/dist/showcase/assets/code-xml-D2fN-BaU.js +0 -1
  877. package/dist/showcase/assets/collapsible-B2lI_uVI.js +0 -1
  878. package/dist/showcase/assets/collapsible-Bs5YFx-M.js +0 -27
  879. package/dist/showcase/assets/combobox-BqNSwFaM.js +0 -685
  880. package/dist/showcase/assets/command-Dcbh_YP-.js +0 -1
  881. package/dist/showcase/assets/command-Mb30xkwq.js +0 -1
  882. package/dist/showcase/assets/comment-composer-DqTw0zIM.js +0 -1
  883. package/dist/showcase/assets/comment-item-DbQAZ3yP.js +0 -1
  884. package/dist/showcase/assets/comments-CGMOOi7k.js +0 -357
  885. package/dist/showcase/assets/commerce-bVpLHwpS.js +0 -267
  886. package/dist/showcase/assets/composite-CTpmYme_.js +0 -1
  887. package/dist/showcase/assets/contact-card-nuS10UKK.js +0 -65
  888. package/dist/showcase/assets/content-container-NexBp0FV.js +0 -1
  889. package/dist/showcase/assets/copyable-CNltkC2A.js +0 -1
  890. package/dist/showcase/assets/copyable-qr6--oJx.js +0 -96
  891. package/dist/showcase/assets/course-card-0kkl37FX.js +0 -77
  892. package/dist/showcase/assets/cpu-DSD9h0l5.js +0 -1
  893. package/dist/showcase/assets/credit-card-CN0E6FU8.js +0 -1
  894. package/dist/showcase/assets/css-variables-CzmmLWxt.js +0 -1190
  895. package/dist/showcase/assets/currency-BtofP745.js +0 -149
  896. package/dist/showcase/assets/dark-surfaces-BU7kfTIi.js +0 -90
  897. package/dist/showcase/assets/data-view-3W7_KBli.js +0 -124
  898. package/dist/showcase/assets/data-view-snL5QtHe.js +0 -4
  899. package/dist/showcase/assets/database-BarEYzaF.js +0 -1
  900. package/dist/showcase/assets/date-block-dTt9Rcfd.js +0 -1
  901. package/dist/showcase/assets/date-picker-BKzZeQGc.js +0 -1
  902. package/dist/showcase/assets/date-pickers-CYERVYRo.js +0 -73
  903. package/dist/showcase/assets/dense-info-hnKZfRnQ.js +0 -106
  904. package/dist/showcase/assets/design-system-consistency-D6qngflS.js +0 -264
  905. package/dist/showcase/assets/dialog-mO0FpHmT.js +0 -1
  906. package/dist/showcase/assets/dialog-xbuhPXmf.js +0 -1
  907. package/dist/showcase/assets/display-utilities-C4IflxoK.js +0 -267
  908. package/dist/showcase/assets/dist-BFChHTWK.js +0 -45
  909. package/dist/showcase/assets/dist-BkVfs5PY.js +0 -1
  910. package/dist/showcase/assets/dollar-sign-BES-Y4q8.js +0 -1
  911. package/dist/showcase/assets/download-CuEg-4DT.js +0 -1
  912. package/dist/showcase/assets/dropdown-menu-C4Fcfk9z.js +0 -1
  913. package/dist/showcase/assets/dropzone-CrJ_k9fJ.js +0 -1
  914. package/dist/showcase/assets/earth-Cmx-Axig.js +0 -1
  915. package/dist/showcase/assets/ellipsis-Co7iTzp_.js +0 -1
  916. package/dist/showcase/assets/ellipsis-vertical-DMYJFiqQ.js +0 -1
  917. package/dist/showcase/assets/empty-Dw4ozyll.js +0 -1
  918. package/dist/showcase/assets/empty-item-DQwAsl0J.js +0 -49
  919. package/dist/showcase/assets/empty-state-BKvbnAy1.js +0 -1
  920. package/dist/showcase/assets/empty-state-Dv6f2fmP.js +0 -190
  921. package/dist/showcase/assets/enhanced-activities-Ctmivg46.js +0 -357
  922. package/dist/showcase/assets/enhanced-combobox-D0AsPZ-b.js +0 -1
  923. package/dist/showcase/assets/esm-oZ6qcNoa.js +0 -2
  924. package/dist/showcase/assets/event-calendar-ChXdeehr.js +0 -138
  925. package/dist/showcase/assets/event-log-DeOCb2tT.js +0 -330
  926. package/dist/showcase/assets/example-CDvNeHNP.js +0 -1
  927. package/dist/showcase/assets/external-link-BaiCqIx3.js +0 -1
  928. package/dist/showcase/assets/eye-zG-fqYfd.js +0 -1
  929. package/dist/showcase/assets/feature-announcement-C2XGWNgI.js +0 -34
  930. package/dist/showcase/assets/file-sAbDfDuO.js +0 -1
  931. package/dist/showcase/assets/file-text-Boa9IOND.js +0 -1
  932. package/dist/showcase/assets/filter-layout-tZmZz-2B.js +0 -1
  933. package/dist/showcase/assets/filters-D8gEkDAE.js +0 -139
  934. package/dist/showcase/assets/flag-Cu20rcE4.js +0 -1
  935. package/dist/showcase/assets/folder-open-Cuk6KKLi.js +0 -1
  936. package/dist/showcase/assets/form-field-D8sL8tat.js +0 -1
  937. package/dist/showcase/assets/form-sizing-C3UG5WKC.js +0 -1
  938. package/dist/showcase/assets/format-CaRklI--.js +0 -1
  939. package/dist/showcase/assets/forms-CNk2oX65.js +0 -915
  940. package/dist/showcase/assets/funnel-B2kBprKZ.js +0 -1
  941. package/dist/showcase/assets/generic-oWYKMvId.js +0 -1
  942. package/dist/showcase/assets/getPseudoElementBounds-GjucWEcD.js +0 -1
  943. package/dist/showcase/assets/gift-C_D_-5GL.js +0 -1
  944. package/dist/showcase/assets/giftcard-cards-B4DDGzdi.js +0 -85
  945. package/dist/showcase/assets/git-branch-DlTTLnjW.js +0 -1
  946. package/dist/showcase/assets/global-search-BjHAfaqS.js +0 -215
  947. package/dist/showcase/assets/global-search-hKQWHfrf.js +0 -1
  948. package/dist/showcase/assets/globe-D-gH7XQ2.js +0 -1
  949. package/dist/showcase/assets/gradient-card-jVxEisUP.js +0 -58
  950. package/dist/showcase/assets/hash-DySqEhph.js +0 -1
  951. package/dist/showcase/assets/header-B8hHkAVl.js +0 -1
  952. package/dist/showcase/assets/header-notifications-s180jNb1.js +0 -1
  953. package/dist/showcase/assets/heart-DDFCk8Tb.js +0 -1
  954. package/dist/showcase/assets/hooks-0A_FzYrt.js +0 -220
  955. package/dist/showcase/assets/house-BqE1X-Wf.js +0 -1
  956. package/dist/showcase/assets/icon-badge-CyiMjD7j.js +0 -37
  957. package/dist/showcase/assets/icon-badge-fJVhEHym.js +0 -1
  958. package/dist/showcase/assets/image-DCtwKHqe.js +0 -1
  959. package/dist/showcase/assets/inbox-DZA-pAGB.js +0 -1
  960. package/dist/showcase/assets/index-B37z19z3.js +0 -10
  961. package/dist/showcase/assets/index-CIsKgiSF.css +0 -2
  962. package/dist/showcase/assets/inertValue-SPYMBsOM.js +0 -1
  963. package/dist/showcase/assets/info-DrfDr3GT.js +0 -1
  964. package/dist/showcase/assets/inline-stat-BVJNx4xR.js +0 -1
  965. package/dist/showcase/assets/inline-stat-C3cWbSUK.js +0 -15
  966. package/dist/showcase/assets/input-CKTTGrnR.js +0 -1
  967. package/dist/showcase/assets/input-UHuWYPMF.js +0 -1
  968. package/dist/showcase/assets/input-group-BR_lU__a.js +0 -1
  969. package/dist/showcase/assets/input-group-iZaLbsTP.js +0 -47
  970. package/dist/showcase/assets/inputs-C7j8Xivm.js +0 -155
  971. package/dist/showcase/assets/installation-DYnTwaPR.js +0 -134
  972. package/dist/showcase/assets/invoice-header-D_0KvXQe.js +0 -36
  973. package/dist/showcase/assets/invoice-items-jcNb-sST.js +0 -36
  974. package/dist/showcase/assets/invoice-mini-DrZAbjPq.js +0 -14
  975. package/dist/showcase/assets/invoice-table-DlAw0U4U.js +0 -30
  976. package/dist/showcase/assets/isSameDay-Cl6v_syG.js +0 -1
  977. package/dist/showcase/assets/isToday-BBoFjSnJ.js +0 -1
  978. package/dist/showcase/assets/italic-j2U8krYa.js +0 -1
  979. package/dist/showcase/assets/item-B2WoC1SD.js +0 -139
  980. package/dist/showcase/assets/item-BMJ5hfT5.js +0 -1
  981. package/dist/showcase/assets/item-C_5-EHNK.js +0 -1
  982. package/dist/showcase/assets/kanban-Cv64Szxq.js +0 -188
  983. package/dist/showcase/assets/key-round-CORDYqE2.js +0 -1
  984. package/dist/showcase/assets/label-B0UjYqfw.js +0 -1
  985. package/dist/showcase/assets/languages-Njdo5y8i.js +0 -1
  986. package/dist/showcase/assets/layers-Dyew-8IP.js +0 -1
  987. package/dist/showcase/assets/layout-app-shell-DEZt0d84.js +0 -608
  988. package/dist/showcase/assets/layout-auth-BT84haSd.js +0 -790
  989. package/dist/showcase/assets/layout-containers-D6SP4vRB.js +0 -101
  990. package/dist/showcase/assets/layout-header-kLYjJnHz.js +0 -203
  991. package/dist/showcase/assets/layout-page-CmS4d8jw.js +0 -314
  992. package/dist/showcase/assets/layout-primitives-BW858Ymj.js +0 -34
  993. package/dist/showcase/assets/layout-sidebar-eIDEoyzV.js +0 -224
  994. package/dist/showcase/assets/layout-users-HyZHQIov.js +0 -117
  995. package/dist/showcase/assets/layout-workspace-BrDwVUvn.js +0 -191
  996. package/dist/showcase/assets/lib-Dhty05ZR.js +0 -1
  997. package/dist/showcase/assets/list-checks-CcWjdDq8.js +0 -1
  998. package/dist/showcase/assets/lock-CwH3bXx5.js +0 -1
  999. package/dist/showcase/assets/lock-keyhole-BdBxeIkW.js +0 -1
  1000. package/dist/showcase/assets/mail-Cn94c8yp.js +0 -1
  1001. package/dist/showcase/assets/mail-check-D-q_vPxD.js +0 -1
  1002. package/dist/showcase/assets/map-BfUZMScw.js +0 -124
  1003. package/dist/showcase/assets/map-pin-BZB9GUXP.js +0 -1
  1004. package/dist/showcase/assets/media-library-DguE2q94.js +0 -699
  1005. package/dist/showcase/assets/mention-inline-suggestions-CyGplHOl.js +0 -1
  1006. package/dist/showcase/assets/mentions-lmr_XmfN.js +0 -138
  1007. package/dist/showcase/assets/menus-D0qYbzKk.js +0 -171
  1008. package/dist/showcase/assets/message-square-7VpiUwcS.js +0 -1
  1009. package/dist/showcase/assets/metadata-list-B8O2ljIS.js +0 -1
  1010. package/dist/showcase/assets/metadata-list-BcYg9Ru3.js +0 -286
  1011. package/dist/showcase/assets/metric-HzQnjCpO.js +0 -1
  1012. package/dist/showcase/assets/metric-bar-Fr1TDnSu.js +0 -1
  1013. package/dist/showcase/assets/metric-grid-CM-P894v.js +0 -1
  1014. package/dist/showcase/assets/metric-trend-chip-DqYH_U8e.js +0 -1
  1015. package/dist/showcase/assets/metrics-analytics-bar-DKRLzyXq.js +0 -44
  1016. package/dist/showcase/assets/metrics-analytics-cards-qMbAYBbk.js +0 -50
  1017. package/dist/showcase/assets/metrics-comparison-GSWVebL_.js +0 -76
  1018. package/dist/showcase/assets/metrics-heatmap-Fj5QZoO3.js +0 -27
  1019. package/dist/showcase/assets/metrics-inline-badge-BuyhiYDl.js +0 -17
  1020. package/dist/showcase/assets/metrics-kpi-row-xNn4bjZc.js +0 -31
  1021. package/dist/showcase/assets/metrics-micro-grid-W_ZYCffp.js +0 -42
  1022. package/dist/showcase/assets/metrics-overview-D-km110k.js +0 -192
  1023. package/dist/showcase/assets/metrics-stat-cards-odVtufFY.js +0 -54
  1024. package/dist/showcase/assets/minus-DZsXg5PW.js +0 -1
  1025. package/dist/showcase/assets/money-display-C7Hp2pT3.js +0 -1
  1026. package/dist/showcase/assets/month-year-picker-Dnr4J0mO.js +0 -1
  1027. package/dist/showcase/assets/navigation-0nrtBP5O.js +0 -90
  1028. package/dist/showcase/assets/navigation-BaWNq9oa.js +0 -231
  1029. package/dist/showcase/assets/navigation-extras-B22W1Vkk.js +0 -43
  1030. package/dist/showcase/assets/onboarding-checklist-BFj7rmdZ.js +0 -119
  1031. package/dist/showcase/assets/overflow-tab-bar-D_rltswa.js +0 -1
  1032. package/dist/showcase/assets/overlays-CNfiB-zF.js +0 -408
  1033. package/dist/showcase/assets/overlays-CuxuFGC8.js +0 -159
  1034. package/dist/showcase/assets/overview-CBmdAWO6.js +0 -184
  1035. package/dist/showcase/assets/package-BwwfLMWb.js +0 -1
  1036. package/dist/showcase/assets/package-check-BepTKJLy.js +0 -1
  1037. package/dist/showcase/assets/page-_JDFUWqe.js +0 -1
  1038. package/dist/showcase/assets/page-action-button-Cf34I-B2.js +0 -1
  1039. package/dist/showcase/assets/page-header-pdHFvyTo.js +0 -1
  1040. package/dist/showcase/assets/pagination-Db1WJvjK.js +0 -42
  1041. package/dist/showcase/assets/pagination-s8_MGk9D.js +0 -1
  1042. package/dist/showcase/assets/paperclip-B9HQ47_2.js +0 -1
  1043. package/dist/showcase/assets/password-input-D-eZWMGX.js +0 -1
  1044. package/dist/showcase/assets/pencil-Dm53P6Db.js +0 -1
  1045. package/dist/showcase/assets/phone-a4Ja9xAp.js +0 -1
  1046. package/dist/showcase/assets/plus-DbOlx2x0.js +0 -1
  1047. package/dist/showcase/assets/popover-B8qrRgt3.js +0 -1
  1048. package/dist/showcase/assets/popover-Bm5wETUP.js +0 -1
  1049. package/dist/showcase/assets/popover-menu-EH4P-BuI.js +0 -1
  1050. package/dist/showcase/assets/products-n6VBSMDh.js +0 -423
  1051. package/dist/showcase/assets/progress-D9r6PSCF.js +0 -1
  1052. package/dist/showcase/assets/progress-DVnMcpeq.js +0 -18
  1053. package/dist/showcase/assets/props-table-udnF7Z46.js +0 -1
  1054. package/dist/showcase/assets/quote-qVQF4JC7.js +0 -1
  1055. package/dist/showcase/assets/receipt-DaC4l-Mr.js +0 -1
  1056. package/dist/showcase/assets/receipt-text-BnwhWHdU.js +0 -1
  1057. package/dist/showcase/assets/refinement-guide-zBbAE-vw.js +0 -189
  1058. package/dist/showcase/assets/refresh-cw-CX6ghqEe.js +0 -1
  1059. package/dist/showcase/assets/resolveValueLabel-Cjbd_80A.js +0 -1
  1060. package/dist/showcase/assets/resource-D1fXD_Pt.js +0 -139
  1061. package/dist/showcase/assets/resource-i2YV9aHL.js +0 -1
  1062. package/dist/showcase/assets/resource-selector-card-CdQEPr9U.js +0 -43
  1063. package/dist/showcase/assets/rich-text-editor-DJ2i03XV.js +0 -143
  1064. package/dist/showcase/assets/rich-text-editor-Wh8r117d.js +0 -124
  1065. package/dist/showcase/assets/rotate-ccw-2_FhUcdG.js +0 -1
  1066. package/dist/showcase/assets/route-EGSdKgEp.js +0 -1
  1067. package/dist/showcase/assets/save-nXKvyYEx.js +0 -1
  1068. package/dist/showcase/assets/schema-form-D_9UkVBe.js +0 -327
  1069. package/dist/showcase/assets/scroll-area-CB7X4JqZ.js +0 -1
  1070. package/dist/showcase/assets/scroll-area-DCHN9iYj.js +0 -32
  1071. package/dist/showcase/assets/section-C2ovQgbv.js +0 -1
  1072. package/dist/showcase/assets/select-BTOraQSw.js +0 -1
  1073. package/dist/showcase/assets/select-CE0BbUs7.js +0 -1
  1074. package/dist/showcase/assets/send-CI0r12bX.js +0 -1
  1075. package/dist/showcase/assets/separator-CmGfh7lI.js +0 -1
  1076. package/dist/showcase/assets/separator-PhQTNRIB.js +0 -28
  1077. package/dist/showcase/assets/settings-2-qkVb0lyz.js +0 -1
  1078. package/dist/showcase/assets/settings-YXjlZ9zs.js +0 -1
  1079. package/dist/showcase/assets/sheet-CFDUB2H1.js +0 -1
  1080. package/dist/showcase/assets/shield-Dr_UeG6H.js +0 -1
  1081. package/dist/showcase/assets/shield-alert-7rAVXg-K.js +0 -1
  1082. package/dist/showcase/assets/shield-check-BbzHL-nM.js +0 -1
  1083. package/dist/showcase/assets/shopping-bag-DeprN0fB.js +0 -1
  1084. package/dist/showcase/assets/showcase-BU6Fvpg_.js +0 -132
  1085. package/dist/showcase/assets/sidebar-CudnhnWN.js +0 -1
  1086. package/dist/showcase/assets/sidebar.context-CZaDhRhh.js +0 -1
  1087. package/dist/showcase/assets/skeleton-DD6VPVrv.js +0 -1
  1088. package/dist/showcase/assets/skeleton-Dc5LvW7E.js +0 -29
  1089. package/dist/showcase/assets/slider-BxvP9nxk.js +0 -1
  1090. package/dist/showcase/assets/smart-card-B0Llbpiy.js +0 -1
  1091. package/dist/showcase/assets/sonner-mszFoDWT.js +0 -22
  1092. package/dist/showcase/assets/sortable.esm-J5bJPtH9.js +0 -5
  1093. package/dist/showcase/assets/sparkles-CQSdl3Gw.js +0 -1
  1094. package/dist/showcase/assets/spinner-BSxBn2qs.js +0 -49
  1095. package/dist/showcase/assets/spinner-DJxoGJtq.js +0 -30
  1096. package/dist/showcase/assets/spinner-DihTCcve.js +0 -1
  1097. package/dist/showcase/assets/square-pen-CGMSA_p6.js +0 -1
  1098. package/dist/showcase/assets/stacked-avatars-Ct8B4doW.js +0 -1
  1099. package/dist/showcase/assets/star-DFlmmJdh.js +0 -1
  1100. package/dist/showcase/assets/startOfDay-BedffeNt.js +0 -1
  1101. package/dist/showcase/assets/styles-jR6uS97D.js +0 -1
  1102. package/dist/showcase/assets/suggestions-DnjJ-U9n.js +0 -126
  1103. package/dist/showcase/assets/switch-Dkojf4Yd.js +0 -1
  1104. package/dist/showcase/assets/switch-bTb6CSLr.js +0 -1
  1105. package/dist/showcase/assets/sync-rk8eFwoJ.js +0 -124
  1106. package/dist/showcase/assets/table-4qIerTVI.js +0 -686
  1107. package/dist/showcase/assets/table-BjMmmYd7.js +0 -1
  1108. package/dist/showcase/assets/table-actions-DqofOI1V.js +0 -1
  1109. package/dist/showcase/assets/tabs-BV6mMsfk.js +0 -19
  1110. package/dist/showcase/assets/tabs-u2fkHRw8.js +0 -1
  1111. package/dist/showcase/assets/tags-input-Cu_UwlwT.js +0 -1
  1112. package/dist/showcase/assets/text-button-Fyy21evq.js +0 -1
  1113. package/dist/showcase/assets/text-link-WRyY3ZZo.js +0 -1
  1114. package/dist/showcase/assets/textarea-BbCxWNzV.js +0 -1
  1115. package/dist/showcase/assets/textarea-CtD7JQsv.js +0 -1
  1116. package/dist/showcase/assets/timelines-BBPQpCFX.js +0 -200
  1117. package/dist/showcase/assets/toggle-group-B8mQ6wer.js +0 -1
  1118. package/dist/showcase/assets/toggles-CCClWVXZ.js +0 -71
  1119. package/dist/showcase/assets/toggles-group-DgCilPMo.js +0 -32
  1120. package/dist/showcase/assets/tooltip-ClJCWWTI.js +0 -31
  1121. package/dist/showcase/assets/trash-2-Cs7y4-K-.js +0 -1
  1122. package/dist/showcase/assets/trending-up-spYhMxs6.js +0 -1
  1123. package/dist/showcase/assets/truck-DENWgqxK.js +0 -1
  1124. package/dist/showcase/assets/typography-DMmYNFQj.js +0 -223
  1125. package/dist/showcase/assets/ui-badge-BJEtsa7X.js +0 -28
  1126. package/dist/showcase/assets/ui-card-CrPKoi3P.js +0 -30
  1127. package/dist/showcase/assets/ui-table-2HhDwPcu.js +0 -42
  1128. package/dist/showcase/assets/upload-tray-CUZAErkI.js +0 -138
  1129. package/dist/showcase/assets/use-layout-link-Co3GiFmb.js +0 -1
  1130. package/dist/showcase/assets/useAnchoredPopupScrollLock-DgIA0IXg.js +0 -1
  1131. package/dist/showcase/assets/useAriaLabelledBy-CDdoyQgg.js +0 -1
  1132. package/dist/showcase/assets/useCollapsiblePanel-BT0RSjGM.js +0 -1
  1133. package/dist/showcase/assets/useCompositeItem-DFghnuRZ.js +0 -1
  1134. package/dist/showcase/assets/useCompositeListItem-vXyRoJ2x.js +0 -1
  1135. package/dist/showcase/assets/useLabelableId-D__l5sQX.js +0 -1
  1136. package/dist/showcase/assets/useOpenInteractionType-bZIaLWfE.js +0 -1
  1137. package/dist/showcase/assets/useRender-BV0akLbc.js +0 -1
  1138. package/dist/showcase/assets/useTriggerFocusGuards-dYriJrQP.js +0 -1
  1139. package/dist/showcase/assets/useValueChanged-Dg0AWST0.js +0 -1
  1140. package/dist/showcase/assets/user-B9eCi5Vl.js +0 -1
  1141. package/dist/showcase/assets/user-plus-Uo4IAY7e.js +0 -1
  1142. package/dist/showcase/assets/users-DLep-WjV.js +0 -1
  1143. package/dist/showcase/assets/vendor-profile-BbcE51Pa.js +0 -37
  1144. package/dist/showcase/assets/video-BasdlaQE.js +0 -1
  1145. package/dist/showcase/assets/wrench-BYUVe1-z.js +0 -1
  1146. package/dist/showcase/assets/x-Bx9ayVXr.js +0 -1
  1147. package/dist/showcase/assets/zap-Mgu5HEtF.js +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"display-B0wLVN8t.js","names":[],"sources":["../../src/components/base/forms/fields/decimal-input.tsx","../../src/components/base/forms/fields/currency-input.tsx","../../src/components/base/forms/fields/money-input.tsx","../../src/components/base/forms/form-field.tsx","../../src/components/base/display/notification-banner.tsx","../../src/components/base/display/placeholder-pattern.tsx","../../src/components/base/display/show-if.tsx","../../src/components/base/display/throttle-alert.tsx","../../src/components/base/display/visually-hidden.tsx","../../src/components/base/display/stacked-avatars.tsx","../../src/components/base/display/date-block.tsx","../../src/components/ui/collapsible.tsx","../../src/components/base/display/money-input.tsx","../../src/components/base/display/boolean-indicator.tsx","../../src/components/ui/empty.tsx","../../src/components/ui/progress.tsx","../../src/components/base/display/qr-code.tsx"],"sourcesContent":["/**\n * DecimalInput — text-based numeric input with decimal-place enforcement,\n * locale-friendly comma → dot normalisation, optional min/max clamping,\n * rounding mode (`round` / `floor` / `ceil` / `half-even`), and optional\n * stepper buttons when `step` is set.\n *\n * Wraps the base `Input` so all add-on / icon / clear / loading features\n * still work. Extra features layered on top:\n *\n * - `step` — when set, renders − / + stepper buttons that snap the value\n * to a multiple of `step` (anchored at `min` if provided, else 0).\n * - `roundingMode` — controls how stepper / blur normalisation rounds\n * half values; default `'round'` (round-half-up).\n * - `normalizeOnBlur` (default `true`) — pads the displayed value to the\n * full `decimalPlaces` count and clamps to `[min, max]` when the field\n * loses focus.\n *\n * The `value` prop is always a plain string (consumers parse it as needed)\n * so RHF / Inertia can treat it like any other input.\n */\nimport * as React from 'react';\nimport { useCallback } from 'react';\nimport { Minus, Plus } from 'lucide-react';\nimport { useStrings, type StringsProp } from '@/lib/strings';\nimport { useFormsConfig, type FormControlSize } from '@/lib/ui-provider';\nimport { cn } from '@/lib/utils';\nimport { resolveFormControlSize } from '../form-sizing';\nimport { Input, type InputProps } from './input';\n\nexport type DecimalRoundingMode = 'round' | 'floor' | 'ceil' | 'half-even';\n\nexport interface DecimalInputStrings {\n\tdecrement: string;\n\tincrement: string;\n}\n\nexport const defaultDecimalInputStrings: DecimalInputStrings = {\n\tdecrement: 'Decrement',\n\tincrement: 'Increment',\n};\n\nexport interface DecimalInputProps extends Omit<InputProps, 'type' | 'inputMode' | 'strings'> {\n\tdecimalPlaces?: number;\n\tmin?: number;\n\tmax?: number;\n\tallowNegative?: boolean;\n\tallowEmpty?: boolean;\n\t/** When set, renders − / + steppers and snaps the value to multiples of `step`. */\n\tstep?: number;\n\t/** How to round when normalising on blur or stepping. Default `'round'`. */\n\troundingMode?: DecimalRoundingMode;\n\t/** Pad to full decimalPlaces and clamp to [min, max] on blur. Default `true`. */\n\tnormalizeOnBlur?: boolean;\n\t/** String overrides for stepper aria-labels. */\n\tstrings?: StringsProp<DecimalInputStrings>;\n}\n\nconst formatDecimalValue = (\n\tvalue: string,\n\tdecimalPlaces: number,\n\tallowNegative: boolean,\n): string => {\n\tif (!value) return '';\n\n\tlet formatted = value;\n\tformatted = formatted.replace(/,/g, '.');\n\n\tif (allowNegative) {\n\t\tformatted = formatted.replace(/[^\\d.-]/g, '');\n\t} else {\n\t\tformatted = formatted.replace(/[^\\d.]/g, '');\n\t}\n\n\tif (allowNegative && formatted.includes('-')) {\n\t\tconst hasLeadingMinus = formatted.startsWith('-');\n\t\tformatted = formatted.replace(/-/g, '');\n\t\tif (hasLeadingMinus) formatted = '-' + formatted;\n\t}\n\n\tconst parts = formatted.split('.');\n\tif (parts.length > 2) {\n\t\tformatted = parts[0] + '.' + parts.slice(1).join('');\n\t}\n\n\tif (parts.length === 2 && parts[1].length > decimalPlaces) {\n\t\tformatted = parts[0] + '.' + parts[1].substring(0, decimalPlaces);\n\t}\n\n\treturn formatted;\n};\n\nconst isWithinBounds = (value: string, min?: number, max?: number): boolean => {\n\tif (!value || value === '-') return true;\n\tconst numValue = parseFloat(value);\n\tif (Number.isNaN(numValue)) return true;\n\tif (min !== undefined && numValue < min) return false;\n\tif (max !== undefined && numValue > max) return false;\n\treturn true;\n};\n\nfunction applyRounding(value: number, decimals: number, mode: DecimalRoundingMode): number {\n\tconst factor = Math.pow(10, decimals);\n\tconst shifted = value * factor;\n\tswitch (mode) {\n\t\tcase 'floor':\n\t\t\treturn Math.floor(shifted) / factor;\n\t\tcase 'ceil':\n\t\t\treturn Math.ceil(shifted) / factor;\n\t\tcase 'half-even': {\n\t\t\tconst floor = Math.floor(shifted);\n\t\t\tconst diff = shifted - floor;\n\t\t\tif (diff > 0.5) return (floor + 1) / factor;\n\t\t\tif (diff < 0.5) return floor / factor;\n\t\t\treturn (floor % 2 === 0 ? floor : floor + 1) / factor;\n\t\t}\n\t\tcase 'round':\n\t\tdefault:\n\t\t\treturn Math.round(shifted) / factor;\n\t}\n}\n\nfunction clamp(n: number, min?: number, max?: number): number {\n\tlet next = n;\n\tif (min !== undefined) next = Math.max(min, next);\n\tif (max !== undefined) next = Math.min(max, next);\n\treturn next;\n}\n\nfunction snapToStep(\n\tcurrent: number,\n\tdelta: number,\n\tstep: number,\n\tmin?: number,\n\tmode: DecimalRoundingMode = 'round',\n): number {\n\tconst anchor = min ?? 0;\n\tconst stepsFromAnchor = (current - anchor) / step;\n\tconst rounded =\n\t\tmode === 'floor'\n\t\t\t? Math.floor(stepsFromAnchor)\n\t\t\t: mode === 'ceil'\n\t\t\t\t? Math.ceil(stepsFromAnchor)\n\t\t\t\t: Math.round(stepsFromAnchor);\n\tconst stepped = anchor + (rounded + delta) * step;\n\treturn Number(stepped.toFixed(12));\n}\n\nfunction fireChange(\n\ttarget: HTMLInputElement,\n\tvalue: string,\n\tonChange?: InputProps['onChange'],\n) {\n\t// Write the value to the DOM first so UNCONTROLLED inputs actually reflect\n\t// stepper clicks and blur-normalisation. (Previously this only called\n\t// onChange, so steppers were a no-op on uncontrolled fields.) Use the native\n\t// value setter so React's input value-tracker stays in sync for controlled\n\t// consumers, which then reconcile through their onChange + re-render.\n\tconst nativeSetter = Object.getOwnPropertyDescriptor(\n\t\twindow.HTMLInputElement.prototype,\n\t\t'value',\n\t)?.set;\n\tif (nativeSetter) nativeSetter.call(target, value);\n\telse target.value = value;\n\n\tif (!onChange) return;\n\tconst event = {\n\t\ttarget,\n\t\tcurrentTarget: target,\n\t\ttype: 'change',\n\t\tbubbles: false,\n\t\tcancelable: false,\n\t} as unknown as React.ChangeEvent<HTMLInputElement>;\n\tonChange(event);\n}\n\nconst STEPPER_SIZE_CLASS: Record<FormControlSize, string> = {\n\tsmall: 'w-control-small',\n\tdefault: 'w-control',\n};\n\nfunction DecimalInputImpl(\n\t{\n\t\tdecimalPlaces = 2,\n\t\tmin,\n\t\tmax,\n\t\tallowNegative = true,\n\t\tallowEmpty = true,\n\t\tstep,\n\t\troundingMode = 'round',\n\t\tnormalizeOnBlur = true,\n\t\tonChange,\n\t\tonBlur,\n\t\tplaceholder,\n\t\tclassName,\n\t\tvalue: controlledValue,\n\t\tdefaultValue,\n\t\tdisabled,\n\t\tsize: sizeProp,\n\t\tstrings: stringsProp,\n\t\t...props\n\t}: DecimalInputProps,\n\tforwardedRef: React.ForwardedRef<HTMLInputElement>,\n) {\n\tconst { defaultControlSize } = useFormsConfig();\n\tconst size: FormControlSize = resolveFormControlSize(sizeProp, defaultControlSize);\n\tconst strings = useStrings(defaultDecimalInputStrings, stringsProp);\n\tconst validDecimalPlaces = Math.min(12, Math.max(0, decimalPlaces));\n\tconst inputRef = React.useRef<HTMLInputElement | null>(null);\n\n\tconst handleChange = useCallback(\n\t\t(e: React.ChangeEvent<HTMLInputElement>) => {\n\t\t\tconst newValue = e.target.value;\n\n\t\t\tif (!newValue && allowEmpty) {\n\t\t\t\tonChange?.(e);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst formatted = formatDecimalValue(newValue, validDecimalPlaces, allowNegative);\n\t\t\tif (!isWithinBounds(formatted, min, max)) return;\n\n\t\t\tif (formatted !== newValue) {\n\t\t\t\tconst modifiedEvent = {\n\t\t\t\t\t...e,\n\t\t\t\t\ttarget: { ...e.target, value: formatted },\n\t\t\t\t\tcurrentTarget: { ...e.currentTarget, value: formatted },\n\t\t\t\t} as React.ChangeEvent<HTMLInputElement>;\n\t\t\t\tonChange?.(modifiedEvent);\n\t\t\t} else {\n\t\t\t\tonChange?.(e);\n\t\t\t}\n\t\t},\n\t\t[onChange, validDecimalPlaces, allowNegative, allowEmpty, min, max],\n\t);\n\n\tconst handleBlur = useCallback(\n\t\t(e: React.FocusEvent<HTMLInputElement>) => {\n\t\t\tonBlur?.(e);\n\t\t\tif (!normalizeOnBlur) return;\n\t\t\tconst raw = e.target.value;\n\t\t\tif (!raw && allowEmpty) return;\n\t\t\tconst num = Number.parseFloat(raw.replace(',', '.'));\n\t\t\tif (!Number.isFinite(num)) return;\n\t\t\tconst clamped = clamp(num, min, max);\n\t\t\tconst rounded = applyRounding(clamped, validDecimalPlaces, roundingMode);\n\t\t\tconst next = rounded.toFixed(validDecimalPlaces);\n\t\t\tif (next !== raw && inputRef.current) {\n\t\t\t\tfireChange(inputRef.current, next, onChange);\n\t\t\t}\n\t\t},\n\t\t[onBlur, onChange, normalizeOnBlur, allowEmpty, min, max, validDecimalPlaces, roundingMode],\n\t);\n\n\tconst adjust = useCallback(\n\t\t(delta: number) => {\n\t\t\tif (disabled || step === undefined) return;\n\t\t\tconst target = inputRef.current;\n\t\t\tif (!target) return;\n\t\t\tconst raw = target.value;\n\t\t\tconst current = Number.parseFloat(raw.replace(',', '.'));\n\t\t\tconst base = Number.isFinite(current) ? current : (min ?? 0);\n\t\t\tconst snapped = clamp(snapToStep(base, delta, step, min, roundingMode), min, max);\n\t\t\tconst next = applyRounding(snapped, validDecimalPlaces, roundingMode).toFixed(validDecimalPlaces);\n\t\t\tfireChange(target, next, onChange);\n\t\t},\n\t\t[disabled, step, min, max, roundingMode, validDecimalPlaces, onChange],\n\t);\n\n\tconst showSteppers = typeof step === 'number' && step > 0;\n\tconst placeholderResolved =\n\t\tplaceholder ?? (validDecimalPlaces > 0 ? `0.${'0'.repeat(validDecimalPlaces)}` : '0');\n\n\tif (showSteppers) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn('decimal-input--component', \n\t\t\t\t\t// Stepper segmented group — input + adjacent − / + buttons\n\t\t\t\t\t// share a single border radius so the group reads as one\n\t\t\t\t\t// control instead of three loose chips.\n\t\t\t\t\t'flex items-stretch overflow-hidden rounded-radius border border-input bg-transparent',\n\t\t\t\t\t'focus-within:border-ring focus-within:ring-ring/50 focus-within:ring-[3px]',\n\t\t\t\t\tprops['aria-invalid'] && 'border-destructive ring-destructive/20',\n\t\t\t\t\tdisabled && 'opacity-50 cursor-not-allowed',\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\taria-label={strings.decrement}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tonClick={() => adjust(-1)}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'inline-flex shrink-0 items-center justify-center border-r border-input text-muted-foreground transition-colors',\n\t\t\t\t\t\tSTEPPER_SIZE_CLASS[size],\n\t\t\t\t\t\t'hover:bg-muted hover:text-foreground',\n\t\t\t\t\t\t'disabled:cursor-not-allowed disabled:opacity-50',\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<Minus className={size === 'small' ? 'size-icon-sm' : 'size-icon'} />\n\t\t\t\t</button>\n\t\t\t\t<Input\n\t\t\t\t\tsize={size}\n\t\t\t\t\tref={(node) => { inputRef.current = node; if (typeof forwardedRef === \"function\") forwardedRef(node); else if (forwardedRef) forwardedRef.current = node; }}\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tinputMode={validDecimalPlaces > 0 ? 'decimal' : 'numeric'}\n\t\t\t\t\tplaceholder={placeholderResolved}\n\t\t\t\t\tonChange={handleChange}\n\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\tvalue={controlledValue}\n\t\t\t\t\tdefaultValue={defaultValue}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'flex-1 tabular-nums text-center border-0 shadow-none rounded-none focus-visible:ring-0 focus-visible:border-0',\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\taria-label={strings.increment}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tonClick={() => adjust(1)}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'inline-flex shrink-0 items-center justify-center border-l border-input text-muted-foreground transition-colors',\n\t\t\t\t\t\tSTEPPER_SIZE_CLASS[size],\n\t\t\t\t\t\t'hover:bg-muted hover:text-foreground',\n\t\t\t\t\t\t'disabled:cursor-not-allowed disabled:opacity-50',\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<Plus className={size === 'small' ? 'size-icon-sm' : 'size-icon'} />\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Input\n\t\t\tsize={size}\n\t\t\tref={(node) => { inputRef.current = node; if (typeof forwardedRef === \"function\") forwardedRef(node); else if (forwardedRef) forwardedRef.current = node; }}\n\t\t\ttype=\"text\"\n\t\t\tinputMode={validDecimalPlaces > 0 ? 'decimal' : 'numeric'}\n\t\t\tplaceholder={placeholderResolved}\n\t\t\tonChange={handleChange}\n\t\t\tonBlur={handleBlur}\n\t\t\tvalue={controlledValue}\n\t\t\tdefaultValue={defaultValue}\n\t\t\tdisabled={disabled}\n\t\t\tclassName={cn('tabular-nums text-end', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nconst DecimalInput = React.forwardRef<HTMLInputElement, DecimalInputProps>(DecimalInputImpl);\nDecimalInput.displayName = 'DecimalInput';\n\nexport { DecimalInput };\n","import { useState, useCallback, useEffect, useMemo, memo, forwardRef, type ForwardedRef } from 'react';\nimport * as baseui from '@/components/ui/select';\nimport { Label } from '@/components/typography';\nimport { useFormsConfig } from '@/lib/ui-provider';\nimport { cn } from '@/lib/utils';\nimport { formControlSizeClasses, resolveFormControlSize } from '../form-sizing';\nimport { DecimalInput, type DecimalInputProps } from './decimal-input';\n\nexport interface CurrencyOption {\n value: string;\n label: string;\n}\n\nexport interface CurrencyInputProps extends Omit<DecimalInputProps, 'label' | 'hint' | 'helperText' | 'error'> {\n /** Current currency value */\n currency?: string;\n\n /** Default currency if uncontrolled */\n defaultCurrency?: string;\n\n /** List of available currencies (simple strings or objects with value/label) */\n currencies?: (string | CurrencyOption)[];\n\n /** Callback when currency changes */\n onCurrencyChange?: (currency: string) => void;\n\n /** Position of currency dropdown */\n currencyPosition?: 'start' | 'end';\n\n /** Disable currency selection */\n disableCurrencySelector?: boolean;\n\n /** Placeholder for currency dropdown */\n currencyPlaceholder?: string;\n\n /** Width of the currency dropdown */\n currencyWidth?: string;\n\n /** Label for currency field (sub-label) */\n currencyLabel?: string;\n\n /** Error state for styling (passed from FormField) */\n invalid?: boolean;\n\n /** Called when the input is misconfigured (mismatched currency/defaultCurrency\n * while the selector is disabled, missing currency, etc.). The library\n * also DEV-logs the same message to the console. */\n onConfigError?: (\n message: string,\n details: { currency?: string; defaultCurrency?: string; disableCurrencySelector?: boolean },\n ) => void;\n}\n\n// Common currency symbols\nconst CURRENCY_SYMBOLS: Record<string, string> = {\n USD: '$',\n EUR: '€',\n GBP: '£',\n BGN: 'лв',\n JPY: '¥',\n CNY: '¥',\n CHF: 'CHF',\n CAD: 'C$',\n AUD: 'A$',\n};\n\nconst normalizeCurrencies = (currencies?: (string | CurrencyOption)[]): CurrencyOption[] => {\n if (!currencies || currencies.length === 0) return [];\n\n return currencies.map((currency) => {\n if (typeof currency === 'string') {\n const symbol = CURRENCY_SYMBOLS[currency] || currency;\n return {\n value: currency,\n label: `${symbol} ${currency}`,\n };\n }\n return currency;\n });\n};\n\nfunction CurrencyInputImpl(\n {\n currency: controlledCurrency,\n defaultCurrency,\n currencies,\n onCurrencyChange,\n currencyPosition = 'start',\n disableCurrencySelector = false,\n currencyPlaceholder,\n currencyWidth = 'w-28',\n currencyLabel,\n invalid,\n disabled,\n onConfigError,\n size: sizeProp,\n ...decimalInputProps\n }: CurrencyInputProps,\n forwardedRef: ForwardedRef<HTMLInputElement>,\n) {\n const { defaultControlSize } = useFormsConfig();\n const size = resolveFormControlSize(sizeProp, defaultControlSize);\n\n // Memoize normalized currencies\n const normalizedCurrencies = useMemo(() => normalizeCurrencies(currencies), [currencies]);\n\n // Internal state for uncontrolled currency\n const [internalCurrency, setInternalCurrency] = useState(\n defaultCurrency ?? normalizedCurrencies[0]?.value ?? ''\n );\n\n // Determine if currency is controlled\n const isCurrencyControlled = controlledCurrency !== undefined;\n const selectedCurrency = isCurrencyControlled ? controlledCurrency : internalCurrency;\n\n useEffect(() => {\n const details = { currency: controlledCurrency, defaultCurrency, disableCurrencySelector };\n if (\n disableCurrencySelector &&\n typeof controlledCurrency === 'string' &&\n typeof defaultCurrency === 'string' &&\n controlledCurrency.trim() !== '' &&\n defaultCurrency.trim() !== '' &&\n controlledCurrency !== defaultCurrency\n ) {\n const message = '[CurrencyInput] currency/defaultCurrency mismatch while selector is disabled.';\n if (import.meta.env?.DEV) {\n console.warn(message, { currency: controlledCurrency, defaultCurrency });\n }\n onConfigError?.(message, details);\n }\n\n if (\n disableCurrencySelector &&\n (typeof selectedCurrency !== 'string' || selectedCurrency.trim().length === 0)\n ) {\n const message = '[CurrencyInput] disableCurrencySelector is enabled but no currency is provided.';\n if (import.meta.env?.DEV) {\n console.warn(message);\n }\n onConfigError?.(message, details);\n }\n }, [controlledCurrency, defaultCurrency, disableCurrencySelector, onConfigError, selectedCurrency]);\n\n // Handle currency change\n const handleCurrencyChange = useCallback(\n (newCurrency: string | null) => {\n if (newCurrency === null) return;\n if (!isCurrencyControlled) {\n setInternalCurrency(newCurrency);\n }\n onCurrencyChange?.(newCurrency);\n },\n [isCurrencyControlled, onCurrencyChange]\n );\n\n // Memoize trigger class names. Size flows through `formControlSizeClasses[size]`\n // so the trigger height matches the inner DecimalInput when a consumer sets\n // `<UIProvider forms={{ defaultControlSize }}>`.\n const triggerClassName = useMemo(\n () =>\n cn(\n 'border-input bg-transparent !shadow-none',\n formControlSizeClasses[size],\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',\n currencyWidth,\n disabled && 'opacity-50 cursor-not-allowed'\n ),\n [size, currencyWidth, disabled]\n );\n\n // Currency selector component\n const currencySelector = (\n <div className=\"space-y-2\">\n {!!currencyLabel && <Label className=\"leading-6\">{currencyLabel}</Label>}\n <baseui.Select\n value={selectedCurrency}\n onValueChange={(value) => handleCurrencyChange(value)}\n disabled={disabled || disableCurrencySelector}\n >\n <baseui.SelectTrigger aria-invalid={invalid || undefined} className={triggerClassName}>\n <baseui.SelectValue placeholder={currencyPlaceholder ?? ''} />\n </baseui.SelectTrigger>\n <baseui.SelectContent>\n <baseui.SelectGroup>\n {normalizedCurrencies.map((curr) => (\n <baseui.SelectItem key={curr.value} value={curr.value}>\n {curr.label}\n </baseui.SelectItem>\n ))}\n </baseui.SelectGroup>\n </baseui.SelectContent>\n </baseui.Select>\n </div>\n );\n\n return (\n <div className={cn('currency-input--component', 'flex items-start gap-2')}>\n {currencyPosition === 'start' && currencySelector}\n\n <div className=\"flex-1\">\n <DecimalInput\n ref={forwardedRef}\n size={size}\n decimalPlaces={2}\n allowNegative={false}\n disabled={disabled}\n invalid={invalid}\n {...decimalInputProps}\n />\n </div>\n\n {currencyPosition === 'end' && currencySelector}\n </div>\n );\n}\n\n// forwardRef + memo: forward to the underlying decimal input so consumers\n// can focus/measure programmatically.\nexport const CurrencyInput = memo(forwardRef<HTMLInputElement, CurrencyInputProps>(CurrencyInputImpl));\nCurrencyInput.displayName = 'CurrencyInput';\n","/**\n * MoneyInput (forms/fields) — `CurrencyInput` preset with a small default\n * currency list for back-compat and a callback shape that matches the\n * library's `CurrencyCode` typing.\n *\n * For the richer `MoneyInputData`-shaped helper with migration warnings and\n * form-field chrome, use `@/components/base/display/money-input` instead.\n */\nimport { forwardRef, useCallback } from 'react';\n\nimport { CurrencyInput, type CurrencyInputProps } from './currency-input';\nimport type { CurrencyCode } from '@/lib/ui-provider';\n\nexport interface MoneyInputProps extends Omit<CurrencyInputProps, 'currency' | 'defaultCurrency' | 'currencies' | 'onCurrencyChange'> {\n /** Current currency value (ISO 4217 code, e.g. 'USD'). */\n currency?: CurrencyCode;\n /** Default currency if uncontrolled. */\n defaultCurrency?: CurrencyCode;\n /** Available currencies for the inline picker. Defaults to `['USD', 'EUR']`\n * — pass your own list or wire `useMoneyConfig` at the consumer site for\n * real production use. */\n currencies?: CurrencyCode[];\n /** Callback when the user changes the currency in the inline picker. */\n onCurrencyChange?: (currency: CurrencyCode) => void;\n}\n\nconst DEFAULT_CURRENCIES: CurrencyCode[] = ['USD', 'EUR'];\n\nexport const MoneyInput = forwardRef<HTMLInputElement, MoneyInputProps>(function MoneyInput(\n { currencies = DEFAULT_CURRENCIES, onCurrencyChange, currency, defaultCurrency, ...props },\n ref,\n) {\n const handleCurrencyChange = useCallback(\n (nextCurrency: string) => {\n onCurrencyChange?.(nextCurrency);\n },\n [onCurrencyChange]\n );\n\n return (\n <CurrencyInput className=\"money-input--component\"\n ref={ref}\n currencies={currencies}\n currency={currency}\n defaultCurrency={defaultCurrency}\n onCurrencyChange={handleCurrencyChange}\n {...props}\n />\n );\n});\n\nMoneyInput.displayName = 'MoneyInput';\n","/**\n * Unified Form Field Components\n * =============================\n *\n * Two components sharing the same visual structure for field chrome:\n *\n * 1. `FormField` - Pure presentation wrapper (label, hint, error, required indicator)\n * 2. `ControlledFormField` - FormField + react-hook-form Controller integration\n *\n * ## FormField\n * Use for custom components or non-controlled inputs.\n *\n * ```tsx\n * <FormField label={t('label')} error={error} required hint={t('hint')}>\n * <CustomAutocomplete value={value} onSelect={onSelect} />\n * </FormField>\n * ```\n *\n * ## ControlledFormField\n * Use with react-hook-form. Auto-merges backend (Inertia) + validation errors.\n *\n * ```tsx\n * <ControlledFormField\n * name=\"email\"\n * control={control}\n * error={getError}\n * label={t('fields.email.label')}\n * required\n * rules={{ required: true, pattern: /^\\\\S+@\\\\S+$/i }}\n * >\n * {(field, error, invalid) => (\n * <Input\n * placeholder={t('fields.email.placeholder')}\n * value={field.value ?? ''}\n * onChange={field.onChange}\n * onBlur={field.onBlur}\n * invalid={invalid}\n * />\n * )}\n * </ControlledFormField>\n * ```\n *\n * ## Render Function Parameters\n * - `field` - Controller props: value, onChange, onBlur, name, ref\n * - `error` - Merged error string (backend || validation) or undefined\n * - `invalid` - Boolean for input styling (border color, etc.)\n * - `fieldState` - Escape hatch: touched, dirty, isTouched, isDirty, etc.\n *\n * ## Error Priority\n * Backend errors (via `error` getter) take priority over validation errors.\n * This ensures server-side validation is authoritative.\n *\n * ## Chrome Props (shared by both components)\n * - `label` - Field label text\n * - `required` - Shows red asterisk after label\n * - `hint` - Secondary text shown below the field when there is no error\n * - `error` - Error message (red text below input)\n * - `helperText` - Helper text (shown when no error)\n * - `className` - Additional wrapper classes\n */\n\nimport * as React from 'react';\nimport { type ReactNode } from 'react';\nimport {\n\tController,\n\ttype Control,\n\ttype ControllerFieldState,\n\ttype ControllerRenderProps,\n\ttype FieldPath,\n\ttype FieldValues,\n\ttype RegisterOptions,\n} from 'react-hook-form';\n\nimport { Label, Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\ninterface FieldChromeProps {\n\tlabel?: string;\n\tisRequired?: boolean;\n\trequired?: boolean;\n\thint?: string;\n\terror?: string;\n\thelperText?: string;\n\tclassName?: string;\n}\n\ninterface FormFieldProps extends FieldChromeProps {\n\tchildren: ReactNode;\n\thtmlFor?: string;\n}\n\nexport function FormField({\n\tchildren,\n\tlabel,\n\tisRequired,\n\trequired,\n\thint,\n\terror,\n\thelperText,\n\thtmlFor,\n\tclassName,\n}: FormFieldProps) {\n\tconst hasError = Boolean(error);\n\tconst supportingText = error || helperText || (!hasError ? hint : undefined);\n\tconst showBottomText = Boolean(supportingText);\n\tconst resolvedRequired = isRequired ?? required;\n\tconst generatedId = React.useId();\n\tconst childId =\n\t\tReact.isValidElement(children)\n\t\t\t? (children.props as { id?: string }).id\n\t\t\t: undefined;\n\tconst resolvedHtmlFor = htmlFor ?? childId ?? (label && React.isValidElement(children) ? `form-field-${generatedId}` : undefined);\n\tconst resolvedChildren =\n\t\tresolvedHtmlFor && React.isValidElement(children) && !childId\n\t\t\t? React.cloneElement(children as React.ReactElement<{ id?: string }>, { id: resolvedHtmlFor })\n\t\t\t: children;\n\n\treturn (\n\t\t<div className={cn('form-field--component', 'space-y-1', className)}>\n\t\t\t{!!label && (\n\t\t\t\t<Label htmlFor={resolvedHtmlFor} className=\"flex items-center leading-6\">\n\t\t\t\t\t{label}\n\t\t\t\t\t{!!resolvedRequired && (\n\t\t\t\t\t\t<span className=\"ml-1 text-destructive\">*</span>\n\t\t\t\t\t)}\n\t\t\t\t</Label>\n\t\t\t)}\n\n\t\t\t{resolvedChildren}\n\n\t\t\t{!!showBottomText && (\n\t\t\t\t<Text\n\t\t\t\t\ttag=\"p\"\n\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\ttype={hasError ? 'error' : 'secondary'}\n\t\t\t\t\t{...(hasError ? { role: 'alert', 'aria-live': 'polite' } : {})}\n\t\t\t\t>\n\t\t\t\t\t{supportingText}\n\t\t\t\t</Text>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\ntype ErrorGetter<TName extends string> = (field: TName) => string | undefined;\n\ninterface ControlledFormFieldProps<\n\tTFieldValues extends FieldValues,\n\tTName extends FieldPath<TFieldValues>,\n> extends Omit<FieldChromeProps, 'error'> {\n\tname: TName;\n\tcontrol: Control<TFieldValues>;\n\trules?: RegisterOptions<TFieldValues, TName>;\n\terror?: ErrorGetter<TName>;\n\tchildren: (\n\t\tfield: ControllerRenderProps<TFieldValues, TName>,\n\t\terror: string | undefined,\n\t\tinvalid: boolean,\n\t\tfieldState: ControllerFieldState,\n\t) => ReactNode;\n}\n\nexport function ControlledFormField<\n\tTFieldValues extends FieldValues,\n\tTName extends FieldPath<TFieldValues>,\n>({\n\tname,\n\tcontrol,\n\trules,\n\terror: errorGetter,\n\tchildren,\n\t...chromeProps\n}: ControlledFormFieldProps<TFieldValues, TName>) {\n\treturn (\n\t\t<Controller\n\t\t\tname={name}\n\t\t\tcontrol={control}\n\t\t\trules={rules}\n\t\t\trender={({ field, fieldState }) => {\n\t\t\t\tconst validationError = fieldState.error?.message\n\t\t\t\t\t|| (fieldState.error ? (fieldState.error.type === 'required' ? (chromeProps.label ? `${chromeProps.label} is required` : 'This field is required') : 'Invalid value') : undefined);\n\t\t\t\tconst resolvedError = errorGetter?.(name) || validationError || undefined;\n\t\t\t\tconst invalid = Boolean(resolvedError);\n\n\t\t\t\treturn (\n\t\t\t\t\t<FormField {...chromeProps} error={resolvedError} htmlFor={name}>\n\t\t\t\t\t\t{children(field, resolvedError, invalid, fieldState)}\n\t\t\t\t\t</FormField>\n\t\t\t\t);\n\t\t\t}}\n\t\t/>\n\t);\n}\n\nFormField.displayName = 'FormField';\nControlledFormField.displayName = 'ControlledFormField';\n","/**\n * NotificationBanner — full-width inline notification with type-specific\n * styling (info / success / error / warning). The icon sits in a soft circle\n * for clear hierarchy, the title (when present) reads at full strength, and\n * the message uses the muted secondary tone so the type colour highlights\n * without overwhelming. Optional dismiss button on the trailing edge.\n *\n * Use inside page bodies for non-blocking notices; reach for `Alert` when\n * the affordance is structural (e.g. inside a form), and Toast for transient\n * feedback.\n */\nimport { AlertTriangle, BadgeCheck, CircleAlert, Info, X } from 'lucide-react';\nimport React from 'react';\n\nimport { Button } from '@/components/base/buttons';\nimport { Text } from '@/components/typography';\nimport { sanitizeHtml } from '@/lib/sanitize-html';\nimport { cn } from '@/lib/utils';\n\nexport type NotificationType = 'info' | 'success' | 'error' | 'warning';\n\nexport interface NotificationBannerProps {\n\ttype?: NotificationType;\n\tdismissible?: boolean;\n\ttitle?: string;\n\tmessage?: string;\n\tonDismiss?: () => void;\n\tchildren?: React.ReactNode;\n\tasHTML?: boolean;\n\tdismissAriaLabel?: string;\n\tclassName?: string;\n}\n\ninterface BannerTone {\n\twrapper: string;\n\ticonRing: string;\n\ticonColor: string;\n\ttitle: string;\n\tclose: string;\n}\n\nconst TONES: Record<NotificationType, BannerTone> = {\n\tinfo: {\n\t\twrapper: 'border-info/30 bg-info/5',\n\t\ticonRing: 'bg-info/15',\n\t\ticonColor: 'text-info',\n\t\ttitle: 'text-info',\n\t\tclose: 'text-info/70 hover:text-info hover:bg-info/10',\n\t},\n\tsuccess: {\n\t\twrapper: 'border-success/30 bg-success/5',\n\t\ticonRing: 'bg-success/15',\n\t\ticonColor: 'text-success',\n\t\ttitle: 'text-success',\n\t\tclose: 'text-success/70 hover:text-success hover:bg-success/10',\n\t},\n\terror: {\n\t\twrapper: 'border-destructive/30 bg-destructive/5',\n\t\ticonRing: 'bg-destructive/15',\n\t\ticonColor: 'text-destructive',\n\t\ttitle: 'text-destructive',\n\t\tclose: 'text-destructive/70 hover:text-destructive hover:bg-destructive/10',\n\t},\n\twarning: {\n\t\twrapper: 'border-warning/40 bg-warning/10',\n\t\ticonRing: 'bg-warning/20',\n\t\ticonColor: 'text-warning-foreground',\n\t\ttitle: 'text-warning-foreground',\n\t\tclose: 'text-warning-foreground/70 hover:text-warning-foreground hover:bg-warning/20',\n\t},\n};\n\nconst ICONS: Record<NotificationType, React.ElementType> = {\n\tinfo: Info,\n\tsuccess: BadgeCheck,\n\terror: CircleAlert,\n\twarning: AlertTriangle,\n};\n\nfunction SanitizedSpan({ html }: { html: string }) {\n\treturn React.createElement('span', { dangerouslySetInnerHTML: { __html: html } });\n}\n\nexport function NotificationBanner({\n\ttype = 'info',\n\tdismissible = false,\n\ttitle,\n\tmessage,\n\tonDismiss,\n\tchildren,\n\tasHTML = false,\n\tdismissAriaLabel = 'Dismiss notification',\n\tclassName,\n}: NotificationBannerProps) {\n\tconst tone = TONES[type];\n\tconst IconComponent = ICONS[type];\n\tconst sanitizedHtml = React.useMemo(\n\t\t() => sanitizeHtml(message ?? (typeof children === 'string' ? children : '')),\n\t\t[children, message],\n\t);\n\tconst hasTitle = !!title;\n\n\treturn (\n\t\t<div\n\t\t\trole=\"status\"\n\t\t\tclassName={cn('notification-banner--component', \n\t\t\t\t'flex w-full items-start gap-3 rounded-lg border px-4 py-3',\n\t\t\t\t'animate-in fade-in-0 slide-in-from-bottom-1 duration-200',\n\t\t\t\ttone.wrapper,\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<span\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'mt-0.5 inline-flex size-8 shrink-0 items-center justify-center rounded-full',\n\t\t\t\t\ttone.iconRing,\n\t\t\t\t\ttone.iconColor,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<IconComponent className=\"size-4\" />\n\t\t\t</span>\n\n\t\t\t<div className=\"min-w-0 flex-1\">\n\t\t\t\t{hasTitle && (\n\t\t\t\t\t<Text\n\t\t\t\t\t\ttag=\"div\"\n\t\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\t\tclassName=\"leading-snug text-foreground\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t\t<Text\n\t\t\t\t\ttag=\"div\"\n\t\t\t\t\ttype={hasTitle ? 'secondary' : 'main'}\n\t\t\t\t\tclassName={cn('break-words leading-snug', hasTitle && 'mt-0.5')}\n\t\t\t\t>\n\t\t\t\t\t{!!asHTML && <SanitizedSpan html={sanitizedHtml} />}\n\t\t\t\t\t{!asHTML && (message ?? children)}\n\t\t\t\t</Text>\n\t\t\t</div>\n\n\t\t\t{!!dismissible && (\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\tsize=\"icon-small\"\n\t\t\t\t\taria-label={dismissAriaLabel}\n\t\t\t\t\tonClick={onDismiss}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'-mr-1 inline-flex size-7 shrink-0 items-center justify-center rounded-md transition-colors',\n\t\t\t\t\t\t'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40',\n\t\t\t\t\t\ttone.close,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<X className=\"size-4\" />\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nNotificationBanner.displayName = 'NotificationBanner';\n\nexport default NotificationBanner;\n","/**\n * PlaceholderPattern — diagonal-stripe SVG fill suitable as a skeleton or\n * empty-region indicator. Uses a unique pattern id per instance so multiple\n * copies on the same page don't collide.\n */\nimport { useId } from 'react';\n\nimport { cn } from '@/lib/utils';\nexport interface PlaceholderPatternProps {\n\tclassName?: string;\n}\n\nexport function PlaceholderPattern({ className }: PlaceholderPatternProps) {\n\tconst patternId = useId();\n\n\treturn (\n\t\t<svg\n\t\t\tclassName={cn('placeholder-pattern--component', className)}\n\t\t\tfill=\"none\"\n\t\t\tstroke=\"currentColor\"\n\t\t\taria-hidden=\"true\"\n\t\t>\n\t\t\t<defs>\n\t\t\t\t<pattern\n\t\t\t\t\tid={patternId}\n\t\t\t\t\tx=\"0\"\n\t\t\t\t\ty=\"0\"\n\t\t\t\t\twidth=\"10\"\n\t\t\t\t\theight=\"10\"\n\t\t\t\t\tpatternUnits=\"userSpaceOnUse\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M-3 13 15-5M-5 5l18-18M-1 21 17 3\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstrokeWidth=\"0.75\"\n\t\t\t\t\t\tstrokeLinecap=\"square\"\n\t\t\t\t\t\tvectorEffect=\"non-scaling-stroke\"\n\t\t\t\t\t/>\n\t\t\t\t</pattern>\n\t\t\t</defs>\n\t\t\t<rect\n\t\t\t\tstroke=\"none\"\n\t\t\t\tfill={`url(#${patternId})`}\n\t\t\t\twidth=\"100%\"\n\t\t\t\theight=\"100%\"\n\t\t\t/>\n\t\t</svg>\n\t);\n}\n\nPlaceholderPattern.displayName = 'PlaceholderPattern';\n\n","/**\n * ShowIf — conditional render gate. Returns `children` when `when` is truthy,\n * otherwise the optional `fallback`. Useful for inline presentation logic\n * where a ternary would be noisier than a self-explanatory tag.\n */\nimport type { ReactNode } from 'react';\n\nexport type ShowIfProps = { when: boolean; children: ReactNode; fallback?: ReactNode };\n\nexport function ShowIf({ when, children, fallback = null }: ShowIfProps) {\n\tif (when) return children;\n\tif (fallback) return fallback;\n\treturn null;\n}\n\nShowIf.displayName = 'ShowIf';\n\nexport default ShowIf;\n\n","/**\n * ThrottleAlert — destructive alert for rate-limit / throttling errors.\n *\n * Single header icon, primary message, and a tight inline meta row showing\n * `attempts` and `remaining`. Use as a banner above a form when a request\n * has been blocked and the user must wait. Strings overridable for i18n.\n */\nimport { ShieldAlert, Clock, RotateCcw } from 'lucide-react';\n\nimport { Text } from '@/components/typography';\nimport { useStrings, type StringsProp } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nexport interface ThrottleAlertStrings {\n\tmaxAttempts: string;\n\ttryAgainIn: string;\n}\n\nexport const defaultThrottleAlertStrings: ThrottleAlertStrings = {\n\tmaxAttempts: 'Max attempts',\n\ttryAgainIn: 'Try again in',\n};\n\nexport interface ThrottleAlertProps {\n\tmessage: string;\n\tattempts: number;\n\tremaining: string;\n\tclassName?: string;\n\tstrings?: StringsProp<ThrottleAlertStrings>;\n}\n\nexport function ThrottleAlert({\n\tmessage,\n\tattempts,\n\tremaining,\n\tclassName,\n\tstrings: stringsProp,\n}: ThrottleAlertProps) {\n\tconst strings = useStrings(defaultThrottleAlertStrings, stringsProp);\n\n\treturn (\n\t\t<div\n\t\t\trole=\"alert\"\n\t\t\tclassName={cn('throttle-alert--component', \n\t\t\t\t'flex items-start gap-3 rounded-lg border border-destructive/30 bg-destructive/5 px-4 py-3',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<span\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\tclassName=\"mt-0.5 inline-flex size-8 shrink-0 items-center justify-center rounded-full bg-destructive/15 text-destructive\"\n\t\t\t>\n\t\t\t\t<ShieldAlert className=\"size-4\" />\n\t\t\t</span>\n\t\t\t<div className=\"min-w-0 flex-1 space-y-1.5\">\n\t\t\t\t<Text weight=\"medium\" className=\"text-destructive leading-snug\">\n\t\t\t\t\t{message}\n\t\t\t\t</Text>\n\t\t\t\t<div className=\"flex flex-wrap items-center gap-x-4 gap-y-1 text-xs text-destructive/80\">\n\t\t\t\t\t<span className=\"inline-flex items-center gap-1.5\">\n\t\t\t\t\t\t<RotateCcw className=\"size-3\" aria-hidden=\"true\" />\n\t\t\t\t\t\t<span>{strings.maxAttempts}</span>\n\t\t\t\t\t\t<span className=\"font-semibold tabular-nums text-destructive\">{attempts}</span>\n\t\t\t\t\t</span>\n\t\t\t\t\t<span className=\"inline-flex items-center gap-1.5\">\n\t\t\t\t\t\t<Clock className=\"size-3\" aria-hidden=\"true\" />\n\t\t\t\t\t\t<span>{strings.tryAgainIn}</span>\n\t\t\t\t\t\t<span className=\"font-semibold tabular-nums text-destructive\">{remaining}</span>\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nThrottleAlert.displayName = 'ThrottleAlert';\n","/**\n * VisuallyHidden — hides content from sighted users while keeping it readable\n * by assistive tech (screen readers, voice). Use to label icon-only buttons,\n * give context to status changes, or expose extra structure for AT users.\n */\nimport * as React from 'react';\n\nimport { cn } from '@/lib/utils';\n\nexport interface VisuallyHiddenProps {\n\tchildren: React.ReactNode;\n\tclassName?: string;\n}\n\nexport function VisuallyHidden({ children, className }: VisuallyHiddenProps) {\n\treturn (\n\t\t<span\n\t\t\tclassName={cn('visually-hidden--component', \n\t\t\t\t'absolute w-px h-px p-0 -m-px overflow-hidden whitespace-nowrap border-0',\n\t\t\t\t'[clip:rect(0,0,0,0)]',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{children}\n\t\t</span>\n\t);\n}\n\nVisuallyHidden.displayName = 'VisuallyHidden';\n","/**\n * StackedAvatars — overlapping avatar group with optional `+N` overflow chip,\n * configurable size, and an optional semantic `tone` for fallbacks (initials)\n * when the consumer hasn't passed `imageUrl`.\n *\n * Wraps the shadcn AvatarGroup primitive with library-default sizes and a\n * deterministic tone picker so fallbacks stay stable without raw hue utilities.\n */\nimport * as React from 'react';\nimport {\n\tAvatar,\n\tAvatarFallback,\n\tAvatarGroup,\n\tAvatarGroupCount,\n\tAvatarImage,\n} from './avatar';\nimport { Text } from '@/components/typography';\nimport type { ComponentScale } from '@/lib/ui-provider';\nimport { cn } from '@/lib/utils';\n\nexport type StackedAvatarsSize = ComponentScale;\nexport type StackedAvatarTone =\n\t| 'muted'\n\t| 'primary'\n\t| 'secondary'\n\t| 'info'\n\t| 'success'\n\t| 'warning'\n\t| 'destructive';\n\nexport interface StackedAvatarUser {\n\tid?: string;\n\tname: string;\n\timageUrl?: string;\n\t/** Optional semantic tone override for this user's fallback. Numeric values map to the token set. */\n\ttone?: StackedAvatarTone | number;\n}\n\nexport interface StackedAvatarsProps {\n\tusers: StackedAvatarUser[];\n\tmax?: number;\n\tsize?: StackedAvatarsSize;\n\tclassName?: string;\n\t/** Whether to render a `+N` count when `users.length > max`. Default `true`. */\n\tshowOverflow?: boolean;\n\t/** Provide custom overflow text (e.g. \"+12 more\"). Default `+N`. */\n\toverflowFormatter?: (overflow: number) => React.ReactNode;\n\t/** Extra class names applied to each avatar root. */\n\tavatarClassName?: string;\n}\n\nconst FALLBACK_TONES: StackedAvatarTone[] = [\n\t'muted',\n\t'primary',\n\t'secondary',\n\t'info',\n\t'success',\n];\n\nconst FALLBACK_TONE_CLASSNAMES: Record<StackedAvatarTone, string> = {\n\tmuted: 'bg-muted text-muted-foreground',\n\tprimary: 'bg-primary/10 text-primary',\n\tsecondary: 'bg-secondary text-secondary-foreground',\n\tinfo: 'bg-info/10 text-info',\n\tsuccess: 'bg-success/10 text-success',\n\twarning: 'bg-warning/15 text-warning',\n\tdestructive: 'bg-destructive/10 text-destructive',\n};\n\nfunction getInitials(name: string, compact = false): string {\n\tconst parts = name.trim().split(/\\s+/);\n\tif (parts.length === 0) return '?';\n\tif (compact) return parts[0].slice(0, 1).toUpperCase();\n\tif (parts.length === 1) return parts[0].slice(0, 2).toUpperCase();\n\treturn (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n}\n\nfunction pickFallbackTone(seed: string | number, override?: StackedAvatarTone | number) {\n\tif (typeof override === 'string') {\n\t\treturn override;\n\t}\n\tif (typeof override === 'number') {\n\t\treturn FALLBACK_TONES[Math.abs(override) % FALLBACK_TONES.length];\n\t}\n\tconst key = typeof seed === 'number' ? seed : Array.from(seed).reduce((s, c) => s + c.charCodeAt(0), 0);\n\treturn FALLBACK_TONES[key % FALLBACK_TONES.length];\n}\n\nfunction normalizeStackedAvatarsSize(size: StackedAvatarsSize | string | undefined): StackedAvatarsSize {\n\tif (size === 'small' || size === 'default') return size;\n\tif (size === 'xs' || size === 'sm') return 'small';\n\treturn 'default';\n}\n\nexport function StackedAvatars({\n\tusers,\n\tmax = 4,\n\tsize = 'default',\n\tclassName,\n\tshowOverflow = true,\n\toverflowFormatter,\n\tavatarClassName,\n}: StackedAvatarsProps) {\n\tconst visible = users.slice(0, max);\n\tconst overflow = Math.max(0, users.length - max);\n\tconst resolvedSize = normalizeStackedAvatarsSize(size);\n\n\treturn (\n\t\t<AvatarGroup className={cn('stacked-avatars--component', className)}>\n\t\t\t{visible.map((user, index) => {\n\t\t\t\tconst initials = getInitials(user.name, resolvedSize === 'small');\n\t\t\t\tconst fallbackTone = pickFallbackTone(user.id ?? user.name ?? index, user.tone);\n\t\t\t\treturn (\n\t\t\t\t\t<Avatar\n\t\t\t\t\t\tkey={user.id ?? `${user.name}-${index}`}\n\t\t\t\t\t\tsize={resolvedSize}\n\t\t\t\t\t\tclassName={cn('ring-background', avatarClassName)}\n\t\t\t\t\t\ttitle={user.name}\n\t\t\t\t\t>\n\t\t\t\t\t\t{user.imageUrl ? (\n\t\t\t\t\t\t\t<AvatarImage src={user.imageUrl} alt={user.name} />\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t<AvatarFallback\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'font-semibold',\n\t\t\t\t\t\t\t\tFALLBACK_TONE_CLASSNAMES[fallbackTone],\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{initials}\n\t\t\t\t\t\t</AvatarFallback>\n\t\t\t\t\t</Avatar>\n\t\t\t\t);\n\t\t\t})}\n\t\t\t{!!showOverflow && overflow > 0 && (\n\t\t\t\t<AvatarGroupCount>\n\t\t\t\t\t<Text size=\"xs\" weight=\"semibold\">\n\t\t\t\t\t\t{overflowFormatter ? overflowFormatter(overflow) : `+${overflow}`}\n\t\t\t\t\t</Text>\n\t\t\t\t</AvatarGroupCount>\n\t\t\t)}\n\t\t</AvatarGroup>\n\t);\n}\n\nStackedAvatars.displayName = 'StackedAvatars';\n","/**\n * DateBlock — compact \"boxed\" date display showing weekday + day-of-month\n * + optional month and time. Built on `date-fns` so locales propagate\n * naturally (`enGB`, `bg`, …).\n *\n * Two layouts:\n * - `stacked` (default) — three lines: weekday / day / month\n * - `inline` — single row: weekday + day + month + optional time\n *\n * Time can render `inline` (right of the date), `below` (under the date\n * block), or `hidden`. Compact rooms (booking lists) typically use\n * `stacked` with `time=\"below\"`.\n */\nimport { format, type Locale } from 'date-fns';\n\nimport { Text } from '@/components/typography';\nimport { useStrings, type StringsProp } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nexport type DateBlockLayout = 'stacked' | 'inline';\nexport type DateBlockTimePlacement = 'inline' | 'below' | 'hidden';\nexport type DateBlockTone = 'default' | 'muted' | 'primary' | 'inverse' | 'success' | 'warning' | 'destructive' | 'info';\n\nexport interface DateBlockStrings {\n\t/** Used by `inline` layout when month is hidden (e.g. \"Apr 30 · 14:00\"). */\n\tseparator: string;\n}\n\nexport const defaultDateBlockStrings: DateBlockStrings = {\n\tseparator: '·',\n};\n\nexport interface DateBlockProps {\n\t/** Date instance, ISO string, or unix timestamp. */\n\tdate: Date | string | number;\n\t/** ISO time string (`HH:mm`) or already-formatted time string. */\n\ttime?: string | null;\n\t/** date-fns `Locale` (e.g. `enGB`, `bg`). Defaults to user-agent. */\n\tlocale?: Locale;\n\t/** Layout. Default `stacked`. */\n\tlayout?: DateBlockLayout;\n\t/** Where to place the time. Default `inline` for `inline` layout, `below` for `stacked`. */\n\ttimePlacement?: DateBlockTimePlacement;\n\t/** Tone of the boxed block. Default `default` (card surface). */\n\ttone?: DateBlockTone;\n\t/** Whether to render a card-like box around the block. Default `true` for stacked, `false` for inline. */\n\tboxed?: boolean;\n\t/** Show month label. Default `true`. */\n\tshowMonth?: boolean;\n\t/** Custom format for the day-of-month token (date-fns format). Default `'d'`. */\n\tdayFormat?: string;\n\t/** Custom format for the weekday token. Default `'EEE'`. */\n\tweekdayFormat?: string;\n\t/** Custom format for the month token. Default `'MMM'`. */\n\tmonthFormat?: string;\n\tclassName?: string;\n\tstrings?: StringsProp<DateBlockStrings>;\n}\n\nconst toneClassMap: Record<DateBlockTone, { bg: string; text: string; border: string; accent: string; subtle: string }> = {\n\tdefault: { bg: 'bg-card', text: 'text-foreground', border: 'border-border', accent: 'text-foreground', subtle: 'text-muted-foreground' },\n\tinverse: { bg: 'bg-primary', text: 'text-background', border: 'border-primary', accent: 'text-background/80', subtle: 'text-background/65' },\n\tmuted: { bg: 'bg-muted/50', text: 'text-foreground', border: 'border-border', accent: 'text-foreground', subtle: 'text-muted-foreground' },\n\tprimary: { bg: 'bg-primary/10', text: 'text-foreground', border: 'border-primary/30', accent: 'text-primary', subtle: 'text-muted-foreground' },\n\tsuccess: { bg: 'bg-success/10', text: 'text-foreground', border: 'border-success/30', accent: 'text-success', subtle: 'text-muted-foreground' },\n\twarning: { bg: 'bg-warning/15', text: 'text-foreground', border: 'border-warning/40', accent: 'text-warning-foreground', subtle: 'text-muted-foreground' },\n\tdestructive: { bg: 'bg-destructive/10', text: 'text-foreground', border: 'border-destructive/30', accent: 'text-destructive', subtle: 'text-muted-foreground' },\n\tinfo: { bg: 'bg-info/10', text: 'text-foreground', border: 'border-info/30', accent: 'text-info', subtle: 'text-muted-foreground' },\n};\n\nfunction resolveDate(input: Date | string | number): Date {\n\tif (input instanceof Date) return input;\n\tconst d = typeof input === 'number' ? new Date(input) : new Date(input);\n\treturn d;\n}\n\nexport function DateBlock({\n\tdate,\n\ttime,\n\tlocale,\n\tlayout = 'stacked',\n\ttimePlacement,\n\ttone = 'default',\n\tboxed,\n\tshowMonth = true,\n\tdayFormat = 'd',\n\tweekdayFormat = 'EEE',\n\tmonthFormat = 'MMM',\n\tclassName,\n\tstrings: stringsProp,\n}: DateBlockProps) {\n\tconst resolved = resolveDate(date);\n\tconst strings = useStrings(defaultDateBlockStrings, stringsProp);\n\tconst tones = toneClassMap[tone];\n\tconst dateValid = !Number.isNaN(resolved.getTime());\n\n\tconst weekday = dateValid ? format(resolved, weekdayFormat, locale ? { locale } : undefined) : '';\n\tconst day = dateValid ? format(resolved, dayFormat, locale ? { locale } : undefined) : '';\n\tconst month = dateValid ? format(resolved, monthFormat, locale ? { locale } : undefined) : '';\n\n\tconst resolvedTimePlacement: DateBlockTimePlacement =\n\t\ttimePlacement ?? (layout === 'inline' ? 'inline' : 'below');\n\tconst useBox = boxed ?? layout === 'stacked';\n\n\tif (layout === 'inline') {\n\t\treturn (\n\t\t\t<span\n\t\t\t\tclassName={cn('date-block--component', \n\t\t\t\t\t'inline-flex items-center gap-1.5 tabular-nums',\n\t\t\t\t\tuseBox && cn('rounded-md border px-2 py-1', tones.bg, tones.border),\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<Text size=\"xs\" weight=\"semibold\" className={cn(tones.accent, 'uppercase tracking-wide')}>\n\t\t\t\t\t{weekday}\n\t\t\t\t</Text>\n\t\t\t\t<Text weight=\"semibold\">{day}</Text>\n\t\t\t\t{!!showMonth && (\n\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"uppercase tracking-wide\">\n\t\t\t\t\t\t{month}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t\t{!!time && resolvedTimePlacement === 'inline' && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<Text size=\"xs\" type=\"discrete\" aria-hidden>\n\t\t\t\t\t\t\t{strings.separator}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\">{time}</Text>\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</span>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className={cn('inline-flex flex-col items-center gap-0.5', className)}>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'flex flex-col items-center justify-center gap-1 tabular-nums',\n\t\t\t\t\tuseBox && cn('w-14 min-h-14 rounded-md border px-1.5 py-1.5', tones.bg, tones.border),\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<Text\n\t\t\t\t\tsize=\"xxs\"\n\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\tstyle={{ lineHeight: 1 }}\n\t\t\t\t\tclassName={cn(tones.accent, 'uppercase tracking-wider')}\n\t\t\t\t>\n\t\t\t\t\t{weekday}\n\t\t\t\t</Text>\n\t\t\t\t<Text size=\"lg\" weight=\"bold\" style={{ lineHeight: 1 }} className={tones.text}>\n\t\t\t\t\t{day}\n\t\t\t\t</Text>\n\t\t\t\t{!!showMonth && (\n\t\t\t\t\t<Text\n\t\t\t\t\t\tsize=\"xxs\"\n\t\t\t\t\t\tstyle={{ lineHeight: 1 }}\n\t\t\t\t\t\tclassName={cn(tones.subtle, 'uppercase tracking-wider')}\n\t\t\t\t\t>\n\t\t\t\t\t\t{month}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t{!!time && resolvedTimePlacement === 'below' && (\n\t\t\t\t<Text size=\"xxs\" type=\"secondary\" className=\"tabular-nums\">\n\t\t\t\t\t{time}\n\t\t\t\t</Text>\n\t\t\t)}\n\t\t\t{!!time && resolvedTimePlacement === 'inline' && (\n\t\t\t\t<Text size=\"xxs\" type=\"secondary\" className=\"tabular-nums\">\n\t\t\t\t\t{time}\n\t\t\t\t</Text>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nDateBlock.displayName = 'DateBlock';\n","import { Collapsible as CollapsiblePrimitive } from \"@base-ui/react/collapsible\"\nimport * as React from \"react\"\n\nimport { Slot } from \"@/components/ui/slot\"\n\nfunction Collapsible({ ...props }: CollapsiblePrimitive.Root.Props) {\n return <CollapsiblePrimitive.Root data-slot=\"collapsible\" {...props} />\n}\n\nfunction CollapsibleTrigger({\n asChild = false,\n nativeButton,\n render,\n children,\n ...props\n}: CollapsiblePrimitive.Trigger.Props & { asChild?: boolean; nativeButton?: boolean }) {\n const slotRender = asChild ? <Slot /> : undefined\n const safeRender: CollapsiblePrimitive.Trigger.Props[\"render\"] = typeof render === \"function\"\n ? ((renderProps, state) => {\n const { nativeButton: _nativeButton, ...rest } = renderProps as Record<string, unknown>\n void _nativeButton\n return render(rest as typeof renderProps, state)\n })\n : render\n let inferredNativeButton = true\n if (asChild && React.isValidElement(children)) {\n if (typeof children.type === \"string\") {\n inferredNativeButton = children.type === \"button\"\n } else {\n const childProps = (children.props ?? {}) as Record<string, unknown>\n inferredNativeButton = !(\"href\" in childProps)\n }\n }\n const resolvedNativeButton = nativeButton ?? (asChild ? inferredNativeButton : true)\n return (\n <CollapsiblePrimitive.Trigger\n data-slot=\"collapsible-trigger\"\n render={slotRender ?? safeRender}\n nativeButton={resolvedNativeButton}\n {...props}\n >\n {children}\n </CollapsiblePrimitive.Trigger>\n )\n}\n\nfunction CollapsibleContent({ ...props }: CollapsiblePrimitive.Panel.Props) {\n return (\n <CollapsiblePrimitive.Panel data-slot=\"collapsible-content\" {...props} />\n )\n}\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent }\n","import { AlertTriangle, Info } from 'lucide-react';\nimport { useCallback, useMemo, type ReactNode } from 'react';\n\nimport { MoneyInput as BaseMoneyInput, type MoneyInputProps as BaseMoneyInputProps } from '@/components/base/forms/fields/money-input';\nimport { FormField } from '@/components/base/forms/form-field';\nimport { Text } from '@/components/typography';\nimport { Alert, AlertDescription } from '@/components/base/display/alert';\nimport { cn } from '@/lib/utils';\nimport type { CurrencyCode } from '@/lib/ui-provider';\n\n/** Optional money payload for migration hints. Consumers map their domain\n * shape into this — `formatted` is the consumer's pre-rendered display\n * string for the alternate currency leg. */\nexport interface MoneyData {\n amount?: number | string | null;\n currency?: string | null;\n /** Optional original/record currency that triggered a migration warning. */\n recordCurrency?: string | null;\n /** Optional secondary leg the consumer formatted for display. */\n pair?: { formatted?: string | null } | null;\n}\n\nexport interface MoneyInputData {\n amount: number;\n currency: CurrencyCode;\n}\n\nexport interface MoneyInputProps extends Omit<BaseMoneyInputProps, 'invalid'> {\n /** Optional money payload for migration hints */\n money?: MoneyData | null;\n /** Display label */\n label?: string;\n /** Hint next to label */\n hint?: string;\n /** Helper text below input */\n helperText?: string;\n /** Error message */\n error?: string;\n /** Required indicator */\n required?: boolean;\n /** Invalid state override */\n invalid?: boolean;\n /** Optional change handler for combined data */\n onChangeData?: (data: MoneyInputData) => void;\n /** Record currency for migration detection */\n recordCurrency?: CurrencyCode;\n /** Show migration warning block */\n showMigrationWarning?: boolean;\n /** Custom migration warning message */\n migrationWarningMessage?: ReactNode;\n /** Show original currency hint */\n showOriginalHint?: boolean;\n}\n\nconst defaultEmptyFormatted = '—';\n\nconst resolveFormatted = (formatted: unknown): string =>\n typeof formatted === 'string' ? formatted.trim() : '';\n\nexport function MoneyInput({\n money,\n currency = 'EUR',\n onChangeData,\n recordCurrency: recordCurrencyProp,\n label,\n hint,\n helperText,\n error,\n required,\n invalid,\n showMigrationWarning = true,\n migrationWarningMessage,\n showOriginalHint = true,\n className,\n onChange,\n onCurrencyChange,\n ...props\n}: MoneyInputProps) {\n const recordCurrency = recordCurrencyProp ?? money?.recordCurrency ?? undefined;\n\n const willMigrate = useMemo(\n () => recordCurrency !== undefined && recordCurrency !== currency,\n [recordCurrency, currency],\n );\n\n const otherFormatted = useMemo(() => {\n if (!showOriginalHint) return '';\n return resolveFormatted(money?.pair?.formatted);\n }, [showOriginalHint, money?.pair?.formatted]);\n\n const showOriginalHintBlock = otherFormatted.length > 0 && !error;\n const showMigrationBlock = willMigrate && showMigrationWarning;\n\n const handleAmountChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e);\n const parsed = Number.parseFloat(e.target.value);\n const safeAmount = Number.isFinite(parsed) ? parsed : 0;\n onChangeData?.({ amount: safeAmount, currency });\n },\n [onChange, onChangeData, currency],\n );\n\n const handleCurrencyChange = useCallback(\n (nextCurrency: CurrencyCode) => {\n onCurrencyChange?.(nextCurrency);\n const parsedValue = Number.parseFloat(String(props.value ?? ''));\n const safeAmount = Number.isFinite(parsedValue) ? parsedValue : 0;\n onChangeData?.({ amount: safeAmount, currency: nextCurrency });\n },\n [onCurrencyChange, onChangeData, props.value],\n );\n\n const isInvalid = invalid ?? Boolean(error);\n\n const inputNode = (\n <BaseMoneyInput\n {...props}\n currency={currency}\n onChange={handleAmountChange}\n onCurrencyChange={handleCurrencyChange}\n invalid={isInvalid}\n />\n );\n\n const hasChrome = Boolean(label || hint || helperText || error || required);\n const renderedInput = hasChrome ? (\n <FormField\n label={label}\n hint={hint}\n helperText={helperText}\n error={error}\n required={required}\n >\n {inputNode}\n </FormField>\n ) : inputNode;\n\n return (\n <div className={cn('money-input--component', 'space-y-2', className)}>\n {renderedInput}\n\n {!!showOriginalHintBlock && (\n <div className=\"flex items-center gap-1.5 text-muted-foreground\">\n <Info className=\"h-3.5 w-3.5 shrink-0\" />\n <Text size=\"xs\" type=\"secondary\">\n {otherFormatted || defaultEmptyFormatted}\n </Text>\n </div>\n )}\n\n {!!showMigrationBlock && (\n <Alert className=\"border-warning/50 bg-warning/5 py-2\">\n <AlertTriangle className=\"h-4 w-4 text-warning\" />\n <AlertDescription className=\"text-warning-foreground text-xs\">\n {migrationWarningMessage ??\n `Currency will be converted from ${recordCurrency ?? ''} to ${currency}.`}\n </AlertDescription>\n </Alert>\n )}\n </div>\n );\n}\n\nMoneyInput.displayName = 'MoneyInput';\n","/**\n * BooleanIndicator — labelled yes/no chip showing the truth of a value with an\n * optional check/cross icon. Use for compact metadata grids where each row\n * answers a single boolean question. Strings overridable for i18n.\n */\nimport { CheckCircle2, XCircle } from 'lucide-react';\nimport React from 'react';\nimport { Badge, type ComposedBadgeVariant } from '@/components/base/badge';\nimport { Text } from '@/components/typography';\nimport { useStrings, type StringsProp } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nexport interface BooleanIndicatorStrings {\n\ttrue: string;\n\tfalse: string;\n}\n\nexport const defaultBooleanIndicatorStrings: BooleanIndicatorStrings = {\n\ttrue: 'Yes',\n\tfalse: 'No',\n};\n\nexport type BooleanIndicatorProps = {\n\tlabel: React.ReactNode;\n\tvalue?: boolean | null;\n\tshowIcon?: boolean;\n\ttrueVariant?: ComposedBadgeVariant;\n\tfalseVariant?: ComposedBadgeVariant;\n\tclassName?: string;\n\tbadgeClassName?: string;\n\tstrings?: StringsProp<BooleanIndicatorStrings>;\n\t/** @deprecated Use `strings.true` instead. */\n\ttrueLabel?: React.ReactNode;\n\t/** @deprecated Use `strings.false` instead. */\n\tfalseLabel?: React.ReactNode;\n};\n\nexport function BooleanIndicator({\n\tlabel,\n\tvalue = false,\n\ttrueLabel,\n\tfalseLabel,\n\tshowIcon = true,\n\ttrueVariant = 'success',\n\tfalseVariant = 'secondary',\n\tclassName,\n\tbadgeClassName,\n\tstrings: stringsProp,\n}: BooleanIndicatorProps) {\n\tconst strings = useStrings(defaultBooleanIndicatorStrings, stringsProp);\n\tconst isTrue = Boolean(value);\n\tconst Icon = isTrue ? CheckCircle2 : XCircle;\n\tconst badgeVariant = isTrue ? trueVariant : falseVariant;\n\tconst fallback = isTrue ? trueLabel : falseLabel;\n\tconst content = fallback ?? (isTrue ? strings.true : strings.false);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn('boolean-indicator--component', \n\t\t\t\t'flex items-center justify-between gap-space-md rounded-radius border border-border/60 bg-muted/30 px-row-x py-row-y',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<Text size=\"inherit\" type=\"secondary\" className=\"text-xs uppercase tracking-wide\">\n\t\t\t\t{label}\n\t\t\t</Text>\n\t\t\t<Badge\n\t\t\t\tvariant={badgeVariant}\n\t\t\t\tclassName={cn('whitespace-nowrap', badgeClassName)}\n\t\t\t>\n\t\t\t\t{!!showIcon && <Icon className=\"size-icon\" />}\n\t\t\t\t{content}\n\t\t\t</Badge>\n\t\t</div>\n\t);\n}\n\nBooleanIndicator.displayName = 'BooleanIndicator';\n\nexport default BooleanIndicator;\n","import { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Empty({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty\"\n className={cn(\n \"gap-4 rounded-lg border-dashed p-12 flex w-full min-w-0 flex-1 flex-col items-center justify-center text-center text-balance\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction EmptyHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty-header\"\n className={cn(\n \"gap-2 flex max-w-sm flex-col items-center\",\n className\n )}\n {...props}\n />\n )\n}\n\nconst emptyMediaVariants = cva(\n \"mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n icon: \"bg-muted text-foreground flex size-10 shrink-0 items-center justify-center rounded-lg [&_svg:not([class*='size-'])]:size-6\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction EmptyMedia({\n className,\n variant = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof emptyMediaVariants>) {\n return (\n <div\n data-slot=\"empty-icon\"\n data-variant={variant}\n className={cn(emptyMediaVariants({ variant, className }))}\n {...props}\n />\n )\n}\n\nfunction EmptyTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty-title\"\n className={cn(\"text-lg font-medium tracking-tight\", className)}\n {...props}\n />\n )\n}\n\nfunction EmptyDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <div\n data-slot=\"empty-description\"\n className={cn(\n \"text-sm/relaxed text-muted-foreground [&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction EmptyContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty-content\"\n className={cn(\n \"gap-4 text-sm flex w-full max-w-sm min-w-0 flex-col items-center text-balance\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Empty,\n EmptyHeader,\n EmptyTitle,\n EmptyDescription,\n EmptyContent,\n EmptyMedia,\n}\n","import { Progress as ProgressPrimitive } from \"@base-ui/react/progress\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Progress({\n className,\n children,\n value,\n ...props\n}: ProgressPrimitive.Root.Props) {\n return (\n <ProgressPrimitive.Root\n value={value}\n data-slot=\"progress\"\n className={cn(\"flex flex-wrap gap-3\", className)}\n {...props}\n >\n {children}\n <ProgressTrack>\n <ProgressIndicator />\n </ProgressTrack>\n </ProgressPrimitive.Root>\n )\n}\n\nfunction ProgressTrack({ className, ...props }: ProgressPrimitive.Track.Props) {\n return (\n <ProgressPrimitive.Track\n className={cn(\n \"bg-muted h-1.5 rounded-full relative flex w-full items-center overflow-x-hidden\",\n className\n )}\n data-slot=\"progress-track\"\n {...props}\n />\n )\n}\n\nfunction ProgressIndicator({\n className,\n ...props\n}: ProgressPrimitive.Indicator.Props) {\n return (\n <ProgressPrimitive.Indicator\n data-slot=\"progress-indicator\"\n className={cn(\"bg-primary h-full transition-all\", className)}\n {...props}\n />\n )\n}\n\nfunction ProgressLabel({ className, ...props }: ProgressPrimitive.Label.Props) {\n return (\n <ProgressPrimitive.Label\n className={cn(\"text-sm font-medium\", className)}\n data-slot=\"progress-label\"\n {...props}\n />\n )\n}\n\nfunction ProgressValue({ className, ...props }: ProgressPrimitive.Value.Props) {\n return (\n <ProgressPrimitive.Value\n className={cn(\"text-muted-foreground ml-auto text-sm tabular-nums\", className)}\n data-slot=\"progress-value\"\n {...props}\n />\n )\n}\n\nexport {\n Progress,\n ProgressTrack,\n ProgressIndicator,\n ProgressLabel,\n ProgressValue,\n}\n","import { formatHex, oklch } from 'culori';\nimport QR from 'qrcode';\nimport type { HTMLAttributes } from 'react';\nimport { useEffect, useState } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type QRCodeProps = HTMLAttributes<HTMLDivElement> & {\n\tdata: string;\n\tforeground?: string;\n\tbackground?: string;\n\trobustness?: 'L' | 'M' | 'Q' | 'H';\n};\n\nconst oklchRegex = /oklch\\\\(([.\\\\d-]+)\\\\s+([.\\\\d]+)\\\\s+([.\\\\d]+)\\\\)/;\n\nfunction getOklch(color: string, fallback: [number, number, number]) {\n\tconst oklchMatch = color.match(oklchRegex);\n\n\tif (!oklchMatch) {\n\t\treturn { l: fallback[0], c: fallback[1], h: fallback[2] };\n\t}\n\n\treturn {\n\t\tl: Number.parseFloat(oklchMatch[1]),\n\t\tc: Number.parseFloat(oklchMatch[2]),\n\t\th: Number.parseFloat(oklchMatch[3]),\n\t};\n}\n\nexport function QRCode({\n\tdata,\n\tforeground,\n\tbackground,\n\trobustness = 'M',\n\tclassName,\n\t...props\n}: QRCodeProps) {\n\tconst [svg, setSvg] = useState<string | null>(null);\n\n\tuseEffect(() => {\n\t\tconst generateQR = async () => {\n\t\t\ttry {\n\t\t\t\tconst text = String(data ?? '').trim();\n\t\t\t\tif (!text) {\n\t\t\t\t\tsetSvg(null);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst styles = getComputedStyle(document.documentElement);\n\t\t\t\tconst foregroundColor =\n\t\t\t\t\tforeground ?? styles.getPropertyValue('--foreground');\n\t\t\t\tconst backgroundColor =\n\t\t\t\t\tbackground ?? styles.getPropertyValue('--background');\n\n\t\t\t\tconst foregroundOklch = getOklch(foregroundColor, [\n\t\t\t\t\t0.21, 0.006, 285.885,\n\t\t\t\t]);\n\t\t\t\tconst backgroundOklch = getOklch(backgroundColor, [0.985, 0, 0]);\n\n\t\t\t\tconst newSvg = await QR.toString(text, {\n\t\t\t\t\ttype: 'svg',\n\t\t\t\t\tcolor: {\n\t\t\t\t\t\tdark: formatHex(\n\t\t\t\t\t\t\toklch({ mode: 'oklch', ...foregroundOklch }),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tlight: formatHex(\n\t\t\t\t\t\t\toklch({ mode: 'oklch', ...backgroundOklch }),\n\t\t\t\t\t\t),\n\t\t\t\t\t},\n\t\t\t\t\twidth: 200,\n\t\t\t\t\terrorCorrectionLevel: robustness,\n\t\t\t\t\tmargin: 0,\n\t\t\t\t});\n\n\t\t\t\tsetSvg(newSvg);\n\t\t\t} catch {\n\t\t\t\t// QR generation failure (invalid data, oversized payload) — render falls\n\t\t\t\t// back to empty SVG; consumer can surface their own error from the parent.\n\t\t\t\tsetSvg('');\n\t\t\t}\n\t\t};\n\n\t\tvoid generateQR();\n\t}, [data, foreground, background, robustness]);\n\n\tif (!svg) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn('qr-code--component', 'size-full', '[&_svg]:size-full', className)}\n\t\t\tdangerouslySetInnerHTML={{ __html: svg }}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport default QRCode;\n\nQRCode.displayName = 'QRCode';\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- const e=require("./chunk-CMqjfN_6.cjs"),t=require("../lib/strings.cjs"),n=require("./ui-provider-DZWtUXf2.cjs"),r=require("../lib/utils.cjs"),i=require("./button-Bd5bEIiB.cjs"),a=require("./slot-D-Rwlrz2.cjs"),o=require("./typography-CO9uwZhF.cjs"),s=require("./badge-BeSKxX1u.cjs"),c=require("./alert-V0V36Sny.cjs"),l=require("./input-CB6hxh-5.cjs"),u=require("./form-sizing-Co53Drri.cjs"),d=require("./select-CG5Yq-6A.cjs"),f=require("./avatar-BnKM_o2d.cjs");let p=require("react");p=e.t(p,1);let m=require("date-fns"),h=require("react/jsx-runtime"),g=require("lucide-react"),_=require("class-variance-authority"),v=require("react-hook-form"),y=require("@base-ui/react/collapsible"),b=require("@base-ui/react/progress"),x=require("culori"),S=require("qrcode");S=e.t(S,1);var C={decrement:`Decrement`,increment:`Increment`},w=(e,t,n)=>{if(!e)return``;let r=e;if(r=r.replace(/,/g,`.`),r=n?r.replace(/[^\d.-]/g,``):r.replace(/[^\d.]/g,``),n&&r.includes(`-`)){let e=r.startsWith(`-`);r=r.replace(/-/g,``),e&&(r=`-`+r)}let i=r.split(`.`);return i.length>2&&(r=i[0]+`.`+i.slice(1).join(``)),i.length===2&&i[1].length>t&&(r=i[0]+`.`+i[1].substring(0,t)),r},T=(e,t,n)=>{if(!e||e===`-`)return!0;let r=parseFloat(e);return Number.isNaN(r)?!0:!(t!==void 0&&r<t||n!==void 0&&r>n)};function E(e,t,n){let r=10**t,i=e*r;switch(n){case`floor`:return Math.floor(i)/r;case`ceil`:return Math.ceil(i)/r;case`half-even`:{let e=Math.floor(i),t=i-e;return t>.5?(e+1)/r:t<.5?e/r:(e%2==0?e:e+1)/r}default:return Math.round(i)/r}}function D(e,t,n){let r=e;return t!==void 0&&(r=Math.max(t,r)),n!==void 0&&(r=Math.min(n,r)),r}function O(e,t,n,r,i=`round`){let a=r??0,o=(e-a)/n,s=a+((i===`floor`?Math.floor(o):i===`ceil`?Math.ceil(o):Math.round(o))+t)*n;return Number(s.toFixed(12))}function k(e,t,n){let r=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,`value`)?.set;r?r.call(e,t):e.value=t,n&&n({target:e,currentTarget:e,type:`change`,bubbles:!1,cancelable:!1})}var A={small:`w-control-small`,default:`w-control`};function j({decimalPlaces:e=2,min:i,max:a,allowNegative:o=!0,allowEmpty:s=!0,step:c,roundingMode:d=`round`,normalizeOnBlur:f=!0,onChange:m,onBlur:_,placeholder:v,className:y,value:b,defaultValue:x,disabled:S,size:j,strings:M,...N},P){let{defaultControlSize:F}=n.o(),I=u.f(j,F),L=t.useStrings(C,M),R=Math.min(12,Math.max(0,e)),z=p.useRef(null),B=(0,p.useCallback)(e=>{let t=e.target.value;if(!t&&s){m?.(e);return}let n=w(t,R,o);if(T(n,i,a))if(n!==t){let t={...e,target:{...e.target,value:n},currentTarget:{...e.currentTarget,value:n}};m?.(t)}else m?.(e)},[m,R,o,s,i,a]),V=(0,p.useCallback)(e=>{if(_?.(e),!f)return;let t=e.target.value;if(!t&&s)return;let n=Number.parseFloat(t.replace(`,`,`.`));if(!Number.isFinite(n))return;let r=E(D(n,i,a),R,d).toFixed(R);r!==t&&z.current&&k(z.current,r,m)},[_,m,f,s,i,a,R,d]),H=(0,p.useCallback)(e=>{if(S||c===void 0)return;let t=z.current;if(!t)return;let n=t.value,r=Number.parseFloat(n.replace(`,`,`.`));k(t,E(D(O(Number.isFinite(r)?r:i??0,e,c,i,d),i,a),R,d).toFixed(R),m)},[S,c,i,a,d,R,m]),U=typeof c==`number`&&c>0,W=v??(R>0?`0.${`0`.repeat(R)}`:`0`);return U?(0,h.jsxs)(`div`,{className:r.cn(`decimal-input--component`,`flex items-stretch overflow-hidden rounded-radius border border-input bg-transparent`,`focus-within:border-ring focus-within:ring-ring/50 focus-within:ring-[3px]`,N[`aria-invalid`]&&`border-destructive ring-destructive/20`,S&&`opacity-50 cursor-not-allowed`),children:[(0,h.jsx)(`button`,{type:`button`,tabIndex:-1,"aria-label":L.decrement,disabled:S,onClick:()=>H(-1),className:r.cn(`inline-flex shrink-0 items-center justify-center border-r border-input text-muted-foreground transition-colors`,A[I],`hover:bg-muted hover:text-foreground`,`disabled:cursor-not-allowed disabled:opacity-50`),children:(0,h.jsx)(g.Minus,{className:I===`small`?`size-icon-sm`:`size-icon`})}),(0,h.jsx)(l.t,{size:I,ref:e=>{z.current=e,typeof P==`function`?P(e):P&&(P.current=e)},type:`text`,inputMode:R>0?`decimal`:`numeric`,placeholder:W,onChange:B,onBlur:V,value:b,defaultValue:x,disabled:S,className:r.cn(`flex-1 tabular-nums text-center border-0 shadow-none rounded-none focus-visible:ring-0 focus-visible:border-0`,y),...N}),(0,h.jsx)(`button`,{type:`button`,tabIndex:-1,"aria-label":L.increment,disabled:S,onClick:()=>H(1),className:r.cn(`inline-flex shrink-0 items-center justify-center border-l border-input text-muted-foreground transition-colors`,A[I],`hover:bg-muted hover:text-foreground`,`disabled:cursor-not-allowed disabled:opacity-50`),children:(0,h.jsx)(g.Plus,{className:I===`small`?`size-icon-sm`:`size-icon`})})]}):(0,h.jsx)(l.t,{size:I,ref:e=>{z.current=e,typeof P==`function`?P(e):P&&(P.current=e)},type:`text`,inputMode:R>0?`decimal`:`numeric`,placeholder:W,onChange:B,onBlur:V,value:b,defaultValue:x,disabled:S,className:r.cn(`tabular-nums text-end`,y),...N})}var M=p.forwardRef(j);M.displayName=`DecimalInput`;var N={USD:`$`,EUR:`€`,GBP:`£`,BGN:`лв`,JPY:`¥`,CNY:`¥`,CHF:`CHF`,CAD:`C$`,AUD:`A$`},P=e=>!e||e.length===0?[]:e.map(e=>typeof e==`string`?{value:e,label:`${N[e]||e} ${e}`}:e);function F({currency:e,defaultCurrency:t,currencies:i,onCurrencyChange:a,currencyPosition:s=`start`,disableCurrencySelector:c=!1,currencyPlaceholder:l,currencyWidth:f=`w-28`,currencyLabel:m,invalid:g,disabled:_,onConfigError:v,size:y,...b},x){let{defaultControlSize:S}=n.o(),C=u.f(y,S),w=(0,p.useMemo)(()=>P(i),[i]),[T,E]=(0,p.useState)(t??w[0]?.value??``),D=e!==void 0,O=D?e:T;(0,p.useEffect)(()=>{let n={currency:e,defaultCurrency:t,disableCurrencySelector:c};c&&typeof e==`string`&&typeof t==`string`&&e.trim()!==``&&t.trim()!==``&&e!==t&&v?.(`[CurrencyInput] currency/defaultCurrency mismatch while selector is disabled.`,n),c&&(typeof O!=`string`||O.trim().length===0)&&v?.(`[CurrencyInput] disableCurrencySelector is enabled but no currency is provided.`,n)},[e,t,c,v,O]);let k=(0,p.useCallback)(e=>{e!==null&&(D||E(e),a?.(e))},[D,a]),A=(0,p.useMemo)(()=>r.cn(`border-input bg-transparent !shadow-none`,u.u[C],`focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]`,`aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive`,f,_&&`opacity-50 cursor-not-allowed`),[C,f,_]),j=(0,h.jsxs)(`div`,{className:`space-y-2`,children:[!!m&&(0,h.jsx)(o.a,{className:`leading-6`,children:m}),(0,h.jsxs)(d.t,{value:O,onValueChange:e=>k(e),disabled:_||c,children:[(0,h.jsx)(d.a,{"aria-invalid":g||void 0,className:A,children:(0,h.jsx)(d.o,{placeholder:l??``})}),(0,h.jsx)(d.n,{children:(0,h.jsx)(d.r,{children:w.map(e=>(0,h.jsx)(d.i,{value:e.value,children:e.label},e.value))})})]})]});return(0,h.jsxs)(`div`,{className:r.cn(`currency-input--component`,`flex items-start gap-2`),children:[s===`start`&&j,(0,h.jsx)(`div`,{className:`flex-1`,children:(0,h.jsx)(M,{ref:x,size:C,decimalPlaces:2,allowNegative:!1,disabled:_,invalid:g,...b})}),s===`end`&&j]})}var I=(0,p.memo)((0,p.forwardRef)(F));I.displayName=`CurrencyInput`;var L=[`USD`,`EUR`],R=(0,p.forwardRef)(function({currencies:e=L,onCurrencyChange:t,currency:n,defaultCurrency:r,...i},a){return(0,h.jsx)(I,{className:`money-input--component`,ref:a,currencies:e,currency:n,defaultCurrency:r,onCurrencyChange:(0,p.useCallback)(e=>{t?.(e)},[t]),...i})});R.displayName=`MoneyInput`;function z({children:e,label:t,isRequired:n,required:i,hint:a,error:s,helperText:c,htmlFor:l,className:u}){let d=!!s,f=s||c||(d?void 0:a),m=!!f,g=n??i,_=p.useId(),v=p.isValidElement(e)?e.props.id:void 0,y=l??v??(t&&p.isValidElement(e)?`form-field-${_}`:void 0),b=y&&p.isValidElement(e)&&!v?p.cloneElement(e,{id:y}):e;return(0,h.jsxs)(`div`,{className:r.cn(`form-field--component`,`space-y-1`,u),children:[!!t&&(0,h.jsxs)(o.a,{htmlFor:y,className:`flex items-center leading-6`,children:[t,!!g&&(0,h.jsx)(`span`,{className:`ml-1 text-destructive`,children:`*`})]}),b,!!m&&(0,h.jsx)(o.s,{tag:`p`,size:`xs`,type:d?`error`:`secondary`,...d?{role:`alert`,"aria-live":`polite`}:{},children:f})]})}function B({name:e,control:t,rules:n,error:r,children:i,...a}){return(0,h.jsx)(v.Controller,{name:e,control:t,rules:n,render:({field:t,fieldState:n})=>{let o=n.error?.message||(n.error?n.error.type===`required`?a.label?`${a.label} is required`:`This field is required`:`Invalid value`:void 0),s=r?.(e)||o||void 0,c=!!s;return(0,h.jsx)(z,{...a,error:s,htmlFor:e,children:i(t,s,c,n)})}})}z.displayName=`FormField`,B.displayName=`ControlledFormField`;var V={info:{wrapper:`border-info/30 bg-info/5`,iconRing:`bg-info/15`,iconColor:`text-info`,title:`text-info`,close:`text-info/70 hover:text-info hover:bg-info/10`},success:{wrapper:`border-success/30 bg-success/5`,iconRing:`bg-success/15`,iconColor:`text-success`,title:`text-success`,close:`text-success/70 hover:text-success hover:bg-success/10`},error:{wrapper:`border-destructive/30 bg-destructive/5`,iconRing:`bg-destructive/15`,iconColor:`text-destructive`,title:`text-destructive`,close:`text-destructive/70 hover:text-destructive hover:bg-destructive/10`},warning:{wrapper:`border-warning/40 bg-warning/10`,iconRing:`bg-warning/20`,iconColor:`text-warning-foreground`,title:`text-warning-foreground`,close:`text-warning-foreground/70 hover:text-warning-foreground hover:bg-warning/20`}},H={info:g.Info,success:g.BadgeCheck,error:g.CircleAlert,warning:g.AlertTriangle};function U({html:e}){return p.default.createElement(`span`,{dangerouslySetInnerHTML:{__html:e}})}function W({type:e=`info`,dismissible:t=!1,title:n,message:a,onDismiss:s,children:c,asHTML:l=!1,dismissAriaLabel:u=`Dismiss notification`,className:d}){let f=V[e],m=H[e],_=p.default.useMemo(()=>o.c(a??(typeof c==`string`?c:``)),[c,a]),v=!!n;return(0,h.jsxs)(`div`,{role:`status`,className:r.cn(`notification-banner--component`,`flex w-full items-start gap-3 rounded-lg border px-4 py-3`,`animate-in fade-in-0 slide-in-from-bottom-1 duration-200`,f.wrapper,d),children:[(0,h.jsx)(`span`,{"aria-hidden":`true`,className:r.cn(`mt-0.5 inline-flex size-8 shrink-0 items-center justify-center rounded-full`,f.iconRing,f.iconColor),children:(0,h.jsx)(m,{className:`size-4`})}),(0,h.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[v&&(0,h.jsx)(o.s,{tag:`div`,weight:`semibold`,className:`leading-snug text-foreground`,children:n}),(0,h.jsxs)(o.s,{tag:`div`,type:v?`secondary`:`main`,className:r.cn(`break-words leading-snug`,v&&`mt-0.5`),children:[!!l&&(0,h.jsx)(U,{html:_}),!l&&(a??c)]})]}),!!t&&(0,h.jsx)(i.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`icon-small`,"aria-label":u,onClick:s,className:r.cn(`-mr-1 inline-flex size-7 shrink-0 items-center justify-center rounded-md transition-colors`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40`,f.close),children:(0,h.jsx)(g.X,{className:`size-4`})})]})}W.displayName=`NotificationBanner`;function ee({className:e}){let t=(0,p.useId)();return(0,h.jsxs)(`svg`,{className:r.cn(`placeholder-pattern--component`,e),fill:`none`,stroke:`currentColor`,"aria-hidden":`true`,children:[(0,h.jsx)(`defs`,{children:(0,h.jsx)(`pattern`,{id:t,x:`0`,y:`0`,width:`10`,height:`10`,patternUnits:`userSpaceOnUse`,children:(0,h.jsx)(`path`,{d:`M-3 13 15-5M-5 5l18-18M-1 21 17 3`,stroke:`currentColor`,strokeWidth:`0.75`,strokeLinecap:`square`,vectorEffect:`non-scaling-stroke`})})}),(0,h.jsx)(`rect`,{stroke:`none`,fill:`url(#${t})`,width:`100%`,height:`100%`})]})}ee.displayName=`PlaceholderPattern`;function G({when:e,children:t,fallback:n=null}){return e?t:n||null}G.displayName=`ShowIf`;var te={maxAttempts:`Max attempts`,tryAgainIn:`Try again in`};function K({message:e,attempts:n,remaining:i,className:a,strings:s}){let c=t.useStrings(te,s);return(0,h.jsxs)(`div`,{role:`alert`,className:r.cn(`throttle-alert--component`,`flex items-start gap-3 rounded-lg border border-destructive/30 bg-destructive/5 px-4 py-3`,a),children:[(0,h.jsx)(`span`,{"aria-hidden":`true`,className:`mt-0.5 inline-flex size-8 shrink-0 items-center justify-center rounded-full bg-destructive/15 text-destructive`,children:(0,h.jsx)(g.ShieldAlert,{className:`size-4`})}),(0,h.jsxs)(`div`,{className:`min-w-0 flex-1 space-y-1.5`,children:[(0,h.jsx)(o.s,{weight:`medium`,className:`text-destructive leading-snug`,children:e}),(0,h.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-4 gap-y-1 text-xs text-destructive/80`,children:[(0,h.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[(0,h.jsx)(g.RotateCcw,{className:`size-3`,"aria-hidden":`true`}),(0,h.jsx)(`span`,{children:c.maxAttempts}),(0,h.jsx)(`span`,{className:`font-semibold tabular-nums text-destructive`,children:n})]}),(0,h.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[(0,h.jsx)(g.Clock,{className:`size-3`,"aria-hidden":`true`}),(0,h.jsx)(`span`,{children:c.tryAgainIn}),(0,h.jsx)(`span`,{className:`font-semibold tabular-nums text-destructive`,children:i})]})]})]})]})}K.displayName=`ThrottleAlert`;function q({children:e,className:t}){return(0,h.jsx)(`span`,{className:r.cn(`visually-hidden--component`,`absolute w-px h-px p-0 -m-px overflow-hidden whitespace-nowrap border-0`,`[clip:rect(0,0,0,0)]`,t),children:e})}q.displayName=`VisuallyHidden`;var J=[`muted`,`primary`,`secondary`,`info`,`success`],ne={muted:`bg-muted text-muted-foreground`,primary:`bg-primary/10 text-primary`,secondary:`bg-secondary text-secondary-foreground`,info:`bg-info/10 text-info`,success:`bg-success/10 text-success`,warning:`bg-warning/15 text-warning`,destructive:`bg-destructive/10 text-destructive`};function re(e,t=!1){let n=e.trim().split(/\s+/);return n.length===0?`?`:t?n[0].slice(0,1).toUpperCase():n.length===1?n[0].slice(0,2).toUpperCase():(n[0][0]+n[n.length-1][0]).toUpperCase()}function ie(e,t){return typeof t==`string`?t:typeof t==`number`?J[Math.abs(t)%J.length]:J[(typeof e==`number`?e:Array.from(e).reduce((e,t)=>e+t.charCodeAt(0),0))%J.length]}function ae(e){return e===`small`||e==="default"?e:e===`xs`||e===`sm`?`small`:`default`}function Y({users:e,max:t=4,size:n=`default`,className:i,showOverflow:a=!0,overflowFormatter:s,avatarClassName:c}){let l=e.slice(0,t),u=Math.max(0,e.length-t),d=ae(n);return(0,h.jsxs)(f.i,{className:r.cn(`stacked-avatars--component`,i),children:[l.map((e,t)=>{let n=re(e.name,d===`small`),i=ie(e.id??e.name??t,e.tone);return(0,h.jsxs)(f.t,{size:d,className:r.cn(`ring-background`,c),title:e.name,children:[e.imageUrl?(0,h.jsx)(f.o,{src:e.imageUrl,alt:e.name}):null,(0,h.jsx)(f.r,{className:r.cn(`font-semibold`,ne[i]),children:n})]},e.id??`${e.name}-${t}`)}),!!a&&u>0&&(0,h.jsx)(f.a,{children:(0,h.jsx)(o.s,{size:`xs`,weight:`semibold`,children:s?s(u):`+${u}`})})]})}Y.displayName=`StackedAvatars`;var X={separator:`·`},oe={default:{bg:`bg-card`,text:`text-foreground`,border:`border-border`,accent:`text-foreground`,subtle:`text-muted-foreground`},inverse:{bg:`bg-primary`,text:`text-background`,border:`border-primary`,accent:`text-background/80`,subtle:`text-background/65`},muted:{bg:`bg-muted/50`,text:`text-foreground`,border:`border-border`,accent:`text-foreground`,subtle:`text-muted-foreground`},primary:{bg:`bg-primary/10`,text:`text-foreground`,border:`border-primary/30`,accent:`text-primary`,subtle:`text-muted-foreground`},success:{bg:`bg-success/10`,text:`text-foreground`,border:`border-success/30`,accent:`text-success`,subtle:`text-muted-foreground`},warning:{bg:`bg-warning/15`,text:`text-foreground`,border:`border-warning/40`,accent:`text-warning-foreground`,subtle:`text-muted-foreground`},destructive:{bg:`bg-destructive/10`,text:`text-foreground`,border:`border-destructive/30`,accent:`text-destructive`,subtle:`text-muted-foreground`},info:{bg:`bg-info/10`,text:`text-foreground`,border:`border-info/30`,accent:`text-info`,subtle:`text-muted-foreground`}};function se(e){return e instanceof Date?e:new Date(e)}function Z({date:e,time:n,locale:i,layout:a=`stacked`,timePlacement:s,tone:c=`default`,boxed:l,showMonth:u=!0,dayFormat:d=`d`,weekdayFormat:f=`EEE`,monthFormat:p=`MMM`,className:g,strings:_}){let v=se(e),y=t.useStrings(X,_),b=oe[c],x=!Number.isNaN(v.getTime()),S=x?(0,m.format)(v,f,i?{locale:i}:void 0):``,C=x?(0,m.format)(v,d,i?{locale:i}:void 0):``,w=x?(0,m.format)(v,p,i?{locale:i}:void 0):``,T=s??(a===`inline`?`inline`:`below`),E=l??a===`stacked`;return a===`inline`?(0,h.jsxs)(`span`,{className:r.cn(`date-block--component`,`inline-flex items-center gap-1.5 tabular-nums`,E&&r.cn(`rounded-md border px-2 py-1`,b.bg,b.border),g),children:[(0,h.jsx)(o.s,{size:`xs`,weight:`semibold`,className:r.cn(b.accent,`uppercase tracking-wide`),children:S}),(0,h.jsx)(o.s,{weight:`semibold`,children:C}),!!u&&(0,h.jsx)(o.s,{size:`xs`,type:`secondary`,className:`uppercase tracking-wide`,children:w}),!!n&&T===`inline`&&(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(o.s,{size:`xs`,type:`discrete`,"aria-hidden":!0,children:y.separator}),(0,h.jsx)(o.s,{size:`xs`,type:`secondary`,children:n})]})]}):(0,h.jsxs)(`div`,{className:r.cn(`inline-flex flex-col items-center gap-0.5`,g),children:[(0,h.jsxs)(`div`,{className:r.cn(`flex flex-col items-center justify-center gap-1 tabular-nums`,E&&r.cn(`w-14 min-h-14 rounded-md border px-1.5 py-1.5`,b.bg,b.border)),children:[(0,h.jsx)(o.s,{size:`xxs`,weight:`semibold`,style:{lineHeight:1},className:r.cn(b.accent,`uppercase tracking-wider`),children:S}),(0,h.jsx)(o.s,{size:`lg`,weight:`bold`,style:{lineHeight:1},className:b.text,children:C}),!!u&&(0,h.jsx)(o.s,{size:`xxs`,style:{lineHeight:1},className:r.cn(b.subtle,`uppercase tracking-wider`),children:w})]}),!!n&&T===`below`&&(0,h.jsx)(o.s,{size:`xxs`,type:`secondary`,className:`tabular-nums`,children:n}),!!n&&T===`inline`&&(0,h.jsx)(o.s,{size:`xxs`,type:`secondary`,className:`tabular-nums`,children:n})]})}Z.displayName=`DateBlock`;function ce({...e}){return(0,h.jsx)(y.Collapsible.Root,{"data-slot":`collapsible`,...e})}function le({asChild:e=!1,nativeButton:t,render:n,children:r,...i}){let o=e?(0,h.jsx)(a.t,{}):void 0,s=typeof n==`function`?((e,t)=>{let{nativeButton:r,...i}=e;return n(i,t)}):n,c=!0;e&&p.isValidElement(r)&&(c=typeof r.type==`string`?r.type===`button`:!(`href`in(r.props??{})));let l=t??(e?c:!0);return(0,h.jsx)(y.Collapsible.Trigger,{"data-slot":`collapsible-trigger`,render:o??s,nativeButton:l,...i,children:r})}function ue({...e}){return(0,h.jsx)(y.Collapsible.Panel,{"data-slot":`collapsible-content`,...e})}var de=`—`,fe=e=>typeof e==`string`?e.trim():``;function Q({money:e,currency:t=`EUR`,onChangeData:n,recordCurrency:i,label:a,hint:s,helperText:l,error:u,required:d,invalid:f,showMigrationWarning:m=!0,migrationWarningMessage:_,showOriginalHint:v=!0,className:y,onChange:b,onCurrencyChange:x,...S}){let C=i??e?.recordCurrency??void 0,w=(0,p.useMemo)(()=>C!==void 0&&C!==t,[C,t]),T=(0,p.useMemo)(()=>v?fe(e?.pair?.formatted):``,[v,e?.pair?.formatted]),E=T.length>0&&!u,D=w&&m,O=(0,p.useCallback)(e=>{b?.(e);let r=Number.parseFloat(e.target.value);n?.({amount:Number.isFinite(r)?r:0,currency:t})},[b,n,t]),k=(0,p.useCallback)(e=>{x?.(e);let t=Number.parseFloat(String(S.value??``));n?.({amount:Number.isFinite(t)?t:0,currency:e})},[x,n,S.value]),A=f??!!u,j=(0,h.jsx)(R,{...S,currency:t,onChange:O,onCurrencyChange:k,invalid:A}),M=a||s||l||u||d?(0,h.jsx)(z,{label:a,hint:s,helperText:l,error:u,required:d,children:j}):j;return(0,h.jsxs)(`div`,{className:r.cn(`money-input--component`,`space-y-2`,y),children:[M,!!E&&(0,h.jsxs)(`div`,{className:`flex items-center gap-1.5 text-muted-foreground`,children:[(0,h.jsx)(g.Info,{className:`h-3.5 w-3.5 shrink-0`}),(0,h.jsx)(o.s,{size:`xs`,type:`secondary`,children:T||de})]}),!!D&&(0,h.jsxs)(c.t,{className:`border-warning/50 bg-warning/5 py-2`,children:[(0,h.jsx)(g.AlertTriangle,{className:`h-4 w-4 text-warning`}),(0,h.jsx)(c.r,{className:`text-warning-foreground text-xs`,children:_??`Currency will be converted from ${C??``} to ${t}.`})]})]})}Q.displayName=`MoneyInput`;var pe={true:`Yes`,false:`No`};function $({label:e,value:n=!1,trueLabel:i,falseLabel:a,showIcon:c=!0,trueVariant:l=`success`,falseVariant:u=`secondary`,className:d,badgeClassName:f,strings:p}){let m=t.useStrings(pe,p),_=!!n,v=_?g.CheckCircle2:g.XCircle,y=_?l:u,b=(_?i:a)??(_?m.true:m.false);return(0,h.jsxs)(`div`,{className:r.cn(`boolean-indicator--component`,`flex items-center justify-between gap-space-md rounded-radius border border-border/60 bg-muted/30 px-row-x py-row-y`,d),children:[(0,h.jsx)(o.s,{size:`inherit`,type:`secondary`,className:`text-xs uppercase tracking-wide`,children:e}),(0,h.jsxs)(s.t,{variant:y,className:r.cn(`whitespace-nowrap`,f),children:[!!c&&(0,h.jsx)(v,{className:`size-icon`}),b]})]})}$.displayName=`BooleanIndicator`;function me({className:e,...t}){return(0,h.jsx)(`div`,{"data-slot":`empty`,className:r.cn(`gap-4 rounded-lg border-dashed p-12 flex w-full min-w-0 flex-1 flex-col items-center justify-center text-center text-balance`,e),...t})}function he({className:e,...t}){return(0,h.jsx)(`div`,{"data-slot":`empty-header`,className:r.cn(`gap-2 flex max-w-sm flex-col items-center`,e),...t})}var ge=(0,_.cva)(`mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0`,{variants:{variant:{default:`bg-transparent`,icon:`bg-muted text-foreground flex size-10 shrink-0 items-center justify-center rounded-lg [&_svg:not([class*='size-'])]:size-6`}},defaultVariants:{variant:`default`}});function _e({className:e,variant:t=`default`,...n}){return(0,h.jsx)(`div`,{"data-slot":`empty-icon`,"data-variant":t,className:r.cn(ge({variant:t,className:e})),...n})}function ve({className:e,...t}){return(0,h.jsx)(`div`,{"data-slot":`empty-title`,className:r.cn(`text-lg font-medium tracking-tight`,e),...t})}function ye({className:e,...t}){return(0,h.jsx)(`div`,{"data-slot":`empty-description`,className:r.cn(`text-sm/relaxed text-muted-foreground [&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4`,e),...t})}function be({className:e,...t}){return(0,h.jsx)(`div`,{"data-slot":`empty-content`,className:r.cn(`gap-4 text-sm flex w-full max-w-sm min-w-0 flex-col items-center text-balance`,e),...t})}function xe({className:e,children:t,value:n,...i}){return(0,h.jsxs)(b.Progress.Root,{value:n,"data-slot":`progress`,className:r.cn(`flex flex-wrap gap-3`,e),...i,children:[t,(0,h.jsx)(Se,{children:(0,h.jsx)(Ce,{})})]})}function Se({className:e,...t}){return(0,h.jsx)(b.Progress.Track,{className:r.cn(`bg-muted h-1.5 rounded-full relative flex w-full items-center overflow-x-hidden`,e),"data-slot":`progress-track`,...t})}function Ce({className:e,...t}){return(0,h.jsx)(b.Progress.Indicator,{"data-slot":`progress-indicator`,className:r.cn(`bg-primary h-full transition-all`,e),...t})}function we({className:e,...t}){return(0,h.jsx)(b.Progress.Label,{className:r.cn(`text-sm font-medium`,e),"data-slot":`progress-label`,...t})}function Te({className:e,...t}){return(0,h.jsx)(b.Progress.Value,{className:r.cn(`text-muted-foreground ml-auto text-sm tabular-nums`,e),"data-slot":`progress-value`,...t})}var Ee=/oklch\\(([.\\d-]+)\\s+([.\\d]+)\\s+([.\\d]+)\\)/;function De(e,t){let n=e.match(Ee);return n?{l:Number.parseFloat(n[1]),c:Number.parseFloat(n[2]),h:Number.parseFloat(n[3])}:{l:t[0],c:t[1],h:t[2]}}function Oe({data:e,foreground:t,background:n,robustness:i=`M`,className:a,...o}){let[s,c]=(0,p.useState)(null);return(0,p.useEffect)(()=>{(async()=>{try{let r=String(e??``).trim();if(!r){c(null);return}let a=getComputedStyle(document.documentElement),o=t??a.getPropertyValue(`--foreground`),s=n??a.getPropertyValue(`--background`),l=De(o,[.21,.006,285.885]),u=De(s,[.985,0,0]);c(await S.default.toString(r,{type:`svg`,color:{dark:(0,x.formatHex)((0,x.oklch)({mode:`oklch`,...l})),light:(0,x.formatHex)((0,x.oklch)({mode:`oklch`,...u}))},width:200,errorCorrectionLevel:i,margin:0}))}catch{c(``)}})()},[e,t,n,i]),s?(0,h.jsx)(`div`,{className:r.cn(`qr-code--component`,`size-full`,`[&_svg]:size-full`,a),dangerouslySetInnerHTML:{__html:s},...o}):null}Oe.displayName=`QRCode`,Object.defineProperty(exports,"A",{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,"C",{enumerable:!0,get:function(){return G}}),Object.defineProperty(exports,"D",{enumerable:!0,get:function(){return z}}),Object.defineProperty(exports,"E",{enumerable:!0,get:function(){return B}}),Object.defineProperty(exports,"O",{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,"S",{enumerable:!0,get:function(){return K}}),Object.defineProperty(exports,"T",{enumerable:!0,get:function(){return W}}),Object.defineProperty(exports,"_",{enumerable:!0,get:function(){return le}}),Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return Se}}),Object.defineProperty(exports,"b",{enumerable:!0,get:function(){return Y}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return be}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return _e}}),Object.defineProperty(exports,"f",{enumerable:!0,get:function(){return ve}}),Object.defineProperty(exports,"g",{enumerable:!0,get:function(){return ue}}),Object.defineProperty(exports,"h",{enumerable:!0,get:function(){return ce}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return we}}),Object.defineProperty(exports,"k",{enumerable:!0,get:function(){return I}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return ye}}),Object.defineProperty(exports,"m",{enumerable:!0,get:function(){return Q}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return xe}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return Te}}),Object.defineProperty(exports,"p",{enumerable:!0,get:function(){return $}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return Ce}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return me}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return Oe}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return he}}),Object.defineProperty(exports,"v",{enumerable:!0,get:function(){return Z}}),Object.defineProperty(exports,"w",{enumerable:!0,get:function(){return ee}}),Object.defineProperty(exports,"x",{enumerable:!0,get:function(){return q}}),Object.defineProperty(exports,"y",{enumerable:!0,get:function(){return X}});
2
- //# sourceMappingURL=display-Bin2vVex.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"display-Bin2vVex.cjs","names":[],"sources":["../../src/components/base/forms/fields/decimal-input.tsx","../../src/components/base/forms/fields/currency-input.tsx","../../src/components/base/forms/fields/money-input.tsx","../../src/components/base/forms/form-field.tsx","../../src/components/base/display/notification-banner.tsx","../../src/components/base/display/placeholder-pattern.tsx","../../src/components/base/display/show-if.tsx","../../src/components/base/display/throttle-alert.tsx","../../src/components/base/display/visually-hidden.tsx","../../src/components/base/display/stacked-avatars.tsx","../../src/components/base/display/date-block.tsx","../../src/components/ui/collapsible.tsx","../../src/components/base/display/money-input.tsx","../../src/components/base/display/boolean-indicator.tsx","../../src/components/ui/empty.tsx","../../src/components/ui/progress.tsx","../../src/components/base/display/qr-code.tsx"],"sourcesContent":["/**\n * DecimalInput — text-based numeric input with decimal-place enforcement,\n * locale-friendly comma → dot normalisation, optional min/max clamping,\n * rounding mode (`round` / `floor` / `ceil` / `half-even`), and optional\n * stepper buttons when `step` is set.\n *\n * Wraps the base `Input` so all add-on / icon / clear / loading features\n * still work. Extra features layered on top:\n *\n * - `step` — when set, renders − / + stepper buttons that snap the value\n * to a multiple of `step` (anchored at `min` if provided, else 0).\n * - `roundingMode` — controls how stepper / blur normalisation rounds\n * half values; default `'round'` (round-half-up).\n * - `normalizeOnBlur` (default `true`) — pads the displayed value to the\n * full `decimalPlaces` count and clamps to `[min, max]` when the field\n * loses focus.\n *\n * The `value` prop is always a plain string (consumers parse it as needed)\n * so RHF / Inertia can treat it like any other input.\n */\nimport * as React from 'react';\nimport { useCallback } from 'react';\nimport { Minus, Plus } from 'lucide-react';\nimport { useStrings, type StringsProp } from '@/lib/strings';\nimport { useFormsConfig, type FormControlSize } from '@/lib/ui-provider';\nimport { cn } from '@/lib/utils';\nimport { resolveFormControlSize } from '../form-sizing';\nimport { Input, type InputProps } from './input';\n\nexport type DecimalRoundingMode = 'round' | 'floor' | 'ceil' | 'half-even';\n\nexport interface DecimalInputStrings {\n\tdecrement: string;\n\tincrement: string;\n}\n\nexport const defaultDecimalInputStrings: DecimalInputStrings = {\n\tdecrement: 'Decrement',\n\tincrement: 'Increment',\n};\n\nexport interface DecimalInputProps extends Omit<InputProps, 'type' | 'inputMode' | 'strings'> {\n\tdecimalPlaces?: number;\n\tmin?: number;\n\tmax?: number;\n\tallowNegative?: boolean;\n\tallowEmpty?: boolean;\n\t/** When set, renders − / + steppers and snaps the value to multiples of `step`. */\n\tstep?: number;\n\t/** How to round when normalising on blur or stepping. Default `'round'`. */\n\troundingMode?: DecimalRoundingMode;\n\t/** Pad to full decimalPlaces and clamp to [min, max] on blur. Default `true`. */\n\tnormalizeOnBlur?: boolean;\n\t/** String overrides for stepper aria-labels. */\n\tstrings?: StringsProp<DecimalInputStrings>;\n}\n\nconst formatDecimalValue = (\n\tvalue: string,\n\tdecimalPlaces: number,\n\tallowNegative: boolean,\n): string => {\n\tif (!value) return '';\n\n\tlet formatted = value;\n\tformatted = formatted.replace(/,/g, '.');\n\n\tif (allowNegative) {\n\t\tformatted = formatted.replace(/[^\\d.-]/g, '');\n\t} else {\n\t\tformatted = formatted.replace(/[^\\d.]/g, '');\n\t}\n\n\tif (allowNegative && formatted.includes('-')) {\n\t\tconst hasLeadingMinus = formatted.startsWith('-');\n\t\tformatted = formatted.replace(/-/g, '');\n\t\tif (hasLeadingMinus) formatted = '-' + formatted;\n\t}\n\n\tconst parts = formatted.split('.');\n\tif (parts.length > 2) {\n\t\tformatted = parts[0] + '.' + parts.slice(1).join('');\n\t}\n\n\tif (parts.length === 2 && parts[1].length > decimalPlaces) {\n\t\tformatted = parts[0] + '.' + parts[1].substring(0, decimalPlaces);\n\t}\n\n\treturn formatted;\n};\n\nconst isWithinBounds = (value: string, min?: number, max?: number): boolean => {\n\tif (!value || value === '-') return true;\n\tconst numValue = parseFloat(value);\n\tif (Number.isNaN(numValue)) return true;\n\tif (min !== undefined && numValue < min) return false;\n\tif (max !== undefined && numValue > max) return false;\n\treturn true;\n};\n\nfunction applyRounding(value: number, decimals: number, mode: DecimalRoundingMode): number {\n\tconst factor = Math.pow(10, decimals);\n\tconst shifted = value * factor;\n\tswitch (mode) {\n\t\tcase 'floor':\n\t\t\treturn Math.floor(shifted) / factor;\n\t\tcase 'ceil':\n\t\t\treturn Math.ceil(shifted) / factor;\n\t\tcase 'half-even': {\n\t\t\tconst floor = Math.floor(shifted);\n\t\t\tconst diff = shifted - floor;\n\t\t\tif (diff > 0.5) return (floor + 1) / factor;\n\t\t\tif (diff < 0.5) return floor / factor;\n\t\t\treturn (floor % 2 === 0 ? floor : floor + 1) / factor;\n\t\t}\n\t\tcase 'round':\n\t\tdefault:\n\t\t\treturn Math.round(shifted) / factor;\n\t}\n}\n\nfunction clamp(n: number, min?: number, max?: number): number {\n\tlet next = n;\n\tif (min !== undefined) next = Math.max(min, next);\n\tif (max !== undefined) next = Math.min(max, next);\n\treturn next;\n}\n\nfunction snapToStep(\n\tcurrent: number,\n\tdelta: number,\n\tstep: number,\n\tmin?: number,\n\tmode: DecimalRoundingMode = 'round',\n): number {\n\tconst anchor = min ?? 0;\n\tconst stepsFromAnchor = (current - anchor) / step;\n\tconst rounded =\n\t\tmode === 'floor'\n\t\t\t? Math.floor(stepsFromAnchor)\n\t\t\t: mode === 'ceil'\n\t\t\t\t? Math.ceil(stepsFromAnchor)\n\t\t\t\t: Math.round(stepsFromAnchor);\n\tconst stepped = anchor + (rounded + delta) * step;\n\treturn Number(stepped.toFixed(12));\n}\n\nfunction fireChange(\n\ttarget: HTMLInputElement,\n\tvalue: string,\n\tonChange?: InputProps['onChange'],\n) {\n\t// Write the value to the DOM first so UNCONTROLLED inputs actually reflect\n\t// stepper clicks and blur-normalisation. (Previously this only called\n\t// onChange, so steppers were a no-op on uncontrolled fields.) Use the native\n\t// value setter so React's input value-tracker stays in sync for controlled\n\t// consumers, which then reconcile through their onChange + re-render.\n\tconst nativeSetter = Object.getOwnPropertyDescriptor(\n\t\twindow.HTMLInputElement.prototype,\n\t\t'value',\n\t)?.set;\n\tif (nativeSetter) nativeSetter.call(target, value);\n\telse target.value = value;\n\n\tif (!onChange) return;\n\tconst event = {\n\t\ttarget,\n\t\tcurrentTarget: target,\n\t\ttype: 'change',\n\t\tbubbles: false,\n\t\tcancelable: false,\n\t} as unknown as React.ChangeEvent<HTMLInputElement>;\n\tonChange(event);\n}\n\nconst STEPPER_SIZE_CLASS: Record<FormControlSize, string> = {\n\tsmall: 'w-control-small',\n\tdefault: 'w-control',\n};\n\nfunction DecimalInputImpl(\n\t{\n\t\tdecimalPlaces = 2,\n\t\tmin,\n\t\tmax,\n\t\tallowNegative = true,\n\t\tallowEmpty = true,\n\t\tstep,\n\t\troundingMode = 'round',\n\t\tnormalizeOnBlur = true,\n\t\tonChange,\n\t\tonBlur,\n\t\tplaceholder,\n\t\tclassName,\n\t\tvalue: controlledValue,\n\t\tdefaultValue,\n\t\tdisabled,\n\t\tsize: sizeProp,\n\t\tstrings: stringsProp,\n\t\t...props\n\t}: DecimalInputProps,\n\tforwardedRef: React.ForwardedRef<HTMLInputElement>,\n) {\n\tconst { defaultControlSize } = useFormsConfig();\n\tconst size: FormControlSize = resolveFormControlSize(sizeProp, defaultControlSize);\n\tconst strings = useStrings(defaultDecimalInputStrings, stringsProp);\n\tconst validDecimalPlaces = Math.min(12, Math.max(0, decimalPlaces));\n\tconst inputRef = React.useRef<HTMLInputElement | null>(null);\n\n\tconst handleChange = useCallback(\n\t\t(e: React.ChangeEvent<HTMLInputElement>) => {\n\t\t\tconst newValue = e.target.value;\n\n\t\t\tif (!newValue && allowEmpty) {\n\t\t\t\tonChange?.(e);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst formatted = formatDecimalValue(newValue, validDecimalPlaces, allowNegative);\n\t\t\tif (!isWithinBounds(formatted, min, max)) return;\n\n\t\t\tif (formatted !== newValue) {\n\t\t\t\tconst modifiedEvent = {\n\t\t\t\t\t...e,\n\t\t\t\t\ttarget: { ...e.target, value: formatted },\n\t\t\t\t\tcurrentTarget: { ...e.currentTarget, value: formatted },\n\t\t\t\t} as React.ChangeEvent<HTMLInputElement>;\n\t\t\t\tonChange?.(modifiedEvent);\n\t\t\t} else {\n\t\t\t\tonChange?.(e);\n\t\t\t}\n\t\t},\n\t\t[onChange, validDecimalPlaces, allowNegative, allowEmpty, min, max],\n\t);\n\n\tconst handleBlur = useCallback(\n\t\t(e: React.FocusEvent<HTMLInputElement>) => {\n\t\t\tonBlur?.(e);\n\t\t\tif (!normalizeOnBlur) return;\n\t\t\tconst raw = e.target.value;\n\t\t\tif (!raw && allowEmpty) return;\n\t\t\tconst num = Number.parseFloat(raw.replace(',', '.'));\n\t\t\tif (!Number.isFinite(num)) return;\n\t\t\tconst clamped = clamp(num, min, max);\n\t\t\tconst rounded = applyRounding(clamped, validDecimalPlaces, roundingMode);\n\t\t\tconst next = rounded.toFixed(validDecimalPlaces);\n\t\t\tif (next !== raw && inputRef.current) {\n\t\t\t\tfireChange(inputRef.current, next, onChange);\n\t\t\t}\n\t\t},\n\t\t[onBlur, onChange, normalizeOnBlur, allowEmpty, min, max, validDecimalPlaces, roundingMode],\n\t);\n\n\tconst adjust = useCallback(\n\t\t(delta: number) => {\n\t\t\tif (disabled || step === undefined) return;\n\t\t\tconst target = inputRef.current;\n\t\t\tif (!target) return;\n\t\t\tconst raw = target.value;\n\t\t\tconst current = Number.parseFloat(raw.replace(',', '.'));\n\t\t\tconst base = Number.isFinite(current) ? current : (min ?? 0);\n\t\t\tconst snapped = clamp(snapToStep(base, delta, step, min, roundingMode), min, max);\n\t\t\tconst next = applyRounding(snapped, validDecimalPlaces, roundingMode).toFixed(validDecimalPlaces);\n\t\t\tfireChange(target, next, onChange);\n\t\t},\n\t\t[disabled, step, min, max, roundingMode, validDecimalPlaces, onChange],\n\t);\n\n\tconst showSteppers = typeof step === 'number' && step > 0;\n\tconst placeholderResolved =\n\t\tplaceholder ?? (validDecimalPlaces > 0 ? `0.${'0'.repeat(validDecimalPlaces)}` : '0');\n\n\tif (showSteppers) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn('decimal-input--component', \n\t\t\t\t\t// Stepper segmented group — input + adjacent − / + buttons\n\t\t\t\t\t// share a single border radius so the group reads as one\n\t\t\t\t\t// control instead of three loose chips.\n\t\t\t\t\t'flex items-stretch overflow-hidden rounded-radius border border-input bg-transparent',\n\t\t\t\t\t'focus-within:border-ring focus-within:ring-ring/50 focus-within:ring-[3px]',\n\t\t\t\t\tprops['aria-invalid'] && 'border-destructive ring-destructive/20',\n\t\t\t\t\tdisabled && 'opacity-50 cursor-not-allowed',\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\taria-label={strings.decrement}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tonClick={() => adjust(-1)}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'inline-flex shrink-0 items-center justify-center border-r border-input text-muted-foreground transition-colors',\n\t\t\t\t\t\tSTEPPER_SIZE_CLASS[size],\n\t\t\t\t\t\t'hover:bg-muted hover:text-foreground',\n\t\t\t\t\t\t'disabled:cursor-not-allowed disabled:opacity-50',\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<Minus className={size === 'small' ? 'size-icon-sm' : 'size-icon'} />\n\t\t\t\t</button>\n\t\t\t\t<Input\n\t\t\t\t\tsize={size}\n\t\t\t\t\tref={(node) => { inputRef.current = node; if (typeof forwardedRef === \"function\") forwardedRef(node); else if (forwardedRef) forwardedRef.current = node; }}\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tinputMode={validDecimalPlaces > 0 ? 'decimal' : 'numeric'}\n\t\t\t\t\tplaceholder={placeholderResolved}\n\t\t\t\t\tonChange={handleChange}\n\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t\tvalue={controlledValue}\n\t\t\t\t\tdefaultValue={defaultValue}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'flex-1 tabular-nums text-center border-0 shadow-none rounded-none focus-visible:ring-0 focus-visible:border-0',\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\taria-label={strings.increment}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tonClick={() => adjust(1)}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'inline-flex shrink-0 items-center justify-center border-l border-input text-muted-foreground transition-colors',\n\t\t\t\t\t\tSTEPPER_SIZE_CLASS[size],\n\t\t\t\t\t\t'hover:bg-muted hover:text-foreground',\n\t\t\t\t\t\t'disabled:cursor-not-allowed disabled:opacity-50',\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<Plus className={size === 'small' ? 'size-icon-sm' : 'size-icon'} />\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Input\n\t\t\tsize={size}\n\t\t\tref={(node) => { inputRef.current = node; if (typeof forwardedRef === \"function\") forwardedRef(node); else if (forwardedRef) forwardedRef.current = node; }}\n\t\t\ttype=\"text\"\n\t\t\tinputMode={validDecimalPlaces > 0 ? 'decimal' : 'numeric'}\n\t\t\tplaceholder={placeholderResolved}\n\t\t\tonChange={handleChange}\n\t\t\tonBlur={handleBlur}\n\t\t\tvalue={controlledValue}\n\t\t\tdefaultValue={defaultValue}\n\t\t\tdisabled={disabled}\n\t\t\tclassName={cn('tabular-nums text-end', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nconst DecimalInput = React.forwardRef<HTMLInputElement, DecimalInputProps>(DecimalInputImpl);\nDecimalInput.displayName = 'DecimalInput';\n\nexport { DecimalInput };\n","import { useState, useCallback, useEffect, useMemo, memo, forwardRef, type ForwardedRef } from 'react';\nimport * as baseui from '@/components/ui/select';\nimport { Label } from '@/components/typography';\nimport { useFormsConfig } from '@/lib/ui-provider';\nimport { cn } from '@/lib/utils';\nimport { formControlSizeClasses, resolveFormControlSize } from '../form-sizing';\nimport { DecimalInput, type DecimalInputProps } from './decimal-input';\n\nexport interface CurrencyOption {\n value: string;\n label: string;\n}\n\nexport interface CurrencyInputProps extends Omit<DecimalInputProps, 'label' | 'hint' | 'helperText' | 'error'> {\n /** Current currency value */\n currency?: string;\n\n /** Default currency if uncontrolled */\n defaultCurrency?: string;\n\n /** List of available currencies (simple strings or objects with value/label) */\n currencies?: (string | CurrencyOption)[];\n\n /** Callback when currency changes */\n onCurrencyChange?: (currency: string) => void;\n\n /** Position of currency dropdown */\n currencyPosition?: 'start' | 'end';\n\n /** Disable currency selection */\n disableCurrencySelector?: boolean;\n\n /** Placeholder for currency dropdown */\n currencyPlaceholder?: string;\n\n /** Width of the currency dropdown */\n currencyWidth?: string;\n\n /** Label for currency field (sub-label) */\n currencyLabel?: string;\n\n /** Error state for styling (passed from FormField) */\n invalid?: boolean;\n\n /** Called when the input is misconfigured (mismatched currency/defaultCurrency\n * while the selector is disabled, missing currency, etc.). The library\n * also DEV-logs the same message to the console. */\n onConfigError?: (\n message: string,\n details: { currency?: string; defaultCurrency?: string; disableCurrencySelector?: boolean },\n ) => void;\n}\n\n// Common currency symbols\nconst CURRENCY_SYMBOLS: Record<string, string> = {\n USD: '$',\n EUR: '€',\n GBP: '£',\n BGN: 'лв',\n JPY: '¥',\n CNY: '¥',\n CHF: 'CHF',\n CAD: 'C$',\n AUD: 'A$',\n};\n\nconst normalizeCurrencies = (currencies?: (string | CurrencyOption)[]): CurrencyOption[] => {\n if (!currencies || currencies.length === 0) return [];\n\n return currencies.map((currency) => {\n if (typeof currency === 'string') {\n const symbol = CURRENCY_SYMBOLS[currency] || currency;\n return {\n value: currency,\n label: `${symbol} ${currency}`,\n };\n }\n return currency;\n });\n};\n\nfunction CurrencyInputImpl(\n {\n currency: controlledCurrency,\n defaultCurrency,\n currencies,\n onCurrencyChange,\n currencyPosition = 'start',\n disableCurrencySelector = false,\n currencyPlaceholder,\n currencyWidth = 'w-28',\n currencyLabel,\n invalid,\n disabled,\n onConfigError,\n size: sizeProp,\n ...decimalInputProps\n }: CurrencyInputProps,\n forwardedRef: ForwardedRef<HTMLInputElement>,\n) {\n const { defaultControlSize } = useFormsConfig();\n const size = resolveFormControlSize(sizeProp, defaultControlSize);\n\n // Memoize normalized currencies\n const normalizedCurrencies = useMemo(() => normalizeCurrencies(currencies), [currencies]);\n\n // Internal state for uncontrolled currency\n const [internalCurrency, setInternalCurrency] = useState(\n defaultCurrency ?? normalizedCurrencies[0]?.value ?? ''\n );\n\n // Determine if currency is controlled\n const isCurrencyControlled = controlledCurrency !== undefined;\n const selectedCurrency = isCurrencyControlled ? controlledCurrency : internalCurrency;\n\n useEffect(() => {\n const details = { currency: controlledCurrency, defaultCurrency, disableCurrencySelector };\n if (\n disableCurrencySelector &&\n typeof controlledCurrency === 'string' &&\n typeof defaultCurrency === 'string' &&\n controlledCurrency.trim() !== '' &&\n defaultCurrency.trim() !== '' &&\n controlledCurrency !== defaultCurrency\n ) {\n const message = '[CurrencyInput] currency/defaultCurrency mismatch while selector is disabled.';\n if (import.meta.env?.DEV) {\n console.warn(message, { currency: controlledCurrency, defaultCurrency });\n }\n onConfigError?.(message, details);\n }\n\n if (\n disableCurrencySelector &&\n (typeof selectedCurrency !== 'string' || selectedCurrency.trim().length === 0)\n ) {\n const message = '[CurrencyInput] disableCurrencySelector is enabled but no currency is provided.';\n if (import.meta.env?.DEV) {\n console.warn(message);\n }\n onConfigError?.(message, details);\n }\n }, [controlledCurrency, defaultCurrency, disableCurrencySelector, onConfigError, selectedCurrency]);\n\n // Handle currency change\n const handleCurrencyChange = useCallback(\n (newCurrency: string | null) => {\n if (newCurrency === null) return;\n if (!isCurrencyControlled) {\n setInternalCurrency(newCurrency);\n }\n onCurrencyChange?.(newCurrency);\n },\n [isCurrencyControlled, onCurrencyChange]\n );\n\n // Memoize trigger class names. Size flows through `formControlSizeClasses[size]`\n // so the trigger height matches the inner DecimalInput when a consumer sets\n // `<UIProvider forms={{ defaultControlSize }}>`.\n const triggerClassName = useMemo(\n () =>\n cn(\n 'border-input bg-transparent !shadow-none',\n formControlSizeClasses[size],\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',\n currencyWidth,\n disabled && 'opacity-50 cursor-not-allowed'\n ),\n [size, currencyWidth, disabled]\n );\n\n // Currency selector component\n const currencySelector = (\n <div className=\"space-y-2\">\n {!!currencyLabel && <Label className=\"leading-6\">{currencyLabel}</Label>}\n <baseui.Select\n value={selectedCurrency}\n onValueChange={(value) => handleCurrencyChange(value)}\n disabled={disabled || disableCurrencySelector}\n >\n <baseui.SelectTrigger aria-invalid={invalid || undefined} className={triggerClassName}>\n <baseui.SelectValue placeholder={currencyPlaceholder ?? ''} />\n </baseui.SelectTrigger>\n <baseui.SelectContent>\n <baseui.SelectGroup>\n {normalizedCurrencies.map((curr) => (\n <baseui.SelectItem key={curr.value} value={curr.value}>\n {curr.label}\n </baseui.SelectItem>\n ))}\n </baseui.SelectGroup>\n </baseui.SelectContent>\n </baseui.Select>\n </div>\n );\n\n return (\n <div className={cn('currency-input--component', 'flex items-start gap-2')}>\n {currencyPosition === 'start' && currencySelector}\n\n <div className=\"flex-1\">\n <DecimalInput\n ref={forwardedRef}\n size={size}\n decimalPlaces={2}\n allowNegative={false}\n disabled={disabled}\n invalid={invalid}\n {...decimalInputProps}\n />\n </div>\n\n {currencyPosition === 'end' && currencySelector}\n </div>\n );\n}\n\n// forwardRef + memo: forward to the underlying decimal input so consumers\n// can focus/measure programmatically.\nexport const CurrencyInput = memo(forwardRef<HTMLInputElement, CurrencyInputProps>(CurrencyInputImpl));\nCurrencyInput.displayName = 'CurrencyInput';\n","/**\n * MoneyInput (forms/fields) — `CurrencyInput` preset with a small default\n * currency list for back-compat and a callback shape that matches the\n * library's `CurrencyCode` typing.\n *\n * For the richer `MoneyInputData`-shaped helper with migration warnings and\n * form-field chrome, use `@/components/base/display/money-input` instead.\n */\nimport { forwardRef, useCallback } from 'react';\n\nimport { CurrencyInput, type CurrencyInputProps } from './currency-input';\nimport type { CurrencyCode } from '@/lib/ui-provider';\n\nexport interface MoneyInputProps extends Omit<CurrencyInputProps, 'currency' | 'defaultCurrency' | 'currencies' | 'onCurrencyChange'> {\n /** Current currency value (ISO 4217 code, e.g. 'USD'). */\n currency?: CurrencyCode;\n /** Default currency if uncontrolled. */\n defaultCurrency?: CurrencyCode;\n /** Available currencies for the inline picker. Defaults to `['USD', 'EUR']`\n * — pass your own list or wire `useMoneyConfig` at the consumer site for\n * real production use. */\n currencies?: CurrencyCode[];\n /** Callback when the user changes the currency in the inline picker. */\n onCurrencyChange?: (currency: CurrencyCode) => void;\n}\n\nconst DEFAULT_CURRENCIES: CurrencyCode[] = ['USD', 'EUR'];\n\nexport const MoneyInput = forwardRef<HTMLInputElement, MoneyInputProps>(function MoneyInput(\n { currencies = DEFAULT_CURRENCIES, onCurrencyChange, currency, defaultCurrency, ...props },\n ref,\n) {\n const handleCurrencyChange = useCallback(\n (nextCurrency: string) => {\n onCurrencyChange?.(nextCurrency);\n },\n [onCurrencyChange]\n );\n\n return (\n <CurrencyInput className=\"money-input--component\"\n ref={ref}\n currencies={currencies}\n currency={currency}\n defaultCurrency={defaultCurrency}\n onCurrencyChange={handleCurrencyChange}\n {...props}\n />\n );\n});\n\nMoneyInput.displayName = 'MoneyInput';\n","/**\n * Unified Form Field Components\n * =============================\n *\n * Two components sharing the same visual structure for field chrome:\n *\n * 1. `FormField` - Pure presentation wrapper (label, hint, error, required indicator)\n * 2. `ControlledFormField` - FormField + react-hook-form Controller integration\n *\n * ## FormField\n * Use for custom components or non-controlled inputs.\n *\n * ```tsx\n * <FormField label={t('label')} error={error} required hint={t('hint')}>\n * <CustomAutocomplete value={value} onSelect={onSelect} />\n * </FormField>\n * ```\n *\n * ## ControlledFormField\n * Use with react-hook-form. Auto-merges backend (Inertia) + validation errors.\n *\n * ```tsx\n * <ControlledFormField\n * name=\"email\"\n * control={control}\n * error={getError}\n * label={t('fields.email.label')}\n * required\n * rules={{ required: true, pattern: /^\\\\S+@\\\\S+$/i }}\n * >\n * {(field, error, invalid) => (\n * <Input\n * placeholder={t('fields.email.placeholder')}\n * value={field.value ?? ''}\n * onChange={field.onChange}\n * onBlur={field.onBlur}\n * invalid={invalid}\n * />\n * )}\n * </ControlledFormField>\n * ```\n *\n * ## Render Function Parameters\n * - `field` - Controller props: value, onChange, onBlur, name, ref\n * - `error` - Merged error string (backend || validation) or undefined\n * - `invalid` - Boolean for input styling (border color, etc.)\n * - `fieldState` - Escape hatch: touched, dirty, isTouched, isDirty, etc.\n *\n * ## Error Priority\n * Backend errors (via `error` getter) take priority over validation errors.\n * This ensures server-side validation is authoritative.\n *\n * ## Chrome Props (shared by both components)\n * - `label` - Field label text\n * - `required` - Shows red asterisk after label\n * - `hint` - Secondary text shown below the field when there is no error\n * - `error` - Error message (red text below input)\n * - `helperText` - Helper text (shown when no error)\n * - `className` - Additional wrapper classes\n */\n\nimport * as React from 'react';\nimport { type ReactNode } from 'react';\nimport {\n\tController,\n\ttype Control,\n\ttype ControllerFieldState,\n\ttype ControllerRenderProps,\n\ttype FieldPath,\n\ttype FieldValues,\n\ttype RegisterOptions,\n} from 'react-hook-form';\n\nimport { Label, Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\ninterface FieldChromeProps {\n\tlabel?: string;\n\tisRequired?: boolean;\n\trequired?: boolean;\n\thint?: string;\n\terror?: string;\n\thelperText?: string;\n\tclassName?: string;\n}\n\ninterface FormFieldProps extends FieldChromeProps {\n\tchildren: ReactNode;\n\thtmlFor?: string;\n}\n\nexport function FormField({\n\tchildren,\n\tlabel,\n\tisRequired,\n\trequired,\n\thint,\n\terror,\n\thelperText,\n\thtmlFor,\n\tclassName,\n}: FormFieldProps) {\n\tconst hasError = Boolean(error);\n\tconst supportingText = error || helperText || (!hasError ? hint : undefined);\n\tconst showBottomText = Boolean(supportingText);\n\tconst resolvedRequired = isRequired ?? required;\n\tconst generatedId = React.useId();\n\tconst childId =\n\t\tReact.isValidElement(children)\n\t\t\t? (children.props as { id?: string }).id\n\t\t\t: undefined;\n\tconst resolvedHtmlFor = htmlFor ?? childId ?? (label && React.isValidElement(children) ? `form-field-${generatedId}` : undefined);\n\tconst resolvedChildren =\n\t\tresolvedHtmlFor && React.isValidElement(children) && !childId\n\t\t\t? React.cloneElement(children as React.ReactElement<{ id?: string }>, { id: resolvedHtmlFor })\n\t\t\t: children;\n\n\treturn (\n\t\t<div className={cn('form-field--component', 'space-y-1', className)}>\n\t\t\t{!!label && (\n\t\t\t\t<Label htmlFor={resolvedHtmlFor} className=\"flex items-center leading-6\">\n\t\t\t\t\t{label}\n\t\t\t\t\t{!!resolvedRequired && (\n\t\t\t\t\t\t<span className=\"ml-1 text-destructive\">*</span>\n\t\t\t\t\t)}\n\t\t\t\t</Label>\n\t\t\t)}\n\n\t\t\t{resolvedChildren}\n\n\t\t\t{!!showBottomText && (\n\t\t\t\t<Text\n\t\t\t\t\ttag=\"p\"\n\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\ttype={hasError ? 'error' : 'secondary'}\n\t\t\t\t\t{...(hasError ? { role: 'alert', 'aria-live': 'polite' } : {})}\n\t\t\t\t>\n\t\t\t\t\t{supportingText}\n\t\t\t\t</Text>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\ntype ErrorGetter<TName extends string> = (field: TName) => string | undefined;\n\ninterface ControlledFormFieldProps<\n\tTFieldValues extends FieldValues,\n\tTName extends FieldPath<TFieldValues>,\n> extends Omit<FieldChromeProps, 'error'> {\n\tname: TName;\n\tcontrol: Control<TFieldValues>;\n\trules?: RegisterOptions<TFieldValues, TName>;\n\terror?: ErrorGetter<TName>;\n\tchildren: (\n\t\tfield: ControllerRenderProps<TFieldValues, TName>,\n\t\terror: string | undefined,\n\t\tinvalid: boolean,\n\t\tfieldState: ControllerFieldState,\n\t) => ReactNode;\n}\n\nexport function ControlledFormField<\n\tTFieldValues extends FieldValues,\n\tTName extends FieldPath<TFieldValues>,\n>({\n\tname,\n\tcontrol,\n\trules,\n\terror: errorGetter,\n\tchildren,\n\t...chromeProps\n}: ControlledFormFieldProps<TFieldValues, TName>) {\n\treturn (\n\t\t<Controller\n\t\t\tname={name}\n\t\t\tcontrol={control}\n\t\t\trules={rules}\n\t\t\trender={({ field, fieldState }) => {\n\t\t\t\tconst validationError = fieldState.error?.message\n\t\t\t\t\t|| (fieldState.error ? (fieldState.error.type === 'required' ? (chromeProps.label ? `${chromeProps.label} is required` : 'This field is required') : 'Invalid value') : undefined);\n\t\t\t\tconst resolvedError = errorGetter?.(name) || validationError || undefined;\n\t\t\t\tconst invalid = Boolean(resolvedError);\n\n\t\t\t\treturn (\n\t\t\t\t\t<FormField {...chromeProps} error={resolvedError} htmlFor={name}>\n\t\t\t\t\t\t{children(field, resolvedError, invalid, fieldState)}\n\t\t\t\t\t</FormField>\n\t\t\t\t);\n\t\t\t}}\n\t\t/>\n\t);\n}\n\nFormField.displayName = 'FormField';\nControlledFormField.displayName = 'ControlledFormField';\n","/**\n * NotificationBanner — full-width inline notification with type-specific\n * styling (info / success / error / warning). The icon sits in a soft circle\n * for clear hierarchy, the title (when present) reads at full strength, and\n * the message uses the muted secondary tone so the type colour highlights\n * without overwhelming. Optional dismiss button on the trailing edge.\n *\n * Use inside page bodies for non-blocking notices; reach for `Alert` when\n * the affordance is structural (e.g. inside a form), and Toast for transient\n * feedback.\n */\nimport { AlertTriangle, BadgeCheck, CircleAlert, Info, X } from 'lucide-react';\nimport React from 'react';\n\nimport { Button } from '@/components/base/buttons';\nimport { Text } from '@/components/typography';\nimport { sanitizeHtml } from '@/lib/sanitize-html';\nimport { cn } from '@/lib/utils';\n\nexport type NotificationType = 'info' | 'success' | 'error' | 'warning';\n\nexport interface NotificationBannerProps {\n\ttype?: NotificationType;\n\tdismissible?: boolean;\n\ttitle?: string;\n\tmessage?: string;\n\tonDismiss?: () => void;\n\tchildren?: React.ReactNode;\n\tasHTML?: boolean;\n\tdismissAriaLabel?: string;\n\tclassName?: string;\n}\n\ninterface BannerTone {\n\twrapper: string;\n\ticonRing: string;\n\ticonColor: string;\n\ttitle: string;\n\tclose: string;\n}\n\nconst TONES: Record<NotificationType, BannerTone> = {\n\tinfo: {\n\t\twrapper: 'border-info/30 bg-info/5',\n\t\ticonRing: 'bg-info/15',\n\t\ticonColor: 'text-info',\n\t\ttitle: 'text-info',\n\t\tclose: 'text-info/70 hover:text-info hover:bg-info/10',\n\t},\n\tsuccess: {\n\t\twrapper: 'border-success/30 bg-success/5',\n\t\ticonRing: 'bg-success/15',\n\t\ticonColor: 'text-success',\n\t\ttitle: 'text-success',\n\t\tclose: 'text-success/70 hover:text-success hover:bg-success/10',\n\t},\n\terror: {\n\t\twrapper: 'border-destructive/30 bg-destructive/5',\n\t\ticonRing: 'bg-destructive/15',\n\t\ticonColor: 'text-destructive',\n\t\ttitle: 'text-destructive',\n\t\tclose: 'text-destructive/70 hover:text-destructive hover:bg-destructive/10',\n\t},\n\twarning: {\n\t\twrapper: 'border-warning/40 bg-warning/10',\n\t\ticonRing: 'bg-warning/20',\n\t\ticonColor: 'text-warning-foreground',\n\t\ttitle: 'text-warning-foreground',\n\t\tclose: 'text-warning-foreground/70 hover:text-warning-foreground hover:bg-warning/20',\n\t},\n};\n\nconst ICONS: Record<NotificationType, React.ElementType> = {\n\tinfo: Info,\n\tsuccess: BadgeCheck,\n\terror: CircleAlert,\n\twarning: AlertTriangle,\n};\n\nfunction SanitizedSpan({ html }: { html: string }) {\n\treturn React.createElement('span', { dangerouslySetInnerHTML: { __html: html } });\n}\n\nexport function NotificationBanner({\n\ttype = 'info',\n\tdismissible = false,\n\ttitle,\n\tmessage,\n\tonDismiss,\n\tchildren,\n\tasHTML = false,\n\tdismissAriaLabel = 'Dismiss notification',\n\tclassName,\n}: NotificationBannerProps) {\n\tconst tone = TONES[type];\n\tconst IconComponent = ICONS[type];\n\tconst sanitizedHtml = React.useMemo(\n\t\t() => sanitizeHtml(message ?? (typeof children === 'string' ? children : '')),\n\t\t[children, message],\n\t);\n\tconst hasTitle = !!title;\n\n\treturn (\n\t\t<div\n\t\t\trole=\"status\"\n\t\t\tclassName={cn('notification-banner--component', \n\t\t\t\t'flex w-full items-start gap-3 rounded-lg border px-4 py-3',\n\t\t\t\t'animate-in fade-in-0 slide-in-from-bottom-1 duration-200',\n\t\t\t\ttone.wrapper,\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<span\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'mt-0.5 inline-flex size-8 shrink-0 items-center justify-center rounded-full',\n\t\t\t\t\ttone.iconRing,\n\t\t\t\t\ttone.iconColor,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<IconComponent className=\"size-4\" />\n\t\t\t</span>\n\n\t\t\t<div className=\"min-w-0 flex-1\">\n\t\t\t\t{hasTitle && (\n\t\t\t\t\t<Text\n\t\t\t\t\t\ttag=\"div\"\n\t\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\t\tclassName=\"leading-snug text-foreground\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t\t<Text\n\t\t\t\t\ttag=\"div\"\n\t\t\t\t\ttype={hasTitle ? 'secondary' : 'main'}\n\t\t\t\t\tclassName={cn('break-words leading-snug', hasTitle && 'mt-0.5')}\n\t\t\t\t>\n\t\t\t\t\t{!!asHTML && <SanitizedSpan html={sanitizedHtml} />}\n\t\t\t\t\t{!asHTML && (message ?? children)}\n\t\t\t\t</Text>\n\t\t\t</div>\n\n\t\t\t{!!dismissible && (\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\tsize=\"icon-small\"\n\t\t\t\t\taria-label={dismissAriaLabel}\n\t\t\t\t\tonClick={onDismiss}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'-mr-1 inline-flex size-7 shrink-0 items-center justify-center rounded-md transition-colors',\n\t\t\t\t\t\t'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40',\n\t\t\t\t\t\ttone.close,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<X className=\"size-4\" />\n\t\t\t\t</Button>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nNotificationBanner.displayName = 'NotificationBanner';\n\nexport default NotificationBanner;\n","/**\n * PlaceholderPattern — diagonal-stripe SVG fill suitable as a skeleton or\n * empty-region indicator. Uses a unique pattern id per instance so multiple\n * copies on the same page don't collide.\n */\nimport { useId } from 'react';\n\nimport { cn } from '@/lib/utils';\nexport interface PlaceholderPatternProps {\n\tclassName?: string;\n}\n\nexport function PlaceholderPattern({ className }: PlaceholderPatternProps) {\n\tconst patternId = useId();\n\n\treturn (\n\t\t<svg\n\t\t\tclassName={cn('placeholder-pattern--component', className)}\n\t\t\tfill=\"none\"\n\t\t\tstroke=\"currentColor\"\n\t\t\taria-hidden=\"true\"\n\t\t>\n\t\t\t<defs>\n\t\t\t\t<pattern\n\t\t\t\t\tid={patternId}\n\t\t\t\t\tx=\"0\"\n\t\t\t\t\ty=\"0\"\n\t\t\t\t\twidth=\"10\"\n\t\t\t\t\theight=\"10\"\n\t\t\t\t\tpatternUnits=\"userSpaceOnUse\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M-3 13 15-5M-5 5l18-18M-1 21 17 3\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstrokeWidth=\"0.75\"\n\t\t\t\t\t\tstrokeLinecap=\"square\"\n\t\t\t\t\t\tvectorEffect=\"non-scaling-stroke\"\n\t\t\t\t\t/>\n\t\t\t\t</pattern>\n\t\t\t</defs>\n\t\t\t<rect\n\t\t\t\tstroke=\"none\"\n\t\t\t\tfill={`url(#${patternId})`}\n\t\t\t\twidth=\"100%\"\n\t\t\t\theight=\"100%\"\n\t\t\t/>\n\t\t</svg>\n\t);\n}\n\nPlaceholderPattern.displayName = 'PlaceholderPattern';\n\n","/**\n * ShowIf — conditional render gate. Returns `children` when `when` is truthy,\n * otherwise the optional `fallback`. Useful for inline presentation logic\n * where a ternary would be noisier than a self-explanatory tag.\n */\nimport type { ReactNode } from 'react';\n\nexport type ShowIfProps = { when: boolean; children: ReactNode; fallback?: ReactNode };\n\nexport function ShowIf({ when, children, fallback = null }: ShowIfProps) {\n\tif (when) return children;\n\tif (fallback) return fallback;\n\treturn null;\n}\n\nShowIf.displayName = 'ShowIf';\n\nexport default ShowIf;\n\n","/**\n * ThrottleAlert — destructive alert for rate-limit / throttling errors.\n *\n * Single header icon, primary message, and a tight inline meta row showing\n * `attempts` and `remaining`. Use as a banner above a form when a request\n * has been blocked and the user must wait. Strings overridable for i18n.\n */\nimport { ShieldAlert, Clock, RotateCcw } from 'lucide-react';\n\nimport { Text } from '@/components/typography';\nimport { useStrings, type StringsProp } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nexport interface ThrottleAlertStrings {\n\tmaxAttempts: string;\n\ttryAgainIn: string;\n}\n\nexport const defaultThrottleAlertStrings: ThrottleAlertStrings = {\n\tmaxAttempts: 'Max attempts',\n\ttryAgainIn: 'Try again in',\n};\n\nexport interface ThrottleAlertProps {\n\tmessage: string;\n\tattempts: number;\n\tremaining: string;\n\tclassName?: string;\n\tstrings?: StringsProp<ThrottleAlertStrings>;\n}\n\nexport function ThrottleAlert({\n\tmessage,\n\tattempts,\n\tremaining,\n\tclassName,\n\tstrings: stringsProp,\n}: ThrottleAlertProps) {\n\tconst strings = useStrings(defaultThrottleAlertStrings, stringsProp);\n\n\treturn (\n\t\t<div\n\t\t\trole=\"alert\"\n\t\t\tclassName={cn('throttle-alert--component', \n\t\t\t\t'flex items-start gap-3 rounded-lg border border-destructive/30 bg-destructive/5 px-4 py-3',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<span\n\t\t\t\taria-hidden=\"true\"\n\t\t\t\tclassName=\"mt-0.5 inline-flex size-8 shrink-0 items-center justify-center rounded-full bg-destructive/15 text-destructive\"\n\t\t\t>\n\t\t\t\t<ShieldAlert className=\"size-4\" />\n\t\t\t</span>\n\t\t\t<div className=\"min-w-0 flex-1 space-y-1.5\">\n\t\t\t\t<Text weight=\"medium\" className=\"text-destructive leading-snug\">\n\t\t\t\t\t{message}\n\t\t\t\t</Text>\n\t\t\t\t<div className=\"flex flex-wrap items-center gap-x-4 gap-y-1 text-xs text-destructive/80\">\n\t\t\t\t\t<span className=\"inline-flex items-center gap-1.5\">\n\t\t\t\t\t\t<RotateCcw className=\"size-3\" aria-hidden=\"true\" />\n\t\t\t\t\t\t<span>{strings.maxAttempts}</span>\n\t\t\t\t\t\t<span className=\"font-semibold tabular-nums text-destructive\">{attempts}</span>\n\t\t\t\t\t</span>\n\t\t\t\t\t<span className=\"inline-flex items-center gap-1.5\">\n\t\t\t\t\t\t<Clock className=\"size-3\" aria-hidden=\"true\" />\n\t\t\t\t\t\t<span>{strings.tryAgainIn}</span>\n\t\t\t\t\t\t<span className=\"font-semibold tabular-nums text-destructive\">{remaining}</span>\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nThrottleAlert.displayName = 'ThrottleAlert';\n","/**\n * VisuallyHidden — hides content from sighted users while keeping it readable\n * by assistive tech (screen readers, voice). Use to label icon-only buttons,\n * give context to status changes, or expose extra structure for AT users.\n */\nimport * as React from 'react';\n\nimport { cn } from '@/lib/utils';\n\nexport interface VisuallyHiddenProps {\n\tchildren: React.ReactNode;\n\tclassName?: string;\n}\n\nexport function VisuallyHidden({ children, className }: VisuallyHiddenProps) {\n\treturn (\n\t\t<span\n\t\t\tclassName={cn('visually-hidden--component', \n\t\t\t\t'absolute w-px h-px p-0 -m-px overflow-hidden whitespace-nowrap border-0',\n\t\t\t\t'[clip:rect(0,0,0,0)]',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{children}\n\t\t</span>\n\t);\n}\n\nVisuallyHidden.displayName = 'VisuallyHidden';\n","/**\n * StackedAvatars — overlapping avatar group with optional `+N` overflow chip,\n * configurable size, and an optional semantic `tone` for fallbacks (initials)\n * when the consumer hasn't passed `imageUrl`.\n *\n * Wraps the shadcn AvatarGroup primitive with library-default sizes and a\n * deterministic tone picker so fallbacks stay stable without raw hue utilities.\n */\nimport * as React from 'react';\nimport {\n\tAvatar,\n\tAvatarFallback,\n\tAvatarGroup,\n\tAvatarGroupCount,\n\tAvatarImage,\n} from './avatar';\nimport { Text } from '@/components/typography';\nimport type { ComponentScale } from '@/lib/ui-provider';\nimport { cn } from '@/lib/utils';\n\nexport type StackedAvatarsSize = ComponentScale;\nexport type StackedAvatarTone =\n\t| 'muted'\n\t| 'primary'\n\t| 'secondary'\n\t| 'info'\n\t| 'success'\n\t| 'warning'\n\t| 'destructive';\n\nexport interface StackedAvatarUser {\n\tid?: string;\n\tname: string;\n\timageUrl?: string;\n\t/** Optional semantic tone override for this user's fallback. Numeric values map to the token set. */\n\ttone?: StackedAvatarTone | number;\n}\n\nexport interface StackedAvatarsProps {\n\tusers: StackedAvatarUser[];\n\tmax?: number;\n\tsize?: StackedAvatarsSize;\n\tclassName?: string;\n\t/** Whether to render a `+N` count when `users.length > max`. Default `true`. */\n\tshowOverflow?: boolean;\n\t/** Provide custom overflow text (e.g. \"+12 more\"). Default `+N`. */\n\toverflowFormatter?: (overflow: number) => React.ReactNode;\n\t/** Extra class names applied to each avatar root. */\n\tavatarClassName?: string;\n}\n\nconst FALLBACK_TONES: StackedAvatarTone[] = [\n\t'muted',\n\t'primary',\n\t'secondary',\n\t'info',\n\t'success',\n];\n\nconst FALLBACK_TONE_CLASSNAMES: Record<StackedAvatarTone, string> = {\n\tmuted: 'bg-muted text-muted-foreground',\n\tprimary: 'bg-primary/10 text-primary',\n\tsecondary: 'bg-secondary text-secondary-foreground',\n\tinfo: 'bg-info/10 text-info',\n\tsuccess: 'bg-success/10 text-success',\n\twarning: 'bg-warning/15 text-warning',\n\tdestructive: 'bg-destructive/10 text-destructive',\n};\n\nfunction getInitials(name: string, compact = false): string {\n\tconst parts = name.trim().split(/\\s+/);\n\tif (parts.length === 0) return '?';\n\tif (compact) return parts[0].slice(0, 1).toUpperCase();\n\tif (parts.length === 1) return parts[0].slice(0, 2).toUpperCase();\n\treturn (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n}\n\nfunction pickFallbackTone(seed: string | number, override?: StackedAvatarTone | number) {\n\tif (typeof override === 'string') {\n\t\treturn override;\n\t}\n\tif (typeof override === 'number') {\n\t\treturn FALLBACK_TONES[Math.abs(override) % FALLBACK_TONES.length];\n\t}\n\tconst key = typeof seed === 'number' ? seed : Array.from(seed).reduce((s, c) => s + c.charCodeAt(0), 0);\n\treturn FALLBACK_TONES[key % FALLBACK_TONES.length];\n}\n\nfunction normalizeStackedAvatarsSize(size: StackedAvatarsSize | string | undefined): StackedAvatarsSize {\n\tif (size === 'small' || size === 'default') return size;\n\tif (size === 'xs' || size === 'sm') return 'small';\n\treturn 'default';\n}\n\nexport function StackedAvatars({\n\tusers,\n\tmax = 4,\n\tsize = 'default',\n\tclassName,\n\tshowOverflow = true,\n\toverflowFormatter,\n\tavatarClassName,\n}: StackedAvatarsProps) {\n\tconst visible = users.slice(0, max);\n\tconst overflow = Math.max(0, users.length - max);\n\tconst resolvedSize = normalizeStackedAvatarsSize(size);\n\n\treturn (\n\t\t<AvatarGroup className={cn('stacked-avatars--component', className)}>\n\t\t\t{visible.map((user, index) => {\n\t\t\t\tconst initials = getInitials(user.name, resolvedSize === 'small');\n\t\t\t\tconst fallbackTone = pickFallbackTone(user.id ?? user.name ?? index, user.tone);\n\t\t\t\treturn (\n\t\t\t\t\t<Avatar\n\t\t\t\t\t\tkey={user.id ?? `${user.name}-${index}`}\n\t\t\t\t\t\tsize={resolvedSize}\n\t\t\t\t\t\tclassName={cn('ring-background', avatarClassName)}\n\t\t\t\t\t\ttitle={user.name}\n\t\t\t\t\t>\n\t\t\t\t\t\t{user.imageUrl ? (\n\t\t\t\t\t\t\t<AvatarImage src={user.imageUrl} alt={user.name} />\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t<AvatarFallback\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'font-semibold',\n\t\t\t\t\t\t\t\tFALLBACK_TONE_CLASSNAMES[fallbackTone],\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{initials}\n\t\t\t\t\t\t</AvatarFallback>\n\t\t\t\t\t</Avatar>\n\t\t\t\t);\n\t\t\t})}\n\t\t\t{!!showOverflow && overflow > 0 && (\n\t\t\t\t<AvatarGroupCount>\n\t\t\t\t\t<Text size=\"xs\" weight=\"semibold\">\n\t\t\t\t\t\t{overflowFormatter ? overflowFormatter(overflow) : `+${overflow}`}\n\t\t\t\t\t</Text>\n\t\t\t\t</AvatarGroupCount>\n\t\t\t)}\n\t\t</AvatarGroup>\n\t);\n}\n\nStackedAvatars.displayName = 'StackedAvatars';\n","/**\n * DateBlock — compact \"boxed\" date display showing weekday + day-of-month\n * + optional month and time. Built on `date-fns` so locales propagate\n * naturally (`enGB`, `bg`, …).\n *\n * Two layouts:\n * - `stacked` (default) — three lines: weekday / day / month\n * - `inline` — single row: weekday + day + month + optional time\n *\n * Time can render `inline` (right of the date), `below` (under the date\n * block), or `hidden`. Compact rooms (booking lists) typically use\n * `stacked` with `time=\"below\"`.\n */\nimport { format, type Locale } from 'date-fns';\n\nimport { Text } from '@/components/typography';\nimport { useStrings, type StringsProp } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nexport type DateBlockLayout = 'stacked' | 'inline';\nexport type DateBlockTimePlacement = 'inline' | 'below' | 'hidden';\nexport type DateBlockTone = 'default' | 'muted' | 'primary' | 'inverse' | 'success' | 'warning' | 'destructive' | 'info';\n\nexport interface DateBlockStrings {\n\t/** Used by `inline` layout when month is hidden (e.g. \"Apr 30 · 14:00\"). */\n\tseparator: string;\n}\n\nexport const defaultDateBlockStrings: DateBlockStrings = {\n\tseparator: '·',\n};\n\nexport interface DateBlockProps {\n\t/** Date instance, ISO string, or unix timestamp. */\n\tdate: Date | string | number;\n\t/** ISO time string (`HH:mm`) or already-formatted time string. */\n\ttime?: string | null;\n\t/** date-fns `Locale` (e.g. `enGB`, `bg`). Defaults to user-agent. */\n\tlocale?: Locale;\n\t/** Layout. Default `stacked`. */\n\tlayout?: DateBlockLayout;\n\t/** Where to place the time. Default `inline` for `inline` layout, `below` for `stacked`. */\n\ttimePlacement?: DateBlockTimePlacement;\n\t/** Tone of the boxed block. Default `default` (card surface). */\n\ttone?: DateBlockTone;\n\t/** Whether to render a card-like box around the block. Default `true` for stacked, `false` for inline. */\n\tboxed?: boolean;\n\t/** Show month label. Default `true`. */\n\tshowMonth?: boolean;\n\t/** Custom format for the day-of-month token (date-fns format). Default `'d'`. */\n\tdayFormat?: string;\n\t/** Custom format for the weekday token. Default `'EEE'`. */\n\tweekdayFormat?: string;\n\t/** Custom format for the month token. Default `'MMM'`. */\n\tmonthFormat?: string;\n\tclassName?: string;\n\tstrings?: StringsProp<DateBlockStrings>;\n}\n\nconst toneClassMap: Record<DateBlockTone, { bg: string; text: string; border: string; accent: string; subtle: string }> = {\n\tdefault: { bg: 'bg-card', text: 'text-foreground', border: 'border-border', accent: 'text-foreground', subtle: 'text-muted-foreground' },\n\tinverse: { bg: 'bg-primary', text: 'text-background', border: 'border-primary', accent: 'text-background/80', subtle: 'text-background/65' },\n\tmuted: { bg: 'bg-muted/50', text: 'text-foreground', border: 'border-border', accent: 'text-foreground', subtle: 'text-muted-foreground' },\n\tprimary: { bg: 'bg-primary/10', text: 'text-foreground', border: 'border-primary/30', accent: 'text-primary', subtle: 'text-muted-foreground' },\n\tsuccess: { bg: 'bg-success/10', text: 'text-foreground', border: 'border-success/30', accent: 'text-success', subtle: 'text-muted-foreground' },\n\twarning: { bg: 'bg-warning/15', text: 'text-foreground', border: 'border-warning/40', accent: 'text-warning-foreground', subtle: 'text-muted-foreground' },\n\tdestructive: { bg: 'bg-destructive/10', text: 'text-foreground', border: 'border-destructive/30', accent: 'text-destructive', subtle: 'text-muted-foreground' },\n\tinfo: { bg: 'bg-info/10', text: 'text-foreground', border: 'border-info/30', accent: 'text-info', subtle: 'text-muted-foreground' },\n};\n\nfunction resolveDate(input: Date | string | number): Date {\n\tif (input instanceof Date) return input;\n\tconst d = typeof input === 'number' ? new Date(input) : new Date(input);\n\treturn d;\n}\n\nexport function DateBlock({\n\tdate,\n\ttime,\n\tlocale,\n\tlayout = 'stacked',\n\ttimePlacement,\n\ttone = 'default',\n\tboxed,\n\tshowMonth = true,\n\tdayFormat = 'd',\n\tweekdayFormat = 'EEE',\n\tmonthFormat = 'MMM',\n\tclassName,\n\tstrings: stringsProp,\n}: DateBlockProps) {\n\tconst resolved = resolveDate(date);\n\tconst strings = useStrings(defaultDateBlockStrings, stringsProp);\n\tconst tones = toneClassMap[tone];\n\tconst dateValid = !Number.isNaN(resolved.getTime());\n\n\tconst weekday = dateValid ? format(resolved, weekdayFormat, locale ? { locale } : undefined) : '';\n\tconst day = dateValid ? format(resolved, dayFormat, locale ? { locale } : undefined) : '';\n\tconst month = dateValid ? format(resolved, monthFormat, locale ? { locale } : undefined) : '';\n\n\tconst resolvedTimePlacement: DateBlockTimePlacement =\n\t\ttimePlacement ?? (layout === 'inline' ? 'inline' : 'below');\n\tconst useBox = boxed ?? layout === 'stacked';\n\n\tif (layout === 'inline') {\n\t\treturn (\n\t\t\t<span\n\t\t\t\tclassName={cn('date-block--component', \n\t\t\t\t\t'inline-flex items-center gap-1.5 tabular-nums',\n\t\t\t\t\tuseBox && cn('rounded-md border px-2 py-1', tones.bg, tones.border),\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<Text size=\"xs\" weight=\"semibold\" className={cn(tones.accent, 'uppercase tracking-wide')}>\n\t\t\t\t\t{weekday}\n\t\t\t\t</Text>\n\t\t\t\t<Text weight=\"semibold\">{day}</Text>\n\t\t\t\t{!!showMonth && (\n\t\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"uppercase tracking-wide\">\n\t\t\t\t\t\t{month}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t\t{!!time && resolvedTimePlacement === 'inline' && (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<Text size=\"xs\" type=\"discrete\" aria-hidden>\n\t\t\t\t\t\t\t{strings.separator}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t<Text size=\"xs\" type=\"secondary\">{time}</Text>\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t</span>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className={cn('inline-flex flex-col items-center gap-0.5', className)}>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'flex flex-col items-center justify-center gap-1 tabular-nums',\n\t\t\t\t\tuseBox && cn('w-14 min-h-14 rounded-md border px-1.5 py-1.5', tones.bg, tones.border),\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<Text\n\t\t\t\t\tsize=\"xxs\"\n\t\t\t\t\tweight=\"semibold\"\n\t\t\t\t\tstyle={{ lineHeight: 1 }}\n\t\t\t\t\tclassName={cn(tones.accent, 'uppercase tracking-wider')}\n\t\t\t\t>\n\t\t\t\t\t{weekday}\n\t\t\t\t</Text>\n\t\t\t\t<Text size=\"lg\" weight=\"bold\" style={{ lineHeight: 1 }} className={tones.text}>\n\t\t\t\t\t{day}\n\t\t\t\t</Text>\n\t\t\t\t{!!showMonth && (\n\t\t\t\t\t<Text\n\t\t\t\t\t\tsize=\"xxs\"\n\t\t\t\t\t\tstyle={{ lineHeight: 1 }}\n\t\t\t\t\t\tclassName={cn(tones.subtle, 'uppercase tracking-wider')}\n\t\t\t\t\t>\n\t\t\t\t\t\t{month}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t{!!time && resolvedTimePlacement === 'below' && (\n\t\t\t\t<Text size=\"xxs\" type=\"secondary\" className=\"tabular-nums\">\n\t\t\t\t\t{time}\n\t\t\t\t</Text>\n\t\t\t)}\n\t\t\t{!!time && resolvedTimePlacement === 'inline' && (\n\t\t\t\t<Text size=\"xxs\" type=\"secondary\" className=\"tabular-nums\">\n\t\t\t\t\t{time}\n\t\t\t\t</Text>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nDateBlock.displayName = 'DateBlock';\n","import { Collapsible as CollapsiblePrimitive } from \"@base-ui/react/collapsible\"\nimport * as React from \"react\"\n\nimport { Slot } from \"@/components/ui/slot\"\n\nfunction Collapsible({ ...props }: CollapsiblePrimitive.Root.Props) {\n return <CollapsiblePrimitive.Root data-slot=\"collapsible\" {...props} />\n}\n\nfunction CollapsibleTrigger({\n asChild = false,\n nativeButton,\n render,\n children,\n ...props\n}: CollapsiblePrimitive.Trigger.Props & { asChild?: boolean; nativeButton?: boolean }) {\n const slotRender = asChild ? <Slot /> : undefined\n const safeRender: CollapsiblePrimitive.Trigger.Props[\"render\"] = typeof render === \"function\"\n ? ((renderProps, state) => {\n const { nativeButton: _nativeButton, ...rest } = renderProps as Record<string, unknown>\n void _nativeButton\n return render(rest as typeof renderProps, state)\n })\n : render\n let inferredNativeButton = true\n if (asChild && React.isValidElement(children)) {\n if (typeof children.type === \"string\") {\n inferredNativeButton = children.type === \"button\"\n } else {\n const childProps = (children.props ?? {}) as Record<string, unknown>\n inferredNativeButton = !(\"href\" in childProps)\n }\n }\n const resolvedNativeButton = nativeButton ?? (asChild ? inferredNativeButton : true)\n return (\n <CollapsiblePrimitive.Trigger\n data-slot=\"collapsible-trigger\"\n render={slotRender ?? safeRender}\n nativeButton={resolvedNativeButton}\n {...props}\n >\n {children}\n </CollapsiblePrimitive.Trigger>\n )\n}\n\nfunction CollapsibleContent({ ...props }: CollapsiblePrimitive.Panel.Props) {\n return (\n <CollapsiblePrimitive.Panel data-slot=\"collapsible-content\" {...props} />\n )\n}\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent }\n","import { AlertTriangle, Info } from 'lucide-react';\nimport { useCallback, useMemo, type ReactNode } from 'react';\n\nimport { MoneyInput as BaseMoneyInput, type MoneyInputProps as BaseMoneyInputProps } from '@/components/base/forms/fields/money-input';\nimport { FormField } from '@/components/base/forms/form-field';\nimport { Text } from '@/components/typography';\nimport { Alert, AlertDescription } from '@/components/base/display/alert';\nimport { cn } from '@/lib/utils';\nimport type { CurrencyCode } from '@/lib/ui-provider';\n\n/** Optional money payload for migration hints. Consumers map their domain\n * shape into this — `formatted` is the consumer's pre-rendered display\n * string for the alternate currency leg. */\nexport interface MoneyData {\n amount?: number | string | null;\n currency?: string | null;\n /** Optional original/record currency that triggered a migration warning. */\n recordCurrency?: string | null;\n /** Optional secondary leg the consumer formatted for display. */\n pair?: { formatted?: string | null } | null;\n}\n\nexport interface MoneyInputData {\n amount: number;\n currency: CurrencyCode;\n}\n\nexport interface MoneyInputProps extends Omit<BaseMoneyInputProps, 'invalid'> {\n /** Optional money payload for migration hints */\n money?: MoneyData | null;\n /** Display label */\n label?: string;\n /** Hint next to label */\n hint?: string;\n /** Helper text below input */\n helperText?: string;\n /** Error message */\n error?: string;\n /** Required indicator */\n required?: boolean;\n /** Invalid state override */\n invalid?: boolean;\n /** Optional change handler for combined data */\n onChangeData?: (data: MoneyInputData) => void;\n /** Record currency for migration detection */\n recordCurrency?: CurrencyCode;\n /** Show migration warning block */\n showMigrationWarning?: boolean;\n /** Custom migration warning message */\n migrationWarningMessage?: ReactNode;\n /** Show original currency hint */\n showOriginalHint?: boolean;\n}\n\nconst defaultEmptyFormatted = '—';\n\nconst resolveFormatted = (formatted: unknown): string =>\n typeof formatted === 'string' ? formatted.trim() : '';\n\nexport function MoneyInput({\n money,\n currency = 'EUR',\n onChangeData,\n recordCurrency: recordCurrencyProp,\n label,\n hint,\n helperText,\n error,\n required,\n invalid,\n showMigrationWarning = true,\n migrationWarningMessage,\n showOriginalHint = true,\n className,\n onChange,\n onCurrencyChange,\n ...props\n}: MoneyInputProps) {\n const recordCurrency = recordCurrencyProp ?? money?.recordCurrency ?? undefined;\n\n const willMigrate = useMemo(\n () => recordCurrency !== undefined && recordCurrency !== currency,\n [recordCurrency, currency],\n );\n\n const otherFormatted = useMemo(() => {\n if (!showOriginalHint) return '';\n return resolveFormatted(money?.pair?.formatted);\n }, [showOriginalHint, money?.pair?.formatted]);\n\n const showOriginalHintBlock = otherFormatted.length > 0 && !error;\n const showMigrationBlock = willMigrate && showMigrationWarning;\n\n const handleAmountChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(e);\n const parsed = Number.parseFloat(e.target.value);\n const safeAmount = Number.isFinite(parsed) ? parsed : 0;\n onChangeData?.({ amount: safeAmount, currency });\n },\n [onChange, onChangeData, currency],\n );\n\n const handleCurrencyChange = useCallback(\n (nextCurrency: CurrencyCode) => {\n onCurrencyChange?.(nextCurrency);\n const parsedValue = Number.parseFloat(String(props.value ?? ''));\n const safeAmount = Number.isFinite(parsedValue) ? parsedValue : 0;\n onChangeData?.({ amount: safeAmount, currency: nextCurrency });\n },\n [onCurrencyChange, onChangeData, props.value],\n );\n\n const isInvalid = invalid ?? Boolean(error);\n\n const inputNode = (\n <BaseMoneyInput\n {...props}\n currency={currency}\n onChange={handleAmountChange}\n onCurrencyChange={handleCurrencyChange}\n invalid={isInvalid}\n />\n );\n\n const hasChrome = Boolean(label || hint || helperText || error || required);\n const renderedInput = hasChrome ? (\n <FormField\n label={label}\n hint={hint}\n helperText={helperText}\n error={error}\n required={required}\n >\n {inputNode}\n </FormField>\n ) : inputNode;\n\n return (\n <div className={cn('money-input--component', 'space-y-2', className)}>\n {renderedInput}\n\n {!!showOriginalHintBlock && (\n <div className=\"flex items-center gap-1.5 text-muted-foreground\">\n <Info className=\"h-3.5 w-3.5 shrink-0\" />\n <Text size=\"xs\" type=\"secondary\">\n {otherFormatted || defaultEmptyFormatted}\n </Text>\n </div>\n )}\n\n {!!showMigrationBlock && (\n <Alert className=\"border-warning/50 bg-warning/5 py-2\">\n <AlertTriangle className=\"h-4 w-4 text-warning\" />\n <AlertDescription className=\"text-warning-foreground text-xs\">\n {migrationWarningMessage ??\n `Currency will be converted from ${recordCurrency ?? ''} to ${currency}.`}\n </AlertDescription>\n </Alert>\n )}\n </div>\n );\n}\n\nMoneyInput.displayName = 'MoneyInput';\n","/**\n * BooleanIndicator — labelled yes/no chip showing the truth of a value with an\n * optional check/cross icon. Use for compact metadata grids where each row\n * answers a single boolean question. Strings overridable for i18n.\n */\nimport { CheckCircle2, XCircle } from 'lucide-react';\nimport React from 'react';\nimport { Badge, type ComposedBadgeVariant } from '@/components/base/badge';\nimport { Text } from '@/components/typography';\nimport { useStrings, type StringsProp } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nexport interface BooleanIndicatorStrings {\n\ttrue: string;\n\tfalse: string;\n}\n\nexport const defaultBooleanIndicatorStrings: BooleanIndicatorStrings = {\n\ttrue: 'Yes',\n\tfalse: 'No',\n};\n\nexport type BooleanIndicatorProps = {\n\tlabel: React.ReactNode;\n\tvalue?: boolean | null;\n\tshowIcon?: boolean;\n\ttrueVariant?: ComposedBadgeVariant;\n\tfalseVariant?: ComposedBadgeVariant;\n\tclassName?: string;\n\tbadgeClassName?: string;\n\tstrings?: StringsProp<BooleanIndicatorStrings>;\n\t/** @deprecated Use `strings.true` instead. */\n\ttrueLabel?: React.ReactNode;\n\t/** @deprecated Use `strings.false` instead. */\n\tfalseLabel?: React.ReactNode;\n};\n\nexport function BooleanIndicator({\n\tlabel,\n\tvalue = false,\n\ttrueLabel,\n\tfalseLabel,\n\tshowIcon = true,\n\ttrueVariant = 'success',\n\tfalseVariant = 'secondary',\n\tclassName,\n\tbadgeClassName,\n\tstrings: stringsProp,\n}: BooleanIndicatorProps) {\n\tconst strings = useStrings(defaultBooleanIndicatorStrings, stringsProp);\n\tconst isTrue = Boolean(value);\n\tconst Icon = isTrue ? CheckCircle2 : XCircle;\n\tconst badgeVariant = isTrue ? trueVariant : falseVariant;\n\tconst fallback = isTrue ? trueLabel : falseLabel;\n\tconst content = fallback ?? (isTrue ? strings.true : strings.false);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn('boolean-indicator--component', \n\t\t\t\t'flex items-center justify-between gap-space-md rounded-radius border border-border/60 bg-muted/30 px-row-x py-row-y',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<Text size=\"inherit\" type=\"secondary\" className=\"text-xs uppercase tracking-wide\">\n\t\t\t\t{label}\n\t\t\t</Text>\n\t\t\t<Badge\n\t\t\t\tvariant={badgeVariant}\n\t\t\t\tclassName={cn('whitespace-nowrap', badgeClassName)}\n\t\t\t>\n\t\t\t\t{!!showIcon && <Icon className=\"size-icon\" />}\n\t\t\t\t{content}\n\t\t\t</Badge>\n\t\t</div>\n\t);\n}\n\nBooleanIndicator.displayName = 'BooleanIndicator';\n\nexport default BooleanIndicator;\n","import { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Empty({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty\"\n className={cn(\n \"gap-4 rounded-lg border-dashed p-12 flex w-full min-w-0 flex-1 flex-col items-center justify-center text-center text-balance\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction EmptyHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty-header\"\n className={cn(\n \"gap-2 flex max-w-sm flex-col items-center\",\n className\n )}\n {...props}\n />\n )\n}\n\nconst emptyMediaVariants = cva(\n \"mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"bg-transparent\",\n icon: \"bg-muted text-foreground flex size-10 shrink-0 items-center justify-center rounded-lg [&_svg:not([class*='size-'])]:size-6\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction EmptyMedia({\n className,\n variant = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & VariantProps<typeof emptyMediaVariants>) {\n return (\n <div\n data-slot=\"empty-icon\"\n data-variant={variant}\n className={cn(emptyMediaVariants({ variant, className }))}\n {...props}\n />\n )\n}\n\nfunction EmptyTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty-title\"\n className={cn(\"text-lg font-medium tracking-tight\", className)}\n {...props}\n />\n )\n}\n\nfunction EmptyDescription({ className, ...props }: React.ComponentProps<\"p\">) {\n return (\n <div\n data-slot=\"empty-description\"\n className={cn(\n \"text-sm/relaxed text-muted-foreground [&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction EmptyContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"empty-content\"\n className={cn(\n \"gap-4 text-sm flex w-full max-w-sm min-w-0 flex-col items-center text-balance\",\n className\n )}\n {...props}\n />\n )\n}\n\nexport {\n Empty,\n EmptyHeader,\n EmptyTitle,\n EmptyDescription,\n EmptyContent,\n EmptyMedia,\n}\n","import { Progress as ProgressPrimitive } from \"@base-ui/react/progress\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Progress({\n className,\n children,\n value,\n ...props\n}: ProgressPrimitive.Root.Props) {\n return (\n <ProgressPrimitive.Root\n value={value}\n data-slot=\"progress\"\n className={cn(\"flex flex-wrap gap-3\", className)}\n {...props}\n >\n {children}\n <ProgressTrack>\n <ProgressIndicator />\n </ProgressTrack>\n </ProgressPrimitive.Root>\n )\n}\n\nfunction ProgressTrack({ className, ...props }: ProgressPrimitive.Track.Props) {\n return (\n <ProgressPrimitive.Track\n className={cn(\n \"bg-muted h-1.5 rounded-full relative flex w-full items-center overflow-x-hidden\",\n className\n )}\n data-slot=\"progress-track\"\n {...props}\n />\n )\n}\n\nfunction ProgressIndicator({\n className,\n ...props\n}: ProgressPrimitive.Indicator.Props) {\n return (\n <ProgressPrimitive.Indicator\n data-slot=\"progress-indicator\"\n className={cn(\"bg-primary h-full transition-all\", className)}\n {...props}\n />\n )\n}\n\nfunction ProgressLabel({ className, ...props }: ProgressPrimitive.Label.Props) {\n return (\n <ProgressPrimitive.Label\n className={cn(\"text-sm font-medium\", className)}\n data-slot=\"progress-label\"\n {...props}\n />\n )\n}\n\nfunction ProgressValue({ className, ...props }: ProgressPrimitive.Value.Props) {\n return (\n <ProgressPrimitive.Value\n className={cn(\"text-muted-foreground ml-auto text-sm tabular-nums\", className)}\n data-slot=\"progress-value\"\n {...props}\n />\n )\n}\n\nexport {\n Progress,\n ProgressTrack,\n ProgressIndicator,\n ProgressLabel,\n ProgressValue,\n}\n","import { formatHex, oklch } from 'culori';\nimport QR from 'qrcode';\nimport type { HTMLAttributes } from 'react';\nimport { useEffect, useState } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type QRCodeProps = HTMLAttributes<HTMLDivElement> & {\n\tdata: string;\n\tforeground?: string;\n\tbackground?: string;\n\trobustness?: 'L' | 'M' | 'Q' | 'H';\n};\n\nconst oklchRegex = /oklch\\\\(([.\\\\d-]+)\\\\s+([.\\\\d]+)\\\\s+([.\\\\d]+)\\\\)/;\n\nfunction getOklch(color: string, fallback: [number, number, number]) {\n\tconst oklchMatch = color.match(oklchRegex);\n\n\tif (!oklchMatch) {\n\t\treturn { l: fallback[0], c: fallback[1], h: fallback[2] };\n\t}\n\n\treturn {\n\t\tl: Number.parseFloat(oklchMatch[1]),\n\t\tc: Number.parseFloat(oklchMatch[2]),\n\t\th: Number.parseFloat(oklchMatch[3]),\n\t};\n}\n\nexport function QRCode({\n\tdata,\n\tforeground,\n\tbackground,\n\trobustness = 'M',\n\tclassName,\n\t...props\n}: QRCodeProps) {\n\tconst [svg, setSvg] = useState<string | null>(null);\n\n\tuseEffect(() => {\n\t\tconst generateQR = async () => {\n\t\t\ttry {\n\t\t\t\tconst text = String(data ?? '').trim();\n\t\t\t\tif (!text) {\n\t\t\t\t\tsetSvg(null);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst styles = getComputedStyle(document.documentElement);\n\t\t\t\tconst foregroundColor =\n\t\t\t\t\tforeground ?? styles.getPropertyValue('--foreground');\n\t\t\t\tconst backgroundColor =\n\t\t\t\t\tbackground ?? styles.getPropertyValue('--background');\n\n\t\t\t\tconst foregroundOklch = getOklch(foregroundColor, [\n\t\t\t\t\t0.21, 0.006, 285.885,\n\t\t\t\t]);\n\t\t\t\tconst backgroundOklch = getOklch(backgroundColor, [0.985, 0, 0]);\n\n\t\t\t\tconst newSvg = await QR.toString(text, {\n\t\t\t\t\ttype: 'svg',\n\t\t\t\t\tcolor: {\n\t\t\t\t\t\tdark: formatHex(\n\t\t\t\t\t\t\toklch({ mode: 'oklch', ...foregroundOklch }),\n\t\t\t\t\t\t),\n\t\t\t\t\t\tlight: formatHex(\n\t\t\t\t\t\t\toklch({ mode: 'oklch', ...backgroundOklch }),\n\t\t\t\t\t\t),\n\t\t\t\t\t},\n\t\t\t\t\twidth: 200,\n\t\t\t\t\terrorCorrectionLevel: robustness,\n\t\t\t\t\tmargin: 0,\n\t\t\t\t});\n\n\t\t\t\tsetSvg(newSvg);\n\t\t\t} catch {\n\t\t\t\t// QR generation failure (invalid data, oversized payload) — render falls\n\t\t\t\t// back to empty SVG; consumer can surface their own error from the parent.\n\t\t\t\tsetSvg('');\n\t\t\t}\n\t\t};\n\n\t\tvoid generateQR();\n\t}, [data, foreground, background, robustness]);\n\n\tif (!svg) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn('qr-code--component', 'size-full', '[&_svg]:size-full', className)}\n\t\t\tdangerouslySetInnerHTML={{ __html: svg }}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport default QRCode;\n\nQRCode.displayName = 'QRCode';\n"],"mappings":"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"}
@@ -1,42 +0,0 @@
1
- //#region src/components/base/forms/form-sizing.ts
2
- var e = {
3
- small: ["!h-control-sm", "text-xs"].join(" "),
4
- default: ["!h-control", "text-sm"].join(" ")
5
- }, t = {
6
- small: "px-control-sm py-space-xs",
7
- default: "px-control py-space-xs"
8
- }, n = {
9
- small: "gap-space-sm",
10
- default: "gap-space-md"
11
- }, r = {
12
- small: "size-icon-sm",
13
- default: "size-icon"
14
- }, i = {
15
- small: "ps-control-icon-sm",
16
- default: "ps-control-icon"
17
- }, a = {
18
- small: "pe-control-icon-sm",
19
- default: "pe-control-icon"
20
- }, o = {
21
- small: "ps-control-addon-sm",
22
- default: "ps-control-addon"
23
- }, s = {
24
- small: "pe-control-addon-sm",
25
- default: "pe-control-addon"
26
- }, c = {
27
- small: "pe-control-count-sm",
28
- default: "pe-control-count"
29
- }, l = {
30
- small: "min-h-control-sm",
31
- default: "min-h-control"
32
- }, u = {
33
- small: ["min-h-textarea-sm", "text-sm"].join(" "),
34
- default: ["min-h-textarea", "text-sm"].join(" ")
35
- };
36
- function d(e, t) {
37
- return e ?? t ?? "default";
38
- }
39
- //#endregion
40
- export { r as a, l as c, u as d, d as f, a as i, t as l, c as n, i as o, s as r, n as s, o as t, e as u };
41
-
42
- //# sourceMappingURL=form-sizing-C51oI3Di.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"form-sizing-C51oI3Di.js","names":[],"sources":["../../src/components/base/forms/form-sizing.ts"],"sourcesContent":["import type { FormControlSize, FormLabelSize } from '@/lib/ui-provider';\n\n// Important height utilities let our resolved height win against shadcn primitives that\n// bake their own `data-[size=*]:h-{n}` defaults (Select, DatePicker\n// trigger via Button, etc.). Without `!`, the primitive's\n// attribute-selector specificity beats our class-selector and every\n// non-Input field renders 4px taller than Input.\nexport const formControlSizeClasses: Record<FormControlSize, string> = {\n\tsmall: [\n\t\t'!h-control-sm',\n\t\t'text-xs',\n\t].join(' '),\n\tdefault: [\n\t\t'!h-control',\n\t\t'text-sm',\n\t].join(' '),\n};\n\nexport const formControlPaddingClasses: Record<FormControlSize, string> = {\n\tsmall: 'px-control-sm py-space-xs',\n\tdefault: 'px-control py-space-xs',\n};\n\nexport const formControlInlineGapClasses: Record<FormControlSize, string> = {\n\tsmall: 'gap-space-sm',\n\tdefault: 'gap-space-md',\n};\n\nexport const formControlIconClasses: Record<FormControlSize, string> = {\n\tsmall: 'size-icon-sm',\n\tdefault: 'size-icon',\n};\n\nexport const formControlIconOffsetClasses: Record<FormControlSize, string> = {\n\tsmall: 'ps-control-icon-sm',\n\tdefault: 'ps-control-icon',\n};\n\nexport const formControlEndIconOffsetClasses: Record<FormControlSize, string> = {\n\tsmall: 'pe-control-icon-sm',\n\tdefault: 'pe-control-icon',\n};\n\nexport const formControlAddonOffsetClasses: Record<FormControlSize, string> = {\n\tsmall: 'ps-control-addon-sm',\n\tdefault: 'ps-control-addon',\n};\n\nexport const formControlEndAddonOffsetClasses: Record<FormControlSize, string> = {\n\tsmall: 'pe-control-addon-sm',\n\tdefault: 'pe-control-addon',\n};\n\nexport const formControlCountOffsetClasses: Record<FormControlSize, string> = {\n\tsmall: 'pe-control-count-sm',\n\tdefault: 'pe-control-count',\n};\n\n/**\n * Min-heights matching `formControlSizeClasses` so multi-line trigger\n * variants (e.g. `RichSelect` showing wrapped descriptions) can keep the\n * size's vertical rhythm without locking to a fixed `h-{n}`.\n */\nexport const formControlMinHeightClasses: Record<FormControlSize, string> = {\n\tsmall: 'min-h-control-sm',\n\tdefault: 'min-h-control',\n};\n\n/**\n * Canonical \"input-shaped trigger\" chrome — used by any control that\n * renders as a button-style trigger but visually has to read as a form\n * field (DatePicker, TimePicker, the inner Select inside composite\n * fields, etc.). Mirrors `Input`'s `border-input rounded-md\n * bg-transparent focus-visible:ring` chrome (no shadow — the library\n * is intentionally flat) plus the size-driven height + horizontal\n * padding.\n *\n * Kept here so the chrome lives in exactly one place — when we tweak\n * the canonical input look, every trigger picks it up.\n */\nexport function formFieldTriggerClasses(size: FormControlSize): string {\n\treturn [\n\t\t'flex w-full items-center justify-between',\n\t\t'rounded-radius border border-input bg-transparent text-left font-normal',\n\t\t'shadow-none transition-[color,box-shadow] outline-none',\n\t\tformControlSizeClasses[size],\n\t\tformControlPaddingClasses[size],\n\t\tformControlInlineGapClasses[size],\n\t\t'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n\t\t'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',\n\t\t'disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n\t\t'hover:bg-transparent',\n\t].join(' ');\n}\n\nexport const formTextareaSizeClasses: Record<FormControlSize, string> = {\n\tsmall: [\n\t\t'min-h-textarea-sm',\n\t\t'text-sm',\n\t].join(' '),\n\tdefault: [\n\t\t'min-h-textarea',\n\t\t'text-sm',\n\t].join(' '),\n};\n\nexport const formLabelSizeClasses: Record<FormLabelSize, string> = {\n\tsmall: 'text-xs',\n\tdefault: 'text-sm',\n};\n\nexport function resolveFormControlSize(\n\tsizeProp: FormControlSize | undefined,\n\tdefaultControlSize: FormControlSize | undefined,\n): FormControlSize {\n\treturn sizeProp ?? defaultControlSize ?? 'default';\n}\n\nexport function resolveFormLabelSize(\n\tsizeProp: FormLabelSize | undefined,\n\tdefaultLabelSize: FormLabelSize | undefined,\n): FormLabelSize {\n\treturn sizeProp ?? defaultLabelSize ?? 'default';\n}\n"],"mappings":";AAOA,IAAa,IAA0D;CACtE,OAAO,CACN,iBACA,SACD,EAAE,KAAK,GAAG;CACV,SAAS,CACR,cACA,SACD,EAAE,KAAK,GAAG;AACX,GAEa,IAA6D;CACzE,OAAO;CACP,SAAS;AACV,GAEa,IAA+D;CAC3E,OAAO;CACP,SAAS;AACV,GAEa,IAA0D;CACtE,OAAO;CACP,SAAS;AACV,GAEa,IAAgE;CAC5E,OAAO;CACP,SAAS;AACV,GAEa,IAAmE;CAC/E,OAAO;CACP,SAAS;AACV,GAEa,IAAiE;CAC7E,OAAO;CACP,SAAS;AACV,GAEa,IAAoE;CAChF,OAAO;CACP,SAAS;AACV,GAEa,IAAiE;CAC7E,OAAO;CACP,SAAS;AACV,GAOa,IAA+D;CAC3E,OAAO;CACP,SAAS;AACV,GA6Ba,IAA2D;CACvE,OAAO,CACN,qBACA,SACD,EAAE,KAAK,GAAG;CACV,SAAS,CACR,kBACA,SACD,EAAE,KAAK,GAAG;AACX;AAOA,SAAgB,EACf,GACA,GACkB;CAClB,OAAO,KAAY,KAAsB;AAC1C"}
@@ -1,2 +0,0 @@
1
- var e={small:[`!h-control-sm`,`text-xs`].join(` `),default:[`!h-control`,`text-sm`].join(` `)},t={small:`px-control-sm py-space-xs`,default:`px-control py-space-xs`},n={small:`gap-space-sm`,default:`gap-space-md`},r={small:`size-icon-sm`,default:`size-icon`},i={small:`ps-control-icon-sm`,default:`ps-control-icon`},a={small:`pe-control-icon-sm`,default:`pe-control-icon`},o={small:`ps-control-addon-sm`,default:`ps-control-addon`},s={small:`pe-control-addon-sm`,default:`pe-control-addon`},c={small:`pe-control-count-sm`,default:`pe-control-count`},l={small:`min-h-control-sm`,default:`min-h-control`},u={small:[`min-h-textarea-sm`,`text-sm`].join(` `),default:[`min-h-textarea`,`text-sm`].join(` `)};function d(e,t){return e??t??`default`}Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,"f",{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return e}});
2
- //# sourceMappingURL=form-sizing-Co53Drri.cjs.map