admin-ui-starter-kit 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2352) hide show
  1. package/.agents/skills/component-library-rules/SKILL.md +980 -0
  2. package/.agents/skills/component-library-rules/references/api-patterns.md +332 -0
  3. package/.agents/skills/component-library-rules/references/audit-followups.md +395 -0
  4. package/.agents/skills/component-library-rules/references/base-wrapper.md +132 -0
  5. package/.agents/skills/component-library-rules/references/components/INDEX.json +94 -0
  6. package/.agents/skills/component-library-rules/references/components/INDEX.md +116 -0
  7. package/.agents/skills/component-library-rules/references/components/README.md +9 -0
  8. package/.agents/skills/component-library-rules/references/components/base__accordion.md +229 -0
  9. package/.agents/skills/component-library-rules/references/components/base__badge.md +68 -0
  10. package/.agents/skills/component-library-rules/references/components/base__buttons.md +330 -0
  11. package/.agents/skills/component-library-rules/references/components/base__cards.md +390 -0
  12. package/.agents/skills/component-library-rules/references/components/base__combobox.md +697 -0
  13. package/.agents/skills/component-library-rules/references/components/base__copyable.md +143 -0
  14. package/.agents/skills/component-library-rules/references/components/base__currency.md +201 -0
  15. package/.agents/skills/component-library-rules/references/components/base__date-pickers.md +161 -0
  16. package/.agents/skills/component-library-rules/references/components/base__display.md +480 -0
  17. package/.agents/skills/component-library-rules/references/components/base__empty-state.md +244 -0
  18. package/.agents/skills/component-library-rules/references/components/base__event-calendar.md +186 -0
  19. package/.agents/skills/component-library-rules/references/components/base__forms.md +892 -0
  20. package/.agents/skills/component-library-rules/references/components/base__item.md +155 -0
  21. package/.agents/skills/component-library-rules/references/components/base__map.md +111 -0
  22. package/.agents/skills/component-library-rules/references/components/base__metadata-list.md +338 -0
  23. package/.agents/skills/component-library-rules/references/components/base__navigation.md +293 -0
  24. package/.agents/skills/component-library-rules/references/components/base__spinner.md +89 -0
  25. package/.agents/skills/component-library-rules/references/components/base__table.md +449 -0
  26. package/.agents/skills/component-library-rules/references/components/base__typography.md +277 -0
  27. package/.agents/skills/component-library-rules/references/components/base__upload-tray.md +180 -0
  28. package/.agents/skills/component-library-rules/references/components/common__brand.md +81 -0
  29. package/.agents/skills/component-library-rules/references/components/composed__admin.md +128 -0
  30. package/.agents/skills/component-library-rules/references/components/composed__ai-elements.md +428 -0
  31. package/.agents/skills/component-library-rules/references/components/composed__ai-new.md +214 -0
  32. package/.agents/skills/component-library-rules/references/components/composed__ai.md +78 -0
  33. package/.agents/skills/component-library-rules/references/components/composed__api-key-list.md +114 -0
  34. package/.agents/skills/component-library-rules/references/components/composed__commerce-extras.md +230 -0
  35. package/.agents/skills/component-library-rules/references/components/composed__commerce.md +120 -0
  36. package/.agents/skills/component-library-rules/references/components/composed__contact-card.md +107 -0
  37. package/.agents/skills/component-library-rules/references/components/composed__course-card.md +157 -0
  38. package/.agents/skills/component-library-rules/references/components/composed__dark-surfaces.md +134 -0
  39. package/.agents/skills/component-library-rules/references/components/composed__dense-info.md +151 -0
  40. package/.agents/skills/component-library-rules/references/components/composed__feature-announcement.md +70 -0
  41. package/.agents/skills/component-library-rules/references/components/composed__giftcard-cards.md +129 -0
  42. package/.agents/skills/component-library-rules/references/components/composed__gradient-card.md +98 -0
  43. package/.agents/skills/component-library-rules/references/components/composed__invoice-header.md +75 -0
  44. package/.agents/skills/component-library-rules/references/components/composed__invoice-items.md +77 -0
  45. package/.agents/skills/component-library-rules/references/components/composed__invoice-mini.md +51 -0
  46. package/.agents/skills/component-library-rules/references/components/composed__invoice-table.md +69 -0
  47. package/.agents/skills/component-library-rules/references/components/composed__navigation-extras.md +80 -0
  48. package/.agents/skills/component-library-rules/references/components/composed__navigation.md +130 -0
  49. package/.agents/skills/component-library-rules/references/components/composed__onboarding-checklist.md +163 -0
  50. package/.agents/skills/component-library-rules/references/components/composed__timelines.md +233 -0
  51. package/.agents/skills/component-library-rules/references/components/composed__vendor-profile.md +75 -0
  52. package/.agents/skills/component-library-rules/references/components/features__activities.md +549 -0
  53. package/.agents/skills/component-library-rules/references/components/features__ai-chat.md +502 -0
  54. package/.agents/skills/component-library-rules/references/components/features__comments.md +394 -0
  55. package/.agents/skills/component-library-rules/references/components/features__enhanced-activities.md +394 -0
  56. package/.agents/skills/component-library-rules/references/components/features__event-log.md +369 -0
  57. package/.agents/skills/component-library-rules/references/components/features__filters.md +109 -0
  58. package/.agents/skills/component-library-rules/references/components/features__global-search.md +125 -0
  59. package/.agents/skills/component-library-rules/references/components/features__kanban.md +214 -0
  60. package/.agents/skills/component-library-rules/references/components/features__metrics-analytics-bar.md +84 -0
  61. package/.agents/skills/component-library-rules/references/components/features__metrics-analytics-cards.md +86 -0
  62. package/.agents/skills/component-library-rules/references/components/features__metrics-comparison.md +118 -0
  63. package/.agents/skills/component-library-rules/references/components/features__metrics-heatmap.md +63 -0
  64. package/.agents/skills/component-library-rules/references/components/features__metrics-inline-badge.md +53 -0
  65. package/.agents/skills/component-library-rules/references/components/features__metrics-kpi-row.md +69 -0
  66. package/.agents/skills/component-library-rules/references/components/features__metrics-micro-grid.md +80 -0
  67. package/.agents/skills/component-library-rules/references/components/features__metrics-overview.md +249 -0
  68. package/.agents/skills/component-library-rules/references/components/features__metrics-stat-cards.md +92 -0
  69. package/.agents/skills/component-library-rules/references/components/features__overlays.md +437 -0
  70. package/.agents/skills/component-library-rules/references/components/features__rich-text-editor.md +159 -0
  71. package/.agents/skills/component-library-rules/references/components/layout__layout-containers.md +142 -0
  72. package/.agents/skills/component-library-rules/references/components/layout__layout-header.md +217 -0
  73. package/.agents/skills/component-library-rules/references/components/layout__layout-page.md +165 -0
  74. package/.agents/skills/component-library-rules/references/components/layout__layout-sidebar.md +271 -0
  75. package/.agents/skills/component-library-rules/references/components/layout__layout-users.md +152 -0
  76. package/.agents/skills/component-library-rules/references/components/ui__alert.md +99 -0
  77. package/.agents/skills/component-library-rules/references/components/ui__avatar.md +100 -0
  78. package/.agents/skills/component-library-rules/references/components/ui__breadcrumb.md +90 -0
  79. package/.agents/skills/component-library-rules/references/components/ui__button.md +85 -0
  80. package/.agents/skills/component-library-rules/references/components/ui__calendar.md +52 -0
  81. package/.agents/skills/component-library-rules/references/components/ui__collapsible.md +64 -0
  82. package/.agents/skills/component-library-rules/references/components/ui__empty-item.md +89 -0
  83. package/.agents/skills/component-library-rules/references/components/ui__input-group.md +87 -0
  84. package/.agents/skills/component-library-rules/references/components/ui__inputs.md +90 -0
  85. package/.agents/skills/component-library-rules/references/components/ui__menus.md +131 -0
  86. package/.agents/skills/component-library-rules/references/components/ui__overlays.md +136 -0
  87. package/.agents/skills/component-library-rules/references/components/ui__pagination.md +77 -0
  88. package/.agents/skills/component-library-rules/references/components/ui__progress.md +55 -0
  89. package/.agents/skills/component-library-rules/references/components/ui__scroll-area.md +70 -0
  90. package/.agents/skills/component-library-rules/references/components/ui__separator.md +65 -0
  91. package/.agents/skills/component-library-rules/references/components/ui__skeleton.md +67 -0
  92. package/.agents/skills/component-library-rules/references/components/ui__sonner.md +58 -0
  93. package/.agents/skills/component-library-rules/references/components/ui__spinner.md +68 -0
  94. package/.agents/skills/component-library-rules/references/components/ui__tabs.md +55 -0
  95. package/.agents/skills/component-library-rules/references/components/ui__toggles-group.md +70 -0
  96. package/.agents/skills/component-library-rules/references/components/ui__toggles.md +115 -0
  97. package/.agents/skills/component-library-rules/references/components/ui__ui-badge.md +67 -0
  98. package/.agents/skills/component-library-rules/references/components/ui__ui-card.md +68 -0
  99. package/.agents/skills/component-library-rules/references/components/ui__ui-table.md +78 -0
  100. package/.agents/skills/component-library-rules/references/composed-domains.md +96 -0
  101. package/.agents/skills/component-library-rules/references/consumer-wiring.md +173 -0
  102. package/.agents/skills/component-library-rules/references/features-anatomy.md +287 -0
  103. package/.agents/skills/component-library-rules/references/form-field-pattern.md +161 -0
  104. package/.agents/skills/component-library-rules/references/history.md +502 -0
  105. package/.agents/skills/component-library-rules/references/import-paths.md +140 -0
  106. package/.agents/skills/component-library-rules/references/item-pattern.md +184 -0
  107. package/.agents/skills/component-library-rules/references/layout.md +120 -0
  108. package/.agents/skills/component-library-rules/references/new-feature.md +109 -0
  109. package/.agents/skills/component-library-rules/references/preview-pages.md +153 -0
  110. package/.agents/skills/component-library-rules/references/strings-pattern.md +123 -0
  111. package/.agents/skills/component-library-rules/references/testing.md +116 -0
  112. package/.agents/skills/component-library-rules/references/ui-provider.md +120 -0
  113. package/.agents/skills/component-library-rules/references/visual-eval.md +143 -0
  114. package/AGENTS.md +434 -0
  115. package/CHANGELOG.md +77 -0
  116. package/CLAUDE.md +41 -0
  117. package/CONTRIBUTING.md +91 -0
  118. package/INTEGRATION.md +115 -0
  119. package/LICENSE +21 -0
  120. package/PUBLISHING.md +129 -0
  121. package/README.md +379 -0
  122. package/dist/_shared/accordion-7rwpgJ1k.cjs +2 -0
  123. package/dist/_shared/accordion-7rwpgJ1k.cjs.map +1 -0
  124. package/dist/_shared/accordion-DcduCEIo.js +130 -0
  125. package/dist/_shared/accordion-DcduCEIo.js.map +1 -0
  126. package/dist/_shared/action-menu-D0u-q0q-.cjs +2 -0
  127. package/dist/_shared/action-menu-D0u-q0q-.cjs.map +1 -0
  128. package/dist/_shared/action-menu-DUBXdReV.js +96 -0
  129. package/dist/_shared/action-menu-DUBXdReV.js.map +1 -0
  130. package/dist/_shared/ai-artifact-C3R0god0.cjs +3 -0
  131. package/dist/_shared/ai-artifact-C3R0god0.cjs.map +1 -0
  132. package/dist/_shared/ai-artifact-DMjQv_Si.js +1068 -0
  133. package/dist/_shared/ai-artifact-DMjQv_Si.js.map +1 -0
  134. package/dist/_shared/alert-B2cuJGAA.cjs +2 -0
  135. package/dist/_shared/alert-B2cuJGAA.cjs.map +1 -0
  136. package/dist/_shared/alert-BKUmOI2e.js +48 -0
  137. package/dist/_shared/alert-BKUmOI2e.js.map +1 -0
  138. package/dist/_shared/avatar-BcYcRORH.cjs +2 -0
  139. package/dist/_shared/avatar-BcYcRORH.cjs.map +1 -0
  140. package/dist/_shared/avatar-CNzG6jSZ.js +52 -0
  141. package/dist/_shared/avatar-CNzG6jSZ.js.map +1 -0
  142. package/dist/_shared/badge-BbUN6W7E.js +108 -0
  143. package/dist/_shared/badge-BbUN6W7E.js.map +1 -0
  144. package/dist/_shared/badge-BjtDcU1M.cjs +2 -0
  145. package/dist/_shared/badge-BjtDcU1M.cjs.map +1 -0
  146. package/dist/_shared/breadcrumbs-DctwTld5.js +111 -0
  147. package/dist/_shared/breadcrumbs-DctwTld5.js.map +1 -0
  148. package/dist/_shared/breadcrumbs-m0-gCdNj.cjs +2 -0
  149. package/dist/_shared/breadcrumbs-m0-gCdNj.cjs.map +1 -0
  150. package/dist/_shared/button-BCABTFLE.js +46 -0
  151. package/dist/_shared/button-BCABTFLE.js.map +1 -0
  152. package/dist/_shared/button-Ck2qS42n.js +176 -0
  153. package/dist/_shared/button-Ck2qS42n.js.map +1 -0
  154. package/dist/_shared/button-DjJ-mDI1.cjs +2 -0
  155. package/dist/_shared/button-DjJ-mDI1.cjs.map +1 -0
  156. package/dist/_shared/button-DjacsNTg.cjs +2 -0
  157. package/dist/_shared/button-DjacsNTg.cjs.map +1 -0
  158. package/dist/_shared/buttons-BVnjQ-uE.js +143 -0
  159. package/dist/_shared/buttons-BVnjQ-uE.js.map +1 -0
  160. package/dist/_shared/buttons-BdY6igTr.cjs +2 -0
  161. package/dist/_shared/buttons-BdY6igTr.cjs.map +1 -0
  162. package/dist/_shared/card-radio-group--GP1xrz_.js +158 -0
  163. package/dist/_shared/card-radio-group--GP1xrz_.js.map +1 -0
  164. package/dist/_shared/card-radio-group-DnQsWozr.cjs +2 -0
  165. package/dist/_shared/card-radio-group-DnQsWozr.cjs.map +1 -0
  166. package/dist/_shared/chunk-D3uCBrYO.cjs +1 -0
  167. package/dist/_shared/combobox-DBrRE1Dr.cjs +2 -0
  168. package/dist/_shared/combobox-DBrRE1Dr.cjs.map +1 -0
  169. package/dist/_shared/combobox-DYztEJaw.js +746 -0
  170. package/dist/_shared/combobox-DYztEJaw.js.map +1 -0
  171. package/dist/_shared/command-COvgXQ8r.cjs +2 -0
  172. package/dist/_shared/command-COvgXQ8r.cjs.map +1 -0
  173. package/dist/_shared/command-CvZ6Emb8.js +39 -0
  174. package/dist/_shared/command-CvZ6Emb8.js.map +1 -0
  175. package/dist/_shared/command-DTFQIUVG.cjs +2 -0
  176. package/dist/_shared/command-DTFQIUVG.cjs.map +1 -0
  177. package/dist/_shared/command-Sq8XbHbA.js +123 -0
  178. package/dist/_shared/command-Sq8XbHbA.js.map +1 -0
  179. package/dist/_shared/comments-BOFU1GYY.js +945 -0
  180. package/dist/_shared/comments-BOFU1GYY.js.map +1 -0
  181. package/dist/_shared/comments-BbTYFzx6.cjs +2 -0
  182. package/dist/_shared/comments-BbTYFzx6.cjs.map +1 -0
  183. package/dist/_shared/containers-BthqdOhA.cjs +2 -0
  184. package/dist/_shared/containers-BthqdOhA.cjs.map +1 -0
  185. package/dist/_shared/containers-CD2xs1nk.js +19 -0
  186. package/dist/_shared/containers-CD2xs1nk.js.map +1 -0
  187. package/dist/_shared/content-container-CFfYbWoa.js +33 -0
  188. package/dist/_shared/content-container-CFfYbWoa.js.map +1 -0
  189. package/dist/_shared/content-container-CReiVugL.cjs +2 -0
  190. package/dist/_shared/content-container-CReiVugL.cjs.map +1 -0
  191. package/dist/_shared/copyable-CweQ72QI.cjs +2 -0
  192. package/dist/_shared/copyable-CweQ72QI.cjs.map +1 -0
  193. package/dist/_shared/copyable-JgsTp6ev.js +38 -0
  194. package/dist/_shared/copyable-JgsTp6ev.js.map +1 -0
  195. package/dist/_shared/date-picker-DI4b-SeE.cjs +2 -0
  196. package/dist/_shared/date-picker-DI4b-SeE.cjs.map +1 -0
  197. package/dist/_shared/date-picker-DTazvODY.js +1352 -0
  198. package/dist/_shared/date-picker-DTazvODY.js.map +1 -0
  199. package/dist/_shared/date-pickers-CLzuzmuc.cjs +2 -0
  200. package/dist/_shared/date-pickers-CLzuzmuc.cjs.map +1 -0
  201. package/dist/_shared/date-pickers-CWPxP3zy.js +330 -0
  202. package/dist/_shared/date-pickers-CWPxP3zy.js.map +1 -0
  203. package/dist/_shared/dialog-2MJmaj_d.js +101 -0
  204. package/dist/_shared/dialog-2MJmaj_d.js.map +1 -0
  205. package/dist/_shared/dialog-KKD0i1T8.cjs +2 -0
  206. package/dist/_shared/dialog-KKD0i1T8.cjs.map +1 -0
  207. package/dist/_shared/display-BCy1Ti7T.cjs +8 -0
  208. package/dist/_shared/display-BCy1Ti7T.cjs.map +1 -0
  209. package/dist/_shared/display-DUpkE2aS.js +1462 -0
  210. package/dist/_shared/display-DUpkE2aS.js.map +1 -0
  211. package/dist/_shared/dropdown-menu-BebBffUH.cjs +2 -0
  212. package/dist/_shared/dropdown-menu-BebBffUH.cjs.map +1 -0
  213. package/dist/_shared/dropdown-menu-xdGEynC8.js +147 -0
  214. package/dist/_shared/dropdown-menu-xdGEynC8.js.map +1 -0
  215. package/dist/_shared/form-field-rOj3cm6C.js +319 -0
  216. package/dist/_shared/form-field-rOj3cm6C.js.map +1 -0
  217. package/dist/_shared/form-field-rcyIIHjR.cjs +2 -0
  218. package/dist/_shared/form-field-rcyIIHjR.cjs.map +1 -0
  219. package/dist/_shared/form-sizing--bs_xPe2.cjs +2 -0
  220. package/dist/_shared/form-sizing--bs_xPe2.cjs.map +1 -0
  221. package/dist/_shared/form-sizing-CkKcs5fi.js +21 -0
  222. package/dist/_shared/form-sizing-CkKcs5fi.js.map +1 -0
  223. package/dist/_shared/format-BlVEsPyT.js +48 -0
  224. package/dist/_shared/format-BlVEsPyT.js.map +1 -0
  225. package/dist/_shared/format-DYVtSA2I.cjs +2 -0
  226. package/dist/_shared/format-DYVtSA2I.cjs.map +1 -0
  227. package/dist/_shared/forms-BAVsxxRk.js +3374 -0
  228. package/dist/_shared/forms-BAVsxxRk.js.map +1 -0
  229. package/dist/_shared/forms-DaZ3LsYc.cjs +2 -0
  230. package/dist/_shared/forms-DaZ3LsYc.cjs.map +1 -0
  231. package/dist/_shared/header-BtTMsQ5P.cjs +2 -0
  232. package/dist/_shared/header-BtTMsQ5P.cjs.map +1 -0
  233. package/dist/_shared/header-DpW4UWV6.js +369 -0
  234. package/dist/_shared/header-DpW4UWV6.js.map +1 -0
  235. package/dist/_shared/hooks-Bsm917yh.cjs +2 -0
  236. package/dist/_shared/hooks-Bsm917yh.cjs.map +1 -0
  237. package/dist/_shared/hooks-CX-SICd4.js +118 -0
  238. package/dist/_shared/hooks-CX-SICd4.js.map +1 -0
  239. package/dist/_shared/icon-badge-DGKpbo9_.cjs +2 -0
  240. package/dist/_shared/icon-badge-DGKpbo9_.cjs.map +1 -0
  241. package/dist/_shared/icon-badge-DoClA_9q.js +52 -0
  242. package/dist/_shared/icon-badge-DoClA_9q.js.map +1 -0
  243. package/dist/_shared/input-BXt-YtVs.cjs +2 -0
  244. package/dist/_shared/input-BXt-YtVs.cjs.map +1 -0
  245. package/dist/_shared/input-Bx4LeLhn.js +17 -0
  246. package/dist/_shared/input-Bx4LeLhn.js.map +1 -0
  247. package/dist/_shared/input-ChZGIhtS.cjs +2 -0
  248. package/dist/_shared/input-ChZGIhtS.cjs.map +1 -0
  249. package/dist/_shared/input-Cwv1-5jt.js +182 -0
  250. package/dist/_shared/input-Cwv1-5jt.js.map +1 -0
  251. package/dist/_shared/item-BmTYKzEb.js +224 -0
  252. package/dist/_shared/item-BmTYKzEb.js.map +1 -0
  253. package/dist/_shared/item-BtR-bz96.cjs +2 -0
  254. package/dist/_shared/item-BtR-bz96.cjs.map +1 -0
  255. package/dist/_shared/mentions-DVCjaO_z.cjs +2 -0
  256. package/dist/_shared/mentions-DVCjaO_z.cjs.map +1 -0
  257. package/dist/_shared/mentions-DzG8mX5H.js +493 -0
  258. package/dist/_shared/mentions-DzG8mX5H.js.map +1 -0
  259. package/dist/_shared/money-display-B5oxCs_0.cjs +2 -0
  260. package/dist/_shared/money-display-B5oxCs_0.cjs.map +1 -0
  261. package/dist/_shared/money-display-C0wI02ou.js +198 -0
  262. package/dist/_shared/money-display-C0wI02ou.js.map +1 -0
  263. package/dist/_shared/navigation-BA2nsTgU.cjs +2 -0
  264. package/dist/_shared/navigation-BA2nsTgU.cjs.map +1 -0
  265. package/dist/_shared/navigation-DHyaf-RZ.js +420 -0
  266. package/dist/_shared/navigation-DHyaf-RZ.js.map +1 -0
  267. package/dist/_shared/overlays-Kl6Gp6WR.js +633 -0
  268. package/dist/_shared/overlays-Kl6Gp6WR.js.map +1 -0
  269. package/dist/_shared/overlays-W6j-Pe1L.cjs +2 -0
  270. package/dist/_shared/overlays-W6j-Pe1L.cjs.map +1 -0
  271. package/dist/_shared/page-DROZhtWT.js +263 -0
  272. package/dist/_shared/page-DROZhtWT.js.map +1 -0
  273. package/dist/_shared/page-lh9Rcx_d.cjs +2 -0
  274. package/dist/_shared/page-lh9Rcx_d.cjs.map +1 -0
  275. package/dist/_shared/popover-BTEwjJZS.cjs +2 -0
  276. package/dist/_shared/popover-BTEwjJZS.cjs.map +1 -0
  277. package/dist/_shared/popover-CF9VWt-l.js +83 -0
  278. package/dist/_shared/popover-CF9VWt-l.js.map +1 -0
  279. package/dist/_shared/popover-menu-BYesl29w.js +95 -0
  280. package/dist/_shared/popover-menu-BYesl29w.js.map +1 -0
  281. package/dist/_shared/popover-menu-DF9sWz61.cjs +2 -0
  282. package/dist/_shared/popover-menu-DF9sWz61.cjs.map +1 -0
  283. package/dist/_shared/rich-text-editor-UZghkgsh.cjs +2 -0
  284. package/dist/_shared/rich-text-editor-UZghkgsh.cjs.map +1 -0
  285. package/dist/_shared/rich-text-editor-fUeuK-rY.js +608 -0
  286. package/dist/_shared/rich-text-editor-fUeuK-rY.js.map +1 -0
  287. package/dist/_shared/scroll-area-XJLcCczs.js +41 -0
  288. package/dist/_shared/scroll-area-XJLcCczs.js.map +1 -0
  289. package/dist/_shared/scroll-area-y8ZJoS97.cjs +2 -0
  290. package/dist/_shared/scroll-area-y8ZJoS97.cjs.map +1 -0
  291. package/dist/_shared/select-D8MYF4f7.js +85 -0
  292. package/dist/_shared/select-D8MYF4f7.js.map +1 -0
  293. package/dist/_shared/select-DxAiUfpM.cjs +2 -0
  294. package/dist/_shared/select-DxAiUfpM.cjs.map +1 -0
  295. package/dist/_shared/separator-BazqiQ9s.js +16 -0
  296. package/dist/_shared/separator-BazqiQ9s.js.map +1 -0
  297. package/dist/_shared/separator-DSkXMOXq.cjs +2 -0
  298. package/dist/_shared/separator-DSkXMOXq.cjs.map +1 -0
  299. package/dist/_shared/sheet-7iHOs-IU.js +100 -0
  300. package/dist/_shared/sheet-7iHOs-IU.js.map +1 -0
  301. package/dist/_shared/sheet-qKtoyxgi.cjs +2 -0
  302. package/dist/_shared/sheet-qKtoyxgi.cjs.map +1 -0
  303. package/dist/_shared/sidebar-CaTUJ3t-.js +537 -0
  304. package/dist/_shared/sidebar-CaTUJ3t-.js.map +1 -0
  305. package/dist/_shared/sidebar-DVjfsm-f.cjs +2 -0
  306. package/dist/_shared/sidebar-DVjfsm-f.cjs.map +1 -0
  307. package/dist/_shared/sidebar-aV5DVAVg.js +371 -0
  308. package/dist/_shared/sidebar-aV5DVAVg.js.map +1 -0
  309. package/dist/_shared/sidebar-mL0jSJ8u.cjs +2 -0
  310. package/dist/_shared/sidebar-mL0jSJ8u.cjs.map +1 -0
  311. package/dist/_shared/skeleton-Bwv_j9jJ.cjs +2 -0
  312. package/dist/_shared/skeleton-Bwv_j9jJ.cjs.map +1 -0
  313. package/dist/_shared/skeleton-DyKa-Ed-.js +14 -0
  314. package/dist/_shared/skeleton-DyKa-Ed-.js.map +1 -0
  315. package/dist/_shared/slot-ClIPTht1.cjs +2 -0
  316. package/dist/_shared/slot-ClIPTht1.cjs.map +1 -0
  317. package/dist/_shared/slot-CrS_VEVl.js +18 -0
  318. package/dist/_shared/slot-CrS_VEVl.js.map +1 -0
  319. package/dist/_shared/smart-card-Ddsjvf7r.cjs +2 -0
  320. package/dist/_shared/smart-card-Ddsjvf7r.cjs.map +1 -0
  321. package/dist/_shared/smart-card-hJ01usWt.js +360 -0
  322. package/dist/_shared/smart-card-hJ01usWt.js.map +1 -0
  323. package/dist/_shared/spinner-D-pcMBt1.js +67 -0
  324. package/dist/_shared/spinner-D-pcMBt1.js.map +1 -0
  325. package/dist/_shared/spinner-zbmhn0vE.cjs +2 -0
  326. package/dist/_shared/spinner-zbmhn0vE.cjs.map +1 -0
  327. package/dist/_shared/switch-C5J37LMI.cjs +2 -0
  328. package/dist/_shared/switch-C5J37LMI.cjs.map +1 -0
  329. package/dist/_shared/switch-ClGgHcEb.js +51 -0
  330. package/dist/_shared/switch-ClGgHcEb.js.map +1 -0
  331. package/dist/_shared/text-DBnY6fcL.cjs +2 -0
  332. package/dist/_shared/text-DBnY6fcL.cjs.map +1 -0
  333. package/dist/_shared/text-DIxMTECE.js +74 -0
  334. package/dist/_shared/text-DIxMTECE.js.map +1 -0
  335. package/dist/_shared/textarea-DeISZfHw.js +119 -0
  336. package/dist/_shared/textarea-DeISZfHw.js.map +1 -0
  337. package/dist/_shared/textarea-iR9txrty.cjs +2 -0
  338. package/dist/_shared/textarea-iR9txrty.cjs.map +1 -0
  339. package/dist/_shared/tooltip-CEqxHWxQ.js +49 -0
  340. package/dist/_shared/tooltip-CEqxHWxQ.js.map +1 -0
  341. package/dist/_shared/tooltip-DPv0LGr9.cjs +2 -0
  342. package/dist/_shared/tooltip-DPv0LGr9.cjs.map +1 -0
  343. package/dist/_shared/typography-BtPQBvSm.js +135 -0
  344. package/dist/_shared/typography-BtPQBvSm.js.map +1 -0
  345. package/dist/_shared/typography-DClleVWi.cjs +2 -0
  346. package/dist/_shared/typography-DClleVWi.cjs.map +1 -0
  347. package/dist/_shared/ui-provider-4qKSKMPd.js +85 -0
  348. package/dist/_shared/ui-provider-4qKSKMPd.js.map +1 -0
  349. package/dist/_shared/ui-provider-uiQgATj1.cjs +2 -0
  350. package/dist/_shared/ui-provider-uiQgATj1.cjs.map +1 -0
  351. package/dist/components/base/accordion/accordion-variants.d.ts +34 -0
  352. package/dist/components/base/accordion/accordion-variants.d.ts.map +1 -0
  353. package/dist/components/base/accordion/accordion.d.ts +20 -0
  354. package/dist/components/base/accordion/accordion.d.ts.map +1 -0
  355. package/dist/components/base/accordion/accordion.strings.d.ts +16 -0
  356. package/dist/components/base/accordion/accordion.strings.d.ts.map +1 -0
  357. package/dist/components/base/accordion/accordion.types.d.ts +68 -0
  358. package/dist/components/base/accordion/accordion.types.d.ts.map +1 -0
  359. package/dist/components/base/accordion/index.cjs +1 -0
  360. package/dist/components/base/accordion/index.d.ts +5 -0
  361. package/dist/components/base/accordion/index.d.ts.map +1 -0
  362. package/dist/components/base/accordion/index.js +2 -0
  363. package/dist/components/base/accordion/smart-accordion.d.ts +3 -0
  364. package/dist/components/base/accordion/smart-accordion.d.ts.map +1 -0
  365. package/dist/components/base/badge/badge.d.ts +24 -0
  366. package/dist/components/base/badge/badge.d.ts.map +1 -0
  367. package/dist/components/base/badge/index.cjs +1 -0
  368. package/dist/components/base/badge/index.d.ts +3 -0
  369. package/dist/components/base/badge/index.d.ts.map +1 -0
  370. package/dist/components/base/badge/index.js +2 -0
  371. package/dist/components/base/buttons/base-button.d.ts +21 -0
  372. package/dist/components/base/buttons/base-button.d.ts.map +1 -0
  373. package/dist/components/base/buttons/button.d.ts +19 -0
  374. package/dist/components/base/buttons/button.d.ts.map +1 -0
  375. package/dist/components/base/buttons/google-button.d.ts +7 -0
  376. package/dist/components/base/buttons/google-button.d.ts.map +1 -0
  377. package/dist/components/base/buttons/index.cjs +1 -0
  378. package/dist/components/base/buttons/index.d.ts +9 -0
  379. package/dist/components/base/buttons/index.d.ts.map +1 -0
  380. package/dist/components/base/buttons/index.js +3 -0
  381. package/dist/components/base/buttons/loader-button.d.ts +23 -0
  382. package/dist/components/base/buttons/loader-button.d.ts.map +1 -0
  383. package/dist/components/base/buttons/page-action-button.d.ts +14 -0
  384. package/dist/components/base/buttons/page-action-button.d.ts.map +1 -0
  385. package/dist/components/base/buttons/shopify-button.d.ts +20 -0
  386. package/dist/components/base/buttons/shopify-button.d.ts.map +1 -0
  387. package/dist/components/base/buttons/text-button.d.ts +21 -0
  388. package/dist/components/base/buttons/text-button.d.ts.map +1 -0
  389. package/dist/components/base/buttons/tooltip-button.d.ts +8 -0
  390. package/dist/components/base/buttons/tooltip-button.d.ts.map +1 -0
  391. package/dist/components/base/cards/index.cjs +1 -0
  392. package/dist/components/base/cards/index.d.ts +2 -0
  393. package/dist/components/base/cards/index.d.ts.map +1 -0
  394. package/dist/components/base/cards/index.js +2 -0
  395. package/dist/components/base/cards/partials/card-primitives.d.ts +8 -0
  396. package/dist/components/base/cards/partials/card-primitives.d.ts.map +1 -0
  397. package/dist/components/base/cards/partials/has-renderable-content.d.ts +9 -0
  398. package/dist/components/base/cards/partials/has-renderable-content.d.ts.map +1 -0
  399. package/dist/components/base/cards/partials/smart-card-actions-menu.d.ts +8 -0
  400. package/dist/components/base/cards/partials/smart-card-actions-menu.d.ts.map +1 -0
  401. package/dist/components/base/cards/partials/smart-card-alert.d.ts +11 -0
  402. package/dist/components/base/cards/partials/smart-card-alert.d.ts.map +1 -0
  403. package/dist/components/base/cards/partials/smart-card-header-row.d.ts +20 -0
  404. package/dist/components/base/cards/partials/smart-card-header-row.d.ts.map +1 -0
  405. package/dist/components/base/cards/partials/smart-card-skeleton.d.ts +11 -0
  406. package/dist/components/base/cards/partials/smart-card-skeleton.d.ts.map +1 -0
  407. package/dist/components/base/cards/smart-card.d.ts +7 -0
  408. package/dist/components/base/cards/smart-card.d.ts.map +1 -0
  409. package/dist/components/base/cards/smart-card.strings.d.ts +12 -0
  410. package/dist/components/base/cards/smart-card.strings.d.ts.map +1 -0
  411. package/dist/components/base/cards/smart-card.tokens.d.ts +39 -0
  412. package/dist/components/base/cards/smart-card.tokens.d.ts.map +1 -0
  413. package/dist/components/base/cards/smart-card.types.d.ts +85 -0
  414. package/dist/components/base/cards/smart-card.types.d.ts.map +1 -0
  415. package/dist/components/base/combobox/combobox.strings.d.ts +4 -0
  416. package/dist/components/base/combobox/combobox.strings.d.ts.map +1 -0
  417. package/dist/components/base/combobox/components/combobox-dropdown.d.ts +40 -0
  418. package/dist/components/base/combobox/components/combobox-dropdown.d.ts.map +1 -0
  419. package/dist/components/base/combobox/components/error-message.d.ts +15 -0
  420. package/dist/components/base/combobox/components/error-message.d.ts.map +1 -0
  421. package/dist/components/base/combobox/components/highlighted-text.d.ts +14 -0
  422. package/dist/components/base/combobox/components/highlighted-text.d.ts.map +1 -0
  423. package/dist/components/base/combobox/components/index.d.ts +14 -0
  424. package/dist/components/base/combobox/components/index.d.ts.map +1 -0
  425. package/dist/components/base/combobox/components/loading-more.d.ts +14 -0
  426. package/dist/components/base/combobox/components/loading-more.d.ts.map +1 -0
  427. package/dist/components/base/combobox/components/status-content.d.ts +17 -0
  428. package/dist/components/base/combobox/components/status-content.d.ts.map +1 -0
  429. package/dist/components/base/combobox/constants.d.ts +22 -0
  430. package/dist/components/base/combobox/constants.d.ts.map +1 -0
  431. package/dist/components/base/combobox/enhanced-combobox.d.ts +25 -0
  432. package/dist/components/base/combobox/enhanced-combobox.d.ts.map +1 -0
  433. package/dist/components/base/combobox/hooks/index.d.ts +12 -0
  434. package/dist/components/base/combobox/hooks/index.d.ts.map +1 -0
  435. package/dist/components/base/combobox/hooks/use-debounced-search.d.ts +11 -0
  436. package/dist/components/base/combobox/hooks/use-debounced-search.d.ts.map +1 -0
  437. package/dist/components/base/combobox/hooks/use-enhanced-combobox-core.d.ts +31 -0
  438. package/dist/components/base/combobox/hooks/use-enhanced-combobox-core.d.ts.map +1 -0
  439. package/dist/components/base/combobox/hooks/use-grouped-items.d.ts +10 -0
  440. package/dist/components/base/combobox/hooks/use-grouped-items.d.ts.map +1 -0
  441. package/dist/components/base/combobox/hooks/use-load-more.d.ts +13 -0
  442. package/dist/components/base/combobox/hooks/use-load-more.d.ts.map +1 -0
  443. package/dist/components/base/combobox/index.cjs +1 -0
  444. package/dist/components/base/combobox/index.d.ts +15 -0
  445. package/dist/components/base/combobox/index.d.ts.map +1 -0
  446. package/dist/components/base/combobox/index.js +2 -0
  447. package/dist/components/base/combobox/types.d.ts +77 -0
  448. package/dist/components/base/combobox/types.d.ts.map +1 -0
  449. package/dist/components/base/command/command.d.ts +29 -0
  450. package/dist/components/base/command/command.d.ts.map +1 -0
  451. package/dist/components/base/command/index.cjs +1 -0
  452. package/dist/components/base/command/index.d.ts +2 -0
  453. package/dist/components/base/command/index.d.ts.map +1 -0
  454. package/dist/components/base/command/index.js +3 -0
  455. package/dist/components/base/copyable/copyable.d.ts +23 -0
  456. package/dist/components/base/copyable/copyable.d.ts.map +1 -0
  457. package/dist/components/base/copyable/index.cjs +1 -0
  458. package/dist/components/base/copyable/index.d.ts +2 -0
  459. package/dist/components/base/copyable/index.d.ts.map +1 -0
  460. package/dist/components/base/copyable/index.js +2 -0
  461. package/dist/components/base/currency/currency-pair-preview.d.ts +30 -0
  462. package/dist/components/base/currency/currency-pair-preview.d.ts.map +1 -0
  463. package/dist/components/base/currency/hooks/index.d.ts +3 -0
  464. package/dist/components/base/currency/hooks/index.d.ts.map +1 -0
  465. package/dist/components/base/currency/hooks/use-currency.d.ts +39 -0
  466. package/dist/components/base/currency/hooks/use-currency.d.ts.map +1 -0
  467. package/dist/components/base/currency/index.cjs +1 -0
  468. package/dist/components/base/currency/index.d.ts +3 -0
  469. package/dist/components/base/currency/index.d.ts.map +1 -0
  470. package/dist/components/base/currency/index.js +2 -0
  471. package/dist/components/base/date-pickers/date-picker-footer.d.ts +14 -0
  472. package/dist/components/base/date-pickers/date-picker-footer.d.ts.map +1 -0
  473. package/dist/components/base/date-pickers/date-picker-header.d.ts +11 -0
  474. package/dist/components/base/date-pickers/date-picker-header.d.ts.map +1 -0
  475. package/dist/components/base/date-pickers/date-picker-helpers.d.ts +84 -0
  476. package/dist/components/base/date-pickers/date-picker-helpers.d.ts.map +1 -0
  477. package/dist/components/base/date-pickers/date-picker.d.ts +25 -0
  478. package/dist/components/base/date-pickers/date-picker.d.ts.map +1 -0
  479. package/dist/components/base/date-pickers/date-pickers.strings.d.ts +4 -0
  480. package/dist/components/base/date-pickers/date-pickers.strings.d.ts.map +1 -0
  481. package/dist/components/base/date-pickers/date-range-picker.d.ts +8 -0
  482. package/dist/components/base/date-pickers/date-range-picker.d.ts.map +1 -0
  483. package/dist/components/base/date-pickers/datepicker.types.d.ts +186 -0
  484. package/dist/components/base/date-pickers/datepicker.types.d.ts.map +1 -0
  485. package/dist/components/base/date-pickers/index.cjs +1 -0
  486. package/dist/components/base/date-pickers/index.d.ts +10 -0
  487. package/dist/components/base/date-pickers/index.d.ts.map +1 -0
  488. package/dist/components/base/date-pickers/index.js +3 -0
  489. package/dist/components/base/date-pickers/month-year-picker.d.ts +7 -0
  490. package/dist/components/base/date-pickers/month-year-picker.d.ts.map +1 -0
  491. package/dist/components/base/date-pickers/segmented-time-input.d.ts +26 -0
  492. package/dist/components/base/date-pickers/segmented-time-input.d.ts.map +1 -0
  493. package/dist/components/base/display/alert.d.ts +2 -0
  494. package/dist/components/base/display/alert.d.ts.map +1 -0
  495. package/dist/components/base/display/avatar.d.ts +2 -0
  496. package/dist/components/base/display/avatar.d.ts.map +1 -0
  497. package/dist/components/base/display/boolean-indicator.d.ts +27 -0
  498. package/dist/components/base/display/boolean-indicator.d.ts.map +1 -0
  499. package/dist/components/base/display/chart.d.ts +2 -0
  500. package/dist/components/base/display/chart.d.ts.map +1 -0
  501. package/dist/components/base/display/collapsible.d.ts +2 -0
  502. package/dist/components/base/display/collapsible.d.ts.map +1 -0
  503. package/dist/components/base/display/date-block.d.ts +40 -0
  504. package/dist/components/base/display/date-block.d.ts.map +1 -0
  505. package/dist/components/base/display/dialog.d.ts +2 -0
  506. package/dist/components/base/display/dialog.d.ts.map +1 -0
  507. package/dist/components/base/display/empty-state/empty-state.d.ts +3 -0
  508. package/dist/components/base/display/empty-state/empty-state.d.ts.map +1 -0
  509. package/dist/components/base/display/empty-state/empty-state.strings.d.ts +18 -0
  510. package/dist/components/base/display/empty-state/empty-state.strings.d.ts.map +1 -0
  511. package/dist/components/base/display/empty-state/empty-state.types.d.ts +85 -0
  512. package/dist/components/base/display/empty-state/empty-state.types.d.ts.map +1 -0
  513. package/dist/components/base/display/empty-state/index.d.ts +5 -0
  514. package/dist/components/base/display/empty-state/index.d.ts.map +1 -0
  515. package/dist/components/base/display/empty-state/partials/illustrations/document-stack.d.ts +11 -0
  516. package/dist/components/base/display/empty-state/partials/illustrations/document-stack.d.ts.map +1 -0
  517. package/dist/components/base/display/empty-state/partials/illustrations/inbox-clean.d.ts +11 -0
  518. package/dist/components/base/display/empty-state/partials/illustrations/inbox-clean.d.ts.map +1 -0
  519. package/dist/components/base/display/empty-state/partials/illustrations/index.d.ts +25 -0
  520. package/dist/components/base/display/empty-state/partials/illustrations/index.d.ts.map +1 -0
  521. package/dist/components/base/display/empty-state/partials/illustrations/search-glass.d.ts +11 -0
  522. package/dist/components/base/display/empty-state/partials/illustrations/search-glass.d.ts.map +1 -0
  523. package/dist/components/base/display/empty-state/partials/illustrations/stacked-cards.d.ts +13 -0
  524. package/dist/components/base/display/empty-state/partials/illustrations/stacked-cards.d.ts.map +1 -0
  525. package/dist/components/base/display/empty-state/partials/illustrations/users-circle.d.ts +11 -0
  526. package/dist/components/base/display/empty-state/partials/illustrations/users-circle.d.ts.map +1 -0
  527. package/dist/components/base/display/fields/email-display.d.ts +22 -0
  528. package/dist/components/base/display/fields/email-display.d.ts.map +1 -0
  529. package/dist/components/base/display/fields/index.d.ts +4 -0
  530. package/dist/components/base/display/fields/index.d.ts.map +1 -0
  531. package/dist/components/base/display/fields/phone-display.d.ts +22 -0
  532. package/dist/components/base/display/fields/phone-display.d.ts.map +1 -0
  533. package/dist/components/base/display/fields/url-display.d.ts +28 -0
  534. package/dist/components/base/display/fields/url-display.d.ts.map +1 -0
  535. package/dist/components/base/display/icon-badge/icon-badge.d.ts +25 -0
  536. package/dist/components/base/display/icon-badge/icon-badge.d.ts.map +1 -0
  537. package/dist/components/base/display/icon-badge/index.d.ts +2 -0
  538. package/dist/components/base/display/icon-badge/index.d.ts.map +1 -0
  539. package/dist/components/base/display/index.cjs +1 -0
  540. package/dist/components/base/display/index.d.ts +31 -0
  541. package/dist/components/base/display/index.d.ts.map +1 -0
  542. package/dist/components/base/display/index.js +11 -0
  543. package/dist/components/base/display/inline-stat/index.d.ts +2 -0
  544. package/dist/components/base/display/inline-stat/index.d.ts.map +1 -0
  545. package/dist/components/base/display/inline-stat/inline-stat.d.ts +16 -0
  546. package/dist/components/base/display/inline-stat/inline-stat.d.ts.map +1 -0
  547. package/dist/components/base/display/metadata/index.d.ts +3 -0
  548. package/dist/components/base/display/metadata/index.d.ts.map +1 -0
  549. package/dist/components/base/display/metadata/metadata-list.d.ts +42 -0
  550. package/dist/components/base/display/metadata/metadata-list.d.ts.map +1 -0
  551. package/dist/components/base/display/metadata/metadata-list.strings.d.ts +19 -0
  552. package/dist/components/base/display/metadata/metadata-list.strings.d.ts.map +1 -0
  553. package/dist/components/base/display/money-display.d.ts +62 -0
  554. package/dist/components/base/display/money-display.d.ts.map +1 -0
  555. package/dist/components/base/display/money-input.d.ts +51 -0
  556. package/dist/components/base/display/money-input.d.ts.map +1 -0
  557. package/dist/components/base/display/notification-banner.d.ts +19 -0
  558. package/dist/components/base/display/notification-banner.d.ts.map +1 -0
  559. package/dist/components/base/display/numeric-value/index.d.ts +2 -0
  560. package/dist/components/base/display/numeric-value/index.d.ts.map +1 -0
  561. package/dist/components/base/display/numeric-value/numeric-value.d.ts +26 -0
  562. package/dist/components/base/display/numeric-value/numeric-value.d.ts.map +1 -0
  563. package/dist/components/base/display/placeholder-pattern.d.ts +8 -0
  564. package/dist/components/base/display/placeholder-pattern.d.ts.map +1 -0
  565. package/dist/components/base/display/progress.d.ts +2 -0
  566. package/dist/components/base/display/progress.d.ts.map +1 -0
  567. package/dist/components/base/display/qr-code.d.ts +13 -0
  568. package/dist/components/base/display/qr-code.d.ts.map +1 -0
  569. package/dist/components/base/display/scroll-area.d.ts +2 -0
  570. package/dist/components/base/display/scroll-area.d.ts.map +1 -0
  571. package/dist/components/base/display/section-header/index.d.ts +2 -0
  572. package/dist/components/base/display/section-header/index.d.ts.map +1 -0
  573. package/dist/components/base/display/section-header/section-header.d.ts +14 -0
  574. package/dist/components/base/display/section-header/section-header.d.ts.map +1 -0
  575. package/dist/components/base/display/separator.d.ts +2 -0
  576. package/dist/components/base/display/separator.d.ts.map +1 -0
  577. package/dist/components/base/display/show-if.d.ts +12 -0
  578. package/dist/components/base/display/show-if.d.ts.map +1 -0
  579. package/dist/components/base/display/skeleton.d.ts +2 -0
  580. package/dist/components/base/display/skeleton.d.ts.map +1 -0
  581. package/dist/components/base/display/stacked-avatars.d.ts +34 -0
  582. package/dist/components/base/display/stacked-avatars.d.ts.map +1 -0
  583. package/dist/components/base/display/throttle-alert.d.ts +17 -0
  584. package/dist/components/base/display/throttle-alert.d.ts.map +1 -0
  585. package/dist/components/base/display/tooltip.d.ts +2 -0
  586. package/dist/components/base/display/tooltip.d.ts.map +1 -0
  587. package/dist/components/base/display/user-cell/index.d.ts +2 -0
  588. package/dist/components/base/display/user-cell/index.d.ts.map +1 -0
  589. package/dist/components/base/display/user-cell/user-cell.d.ts +19 -0
  590. package/dist/components/base/display/user-cell/user-cell.d.ts.map +1 -0
  591. package/dist/components/base/display/visually-hidden.d.ts +15 -0
  592. package/dist/components/base/display/visually-hidden.d.ts.map +1 -0
  593. package/dist/components/base/event-calendar/colors.d.ts +19 -0
  594. package/dist/components/base/event-calendar/colors.d.ts.map +1 -0
  595. package/dist/components/base/event-calendar/event-calendar-day-cell.d.ts +6 -0
  596. package/dist/components/base/event-calendar/event-calendar-day-cell.d.ts.map +1 -0
  597. package/dist/components/base/event-calendar/event-calendar-event-badge.d.ts +6 -0
  598. package/dist/components/base/event-calendar/event-calendar-event-badge.d.ts.map +1 -0
  599. package/dist/components/base/event-calendar/event-calendar-event-card.d.ts +15 -0
  600. package/dist/components/base/event-calendar/event-calendar-event-card.d.ts.map +1 -0
  601. package/dist/components/base/event-calendar/event-calendar-header.d.ts +9 -0
  602. package/dist/components/base/event-calendar/event-calendar-header.d.ts.map +1 -0
  603. package/dist/components/base/event-calendar/event-calendar-legend.d.ts +6 -0
  604. package/dist/components/base/event-calendar/event-calendar-legend.d.ts.map +1 -0
  605. package/dist/components/base/event-calendar/event-calendar.d.ts +6 -0
  606. package/dist/components/base/event-calendar/event-calendar.d.ts.map +1 -0
  607. package/dist/components/base/event-calendar/event-calendar.types.d.ts +283 -0
  608. package/dist/components/base/event-calendar/event-calendar.types.d.ts.map +1 -0
  609. package/dist/components/base/event-calendar/index.cjs +2 -0
  610. package/dist/components/base/event-calendar/index.cjs.map +1 -0
  611. package/dist/components/base/event-calendar/index.d.ts +12 -0
  612. package/dist/components/base/event-calendar/index.d.ts.map +1 -0
  613. package/dist/components/base/event-calendar/index.js +700 -0
  614. package/dist/components/base/event-calendar/index.js.map +1 -0
  615. package/dist/components/base/event-calendar/use-event-calendar-data.d.ts +16 -0
  616. package/dist/components/base/event-calendar/use-event-calendar-data.d.ts.map +1 -0
  617. package/dist/components/base/event-calendar/use-event-calendar.d.ts +14 -0
  618. package/dist/components/base/event-calendar/use-event-calendar.d.ts.map +1 -0
  619. package/dist/components/base/forms/fields/avatar-upload.d.ts +25 -0
  620. package/dist/components/base/forms/fields/avatar-upload.d.ts.map +1 -0
  621. package/dist/components/base/forms/fields/card-checkbox-group.d.ts +20 -0
  622. package/dist/components/base/forms/fields/card-checkbox-group.d.ts.map +1 -0
  623. package/dist/components/base/forms/fields/card-radio-group.d.ts +19 -0
  624. package/dist/components/base/forms/fields/card-radio-group.d.ts.map +1 -0
  625. package/dist/components/base/forms/fields/checkbox.d.ts +2 -0
  626. package/dist/components/base/forms/fields/checkbox.d.ts.map +1 -0
  627. package/dist/components/base/forms/fields/choice-types.d.ts +42 -0
  628. package/dist/components/base/forms/fields/choice-types.d.ts.map +1 -0
  629. package/dist/components/base/forms/fields/coordinates-input.d.ts +60 -0
  630. package/dist/components/base/forms/fields/coordinates-input.d.ts.map +1 -0
  631. package/dist/components/base/forms/fields/currency-input.d.ts +37 -0
  632. package/dist/components/base/forms/fields/currency-input.d.ts.map +1 -0
  633. package/dist/components/base/forms/fields/date-time-input.d.ts +23 -0
  634. package/dist/components/base/forms/fields/date-time-input.d.ts.map +1 -0
  635. package/dist/components/base/forms/fields/decimal-input.d.ts +47 -0
  636. package/dist/components/base/forms/fields/decimal-input.d.ts.map +1 -0
  637. package/dist/components/base/forms/fields/dimensions-input.d.ts +81 -0
  638. package/dist/components/base/forms/fields/dimensions-input.d.ts.map +1 -0
  639. package/dist/components/base/forms/fields/dropzone.d.ts +25 -0
  640. package/dist/components/base/forms/fields/dropzone.d.ts.map +1 -0
  641. package/dist/components/base/forms/fields/file-upload.d.ts +30 -0
  642. package/dist/components/base/forms/fields/file-upload.d.ts.map +1 -0
  643. package/dist/components/base/forms/fields/hooks/index.d.ts +2 -0
  644. package/dist/components/base/forms/fields/hooks/index.d.ts.map +1 -0
  645. package/dist/components/base/forms/fields/hooks/use-form-field-state.d.ts +49 -0
  646. package/dist/components/base/forms/fields/hooks/use-form-field-state.d.ts.map +1 -0
  647. package/dist/components/base/forms/fields/image-upload.d.ts +45 -0
  648. package/dist/components/base/forms/fields/image-upload.d.ts.map +1 -0
  649. package/dist/components/base/forms/fields/index.d.ts +55 -0
  650. package/dist/components/base/forms/fields/index.d.ts.map +1 -0
  651. package/dist/components/base/forms/fields/input.d.ts +29 -0
  652. package/dist/components/base/forms/fields/input.d.ts.map +1 -0
  653. package/dist/components/base/forms/fields/key-value-editor.d.ts +38 -0
  654. package/dist/components/base/forms/fields/key-value-editor.d.ts.map +1 -0
  655. package/dist/components/base/forms/fields/list-radio-group.d.ts +14 -0
  656. package/dist/components/base/forms/fields/list-radio-group.d.ts.map +1 -0
  657. package/dist/components/base/forms/fields/list.d.ts +29 -0
  658. package/dist/components/base/forms/fields/list.d.ts.map +1 -0
  659. package/dist/components/base/forms/fields/localized-object-field.d.ts +36 -0
  660. package/dist/components/base/forms/fields/localized-object-field.d.ts.map +1 -0
  661. package/dist/components/base/forms/fields/localized-string-field.d.ts +26 -0
  662. package/dist/components/base/forms/fields/localized-string-field.d.ts.map +1 -0
  663. package/dist/components/base/forms/fields/localized-string-repeater.d.ts +35 -0
  664. package/dist/components/base/forms/fields/localized-string-repeater.d.ts.map +1 -0
  665. package/dist/components/base/forms/fields/media-gallery.d.ts +25 -0
  666. package/dist/components/base/forms/fields/media-gallery.d.ts.map +1 -0
  667. package/dist/components/base/forms/fields/money-input.d.ts +16 -0
  668. package/dist/components/base/forms/fields/money-input.d.ts.map +1 -0
  669. package/dist/components/base/forms/fields/object-repeater.d.ts +38 -0
  670. package/dist/components/base/forms/fields/object-repeater.d.ts.map +1 -0
  671. package/dist/components/base/forms/fields/percentage-input.d.ts +9 -0
  672. package/dist/components/base/forms/fields/percentage-input.d.ts.map +1 -0
  673. package/dist/components/base/forms/fields/phone-input.d.ts +47 -0
  674. package/dist/components/base/forms/fields/phone-input.d.ts.map +1 -0
  675. package/dist/components/base/forms/fields/pill-radio-group.d.ts +18 -0
  676. package/dist/components/base/forms/fields/pill-radio-group.d.ts.map +1 -0
  677. package/dist/components/base/forms/fields/repeater.d.ts +73 -0
  678. package/dist/components/base/forms/fields/repeater.d.ts.map +1 -0
  679. package/dist/components/base/forms/fields/repeaters.strings.d.ts +17 -0
  680. package/dist/components/base/forms/fields/repeaters.strings.d.ts.map +1 -0
  681. package/dist/components/base/forms/fields/rich-select.d.ts +53 -0
  682. package/dist/components/base/forms/fields/rich-select.d.ts.map +1 -0
  683. package/dist/components/base/forms/fields/rounding-mode-select.d.ts +16 -0
  684. package/dist/components/base/forms/fields/rounding-mode-select.d.ts.map +1 -0
  685. package/dist/components/base/forms/fields/select.d.ts +54 -0
  686. package/dist/components/base/forms/fields/select.d.ts.map +1 -0
  687. package/dist/components/base/forms/fields/slider.d.ts +46 -0
  688. package/dist/components/base/forms/fields/slider.d.ts.map +1 -0
  689. package/dist/components/base/forms/fields/string-repeater.d.ts +26 -0
  690. package/dist/components/base/forms/fields/string-repeater.d.ts.map +1 -0
  691. package/dist/components/base/forms/fields/switch-card.d.ts +19 -0
  692. package/dist/components/base/forms/fields/switch-card.d.ts.map +1 -0
  693. package/dist/components/base/forms/fields/switch.d.ts +23 -0
  694. package/dist/components/base/forms/fields/switch.d.ts.map +1 -0
  695. package/dist/components/base/forms/fields/tags-input.d.ts +65 -0
  696. package/dist/components/base/forms/fields/tags-input.d.ts.map +1 -0
  697. package/dist/components/base/forms/fields/textarea.d.ts +26 -0
  698. package/dist/components/base/forms/fields/textarea.d.ts.map +1 -0
  699. package/dist/components/base/forms/fields/time-picker.d.ts +58 -0
  700. package/dist/components/base/forms/fields/time-picker.d.ts.map +1 -0
  701. package/dist/components/base/forms/fields/toggle-field.d.ts +21 -0
  702. package/dist/components/base/forms/fields/toggle-field.d.ts.map +1 -0
  703. package/dist/components/base/forms/fields/upload-progress-list.d.ts +42 -0
  704. package/dist/components/base/forms/fields/upload-progress-list.d.ts.map +1 -0
  705. package/dist/components/base/forms/fields/upload-tray.d.ts +42 -0
  706. package/dist/components/base/forms/fields/upload-tray.d.ts.map +1 -0
  707. package/dist/components/base/forms/fields/weight-input.d.ts +59 -0
  708. package/dist/components/base/forms/fields/weight-input.d.ts.map +1 -0
  709. package/dist/components/base/forms/form-field.d.ts +33 -0
  710. package/dist/components/base/forms/form-field.d.ts.map +1 -0
  711. package/dist/components/base/forms/form-sizing.d.ts +26 -0
  712. package/dist/components/base/forms/form-sizing.d.ts.map +1 -0
  713. package/dist/components/base/forms/index.cjs +1 -0
  714. package/dist/components/base/forms/index.d.ts +4 -0
  715. package/dist/components/base/forms/index.d.ts.map +1 -0
  716. package/dist/components/base/forms/index.js +7 -0
  717. package/dist/components/base/forms/operation-password-form.d.ts +15 -0
  718. package/dist/components/base/forms/operation-password-form.d.ts.map +1 -0
  719. package/dist/components/base/index.d.ts.map +1 -0
  720. package/dist/components/base/item/index.cjs +1 -0
  721. package/dist/components/base/item/index.d.ts +3 -0
  722. package/dist/components/base/item/index.d.ts.map +1 -0
  723. package/dist/components/base/item/index.js +2 -0
  724. package/dist/components/base/item/item.d.ts +13 -0
  725. package/dist/components/base/item/item.d.ts.map +1 -0
  726. package/dist/components/base/item/item.types.d.ts +36 -0
  727. package/dist/components/base/item/item.types.d.ts.map +1 -0
  728. package/dist/components/base/map/index.cjs +2 -0
  729. package/dist/components/base/map/index.cjs.map +1 -0
  730. package/dist/components/base/map/index.d.ts +12 -0
  731. package/dist/components/base/map/index.d.ts.map +1 -0
  732. package/dist/components/base/map/index.js +861 -0
  733. package/dist/components/base/map/index.js.map +1 -0
  734. package/dist/components/base/map/map.d.ts +117 -0
  735. package/dist/components/base/map/map.d.ts.map +1 -0
  736. package/dist/components/base/map/place-autocomplete.d.ts +83 -0
  737. package/dist/components/base/map/place-autocomplete.d.ts.map +1 -0
  738. package/dist/components/base/navigation/action-menu.d.ts +36 -0
  739. package/dist/components/base/navigation/action-menu.d.ts.map +1 -0
  740. package/dist/components/base/navigation/aside-navigation-menu.d.ts +13 -0
  741. package/dist/components/base/navigation/aside-navigation-menu.d.ts.map +1 -0
  742. package/dist/components/base/navigation/breadcrumbs.d.ts +25 -0
  743. package/dist/components/base/navigation/breadcrumbs.d.ts.map +1 -0
  744. package/dist/components/base/navigation/dropdown-menu.d.ts +2 -0
  745. package/dist/components/base/navigation/dropdown-menu.d.ts.map +1 -0
  746. package/dist/components/base/navigation/index.cjs +1 -0
  747. package/dist/components/base/navigation/index.d.ts +12 -0
  748. package/dist/components/base/navigation/index.d.ts.map +1 -0
  749. package/dist/components/base/navigation/index.js +5 -0
  750. package/dist/components/base/navigation/language-switcher.d.ts +13 -0
  751. package/dist/components/base/navigation/language-switcher.d.ts.map +1 -0
  752. package/dist/components/base/navigation/navigation-tabs.d.ts +25 -0
  753. package/dist/components/base/navigation/navigation-tabs.d.ts.map +1 -0
  754. package/dist/components/base/navigation/overflow-tab-bar.d.ts +26 -0
  755. package/dist/components/base/navigation/overflow-tab-bar.d.ts.map +1 -0
  756. package/dist/components/base/navigation/page-header/index.d.ts +2 -0
  757. package/dist/components/base/navigation/page-header/index.d.ts.map +1 -0
  758. package/dist/components/base/navigation/page-header/page-header.d.ts +21 -0
  759. package/dist/components/base/navigation/page-header/page-header.d.ts.map +1 -0
  760. package/dist/components/base/navigation/section-nav/index.d.ts +2 -0
  761. package/dist/components/base/navigation/section-nav/index.d.ts.map +1 -0
  762. package/dist/components/base/navigation/section-nav/section-nav.d.ts +17 -0
  763. package/dist/components/base/navigation/section-nav/section-nav.d.ts.map +1 -0
  764. package/dist/components/base/navigation/side-nav.d.ts +30 -0
  765. package/dist/components/base/navigation/side-nav.d.ts.map +1 -0
  766. package/dist/components/base/navigation/tab-navigation-menu.d.ts +13 -0
  767. package/dist/components/base/navigation/tab-navigation-menu.d.ts.map +1 -0
  768. package/dist/components/base/navigation/tabs.d.ts +2 -0
  769. package/dist/components/base/navigation/tabs.d.ts.map +1 -0
  770. package/dist/components/base/popover/index.cjs +1 -0
  771. package/dist/components/base/popover/index.d.ts +2 -0
  772. package/dist/components/base/popover/index.d.ts.map +1 -0
  773. package/dist/components/base/popover/index.js +2 -0
  774. package/dist/components/base/popover/popover.d.ts +23 -0
  775. package/dist/components/base/popover/popover.d.ts.map +1 -0
  776. package/dist/components/base/popover-menu/index.cjs +1 -0
  777. package/dist/components/base/popover-menu/index.d.ts +4 -0
  778. package/dist/components/base/popover-menu/index.d.ts.map +1 -0
  779. package/dist/components/base/popover-menu/index.js +2 -0
  780. package/dist/components/base/popover-menu/popover-menu.d.ts +49 -0
  781. package/dist/components/base/popover-menu/popover-menu.d.ts.map +1 -0
  782. package/dist/components/base/popover-menu/popover-menu.types.d.ts +29 -0
  783. package/dist/components/base/popover-menu/popover-menu.types.d.ts.map +1 -0
  784. package/dist/components/base/sheet/index.cjs +1 -0
  785. package/dist/components/base/sheet/index.d.ts +2 -0
  786. package/dist/components/base/sheet/index.d.ts.map +1 -0
  787. package/dist/components/base/sheet/index.js +2 -0
  788. package/dist/components/base/sheet/sheet.d.ts +14 -0
  789. package/dist/components/base/sheet/sheet.d.ts.map +1 -0
  790. package/dist/components/base/sidebar/index.cjs +1 -0
  791. package/dist/components/base/sidebar/index.d.ts +2 -0
  792. package/dist/components/base/sidebar/index.d.ts.map +1 -0
  793. package/dist/components/base/sidebar/index.js +2 -0
  794. package/dist/components/base/sidebar/sidebar.d.ts +14 -0
  795. package/dist/components/base/sidebar/sidebar.d.ts.map +1 -0
  796. package/dist/components/base/spinner/index.cjs +1 -0
  797. package/dist/components/base/spinner/index.d.ts +2 -0
  798. package/dist/components/base/spinner/index.d.ts.map +1 -0
  799. package/dist/components/base/spinner/index.js +2 -0
  800. package/dist/components/base/spinner/spinner.d.ts +10 -0
  801. package/dist/components/base/spinner/spinner.d.ts.map +1 -0
  802. package/dist/components/base/table/column-visibility-toggle.d.ts +6 -0
  803. package/dist/components/base/table/column-visibility-toggle.d.ts.map +1 -0
  804. package/dist/components/base/table/data-table.d.ts +7 -0
  805. package/dist/components/base/table/data-table.d.ts.map +1 -0
  806. package/dist/components/base/table/filter-bar.d.ts +6 -0
  807. package/dist/components/base/table/filter-bar.d.ts.map +1 -0
  808. package/dist/components/base/table/hooks.d.ts +32 -0
  809. package/dist/components/base/table/hooks.d.ts.map +1 -0
  810. package/dist/components/base/table/index.cjs +2 -0
  811. package/dist/components/base/table/index.cjs.map +1 -0
  812. package/dist/components/base/table/index.d.ts +18 -0
  813. package/dist/components/base/table/index.d.ts.map +1 -0
  814. package/dist/components/base/table/index.js +1189 -0
  815. package/dist/components/base/table/index.js.map +1 -0
  816. package/dist/components/base/table/pagination.d.ts +6 -0
  817. package/dist/components/base/table/pagination.d.ts.map +1 -0
  818. package/dist/components/base/table/partials/cell-renderers.d.ts +62 -0
  819. package/dist/components/base/table/partials/cell-renderers.d.ts.map +1 -0
  820. package/dist/components/base/table/partials/cell-value.d.ts +41 -0
  821. package/dist/components/base/table/partials/cell-value.d.ts.map +1 -0
  822. package/dist/components/base/table/partials/density-toggle.d.ts +12 -0
  823. package/dist/components/base/table/partials/density-toggle.d.ts.map +1 -0
  824. package/dist/components/base/table/partials/table-link.d.ts +5 -0
  825. package/dist/components/base/table/partials/table-link.d.ts.map +1 -0
  826. package/dist/components/base/table/table-actions.d.ts +6 -0
  827. package/dist/components/base/table/table-actions.d.ts.map +1 -0
  828. package/dist/components/base/table/table-body.d.ts +6 -0
  829. package/dist/components/base/table/table-body.d.ts.map +1 -0
  830. package/dist/components/base/table/table-header.d.ts +6 -0
  831. package/dist/components/base/table/table-header.d.ts.map +1 -0
  832. package/dist/components/base/table/table-helpers.d.ts +40 -0
  833. package/dist/components/base/table/table-helpers.d.ts.map +1 -0
  834. package/dist/components/base/table/table-pagination.d.ts +6 -0
  835. package/dist/components/base/table/table-pagination.d.ts.map +1 -0
  836. package/dist/components/base/table/table-toolbar.d.ts +6 -0
  837. package/dist/components/base/table/table-toolbar.d.ts.map +1 -0
  838. package/dist/components/base/table/table.strings.d.ts +4 -0
  839. package/dist/components/base/table/table.strings.d.ts.map +1 -0
  840. package/dist/components/base/table/table.types.d.ts +298 -0
  841. package/dist/components/base/table/table.types.d.ts.map +1 -0
  842. package/dist/components/base/toaster/index.cjs +2 -0
  843. package/dist/components/base/toaster/index.cjs.map +1 -0
  844. package/dist/components/base/toaster/index.d.ts +2 -0
  845. package/dist/components/base/toaster/index.d.ts.map +1 -0
  846. package/dist/components/base/toaster/index.js +40 -0
  847. package/dist/components/base/toaster/index.js.map +1 -0
  848. package/dist/components/base/toaster/toaster.d.ts +7 -0
  849. package/dist/components/base/toaster/toaster.d.ts.map +1 -0
  850. package/dist/components/composed/admin/admin.strings.d.ts +32 -0
  851. package/dist/components/composed/admin/admin.strings.d.ts.map +1 -0
  852. package/dist/components/composed/admin/api-key-list/api-key-list.d.ts +3 -0
  853. package/dist/components/composed/admin/api-key-list/api-key-list.d.ts.map +1 -0
  854. package/dist/components/composed/admin/api-key-list/api-key-list.strings.d.ts +16 -0
  855. package/dist/components/composed/admin/api-key-list/api-key-list.strings.d.ts.map +1 -0
  856. package/dist/components/composed/admin/api-key-list/api-key-list.types.d.ts +55 -0
  857. package/dist/components/composed/admin/api-key-list/api-key-list.types.d.ts.map +1 -0
  858. package/dist/components/composed/admin/api-key-list/index.d.ts +4 -0
  859. package/dist/components/composed/admin/api-key-list/index.d.ts.map +1 -0
  860. package/dist/components/composed/admin/conversation-row/conversation-row.d.ts +6 -0
  861. package/dist/components/composed/admin/conversation-row/conversation-row.d.ts.map +1 -0
  862. package/dist/components/composed/admin/conversation-row/index.d.ts +3 -0
  863. package/dist/components/composed/admin/conversation-row/index.d.ts.map +1 -0
  864. package/dist/components/composed/admin/conversation-row/types.d.ts +12 -0
  865. package/dist/components/composed/admin/conversation-row/types.d.ts.map +1 -0
  866. package/dist/components/composed/admin/index.cjs +2 -0
  867. package/dist/components/composed/admin/index.cjs.map +1 -0
  868. package/dist/components/composed/admin/index.d.ts +12 -0
  869. package/dist/components/composed/admin/index.d.ts.map +1 -0
  870. package/dist/components/composed/admin/index.js +393 -0
  871. package/dist/components/composed/admin/index.js.map +1 -0
  872. package/dist/components/composed/admin/inventory-level/index.d.ts +3 -0
  873. package/dist/components/composed/admin/inventory-level/index.d.ts.map +1 -0
  874. package/dist/components/composed/admin/inventory-level/inventory-level.d.ts +6 -0
  875. package/dist/components/composed/admin/inventory-level/inventory-level.d.ts.map +1 -0
  876. package/dist/components/composed/admin/inventory-level/types.d.ts +13 -0
  877. package/dist/components/composed/admin/inventory-level/types.d.ts.map +1 -0
  878. package/dist/components/composed/admin/role-permission/index.d.ts +3 -0
  879. package/dist/components/composed/admin/role-permission/index.d.ts.map +1 -0
  880. package/dist/components/composed/admin/role-permission/role-permission.d.ts +6 -0
  881. package/dist/components/composed/admin/role-permission/role-permission.d.ts.map +1 -0
  882. package/dist/components/composed/admin/role-permission/types.d.ts +20 -0
  883. package/dist/components/composed/admin/role-permission/types.d.ts.map +1 -0
  884. package/dist/components/composed/admin/settings-toggle/index.d.ts +3 -0
  885. package/dist/components/composed/admin/settings-toggle/index.d.ts.map +1 -0
  886. package/dist/components/composed/admin/settings-toggle/settings-toggle.d.ts +6 -0
  887. package/dist/components/composed/admin/settings-toggle/settings-toggle.d.ts.map +1 -0
  888. package/dist/components/composed/admin/settings-toggle/types.d.ts +15 -0
  889. package/dist/components/composed/admin/settings-toggle/types.d.ts.map +1 -0
  890. package/dist/components/composed/admin/team-member/index.d.ts +3 -0
  891. package/dist/components/composed/admin/team-member/index.d.ts.map +1 -0
  892. package/dist/components/composed/admin/team-member/team-member.d.ts +6 -0
  893. package/dist/components/composed/admin/team-member/team-member.d.ts.map +1 -0
  894. package/dist/components/composed/admin/team-member/types.d.ts +12 -0
  895. package/dist/components/composed/admin/team-member/types.d.ts.map +1 -0
  896. package/dist/components/composed/ai/ai-agent/ai-agent.d.ts +6 -0
  897. package/dist/components/composed/ai/ai-agent/ai-agent.d.ts.map +1 -0
  898. package/dist/components/composed/ai/ai-agent/index.d.ts +3 -0
  899. package/dist/components/composed/ai/ai-agent/index.d.ts.map +1 -0
  900. package/dist/components/composed/ai/ai-agent/types.d.ts +28 -0
  901. package/dist/components/composed/ai/ai-agent/types.d.ts.map +1 -0
  902. package/dist/components/composed/ai/ai-artifact/ai-artifact.d.ts +6 -0
  903. package/dist/components/composed/ai/ai-artifact/ai-artifact.d.ts.map +1 -0
  904. package/dist/components/composed/ai/ai-artifact/index.d.ts +3 -0
  905. package/dist/components/composed/ai/ai-artifact/index.d.ts.map +1 -0
  906. package/dist/components/composed/ai/ai-artifact/types.d.ts +40 -0
  907. package/dist/components/composed/ai/ai-artifact/types.d.ts.map +1 -0
  908. package/dist/components/composed/ai/ai-attachment/ai-attachment.d.ts +6 -0
  909. package/dist/components/composed/ai/ai-attachment/ai-attachment.d.ts.map +1 -0
  910. package/dist/components/composed/ai/ai-attachment/index.d.ts +3 -0
  911. package/dist/components/composed/ai/ai-attachment/index.d.ts.map +1 -0
  912. package/dist/components/composed/ai/ai-attachment/types.d.ts +31 -0
  913. package/dist/components/composed/ai/ai-attachment/types.d.ts.map +1 -0
  914. package/dist/components/composed/ai/ai-chain-of-thought/ai-chain-of-thought.d.ts +6 -0
  915. package/dist/components/composed/ai/ai-chain-of-thought/ai-chain-of-thought.d.ts.map +1 -0
  916. package/dist/components/composed/ai/ai-chain-of-thought/index.d.ts +3 -0
  917. package/dist/components/composed/ai/ai-chain-of-thought/index.d.ts.map +1 -0
  918. package/dist/components/composed/ai/ai-chain-of-thought/types.d.ts +31 -0
  919. package/dist/components/composed/ai/ai-chain-of-thought/types.d.ts.map +1 -0
  920. package/dist/components/composed/ai/ai-citation/ai-citation.d.ts +6 -0
  921. package/dist/components/composed/ai/ai-citation/ai-citation.d.ts.map +1 -0
  922. package/dist/components/composed/ai/ai-citation/index.d.ts +3 -0
  923. package/dist/components/composed/ai/ai-citation/index.d.ts.map +1 -0
  924. package/dist/components/composed/ai/ai-citation/types.d.ts +27 -0
  925. package/dist/components/composed/ai/ai-citation/types.d.ts.map +1 -0
  926. package/dist/components/composed/ai/ai-classification/ai-classification.d.ts +3 -0
  927. package/dist/components/composed/ai/ai-classification/ai-classification.d.ts.map +1 -0
  928. package/dist/components/composed/ai/ai-classification/index.d.ts +3 -0
  929. package/dist/components/composed/ai/ai-classification/index.d.ts.map +1 -0
  930. package/dist/components/composed/ai/ai-classification/types.d.ts +21 -0
  931. package/dist/components/composed/ai/ai-classification/types.d.ts.map +1 -0
  932. package/dist/components/composed/ai/ai-code-block/ai-code-block.d.ts +6 -0
  933. package/dist/components/composed/ai/ai-code-block/ai-code-block.d.ts.map +1 -0
  934. package/dist/components/composed/ai/ai-code-block/index.d.ts +3 -0
  935. package/dist/components/composed/ai/ai-code-block/index.d.ts.map +1 -0
  936. package/dist/components/composed/ai/ai-code-block/types.d.ts +32 -0
  937. package/dist/components/composed/ai/ai-code-block/types.d.ts.map +1 -0
  938. package/dist/components/composed/ai/ai-confidence/ai-confidence.d.ts +6 -0
  939. package/dist/components/composed/ai/ai-confidence/ai-confidence.d.ts.map +1 -0
  940. package/dist/components/composed/ai/ai-confidence/index.d.ts +3 -0
  941. package/dist/components/composed/ai/ai-confidence/index.d.ts.map +1 -0
  942. package/dist/components/composed/ai/ai-confidence/types.d.ts +18 -0
  943. package/dist/components/composed/ai/ai-confidence/types.d.ts.map +1 -0
  944. package/dist/components/composed/ai/ai-confirmation/ai-confirmation.d.ts +6 -0
  945. package/dist/components/composed/ai/ai-confirmation/ai-confirmation.d.ts.map +1 -0
  946. package/dist/components/composed/ai/ai-confirmation/index.d.ts +3 -0
  947. package/dist/components/composed/ai/ai-confirmation/index.d.ts.map +1 -0
  948. package/dist/components/composed/ai/ai-confirmation/types.d.ts +37 -0
  949. package/dist/components/composed/ai/ai-confirmation/types.d.ts.map +1 -0
  950. package/dist/components/composed/ai/ai-feedback/ai-feedback.d.ts +6 -0
  951. package/dist/components/composed/ai/ai-feedback/ai-feedback.d.ts.map +1 -0
  952. package/dist/components/composed/ai/ai-feedback/index.d.ts +3 -0
  953. package/dist/components/composed/ai/ai-feedback/index.d.ts.map +1 -0
  954. package/dist/components/composed/ai/ai-feedback/types.d.ts +20 -0
  955. package/dist/components/composed/ai/ai-feedback/types.d.ts.map +1 -0
  956. package/dist/components/composed/ai/ai-file-tree/ai-file-tree.d.ts +6 -0
  957. package/dist/components/composed/ai/ai-file-tree/ai-file-tree.d.ts.map +1 -0
  958. package/dist/components/composed/ai/ai-file-tree/index.d.ts +3 -0
  959. package/dist/components/composed/ai/ai-file-tree/index.d.ts.map +1 -0
  960. package/dist/components/composed/ai/ai-file-tree/types.d.ts +40 -0
  961. package/dist/components/composed/ai/ai-file-tree/types.d.ts.map +1 -0
  962. package/dist/components/composed/ai/ai-inline-citation/ai-inline-citation.d.ts +6 -0
  963. package/dist/components/composed/ai/ai-inline-citation/ai-inline-citation.d.ts.map +1 -0
  964. package/dist/components/composed/ai/ai-inline-citation/index.d.ts +3 -0
  965. package/dist/components/composed/ai/ai-inline-citation/index.d.ts.map +1 -0
  966. package/dist/components/composed/ai/ai-inline-citation/types.d.ts +20 -0
  967. package/dist/components/composed/ai/ai-inline-citation/types.d.ts.map +1 -0
  968. package/dist/components/composed/ai/ai-message-bubble/ai-message-bubble.d.ts +6 -0
  969. package/dist/components/composed/ai/ai-message-bubble/ai-message-bubble.d.ts.map +1 -0
  970. package/dist/components/composed/ai/ai-message-bubble/index.d.ts +3 -0
  971. package/dist/components/composed/ai/ai-message-bubble/index.d.ts.map +1 -0
  972. package/dist/components/composed/ai/ai-message-bubble/types.d.ts +24 -0
  973. package/dist/components/composed/ai/ai-message-bubble/types.d.ts.map +1 -0
  974. package/dist/components/composed/ai/ai-package-info/ai-package-info.d.ts +6 -0
  975. package/dist/components/composed/ai/ai-package-info/ai-package-info.d.ts.map +1 -0
  976. package/dist/components/composed/ai/ai-package-info/index.d.ts +3 -0
  977. package/dist/components/composed/ai/ai-package-info/index.d.ts.map +1 -0
  978. package/dist/components/composed/ai/ai-package-info/types.d.ts +35 -0
  979. package/dist/components/composed/ai/ai-package-info/types.d.ts.map +1 -0
  980. package/dist/components/composed/ai/ai-prompt-suggestions/ai-prompt-suggestions.d.ts +6 -0
  981. package/dist/components/composed/ai/ai-prompt-suggestions/ai-prompt-suggestions.d.ts.map +1 -0
  982. package/dist/components/composed/ai/ai-prompt-suggestions/index.d.ts +3 -0
  983. package/dist/components/composed/ai/ai-prompt-suggestions/index.d.ts.map +1 -0
  984. package/dist/components/composed/ai/ai-prompt-suggestions/types.d.ts +19 -0
  985. package/dist/components/composed/ai/ai-prompt-suggestions/types.d.ts.map +1 -0
  986. package/dist/components/composed/ai/ai-reasoning/ai-reasoning.d.ts +6 -0
  987. package/dist/components/composed/ai/ai-reasoning/ai-reasoning.d.ts.map +1 -0
  988. package/dist/components/composed/ai/ai-reasoning/index.d.ts +3 -0
  989. package/dist/components/composed/ai/ai-reasoning/index.d.ts.map +1 -0
  990. package/dist/components/composed/ai/ai-reasoning/types.d.ts +30 -0
  991. package/dist/components/composed/ai/ai-reasoning/types.d.ts.map +1 -0
  992. package/dist/components/composed/ai/ai-shimmer/ai-shimmer.d.ts +6 -0
  993. package/dist/components/composed/ai/ai-shimmer/ai-shimmer.d.ts.map +1 -0
  994. package/dist/components/composed/ai/ai-shimmer/index.d.ts +3 -0
  995. package/dist/components/composed/ai/ai-shimmer/index.d.ts.map +1 -0
  996. package/dist/components/composed/ai/ai-shimmer/types.d.ts +11 -0
  997. package/dist/components/composed/ai/ai-shimmer/types.d.ts.map +1 -0
  998. package/dist/components/composed/ai/ai-sources/ai-sources.d.ts +6 -0
  999. package/dist/components/composed/ai/ai-sources/ai-sources.d.ts.map +1 -0
  1000. package/dist/components/composed/ai/ai-sources/index.d.ts +3 -0
  1001. package/dist/components/composed/ai/ai-sources/index.d.ts.map +1 -0
  1002. package/dist/components/composed/ai/ai-sources/types.d.ts +36 -0
  1003. package/dist/components/composed/ai/ai-sources/types.d.ts.map +1 -0
  1004. package/dist/components/composed/ai/ai-summary/ai-summary.d.ts +3 -0
  1005. package/dist/components/composed/ai/ai-summary/ai-summary.d.ts.map +1 -0
  1006. package/dist/components/composed/ai/ai-summary/index.d.ts +3 -0
  1007. package/dist/components/composed/ai/ai-summary/index.d.ts.map +1 -0
  1008. package/dist/components/composed/ai/ai-summary/types.d.ts +16 -0
  1009. package/dist/components/composed/ai/ai-summary/types.d.ts.map +1 -0
  1010. package/dist/components/composed/ai/ai-task/ai-task.d.ts +6 -0
  1011. package/dist/components/composed/ai/ai-task/ai-task.d.ts.map +1 -0
  1012. package/dist/components/composed/ai/ai-task/index.d.ts +3 -0
  1013. package/dist/components/composed/ai/ai-task/index.d.ts.map +1 -0
  1014. package/dist/components/composed/ai/ai-task/types.d.ts +32 -0
  1015. package/dist/components/composed/ai/ai-task/types.d.ts.map +1 -0
  1016. package/dist/components/composed/ai/ai-token-usage/ai-token-usage.d.ts +6 -0
  1017. package/dist/components/composed/ai/ai-token-usage/ai-token-usage.d.ts.map +1 -0
  1018. package/dist/components/composed/ai/ai-token-usage/index.d.ts +3 -0
  1019. package/dist/components/composed/ai/ai-token-usage/index.d.ts.map +1 -0
  1020. package/dist/components/composed/ai/ai-token-usage/types.d.ts +18 -0
  1021. package/dist/components/composed/ai/ai-token-usage/types.d.ts.map +1 -0
  1022. package/dist/components/composed/ai/ai-tool-call/ai-tool-call.d.ts +6 -0
  1023. package/dist/components/composed/ai/ai-tool-call/ai-tool-call.d.ts.map +1 -0
  1024. package/dist/components/composed/ai/ai-tool-call/index.d.ts +3 -0
  1025. package/dist/components/composed/ai/ai-tool-call/index.d.ts.map +1 -0
  1026. package/dist/components/composed/ai/ai-tool-call/types.d.ts +29 -0
  1027. package/dist/components/composed/ai/ai-tool-call/types.d.ts.map +1 -0
  1028. package/dist/components/composed/ai/ai.strings.d.ts +41 -0
  1029. package/dist/components/composed/ai/ai.strings.d.ts.map +1 -0
  1030. package/dist/components/composed/ai/index.cjs +2 -0
  1031. package/dist/components/composed/ai/index.cjs.map +1 -0
  1032. package/dist/components/composed/ai/index.d.ts +25 -0
  1033. package/dist/components/composed/ai/index.d.ts.map +1 -0
  1034. package/dist/components/composed/ai/index.js +959 -0
  1035. package/dist/components/composed/ai/index.js.map +1 -0
  1036. package/dist/components/composed/analytics/activity-heatmap/activity-heatmap.d.ts +6 -0
  1037. package/dist/components/composed/analytics/activity-heatmap/activity-heatmap.d.ts.map +1 -0
  1038. package/dist/components/composed/analytics/activity-heatmap/index.d.ts +3 -0
  1039. package/dist/components/composed/analytics/activity-heatmap/index.d.ts.map +1 -0
  1040. package/dist/components/composed/analytics/activity-heatmap/types.d.ts +16 -0
  1041. package/dist/components/composed/analytics/activity-heatmap/types.d.ts.map +1 -0
  1042. package/dist/components/composed/analytics/analytics.strings.d.ts +36 -0
  1043. package/dist/components/composed/analytics/analytics.strings.d.ts.map +1 -0
  1044. package/dist/components/composed/analytics/atoms/metric-skeleton.d.ts +12 -0
  1045. package/dist/components/composed/analytics/atoms/metric-skeleton.d.ts.map +1 -0
  1046. package/dist/components/composed/analytics/atoms/metric-sparkline.d.ts +15 -0
  1047. package/dist/components/composed/analytics/atoms/metric-sparkline.d.ts.map +1 -0
  1048. package/dist/components/composed/analytics/atoms/metric-trend-chip.d.ts +14 -0
  1049. package/dist/components/composed/analytics/atoms/metric-trend-chip.d.ts.map +1 -0
  1050. package/dist/components/composed/analytics/format-metric-value.d.ts +9 -0
  1051. package/dist/components/composed/analytics/format-metric-value.d.ts.map +1 -0
  1052. package/dist/components/composed/analytics/index.cjs +2 -0
  1053. package/dist/components/composed/analytics/index.cjs.map +1 -0
  1054. package/dist/components/composed/analytics/index.d.ts +32 -0
  1055. package/dist/components/composed/analytics/index.d.ts.map +1 -0
  1056. package/dist/components/composed/analytics/index.js +1381 -0
  1057. package/dist/components/composed/analytics/index.js.map +1 -0
  1058. package/dist/components/composed/analytics/metric/index.d.ts +2 -0
  1059. package/dist/components/composed/analytics/metric/index.d.ts.map +1 -0
  1060. package/dist/components/composed/analytics/metric/metric.d.ts +22 -0
  1061. package/dist/components/composed/analytics/metric/metric.d.ts.map +1 -0
  1062. package/dist/components/composed/analytics/metric-bar/index.d.ts +2 -0
  1063. package/dist/components/composed/analytics/metric-bar/index.d.ts.map +1 -0
  1064. package/dist/components/composed/analytics/metric-bar/metric-bar.d.ts +18 -0
  1065. package/dist/components/composed/analytics/metric-bar/metric-bar.d.ts.map +1 -0
  1066. package/dist/components/composed/analytics/metric-comparison/index.d.ts +2 -0
  1067. package/dist/components/composed/analytics/metric-comparison/index.d.ts.map +1 -0
  1068. package/dist/components/composed/analytics/metric-comparison/metric-comparison.d.ts +22 -0
  1069. package/dist/components/composed/analytics/metric-comparison/metric-comparison.d.ts.map +1 -0
  1070. package/dist/components/composed/analytics/metric-gradient/index.d.ts +2 -0
  1071. package/dist/components/composed/analytics/metric-gradient/index.d.ts.map +1 -0
  1072. package/dist/components/composed/analytics/metric-gradient/metric-gradient.d.ts +16 -0
  1073. package/dist/components/composed/analytics/metric-gradient/metric-gradient.d.ts.map +1 -0
  1074. package/dist/components/composed/analytics/metric-grid/index.d.ts +2 -0
  1075. package/dist/components/composed/analytics/metric-grid/index.d.ts.map +1 -0
  1076. package/dist/components/composed/analytics/metric-grid/metric-grid.d.ts +21 -0
  1077. package/dist/components/composed/analytics/metric-grid/metric-grid.d.ts.map +1 -0
  1078. package/dist/components/composed/analytics/metric-micro-grid/index.d.ts +2 -0
  1079. package/dist/components/composed/analytics/metric-micro-grid/index.d.ts.map +1 -0
  1080. package/dist/components/composed/analytics/metric-micro-grid/metric-micro-grid.d.ts +18 -0
  1081. package/dist/components/composed/analytics/metric-micro-grid/metric-micro-grid.d.ts.map +1 -0
  1082. package/dist/components/composed/analytics/types.d.ts +70 -0
  1083. package/dist/components/composed/analytics/types.d.ts.map +1 -0
  1084. package/dist/components/composed/cards/contact-card/contact-card.d.ts +14 -0
  1085. package/dist/components/composed/cards/contact-card/contact-card.d.ts.map +1 -0
  1086. package/dist/components/composed/cards/contact-card/index.d.ts +3 -0
  1087. package/dist/components/composed/cards/contact-card/index.d.ts.map +1 -0
  1088. package/dist/components/composed/cards/contact-card/types.d.ts +23 -0
  1089. package/dist/components/composed/cards/contact-card/types.d.ts.map +1 -0
  1090. package/dist/components/composed/cards/course-card/course-card.d.ts +6 -0
  1091. package/dist/components/composed/cards/course-card/course-card.d.ts.map +1 -0
  1092. package/dist/components/composed/cards/course-card/index.d.ts +3 -0
  1093. package/dist/components/composed/cards/course-card/index.d.ts.map +1 -0
  1094. package/dist/components/composed/cards/course-card/types.d.ts +36 -0
  1095. package/dist/components/composed/cards/course-card/types.d.ts.map +1 -0
  1096. package/dist/components/composed/cards/feature-announcement/feature-announcement.d.ts +6 -0
  1097. package/dist/components/composed/cards/feature-announcement/feature-announcement.d.ts.map +1 -0
  1098. package/dist/components/composed/cards/feature-announcement/index.d.ts +3 -0
  1099. package/dist/components/composed/cards/feature-announcement/index.d.ts.map +1 -0
  1100. package/dist/components/composed/cards/feature-announcement/types.d.ts +11 -0
  1101. package/dist/components/composed/cards/feature-announcement/types.d.ts.map +1 -0
  1102. package/dist/components/composed/cards/giftcard-card/index.d.ts +7 -0
  1103. package/dist/components/composed/cards/giftcard-card/index.d.ts.map +1 -0
  1104. package/dist/components/composed/cards/giftcard-card/partials/giftcard-compact.d.ts +9 -0
  1105. package/dist/components/composed/cards/giftcard-card/partials/giftcard-compact.d.ts.map +1 -0
  1106. package/dist/components/composed/cards/giftcard-card/partials/giftcard-dark.d.ts +8 -0
  1107. package/dist/components/composed/cards/giftcard-card/partials/giftcard-dark.d.ts.map +1 -0
  1108. package/dist/components/composed/cards/giftcard-card/partials/giftcard-full.d.ts +10 -0
  1109. package/dist/components/composed/cards/giftcard-card/partials/giftcard-full.d.ts.map +1 -0
  1110. package/dist/components/composed/cards/giftcard-card/partials/giftcard-illustrated.d.ts +9 -0
  1111. package/dist/components/composed/cards/giftcard-card/partials/giftcard-illustrated.d.ts.map +1 -0
  1112. package/dist/components/composed/cards/giftcard-card/partials/giftcard-minimal.d.ts +9 -0
  1113. package/dist/components/composed/cards/giftcard-card/partials/giftcard-minimal.d.ts.map +1 -0
  1114. package/dist/components/composed/cards/giftcard-card/types.d.ts +78 -0
  1115. package/dist/components/composed/cards/giftcard-card/types.d.ts.map +1 -0
  1116. package/dist/components/composed/cards/gradient-card/gradient-card.d.ts +10 -0
  1117. package/dist/components/composed/cards/gradient-card/gradient-card.d.ts.map +1 -0
  1118. package/dist/components/composed/cards/gradient-card/index.d.ts +3 -0
  1119. package/dist/components/composed/cards/gradient-card/index.d.ts.map +1 -0
  1120. package/dist/components/composed/cards/gradient-card/types.d.ts +32 -0
  1121. package/dist/components/composed/cards/gradient-card/types.d.ts.map +1 -0
  1122. package/dist/components/composed/cards/index.cjs +2 -0
  1123. package/dist/components/composed/cards/index.cjs.map +1 -0
  1124. package/dist/components/composed/cards/index.d.ts +13 -0
  1125. package/dist/components/composed/cards/index.d.ts.map +1 -0
  1126. package/dist/components/composed/cards/index.js +1209 -0
  1127. package/dist/components/composed/cards/index.js.map +1 -0
  1128. package/dist/components/composed/cards/vendor-profile/index.d.ts +3 -0
  1129. package/dist/components/composed/cards/vendor-profile/index.d.ts.map +1 -0
  1130. package/dist/components/composed/cards/vendor-profile/types.d.ts +37 -0
  1131. package/dist/components/composed/cards/vendor-profile/types.d.ts.map +1 -0
  1132. package/dist/components/composed/cards/vendor-profile/vendor-profile.d.ts +6 -0
  1133. package/dist/components/composed/cards/vendor-profile/vendor-profile.d.ts.map +1 -0
  1134. package/dist/components/composed/commerce/address-card/address-card.d.ts +6 -0
  1135. package/dist/components/composed/commerce/address-card/address-card.d.ts.map +1 -0
  1136. package/dist/components/composed/commerce/address-card/index.d.ts +3 -0
  1137. package/dist/components/composed/commerce/address-card/index.d.ts.map +1 -0
  1138. package/dist/components/composed/commerce/address-card/types.d.ts +29 -0
  1139. package/dist/components/composed/commerce/address-card/types.d.ts.map +1 -0
  1140. package/dist/components/composed/commerce/cart-summary/cart-summary.d.ts +6 -0
  1141. package/dist/components/composed/commerce/cart-summary/cart-summary.d.ts.map +1 -0
  1142. package/dist/components/composed/commerce/cart-summary/index.d.ts +3 -0
  1143. package/dist/components/composed/commerce/cart-summary/index.d.ts.map +1 -0
  1144. package/dist/components/composed/commerce/cart-summary/types.d.ts +29 -0
  1145. package/dist/components/composed/commerce/cart-summary/types.d.ts.map +1 -0
  1146. package/dist/components/composed/commerce/coupon-input/coupon-input.d.ts +6 -0
  1147. package/dist/components/composed/commerce/coupon-input/coupon-input.d.ts.map +1 -0
  1148. package/dist/components/composed/commerce/coupon-input/index.d.ts +3 -0
  1149. package/dist/components/composed/commerce/coupon-input/index.d.ts.map +1 -0
  1150. package/dist/components/composed/commerce/coupon-input/types.d.ts +20 -0
  1151. package/dist/components/composed/commerce/coupon-input/types.d.ts.map +1 -0
  1152. package/dist/components/composed/commerce/discount-stack/discount-stack.d.ts +6 -0
  1153. package/dist/components/composed/commerce/discount-stack/discount-stack.d.ts.map +1 -0
  1154. package/dist/components/composed/commerce/discount-stack/index.d.ts +3 -0
  1155. package/dist/components/composed/commerce/discount-stack/index.d.ts.map +1 -0
  1156. package/dist/components/composed/commerce/discount-stack/types.d.ts +19 -0
  1157. package/dist/components/composed/commerce/discount-stack/types.d.ts.map +1 -0
  1158. package/dist/components/composed/commerce/index.cjs +2 -0
  1159. package/dist/components/composed/commerce/index.cjs.map +1 -0
  1160. package/dist/components/composed/commerce/index.d.ts +18 -0
  1161. package/dist/components/composed/commerce/index.d.ts.map +1 -0
  1162. package/dist/components/composed/commerce/index.js +1040 -0
  1163. package/dist/components/composed/commerce/index.js.map +1 -0
  1164. package/dist/components/composed/commerce/loyalty-points/index.d.ts +3 -0
  1165. package/dist/components/composed/commerce/loyalty-points/index.d.ts.map +1 -0
  1166. package/dist/components/composed/commerce/loyalty-points/loyalty-points.d.ts +6 -0
  1167. package/dist/components/composed/commerce/loyalty-points/loyalty-points.d.ts.map +1 -0
  1168. package/dist/components/composed/commerce/loyalty-points/types.d.ts +24 -0
  1169. package/dist/components/composed/commerce/loyalty-points/types.d.ts.map +1 -0
  1170. package/dist/components/composed/commerce/order-status/index.d.ts +3 -0
  1171. package/dist/components/composed/commerce/order-status/index.d.ts.map +1 -0
  1172. package/dist/components/composed/commerce/order-status/order-status.d.ts +6 -0
  1173. package/dist/components/composed/commerce/order-status/order-status.d.ts.map +1 -0
  1174. package/dist/components/composed/commerce/order-status/types.d.ts +23 -0
  1175. package/dist/components/composed/commerce/order-status/types.d.ts.map +1 -0
  1176. package/dist/components/composed/commerce/payment-method/index.d.ts +3 -0
  1177. package/dist/components/composed/commerce/payment-method/index.d.ts.map +1 -0
  1178. package/dist/components/composed/commerce/payment-method/payment-method.d.ts +6 -0
  1179. package/dist/components/composed/commerce/payment-method/payment-method.d.ts.map +1 -0
  1180. package/dist/components/composed/commerce/payment-method/types.d.ts +20 -0
  1181. package/dist/components/composed/commerce/payment-method/types.d.ts.map +1 -0
  1182. package/dist/components/composed/commerce/refund-status/index.d.ts +3 -0
  1183. package/dist/components/composed/commerce/refund-status/index.d.ts.map +1 -0
  1184. package/dist/components/composed/commerce/refund-status/refund-status.d.ts +6 -0
  1185. package/dist/components/composed/commerce/refund-status/refund-status.d.ts.map +1 -0
  1186. package/dist/components/composed/commerce/refund-status/types.d.ts +24 -0
  1187. package/dist/components/composed/commerce/refund-status/types.d.ts.map +1 -0
  1188. package/dist/components/composed/commerce/shipment-tracking/index.d.ts +3 -0
  1189. package/dist/components/composed/commerce/shipment-tracking/index.d.ts.map +1 -0
  1190. package/dist/components/composed/commerce/shipment-tracking/shipment-tracking.d.ts +6 -0
  1191. package/dist/components/composed/commerce/shipment-tracking/shipment-tracking.d.ts.map +1 -0
  1192. package/dist/components/composed/commerce/shipment-tracking/types.d.ts +17 -0
  1193. package/dist/components/composed/commerce/shipment-tracking/types.d.ts.map +1 -0
  1194. package/dist/components/composed/commerce/subscription-summary/index.d.ts +3 -0
  1195. package/dist/components/composed/commerce/subscription-summary/index.d.ts.map +1 -0
  1196. package/dist/components/composed/commerce/subscription-summary/subscription-summary.d.ts +6 -0
  1197. package/dist/components/composed/commerce/subscription-summary/subscription-summary.d.ts.map +1 -0
  1198. package/dist/components/composed/commerce/subscription-summary/types.d.ts +27 -0
  1199. package/dist/components/composed/commerce/subscription-summary/types.d.ts.map +1 -0
  1200. package/dist/components/composed/commerce/tax-breakdown/index.d.ts +3 -0
  1201. package/dist/components/composed/commerce/tax-breakdown/index.d.ts.map +1 -0
  1202. package/dist/components/composed/commerce/tax-breakdown/tax-breakdown.d.ts +6 -0
  1203. package/dist/components/composed/commerce/tax-breakdown/tax-breakdown.d.ts.map +1 -0
  1204. package/dist/components/composed/commerce/tax-breakdown/types.d.ts +22 -0
  1205. package/dist/components/composed/commerce/tax-breakdown/types.d.ts.map +1 -0
  1206. package/dist/components/composed/commerce/upcoming-booking/index.d.ts +3 -0
  1207. package/dist/components/composed/commerce/upcoming-booking/index.d.ts.map +1 -0
  1208. package/dist/components/composed/commerce/upcoming-booking/types.d.ts +33 -0
  1209. package/dist/components/composed/commerce/upcoming-booking/types.d.ts.map +1 -0
  1210. package/dist/components/composed/commerce/upcoming-booking/upcoming-booking.d.ts +6 -0
  1211. package/dist/components/composed/commerce/upcoming-booking/upcoming-booking.d.ts.map +1 -0
  1212. package/dist/components/composed/commerce/voucher-entry/index.d.ts +3 -0
  1213. package/dist/components/composed/commerce/voucher-entry/index.d.ts.map +1 -0
  1214. package/dist/components/composed/commerce/voucher-entry/types.d.ts +20 -0
  1215. package/dist/components/composed/commerce/voucher-entry/types.d.ts.map +1 -0
  1216. package/dist/components/composed/commerce/voucher-entry/voucher-entry.d.ts +6 -0
  1217. package/dist/components/composed/commerce/voucher-entry/voucher-entry.d.ts.map +1 -0
  1218. package/dist/components/composed/dark-surfaces/booking-receipt/booking-receipt.d.ts +6 -0
  1219. package/dist/components/composed/dark-surfaces/booking-receipt/booking-receipt.d.ts.map +1 -0
  1220. package/dist/components/composed/dark-surfaces/booking-receipt/index.d.ts +3 -0
  1221. package/dist/components/composed/dark-surfaces/booking-receipt/index.d.ts.map +1 -0
  1222. package/dist/components/composed/dark-surfaces/booking-receipt/types.d.ts +16 -0
  1223. package/dist/components/composed/dark-surfaces/booking-receipt/types.d.ts.map +1 -0
  1224. package/dist/components/composed/dark-surfaces/dark-info-panel/dark-info-panel.d.ts +6 -0
  1225. package/dist/components/composed/dark-surfaces/dark-info-panel/dark-info-panel.d.ts.map +1 -0
  1226. package/dist/components/composed/dark-surfaces/dark-info-panel/index.d.ts +3 -0
  1227. package/dist/components/composed/dark-surfaces/dark-info-panel/index.d.ts.map +1 -0
  1228. package/dist/components/composed/dark-surfaces/dark-info-panel/types.d.ts +18 -0
  1229. package/dist/components/composed/dark-surfaces/dark-info-panel/types.d.ts.map +1 -0
  1230. package/dist/components/composed/dark-surfaces/dark-payment/dark-payment.d.ts +6 -0
  1231. package/dist/components/composed/dark-surfaces/dark-payment/dark-payment.d.ts.map +1 -0
  1232. package/dist/components/composed/dark-surfaces/dark-payment/index.d.ts +3 -0
  1233. package/dist/components/composed/dark-surfaces/dark-payment/index.d.ts.map +1 -0
  1234. package/dist/components/composed/dark-surfaces/dark-payment/types.d.ts +15 -0
  1235. package/dist/components/composed/dark-surfaces/dark-payment/types.d.ts.map +1 -0
  1236. package/dist/components/composed/dark-surfaces/dark-surfaces.strings.d.ts +37 -0
  1237. package/dist/components/composed/dark-surfaces/dark-surfaces.strings.d.ts.map +1 -0
  1238. package/dist/components/composed/dark-surfaces/index.cjs +2 -0
  1239. package/dist/components/composed/dark-surfaces/index.cjs.map +1 -0
  1240. package/dist/components/composed/dark-surfaces/index.d.ts +11 -0
  1241. package/dist/components/composed/dark-surfaces/index.d.ts.map +1 -0
  1242. package/dist/components/composed/dark-surfaces/index.js +330 -0
  1243. package/dist/components/composed/dark-surfaces/index.js.map +1 -0
  1244. package/dist/components/composed/dark-surfaces/order-items/index.d.ts +3 -0
  1245. package/dist/components/composed/dark-surfaces/order-items/index.d.ts.map +1 -0
  1246. package/dist/components/composed/dark-surfaces/order-items/order-items.d.ts +6 -0
  1247. package/dist/components/composed/dark-surfaces/order-items/order-items.d.ts.map +1 -0
  1248. package/dist/components/composed/dark-surfaces/order-items/types.d.ts +22 -0
  1249. package/dist/components/composed/dark-surfaces/order-items/types.d.ts.map +1 -0
  1250. package/dist/components/composed/dark-surfaces/outstanding-balance/index.d.ts +3 -0
  1251. package/dist/components/composed/dark-surfaces/outstanding-balance/index.d.ts.map +1 -0
  1252. package/dist/components/composed/dark-surfaces/outstanding-balance/outstanding-balance.d.ts +6 -0
  1253. package/dist/components/composed/dark-surfaces/outstanding-balance/outstanding-balance.d.ts.map +1 -0
  1254. package/dist/components/composed/dark-surfaces/outstanding-balance/types.d.ts +13 -0
  1255. package/dist/components/composed/dark-surfaces/outstanding-balance/types.d.ts.map +1 -0
  1256. package/dist/components/composed/data-display/dense-info-card/helpers.d.ts +13 -0
  1257. package/dist/components/composed/data-display/dense-info-card/helpers.d.ts.map +1 -0
  1258. package/dist/components/composed/data-display/dense-info-card/index.d.ts +7 -0
  1259. package/dist/components/composed/data-display/dense-info-card/index.d.ts.map +1 -0
  1260. package/dist/components/composed/data-display/dense-info-card/partials/dense-info-classification.d.ts +6 -0
  1261. package/dist/components/composed/data-display/dense-info-card/partials/dense-info-classification.d.ts.map +1 -0
  1262. package/dist/components/composed/data-display/dense-info-card/partials/dense-info-dashboard.d.ts +6 -0
  1263. package/dist/components/composed/data-display/dense-info-card/partials/dense-info-dashboard.d.ts.map +1 -0
  1264. package/dist/components/composed/data-display/dense-info-card/partials/dense-info-financial.d.ts +6 -0
  1265. package/dist/components/composed/data-display/dense-info-card/partials/dense-info-financial.d.ts.map +1 -0
  1266. package/dist/components/composed/data-display/dense-info-card/partials/dense-info-project.d.ts +6 -0
  1267. package/dist/components/composed/data-display/dense-info-card/partials/dense-info-project.d.ts.map +1 -0
  1268. package/dist/components/composed/data-display/dense-info-card/partials/dense-info-score.d.ts +6 -0
  1269. package/dist/components/composed/data-display/dense-info-card/partials/dense-info-score.d.ts.map +1 -0
  1270. package/dist/components/composed/data-display/dense-info-card/types.d.ts +112 -0
  1271. package/dist/components/composed/data-display/dense-info-card/types.d.ts.map +1 -0
  1272. package/dist/components/composed/data-display/index.cjs +2 -0
  1273. package/dist/components/composed/data-display/index.cjs.map +1 -0
  1274. package/dist/components/composed/data-display/index.d.ts +15 -0
  1275. package/dist/components/composed/data-display/index.d.ts.map +1 -0
  1276. package/dist/components/composed/data-display/index.js +1069 -0
  1277. package/dist/components/composed/data-display/index.js.map +1 -0
  1278. package/dist/components/composed/data-display/inline-metric/index.d.ts +3 -0
  1279. package/dist/components/composed/data-display/inline-metric/index.d.ts.map +1 -0
  1280. package/dist/components/composed/data-display/inline-metric/inline-metric.d.ts +6 -0
  1281. package/dist/components/composed/data-display/inline-metric/inline-metric.d.ts.map +1 -0
  1282. package/dist/components/composed/data-display/inline-metric/types.d.ts +12 -0
  1283. package/dist/components/composed/data-display/inline-metric/types.d.ts.map +1 -0
  1284. package/dist/components/composed/data-display/invoice-header/index.d.ts +3 -0
  1285. package/dist/components/composed/data-display/invoice-header/index.d.ts.map +1 -0
  1286. package/dist/components/composed/data-display/invoice-header/invoice-header.d.ts +6 -0
  1287. package/dist/components/composed/data-display/invoice-header/invoice-header.d.ts.map +1 -0
  1288. package/dist/components/composed/data-display/invoice-header/types.d.ts +27 -0
  1289. package/dist/components/composed/data-display/invoice-header/types.d.ts.map +1 -0
  1290. package/dist/components/composed/data-display/invoice-items/index.d.ts +3 -0
  1291. package/dist/components/composed/data-display/invoice-items/index.d.ts.map +1 -0
  1292. package/dist/components/composed/data-display/invoice-items/invoice-items.d.ts +14 -0
  1293. package/dist/components/composed/data-display/invoice-items/invoice-items.d.ts.map +1 -0
  1294. package/dist/components/composed/data-display/invoice-items/types.d.ts +23 -0
  1295. package/dist/components/composed/data-display/invoice-items/types.d.ts.map +1 -0
  1296. package/dist/components/composed/data-display/invoice-mini/index.d.ts +4 -0
  1297. package/dist/components/composed/data-display/invoice-mini/index.d.ts.map +1 -0
  1298. package/dist/components/composed/data-display/invoice-mini/invoice-mini.d.ts +6 -0
  1299. package/dist/components/composed/data-display/invoice-mini/invoice-mini.d.ts.map +1 -0
  1300. package/dist/components/composed/data-display/invoice-mini/types.d.ts +30 -0
  1301. package/dist/components/composed/data-display/invoice-mini/types.d.ts.map +1 -0
  1302. package/dist/components/composed/data-display/invoice-table/index.d.ts +3 -0
  1303. package/dist/components/composed/data-display/invoice-table/index.d.ts.map +1 -0
  1304. package/dist/components/composed/data-display/invoice-table/invoice-table.d.ts +6 -0
  1305. package/dist/components/composed/data-display/invoice-table/invoice-table.d.ts.map +1 -0
  1306. package/dist/components/composed/data-display/invoice-table/types.d.ts +54 -0
  1307. package/dist/components/composed/data-display/invoice-table/types.d.ts.map +1 -0
  1308. package/dist/components/composed/data-display/mini-kpi/index.d.ts +3 -0
  1309. package/dist/components/composed/data-display/mini-kpi/index.d.ts.map +1 -0
  1310. package/dist/components/composed/data-display/mini-kpi/mini-kpi.d.ts +6 -0
  1311. package/dist/components/composed/data-display/mini-kpi/mini-kpi.d.ts.map +1 -0
  1312. package/dist/components/composed/data-display/mini-kpi/types.d.ts +9 -0
  1313. package/dist/components/composed/data-display/mini-kpi/types.d.ts.map +1 -0
  1314. package/dist/components/composed/index.d.ts.map +1 -0
  1315. package/dist/components/composed/navigation/breadcrumb-progress/breadcrumb-progress.d.ts +6 -0
  1316. package/dist/components/composed/navigation/breadcrumb-progress/breadcrumb-progress.d.ts.map +1 -0
  1317. package/dist/components/composed/navigation/breadcrumb-progress/index.d.ts +3 -0
  1318. package/dist/components/composed/navigation/breadcrumb-progress/index.d.ts.map +1 -0
  1319. package/dist/components/composed/navigation/breadcrumb-progress/types.d.ts +18 -0
  1320. package/dist/components/composed/navigation/breadcrumb-progress/types.d.ts.map +1 -0
  1321. package/dist/components/composed/navigation/category-nav/category-nav.d.ts +6 -0
  1322. package/dist/components/composed/navigation/category-nav/category-nav.d.ts.map +1 -0
  1323. package/dist/components/composed/navigation/category-nav/index.d.ts +3 -0
  1324. package/dist/components/composed/navigation/category-nav/index.d.ts.map +1 -0
  1325. package/dist/components/composed/navigation/category-nav/types.d.ts +16 -0
  1326. package/dist/components/composed/navigation/category-nav/types.d.ts.map +1 -0
  1327. package/dist/components/composed/navigation/experience-activity/experience-activity.d.ts +6 -0
  1328. package/dist/components/composed/navigation/experience-activity/experience-activity.d.ts.map +1 -0
  1329. package/dist/components/composed/navigation/experience-activity/index.d.ts +3 -0
  1330. package/dist/components/composed/navigation/experience-activity/index.d.ts.map +1 -0
  1331. package/dist/components/composed/navigation/experience-activity/types.d.ts +19 -0
  1332. package/dist/components/composed/navigation/experience-activity/types.d.ts.map +1 -0
  1333. package/dist/components/composed/navigation/index.cjs +2 -0
  1334. package/dist/components/composed/navigation/index.cjs.map +1 -0
  1335. package/dist/components/composed/navigation/index.d.ts +13 -0
  1336. package/dist/components/composed/navigation/index.d.ts.map +1 -0
  1337. package/dist/components/composed/navigation/index.js +447 -0
  1338. package/dist/components/composed/navigation/index.js.map +1 -0
  1339. package/dist/components/composed/navigation/kanban-board/index.d.ts +3 -0
  1340. package/dist/components/composed/navigation/kanban-board/index.d.ts.map +1 -0
  1341. package/dist/components/composed/navigation/kanban-board/kanban-board.d.ts +6 -0
  1342. package/dist/components/composed/navigation/kanban-board/kanban-board.d.ts.map +1 -0
  1343. package/dist/components/composed/navigation/kanban-board/types.d.ts +13 -0
  1344. package/dist/components/composed/navigation/kanban-board/types.d.ts.map +1 -0
  1345. package/dist/components/composed/navigation/tab-switcher/index.d.ts +3 -0
  1346. package/dist/components/composed/navigation/tab-switcher/index.d.ts.map +1 -0
  1347. package/dist/components/composed/navigation/tab-switcher/tab-switcher.d.ts +6 -0
  1348. package/dist/components/composed/navigation/tab-switcher/tab-switcher.d.ts.map +1 -0
  1349. package/dist/components/composed/navigation/tab-switcher/types.d.ts +13 -0
  1350. package/dist/components/composed/navigation/tab-switcher/types.d.ts.map +1 -0
  1351. package/dist/components/composed/navigation/time-ruler/index.d.ts +3 -0
  1352. package/dist/components/composed/navigation/time-ruler/index.d.ts.map +1 -0
  1353. package/dist/components/composed/navigation/time-ruler/time-ruler.d.ts +6 -0
  1354. package/dist/components/composed/navigation/time-ruler/time-ruler.d.ts.map +1 -0
  1355. package/dist/components/composed/navigation/time-ruler/types.d.ts +20 -0
  1356. package/dist/components/composed/navigation/time-ruler/types.d.ts.map +1 -0
  1357. package/dist/components/composed/navigation/vendor-performance/index.d.ts +3 -0
  1358. package/dist/components/composed/navigation/vendor-performance/index.d.ts.map +1 -0
  1359. package/dist/components/composed/navigation/vendor-performance/types.d.ts +17 -0
  1360. package/dist/components/composed/navigation/vendor-performance/types.d.ts.map +1 -0
  1361. package/dist/components/composed/navigation/vendor-performance/vendor-performance.d.ts +6 -0
  1362. package/dist/components/composed/navigation/vendor-performance/vendor-performance.d.ts.map +1 -0
  1363. package/dist/components/composed/onboarding/checklist/checklist.d.ts +3 -0
  1364. package/dist/components/composed/onboarding/checklist/checklist.d.ts.map +1 -0
  1365. package/dist/components/composed/onboarding/checklist/checklist.strings.d.ts +16 -0
  1366. package/dist/components/composed/onboarding/checklist/checklist.strings.d.ts.map +1 -0
  1367. package/dist/components/composed/onboarding/checklist/checklist.types.d.ts +61 -0
  1368. package/dist/components/composed/onboarding/checklist/checklist.types.d.ts.map +1 -0
  1369. package/dist/components/composed/onboarding/checklist/index.d.ts +5 -0
  1370. package/dist/components/composed/onboarding/checklist/index.d.ts.map +1 -0
  1371. package/dist/components/composed/onboarding/checklist/partials/step-status-indicator.d.ts +12 -0
  1372. package/dist/components/composed/onboarding/checklist/partials/step-status-indicator.d.ts.map +1 -0
  1373. package/dist/components/composed/onboarding/index.cjs +2 -0
  1374. package/dist/components/composed/onboarding/index.cjs.map +1 -0
  1375. package/dist/components/composed/onboarding/index.d.ts +8 -0
  1376. package/dist/components/composed/onboarding/index.d.ts.map +1 -0
  1377. package/dist/components/composed/onboarding/index.js +123 -0
  1378. package/dist/components/composed/onboarding/index.js.map +1 -0
  1379. package/dist/components/composed/timelines/activity-stream/activity-stream.d.ts +6 -0
  1380. package/dist/components/composed/timelines/activity-stream/activity-stream.d.ts.map +1 -0
  1381. package/dist/components/composed/timelines/activity-stream/index.d.ts +3 -0
  1382. package/dist/components/composed/timelines/activity-stream/index.d.ts.map +1 -0
  1383. package/dist/components/composed/timelines/activity-stream/types.d.ts +26 -0
  1384. package/dist/components/composed/timelines/activity-stream/types.d.ts.map +1 -0
  1385. package/dist/components/composed/timelines/changelog/changelog-timeline.d.ts +6 -0
  1386. package/dist/components/composed/timelines/changelog/changelog-timeline.d.ts.map +1 -0
  1387. package/dist/components/composed/timelines/changelog/index.d.ts +3 -0
  1388. package/dist/components/composed/timelines/changelog/index.d.ts.map +1 -0
  1389. package/dist/components/composed/timelines/changelog/types.d.ts +25 -0
  1390. package/dist/components/composed/timelines/changelog/types.d.ts.map +1 -0
  1391. package/dist/components/composed/timelines/index.cjs +2 -0
  1392. package/dist/components/composed/timelines/index.cjs.map +1 -0
  1393. package/dist/components/composed/timelines/index.d.ts +11 -0
  1394. package/dist/components/composed/timelines/index.d.ts.map +1 -0
  1395. package/dist/components/composed/timelines/index.js +594 -0
  1396. package/dist/components/composed/timelines/index.js.map +1 -0
  1397. package/dist/components/composed/timelines/milestones/index.d.ts +3 -0
  1398. package/dist/components/composed/timelines/milestones/index.d.ts.map +1 -0
  1399. package/dist/components/composed/timelines/milestones/milestones-timeline.d.ts +6 -0
  1400. package/dist/components/composed/timelines/milestones/milestones-timeline.d.ts.map +1 -0
  1401. package/dist/components/composed/timelines/milestones/types.d.ts +26 -0
  1402. package/dist/components/composed/timelines/milestones/types.d.ts.map +1 -0
  1403. package/dist/components/composed/timelines/order-timeline/index.d.ts +3 -0
  1404. package/dist/components/composed/timelines/order-timeline/index.d.ts.map +1 -0
  1405. package/dist/components/composed/timelines/order-timeline/order-timeline.d.ts +3 -0
  1406. package/dist/components/composed/timelines/order-timeline/order-timeline.d.ts.map +1 -0
  1407. package/dist/components/composed/timelines/order-timeline/types.d.ts +16 -0
  1408. package/dist/components/composed/timelines/order-timeline/types.d.ts.map +1 -0
  1409. package/dist/components/composed/timelines/payment-timeline/index.d.ts +3 -0
  1410. package/dist/components/composed/timelines/payment-timeline/index.d.ts.map +1 -0
  1411. package/dist/components/composed/timelines/payment-timeline/payment-timeline.d.ts +3 -0
  1412. package/dist/components/composed/timelines/payment-timeline/payment-timeline.d.ts.map +1 -0
  1413. package/dist/components/composed/timelines/payment-timeline/types.d.ts +13 -0
  1414. package/dist/components/composed/timelines/payment-timeline/types.d.ts.map +1 -0
  1415. package/dist/components/composed/timelines/shared/index.d.ts +2 -0
  1416. package/dist/components/composed/timelines/shared/index.d.ts.map +1 -0
  1417. package/dist/components/composed/timelines/shared/timeline.d.ts +23 -0
  1418. package/dist/components/composed/timelines/shared/timeline.d.ts.map +1 -0
  1419. package/dist/components/composed/timelines/steps-card/index.d.ts +3 -0
  1420. package/dist/components/composed/timelines/steps-card/index.d.ts.map +1 -0
  1421. package/dist/components/composed/timelines/steps-card/steps-card.d.ts +10 -0
  1422. package/dist/components/composed/timelines/steps-card/steps-card.d.ts.map +1 -0
  1423. package/dist/components/composed/timelines/steps-card/types.d.ts +28 -0
  1424. package/dist/components/composed/timelines/steps-card/types.d.ts.map +1 -0
  1425. package/dist/components/features/activities/activities-feed.d.ts +6 -0
  1426. package/dist/components/features/activities/activities-feed.d.ts.map +1 -0
  1427. package/dist/components/features/activities/activities.config.d.ts +7 -0
  1428. package/dist/components/features/activities/activities.config.d.ts.map +1 -0
  1429. package/dist/components/features/activities/activities.strings.d.ts +39 -0
  1430. package/dist/components/features/activities/activities.strings.d.ts.map +1 -0
  1431. package/dist/components/features/activities/activities.types.d.ts +235 -0
  1432. package/dist/components/features/activities/activities.types.d.ts.map +1 -0
  1433. package/dist/components/features/activities/hooks/index.d.ts +3 -0
  1434. package/dist/components/features/activities/hooks/index.d.ts.map +1 -0
  1435. package/dist/components/features/activities/hooks/use-activity-feed.d.ts +29 -0
  1436. package/dist/components/features/activities/hooks/use-activity-feed.d.ts.map +1 -0
  1437. package/dist/components/features/activities/hooks/use-activity-resources.d.ts +23 -0
  1438. package/dist/components/features/activities/hooks/use-activity-resources.d.ts.map +1 -0
  1439. package/dist/components/features/activities/index.cjs +2 -0
  1440. package/dist/components/features/activities/index.cjs.map +1 -0
  1441. package/dist/components/features/activities/index.d.ts +8 -0
  1442. package/dist/components/features/activities/index.d.ts.map +1 -0
  1443. package/dist/components/features/activities/index.js +961 -0
  1444. package/dist/components/features/activities/index.js.map +1 -0
  1445. package/dist/components/features/activities/partials/activities-feed-card.d.ts +6 -0
  1446. package/dist/components/features/activities/partials/activities-feed-card.d.ts.map +1 -0
  1447. package/dist/components/features/activities/partials/activity-actions-menu.d.ts +9 -0
  1448. package/dist/components/features/activities/partials/activity-actions-menu.d.ts.map +1 -0
  1449. package/dist/components/features/activities/partials/activity-changes.d.ts +7 -0
  1450. package/dist/components/features/activities/partials/activity-changes.d.ts.map +1 -0
  1451. package/dist/components/features/activities/partials/activity-date-label.d.ts +7 -0
  1452. package/dist/components/features/activities/partials/activity-date-label.d.ts.map +1 -0
  1453. package/dist/components/features/activities/partials/activity-empty-state.d.ts +7 -0
  1454. package/dist/components/features/activities/partials/activity-empty-state.d.ts.map +1 -0
  1455. package/dist/components/features/activities/partials/activity-headline.d.ts +12 -0
  1456. package/dist/components/features/activities/partials/activity-headline.d.ts.map +1 -0
  1457. package/dist/components/features/activities/partials/activity-marker.d.ts +10 -0
  1458. package/dist/components/features/activities/partials/activity-marker.d.ts.map +1 -0
  1459. package/dist/components/features/activities/partials/activity-resource-tag.d.ts +10 -0
  1460. package/dist/components/features/activities/partials/activity-resource-tag.d.ts.map +1 -0
  1461. package/dist/components/features/activities/partials/activity-row.d.ts +31 -0
  1462. package/dist/components/features/activities/partials/activity-row.d.ts.map +1 -0
  1463. package/dist/components/features/activities/partials/index.d.ts +10 -0
  1464. package/dist/components/features/activities/partials/index.d.ts.map +1 -0
  1465. package/dist/components/features/activities/partials/tone-tokens.d.ts +20 -0
  1466. package/dist/components/features/activities/partials/tone-tokens.d.ts.map +1 -0
  1467. package/dist/components/features/ai-chat/ai-chat.d.ts +57 -0
  1468. package/dist/components/features/ai-chat/ai-chat.d.ts.map +1 -0
  1469. package/dist/components/features/ai-chat/ai-chat.strings.d.ts +54 -0
  1470. package/dist/components/features/ai-chat/ai-chat.strings.d.ts.map +1 -0
  1471. package/dist/components/features/ai-chat/ai-chat.types.d.ts +160 -0
  1472. package/dist/components/features/ai-chat/ai-chat.types.d.ts.map +1 -0
  1473. package/dist/components/features/ai-chat/hooks/index.d.ts +2 -0
  1474. package/dist/components/features/ai-chat/hooks/index.d.ts.map +1 -0
  1475. package/dist/components/features/ai-chat/hooks/use-ai-chat-scroll.d.ts +16 -0
  1476. package/dist/components/features/ai-chat/hooks/use-ai-chat-scroll.d.ts.map +1 -0
  1477. package/dist/components/features/ai-chat/index.cjs +3 -0
  1478. package/dist/components/features/ai-chat/index.cjs.map +1 -0
  1479. package/dist/components/features/ai-chat/index.d.ts +6 -0
  1480. package/dist/components/features/ai-chat/index.d.ts.map +1 -0
  1481. package/dist/components/features/ai-chat/index.js +559 -0
  1482. package/dist/components/features/ai-chat/index.js.map +1 -0
  1483. package/dist/components/features/ai-chat/partials/ai-chat-attachments-strip.d.ts +14 -0
  1484. package/dist/components/features/ai-chat/partials/ai-chat-attachments-strip.d.ts.map +1 -0
  1485. package/dist/components/features/ai-chat/partials/ai-chat-conversation.d.ts +22 -0
  1486. package/dist/components/features/ai-chat/partials/ai-chat-conversation.d.ts.map +1 -0
  1487. package/dist/components/features/ai-chat/partials/ai-chat-empty-state.d.ts +13 -0
  1488. package/dist/components/features/ai-chat/partials/ai-chat-empty-state.d.ts.map +1 -0
  1489. package/dist/components/features/ai-chat/partials/ai-chat-message.d.ts +18 -0
  1490. package/dist/components/features/ai-chat/partials/ai-chat-message.d.ts.map +1 -0
  1491. package/dist/components/features/ai-chat/partials/ai-chat-prompt-input.d.ts +44 -0
  1492. package/dist/components/features/ai-chat/partials/ai-chat-prompt-input.d.ts.map +1 -0
  1493. package/dist/components/features/ai-chat/partials/ai-chat-queue.d.ts +14 -0
  1494. package/dist/components/features/ai-chat/partials/ai-chat-queue.d.ts.map +1 -0
  1495. package/dist/components/features/ai-chat/partials/ai-chat-suggestions-row.d.ts +14 -0
  1496. package/dist/components/features/ai-chat/partials/ai-chat-suggestions-row.d.ts.map +1 -0
  1497. package/dist/components/features/ai-chat/partials/index.d.ts +8 -0
  1498. package/dist/components/features/ai-chat/partials/index.d.ts.map +1 -0
  1499. package/dist/components/features/card/booking-calendar-event-card.d.ts +20 -0
  1500. package/dist/components/features/card/booking-calendar-event-card.d.ts.map +1 -0
  1501. package/dist/components/features/card/card.strings.d.ts +15 -0
  1502. package/dist/components/features/card/card.strings.d.ts.map +1 -0
  1503. package/dist/components/features/card/card.types.d.ts +91 -0
  1504. package/dist/components/features/card/card.types.d.ts.map +1 -0
  1505. package/dist/components/features/card/hooks/index.d.ts +2 -0
  1506. package/dist/components/features/card/hooks/index.d.ts.map +1 -0
  1507. package/dist/components/features/card/hooks/use-shared-resource-card.d.ts +26 -0
  1508. package/dist/components/features/card/hooks/use-shared-resource-card.d.ts.map +1 -0
  1509. package/dist/components/features/card/index.cjs +2 -0
  1510. package/dist/components/features/card/index.cjs.map +1 -0
  1511. package/dist/components/features/card/index.d.ts +8 -0
  1512. package/dist/components/features/card/index.d.ts.map +1 -0
  1513. package/dist/components/features/card/index.js +305 -0
  1514. package/dist/components/features/card/index.js.map +1 -0
  1515. package/dist/components/features/card/partials/default-shared-resource-partials.d.ts +27 -0
  1516. package/dist/components/features/card/partials/default-shared-resource-partials.d.ts.map +1 -0
  1517. package/dist/components/features/card/partials/index.d.ts +2 -0
  1518. package/dist/components/features/card/partials/index.d.ts.map +1 -0
  1519. package/dist/components/features/card/shared-resource-card.d.ts +7 -0
  1520. package/dist/components/features/card/shared-resource-card.d.ts.map +1 -0
  1521. package/dist/components/features/comments/comments-provider.d.ts +15 -0
  1522. package/dist/components/features/comments/comments-provider.d.ts.map +1 -0
  1523. package/dist/components/features/comments/comments.d.ts +5 -0
  1524. package/dist/components/features/comments/comments.d.ts.map +1 -0
  1525. package/dist/components/features/comments/comments.strings.d.ts +71 -0
  1526. package/dist/components/features/comments/comments.strings.d.ts.map +1 -0
  1527. package/dist/components/features/comments/comments.types.d.ts +271 -0
  1528. package/dist/components/features/comments/comments.types.d.ts.map +1 -0
  1529. package/dist/components/features/comments/hooks/index.d.ts +6 -0
  1530. package/dist/components/features/comments/hooks/index.d.ts.map +1 -0
  1531. package/dist/components/features/comments/hooks/use-attachment-upload.d.ts +29 -0
  1532. package/dist/components/features/comments/hooks/use-attachment-upload.d.ts.map +1 -0
  1533. package/dist/components/features/comments/hooks/use-comments.d.ts +33 -0
  1534. package/dist/components/features/comments/hooks/use-comments.d.ts.map +1 -0
  1535. package/dist/components/features/comments/index.cjs +1 -0
  1536. package/dist/components/features/comments/index.d.ts +9 -0
  1537. package/dist/components/features/comments/index.d.ts.map +1 -0
  1538. package/dist/components/features/comments/index.js +3 -0
  1539. package/dist/components/features/comments/partials/comment-attachment-chip.d.ts +17 -0
  1540. package/dist/components/features/comments/partials/comment-attachment-chip.d.ts.map +1 -0
  1541. package/dist/components/features/comments/partials/comment-composer.d.ts +11 -0
  1542. package/dist/components/features/comments/partials/comment-composer.d.ts.map +1 -0
  1543. package/dist/components/features/comments/partials/comment-content.d.ts +19 -0
  1544. package/dist/components/features/comments/partials/comment-content.d.ts.map +1 -0
  1545. package/dist/components/features/comments/partials/comment-empty.d.ts +9 -0
  1546. package/dist/components/features/comments/partials/comment-empty.d.ts.map +1 -0
  1547. package/dist/components/features/comments/partials/comment-item.d.ts +4 -0
  1548. package/dist/components/features/comments/partials/comment-item.d.ts.map +1 -0
  1549. package/dist/components/features/comments/partials/comment-timeline.d.ts +4 -0
  1550. package/dist/components/features/comments/partials/comment-timeline.d.ts.map +1 -0
  1551. package/dist/components/features/comments/partials/index.d.ts +10 -0
  1552. package/dist/components/features/comments/partials/index.d.ts.map +1 -0
  1553. package/dist/components/features/event-log/event-log.d.ts +9 -0
  1554. package/dist/components/features/event-log/event-log.d.ts.map +1 -0
  1555. package/dist/components/features/event-log/event-log.strings.d.ts +18 -0
  1556. package/dist/components/features/event-log/event-log.strings.d.ts.map +1 -0
  1557. package/dist/components/features/event-log/event-log.types.d.ts +110 -0
  1558. package/dist/components/features/event-log/event-log.types.d.ts.map +1 -0
  1559. package/dist/components/features/event-log/index.cjs +2 -0
  1560. package/dist/components/features/event-log/index.cjs.map +1 -0
  1561. package/dist/components/features/event-log/index.d.ts +5 -0
  1562. package/dist/components/features/event-log/index.d.ts.map +1 -0
  1563. package/dist/components/features/event-log/index.js +201 -0
  1564. package/dist/components/features/event-log/index.js.map +1 -0
  1565. package/dist/components/features/event-log/partials/event-log-event-row.d.ts +11 -0
  1566. package/dist/components/features/event-log/partials/event-log-event-row.d.ts.map +1 -0
  1567. package/dist/components/features/filters/facets/async-select-facet.d.ts +26 -0
  1568. package/dist/components/features/filters/facets/async-select-facet.d.ts.map +1 -0
  1569. package/dist/components/features/filters/facets/date-facet.d.ts +16 -0
  1570. package/dist/components/features/filters/facets/date-facet.d.ts.map +1 -0
  1571. package/dist/components/features/filters/facets/range-facet.d.ts +28 -0
  1572. package/dist/components/features/filters/facets/range-facet.d.ts.map +1 -0
  1573. package/dist/components/features/filters/facets/search-facet.d.ts +24 -0
  1574. package/dist/components/features/filters/facets/search-facet.d.ts.map +1 -0
  1575. package/dist/components/features/filters/facets/select-facet.d.ts +17 -0
  1576. package/dist/components/features/filters/facets/select-facet.d.ts.map +1 -0
  1577. package/dist/components/features/filters/facets/tags-facet.d.ts +24 -0
  1578. package/dist/components/features/filters/facets/tags-facet.d.ts.map +1 -0
  1579. package/dist/components/features/filters/filter-context.d.ts +52 -0
  1580. package/dist/components/features/filters/filter-context.d.ts.map +1 -0
  1581. package/dist/components/features/filters/filter-layout.d.ts +14 -0
  1582. package/dist/components/features/filters/filter-layout.d.ts.map +1 -0
  1583. package/dist/components/features/filters/filters.strings.d.ts +102 -0
  1584. package/dist/components/features/filters/filters.strings.d.ts.map +1 -0
  1585. package/dist/components/features/filters/filters.types.d.ts +188 -0
  1586. package/dist/components/features/filters/filters.types.d.ts.map +1 -0
  1587. package/dist/components/features/filters/hooks/index.d.ts +4 -0
  1588. package/dist/components/features/filters/hooks/index.d.ts.map +1 -0
  1589. package/dist/components/features/filters/hooks/use-async-options.d.ts +12 -0
  1590. package/dist/components/features/filters/hooks/use-async-options.d.ts.map +1 -0
  1591. package/dist/components/features/filters/hooks/use-filter-groups.d.ts +17 -0
  1592. package/dist/components/features/filters/hooks/use-filter-groups.d.ts.map +1 -0
  1593. package/dist/components/features/filters/index.cjs +2 -0
  1594. package/dist/components/features/filters/index.cjs.map +1 -0
  1595. package/dist/components/features/filters/index.d.ts +26 -0
  1596. package/dist/components/features/filters/index.d.ts.map +1 -0
  1597. package/dist/components/features/filters/index.js +2023 -0
  1598. package/dist/components/features/filters/index.js.map +1 -0
  1599. package/dist/components/features/filters/operator-options.d.ts +10 -0
  1600. package/dist/components/features/filters/operator-options.d.ts.map +1 -0
  1601. package/dist/components/features/filters/partials/active-filter-item.d.ts +27 -0
  1602. package/dist/components/features/filters/partials/active-filter-item.d.ts.map +1 -0
  1603. package/dist/components/features/filters/partials/async-filter-content.d.ts +18 -0
  1604. package/dist/components/features/filters/partials/async-filter-content.d.ts.map +1 -0
  1605. package/dist/components/features/filters/partials/date-filter-content.d.ts +11 -0
  1606. package/dist/components/features/filters/partials/date-filter-content.d.ts.map +1 -0
  1607. package/dist/components/features/filters/partials/filter-error-boundary.d.ts +9 -0
  1608. package/dist/components/features/filters/partials/filter-error-boundary.d.ts.map +1 -0
  1609. package/dist/components/features/filters/partials/filter-list-content.d.ts +22 -0
  1610. package/dist/components/features/filters/partials/filter-list-content.d.ts.map +1 -0
  1611. package/dist/components/features/filters/partials/filter-list-item.d.ts +18 -0
  1612. package/dist/components/features/filters/partials/filter-list-item.d.ts.map +1 -0
  1613. package/dist/components/features/filters/partials/filter-operator-select.d.ts +21 -0
  1614. package/dist/components/features/filters/partials/filter-operator-select.d.ts.map +1 -0
  1615. package/dist/components/features/filters/partials/filter-pill.d.ts +22 -0
  1616. package/dist/components/features/filters/partials/filter-pill.d.ts.map +1 -0
  1617. package/dist/components/features/filters/partials/filter-popover-content.d.ts +28 -0
  1618. package/dist/components/features/filters/partials/filter-popover-content.d.ts.map +1 -0
  1619. package/dist/components/features/filters/partials/filter-tabs.d.ts +14 -0
  1620. package/dist/components/features/filters/partials/filter-tabs.d.ts.map +1 -0
  1621. package/dist/components/features/filters/partials/filter-value-display.d.ts +21 -0
  1622. package/dist/components/features/filters/partials/filter-value-display.d.ts.map +1 -0
  1623. package/dist/components/features/filters/partials/filters-button.d.ts +26 -0
  1624. package/dist/components/features/filters/partials/filters-button.d.ts.map +1 -0
  1625. package/dist/components/features/filters/partials/index.d.ts +15 -0
  1626. package/dist/components/features/filters/partials/index.d.ts.map +1 -0
  1627. package/dist/components/features/filters/partials/regular-filter-content.d.ts +25 -0
  1628. package/dist/components/features/filters/partials/regular-filter-content.d.ts.map +1 -0
  1629. package/dist/components/features/filters/partials/search-filters-list.d.ts +23 -0
  1630. package/dist/components/features/filters/partials/search-filters-list.d.ts.map +1 -0
  1631. package/dist/components/features/filters/partials/tags-filter-content.d.ts +25 -0
  1632. package/dist/components/features/filters/partials/tags-filter-content.d.ts.map +1 -0
  1633. package/dist/components/features/filters/utils/filter-utils.d.ts +38 -0
  1634. package/dist/components/features/filters/utils/filter-utils.d.ts.map +1 -0
  1635. package/dist/components/features/filters/validators.d.ts +51 -0
  1636. package/dist/components/features/filters/validators.d.ts.map +1 -0
  1637. package/dist/components/features/global-search/global-search.d.ts +32 -0
  1638. package/dist/components/features/global-search/global-search.d.ts.map +1 -0
  1639. package/dist/components/features/global-search/global-search.strings.d.ts +37 -0
  1640. package/dist/components/features/global-search/global-search.strings.d.ts.map +1 -0
  1641. package/dist/components/features/global-search/global-search.types.d.ts +99 -0
  1642. package/dist/components/features/global-search/global-search.types.d.ts.map +1 -0
  1643. package/dist/components/features/global-search/hooks/index.d.ts +3 -0
  1644. package/dist/components/features/global-search/hooks/index.d.ts.map +1 -0
  1645. package/dist/components/features/global-search/hooks/use-global-search.d.ts +34 -0
  1646. package/dist/components/features/global-search/hooks/use-global-search.d.ts.map +1 -0
  1647. package/dist/components/features/global-search/index.cjs +2 -0
  1648. package/dist/components/features/global-search/index.cjs.map +1 -0
  1649. package/dist/components/features/global-search/index.d.ts +8 -0
  1650. package/dist/components/features/global-search/index.d.ts.map +1 -0
  1651. package/dist/components/features/global-search/index.js +565 -0
  1652. package/dist/components/features/global-search/index.js.map +1 -0
  1653. package/dist/components/features/global-search/partials/global-search-empty-state.d.ts +6 -0
  1654. package/dist/components/features/global-search/partials/global-search-empty-state.d.ts.map +1 -0
  1655. package/dist/components/features/global-search/partials/global-search-footer.d.ts +10 -0
  1656. package/dist/components/features/global-search/partials/global-search-footer.d.ts.map +1 -0
  1657. package/dist/components/features/global-search/partials/global-search-idle-state.d.ts +12 -0
  1658. package/dist/components/features/global-search/partials/global-search-idle-state.d.ts.map +1 -0
  1659. package/dist/components/features/global-search/partials/global-search-input.d.ts +12 -0
  1660. package/dist/components/features/global-search/partials/global-search-input.d.ts.map +1 -0
  1661. package/dist/components/features/global-search/partials/global-search-result-row.d.ts +15 -0
  1662. package/dist/components/features/global-search/partials/global-search-result-row.d.ts.map +1 -0
  1663. package/dist/components/features/global-search/partials/global-search-tabs.d.ts +12 -0
  1664. package/dist/components/features/global-search/partials/global-search-tabs.d.ts.map +1 -0
  1665. package/dist/components/features/global-search/partials/index.d.ts +10 -0
  1666. package/dist/components/features/global-search/partials/index.d.ts.map +1 -0
  1667. package/dist/components/features/global-search/partials/tone-palettes.d.ts +4 -0
  1668. package/dist/components/features/global-search/partials/tone-palettes.d.ts.map +1 -0
  1669. package/dist/components/features/index.d.ts.map +1 -0
  1670. package/dist/components/features/kanban/hooks/index.d.ts +2 -0
  1671. package/dist/components/features/kanban/hooks/index.d.ts.map +1 -0
  1672. package/dist/components/features/kanban/hooks/use-kanban.d.ts +33 -0
  1673. package/dist/components/features/kanban/hooks/use-kanban.d.ts.map +1 -0
  1674. package/dist/components/features/kanban/index.cjs +2 -0
  1675. package/dist/components/features/kanban/index.cjs.map +1 -0
  1676. package/dist/components/features/kanban/index.d.ts +5 -0
  1677. package/dist/components/features/kanban/index.d.ts.map +1 -0
  1678. package/dist/components/features/kanban/index.js +322 -0
  1679. package/dist/components/features/kanban/index.js.map +1 -0
  1680. package/dist/components/features/kanban/kanban-context.d.ts +26 -0
  1681. package/dist/components/features/kanban/kanban-context.d.ts.map +1 -0
  1682. package/dist/components/features/kanban/kanban.d.ts +39 -0
  1683. package/dist/components/features/kanban/kanban.d.ts.map +1 -0
  1684. package/dist/components/features/kanban/kanban.strings.d.ts +25 -0
  1685. package/dist/components/features/kanban/kanban.strings.d.ts.map +1 -0
  1686. package/dist/components/features/kanban/kanban.types.d.ts +157 -0
  1687. package/dist/components/features/kanban/kanban.types.d.ts.map +1 -0
  1688. package/dist/components/features/mentions/hooks/index.d.ts +3 -0
  1689. package/dist/components/features/mentions/hooks/index.d.ts.map +1 -0
  1690. package/dist/components/features/mentions/hooks/use-mentions-search.d.ts +35 -0
  1691. package/dist/components/features/mentions/hooks/use-mentions-search.d.ts.map +1 -0
  1692. package/dist/components/features/mentions/hooks/use-mentions.d.ts +36 -0
  1693. package/dist/components/features/mentions/hooks/use-mentions.d.ts.map +1 -0
  1694. package/dist/components/features/mentions/index.cjs +1 -0
  1695. package/dist/components/features/mentions/index.d.ts +6 -0
  1696. package/dist/components/features/mentions/index.d.ts.map +1 -0
  1697. package/dist/components/features/mentions/index.js +2 -0
  1698. package/dist/components/features/mentions/mentions.strings.d.ts +23 -0
  1699. package/dist/components/features/mentions/mentions.strings.d.ts.map +1 -0
  1700. package/dist/components/features/mentions/mentions.types.d.ts +72 -0
  1701. package/dist/components/features/mentions/mentions.types.d.ts.map +1 -0
  1702. package/dist/components/features/mentions/partials/index.d.ts +5 -0
  1703. package/dist/components/features/mentions/partials/index.d.ts.map +1 -0
  1704. package/dist/components/features/mentions/partials/mention-chip.d.ts +14 -0
  1705. package/dist/components/features/mentions/partials/mention-chip.d.ts.map +1 -0
  1706. package/dist/components/features/mentions/partials/mention-content.d.ts +25 -0
  1707. package/dist/components/features/mentions/partials/mention-content.d.ts.map +1 -0
  1708. package/dist/components/features/mentions/partials/mention-inline-suggestions.d.ts +27 -0
  1709. package/dist/components/features/mentions/partials/mention-inline-suggestions.d.ts.map +1 -0
  1710. package/dist/components/features/mentions/partials/mention-picker.d.ts +20 -0
  1711. package/dist/components/features/mentions/partials/mention-picker.d.ts.map +1 -0
  1712. package/dist/components/features/mentions/utils/build-mention-html.d.ts +25 -0
  1713. package/dist/components/features/mentions/utils/build-mention-html.d.ts.map +1 -0
  1714. package/dist/components/features/mentions/utils/index.d.ts +4 -0
  1715. package/dist/components/features/mentions/utils/index.d.ts.map +1 -0
  1716. package/dist/components/features/mentions/utils/parse-mentions-from-html.d.ts +3 -0
  1717. package/dist/components/features/mentions/utils/parse-mentions-from-html.d.ts.map +1 -0
  1718. package/dist/components/features/mentions/utils/split-html-by-mentions.d.ts +17 -0
  1719. package/dist/components/features/mentions/utils/split-html-by-mentions.d.ts.map +1 -0
  1720. package/dist/components/features/overlays/alert-dialog.d.ts +6 -0
  1721. package/dist/components/features/overlays/alert-dialog.d.ts.map +1 -0
  1722. package/dist/components/features/overlays/dialog.d.ts +6 -0
  1723. package/dist/components/features/overlays/dialog.d.ts.map +1 -0
  1724. package/dist/components/features/overlays/drawer.d.ts +6 -0
  1725. package/dist/components/features/overlays/drawer.d.ts.map +1 -0
  1726. package/dist/components/features/overlays/hooks/index.d.ts +3 -0
  1727. package/dist/components/features/overlays/hooks/index.d.ts.map +1 -0
  1728. package/dist/components/features/overlays/hooks/use-native-dialog.d.ts +25 -0
  1729. package/dist/components/features/overlays/hooks/use-native-dialog.d.ts.map +1 -0
  1730. package/dist/components/features/overlays/hooks/use-overlay-actions.d.ts +24 -0
  1731. package/dist/components/features/overlays/hooks/use-overlay-actions.d.ts.map +1 -0
  1732. package/dist/components/features/overlays/index.cjs +1 -0
  1733. package/dist/components/features/overlays/index.d.ts +7 -0
  1734. package/dist/components/features/overlays/index.d.ts.map +1 -0
  1735. package/dist/components/features/overlays/index.js +2 -0
  1736. package/dist/components/features/overlays/overlays.strings.d.ts +17 -0
  1737. package/dist/components/features/overlays/overlays.strings.d.ts.map +1 -0
  1738. package/dist/components/features/overlays/overlays.types.d.ts +57 -0
  1739. package/dist/components/features/overlays/overlays.types.d.ts.map +1 -0
  1740. package/dist/components/features/rich-text-editor/form-rich-text-editor.d.ts +6 -0
  1741. package/dist/components/features/rich-text-editor/form-rich-text-editor.d.ts.map +1 -0
  1742. package/dist/components/features/rich-text-editor/index.cjs +2 -0
  1743. package/dist/components/features/rich-text-editor/index.cjs.map +1 -0
  1744. package/dist/components/features/rich-text-editor/index.d.ts +6 -0
  1745. package/dist/components/features/rich-text-editor/index.d.ts.map +1 -0
  1746. package/dist/components/features/rich-text-editor/index.js +20 -0
  1747. package/dist/components/features/rich-text-editor/index.js.map +1 -0
  1748. package/dist/components/features/rich-text-editor/partials/caret-helpers.d.ts +23 -0
  1749. package/dist/components/features/rich-text-editor/partials/caret-helpers.d.ts.map +1 -0
  1750. package/dist/components/features/rich-text-editor/partials/counts-footer.d.ts +24 -0
  1751. package/dist/components/features/rich-text-editor/partials/counts-footer.d.ts.map +1 -0
  1752. package/dist/components/features/rich-text-editor/partials/html-helpers.d.ts +8 -0
  1753. package/dist/components/features/rich-text-editor/partials/html-helpers.d.ts.map +1 -0
  1754. package/dist/components/features/rich-text-editor/partials/index.d.ts +7 -0
  1755. package/dist/components/features/rich-text-editor/partials/index.d.ts.map +1 -0
  1756. package/dist/components/features/rich-text-editor/partials/rich-text-editor-fallback.d.ts +9 -0
  1757. package/dist/components/features/rich-text-editor/partials/rich-text-editor-fallback.d.ts.map +1 -0
  1758. package/dist/components/features/rich-text-editor/partials/rich-text-editor-tiptap.d.ts +4 -0
  1759. package/dist/components/features/rich-text-editor/partials/rich-text-editor-tiptap.d.ts.map +1 -0
  1760. package/dist/components/features/rich-text-editor/partials/rich-text-editor-toolbar.d.ts +24 -0
  1761. package/dist/components/features/rich-text-editor/partials/rich-text-editor-toolbar.d.ts.map +1 -0
  1762. package/dist/components/features/rich-text-editor/rich-text-editor.d.ts +4 -0
  1763. package/dist/components/features/rich-text-editor/rich-text-editor.d.ts.map +1 -0
  1764. package/dist/components/features/rich-text-editor/rich-text-editor.strings.d.ts +29 -0
  1765. package/dist/components/features/rich-text-editor/rich-text-editor.strings.d.ts.map +1 -0
  1766. package/dist/components/features/rich-text-editor/rich-text-editor.types.d.ts +97 -0
  1767. package/dist/components/features/rich-text-editor/rich-text-editor.types.d.ts.map +1 -0
  1768. package/dist/components/features/suggestions/hooks/index.d.ts +2 -0
  1769. package/dist/components/features/suggestions/hooks/index.d.ts.map +1 -0
  1770. package/dist/components/features/suggestions/hooks/use-suggestions.d.ts +10 -0
  1771. package/dist/components/features/suggestions/hooks/use-suggestions.d.ts.map +1 -0
  1772. package/dist/components/features/suggestions/index.cjs +2 -0
  1773. package/dist/components/features/suggestions/index.cjs.map +1 -0
  1774. package/dist/components/features/suggestions/index.d.ts +5 -0
  1775. package/dist/components/features/suggestions/index.d.ts.map +1 -0
  1776. package/dist/components/features/suggestions/index.js +100 -0
  1777. package/dist/components/features/suggestions/index.js.map +1 -0
  1778. package/dist/components/features/suggestions/suggestions.d.ts +6 -0
  1779. package/dist/components/features/suggestions/suggestions.d.ts.map +1 -0
  1780. package/dist/components/features/suggestions/suggestions.strings.d.ts +15 -0
  1781. package/dist/components/features/suggestions/suggestions.strings.d.ts.map +1 -0
  1782. package/dist/components/features/suggestions/suggestions.types.d.ts +35 -0
  1783. package/dist/components/features/suggestions/suggestions.types.d.ts.map +1 -0
  1784. package/dist/components/features/sync/index.cjs +2 -0
  1785. package/dist/components/features/sync/index.cjs.map +1 -0
  1786. package/dist/components/features/sync/index.d.ts +4 -0
  1787. package/dist/components/features/sync/index.d.ts.map +1 -0
  1788. package/dist/components/features/sync/index.js +65 -0
  1789. package/dist/components/features/sync/index.js.map +1 -0
  1790. package/dist/components/features/sync/sync-range-dialog-form.d.ts +6 -0
  1791. package/dist/components/features/sync/sync-range-dialog-form.d.ts.map +1 -0
  1792. package/dist/components/features/sync/sync.strings.d.ts +13 -0
  1793. package/dist/components/features/sync/sync.strings.d.ts.map +1 -0
  1794. package/dist/components/features/sync/sync.types.d.ts +22 -0
  1795. package/dist/components/features/sync/sync.types.d.ts.map +1 -0
  1796. package/dist/components/layout/containers/containers.types.d.ts +28 -0
  1797. package/dist/components/layout/containers/containers.types.d.ts.map +1 -0
  1798. package/dist/components/layout/containers/content-container.d.ts +3 -0
  1799. package/dist/components/layout/containers/content-container.d.ts.map +1 -0
  1800. package/dist/components/layout/containers/index.cjs +1 -0
  1801. package/dist/components/layout/containers/index.d.ts +4 -0
  1802. package/dist/components/layout/containers/index.d.ts.map +1 -0
  1803. package/dist/components/layout/containers/index.js +3 -0
  1804. package/dist/components/layout/containers/section.d.ts +3 -0
  1805. package/dist/components/layout/containers/section.d.ts.map +1 -0
  1806. package/dist/components/layout/header/header.d.ts +3 -0
  1807. package/dist/components/layout/header/header.d.ts.map +1 -0
  1808. package/dist/components/layout/header/header.types.d.ts +115 -0
  1809. package/dist/components/layout/header/header.types.d.ts.map +1 -0
  1810. package/dist/components/layout/header/index.cjs +1 -0
  1811. package/dist/components/layout/header/index.d.ts +8 -0
  1812. package/dist/components/layout/header/index.d.ts.map +1 -0
  1813. package/dist/components/layout/header/index.js +2 -0
  1814. package/dist/components/layout/header/partials/header-breadcrumbs.d.ts +3 -0
  1815. package/dist/components/layout/header/partials/header-breadcrumbs.d.ts.map +1 -0
  1816. package/dist/components/layout/header/partials/header-notifications.d.ts +5 -0
  1817. package/dist/components/layout/header/partials/header-notifications.d.ts.map +1 -0
  1818. package/dist/components/layout/header/partials/header-search.d.ts +3 -0
  1819. package/dist/components/layout/header/partials/header-search.d.ts.map +1 -0
  1820. package/dist/components/layout/header/partials/header-user-menu.d.ts +3 -0
  1821. package/dist/components/layout/header/partials/header-user-menu.d.ts.map +1 -0
  1822. package/dist/components/layout/hooks/index.cjs +1 -0
  1823. package/dist/components/layout/hooks/index.d.ts +4 -0
  1824. package/dist/components/layout/hooks/index.d.ts.map +1 -0
  1825. package/dist/components/layout/hooks/index.js +2 -0
  1826. package/dist/components/layout/hooks/use-active-path.d.ts +2 -0
  1827. package/dist/components/layout/hooks/use-active-path.d.ts.map +1 -0
  1828. package/dist/components/layout/hooks/use-command-shortcut.d.ts +8 -0
  1829. package/dist/components/layout/hooks/use-command-shortcut.d.ts.map +1 -0
  1830. package/dist/components/layout/hooks/use-layout-link.d.ts +3 -0
  1831. package/dist/components/layout/hooks/use-layout-link.d.ts.map +1 -0
  1832. package/dist/components/layout/index.cjs +1 -0
  1833. package/dist/components/layout/index.d.ts +20 -0
  1834. package/dist/components/layout/index.d.ts.map +1 -0
  1835. package/dist/components/layout/index.js +7 -0
  1836. package/dist/components/layout/layout.types.d.ts +86 -0
  1837. package/dist/components/layout/layout.types.d.ts.map +1 -0
  1838. package/dist/components/layout/page/index.cjs +1 -0
  1839. package/dist/components/layout/page/index.d.ts +6 -0
  1840. package/dist/components/layout/page/index.d.ts.map +1 -0
  1841. package/dist/components/layout/page/index.js +2 -0
  1842. package/dist/components/layout/page/page-content.d.ts +12 -0
  1843. package/dist/components/layout/page/page-content.d.ts.map +1 -0
  1844. package/dist/components/layout/page/page.d.ts +3 -0
  1845. package/dist/components/layout/page/page.d.ts.map +1 -0
  1846. package/dist/components/layout/page/page.types.d.ts +94 -0
  1847. package/dist/components/layout/page/page.types.d.ts.map +1 -0
  1848. package/dist/components/layout/page/partials/page-actions.d.ts +3 -0
  1849. package/dist/components/layout/page/partials/page-actions.d.ts.map +1 -0
  1850. package/dist/components/layout/page/partials/page-header.d.ts +3 -0
  1851. package/dist/components/layout/page/partials/page-header.d.ts.map +1 -0
  1852. package/dist/components/layout/sidebar/app-sidebar.d.ts +3 -0
  1853. package/dist/components/layout/sidebar/app-sidebar.d.ts.map +1 -0
  1854. package/dist/components/layout/sidebar/components/sidebar-grouped-navigation.d.ts +5 -0
  1855. package/dist/components/layout/sidebar/components/sidebar-grouped-navigation.d.ts.map +1 -0
  1856. package/dist/components/layout/sidebar/components/sidebar-logo.d.ts +8 -0
  1857. package/dist/components/layout/sidebar/components/sidebar-logo.d.ts.map +1 -0
  1858. package/dist/components/layout/sidebar/components/sidebar-navigation-footer.d.ts +3 -0
  1859. package/dist/components/layout/sidebar/components/sidebar-navigation-footer.d.ts.map +1 -0
  1860. package/dist/components/layout/sidebar/components/sidebar-navigation-user.d.ts +21 -0
  1861. package/dist/components/layout/sidebar/components/sidebar-navigation-user.d.ts.map +1 -0
  1862. package/dist/components/layout/sidebar/components/sidebar-navigation.d.ts +7 -0
  1863. package/dist/components/layout/sidebar/components/sidebar-navigation.d.ts.map +1 -0
  1864. package/dist/components/layout/sidebar/components/sidebar-workspace-dropdown.d.ts +3 -0
  1865. package/dist/components/layout/sidebar/components/sidebar-workspace-dropdown.d.ts.map +1 -0
  1866. package/dist/components/layout/sidebar/index.cjs +1 -0
  1867. package/dist/components/layout/sidebar/index.d.ts +12 -0
  1868. package/dist/components/layout/sidebar/index.d.ts.map +1 -0
  1869. package/dist/components/layout/sidebar/index.js +3 -0
  1870. package/dist/components/layout/sidebar/sidebar.context.d.ts +12 -0
  1871. package/dist/components/layout/sidebar/sidebar.context.d.ts.map +1 -0
  1872. package/dist/components/layout/sidebar/sidebar.d.ts +16 -0
  1873. package/dist/components/layout/sidebar/sidebar.d.ts.map +1 -0
  1874. package/dist/components/layout/sidebar/sidebar.settings.d.ts +11 -0
  1875. package/dist/components/layout/sidebar/sidebar.settings.d.ts.map +1 -0
  1876. package/dist/components/layout/sidebar/sidebar.types.d.ts +122 -0
  1877. package/dist/components/layout/sidebar/sidebar.types.d.ts.map +1 -0
  1878. package/dist/components/layout/sidebar/sidebar.utils.d.ts +24 -0
  1879. package/dist/components/layout/sidebar/sidebar.utils.d.ts.map +1 -0
  1880. package/dist/components/typography/heading.d.ts +17 -0
  1881. package/dist/components/typography/heading.d.ts.map +1 -0
  1882. package/dist/components/typography/index.cjs +1 -0
  1883. package/dist/components/typography/index.d.ts +10 -0
  1884. package/dist/components/typography/index.d.ts.map +1 -0
  1885. package/dist/components/typography/index.js +3 -0
  1886. package/dist/components/typography/label.d.ts +13 -0
  1887. package/dist/components/typography/label.d.ts.map +1 -0
  1888. package/dist/components/typography/text-link.d.ts +52 -0
  1889. package/dist/components/typography/text-link.d.ts.map +1 -0
  1890. package/dist/components/typography/text.d.ts +48 -0
  1891. package/dist/components/typography/text.d.ts.map +1 -0
  1892. package/dist/components/typography/typography.d.ts +10 -0
  1893. package/dist/components/typography/typography.d.ts.map +1 -0
  1894. package/dist/components/ui/accordion.d.ts +7 -0
  1895. package/dist/components/ui/accordion.d.ts.map +1 -0
  1896. package/dist/components/ui/alert.d.ts +11 -0
  1897. package/dist/components/ui/alert.d.ts.map +1 -0
  1898. package/dist/components/ui/avatar.d.ts +12 -0
  1899. package/dist/components/ui/avatar.d.ts.map +1 -0
  1900. package/dist/components/ui/badge.d.ts +10 -0
  1901. package/dist/components/ui/badge.d.ts.map +1 -0
  1902. package/dist/components/ui/breadcrumb.d.ts +12 -0
  1903. package/dist/components/ui/breadcrumb.d.ts.map +1 -0
  1904. package/dist/components/ui/button-group.d.ts +11 -0
  1905. package/dist/components/ui/button-group.d.ts.map +1 -0
  1906. package/dist/components/ui/button.d.ts +9 -0
  1907. package/dist/components/ui/button.d.ts.map +1 -0
  1908. package/dist/components/ui/calendar.d.ts +11 -0
  1909. package/dist/components/ui/calendar.d.ts.map +1 -0
  1910. package/dist/components/ui/card.d.ts +12 -0
  1911. package/dist/components/ui/card.d.ts.map +1 -0
  1912. package/dist/components/ui/chart.d.ts +59 -0
  1913. package/dist/components/ui/chart.d.ts.map +1 -0
  1914. package/dist/components/ui/checkbox.d.ts +7 -0
  1915. package/dist/components/ui/checkbox.d.ts.map +1 -0
  1916. package/dist/components/ui/collapsible.d.ts +9 -0
  1917. package/dist/components/ui/collapsible.d.ts.map +1 -0
  1918. package/dist/components/ui/combobox.d.ts +41 -0
  1919. package/dist/components/ui/combobox.d.ts.map +1 -0
  1920. package/dist/components/ui/command.d.ts +20 -0
  1921. package/dist/components/ui/command.d.ts.map +1 -0
  1922. package/dist/components/ui/context-menu.d.ts +26 -0
  1923. package/dist/components/ui/context-menu.d.ts.map +1 -0
  1924. package/dist/components/ui/dialog.d.ts +24 -0
  1925. package/dist/components/ui/dialog.d.ts.map +1 -0
  1926. package/dist/components/ui/dropdown-menu.d.ts +34 -0
  1927. package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
  1928. package/dist/components/ui/empty.d.ts +12 -0
  1929. package/dist/components/ui/empty.d.ts.map +1 -0
  1930. package/dist/components/ui/hover-card.d.ts +6 -0
  1931. package/dist/components/ui/hover-card.d.ts.map +1 -0
  1932. package/dist/components/ui/input-group.d.ts +19 -0
  1933. package/dist/components/ui/input-group.d.ts.map +1 -0
  1934. package/dist/components/ui/input.d.ts +4 -0
  1935. package/dist/components/ui/input.d.ts.map +1 -0
  1936. package/dist/components/ui/item.d.ts +23 -0
  1937. package/dist/components/ui/item.d.ts.map +1 -0
  1938. package/dist/components/ui/pagination.d.ts +18 -0
  1939. package/dist/components/ui/pagination.d.ts.map +1 -0
  1940. package/dist/components/ui/popover.d.ts +20 -0
  1941. package/dist/components/ui/popover.d.ts.map +1 -0
  1942. package/dist/components/ui/progress.d.ts +8 -0
  1943. package/dist/components/ui/progress.d.ts.map +1 -0
  1944. package/dist/components/ui/radio-group.d.ts +6 -0
  1945. package/dist/components/ui/radio-group.d.ts.map +1 -0
  1946. package/dist/components/ui/scroll-area.d.ts +5 -0
  1947. package/dist/components/ui/scroll-area.d.ts.map +1 -0
  1948. package/dist/components/ui/select.d.ts +16 -0
  1949. package/dist/components/ui/select.d.ts.map +1 -0
  1950. package/dist/components/ui/separator.d.ts +4 -0
  1951. package/dist/components/ui/separator.d.ts.map +1 -0
  1952. package/dist/components/ui/sheet.d.ts +23 -0
  1953. package/dist/components/ui/sheet.d.ts.map +1 -0
  1954. package/dist/components/ui/sidebar.d.ts +64 -0
  1955. package/dist/components/ui/sidebar.d.ts.map +1 -0
  1956. package/dist/components/ui/skeleton.d.ts +3 -0
  1957. package/dist/components/ui/skeleton.d.ts.map +1 -0
  1958. package/dist/components/ui/slider.d.ts +4 -0
  1959. package/dist/components/ui/slider.d.ts.map +1 -0
  1960. package/dist/components/ui/slot.d.ts +13 -0
  1961. package/dist/components/ui/slot.d.ts.map +1 -0
  1962. package/dist/components/ui/sonner.d.ts +4 -0
  1963. package/dist/components/ui/sonner.d.ts.map +1 -0
  1964. package/dist/components/ui/spinner.d.ts +3 -0
  1965. package/dist/components/ui/spinner.d.ts.map +1 -0
  1966. package/dist/components/ui/switch.d.ts +6 -0
  1967. package/dist/components/ui/switch.d.ts.map +1 -0
  1968. package/dist/components/ui/table.d.ts +14 -0
  1969. package/dist/components/ui/table.d.ts.map +1 -0
  1970. package/dist/components/ui/tabs.d.ts +11 -0
  1971. package/dist/components/ui/tabs.d.ts.map +1 -0
  1972. package/dist/components/ui/textarea.d.ts +4 -0
  1973. package/dist/components/ui/textarea.d.ts.map +1 -0
  1974. package/dist/components/ui/toggle-group.d.ts +12 -0
  1975. package/dist/components/ui/toggle-group.d.ts.map +1 -0
  1976. package/dist/components/ui/toggle.d.ts +9 -0
  1977. package/dist/components/ui/toggle.d.ts.map +1 -0
  1978. package/dist/components/ui/tooltip.d.ts +11 -0
  1979. package/dist/components/ui/tooltip.d.ts.map +1 -0
  1980. package/dist/favicon.svg +1 -0
  1981. package/dist/files/inter-cyrillic-ext-wght-normal.woff2 +0 -0
  1982. package/dist/files/inter-cyrillic-wght-normal.woff2 +0 -0
  1983. package/dist/files/inter-greek-ext-wght-normal.woff2 +0 -0
  1984. package/dist/files/inter-greek-wght-normal.woff2 +0 -0
  1985. package/dist/files/inter-latin-ext-wght-normal.woff2 +0 -0
  1986. package/dist/files/inter-latin-wght-normal.woff2 +0 -0
  1987. package/dist/files/inter-vietnamese-wght-normal.woff2 +0 -0
  1988. package/dist/hooks/use-debounce.d.ts +2 -0
  1989. package/dist/hooks/use-debounce.d.ts.map +1 -0
  1990. package/dist/hooks/use-files.d.ts +29 -0
  1991. package/dist/hooks/use-files.d.ts.map +1 -0
  1992. package/dist/hooks/use-mobile.d.ts +2 -0
  1993. package/dist/hooks/use-mobile.d.ts.map +1 -0
  1994. package/dist/hooks/useFormErrors.d.ts +8 -0
  1995. package/dist/hooks/useFormErrors.d.ts.map +1 -0
  1996. package/dist/icons.svg +24 -0
  1997. package/dist/images/layers-2x.png +0 -0
  1998. package/dist/images/layers.png +0 -0
  1999. package/dist/images/marker-icon-2x.png +0 -0
  2000. package/dist/images/marker-icon.png +0 -0
  2001. package/dist/images/marker-shadow.png +0 -0
  2002. package/dist/images/spritesheet-2x.png +0 -0
  2003. package/dist/images/spritesheet.png +0 -0
  2004. package/dist/images/spritesheet.svg +156 -0
  2005. package/dist/index.cjs +1 -0
  2006. package/dist/index.d.ts +12 -0
  2007. package/dist/index.d.ts.map +1 -0
  2008. package/dist/index.js +4 -0
  2009. package/dist/lib/format.d.ts +41 -0
  2010. package/dist/lib/format.d.ts.map +1 -0
  2011. package/dist/lib/sanitize-html.d.ts +3 -0
  2012. package/dist/lib/sanitize-html.d.ts.map +1 -0
  2013. package/dist/lib/strings.cjs +2 -0
  2014. package/dist/lib/strings.cjs.map +1 -0
  2015. package/dist/lib/strings.d.ts +11 -0
  2016. package/dist/lib/strings.d.ts.map +1 -0
  2017. package/dist/lib/strings.js +25 -0
  2018. package/dist/lib/strings.js.map +1 -0
  2019. package/dist/lib/ui-provider/defaults.d.ts +3 -0
  2020. package/dist/lib/ui-provider/defaults.d.ts.map +1 -0
  2021. package/dist/lib/ui-provider/hooks.d.ts +16 -0
  2022. package/dist/lib/ui-provider/hooks.d.ts.map +1 -0
  2023. package/dist/lib/ui-provider/index.cjs +1 -0
  2024. package/dist/lib/ui-provider/index.d.ts +29 -0
  2025. package/dist/lib/ui-provider/index.d.ts.map +1 -0
  2026. package/dist/lib/ui-provider/index.js +2 -0
  2027. package/dist/lib/ui-provider/provider.d.ts +25 -0
  2028. package/dist/lib/ui-provider/provider.d.ts.map +1 -0
  2029. package/dist/lib/ui-provider/store.d.ts +26 -0
  2030. package/dist/lib/ui-provider/store.d.ts.map +1 -0
  2031. package/dist/lib/ui-provider/types.d.ts +202 -0
  2032. package/dist/lib/ui-provider/types.d.ts.map +1 -0
  2033. package/dist/lib/utils.cjs +2 -0
  2034. package/dist/lib/utils.cjs.map +1 -0
  2035. package/dist/lib/utils.d.ts +3 -0
  2036. package/dist/lib/utils.d.ts.map +1 -0
  2037. package/dist/lib/utils.js +26 -0
  2038. package/dist/lib/utils.js.map +1 -0
  2039. package/dist/showcase/assets/AreaChart-D-RqNtqG.js +6 -0
  2040. package/dist/showcase/assets/CSPContext-t69BXyB7.js +1 -0
  2041. package/dist/showcase/assets/CompositeItem-DHNLgEeV.js +1 -0
  2042. package/dist/showcase/assets/CompositeRoot-xq_0ZFev.js +1 -0
  2043. package/dist/showcase/assets/Control.FullScreen-B9vseC57.js +1 -0
  2044. package/dist/showcase/assets/DialogTrigger-Cl7n_3xX.js +1 -0
  2045. package/dist/showcase/assets/FormContext-CXdwDz7F.js +1 -0
  2046. package/dist/showcase/assets/PreviewLayout-BHemtKEf.js +1 -0
  2047. package/dist/showcase/assets/RadioGroup-DXAt4VZN.js +1 -0
  2048. package/dist/showcase/assets/Separator-C9vXwWmZ.js +1 -0
  2049. package/dist/showcase/assets/ToolbarRootContext-iF4ctnIz.js +1 -0
  2050. package/dist/showcase/assets/accordion-DzkNgNcB.js +172 -0
  2051. package/dist/showcase/assets/accordion-variants-DP5-oxLe.js +1 -0
  2052. package/dist/showcase/assets/action-menu-CyA2e9TF.js +1 -0
  2053. package/dist/showcase/assets/activities-Dt-dO5ew.js +501 -0
  2054. package/dist/showcase/assets/activities-feed-card-DZdFekXl.js +1 -0
  2055. package/dist/showcase/assets/admin-C2SeJmE7.js +80 -0
  2056. package/dist/showcase/assets/ai-Cwo0h_Xn.js +41 -0
  2057. package/dist/showcase/assets/ai-artifact-3UJofyU5.js +2 -0
  2058. package/dist/showcase/assets/ai-chat-CrFtG_Vg.js +568 -0
  2059. package/dist/showcase/assets/ai-elements-iJ15Y7pS.js +379 -0
  2060. package/dist/showcase/assets/ai-new-DuznZydd.js +167 -0
  2061. package/dist/showcase/assets/ai-tool-call-CTcGGAQU.js +1 -0
  2062. package/dist/showcase/assets/alert-CUGGckOX.js +1 -0
  2063. package/dist/showcase/assets/alert-tWped3Sw.js +59 -0
  2064. package/dist/showcase/assets/analytics.strings-BcotPUad.js +1 -0
  2065. package/dist/showcase/assets/api-key-list-Q5LAqzMn.js +73 -0
  2066. package/dist/showcase/assets/arrow-down-CfwCPcHL.js +1 -0
  2067. package/dist/showcase/assets/arrow-left-BKx9qNX6.js +1 -0
  2068. package/dist/showcase/assets/arrow-right-DlEpbqEk.js +1 -0
  2069. package/dist/showcase/assets/arrow-up-BYQ4F9L1.js +1 -0
  2070. package/dist/showcase/assets/arrow-up-right-C8r6vYfE.js +1 -0
  2071. package/dist/showcase/assets/avatar-BuZ3zTbH.js +57 -0
  2072. package/dist/showcase/assets/avatar-DR2mqPpY.js +1 -0
  2073. package/dist/showcase/assets/badge-D1HLfP93.js +28 -0
  2074. package/dist/showcase/assets/badge-check-oP2z_95u.js +1 -0
  2075. package/dist/showcase/assets/bell-BTX2D-ES.js +1 -0
  2076. package/dist/showcase/assets/bot-CKh5XgUG.js +1 -0
  2077. package/dist/showcase/assets/box-F1uaZ6iw.js +1 -0
  2078. package/dist/showcase/assets/brain-dD_ppLUa.js +1 -0
  2079. package/dist/showcase/assets/brand-zisZOFKf.js +40 -0
  2080. package/dist/showcase/assets/breadcrumb-C7vv0L8K.js +52 -0
  2081. package/dist/showcase/assets/breadcrumb-fay5sLba.js +1 -0
  2082. package/dist/showcase/assets/breadcrumbs-DklRXepp.js +1 -0
  2083. package/dist/showcase/assets/briefcase-D9M4aNmi.js +1 -0
  2084. package/dist/showcase/assets/button-DbhXfR1N.js +44 -0
  2085. package/dist/showcase/assets/button-group-BpdhyMif.js +1 -0
  2086. package/dist/showcase/assets/buttons-XexbmUtN.js +259 -0
  2087. package/dist/showcase/assets/calendar-BADJgjpI.js +16 -0
  2088. package/dist/showcase/assets/calendar-Djh3xLVx.js +1 -0
  2089. package/dist/showcase/assets/calendar-dWZ2-0gU.js +1 -0
  2090. package/dist/showcase/assets/card-BUSAPPkx.js +1 -0
  2091. package/dist/showcase/assets/cards-DHBPe01w.js +328 -0
  2092. package/dist/showcase/assets/chart-column-6l5wIZ0h.js +1 -0
  2093. package/dist/showcase/assets/chevron-down-at2vrt1V.js +1 -0
  2094. package/dist/showcase/assets/chevron-left-DIs3WYNO.js +1 -0
  2095. package/dist/showcase/assets/chevron-right-BNy0Or0x.js +1 -0
  2096. package/dist/showcase/assets/chevron-up-CX7619BJ.js +1 -0
  2097. package/dist/showcase/assets/chevrons-up-down-Be6eciau.js +1 -0
  2098. package/dist/showcase/assets/chunk-CilyBKbf.js +1 -0
  2099. package/dist/showcase/assets/circle-C0Yd1DDS.js +1 -0
  2100. package/dist/showcase/assets/circle-alert-DfQp_X3_.js +1 -0
  2101. package/dist/showcase/assets/circle-check-BkqQe1tv.js +1 -0
  2102. package/dist/showcase/assets/circle-check-big-BXxHUhuc.js +1 -0
  2103. package/dist/showcase/assets/circle-dot-HeRgxZxN.js +1 -0
  2104. package/dist/showcase/assets/circle-question-mark-BgS4fb6N.js +1 -0
  2105. package/dist/showcase/assets/circle-x-CMzwDsaf.js +1 -0
  2106. package/dist/showcase/assets/clock-ynCzs_rR.js +1 -0
  2107. package/dist/showcase/assets/code-xml-B8aVstrJ.js +1 -0
  2108. package/dist/showcase/assets/collapsible-C8CKdiRn.js +27 -0
  2109. package/dist/showcase/assets/collapsible-u43HxDHB.js +1 -0
  2110. package/dist/showcase/assets/combobox-D-6ff0VG.js +622 -0
  2111. package/dist/showcase/assets/command-BsHudlBe.js +1 -0
  2112. package/dist/showcase/assets/command-DZqmBolX.js +45 -0
  2113. package/dist/showcase/assets/comment-composer-OnxlkC5y.js +1 -0
  2114. package/dist/showcase/assets/comment-item-DmZ1AJ2Y.js +1 -0
  2115. package/dist/showcase/assets/comments-BjIVksjE.js +349 -0
  2116. package/dist/showcase/assets/commerce-3T1GxvrA.js +78 -0
  2117. package/dist/showcase/assets/commerce-extras-CYv_uRQR.js +179 -0
  2118. package/dist/showcase/assets/composite-mol0-2zZ.js +1 -0
  2119. package/dist/showcase/assets/contact-card-CWAANJqn.js +65 -0
  2120. package/dist/showcase/assets/content-container-D3Phw6h8.js +1 -0
  2121. package/dist/showcase/assets/copyable-BdzUH3U3.js +96 -0
  2122. package/dist/showcase/assets/course-card-Cb6Y2vJ6.js +113 -0
  2123. package/dist/showcase/assets/cpu-CRrekbGQ.js +1 -0
  2124. package/dist/showcase/assets/credit-card--5vg7bQy.js +1 -0
  2125. package/dist/showcase/assets/currency-VuqnKj_Y.js +149 -0
  2126. package/dist/showcase/assets/customers-BETQwFRp.js +1 -0
  2127. package/dist/showcase/assets/dark-surfaces-DEyBimFz.js +90 -0
  2128. package/dist/showcase/assets/database-Bnvw0wVV.js +1 -0
  2129. package/dist/showcase/assets/date-block-IhoCVl_d.js +1 -0
  2130. package/dist/showcase/assets/date-picker-DnJpsnaF.js +1 -0
  2131. package/dist/showcase/assets/date-pickers-CEbieq-R.js +110 -0
  2132. package/dist/showcase/assets/dense-info-B04QmrOd.js +106 -0
  2133. package/dist/showcase/assets/dialog-DotEO3IO.js +1 -0
  2134. package/dist/showcase/assets/display-hK7Dtm-B.js +392 -0
  2135. package/dist/showcase/assets/dist-DQgGKvzA.js +1 -0
  2136. package/dist/showcase/assets/dollar-sign-gJtl-XaL.js +1 -0
  2137. package/dist/showcase/assets/download-CMrNgeil.js +1 -0
  2138. package/dist/showcase/assets/dropdown-menu-Cqv6D7Sb.js +1 -0
  2139. package/dist/showcase/assets/dropzone-v69fWHZJ.js +1 -0
  2140. package/dist/showcase/assets/ellipsis-CgqPlt6Z.js +1 -0
  2141. package/dist/showcase/assets/ellipsis-vertical-CiJqC0n2.js +1 -0
  2142. package/dist/showcase/assets/empty-DYHzk-Gb.js +1 -0
  2143. package/dist/showcase/assets/empty-item-CTwvC_3M.js +49 -0
  2144. package/dist/showcase/assets/empty-state-eUgJ4h41.js +188 -0
  2145. package/dist/showcase/assets/enhanced-activities-XU2u5gO6.js +359 -0
  2146. package/dist/showcase/assets/esm-B7xAMXnv.js +2 -0
  2147. package/dist/showcase/assets/event-calendar-D2rjpzq1.js +138 -0
  2148. package/dist/showcase/assets/event-log-BxER62Ds.js +326 -0
  2149. package/dist/showcase/assets/example-DPfw-R7_.js +1 -0
  2150. package/dist/showcase/assets/external-link-DJNGkjZ0.js +1 -0
  2151. package/dist/showcase/assets/eye-BQU3UqWi.js +1 -0
  2152. package/dist/showcase/assets/feature-announcement-CjGQEODB.js +34 -0
  2153. package/dist/showcase/assets/fetchers-SLCIqgnM.js +1 -0
  2154. package/dist/showcase/assets/file-DBpbC8g-.js +1 -0
  2155. package/dist/showcase/assets/file-text-DokBif5V.js +1 -0
  2156. package/dist/showcase/assets/filters-DM2olMKy.js +78 -0
  2157. package/dist/showcase/assets/flag-hAuZbHU1.js +1 -0
  2158. package/dist/showcase/assets/folder-open-DqubQ0ts.js +1 -0
  2159. package/dist/showcase/assets/form-sizing-CfbZF8Ja.js +1 -0
  2160. package/dist/showcase/assets/format-DoQ4Wqkq.js +1 -0
  2161. package/dist/showcase/assets/format-gCABLair.js +1 -0
  2162. package/dist/showcase/assets/format-metric-value-cyOYS377.js +1 -0
  2163. package/dist/showcase/assets/forms-FsAT0C-I.js +790 -0
  2164. package/dist/showcase/assets/generic-BUuo7j09.js +1 -0
  2165. package/dist/showcase/assets/getPseudoElementBounds-l8uxcPNL.js +1 -0
  2166. package/dist/showcase/assets/gift-CS7Tg3kD.js +1 -0
  2167. package/dist/showcase/assets/giftcard-cards-h1ffLs9F.js +85 -0
  2168. package/dist/showcase/assets/git-branch-D4-6vv6t.js +1 -0
  2169. package/dist/showcase/assets/global-search-BUyhhsQv.js +90 -0
  2170. package/dist/showcase/assets/globe-CqLYhUfl.js +1 -0
  2171. package/dist/showcase/assets/gradient-card-Bwr9OLIL.js +58 -0
  2172. package/dist/showcase/assets/header-notifications-BWla1yhM.js +1 -0
  2173. package/dist/showcase/assets/heart-DfZtXfIP.js +1 -0
  2174. package/dist/showcase/assets/house-DhIReDt8.js +1 -0
  2175. package/dist/showcase/assets/icon-badge-BgRFYZEc.js +1 -0
  2176. package/dist/showcase/assets/image-D_eNEZWQ.js +1 -0
  2177. package/dist/showcase/assets/inbox-5sFkO7gC.js +1 -0
  2178. package/dist/showcase/assets/index-B-Z7p0So.js +10 -0
  2179. package/dist/showcase/assets/index-Cu3Ssz5r.css +2 -0
  2180. package/dist/showcase/assets/inertValue-NU_Amr-x.js +1 -0
  2181. package/dist/showcase/assets/info-DyB6KH3Z.js +1 -0
  2182. package/dist/showcase/assets/inline-stat-D2aaM1Vt.js +1 -0
  2183. package/dist/showcase/assets/input-BS64kyoq.js +1 -0
  2184. package/dist/showcase/assets/input-DWLyniGt.js +1 -0
  2185. package/dist/showcase/assets/input-group-BS8j5Eek.js +47 -0
  2186. package/dist/showcase/assets/input-group-B_E_3EGS.js +1 -0
  2187. package/dist/showcase/assets/inputs-DOQ2foig.js +49 -0
  2188. package/dist/showcase/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
  2189. package/dist/showcase/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
  2190. package/dist/showcase/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
  2191. package/dist/showcase/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
  2192. package/dist/showcase/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
  2193. package/dist/showcase/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
  2194. package/dist/showcase/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
  2195. package/dist/showcase/assets/invoice-header-C2-uQE_s.js +36 -0
  2196. package/dist/showcase/assets/invoice-items-BUunRJqA.js +36 -0
  2197. package/dist/showcase/assets/invoice-mini-BrLMrzN6.js +14 -0
  2198. package/dist/showcase/assets/invoice-table-CaB9Z8jI.js +30 -0
  2199. package/dist/showcase/assets/isElementDisabled-BLmk_uhf.js +1 -0
  2200. package/dist/showcase/assets/isSameDay-rwvIyLOL.js +1 -0
  2201. package/dist/showcase/assets/isToday-CIAzBrb5.js +1 -0
  2202. package/dist/showcase/assets/italic-B02a4PdD.js +1 -0
  2203. package/dist/showcase/assets/item-C-0RObvI.js +117 -0
  2204. package/dist/showcase/assets/item-CCu0Ufaq.js +1 -0
  2205. package/dist/showcase/assets/item-DF4m_56j.js +1 -0
  2206. package/dist/showcase/assets/kanban-BgW23a7P.js +175 -0
  2207. package/dist/showcase/assets/label-MdV7pglj.js +1 -0
  2208. package/dist/showcase/assets/layout-containers-nKVReEJB.js +96 -0
  2209. package/dist/showcase/assets/layout-header-CKyxHHPC.js +170 -0
  2210. package/dist/showcase/assets/layout-page-ClD2yMnK.js +122 -0
  2211. package/dist/showcase/assets/layout-sidebar-jdQnYDiT.js +224 -0
  2212. package/dist/showcase/assets/layout-users-Cv849xnU.js +104 -0
  2213. package/dist/showcase/assets/leaflet-src-9EZQ14iG.js +1 -0
  2214. package/dist/showcase/assets/leaflet.draw-CwFqqsDc.js +1 -0
  2215. package/dist/showcase/assets/lib-BHW4JERQ.js +1 -0
  2216. package/dist/showcase/assets/lock-B8bfl9sZ.js +1 -0
  2217. package/dist/showcase/assets/mail-DmOBTX4I.js +1 -0
  2218. package/dist/showcase/assets/map-ButgRl8f.js +124 -0
  2219. package/dist/showcase/assets/map-pin-o3egisLq.js +1 -0
  2220. package/dist/showcase/assets/menus-DdXgYKVA.js +89 -0
  2221. package/dist/showcase/assets/message-square-Bl6P4TA0.js +1 -0
  2222. package/dist/showcase/assets/metadata-list-aXo96h_U.js +278 -0
  2223. package/dist/showcase/assets/metric-BLHKuZtE.js +1 -0
  2224. package/dist/showcase/assets/metric-grid-6Dpj5eV3.js +1 -0
  2225. package/dist/showcase/assets/metric-trend-chip-m389ipmG.js +1 -0
  2226. package/dist/showcase/assets/metrics-analytics-bar-B-1IUlHf.js +44 -0
  2227. package/dist/showcase/assets/metrics-analytics-cards-B8tvK_RB.js +77 -0
  2228. package/dist/showcase/assets/metrics-comparison-DKJ7Js3F.js +76 -0
  2229. package/dist/showcase/assets/metrics-heatmap-BlRnJoI0.js +27 -0
  2230. package/dist/showcase/assets/metrics-inline-badge-COI7f64X.js +17 -0
  2231. package/dist/showcase/assets/metrics-kpi-row-LRfmKhsy.js +31 -0
  2232. package/dist/showcase/assets/metrics-micro-grid-DmqIQVVR.js +42 -0
  2233. package/dist/showcase/assets/metrics-overview-Dbf5RM2k.js +192 -0
  2234. package/dist/showcase/assets/metrics-stat-cards-D5oevQvv.js +54 -0
  2235. package/dist/showcase/assets/minus-D-jmUi0G.js +1 -0
  2236. package/dist/showcase/assets/money-display-C__61373.js +1 -0
  2237. package/dist/showcase/assets/month-year-picker-BfBQePUY.js +1 -0
  2238. package/dist/showcase/assets/navigation-DUAe-sQV.js +86 -0
  2239. package/dist/showcase/assets/navigation-extras-itSAf6QT.js +43 -0
  2240. package/dist/showcase/assets/navigation-fAOvwIlP.js +230 -0
  2241. package/dist/showcase/assets/onboarding-checklist-1gmzk3_J.js +119 -0
  2242. package/dist/showcase/assets/orders-DNn7r9k_.js +1 -0
  2243. package/dist/showcase/assets/overlays-BMTBOIEI.js +88 -0
  2244. package/dist/showcase/assets/overlays-Lu16yJWM.js +393 -0
  2245. package/dist/showcase/assets/package-BIa1hPVQ.js +1 -0
  2246. package/dist/showcase/assets/page-action-button-C5NiQHnP.js +1 -0
  2247. package/dist/showcase/assets/page-header-Cwf9DuhD.js +1 -0
  2248. package/dist/showcase/assets/pagination-9iSNmdCx.js +1 -0
  2249. package/dist/showcase/assets/pagination-MjniF-7j.js +42 -0
  2250. package/dist/showcase/assets/paperclip-CaNLUOIA.js +1 -0
  2251. package/dist/showcase/assets/pencil-DTLGPoc_.js +1 -0
  2252. package/dist/showcase/assets/phone-XvU6LndA.js +1 -0
  2253. package/dist/showcase/assets/plus-BDSCn8ol.js +1 -0
  2254. package/dist/showcase/assets/popover-CvhuubS6.js +1 -0
  2255. package/dist/showcase/assets/popover-DUQqLZN2.js +1 -0
  2256. package/dist/showcase/assets/popover-menu-DVGBuFpL.js +1 -0
  2257. package/dist/showcase/assets/progress-BQopCRpV.js +1 -0
  2258. package/dist/showcase/assets/progress-CvSUR260.js +18 -0
  2259. package/dist/showcase/assets/props-table-BzUnIcv-.js +1 -0
  2260. package/dist/showcase/assets/props.generated-BqPfiNI-.json +32423 -0
  2261. package/dist/showcase/assets/quote-D55lkoXn.js +1 -0
  2262. package/dist/showcase/assets/receipt-D3ilhl9U.js +1 -0
  2263. package/dist/showcase/assets/refresh-cw-Csl2LQ4l.js +1 -0
  2264. package/dist/showcase/assets/resolveAriaLabelledBy-DmY5COAB.js +1 -0
  2265. package/dist/showcase/assets/resolveValueLabel-CM5i142y.js +1 -0
  2266. package/dist/showcase/assets/rich-text-editor-Bz7jWvPv.js +124 -0
  2267. package/dist/showcase/assets/rich-text-editor-DWKFpgNI.js +141 -0
  2268. package/dist/showcase/assets/rotate-ccw-BnkpK7eq.js +1 -0
  2269. package/dist/showcase/assets/scroll-area-BTVLd58j.js +1 -0
  2270. package/dist/showcase/assets/scroll-area-CgFEDepJ.js +32 -0
  2271. package/dist/showcase/assets/select-B7-tZDlG.js +1 -0
  2272. package/dist/showcase/assets/send-BhjEdZ06.js +1 -0
  2273. package/dist/showcase/assets/separator-CJayjKGP.js +28 -0
  2274. package/dist/showcase/assets/separator-CZ_sPWQj.js +1 -0
  2275. package/dist/showcase/assets/settings-Duj7gAZe.js +1 -0
  2276. package/dist/showcase/assets/sheet-BMabZ_Gj.js +1 -0
  2277. package/dist/showcase/assets/shield-C22sWOf4.js +1 -0
  2278. package/dist/showcase/assets/shield-alert-DgZ6UO46.js +1 -0
  2279. package/dist/showcase/assets/shield-check-jGSgmijm.js +1 -0
  2280. package/dist/showcase/assets/shopping-bag-Cd09Ga6D.js +1 -0
  2281. package/dist/showcase/assets/sidebar.context-CXTHS3vn.js +1 -0
  2282. package/dist/showcase/assets/skeleton-Dmp4eC1A.js +1 -0
  2283. package/dist/showcase/assets/skeleton-FLNbc7QP.js +29 -0
  2284. package/dist/showcase/assets/smart-card-50WN9sCI.js +1 -0
  2285. package/dist/showcase/assets/sonner-DR_DYpqb.js +22 -0
  2286. package/dist/showcase/assets/sortable.esm-C_l8_Iqt.js +5 -0
  2287. package/dist/showcase/assets/sparkles-C-fyahzv.js +1 -0
  2288. package/dist/showcase/assets/spinner-B8jgVQNj.js +30 -0
  2289. package/dist/showcase/assets/spinner-C4zPRpI0.js +49 -0
  2290. package/dist/showcase/assets/spinner-DFjHsQlR.js +1 -0
  2291. package/dist/showcase/assets/spritesheet-DpIxuf5L.svg +156 -0
  2292. package/dist/showcase/assets/square-pen-Dp7lCfI3.js +1 -0
  2293. package/dist/showcase/assets/stacked-avatars-CTckbUiW.js +1 -0
  2294. package/dist/showcase/assets/star-l00ivfkD.js +1 -0
  2295. package/dist/showcase/assets/startOfDay-Xmododib.js +1 -0
  2296. package/dist/showcase/assets/styles-zuwR0q1z.js +1 -0
  2297. package/dist/showcase/assets/switch-D3LrIrTQ.js +1 -0
  2298. package/dist/showcase/assets/switch-ylXVyh_N.js +1 -0
  2299. package/dist/showcase/assets/table-Cn3-19zb.js +1 -0
  2300. package/dist/showcase/assets/table-ao3IcAnF.js +390 -0
  2301. package/dist/showcase/assets/tabs-CTLQKtiu.js +19 -0
  2302. package/dist/showcase/assets/tabs-lc1fX94A.js +1 -0
  2303. package/dist/showcase/assets/text-button-Fu8UY1A8.js +1 -0
  2304. package/dist/showcase/assets/text-link--EyGasJN.js +1 -0
  2305. package/dist/showcase/assets/textarea-BdhnlNrF.js +1 -0
  2306. package/dist/showcase/assets/textarea-D1kG3a9B.js +1 -0
  2307. package/dist/showcase/assets/timelines-DF3tNgyG.js +186 -0
  2308. package/dist/showcase/assets/toggle-group-CfxuWsv9.js +1 -0
  2309. package/dist/showcase/assets/toggles-CacdBPlV.js +71 -0
  2310. package/dist/showcase/assets/toggles-group-CRhgTGmL.js +32 -0
  2311. package/dist/showcase/assets/trash-2-B0_GprQM.js +1 -0
  2312. package/dist/showcase/assets/trending-up-B202l1b6.js +1 -0
  2313. package/dist/showcase/assets/truck-Bl1pNrHi.js +1 -0
  2314. package/dist/showcase/assets/typography-DEtOxBlR.js +214 -0
  2315. package/dist/showcase/assets/ui-badge-n4RA0J5b.js +28 -0
  2316. package/dist/showcase/assets/ui-card-Ck-kzrTh.js +30 -0
  2317. package/dist/showcase/assets/ui-table-gzOp82pf.js +42 -0
  2318. package/dist/showcase/assets/upload-tray-VvKdTZSi.js +138 -0
  2319. package/dist/showcase/assets/useAnchoredPopupScrollLock-Cu2ZwN7Z.js +1 -0
  2320. package/dist/showcase/assets/useCollapsiblePanel-C6_cdQ7B.js +1 -0
  2321. package/dist/showcase/assets/useCompositeItem-BfUPqXoj.js +1 -0
  2322. package/dist/showcase/assets/useCompositeListItem-Cf2lpKB8.js +1 -0
  2323. package/dist/showcase/assets/useControlled-C6q3nmcf.js +1 -0
  2324. package/dist/showcase/assets/useLabelableId-CfPT16c1.js +1 -0
  2325. package/dist/showcase/assets/useOpenInteractionType-CGeqRuuY.js +1 -0
  2326. package/dist/showcase/assets/useRender-CoUlh0uZ.js +1 -0
  2327. package/dist/showcase/assets/useRole-DSPUSyVX.js +1 -0
  2328. package/dist/showcase/assets/useTriggerFocusGuards-BwZ1HD24.js +1 -0
  2329. package/dist/showcase/assets/useValueChanged-Dej794I1.js +1 -0
  2330. package/dist/showcase/assets/user-3L762Mec.js +1 -0
  2331. package/dist/showcase/assets/user-plus-9WRYjS04.js +1 -0
  2332. package/dist/showcase/assets/users-CxKZ7gt8.js +1 -0
  2333. package/dist/showcase/assets/valueToPercent-CDF3aNnc.js +1 -0
  2334. package/dist/showcase/assets/vendor-profile-BaCptdMF.js +37 -0
  2335. package/dist/showcase/assets/wrench-Duh91tnW.js +1 -0
  2336. package/dist/showcase/assets/x-t42iKYpL.js +1 -0
  2337. package/dist/showcase/assets/zap-D0z3Tv_L.js +1 -0
  2338. package/dist/showcase/favicon.svg +1 -0
  2339. package/dist/showcase/icons.svg +24 -0
  2340. package/dist/showcase/index.html +15 -0
  2341. package/dist/style.css +2 -0
  2342. package/dist/types/index.d.ts +12 -0
  2343. package/dist/types/index.d.ts.map +1 -0
  2344. package/dist/types/locale.types.d.ts +8 -0
  2345. package/dist/types/locale.types.d.ts.map +1 -0
  2346. package/dist/types/pagination.types.d.ts +19 -0
  2347. package/dist/types/pagination.types.d.ts.map +1 -0
  2348. package/package.json +301 -0
  2349. package/scripts/install-skill.mjs +184 -0
  2350. package/scripts/serve-showcase.mjs +111 -0
  2351. package/src/App.css +373 -0
  2352. package/style.css.d.ts +3 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forms-BAVsxxRk.js","names":[],"sources":["../../src/components/ui/checkbox.tsx","../../src/components/base/forms/fields/select.tsx","../../src/components/base/forms/fields/switch-card.tsx","../../src/components/base/forms/fields/toggle-field.tsx","../../src/components/base/forms/fields/tags-input.tsx","../../src/components/base/forms/fields/phone-input.tsx","../../src/components/base/forms/fields/percentage-input.tsx","../../src/components/ui/slider.tsx","../../src/components/base/forms/fields/slider.tsx","../../src/components/base/forms/fields/list-radio-group.tsx","../../src/components/base/forms/fields/rounding-mode-select.tsx","../../src/components/base/forms/fields/rich-select.tsx","../../src/components/base/forms/fields/dimensions-input.tsx","../../src/components/base/forms/fields/weight-input.tsx","../../src/components/base/forms/fields/coordinates-input.tsx","../../src/components/base/forms/fields/date-time-input.tsx","../../src/components/base/forms/fields/time-picker.tsx","../../src/hooks/use-files.ts","../../src/components/base/forms/fields/file-upload.tsx","../../src/components/base/forms/fields/image-upload.tsx","../../src/components/base/forms/fields/dropzone.tsx","../../src/components/base/forms/fields/avatar-upload.tsx","../../src/components/base/forms/fields/media-gallery.tsx","../../src/components/base/forms/fields/upload-progress-list.tsx","../../src/components/base/forms/fields/upload-tray.tsx","../../src/components/base/forms/fields/repeaters.strings.ts","../../src/components/base/forms/fields/repeater.tsx","../../src/components/base/forms/fields/key-value-editor.tsx","../../src/components/base/forms/fields/string-repeater.tsx","../../src/components/base/forms/fields/object-repeater.tsx","../../src/components/base/forms/fields/list.tsx","../../src/components/base/forms/fields/pill-radio-group.tsx","../../src/components/base/forms/fields/localized-string-field.tsx","../../src/components/base/forms/fields/localized-object-field.tsx","../../src/components/base/forms/fields/localized-string-repeater.tsx","../../src/components/base/forms/operation-password-form.tsx"],"sourcesContent":["\"use client\"\n\nimport { Checkbox as CheckboxPrimitive } from \"@base-ui/react/checkbox\"\nimport { CheckIcon } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nexport interface CheckboxProps extends Omit<CheckboxPrimitive.Root.Props, 'onChange'> {\n\tonCheckedChange?: (checked: boolean | 'indeterminate') => void\n}\n\nfunction Checkbox({\n\tclassName,\n\tonCheckedChange,\n\t...props\n}: CheckboxProps) {\n\treturn (\n\t\t<CheckboxPrimitive.Root\n\t\t\tdata-slot=\"checkbox\"\n\t\t\tclassName={cn(\n\t\t\t\t\"peer size-4 shrink-0 rounded-[4px] border border-input shadow-xs transition-[color,box-shadow] outline-none\",\n\t\t\t\t\"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n\t\t\t\t\"aria-invalid:ring-destructive/20 aria-invalid:border-destructive\",\n\t\t\t\t\"data-[checked]:bg-primary data-[checked]:border-primary data-[checked]:text-primary-foreground\",\n\t\t\t\t\"data-[indeterminate]:bg-primary data-[indeterminate]:border-primary data-[indeterminate]:text-primary-foreground\",\n\t\t\t\t\"disabled:cursor-not-allowed disabled:opacity-50\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\tonCheckedChange={onCheckedChange}\n\t\t\t{...props}\n\t\t>\n\t\t\t<CheckboxPrimitive.Indicator\n\t\t\t\tdata-slot=\"checkbox-indicator\"\n\t\t\t\tclassName=\"flex items-center justify-center text-current\"\n\t\t\t>\n\t\t\t\t<CheckIcon className=\"size-3.5\" />\n\t\t\t</CheckboxPrimitive.Indicator>\n\t\t</CheckboxPrimitive.Root>\n\t)\n}\n\nexport { Checkbox }\n","import { forwardRef, useMemo, useCallback, memo, type ReactNode } from 'react';\nimport * as baseui from '@/components/ui/select';\nimport { useFormsConfig, type FormControlSize } from '@/lib/ui-provider';\nimport { useStrings, type StringsProp } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\nimport { formControlSizeClasses, resolveFormControlSize } from '../form-sizing';\n\nexport interface SelectStrings {\n placeholder: string;\n}\n\nexport const defaultSelectStrings: SelectStrings = {\n placeholder: 'Select an option',\n};\n\nexport interface SelectOption {\n value: string;\n label: string;\n icon?: ReactNode;\n disabled?: boolean;\n}\n\nexport interface SelectProps {\n /** Available options */\n options: SelectOption[];\n\n /** Placeholder text — overrides `strings.placeholder` when provided. */\n placeholder?: string;\n\n /** String overrides (e.g. placeholder). */\n strings?: StringsProp<SelectStrings>;\n\n /** Allow clearing the selection */\n allowClear?: boolean;\n\n /** Error state for styling (passed from FormField) */\n invalid?: boolean;\n\n /** Visual size */\n size?: FormControlSize;\n\n /** Additional class names for the trigger */\n className?: string;\n\n /** Change handler - returns undefined when cleared */\n onChange?: (value: string | undefined) => void;\n\n /** Current value */\n value?: string | null;\n\n /** Default value */\n defaultValue?: string | null;\n\n /** Disabled state */\n disabled?: boolean;\n\n /** Field name */\n name?: string;\n\n /** Required state */\n required?: boolean;\n\n /** Open state (controlled) */\n open?: boolean;\n\n /** Default open state */\n defaultOpen?: boolean;\n\n /** Open change handler */\n onOpenChange?: (open: boolean) => void;\n}\n\n// Internal value for \"empty\" selection (base-ui doesn't allow empty string)\nconst EMPTY_VALUE = '__select_empty__';\n\n// Pure helper functions - moved outside component to avoid recreation\nconst toInternal = (val?: string | null): string | undefined => {\n if (val === '' || val === null) return EMPTY_VALUE;\n return val ?? undefined;\n};\n\nconst toExternal = (val: string): string | undefined => {\n if (val === EMPTY_VALUE) return undefined;\n return val;\n};\n\n/**\n * Simplified Select component for use with FormField wrapper.\n * Handles options, placeholder, and allowClear functionality.\n * Chrome (label, hint, error) handled by FormField.\n */\nexport const Select = memo(\n forwardRef<HTMLButtonElement, SelectProps>(\n (\n {\n options,\n placeholder,\n strings: stringsProp,\n allowClear = false,\n invalid,\n size: sizeProp,\n className,\n onChange,\n disabled,\n defaultOpen,\n open,\n onOpenChange,\n name,\n required,\n value,\n defaultValue,\n },\n ref\n ) => {\n const strings = useStrings(defaultSelectStrings, stringsProp);\n const { defaultControlSize } = useFormsConfig();\n const size = resolveFormControlSize(sizeProp, defaultControlSize);\n const resolvedPlaceholder = placeholder ?? strings.placeholder;\n // Memoize normalized options\n const normalizedOptions = useMemo(() => {\n const mapped: SelectOption[] = options.map((opt) => ({\n ...opt,\n value: toInternal(opt.value) ?? '',\n }));\n\n // Add clear option at the start if allowClear is enabled\n if (allowClear) {\n const hasClearOption = mapped.some((opt) => opt.value === EMPTY_VALUE);\n if (!hasClearOption) {\n mapped.unshift({\n label: resolvedPlaceholder,\n value: EMPTY_VALUE,\n });\n }\n }\n\n return mapped;\n }, [options, allowClear, resolvedPlaceholder]);\n\n const normalizedValue = useMemo(() => toInternal(value), [value]);\n const normalizedDefaultValue = useMemo(() => toInternal(defaultValue), [defaultValue]);\n const selectedLabel = useMemo(() => {\n const selectedValue = normalizedValue ?? normalizedDefaultValue;\n if (selectedValue === undefined) {\n return undefined;\n }\n\n return normalizedOptions.find(\n (option) => option.value === selectedValue,\n )?.label;\n }, [normalizedDefaultValue, normalizedOptions, normalizedValue]);\n\n const handleValueChange = useCallback(\n (nextValue: string | null) => {\n if (nextValue !== null) {\n onChange?.(toExternal(nextValue));\n }\n },\n [onChange]\n );\n\n const resolvedInvalid = Boolean(invalid);\n\n return (\n <baseui.Select\n onValueChange={(value) => handleValueChange(value)}\n disabled={disabled}\n defaultOpen={defaultOpen}\n open={open}\n onOpenChange={onOpenChange}\n name={name}\n required={required}\n value={normalizedValue}\n defaultValue={normalizedDefaultValue}\n >\n <baseui.SelectTrigger\n ref={ref}\n aria-invalid={resolvedInvalid || undefined}\n className={cn(\n 'select--component',\n // Base styles matching Input — `!shadow-none` strips the\n // shadcn primitive's baked-in `shadow-xs` so the trigger\n // matches our flat Input chrome.\n 'flex w-full items-center justify-between rounded-md border px-3 py-1 !shadow-none',\n 'transition-[color,box-shadow] outline-none',\n formControlSizeClasses[size],\n // Background\n 'bg-transparent dark:bg-input/30',\n // Placeholder styling\n 'data-[placeholder]:text-muted-foreground',\n // Focus styles\n 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n // Invalid/error styles\n 'aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive',\n // Disabled styles\n 'disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n >\n <baseui.SelectValue placeholder={resolvedPlaceholder}>\n {selectedLabel}\n </baseui.SelectValue>\n </baseui.SelectTrigger>\n <baseui.SelectContent>\n <baseui.SelectGroup>\n {normalizedOptions.map((option) => (\n <baseui.SelectItem\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n >\n {!!option.icon && (\n <div className=\"flex items-center gap-2\">\n <span className=\"h-4 w-4 shrink-0\">{option.icon}</span>\n {option.label}\n </div>\n )}\n {!option.icon && option.label}\n </baseui.SelectItem>\n ))}\n </baseui.SelectGroup>\n </baseui.SelectContent>\n </baseui.Select>\n );\n }\n )\n);\n\nSelect.displayName = 'Select';\n","/**\n * SwitchCard — bordered settings card with an icon, title, optional\n * description, optional hint, and a trailing switch. The whole card is\n * clickable and toggles the switch; clicking inside the actual switch only\n * toggles once. Active state lifts the border and tints the surface.\n *\n * Use for top-of-list \"feature\" toggles where the switch needs more visual\n * weight than a `ToggleField`. For dense rows, prefer `ToggleField`.\n */\nimport { type LucideIcon } from 'lucide-react';\nimport * as React from 'react';\nimport { useCallback, useId, useMemo, useState } from 'react';\nimport { Switch as SwitchPrimitive } from '@/components/ui/switch';\nimport { Label, Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nexport interface SwitchCardProps {\n\tlabel: string;\n\tdescription?: string;\n\thint?: string;\n\ticon?: LucideIcon;\n\tname?: string;\n\tvalue?: boolean;\n\tdefaultValue?: boolean;\n\tonChange?: (checked: boolean) => void;\n\tdisabled?: boolean;\n\tinvalid?: boolean;\n\tclassName?: string;\n}\n\nexport function SwitchCard({\n\tlabel,\n\tdescription,\n\thint,\n\ticon: Icon,\n\tname,\n\tvalue,\n\tdefaultValue,\n\tonChange,\n\tdisabled = false,\n\tinvalid,\n\tclassName,\n}: SwitchCardProps) {\n\tconst isControlled = value !== undefined;\n\tconst [internal, setInternal] = useState<boolean>(defaultValue ?? false);\n\tconst checked = isControlled ? value ?? false : internal;\n\tconst generatedId = useId();\n\tconst id = useMemo(() => name ?? generatedId, [name, generatedId]);\n\n\tconst hasDescription = typeof description === 'string' && description.trim() !== '';\n\tconst describedById = hasDescription ? `${id}-description` : undefined;\n\n\tconst handleToggle = useCallback(\n\t\t(newChecked: boolean) => {\n\t\t\tif (disabled) return;\n\t\t\tif (!isControlled) setInternal(newChecked);\n\t\t\tonChange?.(newChecked);\n\t\t},\n\t\t[disabled, isControlled, onChange],\n\t);\n\n\tconst handleCardClick = useCallback(\n\t\t(e: React.MouseEvent) => {\n\t\t\tif ((e.target as HTMLElement).closest('[role=\"switch\"]')) return;\n\t\t\thandleToggle(!checked);\n\t\t},\n\t\t[checked, handleToggle],\n\t);\n\n\treturn (\n\t\t<div\n\t\t\trole=\"button\"\n\t\t\ttabIndex={disabled ? -1 : 0}\n\t\t\taria-invalid={invalid || undefined}\n\t\t\tonClick={handleCardClick}\n\t\t\tonKeyDown={(e) => {\n\t\t\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\thandleToggle(!checked);\n\t\t\t\t}\n\t\t\t}}\n\t\t\tclassName={cn('switch-card--component', \n\t\t\t\t'group relative flex items-start gap-3 rounded-lg border bg-card p-4 transition-[background,border-color,box-shadow] duration-150',\n\t\t\t\t'border-border',\n\t\t\t\tchecked && 'border-primary bg-primary/[0.04]',\n\t\t\t\t'aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20',\n\t\t\t\t!disabled && 'cursor-pointer hover:border-foreground/20 hover:bg-muted/30',\n\t\t\t\tdisabled && 'cursor-not-allowed opacity-50',\n\t\t\t\t'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/50',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{!!name && (\n\t\t\t\t<input\n\t\t\t\t\ttype=\"hidden\"\n\t\t\t\t\tname={name}\n\t\t\t\t\tvalue={checked ? '1' : '0'}\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t{!!Icon && (\n\t\t\t\t<span\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'mt-0.5 inline-flex size-9 shrink-0 items-center justify-center rounded-md transition-colors',\n\t\t\t\t\t\tchecked\n\t\t\t\t\t\t\t? 'bg-primary/10 text-primary'\n\t\t\t\t\t\t\t: 'bg-muted text-muted-foreground group-hover:text-foreground',\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<Icon className=\"size-4\" />\n\t\t\t\t</span>\n\t\t\t)}\n\n\t\t\t<div className=\"min-w-0 flex-1 space-y-0.5\">\n\t\t\t\t<Label\n\t\t\t\t\thtmlFor={id}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'block font-semibold tracking-tight',\n\t\t\t\t\t\tdisabled ? 'cursor-not-allowed' : 'cursor-pointer',\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{label}\n\t\t\t\t</Label>\n\t\t\t\t{!!hasDescription && (\n\t\t\t\t\t<Text type=\"secondary\" className=\"leading-snug\">\n\t\t\t\t\t\t{description}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t\t{!!hint && (\n\t\t\t\t\t<Text size=\"xs\" type=\"discrete\" className=\"leading-snug\">\n\t\t\t\t\t\t{hint}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t<div className=\"mt-1 flex shrink-0 items-center\">\n\t\t\t\t<SwitchPrimitive\n\t\t\t\t\tid={id}\n\t\t\t\t\tchecked={checked}\n\t\t\t\t\tonCheckedChange={(v) => handleToggle(v as boolean)}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\taria-label={label}\n\t\t\t\t\taria-describedby={describedById}\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t{!!hasDescription && (\n\t\t\t\t<span id={`${id}-description`} className=\"sr-only\">\n\t\t\t\t\t{description}\n\t\t\t\t</span>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nSwitchCard.displayName = 'SwitchCard';\n","/**\n * ToggleField — inline label-and-control row for switches and checkboxes.\n *\n * Pattern: a left-aligned descriptive label/description block with the\n * control sitting on the trailing edge. Use for settings rows (e.g. \"Email\n * notifications\" + switch) where a full SwitchCard is too heavy and a bare\n * `Switch` + `<label>` is too brittle. The whole row is clickable and\n * keyboard-accessible.\n *\n * Two control kinds: `'switch'` (default) and `'checkbox'`. Both honour\n * controlled `value` / `defaultValue` / `onChange`. Strings are passed via\n * standard React props rather than a `strings` object — there are no\n * defaults to override.\n */\nimport type { ReactNode } from 'react';\nimport { useCallback, useId, useState } from 'react';\n\nimport { Checkbox } from '@/components/ui/checkbox';\nimport { Switch as SwitchPrimitive } from '@/components/ui/switch';\nimport { Label, Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nexport type ToggleFieldKind = 'switch' | 'checkbox';\n\nexport interface ToggleFieldProps {\n\tlabel: ReactNode;\n\tdescription?: ReactNode;\n\tkind?: ToggleFieldKind;\n\tvalue?: boolean;\n\tdefaultValue?: boolean;\n\tonChange?: (checked: boolean) => void;\n\tdisabled?: boolean;\n\tinvalid?: boolean;\n\tname?: string;\n\tclassName?: string;\n\t/** Place the control on the leading edge instead of trailing (default). */\n\tcontrolPosition?: 'leading' | 'trailing';\n}\n\nexport function ToggleField({\n\tlabel,\n\tdescription,\n\tkind = 'switch',\n\tvalue,\n\tdefaultValue,\n\tonChange,\n\tdisabled = false,\n\tinvalid = false,\n\tname,\n\tclassName,\n\tcontrolPosition = 'trailing',\n}: ToggleFieldProps) {\n\tconst isControlled = value !== undefined;\n\tconst [internal, setInternal] = useState<boolean>(defaultValue ?? false);\n\tconst checked = isControlled ? value ?? false : internal;\n\tconst inputId = useId();\n\n\tconst set = useCallback(\n\t\t(next: boolean) => {\n\t\t\tif (disabled) return;\n\t\t\tif (!isControlled) setInternal(next);\n\t\t\tonChange?.(next);\n\t\t},\n\t\t[disabled, isControlled, onChange],\n\t);\n\n\tconst onRowClick = (e: React.MouseEvent) => {\n\t\t// Avoid double-toggle when clicking the control itself.\n\t\tconst target = e.target as HTMLElement;\n\t\tif (target.closest('[role=\"switch\"], [role=\"checkbox\"], input[type=\"checkbox\"]')) return;\n\t\tset(!checked);\n\t};\n\n\tconst Control =\n\t\tkind === 'switch' ? (\n\t\t\t<SwitchPrimitive\n\t\t\t\tid={inputId}\n\t\t\t\tname={name}\n\t\t\t\tchecked={checked}\n\t\t\t\tonCheckedChange={(v) => set(v as boolean)}\n\t\t\t\tdisabled={disabled}\n\t\t\t\taria-invalid={invalid || undefined}\n\t\t\t/>\n\t\t) : (\n\t\t\t<Checkbox\n\t\t\t\tid={inputId}\n\t\t\t\tname={name}\n\t\t\t\tchecked={checked}\n\t\t\t\tonCheckedChange={(v) => set(v === true)}\n\t\t\t\tdisabled={disabled}\n\t\t\t\taria-invalid={invalid || undefined}\n\t\t\t/>\n\t\t);\n\n\tconst TextBlock = (\n\t\t<div className=\"min-w-0 flex-1\">\n\t\t\t<Label\n\t\t\t\thtmlFor={inputId}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'block leading-snug',\n\t\t\t\t\tdisabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer',\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{label}\n\t\t\t</Label>\n\t\t\t{!!description && (\n\t\t\t\t<Text size=\"xs\" type=\"secondary\" className=\"mt-0.5 leading-snug\">\n\t\t\t\t\t{description}\n\t\t\t\t</Text>\n\t\t\t)}\n\t\t</div>\n\t);\n\n\treturn (\n\t\t<div\n\t\t\trole=\"group\"\n\t\t\tonClick={onRowClick}\n\t\t\tclassName={cn('toggle-field--component', \n\t\t\t\t'flex items-start gap-3 rounded-md py-1',\n\t\t\t\tdisabled && 'pointer-events-none',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{controlPosition === 'leading' && <div className=\"mt-0.5 flex shrink-0\">{Control}</div>}\n\t\t\t{TextBlock}\n\t\t\t{controlPosition === 'trailing' && <div className=\"mt-0.5 flex shrink-0\">{Control}</div>}\n\t\t</div>\n\t);\n}\n\nToggleField.displayName = 'ToggleField';\n","/**\n * TagsInput — generic typed tag picker with optional recommendation list,\n * paste-to-bulk, validation, max-tag enforcement, and customizable rendering.\n * Supports both string tags and complex objects (via the `field` prop pointing\n * at the display key). Strings overridable for i18n via `strings`.\n *\n * Ref note: `TagsInput` is generic over `T` and does not use `forwardRef`\n * (generic-+-forwardRef is awkward in TS). Consumers wire RHF via `value` /\n * `onChange` props directly. To focus the inner input from a parent, render\n * a wrapping element with `data-tags-input` and call `.querySelector('input').focus()`.\n */\nimport { X, Check } from 'lucide-react';\nimport * as React from 'react';\nimport { useState, useRef, useCallback, useMemo } from 'react';\nimport { TextButton } from '@/components/base/buttons';\nimport { Badge } from '@/components/base/badge';\nimport { Text } from '@/components/typography';\nimport { useStrings } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\nimport { Input } from './input';\n\nexport interface TagsInputStrings {\n\tplaceholder: string;\n\temptyRecommendations: string;\n\tclearAll: string;\n\t/** Summary line shown when `maxTags` + `showMaxTags` are set. Receives\n\t * `current` (number of tags entered) and `max` (the limit). The\n\t * default is English `\"{current} / {max} tags\"` — override for i18n. */\n\tsummary: (current: number, max: number) => string;\n}\n\nexport const defaultTagsInputStrings: TagsInputStrings = {\n\tplaceholder: 'Add a tag…',\n\temptyRecommendations: 'No recommendations found.',\n\tclearAll: 'Clear all',\n\tsummary: (current, max) => `${current} / ${max} tags`,\n};\n\nexport interface TagsInputProps<T = string> {\n /** Current value (array of T) */\n value?: T[];\n\n /** Callback when value changes */\n onChange?: (value: T[]) => void;\n\n /** Placeholder text for the input */\n placeholder?: string;\n\n /** Array of recommendations to suggest */\n recommendations?: Array<T | { value: T; label: string }>;\n\n /** Maximum number of tags allowed */\n maxTags?: number;\n\n /** Show the label for the maximum tags */\n showMaxTags?: boolean;\n\n /** Whether duplicate tags are allowed */\n allowDuplicates?: boolean;\n\n /** Custom validation function */\n validate?: (value: T) => boolean;\n\n /** Whether the input is disabled */\n disabled?: boolean;\n\n /** Whether to show the clear all button */\n showClearAll?: boolean;\n\n /** Custom tag component */\n renderTag?: (tag: T, index: number, onRemove: (index: number) => void) => React.ReactNode;\n\n /** Delimiter for separating tags when pasting */\n delimiter?: string | RegExp;\n\n /** Whether to trigger add on blur */\n addOnBlur?: boolean;\n\n /** Minimum length for a tag */\n minLength?: number;\n\n /** Maximum length for a tag */\n maxLength?: number;\n\n /** @deprecated Use `strings.emptyRecommendations` instead. */\n emptyMessage?: string;\n\n /** Override default English strings (placeholder, empty list, clear-all). */\n strings?: Partial<TagsInputStrings>;\n\n /** Whether tags should be sorted */\n sortTags?: boolean;\n\n /** Case sensitivity for duplicate checking */\n caseSensitive?: boolean;\n\n /** Field to extract display value from an object (required when T is not string) */\n field?: T extends string ? never : keyof T;\n\n /** Error state for styling (passed from FormField) */\n invalid?: boolean;\n\n /** Additional class names */\n className?: string;\n}\n\nexport function TagsInput<T = string>({\n value = [],\n onChange,\n placeholder,\n recommendations,\n maxTags,\n showMaxTags = false,\n allowDuplicates = false,\n validate,\n disabled = false,\n showClearAll = false,\n renderTag,\n delimiter = /[\\n,]/,\n addOnBlur = true,\n minLength = 1,\n maxLength,\n emptyMessage,\n sortTags = false,\n caseSensitive = false,\n field,\n invalid,\n className,\n strings: stringsProp,\n}: TagsInputProps<T>) {\n const strings = useStrings(defaultTagsInputStrings, {\n ...(placeholder ? { placeholder } : {}),\n ...(emptyMessage ? { emptyRecommendations: emptyMessage } : {}),\n ...stringsProp,\n });\n const [inputValue, setInputValue] = useState('');\n const [open, setOpen] = useState(false);\n const [selectedIndex, setSelectedIndex] = useState(-1);\n const inputRef = useRef<HTMLInputElement>(null);\n\n // Helper function to get display value from tag\n const getDisplayValue = useCallback(\n (tag: T): string => {\n if (typeof tag === 'string') {\n return tag;\n }\n\n if (field && typeof tag === 'object' && tag !== null) {\n const record = tag as Record<string | number | symbol, unknown>;\n const candidate = record[field];\n if (typeof candidate === 'string') {\n return candidate;\n }\n if (candidate === undefined || candidate === null) {\n return '';\n }\n return String(candidate);\n }\n\n return String(tag);\n },\n [field]\n );\n\n // Helper function to create tag from string input\n const createTagFromString = useCallback(\n (input: string): T => {\n if (typeof value[0] === 'string' || value.length === 0) {\n return input as T;\n }\n if (field) {\n return { [field]: input } as T;\n }\n return input as unknown as T;\n },\n [field, value]\n );\n\n // Normalize recommendations to always be objects\n const normalizedRecommendations = useMemo(() => {\n if (!recommendations) return [];\n return recommendations.map((rec) => {\n if (rec && typeof rec === 'object' && 'value' in rec && 'label' in rec) {\n return rec as { value: T; label: string };\n }\n const displayValue = getDisplayValue(rec);\n return { value: rec, label: displayValue };\n });\n }, [recommendations, getDisplayValue]);\n\n // Filter recommendations based on input and existing tags\n const filteredRecommendations = useMemo(() => {\n if (!normalizedRecommendations.length || !inputValue) return normalizedRecommendations;\n\n const search = caseSensitive ? inputValue : inputValue.toLowerCase();\n const existingValues = new Set(\n value.map((v) => {\n const displayVal = getDisplayValue(v);\n return caseSensitive ? displayVal : displayVal.toLowerCase();\n })\n );\n\n return normalizedRecommendations.filter((rec) => {\n const label = caseSensitive ? rec.label : rec.label.toLowerCase();\n const displayVal = getDisplayValue(rec.value);\n const val = caseSensitive ? displayVal : displayVal.toLowerCase();\n\n return (label.includes(search) || val.includes(search)) && (allowDuplicates || !existingValues.has(val));\n });\n }, [normalizedRecommendations, inputValue, value, allowDuplicates, caseSensitive, getDisplayValue]);\n\n // Sort tags if needed\n const displayValue = useMemo(() => {\n if (!sortTags) return value;\n return [...value].sort((a, b) => {\n const aStr = getDisplayValue(a);\n const bStr = getDisplayValue(b);\n return aStr.localeCompare(bStr);\n });\n }, [value, sortTags, getDisplayValue]);\n\n const addTag = useCallback(\n (tag: T | string) => {\n const actualTag = typeof tag === 'string' ? createTagFromString(tag) : tag;\n const displayVal = getDisplayValue(actualTag);\n const trimmedDisplayVal = displayVal.trim();\n\n // Validation checks\n if (!trimmedDisplayVal) return;\n if (trimmedDisplayVal.length < minLength) return;\n if (maxLength && trimmedDisplayVal.length > maxLength) return;\n if (maxTags && value.length >= maxTags) return;\n\n if (!allowDuplicates) {\n const exists = value.some((v) => {\n const existingDisplayVal = getDisplayValue(v);\n return caseSensitive\n ? existingDisplayVal === trimmedDisplayVal\n : existingDisplayVal.toLowerCase() === trimmedDisplayVal.toLowerCase();\n });\n if (exists) return;\n }\n\n if (validate && !validate(actualTag)) return;\n\n const newValue = [...value, actualTag];\n onChange?.(newValue);\n setInputValue('');\n setOpen(false);\n setSelectedIndex(-1);\n },\n [value, onChange, maxTags, allowDuplicates, validate, minLength, maxLength, caseSensitive, getDisplayValue, createTagFromString]\n );\n\n const removeTag = useCallback(\n (index: number) => {\n const newValue = value.filter((_, i) => i !== index);\n onChange?.(newValue);\n },\n [value, onChange]\n );\n\n const handleInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const newValue = e.target.value;\n setInputValue(newValue);\n setSelectedIndex(-1);\n\n if (recommendations && recommendations.length > 0) {\n setOpen(true);\n }\n },\n [recommendations]\n );\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (disabled) return;\n\n if (e.key === 'Enter') {\n e.preventDefault();\n if (open && selectedIndex >= 0 && selectedIndex < filteredRecommendations.length) {\n addTag(filteredRecommendations[selectedIndex].value);\n setSelectedIndex(-1);\n } else if (inputValue.trim()) {\n addTag(inputValue);\n }\n } else if (e.key === 'Tab') {\n if (inputValue) {\n e.preventDefault();\n addTag(inputValue);\n }\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n if (open) {\n setSelectedIndex((prev) => (prev < filteredRecommendations.length - 1 ? prev + 1 : prev));\n }\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n if (open) {\n setSelectedIndex((prev) => (prev > 0 ? prev - 1 : 0));\n }\n } else if (e.key === 'Escape') {\n setOpen(false);\n setSelectedIndex(-1);\n } else if (e.key === 'Backspace' && !inputValue && value.length > 0) {\n removeTag(value.length - 1);\n }\n },\n [disabled, open, selectedIndex, filteredRecommendations, inputValue, addTag, removeTag, value.length]\n );\n\n const handlePaste = useCallback(\n (e: React.ClipboardEvent<HTMLInputElement>) => {\n if (disabled) return;\n\n e.preventDefault();\n const pastedText = e.clipboardData.getData('text');\n const tags = pastedText\n .split(delimiter)\n .map((t) => t.trim())\n .filter(Boolean);\n\n tags.forEach((tag) => addTag(tag));\n },\n [disabled, delimiter, addTag]\n );\n\n const handleBlur = useCallback(() => {\n setTimeout(() => {\n setOpen(false);\n if (addOnBlur && inputValue) {\n addTag(inputValue);\n }\n }, 200);\n }, [addOnBlur, inputValue, addTag]);\n\n const clearAll = useCallback(() => {\n onChange?.([]);\n setInputValue('');\n }, [onChange]);\n\n const defaultRenderTag = useCallback(\n (tag: T, index: number, onRemove: (index: number) => void) => {\n const tagKey = `${getDisplayValue(tag)}-${index}`;\n return (\n <Badge key={tagKey} variant=\"secondary\" className={cn('tags-input--component', 'gap-1 pr-1 font-normal')}>\n {getDisplayValue(tag)}\n <button\n type=\"button\"\n aria-label={`Remove ${getDisplayValue(tag)}`}\n className={cn(\n 'inline-flex size-3.5 items-center justify-center rounded-full',\n 'text-muted-foreground/70 hover:bg-foreground/10 hover:text-foreground',\n 'outline-none focus-visible:ring-2 focus-visible:ring-ring/50',\n 'disabled:opacity-50 disabled:pointer-events-none',\n )}\n onClick={() => onRemove(index)}\n disabled={disabled}\n >\n <X className=\"size-3\" aria-hidden=\"true\" />\n </button>\n </Badge>\n );\n },\n [getDisplayValue, disabled]\n );\n\n const resolvedInvalid = Boolean(invalid);\n\n return (\n <div className={cn('w-full relative', className)}>\n <div className=\"relative\">\n <Input\n ref={inputRef}\n type=\"text\"\n placeholder={strings.placeholder}\n value={inputValue}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n onBlur={handleBlur}\n onFocus={() => {\n if (recommendations && filteredRecommendations.length > 0) {\n setOpen(true);\n }\n }}\n disabled={disabled || (maxTags !== undefined && value.length >= maxTags)}\n invalid={resolvedInvalid}\n maxLength={maxLength}\n className=\"w-full\"\n />\n\n {/* Recommendations dropdown — mirrors PopoverContent + CommandItem\n surface tokens (bg-popover, text-popover-foreground, ring-1\n ring-foreground/10, shadow-md, rounded-md) so it reads\n identically to a real popover. The hand-rolled wrapper\n stays because the dropdown is tightly bound to the\n Input's keyboard handler (selectedIndex, arrow nav). */}\n {!!recommendations && !!open && (\n <div className=\"absolute top-full left-0 right-0 z-50 mt-1 max-h-[200px] overflow-y-auto rounded-md bg-popover text-popover-foreground p-1 text-sm shadow-md ring-1 ring-foreground/10\">\n {filteredRecommendations.length > 0 ? (\n filteredRecommendations.map((rec, idx) => {\n const recommendationKey = getDisplayValue(rec.value);\n const isPicked = value.some(\n (v) => getDisplayValue(v) === getDisplayValue(rec.value),\n );\n return (\n <button\n key={recommendationKey}\n type=\"button\"\n onMouseDown={(e) => {\n e.preventDefault();\n addTag(rec.value);\n setSelectedIndex(-1);\n inputRef.current?.focus();\n }}\n onMouseEnter={() => setSelectedIndex(idx)}\n className={cn(\n 'relative flex w-full cursor-pointer items-center justify-between gap-2 rounded-md px-2 py-(--row-py) text-[length:var(--text-xs)]',\n 'hover:bg-accent hover:text-accent-foreground',\n 'focus-visible:outline-none',\n selectedIndex === idx && 'bg-accent text-accent-foreground',\n )}\n >\n <span>{rec.label}</span>\n <Check\n className={cn(\n 'ml-auto size-4',\n isPicked ? 'opacity-100' : 'opacity-0',\n )}\n />\n </button>\n );\n })\n ) : (\n <Text tag=\"div\" size=\"xs\" type=\"secondary\" className=\"px-2 py-(--row-py)\">\n {strings.emptyRecommendations}\n </Text>\n )}\n </div>\n )}\n </div>\n\n {/* Tags container */}\n {displayValue.length > 0 && (\n <div className=\"flex flex-wrap items-center gap-1.5 mt-2\">\n {displayValue.map((tag, index) =>\n renderTag ? renderTag(tag, index, removeTag) : defaultRenderTag(tag, index, removeTag)\n )}\n\n {!!showClearAll && value.length > 0 && !disabled && (\n <TextButton\n type=\"button\"\n size=\"sm\"\n onClick={clearAll}\n className=\"ml-auto\"\n >\n {strings.clearAll}\n </TextButton>\n )}\n </div>\n )}\n\n {!!maxTags && !!showMaxTags && (\n <Text size=\"xs\" type=\"secondary\" className=\"mt-1\">\n {strings.summary(value.length, maxTags)}\n </Text>\n )}\n </div>\n );\n}\n\nTagsInput.displayName = 'TagsInput';\n","import * as React from 'react';\nimport { useState, useCallback, useMemo, memo } from 'react';\nimport * as baseui from '@/components/ui/select';\nimport { Text } from '@/components/typography';\nimport { useStrings, type StringsProp } from '@/lib/strings';\nimport { useFormsConfig } from '@/lib/ui-provider';\nimport { cn } from '@/lib/utils';\nimport { formControlSizeClasses, resolveFormControlSize } from '../form-sizing';\nimport { Input, type InputProps } from './input';\n\nexport interface PhoneInputStrings {\n prefixPlaceholder: string;\n}\n\nexport const defaultPhoneInputStrings: PhoneInputStrings = {\n prefixPlaceholder: 'Prefix',\n};\n\nexport interface CountryPrefixOption {\n /** Country code value (e.g., '+1') */\n value: string;\n\n /** Display label (e.g., 'Bulgaria') */\n label: string;\n\n /** ISO country code (e.g., 'US') */\n iso: string;\n}\n\n/** Country data mapped by ISO code */\nexport const COUNTRY_PREFIX_MAP: Record<string, CountryPrefixOption> = {\n US: { value: '+1', label: 'United States', iso: 'US' },\n CA: { value: '+1', label: 'Canada', iso: 'CA' },\n AU: { value: '+61', label: 'Australia', iso: 'AU' },\n BG: { value: '+359', label: 'Bulgaria', iso: 'BG' },\n GR: { value: '+30', label: 'Greece', iso: 'GR' },\n GB: { value: '+44', label: 'United Kingdom', iso: 'GB' },\n DE: { value: '+49', label: 'Germany', iso: 'DE' },\n FR: { value: '+33', label: 'France', iso: 'FR' },\n IT: { value: '+39', label: 'Italy', iso: 'IT' },\n ES: { value: '+34', label: 'Spain', iso: 'ES' },\n NL: { value: '+31', label: 'Netherlands', iso: 'NL' },\n BE: { value: '+32', label: 'Belgium', iso: 'BE' },\n AT: { value: '+43', label: 'Austria', iso: 'AT' },\n CH: { value: '+41', label: 'Switzerland', iso: 'CH' },\n PL: { value: '+48', label: 'Poland', iso: 'PL' },\n RO: { value: '+40', label: 'Romania', iso: 'RO' },\n RS: { value: '+381', label: 'Serbia', iso: 'RS' },\n HR: { value: '+385', label: 'Croatia', iso: 'HR' },\n SI: { value: '+386', label: 'Slovenia', iso: 'SI' },\n MK: { value: '+389', label: 'North Macedonia', iso: 'MK' },\n TR: { value: '+90', label: 'Turkey', iso: 'TR' },\n RU: { value: '+7', label: 'Russia', iso: 'RU' },\n UA: { value: '+380', label: 'Ukraine', iso: 'UA' },\n SK: { value: '+421', label: 'Slovakia', iso: 'SK' },\n CZ: { value: '+420', label: 'Czech Republic', iso: 'CZ' },\n HU: { value: '+36', label: 'Hungary', iso: 'HU' },\n PT: { value: '+351', label: 'Portugal', iso: 'PT' },\n IE: { value: '+353', label: 'Ireland', iso: 'IE' },\n SE: { value: '+46', label: 'Sweden', iso: 'SE' },\n NO: { value: '+47', label: 'Norway', iso: 'NO' },\n DK: { value: '+45', label: 'Denmark', iso: 'DK' },\n FI: { value: '+358', label: 'Finland', iso: 'FI' },\n CY: { value: '+357', label: 'Cyprus', iso: 'CY' },\n AL: { value: '+355', label: 'Albania', iso: 'AL' },\n ME: { value: '+382', label: 'Montenegro', iso: 'ME' },\n BA: { value: '+387', label: 'Bosnia and Herzegovina', iso: 'BA' },\n XK: { value: '+383', label: 'Kosovo', iso: 'XK' },\n MD: { value: '+373', label: 'Moldova', iso: 'MD' },\n BY: { value: '+375', label: 'Belarus', iso: 'BY' },\n LT: { value: '+370', label: 'Lithuania', iso: 'LT' },\n LV: { value: '+371', label: 'Latvia', iso: 'LV' },\n EE: { value: '+372', label: 'Estonia', iso: 'EE' },\n};\n\n/** Type for prefix input - either ISO code string or full option object */\nexport type CountryPrefixInput = string | CountryPrefixOption;\n\n/** Default country prefixes - commonly used codes */\nexport const DEFAULT_COUNTRY_PREFIXES: CountryPrefixInput[] = ['US', 'CA', 'GB', 'DE', 'FR', 'IT', 'ES', 'AU'];\n\n/**\n * Normalize prefix input to CountryPrefixOption\n * Accepts either ISO code ('US') or full object ({ value: '+1', label: 'United States', iso: 'US' })\n */\nconst normalizePrefixInput = (input: CountryPrefixInput): CountryPrefixOption | null => {\n if (typeof input === 'string') {\n // It's an ISO code - look it up\n const upperInput = input.toUpperCase();\n return COUNTRY_PREFIX_MAP[upperInput] ?? null;\n }\n // It's already a full object\n return input;\n};\n\n/**\n * Normalize array of prefix inputs to CountryPrefixOption[]\n */\nconst normalizePrefixes = (inputs: CountryPrefixInput[]): CountryPrefixOption[] => {\n return inputs.map(normalizePrefixInput).filter((p): p is CountryPrefixOption => p !== null);\n};\n\nexport interface PhoneInputProps extends Omit<InputProps, 'type' | 'startAddon' | 'strings'> {\n /** Normalize phone number on blur. Defaults to true */\n normalizeOnBlur?: boolean;\n\n /** Current country prefix value (dial code like '+1' or ISO code like 'US') */\n prefix?: string;\n\n /** Default prefix if uncontrolled (dial code like '+1' or ISO code like 'US') */\n defaultPrefix?: string;\n\n /** List of available country prefixes - ISO codes ('US', 'GR') or full objects */\n prefixes?: CountryPrefixInput[];\n\n /** Callback when prefix changes - returns dial code (e.g., '+1') */\n onPrefixChange?: (prefix: string) => void;\n\n /** Disable prefix selection */\n disablePrefixSelector?: boolean;\n\n /** Placeholder for prefix dropdown */\n prefixPlaceholder?: string;\n\n /** Width of the prefix dropdown */\n prefixWidth?: string;\n\n /** Show country name in dropdown. Defaults to true */\n showCountryName?: boolean;\n\n /** Show prefix in dropdown items. Defaults to true */\n showPrefixInDropdown?: boolean;\n\n /** String overrides (e.g. prefix dropdown placeholder). */\n strings?: StringsProp<PhoneInputStrings>;\n}\n\nconst normalizePhone = (value: string, selectedPrefix?: string): string => {\n let normalized = value\n .trim()\n .replace(/\\s+/g, ' ')\n .replace(/[^\\d ()+-]/g, '');\n\n // Strip the selected prefix from the input if the user typed it redundantly\n if (selectedPrefix && normalized.startsWith(selectedPrefix)) {\n normalized = normalized.slice(selectedPrefix.length).replace(/^[\\s-]+/, '');\n }\n\n // Strip leading zero from national numbers when a prefix is selected (e.g., 0877... → 877...)\n if (selectedPrefix && normalized.startsWith('0')) {\n normalized = normalized.slice(1);\n }\n\n return normalized;\n};\n\n/**\n * Resolve a prefix string (ISO code or dial code) to dial code\n */\nconst resolvePrefixToDialCode = (prefix: string | undefined, normalizedPrefixes: CountryPrefixOption[]): string => {\n if (!prefix) return normalizedPrefixes[0]?.value ?? '';\n\n // Check if it's already a dial code (starts with +)\n if (prefix.startsWith('+')) {\n return prefix;\n }\n\n // It's an ISO code - look it up\n const upperPrefix = prefix.toUpperCase();\n const found = COUNTRY_PREFIX_MAP[upperPrefix];\n return found?.value ?? prefix;\n};\n\nfunction PhoneInputImpl(\n {\n normalizeOnBlur = true,\n onBlur,\n onChange,\n prefix: controlledPrefix,\n defaultPrefix,\n prefixes = DEFAULT_COUNTRY_PREFIXES,\n onPrefixChange,\n disablePrefixSelector = false,\n prefixPlaceholder,\n prefixWidth = 'w-[120px]',\n showCountryName = true,\n showPrefixInDropdown = true,\n invalid,\n disabled,\n className,\n size: sizeProp,\n strings: stringsProp,\n ...props\n }: PhoneInputProps,\n forwardedRef: React.ForwardedRef<HTMLInputElement>,\n) {\n const { defaultControlSize } = useFormsConfig();\n const size = resolveFormControlSize(sizeProp, defaultControlSize);\n const strings = useStrings(defaultPhoneInputStrings, stringsProp);\n // Normalize prefix options from mixed input (ISO codes or full objects)\n const normalizedPrefixes = useMemo(() => normalizePrefixes(prefixes), [prefixes]);\n\n // Resolve controlled/default prefix to dial code\n const resolvedDefaultPrefix = useMemo(\n () => resolvePrefixToDialCode(defaultPrefix, normalizedPrefixes),\n [defaultPrefix, normalizedPrefixes]\n );\n\n // Internal state for uncontrolled prefix (always stores dial code)\n const [internalPrefix, setInternalPrefix] = useState(resolvedDefaultPrefix);\n\n // Determine if prefix is controlled\n const isPrefixControlled = controlledPrefix !== undefined;\n const selectedPrefix = isPrefixControlled\n ? resolvePrefixToDialCode(controlledPrefix, normalizedPrefixes)\n : internalPrefix;\n\n // Find current prefix option for display\n const currentPrefixOption = useMemo(\n () => normalizedPrefixes.find((p) => p.value === selectedPrefix),\n [normalizedPrefixes, selectedPrefix]\n );\n\n // Handle prefix change\n const handlePrefixChange = useCallback(\n (newPrefix: string | null) => {\n if (newPrefix === null) return;\n if (!isPrefixControlled) {\n setInternalPrefix(newPrefix);\n }\n onPrefixChange?.(newPrefix);\n },\n [isPrefixControlled, onPrefixChange]\n );\n\n // Handle phone change — strip redundant prefix on every keystroke/autofill\n const handleChange: React.ChangeEventHandler<HTMLInputElement> = useCallback(\n (event) => {\n if (!onChange) return;\n\n const raw = event.target.value;\n\n // Strip the selected prefix if the value starts with it (autofill, paste, manual typing)\n if (selectedPrefix && raw.startsWith(selectedPrefix)) {\n const stripped = raw.slice(selectedPrefix.length).replace(/^[\\s-]+/, '');\n // Also strip leading zero from national part\n const national = stripped.startsWith('0') ? stripped.slice(1) : stripped;\n if (national !== raw) {\n const syntheticEvent = {\n ...event,\n target: { ...event.target, value: national },\n currentTarget: { ...event.currentTarget, value: national },\n } as unknown as React.ChangeEvent<HTMLInputElement>;\n onChange(syntheticEvent);\n return;\n }\n }\n\n onChange(event);\n },\n [onChange, selectedPrefix]\n );\n\n // Handle phone blur with normalization\n const handleBlur: React.FocusEventHandler<HTMLInputElement> = useCallback(\n (event) => {\n if (normalizeOnBlur && typeof onChange === 'function') {\n const nextValue = normalizePhone(event.target.value, selectedPrefix);\n if (nextValue !== event.target.value) {\n const syntheticEvent = {\n ...event,\n target: { ...event.target, value: nextValue },\n currentTarget: { ...event.currentTarget, value: nextValue },\n } as unknown as React.ChangeEvent<HTMLInputElement>;\n\n onChange(syntheticEvent);\n }\n }\n\n onBlur?.(event);\n },\n [normalizeOnBlur, onChange, onBlur, selectedPrefix]\n );\n\n // If no prefixes or disabled, render simple input with prefix display\n if (normalizedPrefixes.length === 0 || disablePrefixSelector) {\n const staticPrefix = selectedPrefix || defaultPrefix;\n\n if (!staticPrefix) {\n return (\n <Input\n ref={forwardedRef}\n size={size}\n type=\"tel\"\n autoComplete=\"tel\"\n inputMode=\"tel\"\n onChange={handleChange}\n onBlur={handleBlur}\n invalid={invalid}\n disabled={disabled}\n className={cn('phone-input--component', className)}\n {...props}\n />\n );\n }\n\n return (\n <div className=\"flex items-start gap-2\">\n <div\n aria-invalid={invalid || undefined}\n className={cn(\n 'flex items-center justify-center rounded-md border border-input bg-muted px-3',\n formControlSizeClasses[size],\n disabled && 'opacity-50',\n 'aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20'\n )}\n >\n <Text tag=\"span\" type=\"secondary\" weight=\"medium\">\n {staticPrefix}\n </Text>\n </div>\n <div className=\"flex-1\">\n <Input\n ref={forwardedRef}\n size={size}\n type=\"tel\"\n autoComplete=\"tel\"\n inputMode=\"tel\"\n onChange={handleChange}\n onBlur={handleBlur}\n invalid={invalid}\n disabled={disabled}\n className={className}\n {...props}\n />\n </div>\n </div>\n );\n }\n\n // Render with prefix selector\n return (\n <div className=\"flex items-start gap-2\">\n {/* Prefix selector */}\n <baseui.Select\n value={selectedPrefix}\n onValueChange={(value) => handlePrefixChange(value)}\n disabled={disabled}\n >\n <baseui.SelectTrigger\n aria-invalid={invalid || undefined}\n className={cn(\n 'border-input bg-transparent shrink-0 !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 prefixWidth,\n disabled && 'opacity-50 cursor-not-allowed'\n )}\n >\n <baseui.SelectValue placeholder={prefixPlaceholder ?? strings.prefixPlaceholder}>\n {!!currentPrefixOption && (\n <Text tag=\"span\">\n {currentPrefixOption.value}\n </Text>\n )}\n </baseui.SelectValue>\n </baseui.SelectTrigger>\n <baseui.SelectContent>\n <baseui.SelectGroup>\n {normalizedPrefixes.map((prefixOption) => (\n <baseui.SelectItem key={prefixOption.value} value={prefixOption.value}>\n <div className=\"flex items-center gap-2\">\n {!!showPrefixInDropdown && (\n <Text tag=\"span\" weight=\"medium\" className=\"min-w-[50px]\">\n {prefixOption.value}\n </Text>\n )}\n {!!showCountryName && (\n <Text tag=\"span\" type=\"secondary\" lineHeight=\"tight\">\n {prefixOption.label}\n </Text>\n )}\n </div>\n </baseui.SelectItem>\n ))}\n </baseui.SelectGroup>\n </baseui.SelectContent>\n </baseui.Select>\n\n {/* Phone number input */}\n <div className=\"flex-1\">\n <Input\n ref={forwardedRef}\n size={size}\n type=\"tel\"\n autoComplete=\"tel\"\n inputMode=\"tel\"\n onChange={handleChange}\n onBlur={handleBlur}\n invalid={invalid}\n disabled={disabled}\n className={className}\n {...props}\n />\n </div>\n </div>\n );\n}\n\n// forwardRef + memo: forward to the underlying phone input so consumers can\n// focus/measure programmatically (RHF Controller, parent imperative refs).\nexport const PhoneInput = memo(React.forwardRef<HTMLInputElement, PhoneInputProps>(PhoneInputImpl));\nPhoneInput.displayName = 'PhoneInput';\n","/**\n * PercentageInput — DecimalInput configured for 0..100 percent values with a\n * trailing `%` add-on. Inherits stepper / rounding / normalisation features\n * from DecimalInput.\n */\nimport { forwardRef } from 'react';\nimport { DecimalInput, type DecimalInputProps } from './decimal-input';\n\nexport type PercentageInputProps = Omit<\n DecimalInputProps,\n 'min' | 'max' | 'allowNegative' | 'endAddon'\n> & {\n /** Minimum percentage value. Defaults to 0. */\n min?: number;\n /** Maximum percentage value. Defaults to 100. */\n max?: number;\n};\n\nexport const PercentageInput = forwardRef<HTMLInputElement, PercentageInputProps>(\n function PercentageInput({ decimalPlaces = 2, min = 0, max = 100, step, ...props }, ref) {\n return (\n <DecimalInput className=\"percentage-input--component\"\n ref={ref}\n decimalPlaces={decimalPlaces}\n allowNegative={false}\n min={min}\n max={max}\n step={step}\n endAddon=\"%\"\n {...props}\n />\n );\n },\n);\n\nPercentageInput.displayName = 'PercentageInput';\n","import * as React from \"react\"\nimport { Slider as SliderPrimitive } from \"@base-ui/react/slider\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Slider({\n className,\n defaultValue,\n value,\n min = 0,\n max = 100,\n ...props\n}: SliderPrimitive.Root.Props) {\n const _values = React.useMemo(\n () =>\n Array.isArray(value)\n ? value\n : Array.isArray(defaultValue)\n ? defaultValue\n : [min, max],\n [value, defaultValue, min, max]\n )\n\n return (\n <SliderPrimitive.Root\n className={cn(\"data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full\", className)}\n data-slot=\"slider\"\n defaultValue={defaultValue}\n value={value}\n min={min}\n max={max}\n thumbAlignment=\"edge\"\n {...props}\n >\n <SliderPrimitive.Control className=\"relative flex w-full touch-none items-center select-none data-disabled:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-40 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col\">\n <SliderPrimitive.Track\n data-slot=\"slider-track\"\n className=\"relative grow overflow-hidden rounded-full bg-muted select-none data-[orientation=horizontal]:h-1.5 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5\"\n >\n <SliderPrimitive.Indicator\n data-slot=\"slider-range\"\n className=\"absolute bg-primary select-none data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full\"\n />\n </SliderPrimitive.Track>\n {Array.from({ length: _values.length }, (_, index) => (\n <SliderPrimitive.Thumb\n data-slot=\"slider-thumb\"\n key={index}\n className=\"block size-4 shrink-0 rounded-full border border-primary bg-white shadow-sm ring-ring/50 transition-[color,box-shadow] select-none hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50\"\n />\n ))}\n </SliderPrimitive.Control>\n </SliderPrimitive.Root>\n )\n}\n\nexport { Slider }\n","import * as React from 'react';\nimport { useCallback, useId, useMemo, type ElementRef } from 'react';\nimport { Slider as SliderPrimitive } from '@/components/ui/slider';\nimport { Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nexport interface SliderImitationEvent {\n target: {\n name: string;\n value: number;\n };\n}\n\nexport interface SliderProps {\n /** Field name for form integration */\n name?: string;\n\n /** Element id */\n id?: string;\n\n /** Current value (single thumb) */\n value?: number;\n\n /** Default value when uncontrolled */\n defaultValue?: number;\n\n /** Minimum value. Defaults to 0 */\n min?: number;\n\n /** Maximum value. Defaults to 100 */\n max?: number;\n\n /** Step increment. Defaults to 1 */\n step?: number;\n\n /** Whether the slider is disabled */\n disabled?: boolean;\n\n /** Error state for styling (passed from FormField) */\n invalid?: boolean;\n\n /** Event-style change handler for react-hook-form compatibility */\n onChange?: (event: SliderImitationEvent) => void;\n\n /** Raw value change handler (alternative to onChange) */\n onValueChange?: (value: number) => void;\n\n /** Fires on pointer up / keyboard commit */\n onValueCommitted?: (value: number) => void;\n\n /** Show the current value next to the slider */\n showValue?: boolean;\n\n /** Format the displayed value */\n formatValue?: (value: number) => string;\n\n /** Unit suffix displayed after the value (e.g. \"px\", \"%\", \"mm\") */\n unit?: string;\n\n /** Additional class name for the root wrapper */\n className?: string;\n\n /** Orientation */\n orientation?: 'horizontal' | 'vertical';\n}\n\ntype SliderElement = ElementRef<typeof SliderPrimitive>;\n\nfunction SliderFieldImpl(\n {\n name,\n id,\n value,\n defaultValue,\n min = 0,\n max = 100,\n step = 1,\n disabled = false,\n invalid = false,\n onChange,\n onValueChange,\n onValueCommitted,\n showValue = false,\n formatValue,\n unit,\n className,\n orientation = 'horizontal',\n }: SliderProps,\n ref: React.ForwardedRef<SliderElement>,\n) {\n const generatedId = useId();\n const resolvedId = id ?? `slider-${generatedId}`;\n const resolvedName = name ?? resolvedId;\n\n const handleValueChange = useCallback(\n (newValue: number | readonly number[]) => {\n const singleValue = Array.isArray(newValue) ? newValue[0] : newValue;\n\n onValueChange?.(singleValue);\n\n onChange?.({\n target: { name: resolvedName, value: singleValue },\n });\n },\n [resolvedName, onChange, onValueChange]\n );\n\n const handleValueCommitted = useCallback(\n (newValue: number | readonly number[]) => {\n const singleValue = Array.isArray(newValue) ? newValue[0] : newValue;\n onValueCommitted?.(singleValue);\n },\n [onValueCommitted]\n );\n\n const displayValue = useMemo(() => {\n if (!showValue) return null;\n\n const currentValue = value ?? defaultValue ?? min;\n\n if (formatValue) return formatValue(currentValue);\n\n return unit ? `${currentValue}${unit}` : String(currentValue);\n }, [showValue, value, defaultValue, min, formatValue, unit]);\n\n // Wrap single value in array for the primitive\n const sliderValue = value !== undefined ? [value] : undefined;\n const sliderDefaultValue = defaultValue !== undefined ? [defaultValue] : [min];\n\n return (\n <div className={cn('slider--component', 'flex items-center gap-3', className)}>\n <SliderPrimitive\n ref={ref}\n id={resolvedId}\n value={sliderValue}\n defaultValue={sliderDefaultValue}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n orientation={orientation}\n onValueChange={handleValueChange}\n onValueCommitted={handleValueCommitted}\n aria-invalid={invalid || undefined}\n className={cn(\n 'min-w-0 flex-1',\n invalid && '[&_[data-slot=slider-range]]:bg-destructive [&_[data-slot=slider-thumb]]:border-destructive',\n )}\n />\n\n {!!showValue && displayValue !== null && (\n <Text\n tag=\"span\"\n type={invalid ? 'error' : 'secondary'}\n className=\"min-w-[3ch] shrink-0 text-right tabular-nums\"\n >\n {displayValue}\n </Text>\n )}\n </div>\n );\n}\n\nconst SliderField = React.forwardRef<SliderElement, SliderProps>(SliderFieldImpl);\nSliderField.displayName = 'SliderField';\n\nexport { SliderField };\n","/**\n * ListRadioGroup — single-select radio group rendered as a vertical list with\n * dividers between rows. Use when options have descriptive secondary text and\n * read better as a stack than a grid (e.g. plan tiers, role definitions).\n *\n * Pairs with `CardRadioGroup` for grid-style choices and `PillRadioGroup` for\n * inline compact toggles.\n */\nimport { Radio as RadioPrimitive } from '@base-ui/react/radio';\nimport { RadioGroup as RadioGroupPrimitive } from '@base-ui/react/radio-group';\nimport { Circle } from 'lucide-react';\nimport { Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\nimport { useFormsConfig } from '@/lib/ui-provider';\nimport { resolveFormControlSize } from '../form-sizing';\nimport {\n\tchoiceListSizeTokens,\n\ttype ChoiceGroupBaseProps,\n\ttype ChoiceOptionBase,\n} from './choice-types';\n\nexport interface ListRadioOption extends ChoiceOptionBase {}\n\nexport interface ListRadioGroupProps extends ChoiceGroupBaseProps {\n\toptions: ListRadioOption[];\n\tvalue?: string;\n\tdefaultValue?: string;\n\tonChange?: (value: string) => void;\n}\n\nexport function ListRadioGroup({\n\toptions,\n\tvalue,\n\tdefaultValue,\n\tonChange,\n\tname,\n\tinvalid,\n\tdisabled,\n\tsize: sizeProp,\n\tclassName,\n}: ListRadioGroupProps) {\n\tconst { defaultControlSize } = useFormsConfig();\n\tconst size = resolveFormControlSize(sizeProp, defaultControlSize);\n\n\tconst rowPadding = choiceListSizeTokens[size];\n\treturn (\n\t\t<RadioGroupPrimitive\n\t\t\tvalue={value}\n\t\t\tdefaultValue={defaultValue}\n\t\t\tonValueChange={(val) => val && onChange?.(val)}\n\t\t\tname={name}\n\t\t\tdisabled={disabled}\n\t\t\taria-invalid={invalid || undefined}\n\t\t\tclassName={cn('list-radio-group--component', \n\t\t\t\t'overflow-hidden rounded-md border [&>[role=radio]~[role=radio]]:border-t',\n\t\t\t\t'aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20',\n\t\t\t\tdisabled && 'pointer-events-none opacity-50',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{options.map((option) => (\n\t\t\t\t<RadioPrimitive.Root\n\t\t\t\t\tkey={option.value}\n\t\t\t\t\tvalue={option.value}\n\t\t\t\t\tdisabled={disabled || option.disabled}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'group flex w-full items-start gap-3 text-start outline-none cursor-pointer',\n\t\t\t\t\t\t'transition-colors hover:bg-muted/40 focus-visible:bg-muted/40',\n\t\t\t\t\t\t'data-[checked]:bg-primary/5',\n\t\t\t\t\t\t'disabled:cursor-not-allowed disabled:opacity-50',\n\t\t\t\t\t\trowPadding,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"mt-0.5 flex h-5 w-5 shrink-0 items-center justify-center rounded-full border border-primary group-data-[checked]:border-primary group-not-data-[checked]:border-muted-foreground/50\">\n\t\t\t\t\t\t<RadioPrimitive.Indicator\n\t\t\t\t\t\t\trender={<Circle className=\"h-2.5 w-2.5 fill-primary text-primary\" />}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className=\"flex-1 min-w-0\">\n\t\t\t\t\t\t<Text tag=\"span\" weight=\"medium\" lineHeight=\"tight\" className=\"block\">\n\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t{!!option.description && (\n\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"block mt-0.5\">\n\t\t\t\t\t\t\t\t{option.description}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</RadioPrimitive.Root>\n\t\t\t))}\n\t\t</RadioGroupPrimitive>\n\t);\n}\n\nListRadioGroup.displayName = 'ListRadioGroup';\n","import { useMemo, useCallback } from 'react';\nimport { Select, type SelectProps } from './select';\n\ntype RoundingMode = string;\n\nexport interface RoundingModeSelectProps extends Omit<SelectProps, 'options' | 'value' | 'onChange'> {\n /** Current rounding mode value */\n value?: RoundingMode;\n\n /** Change handler */\n onChange?: (value: RoundingMode | undefined) => void;\n\n /** Custom labels for rounding modes */\n labels?: Partial<Record<RoundingMode, string>>;\n}\n\nconst ORDERED_MODES: RoundingMode[] = ['floor', 'half_up', 'ceil'];\n\nexport function RoundingModeSelect({ value, onChange, labels, placeholder, ...props }: RoundingModeSelectProps) {\n const options = useMemo(\n () =>\n ORDERED_MODES.map((mode) => ({\n value: mode,\n label: labels?.[mode] ?? mode,\n })),\n [labels]\n );\n\n const handleChange = useCallback(\n (next: string | undefined) => {\n onChange?.(next as RoundingMode | undefined);\n },\n [onChange]\n );\n\n return <Select className=\"rounding-mode-select--component\" options={options} value={value} onChange={handleChange} placeholder={placeholder} {...props} />;\n}\n\nRoundingModeSelect.displayName = 'RoundingModeSelect';\n","import {\n forwardRef,\n type ReactNode,\n useMemo,\n useCallback,\n useState,\n} from 'react';\nimport * as baseui from '@/components/ui/select';\nimport { Text } from '@/components/typography';\nimport { useStrings, type StringsProp } from '@/lib/strings';\nimport { useFormsConfig, type FormControlSize } from '@/lib/ui-provider';\nimport { cn } from '@/lib/utils';\nimport { formControlMinHeightClasses, formControlSizeClasses, resolveFormControlSize } from '../form-sizing';\n\nexport interface RichSelectStrings {\n placeholder: string;\n}\n\nexport const defaultRichSelectStrings: RichSelectStrings = {\n placeholder: 'Select an item',\n};\n\nexport interface RichSelectOption {\n value: string;\n label: string;\n description?: string;\n icon?: ReactNode;\n disabled?: boolean;\n}\n\nexport interface RichSelectProps {\n /** Available options */\n options: RichSelectOption[];\n\n /** Change handler */\n onChange?: (value: string | undefined) => void;\n\n /** Additional class names */\n className?: string;\n\n /** Placeholder text — overrides `strings.placeholder` when provided. */\n placeholder?: string;\n\n /** String overrides (e.g. placeholder) merged over defaults. */\n strings?: StringsProp<RichSelectStrings>;\n\n /** Allow clearing the selection */\n allowClear?: boolean;\n\n /** Error state for styling (passed from FormField) */\n invalid?: boolean;\n\n /** Current value */\n value?: string | null;\n\n /** Default value */\n defaultValue?: string | null;\n\n /** Disabled state */\n disabled?: boolean;\n\n /** Field name */\n name?: string;\n\n /** Required state */\n required?: boolean;\n\n /** Open state (controlled) */\n open?: boolean;\n\n /** Default open state */\n defaultOpen?: boolean;\n\n /** Open change handler */\n onOpenChange?: (open: boolean) => void;\n\n /** Form control size — flows through `useFormsConfig().defaultControlSize`. */\n size?: FormControlSize;\n}\n\n// Internal value for \"empty\" selection\nconst EMPTY_OPTION_VALUE = '__rich_select_empty__';\n\n/**\n * RichSelect - Select with description and icon support\n */\nexport const RichSelect = forwardRef<HTMLButtonElement, RichSelectProps>(\n (\n {\n options,\n placeholder,\n strings: stringsProp,\n onChange,\n className,\n disabled,\n defaultOpen,\n open,\n onOpenChange,\n name,\n required,\n value,\n defaultValue,\n allowClear = false,\n invalid,\n size: sizeProp,\n },\n ref\n ) => {\n const { defaultControlSize } = useFormsConfig();\n const size = resolveFormControlSize(sizeProp, defaultControlSize);\n const strings = useStrings(defaultRichSelectStrings, stringsProp);\n const resolvedPlaceholder = placeholder ?? strings.placeholder;\n const mapToInternalValue = useCallback(\n (optionValue?: string | null) => {\n if (optionValue === EMPTY_OPTION_VALUE) {\n return undefined;\n }\n\n if (optionValue === '' || optionValue === null || optionValue === undefined) {\n return allowClear ? EMPTY_OPTION_VALUE : undefined;\n }\n\n return optionValue;\n },\n [allowClear],\n );\n\n const mapFromInternalValue = useCallback((optionValue: string): string | undefined => {\n if (optionValue === EMPTY_OPTION_VALUE) {\n return undefined;\n }\n return optionValue;\n }, []);\n\n const normalizedOptions = useMemo(() => {\n const mapped = options.map((option) => ({\n ...option,\n value: mapToInternalValue(option.value) ?? '',\n }));\n\n if (allowClear) {\n const hasExplicitPlaceholder = mapped.some((option) => option.label === resolvedPlaceholder);\n if (!hasExplicitPlaceholder) {\n mapped.unshift({\n label: resolvedPlaceholder,\n value: EMPTY_OPTION_VALUE,\n });\n }\n }\n\n return mapped;\n }, [options, allowClear, resolvedPlaceholder, mapToInternalValue]);\n\n const normalizedValue = useMemo(() => mapToInternalValue(value ?? undefined), [value, mapToInternalValue]);\n const normalizedDefaultValue = useMemo(() => mapToInternalValue(defaultValue ?? undefined), [defaultValue, mapToInternalValue]);\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState<string | undefined>(\n normalizedDefaultValue,\n );\n const effectiveValue = isControlled ? normalizedValue : internalValue;\n const selectedOption = useMemo(\n () =>\n normalizedOptions.find(\n (option) => option.value === effectiveValue,\n ),\n [effectiveValue, normalizedOptions],\n );\n\n const handleValueChange = useCallback(\n (nextValue: string | null | undefined) => {\n if (nextValue !== null && nextValue !== undefined) {\n if (!isControlled) {\n setInternalValue(nextValue);\n }\n onChange?.(mapFromInternalValue(nextValue));\n }\n },\n [isControlled, onChange, mapFromInternalValue]\n );\n\n // Trigger chrome aligned with `Select`'s canonical shape:\n // - `border-input bg-transparent rounded-md` (was raw `neutral-300`\n // palette + `rounded-lg`).\n // - `formControlSizeClasses[size]` so density flows through\n // `<UIProvider forms={{ defaultControlSize }}>` (rule 17).\n // - `focus-visible:border-ring + ring-ring/50 + ring-[3px]` (was a\n // bespoke `outline-3 outline-primary-400` pattern).\n // - `aria-invalid:` selectors for invalid chrome (was a manual\n // `invalid && '…'` conditional with raw `error-100/300/600`\n // palette tokens — rule 6 violation).\n // - `disabled:opacity-50 disabled:cursor-not-allowed` to match\n // every other field (was `opacity-40 grayscale`).\n const inputClassNames = cn(\n 'border-input bg-transparent w-full rounded-md border outline-none transition-[color,box-shadow] !shadow-none',\n formControlSizeClasses[size],\n formControlMinHeightClasses[size],\n 'h-auto py-2',\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 aria-invalid:text-destructive',\n 'disabled:cursor-not-allowed disabled:opacity-50',\n className,\n );\n const valueProps = isControlled\n ? { value: normalizedValue }\n : {};\n\n return (\n <baseui.Select\n onValueChange={(value) => handleValueChange(value)}\n disabled={disabled}\n defaultOpen={defaultOpen}\n open={open}\n onOpenChange={onOpenChange}\n name={name}\n required={required}\n defaultValue={normalizedDefaultValue}\n {...valueProps}\n >\n <baseui.SelectTrigger ref={ref} className={cn('rich-select--component', inputClassNames)} aria-invalid={invalid}>\n {selectedOption ? (\n <Text tag=\"span\" className=\"text-left break-words whitespace-normal\">\n {selectedOption.label}\n </Text>\n ) : (\n <baseui.SelectValue placeholder={resolvedPlaceholder} />\n )}\n </baseui.SelectTrigger>\n <baseui.SelectContent>\n <baseui.SelectGroup>\n {normalizedOptions.map((option) => (\n <baseui.SelectItem\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n >\n <div className=\"flex w-full items-center gap-2\">\n {!!option.icon && (\n <span className=\"w-4 h-4 shrink-0 flex items-center justify-center self-start mt-0.5\">\n {option.icon}\n </span>\n )}\n <div className=\"flex flex-col min-w-0 text-left flex-1\">\n <Text tag=\"span\" weight=\"medium\">{option.label}</Text>\n {!!option.description && (\n <Text tag=\"span\" size=\"xs\" type=\"secondary\" lineHeight=\"tight\" className=\"mt-0.5 line-clamp-2\">\n {option.description}\n </Text>\n )}\n </div>\n </div>\n </baseui.SelectItem>\n ))}\n </baseui.SelectGroup>\n </baseui.SelectContent>\n </baseui.Select>\n );\n }\n);\n\nRichSelect.displayName = 'RichSelect';\n","import { useState, useEffect, useCallback } from 'react';\nimport * as baseui from '@/components/ui/select';\nimport { Label, Text } from '@/components/typography';\nimport { useStrings, type StringsProp } from '@/lib/strings';\nimport { useFormsConfig, type FormControlSize } from '@/lib/ui-provider';\nimport { cn } from '@/lib/utils';\nimport { formControlSizeClasses, resolveFormControlSize } from '../form-sizing';\nimport { DecimalInput } from './decimal-input';\n\nexport interface DimensionObject {\n width?: string;\n height?: string;\n depth?: string;\n}\n\nexport type DimensionValue = string | DimensionObject;\n\nexport interface DimensionsInputStrings {\n width: string;\n height: string;\n depth: string;\n unit: string;\n widthPlaceholder: string;\n heightPlaceholder: string;\n depthPlaceholder: string;\n}\n\nexport const defaultDimensionsInputStrings: DimensionsInputStrings = {\n width: 'Width',\n height: 'Height',\n depth: 'Depth',\n unit: 'Unit',\n widthPlaceholder: '0.00',\n heightPlaceholder: '0.00',\n depthPlaceholder: '0.00',\n};\n\nexport interface DimensionsInputProps {\n /** Current value (string \"WxHxD\" or object { width, height, depth }) */\n value?: DimensionValue;\n\n /** Default value for uncontrolled mode */\n defaultValue?: DimensionValue;\n\n /** Format type: 'string' for \"WxHxD\" or 'object' for { width, height, depth } */\n format?: 'string' | 'object';\n\n /** Current unit value */\n unit?: 'g' | 'kg';\n\n /** Default unit for uncontrolled mode */\n defaultUnit?: 'g' | 'kg';\n\n /** Label for width input (sub-label) */\n widthLabel?: string;\n\n /** Label for height input (sub-label) */\n heightLabel?: string;\n\n /** Label for depth/length input (sub-label) */\n depthLabel?: string;\n\n /** Label for unit selector (sub-label) */\n unitLabel?: string;\n\n /** Placeholder for the unit select */\n unitPlaceholder?: string;\n\n /** Placeholder for width */\n widthPlaceholder?: string;\n\n /** Placeholder for height */\n heightPlaceholder?: string;\n\n /** Placeholder for depth */\n depthPlaceholder?: string;\n\n /** Form control size — flows through `useFormsConfig().defaultControlSize`. */\n size?: FormControlSize;\n\n /** Callback when value changes */\n onChange?: (e: { target: { value: DimensionValue } }) => void;\n\n /** Callback when unit changes */\n onUnitChange?: (unit: 'g' | 'kg') => void;\n\n /** Number of decimal places. Defaults to 2 */\n decimalPlaces?: number;\n\n /** Minimum value for all dimensions */\n min?: number;\n\n /** Maximum value for all dimensions */\n max?: number;\n\n /** Show unit selector. Defaults to true */\n showUnitSelector?: boolean;\n\n /** Disable unit selector */\n disableUnitSelector?: boolean;\n\n /** Layout orientation. Defaults to 'horizontal' */\n layout?: 'horizontal' | 'vertical';\n\n /** Error state for styling (passed from FormField) */\n invalid?: boolean;\n\n /** Disabled state */\n disabled?: boolean;\n\n /** Additional CSS classes */\n className?: string;\n\n /** String overrides merged over defaults. Direct props (e.g. `widthLabel`) win over `strings` keys. */\n strings?: StringsProp<DimensionsInputStrings>;\n}\n\n// Unit options\nconst UNIT_OPTIONS = [\n { value: 'g', label: 'g (grams)' },\n { value: 'kg', label: 'kg (kilograms)' },\n] as const;\n\nconst parseDimensionValue = (\n value: DimensionValue | undefined,\n format: 'string' | 'object'\n): { width: string; height: string; depth: string } => {\n if (!value) {\n return { width: '', height: '', depth: '' };\n }\n\n if (format === 'string' && typeof value === 'string') {\n const parts = value.split('x').map((p) => p.trim());\n return {\n width: parts[0] || '',\n height: parts[1] || '',\n depth: parts[2] || '',\n };\n }\n\n if (format === 'object' && typeof value === 'object') {\n return {\n width: value.width || '',\n height: value.height || '',\n depth: value.depth || '',\n };\n }\n\n return { width: '', height: '', depth: '' };\n};\n\nconst formatDimensionValue = (\n width: string,\n height: string,\n depth: string,\n format: 'string' | 'object'\n): DimensionValue => {\n if (format === 'string') {\n return `${width}x${height}x${depth}`;\n }\n return { width, height, depth };\n};\n\nexport function DimensionsInput({\n value: controlledValue,\n defaultValue,\n format = 'string',\n unit: controlledUnit,\n defaultUnit = 'g',\n widthLabel,\n heightLabel,\n depthLabel,\n unitLabel,\n unitPlaceholder,\n widthPlaceholder,\n heightPlaceholder,\n depthPlaceholder,\n onChange,\n onUnitChange,\n decimalPlaces = 2,\n min = 0,\n max,\n showUnitSelector = true,\n disableUnitSelector = false,\n layout = 'horizontal',\n invalid,\n disabled = false,\n className,\n size: sizeProp,\n strings: stringsProp,\n}: DimensionsInputProps) {\n const { defaultControlSize } = useFormsConfig();\n const size = resolveFormControlSize(sizeProp, defaultControlSize);\n const strings = useStrings(defaultDimensionsInputStrings, stringsProp);\n const resolvedWidthLabel = widthLabel ?? strings.width;\n const resolvedHeightLabel = heightLabel ?? strings.height;\n const resolvedDepthLabel = depthLabel ?? strings.depth;\n const resolvedUnitPlaceholder = unitPlaceholder ?? strings.unit;\n const resolvedWidthPlaceholder = widthPlaceholder ?? strings.widthPlaceholder;\n const resolvedHeightPlaceholder = heightPlaceholder ?? strings.heightPlaceholder;\n const resolvedDepthPlaceholder = depthPlaceholder ?? strings.depthPlaceholder;\n const shouldShowInlineLabels = layout === 'horizontal';\n const shouldShowVerticalLabels = layout === 'vertical';\n const shouldShowUnitSelector = showUnitSelector === true;\n const hasUnitLabel = (unitLabel ?? '').length > 0;\n const widthFieldLabel = shouldShowVerticalLabels ? resolvedWidthLabel : '';\n const heightFieldLabel = shouldShowVerticalLabels ? resolvedHeightLabel : '';\n const depthFieldLabel = shouldShowVerticalLabels ? resolvedDepthLabel : '';\n\n // Determine if value is controlled\n const isValueControlled = controlledValue !== undefined;\n const isUnitControlled = controlledUnit !== undefined;\n\n // Parse initial value\n const initialParsed = parseDimensionValue(\n isValueControlled ? controlledValue : defaultValue,\n format\n );\n\n // Internal state for uncontrolled mode\n const [internalWidth, setInternalWidth] = useState(initialParsed.width);\n const [internalHeight, setInternalHeight] = useState(initialParsed.height);\n const [internalDepth, setInternalDepth] = useState(initialParsed.depth);\n const [internalUnit, setInternalUnit] = useState(controlledUnit || defaultUnit);\n\n // Get current values\n const parsedValue = parseDimensionValue(controlledValue, format);\n const widthValue = isValueControlled ? parsedValue.width : internalWidth;\n const heightValue = isValueControlled ? parsedValue.height : internalHeight;\n const depthValue = isValueControlled ? parsedValue.depth : internalDepth;\n const unitValue = isUnitControlled ? controlledUnit : internalUnit;\n\n // Sync internal state when controlled value changes\n useEffect(() => {\n if (isValueControlled) {\n const parsed = parseDimensionValue(controlledValue, format);\n setInternalWidth(parsed.width);\n setInternalHeight(parsed.height);\n setInternalDepth(parsed.depth);\n }\n }, [controlledValue, format, isValueControlled]);\n\n // Handle dimension changes\n const handleDimensionChange = useCallback(\n (dimension: 'width' | 'height' | 'depth', newValue: string) => {\n let updatedWidth = widthValue;\n let updatedHeight = heightValue;\n let updatedDepth = depthValue;\n\n if (dimension === 'width') updatedWidth = newValue;\n if (dimension === 'height') updatedHeight = newValue;\n if (dimension === 'depth') updatedDepth = newValue;\n\n if (!isValueControlled) {\n setInternalWidth(updatedWidth);\n setInternalHeight(updatedHeight);\n setInternalDepth(updatedDepth);\n }\n\n const formattedValue = formatDimensionValue(updatedWidth, updatedHeight, updatedDepth, format);\n onChange?.({ target: { value: formattedValue } });\n },\n [widthValue, heightValue, depthValue, isValueControlled, format, onChange]\n );\n\n const handleUnitChange = useCallback(\n (newUnit: string | null) => {\n if (newUnit === null) return;\n const typedUnit = newUnit as 'g' | 'kg';\n if (!isUnitControlled) {\n setInternalUnit(typedUnit);\n }\n onUnitChange?.(typedUnit);\n },\n [isUnitControlled, onUnitChange]\n );\n\n const unitSelector = (\n <div className=\"space-y-2\">\n {!!hasUnitLabel && <Label className=\"leading-6\">{unitLabel}</Label>}\n <baseui.Select\n value={unitValue}\n onValueChange={(value) => handleUnitChange(value)}\n disabled={disabled || disableUnitSelector}\n >\n <baseui.SelectTrigger\n aria-invalid={invalid || undefined}\n className={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 'w-32',\n disabled && 'opacity-50 cursor-not-allowed'\n )}\n >\n <baseui.SelectValue placeholder={resolvedUnitPlaceholder} />\n </baseui.SelectTrigger>\n <baseui.SelectContent>\n <baseui.SelectGroup>\n {UNIT_OPTIONS.map((unit) => (\n <baseui.SelectItem key={unit.value} value={unit.value}>\n {unit.label}\n </baseui.SelectItem>\n ))}\n </baseui.SelectGroup>\n </baseui.SelectContent>\n </baseui.Select>\n </div>\n );\n\n return (\n <div className={cn('dimensions-input--component', 'space-y-2', className)}>\n {/* Dimensions Inputs */}\n <div\n className={cn(\n 'flex gap-2',\n layout === 'vertical' ? 'flex-col' : 'flex-row items-start'\n )}\n >\n {/* Width */}\n <div className=\"flex-1 space-y-1\">\n {!!shouldShowVerticalLabels && !!widthFieldLabel && <Label>{widthFieldLabel}</Label>}\n <DecimalInput\n size={size}\n value={widthValue}\n onChange={(e) => handleDimensionChange('width', e.target.value)}\n placeholder={resolvedWidthPlaceholder}\n decimalPlaces={decimalPlaces}\n min={min}\n max={max}\n disabled={disabled}\n invalid={invalid}\n aria-label={resolvedWidthLabel}\n />\n {!!shouldShowInlineLabels && (\n <Text size=\"xs\" type=\"secondary\" className=\"text-center\">\n {resolvedWidthLabel}\n </Text>\n )}\n </div>\n\n {/* Separator */}\n {layout === 'horizontal' && (\n <div className=\"flex items-center pt-2\">\n <Text tag=\"span\" type=\"secondary\">×</Text>\n </div>\n )}\n\n {/* Height */}\n <div className=\"flex-1 space-y-1\">\n {!!shouldShowVerticalLabels && !!heightFieldLabel && <Label>{heightFieldLabel}</Label>}\n <DecimalInput\n size={size}\n value={heightValue}\n onChange={(e) => handleDimensionChange('height', e.target.value)}\n placeholder={resolvedHeightPlaceholder}\n decimalPlaces={decimalPlaces}\n min={min}\n max={max}\n disabled={disabled}\n invalid={invalid}\n aria-label={resolvedHeightLabel}\n />\n {!!shouldShowInlineLabels && (\n <Text size=\"xs\" type=\"secondary\" className=\"text-center\">\n {resolvedHeightLabel}\n </Text>\n )}\n </div>\n\n {/* Separator */}\n {layout === 'horizontal' && (\n <div className=\"flex items-center pt-2\">\n <Text tag=\"span\" type=\"secondary\">×</Text>\n </div>\n )}\n\n {/* Depth */}\n <div className=\"flex-1 space-y-1\">\n {!!shouldShowVerticalLabels && !!depthFieldLabel && <Label>{depthFieldLabel}</Label>}\n <DecimalInput\n size={size}\n value={depthValue}\n onChange={(e) => handleDimensionChange('depth', e.target.value)}\n placeholder={resolvedDepthPlaceholder}\n decimalPlaces={decimalPlaces}\n min={min}\n max={max}\n disabled={disabled}\n invalid={invalid}\n aria-label={resolvedDepthLabel}\n />\n {!!shouldShowInlineLabels && (\n <Text size=\"xs\" type=\"secondary\" className=\"text-center\">\n {resolvedDepthLabel}\n </Text>\n )}\n </div>\n\n {/* Unit Selector */}\n {!!shouldShowUnitSelector && (\n <div className={cn(layout === 'vertical' ? 'w-full' : 'w-32 pt-0')}>\n {unitSelector}\n {!!shouldShowInlineLabels && !hasUnitLabel && (\n <Text size=\"xs\" type=\"secondary\" className=\"mt-1 text-center\">\n {resolvedUnitPlaceholder}\n </Text>\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nDimensionsInput.displayName = 'DimensionsInput';\n","import * as React from 'react';\nimport { useState, useMemo, useCallback } from 'react';\nimport * as baseui from '@/components/ui/select';\nimport { Label } from '@/components/typography';\nimport { useStrings, type StringsProp } from '@/lib/strings';\nimport { useFormsConfig, type FormControlSize } from '@/lib/ui-provider';\nimport { cn } from '@/lib/utils';\nimport { formControlSizeClasses, resolveFormControlSize } from '../form-sizing';\nimport { DecimalInput } from './decimal-input';\n\nexport type WeightUnit = 'g' | 'kg' | 'lb' | 'oz';\n\nexport interface WeightInputStrings {\n /** Above-field label for the unit selector. Empty string hides it. */\n unitLabel: string;\n /** Placeholder shown in the unit selector. */\n unitPlaceholder: string;\n}\n\nexport const defaultWeightInputStrings: WeightInputStrings = {\n unitLabel: '',\n unitPlaceholder: '',\n};\n\nexport interface WeightInputProps {\n /** Controlled value */\n value?: string;\n\n /** Default value for uncontrolled mode */\n defaultValue?: string;\n\n /** Current unit */\n unit?: WeightUnit;\n\n /** Default unit for uncontrolled mode */\n defaultUnit?: WeightUnit;\n\n /** Value change handler */\n onChange?: (e: { target: { value: string } }) => void;\n\n /** Unit change handler */\n onUnitChange?: (unit: WeightUnit) => void;\n\n /** Number of decimal places */\n decimalPlaces?: number;\n\n /** Minimum value */\n min?: number;\n\n /** Maximum value */\n max?: number;\n\n /** Show unit selector */\n showUnitSelector?: boolean;\n\n /** Disable unit selector */\n disableUnitSelector?: boolean;\n\n /** @deprecated Use `strings.unitLabel`. */\n unitLabel?: string;\n\n /** @deprecated Use `strings.unitPlaceholder`. */\n unitPlaceholder?: string;\n\n /** Override default strings (unit selector label + placeholder). */\n strings?: StringsProp<WeightInputStrings>;\n\n /** Width of unit selector */\n unitWidth?: string;\n\n /** Error state for styling (passed from FormField) */\n invalid?: boolean;\n\n /** Disabled state */\n disabled?: boolean;\n\n /** Form control size — flows through `useFormsConfig().defaultControlSize`. */\n size?: FormControlSize;\n\n /** Additional class names */\n className?: string;\n}\n\nconst UNIT_OPTIONS: Array<{ value: WeightUnit; label: string }> = [\n { value: 'g', label: 'g' },\n { value: 'kg', label: 'kg' },\n { value: 'lb', label: 'lb' },\n { value: 'oz', label: 'oz' },\n];\n\nexport function WeightInput({\n value: controlledValue,\n defaultValue,\n unit: controlledUnit,\n defaultUnit = 'g',\n onChange,\n onUnitChange,\n decimalPlaces = 2,\n min = 0,\n max,\n showUnitSelector = true,\n disableUnitSelector = false,\n unitLabel,\n unitPlaceholder,\n unitWidth = 'w-24',\n strings: stringsProp,\n invalid,\n disabled = false,\n size: sizeProp,\n className,\n}: WeightInputProps) {\n const { defaultControlSize } = useFormsConfig();\n const size = resolveFormControlSize(sizeProp, defaultControlSize);\n const strings = useStrings(defaultWeightInputStrings, {\n ...(unitLabel !== undefined ? { unitLabel } : {}),\n ...(unitPlaceholder !== undefined ? { unitPlaceholder } : {}),\n ...stringsProp,\n });\n const isValueControlled = controlledValue !== undefined;\n const isUnitControlled = controlledUnit !== undefined;\n\n const [internalValue, setInternalValue] = useState(defaultValue ?? '');\n const [internalUnit, setInternalUnit] = useState<WeightUnit>(controlledUnit ?? defaultUnit);\n\n const value = isValueControlled ? controlledValue ?? '' : internalValue;\n const unit = isUnitControlled ? controlledUnit ?? defaultUnit : internalUnit;\n\n const handleValueChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!isValueControlled) {\n setInternalValue(e.target.value);\n }\n onChange?.({ target: { value: e.target.value } });\n },\n [isValueControlled, onChange]\n );\n\n const handleUnitChange = useCallback(\n (nextUnit: string | null) => {\n if (nextUnit === null) return;\n const weightUnit = nextUnit as WeightUnit;\n if (!isUnitControlled) {\n setInternalUnit(weightUnit);\n }\n onUnitChange?.(weightUnit);\n },\n [isUnitControlled, onUnitChange]\n );\n\n const unitOptions = useMemo(() => UNIT_OPTIONS, []);\n const hasUnitLabel = strings.unitLabel !== '';\n\n return (\n <div className={cn('weight-input--component', 'flex items-start gap-2', className)}>\n <div className=\"flex-1\">\n <DecimalInput\n size={size}\n value={value}\n onChange={handleValueChange}\n decimalPlaces={decimalPlaces}\n allowNegative={false}\n min={min}\n max={max}\n disabled={disabled}\n invalid={invalid}\n />\n </div>\n {!!showUnitSelector && (\n <div className=\"space-y-2\">\n {!!hasUnitLabel && <Label className=\"leading-6\">{strings.unitLabel}</Label>}\n <baseui.Select value={unit} onValueChange={(value) => handleUnitChange(value)} disabled={disabled || disableUnitSelector}>\n <baseui.SelectTrigger\n aria-invalid={invalid || undefined}\n className={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 (disabled || disableUnitSelector) && 'opacity-50 cursor-not-allowed',\n unitWidth\n )}\n >\n <baseui.SelectValue placeholder={strings.unitPlaceholder || undefined} />\n </baseui.SelectTrigger>\n <baseui.SelectContent>\n <baseui.SelectGroup>\n {unitOptions.map((option) => (\n <baseui.SelectItem key={option.value} value={option.value}>\n {option.label}\n </baseui.SelectItem>\n ))}\n </baseui.SelectGroup>\n </baseui.SelectContent>\n </baseui.Select>\n </div>\n )}\n </div>\n );\n}\n\nWeightInput.displayName = 'WeightInput';\n","import { useEffect, useMemo, useState, useCallback } from 'react';\nimport { Label, TextLink } from '@/components/typography';\nimport { useStrings, type StringsProp } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\nimport { DecimalInput } from './decimal-input';\n\nexport interface CoordinatesObjectValue {\n lat?: string;\n lng?: string;\n}\n\nexport type CoordinatesValue = string | CoordinatesObjectValue;\n\nexport interface CoordinatesInputStrings {\n /** Above-field label for the latitude input. Empty string hides it. */\n latLabel: string;\n /** Above-field label for the longitude input. Empty string hides it. */\n lngLabel: string;\n /** Placeholder shown in the latitude input. */\n latPlaceholder: string;\n /** Placeholder shown in the longitude input. */\n lngPlaceholder: string;\n /** Anchor text for the Google Maps preview link. Empty string hides it. */\n previewLinkLabel: string;\n}\n\nexport const defaultCoordinatesInputStrings: CoordinatesInputStrings = {\n latLabel: '',\n lngLabel: '',\n latPlaceholder: '',\n lngPlaceholder: '',\n previewLinkLabel: '',\n};\n\nexport interface CoordinatesInputProps {\n /** Controlled value */\n value?: CoordinatesValue;\n\n /** Default value for uncontrolled mode */\n defaultValue?: CoordinatesValue;\n\n /** Output format */\n format?: 'string' | 'object';\n\n /** Change handler */\n onChange?: (e: { target: { value: CoordinatesValue } }) => void;\n\n /** @deprecated Use `strings.latLabel`. */\n latLabel?: string;\n\n /** @deprecated Use `strings.lngLabel`. */\n lngLabel?: string;\n\n /** @deprecated Use `strings.latPlaceholder`. */\n latPlaceholder?: string;\n\n /** @deprecated Use `strings.lngPlaceholder`. */\n lngPlaceholder?: string;\n\n /** Number of decimal places */\n decimalPlaces?: number;\n\n /** Show preview link to Google Maps */\n showPreviewLink?: boolean;\n\n /** @deprecated Use `strings.previewLinkLabel`. */\n previewLinkLabel?: string;\n\n /** Override default strings (labels + placeholders + preview link). */\n strings?: StringsProp<CoordinatesInputStrings>;\n\n /** Error state for styling (passed from FormField) */\n invalid?: boolean;\n\n /** Additional class names */\n className?: string;\n\n /** Disabled state */\n disabled?: boolean;\n}\n\nconst parseValue = (\n value: CoordinatesValue | undefined,\n format: 'string' | 'object'\n): { lat: string; lng: string } => {\n if (!value) {\n return { lat: '', lng: '' };\n }\n\n if (format === 'string' && typeof value === 'string') {\n const [lat, lng] = value.split(',').map((part) => part.trim());\n return { lat: lat ?? '', lng: lng ?? '' };\n }\n\n if (format === 'object' && typeof value === 'object') {\n return { lat: value.lat ?? '', lng: value.lng ?? '' };\n }\n\n return { lat: '', lng: '' };\n};\n\nconst formatValue = (lat: string, lng: string, format: 'string' | 'object'): CoordinatesValue => {\n if (format === 'string') {\n return `${lat},${lng}`;\n }\n return { lat, lng };\n};\n\nconst isFiniteNumberInRange = (value: string, min: number, max: number): boolean => {\n if (!value) return false;\n const num = Number(value);\n return Number.isFinite(num) && num >= min && num <= max;\n};\n\nexport function CoordinatesInput({\n value: controlledValue,\n defaultValue,\n format = 'object',\n onChange,\n latLabel,\n lngLabel,\n latPlaceholder,\n lngPlaceholder,\n decimalPlaces = 6,\n showPreviewLink = true,\n previewLinkLabel,\n strings: stringsProp,\n invalid,\n className,\n disabled,\n}: CoordinatesInputProps) {\n const strings = useStrings(defaultCoordinatesInputStrings, {\n ...(latLabel !== undefined ? { latLabel } : {}),\n ...(lngLabel !== undefined ? { lngLabel } : {}),\n ...(latPlaceholder !== undefined ? { latPlaceholder } : {}),\n ...(lngPlaceholder !== undefined ? { lngPlaceholder } : {}),\n ...(previewLinkLabel !== undefined ? { previewLinkLabel } : {}),\n ...stringsProp,\n });\n const isControlled = controlledValue !== undefined;\n\n const initialParsed = parseValue(isControlled ? controlledValue : defaultValue, format);\n const [internalLat, setInternalLat] = useState(initialParsed.lat);\n const [internalLng, setInternalLng] = useState(initialParsed.lng);\n\n const parsedControlled = parseValue(controlledValue, format);\n const lat = isControlled ? parsedControlled.lat : internalLat;\n const lng = isControlled ? parsedControlled.lng : internalLng;\n\n useEffect(() => {\n if (isControlled) {\n setInternalLat(parsedControlled.lat);\n setInternalLng(parsedControlled.lng);\n }\n }, [isControlled, parsedControlled.lat, parsedControlled.lng]);\n\n const update = useCallback(\n (nextLat: string, nextLng: string) => {\n if (!isControlled) {\n setInternalLat(nextLat);\n setInternalLng(nextLng);\n }\n\n onChange?.({ target: { value: formatValue(nextLat, nextLng, format) } });\n },\n [isControlled, onChange, format]\n );\n\n const mapUrl = useMemo(() => {\n const hasValidLat = isFiniteNumberInRange(lat, -90, 90);\n const hasValidLng = isFiniteNumberInRange(lng, -180, 180);\n if (!hasValidLat || !hasValidLng) return null;\n return `https://www.google.com/maps?q=${encodeURIComponent(`${lat},${lng}`)}`;\n }, [lat, lng]);\n\n return (\n <div className={cn('coordinates-input--component', 'space-y-3', className)}>\n <div className=\"grid grid-cols-1 gap-3 md:grid-cols-2\">\n <div className=\"space-y-2\">\n {!!strings.latLabel && <Label>{strings.latLabel}</Label>}\n <DecimalInput\n placeholder={strings.latPlaceholder || undefined}\n value={lat}\n onChange={(e) => update(e.target.value, lng)}\n decimalPlaces={decimalPlaces}\n allowNegative\n min={-90}\n max={90}\n invalid={invalid}\n disabled={disabled}\n />\n </div>\n <div className=\"space-y-2\">\n {!!strings.lngLabel && <Label>{strings.lngLabel}</Label>}\n <DecimalInput\n placeholder={strings.lngPlaceholder || undefined}\n value={lng}\n onChange={(e) => update(lat, e.target.value)}\n decimalPlaces={decimalPlaces}\n allowNegative\n min={-180}\n max={180}\n invalid={invalid}\n disabled={disabled}\n />\n </div>\n </div>\n\n {!!showPreviewLink && !!mapUrl && !!strings.previewLinkLabel && (\n <TextLink href={mapUrl} type=\"secondary\" underline={false}>\n {strings.previewLinkLabel}\n </TextLink>\n )}\n </div>\n );\n}\n\nCoordinatesInput.displayName = 'CoordinatesInput';\n","import { useCallback } from 'react';\nimport { DatePicker } from '@/components/base/date-pickers/date-picker';\nimport type { DateOutput } from '@/components/base/date-pickers/datepicker.types';\n\nexport interface DateTimeInputProps {\n /** Controlled value (ISO string) */\n value?: string;\n\n /** Change handler */\n onChange?: (value: string | undefined) => void;\n\n /** Placeholder text */\n placeholder?: string;\n\n /** Display format for the date */\n readableFormat?: string;\n\n /** Step for time selection in minutes */\n stepMinutes?: number;\n\n /** Use modal for picker */\n modal?: boolean;\n\n /** Error state for styling (passed from FormField) */\n invalid?: boolean;\n\n /** Disabled state */\n disabled?: boolean;\n}\n\nexport function DateTimeInput({\n value,\n onChange,\n placeholder,\n readableFormat = 'dd-MM-yyyy HH:mm',\n stepMinutes = 30,\n modal = true,\n invalid,\n disabled,\n}: DateTimeInputProps) {\n const dateValue = value ? new Date(value) : undefined;\n\tconst errorValue = invalid ? ' ' : undefined;\n\n const handleChange = useCallback(\n (output: DateOutput) => {\n onChange?.(output.date ? output.date.toISOString() : undefined);\n },\n [onChange]\n );\n\n return (\n <DatePicker className=\"date-time-input--component\"\n mode=\"single\"\n disabled={disabled}\n error={errorValue}\n placeholder={placeholder}\n value={dateValue}\n onChange={handleChange}\n readableFormat={readableFormat}\n withTime={{ enabled: true, format: '24', step: stepMinutes }}\n modal={modal}\n />\n );\n}\n\nDateTimeInput.displayName = 'DateTimeInput';\n","import { Clock } from 'lucide-react';\nimport * as React from 'react';\nimport { useCallback, useEffect, useId, useMemo, useRef, useState } from 'react';\nimport { Button } from '@/components/base/buttons';\nimport { PICKER_TRIGGER_CHROME } from '@/components/base/date-pickers/date-picker';\nimport { Popover, PopoverContent, PopoverTrigger } from '@/components/base/popover';\nimport { Label, Text } from '@/components/typography';\nimport { useStrings, type StringsProp } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\nimport { Input } from './input';\n\nexport interface TimePickerStrings {\n placeholder: string;\n dialogTitle: string;\n hours: string;\n minutes: string;\n seconds: string;\n now: string;\n done: string;\n hoursPlaceholder: string;\n minutesPlaceholder: string;\n secondsPlaceholder: string;\n am: string;\n pm: string;\n}\n\nexport const defaultTimePickerStrings: TimePickerStrings = {\n placeholder: 'Select time',\n dialogTitle: 'Select Time',\n hours: 'Hours',\n minutes: 'Minutes',\n seconds: 'Seconds',\n now: 'Now',\n done: 'Done',\n hoursPlaceholder: 'HH',\n minutesPlaceholder: 'MM',\n secondsPlaceholder: 'SS',\n am: 'AM',\n pm: 'PM',\n};\n\nconst pad2 = (n: number) => String(n).padStart(2, '0');\n\nconst toNumber = (value: string): number | null => {\n const trimmed = value.trim();\n if (trimmed === '') return null;\n const parsed = Number.parseInt(trimmed, 10);\n return Number.isFinite(parsed) ? parsed : null;\n};\n\nconst clamp = (value: number, min: number, max: number): number => Math.min(Math.max(value, min), max);\n\nconst sanitize2 = (value: string): string => (value ?? '').replace(/\\D/g, '').slice(0, 2);\n\nconst snapMinutes = (minutes: number, step: number): number => {\n if (!Number.isFinite(step) || step <= 0) return minutes;\n if (step === 1) return minutes;\n\n const remainder = minutes % step;\n const threshold = Math.max(1, Math.floor(step * 0.8));\n const shouldRoundUp = remainder >= threshold;\n const base = minutes - remainder;\n const snapped = shouldRoundUp ? base + step : base;\n return snapped >= 60 ? 0 : snapped;\n};\n\nexport interface TimePickerProps {\n /** Additional class names */\n className?: string;\n\n /** Current value in HH:MM:SS format */\n value?: string;\n\n /** Change handler */\n onChange?: (value: string) => void;\n\n /** Error state for styling (passed from FormField) */\n invalid?: boolean;\n\n /** Disabled state */\n disabled?: boolean;\n\n /** @deprecated Use `strings.placeholder` instead. */\n placeholder?: string;\n\n /** @deprecated Use `strings.dialogTitle` instead. */\n dialogTitle?: string;\n\n /** @deprecated Use `strings.hours` instead. */\n hoursLabel?: string;\n\n /** @deprecated Use `strings.minutes` instead. */\n minutesLabel?: string;\n\n /** @deprecated Use `strings.seconds` instead. */\n secondsLabel?: string;\n\n /** @deprecated Use `strings.now` instead. */\n nowLabel?: string;\n\n /** @deprecated Use `strings.done` instead. */\n doneLabel?: string;\n\n /** Time format (12 or 24 hour) */\n format?: '12' | '24';\n\n /** Minute step increment */\n minuteStep?: number;\n\n /** Show seconds input */\n showSeconds?: boolean;\n\n /** String overrides merged over defaults. */\n strings?: StringsProp<TimePickerStrings>;\n}\n\n/**\n * TimePicker - Time selection with popover dialog\n */\nexport function TimePicker({\n className,\n value = '00:00:00',\n onChange,\n invalid,\n disabled,\n placeholder,\n dialogTitle,\n hoursLabel,\n minutesLabel,\n secondsLabel,\n nowLabel,\n doneLabel,\n format = '24',\n minuteStep = 5,\n showSeconds = true,\n strings: stringsProp,\n}: TimePickerProps) {\n const triggerId = useId();\n const strings = useStrings(defaultTimePickerStrings, {\n ...(placeholder !== undefined ? { placeholder } : {}),\n ...(dialogTitle !== undefined ? { dialogTitle } : {}),\n ...(hoursLabel !== undefined ? { hours: hoursLabel } : {}),\n ...(minutesLabel !== undefined ? { minutes: minutesLabel } : {}),\n ...(secondsLabel !== undefined ? { seconds: secondsLabel } : {}),\n ...(nowLabel !== undefined ? { now: nowLabel } : {}),\n ...(doneLabel !== undefined ? { done: doneLabel } : {}),\n ...(stringsProp ?? {}),\n });\n\n const normalizeHoursSegment = useCallback(\n (raw: string | undefined, currentMeridiem: 'AM' | 'PM'): { hours: string; meridiem: 'AM' | 'PM' } => {\n const parsed = toNumber(raw ?? '') ?? 0;\n\n if (format === '12') {\n const hours12 = parsed > 12 ? 12 : clamp(parsed === 0 ? 12 : parsed, 1, 12);\n return { hours: pad2(hours12), meridiem: currentMeridiem };\n }\n\n const hours24 = parsed > 24 ? 24 : clamp(parsed, 0, 24);\n return { hours: pad2(hours24), meridiem: currentMeridiem };\n },\n [format]\n );\n\n const normalizeMinutesSegment = useCallback(\n (raw: string | undefined): string => {\n let minutesParsed = toNumber(raw ?? '') ?? 0;\n if (minutesParsed > 59) minutesParsed = 0;\n minutesParsed = snapMinutes(clamp(minutesParsed, 0, 59), minuteStep);\n return pad2(minutesParsed);\n },\n [minuteStep]\n );\n\n const normalizeSecondsSegment = useCallback((raw: string | undefined): string => {\n let secondsParsed = toNumber(raw ?? '') ?? 0;\n if (secondsParsed > 59) secondsParsed = 0;\n secondsParsed = clamp(secondsParsed, 0, 59);\n return pad2(secondsParsed);\n }, []);\n\n const normalizeTime = useCallback(\n (hoursRaw: string, minutesRaw: string, secondsRaw: string, meridiem: 'AM' | 'PM'): string => {\n const rawHours = toNumber(hoursRaw) ?? 0;\n\n let minutesParsed = toNumber(minutesRaw) ?? 0;\n if (minutesParsed > 59) minutesParsed = 0;\n minutesParsed = snapMinutes(clamp(minutesParsed, 0, 59), minuteStep);\n\n let secondsParsed = showSeconds ? (toNumber(secondsRaw) ?? 0) : 0;\n if (secondsParsed > 59) secondsParsed = 0;\n secondsParsed = showSeconds ? clamp(secondsParsed, 0, 59) : 0;\n\n if (format === '12') {\n const hours12 = rawHours > 12 ? 12 : clamp(rawHours === 0 ? 12 : rawHours, 1, 12);\n const hours24 = meridiem === 'AM' ? (hours12 === 12 ? 0 : hours12) : hours12 === 12 ? 12 : hours12 + 12;\n\n return `${pad2(hours24)}:${pad2(minutesParsed)}:${pad2(secondsParsed)}`;\n }\n\n const cappedHours = rawHours > 24 ? 24 : clamp(rawHours, 0, 24);\n return `${pad2(cappedHours)}:${pad2(minutesParsed)}:${pad2(secondsParsed)}`;\n },\n [format, minuteStep, showSeconds]\n );\n\n const parseTime = useCallback(\n (timeString: string) => {\n const [hours = '00', minutes = '00', seconds = '00'] = (timeString ?? '').split(':');\n const normalizedSeconds = showSeconds ? seconds : '00';\n return {\n hours: sanitize2(hours),\n minutes: sanitize2(minutes),\n seconds: sanitize2(normalizedSeconds),\n };\n },\n [showSeconds]\n );\n\n const [open, setOpen] = useState(false);\n const [time, setTime] = useState(() => parseTime(value));\n const [meridiem, setMeridiem] = useState<'AM' | 'PM'>(() => {\n const [h = '00'] = (value ?? '').split(':');\n const hour = toNumber(h) ?? 0;\n return hour >= 12 ? 'PM' : 'AM';\n });\n const debounceTimers = useRef<{ hours?: number; minutes?: number; seconds?: number }>({});\n\n useEffect(() => {\n if (open) {\n return;\n }\n setTime(parseTime(value));\n const [h = '00'] = (value ?? '').split(':');\n const hour = toNumber(h) ?? 0;\n setMeridiem(hour >= 12 ? 'PM' : 'AM');\n }, [open, parseTime, value]);\n\n const handleTimeChange = (type: 'hours' | 'minutes' | 'seconds', newValue: string) => {\n const nextValue = sanitize2(newValue);\n setTime((current) => ({ ...current, [type]: nextValue }));\n\n if (debounceTimers.current[type]) {\n window.clearTimeout(debounceTimers.current[type]);\n }\n debounceTimers.current[type] = window.setTimeout(() => {\n setTime((current) => {\n const next = { ...current } as typeof current;\n\n if (type === 'hours') {\n const raw = (next.hours ?? '').trim();\n if (raw.length === 1) {\n next.hours = `0${raw}`;\n }\n if ((next.hours ?? '').trim().length === 2) {\n next.hours = normalizeHoursSegment(next.hours, meridiem).hours;\n }\n }\n\n if (type === 'minutes') {\n const raw = (next.minutes ?? '').trim();\n if (raw.length === 1) {\n next.minutes = `0${raw}`;\n }\n if ((next.minutes ?? '').trim().length === 2) {\n next.minutes = normalizeMinutesSegment(next.minutes);\n }\n }\n\n if (type === 'seconds') {\n const raw = (next.seconds ?? '').trim();\n if (raw.length === 1) {\n next.seconds = `0${raw}`;\n }\n if ((next.seconds ?? '').trim().length === 2) {\n next.seconds = normalizeSecondsSegment(next.seconds);\n }\n }\n\n const normalized = normalizeTime(next.hours, next.minutes, next.seconds, meridiem);\n onChange?.(normalized);\n\n const [h = '00', m = '00', s = '00'] = normalized.split(':');\n if (format === '12') {\n next.hours = pad2(((toNumber(h) ?? 0) % 12) || 12);\n } else {\n next.hours = h;\n }\n next.minutes = m;\n next.seconds = s;\n\n return next;\n });\n }, 400);\n };\n\n const handleBlur = (type: 'hours' | 'minutes' | 'seconds') => {\n if (debounceTimers.current[type]) {\n window.clearTimeout(debounceTimers.current[type]);\n }\n\n setTime((current) => {\n const next = { ...current } as typeof current;\n next.hours = normalizeHoursSegment(next.hours, meridiem).hours;\n next.minutes = normalizeMinutesSegment(next.minutes);\n next.seconds = normalizeSecondsSegment(next.seconds);\n\n const normalized = normalizeTime(next.hours, next.minutes, next.seconds, meridiem);\n onChange?.(normalized);\n\n const [h = '00', m = '00', s = '00'] = normalized.split(':');\n return {\n hours: format === '12' ? sanitize2(String(((toNumber(h) ?? 0) % 12) || 12)) : h,\n minutes: m,\n seconds: s,\n };\n });\n };\n\n const displayValue = useMemo(() => {\n const normalized = normalizeTime(time.hours, time.minutes, time.seconds, meridiem);\n if (!showSeconds) {\n const [h = '00', m = '00'] = normalized.split(':');\n return `${h}:${m}`;\n }\n return normalized;\n }, [meridiem, normalizeTime, showSeconds, time.hours, time.minutes, time.seconds]);\n\n return (\n <Popover open={open} onOpenChange={setOpen}>\n <PopoverTrigger\n render={(triggerProps) => (\n <Button\n {...triggerProps}\n id={triggerId}\n variant=\"secondary\"\n buttonStyle=\"outline\"\n aria-expanded={open}\n aria-invalid={invalid}\n disabled={disabled}\n className={cn(\n 'time-picker--component',\n // Shared field-style chrome (matches Input).\n PICKER_TRIGGER_CHROME,\n 'w-full justify-between text-left',\n !value && '!text-muted-foreground',\n\t\t\t\t\t\t\t\t\t\t(triggerProps as { className?: string }).className,\n className\n )}\n >\n { }\n {(triggerProps as { children?: React.ReactNode }).children}\n </Button>\n )}\n >\n <div className=\"flex items-center gap-2\">\n <Clock className=\"h-4 w-4\" />\n <span>{displayValue || strings.placeholder}</span>\n </div>\n </PopoverTrigger>\n <PopoverContent className=\"w-auto p-4\" align=\"start\">\n <div className=\"space-y-4\">\n <Text tag=\"div\" weight=\"medium\" align=\"center\">{strings.dialogTitle}</Text>\n <div className=\"flex items-center gap-2\">\n <div className=\"text-center\">\n <Label size=\"xs\" className=\"text-muted-foreground\">{strings.hours}</Label>\n <Input\n inputMode=\"numeric\"\n value={time.hours}\n onChange={(e) => handleTimeChange('hours', e.target.value)}\n onFocus={(e) => e.currentTarget.select()}\n onClick={(e) => e.currentTarget.select()}\n onBlur={() => handleBlur('hours')}\n placeholder={strings.hoursPlaceholder}\n className=\"w-16 text-center\"\n />\n </div>\n <Text tag=\"div\" className=\"text-2xl\">:</Text>\n <div className=\"text-center\">\n <Label size=\"xs\" className=\"text-muted-foreground\">{strings.minutes}</Label>\n <Input\n inputMode=\"numeric\"\n value={time.minutes}\n onChange={(e) => handleTimeChange('minutes', e.target.value)}\n onFocus={(e) => e.currentTarget.select()}\n onClick={(e) => e.currentTarget.select()}\n onBlur={() => handleBlur('minutes')}\n placeholder={strings.minutesPlaceholder}\n className=\"w-16 text-center\"\n />\n </div>\n {!!showSeconds && <>\n <Text tag=\"div\" className=\"text-2xl\">:</Text>\n <div className=\"text-center\">\n <Label size=\"xs\" className=\"text-muted-foreground\">{strings.seconds}</Label>\n <Input\n inputMode=\"numeric\"\n value={time.seconds}\n onChange={(e) => handleTimeChange('seconds', e.target.value)}\n onFocus={(e) => e.currentTarget.select()}\n onClick={(e) => e.currentTarget.select()}\n onBlur={() => handleBlur('seconds')}\n placeholder={strings.secondsPlaceholder}\n className=\"w-16 text-center\"\n />\n </div>\n </>}\n\n {format === '12' && (\n <div className=\"flex items-end gap-1 pb-0.5\">\n <Button\n type=\"button\"\n variant={meridiem === 'AM' ? 'primary' : 'secondary'}\n buttonStyle={meridiem === 'AM' ? 'solid' : 'outline'}\n onClick={() => setMeridiem('AM')}\n >\n {strings.am}\n </Button>\n <Button\n type=\"button\"\n variant={meridiem === 'PM' ? 'primary' : 'secondary'}\n buttonStyle={meridiem === 'PM' ? 'solid' : 'outline'}\n onClick={() => setMeridiem('PM')}\n >\n {strings.pm}\n </Button>\n </div>\n )}\n </div>\n <div className=\"flex gap-2\">\n <Button\n variant=\"secondary\"\n buttonStyle=\"outline\"\n className=\"flex-1\"\n onClick={() => {\n const now = new Date();\n const newTime = {\n hours:\n format === '12'\n ? String((now.getHours() % 12) || 12)\n : String(now.getHours()),\n minutes: String(now.getMinutes()),\n seconds: '',\n };\n setTime(newTime);\n setMeridiem(now.getHours() >= 12 ? 'PM' : 'AM');\n onChange?.(\n normalizeTime(\n newTime.hours,\n newTime.minutes,\n newTime.seconds,\n now.getHours() >= 12 ? 'PM' : 'AM'\n )\n );\n }}\n >\n {strings.now}\n </Button>\n <Button\n variant=\"primary\"\n buttonStyle=\"solid\"\n className=\"flex-1\"\n onClick={() => {\n onChange?.(normalizeTime(time.hours, time.minutes, time.seconds, meridiem));\n setOpen(false);\n }}\n >\n {strings.done}\n </Button>\n </div>\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n\nTimePicker.displayName = 'TimePicker';\n","import { useState, useCallback } from 'react';\n\n// Validation rule definitions for files\ntype FileValidationRules = {\n maxSize?: number; // Max file size in bytes\n minSize?: number; // Min file size in bytes\n allowedExtensions?: string[]; // e.g. ['jpg', 'png', 'pdf']\n maxFiles?: number; // Max number of files allowed\n customValidator?: (file: File) => boolean | string; // Return true if valid, string message if invalid\n};\n\n// Extended file metadata returned by the hook\nexport interface FileMeta {\n id: string;\n file: File;\n name: string;\n size: number;\n formattedSize: string;\n type: string;\n extension: string;\n lastModified: number;\n}\n\n// Hook return types\ntype UseFilesReturn = {\n files: FileMeta[];\n addFiles: (incoming: FileList | File[]) => void;\n setFiles: (incoming: FileList | File[]) => void;\n remove: (id: string) => void;\n removeAll: () => void;\n formatSize: (bytes: number) => string;\n validationErrors: Record<string, string>;\n};\n\n// Utility to format bytes into human-readable strings\nconst defaultFormatSize = (bytes: number): string => {\n if (bytes === 0) return '0 Bytes';\n const k = 1024;\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n const value = bytes / Math.pow(k, i);\n return `${value.toFixed(2)} ${sizes[i]}`;\n};\n\n// Simple unique ID generator using timestamp and incremental counter\nlet idCounter = 0;\nconst generateId = (): string => {\n const ts = Date.now().toString(36);\n const count = (idCounter++).toString(36);\n return `${ts}-${count}`;\n};\n\nexport const useFiles = (\n rules?: FileValidationRules\n): UseFilesReturn => {\n const [files, setFilesState] = useState<FileMeta[]>([]);\n const [validationErrors, setValidationErrors] = useState<Record<string, string>>({});\n\n // Format size callback\n const formatSize = useCallback(defaultFormatSize, []);\n\n // Validate a single file, return error message or null\n const validateFile = useCallback((file: File): string | null => {\n if (rules?.minSize !== undefined && file.size < rules.minSize) {\n return `Size (${defaultFormatSize(file.size)}) is smaller than minimum (${defaultFormatSize(\n rules.minSize\n )}).`;\n }\n if (rules?.maxSize !== undefined && file.size > rules.maxSize) {\n return `Size (${defaultFormatSize(file.size)}) exceeds maximum (${defaultFormatSize(\n rules.maxSize\n )}).`;\n }\n const ext = file.name.split('.').pop()?.toLowerCase() || '';\n if (\n rules?.allowedExtensions &&\n !rules.allowedExtensions.map((e) => e.toLowerCase()).includes(ext)\n ) {\n return `Extension (.${ext}) is not allowed.`;\n }\n if (rules?.customValidator) {\n const result = rules.customValidator(file);\n if (result !== true) {\n return typeof result === 'string'\n ? result\n : 'Custom validation failed.';\n }\n }\n return null;\n }, [rules]);\n\n // Add or replace files core logic\n const processFiles = useCallback(\n (incoming: FileList | File[], replace = false) => {\n const incomingList: File[] = Array.isArray(incoming) ? incoming : Array.from(incoming);\n const newValidationErrors: Record<string, string> = {};\n\n setFilesState((prevFiles) => {\n const baseFiles = replace ? [] : [...prevFiles];\n\n incomingList.forEach((file) => {\n const ext = file.name.split('.').pop()?.toLowerCase() || '';\n\n const isDuplicate = baseFiles.some(\n (f) => f.name === file.name && f.size === file.size && f.extension === ext\n );\n if (isDuplicate) {\n return;\n }\n\n const error = validateFile(file);\n if (error) {\n newValidationErrors[file.name] = error;\n return;\n }\n\n if (rules?.maxFiles !== undefined && baseFiles.length + 1 > rules.maxFiles) {\n newValidationErrors[file.name] = `Cannot exceed max files limit of ${rules.maxFiles}.`;\n return;\n }\n\n const meta: FileMeta = {\n id: generateId(),\n file,\n name: file.name,\n size: file.size,\n formattedSize: defaultFormatSize(file.size),\n type: file.type,\n extension: ext,\n lastModified: file.lastModified,\n };\n baseFiles.push(meta);\n });\n\n return baseFiles;\n });\n\n setValidationErrors(newValidationErrors);\n },\n [rules?.maxFiles, validateFile]\n );\n\n const addFiles = useCallback(\n (incoming: FileList | File[]) => processFiles(incoming, false),\n [processFiles]\n );\n\n const setFiles = useCallback(\n (incoming: FileList | File[]) => processFiles(incoming, true),\n [processFiles]\n );\n\n const remove = useCallback(\n (id: string) => {\n setFilesState((prev) => prev.filter((f) => f.id !== id));\n },\n []\n );\n\n const removeAll = useCallback(() => {\n setFilesState((prev) => (prev.length === 0 ? prev : []));\n setValidationErrors({});\n }, []);\n\n return {\n files,\n addFiles,\n setFiles,\n remove,\n removeAll,\n formatSize,\n validationErrors,\n };\n};\n","/**\n * FileUpload — drag-and-drop file picker with single or multiple-file modes,\n * validation surfacing, and a file list preview. Uses `useFiles` for client-\n * side validation (size limits, accepted types) and emits raw `File`\n * instances upward via `onChange` / `onChangeFiles`. Strings overridable.\n */\nimport { File as FileIcon, Trash2Icon, UploadIcon } from 'lucide-react';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { Button } from '@/components/base/buttons';\nimport { Text } from '@/components/typography';\nimport { useFiles } from '@/hooks/use-files';\nimport { useStrings } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nexport interface FileUploadStrings {\n\tinstruction: string;\n\thelper: string;\n\tbrowse: string;\n\tremove: string;\n}\n\nexport const defaultFileUploadStrings: FileUploadStrings = {\n\tinstruction: 'Drag a file here or click to browse',\n\thelper: '',\n\tbrowse: 'Browse files',\n\tremove: 'Remove',\n};\n\nexport interface FileUploadProps {\n accept?: string;\n multiple?: boolean;\n value?: File | File[];\n onChange?: (file?: File) => void;\n onChangeFiles?: (files: File[]) => void;\n disabled?: boolean;\n invalid?: boolean;\n /** Override default English strings (instruction, helper, browse, remove). */\n strings?: Partial<FileUploadStrings>;\n /** @deprecated Use `strings.instruction` instead. */\n instructionText?: string;\n /** @deprecated Use `strings.browse` instead. */\n browseButtonText?: string;\n /** @deprecated Use `strings.remove` instead. */\n removeButtonText?: string;\n /** @deprecated Use `strings.helper` instead. */\n helperText?: string;\n}\n\nfunction FileUploadImpl(\n {\n accept,\n multiple = false,\n value,\n onChange,\n onChangeFiles,\n disabled,\n invalid,\n instructionText: customInstructionText,\n browseButtonText,\n removeButtonText,\n helperText,\n strings: stringsProp,\n }: FileUploadProps,\n forwardedRef: React.ForwardedRef<HTMLInputElement>,\n) {\n const strings = useStrings(defaultFileUploadStrings, {\n ...(customInstructionText !== undefined ? { instruction: customInstructionText } : {}),\n ...(helperText !== undefined ? { helper: helperText } : {}),\n ...(browseButtonText !== undefined ? { browse: browseButtonText } : {}),\n ...(removeButtonText !== undefined ? { remove: removeButtonText } : {}),\n ...stringsProp,\n });\n const { files: managedFiles, setFiles, remove, removeAll, validationErrors } = useFiles({\n maxFiles: multiple ? undefined : 1,\n });\n\n const inputRef = useRef<HTMLInputElement | null>(null);\n const [isDragging, setIsDragging] = useState(false);\n\n // Reflect controlled value into local state\n useEffect(() => {\n if (multiple) {\n if (Array.isArray(value) && value.length > 0) {\n setFiles(value);\n } else if (!value) {\n removeAll();\n }\n return;\n }\n\n if (value instanceof File) {\n setFiles([value]);\n } else if (!value) {\n removeAll();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, multiple]);\n\n const selectedSingle = managedFiles[0];\n const fileName = selectedSingle?.name ?? (value instanceof File ? value.name : '');\n const fileSize =\n selectedSingle?.formattedSize ??\n (value instanceof File ? `${Math.round((value.size / 1024) * 100) / 100} KB` : '');\n const hasMultipleFiles = multiple && managedFiles.length > 0;\n const hasSingleFile = !multiple && fileName.length > 0;\n\n const openFileDialog = useCallback(() => {\n if (!disabled) {\n inputRef.current?.click();\n }\n }, [disabled]);\n\n const handleFiles = useCallback(\n (incoming: FileList | File[]) => {\n if (!incoming || incoming.length === 0) {\n removeAll();\n if (multiple) {\n onChangeFiles?.([]);\n } else {\n onChange?.(undefined);\n }\n return;\n }\n\n const arrayFiles = Array.from(incoming as unknown as File[]);\n setFiles(incoming);\n\n if (multiple) {\n onChangeFiles?.(arrayFiles);\n } else {\n onChange?.(arrayFiles[0]);\n }\n },\n [multiple, onChange, onChangeFiles, removeAll, setFiles]\n );\n\n const handleInput = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const list = e.target.files;\n if (!list || list.length === 0) {\n if (inputRef.current) {\n inputRef.current.value = '';\n }\n return;\n }\n\n handleFiles(list);\n if (inputRef.current) {\n inputRef.current.value = '';\n }\n },\n [handleFiles]\n );\n\n const handleRemoveSingle = useCallback(() => {\n if (selectedSingle) {\n remove(selectedSingle.id);\n }\n if (inputRef.current) {\n inputRef.current.value = '';\n }\n onChange?.(undefined);\n }, [onChange, remove, selectedSingle]);\n\n const handleRemoveMultiple = useCallback(\n (id: string) => {\n const remaining = managedFiles.filter((item) => item.id !== id).map((item) => item.file);\n remove(id);\n onChangeFiles?.(remaining);\n if (inputRef.current) {\n inputRef.current.value = '';\n }\n },\n [managedFiles, onChangeFiles, remove]\n );\n\n const preventDefaults = useCallback((event: React.DragEvent) => {\n event.preventDefault();\n event.stopPropagation();\n }, []);\n\n const handleDragEnter = useCallback(\n (event: React.DragEvent) => {\n preventDefaults(event);\n if (!disabled) {\n setIsDragging(true);\n }\n },\n [disabled, preventDefaults]\n );\n\n const handleDragLeave = useCallback(\n (event: React.DragEvent) => {\n preventDefaults(event);\n setIsDragging(false);\n },\n [preventDefaults]\n );\n\n const handleDrop = useCallback(\n (event: React.DragEvent) => {\n preventDefaults(event);\n setIsDragging(false);\n\n if (disabled) {\n return;\n }\n\n const files = event.dataTransfer?.files;\n if (!files || files.length === 0) {\n return;\n }\n\n handleFiles(files);\n\n if (inputRef.current) {\n inputRef.current.value = '';\n }\n },\n [disabled, handleFiles, preventDefaults]\n );\n\n const dragStateClasses = useMemo(() => {\n const baseClasses =\n 'relative flex min-h-[180px] flex-col items-center justify-center gap-4 rounded-xl border border-dashed px-6 py-10 text-center transition-colors duration-150';\n const defaultBorder = invalid ? 'border-destructive' : 'border-muted-foreground/60';\n const bgClasses = 'bg-muted/40';\n const hoverClasses = 'hover:border-primary hover:bg-primary/10 hover:text-primary';\n const disabledClasses = disabled\n ? 'cursor-not-allowed opacity-50 hover:border-muted-foreground/60 hover:bg-muted/40 hover:text-muted-foreground'\n : '';\n const draggingClasses = !disabled && isDragging ? 'border-primary bg-primary/15 text-primary' : '';\n\n return cn(baseClasses, defaultBorder, bgClasses, hoverClasses, disabledClasses, draggingClasses);\n }, [disabled, isDragging, invalid]);\n\n return (\n <div className={cn('file-upload--component', 'space-y-3')}>\n <div\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n className={dragStateClasses}\n onClick={(event) => {\n if (event.defaultPrevented) {\n return;\n }\n\n openFileDialog();\n }}\n onKeyDown={(event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n openFileDialog();\n }\n }}\n onDragEnter={handleDragEnter}\n onDragOver={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n aria-disabled={disabled}\n aria-invalid={invalid || undefined}\n >\n <input\n ref={(node) => {\n inputRef.current = node;\n if (typeof forwardedRef === 'function') {\n forwardedRef(node);\n } else if (forwardedRef) {\n forwardedRef.current = node;\n }\n }}\n type=\"file\"\n className=\"hidden\"\n accept={accept}\n multiple={multiple}\n onChange={handleInput}\n onClick={(event) => {\n event.stopPropagation();\n }}\n disabled={disabled}\n />\n\n <div className=\"flex h-12 w-12 items-center justify-center rounded-full bg-primary/15 text-primary\">\n <UploadIcon className=\"h-6 w-6\" aria-hidden=\"true\" />\n </div>\n <div className=\"space-y-1\">\n <Text weight=\"medium\">{strings.instruction}</Text>\n {!!strings.helper && (\n <Text size=\"xs\" type=\"secondary\">{strings.helper}</Text>\n )}\n </div>\n <Button\n type=\"button\"\n variant=\"secondary\"\n buttonStyle=\"outline\"\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n openFileDialog();\n }}\n disabled={disabled}\n >\n {strings.browse}\n </Button>\n </div>\n\n {/* Multiple files list */}\n {!!hasMultipleFiles && (\n <div className=\"space-y-2\">\n {managedFiles.map((meta) => (\n <div key={meta.id} className=\"flex items-center gap-3 border rounded-md p-3 bg-card\">\n <div className=\"shrink-0 h-10 w-10 rounded bg-muted flex items-center justify-center\">\n <FileIcon className=\"h-5 w-5 text-muted-foreground\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <Text tag=\"div\" weight=\"medium\" className=\"truncate\" title={meta.name}>\n {meta.name}\n </Text>\n <Text tag=\"div\" size=\"xs\" type=\"secondary\">{meta.formattedSize}</Text>\n </div>\n <Button\n type=\"button\"\n variant=\"error\"\n buttonStyle=\"ghost\"\n size=\"xs\"\n icon={Trash2Icon}\n onClick={() => handleRemoveMultiple(meta.id)}\n >\n {strings.remove}\n </Button>\n </div>\n ))}\n </div>\n )}\n\n {/* Single file display */}\n {!!hasSingleFile && (\n <div className=\"flex items-center gap-3 border rounded-md p-3 bg-card\">\n <div className=\"shrink-0 h-10 w-10 rounded bg-muted flex items-center justify-center\">\n <FileIcon className=\"h-5 w-5 text-muted-foreground\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <Text tag=\"div\" weight=\"medium\" className=\"truncate\" title={fileName}>\n {fileName}\n </Text>\n <Text tag=\"div\" size=\"xs\" type=\"secondary\">{fileSize}</Text>\n </div>\n <Button\n type=\"button\"\n variant=\"error\"\n buttonStyle=\"ghost\"\n size=\"xs\"\n icon={Trash2Icon}\n onClick={handleRemoveSingle}\n >\n {strings.remove}\n </Button>\n </div>\n )}\n\n {/* Validation errors — rendered as semantic alert rows so they\n read clearly under the dropzone instead of as a bullet list. */}\n {Object.keys(validationErrors).length > 0 && (\n <ul className=\"space-y-1.5\">\n {Object.entries(validationErrors).map(([name, err]) => (\n <li\n key={name}\n role=\"alert\"\n className=\"flex items-start gap-2 rounded-md border border-destructive/30 bg-destructive/5 px-3 py-2\"\n >\n <span aria-hidden=\"true\" className=\"mt-0.5 inline-flex size-4 shrink-0 items-center justify-center rounded-full bg-destructive/15 text-destructive\">\n <span className=\"size-1.5 rounded-full bg-destructive\" />\n </span>\n <div className=\"min-w-0 flex-1\">\n <Text size=\"xs\" weight=\"medium\" className=\"truncate text-destructive\">\n {name}\n </Text>\n <Text size=\"xs\" type=\"secondary\" className=\"text-destructive/80\">\n {err}\n </Text>\n </div>\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n}\n\nconst FileUpload = React.forwardRef<HTMLInputElement, FileUploadProps>(FileUploadImpl);\nFileUpload.displayName = 'FileUpload';\n\nexport { FileUpload };\n","/**\n * ImageUpload — preview-first image picker. Drops in a file → renders an img\n * preview with a configurable aspect ratio and fit mode. Layout can be\n * stacked (preview on top, controls below) or inline (preview alongside\n * controls). Reflects controlled `value` and reports change via `onChange`.\n * Strings overridable for i18n.\n */\nimport { ImageIcon, Trash2 } from 'lucide-react';\nimport React, { useEffect, useId, useMemo, useRef, useState, useCallback } from 'react';\nimport { Button } from '@/components/base/buttons';\nimport { Text } from '@/components/typography';\nimport { useFiles } from '@/hooks/use-files';\nimport { useStrings } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nconst MAX_FILE_SIZE_MB = 2;\n\ntype ImageUploadAspectRatio = 'square' | 'standard' | 'widescreen' | 'portrait';\ntype ImageUploadLayout = 'stacked' | 'inline';\ntype ImageUploadFit = 'cover' | 'contain';\n\nconst ASPECT_RATIO_CLASSES: Record<ImageUploadAspectRatio, string> = {\n square: 'aspect-square',\n standard: 'aspect-[4/3]',\n widescreen: 'aspect-[16/9]',\n portrait: 'aspect-[9/16]',\n};\n\nexport interface ImageUploadStrings {\n select: string;\n change: string;\n remove: string;\n noSelection: string;\n keepCurrent: string;\n /** Template for the supports-text. `{ext}` is the comma-separated allowed\n * extensions; `{size}` is the max-size MB number. */\n supportsTemplate: string;\n /** Summary line when `multiple` is set and more than one file is selected.\n * Receives the count of files beyond the displayed one — e.g. `count=3`\n * for \"+ 3 more files\". Override to swap the English plural-`s` rule\n * (`'+ ' + count + ' more file' + (count === 1 ? '' : 's')`) for the\n * consumer locale. */\n moreFiles: (count: number) => string;\n}\n\nexport const defaultImageUploadStrings: ImageUploadStrings = {\n select: 'Select image',\n change: 'Change image',\n remove: 'Remove',\n noSelection: 'No file selected yet.',\n keepCurrent: 'Current image stays until you upload a new one.',\n supportsTemplate: 'Supports {ext} files up to {size} MB.',\n moreFiles: (count) => `+ ${count} more file${count === 1 ? '' : 's'}`,\n};\n\nexport interface ImageUploadProps {\n accept?: string;\n multiple?: boolean;\n value?: File;\n onChange?: (file?: File) => void;\n disabled?: boolean;\n defaultPreviewUrl?: string;\n aspectRatio?: ImageUploadAspectRatio;\n fit?: ImageUploadFit;\n maxWidth?: number | string;\n layout?: ImageUploadLayout;\n invalid?: boolean;\n /** Override default strings (button labels, helper text, supports template). */\n strings?: Partial<ImageUploadStrings>;\n /** @deprecated Use `strings.select` instead. */\n selectButtonText?: string;\n /** @deprecated Use `strings.change` instead. */\n changeButtonText?: string;\n /** @deprecated Use `strings.remove` instead. */\n removeButtonText?: string;\n}\n\nfunction ImageUploadImpl(\n {\n accept = '.png,.jpg,.jpeg,.gif,.svg',\n multiple = false,\n value,\n onChange,\n disabled,\n defaultPreviewUrl,\n aspectRatio = 'square',\n fit = 'cover',\n maxWidth,\n layout = 'stacked',\n invalid,\n selectButtonText,\n changeButtonText,\n removeButtonText,\n strings: stringsProp,\n}: ImageUploadProps,\n forwardedRef: React.ForwardedRef<HTMLInputElement>,\n) {\n const strings = useStrings(defaultImageUploadStrings, {\n ...(selectButtonText !== undefined ? { select: selectButtonText } : {}),\n ...(changeButtonText !== undefined ? { change: changeButtonText } : {}),\n ...(removeButtonText !== undefined ? { remove: removeButtonText } : {}),\n ...stringsProp,\n });\n const inputId = useId();\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n const allowedExtensions = useMemo(() => {\n if (!accept) {\n return ['png', 'jpg', 'jpeg', 'gif', 'svg'];\n }\n\n const parsed = accept\n .split(',')\n .map((item) => item.trim())\n .map((item) => {\n if (!item) return null;\n if (item.startsWith('.')) {\n return item.slice(1).toLowerCase();\n }\n\n if (item.includes('/')) {\n const subtype = item.split('/')[1] ?? '';\n if (subtype === '*' || subtype.length === 0) {\n return null;\n }\n return subtype.replace(/\\+.*/, '').toLowerCase();\n }\n\n return item.toLowerCase();\n })\n .filter((ext): ext is string => Boolean(ext));\n\n if (parsed.length === 0) {\n return undefined;\n }\n\n return Array.from(new Set(parsed));\n }, [accept]);\n\n const fileRules = useMemo(\n () => ({\n maxFiles: multiple ? undefined : 1,\n allowedExtensions,\n }),\n [multiple, allowedExtensions]\n );\n\n const { files, setFiles, remove, removeAll, validationErrors } = useFiles(fileRules);\n\n // Reflect controlled value into local preview if provided\n useEffect(() => {\n if (value) {\n setFiles([value]);\n } else {\n removeAll();\n if (inputRef.current) {\n inputRef.current.value = '';\n }\n }\n }, [value, setFiles, removeAll]);\n\n const selected = files[0];\n\tconst selectOrChangeButtonLabel = selected ? strings.change : strings.select;\n const [filePreviewUrl, setFilePreviewUrl] = useState<string | undefined>(undefined);\n\n const acceptedExtensionsLabel = useMemo(() => {\n if (!allowedExtensions || allowedExtensions.length === 0) {\n return null;\n }\n return allowedExtensions.map((ext) => ext.toUpperCase()).join(', ');\n }, [allowedExtensions]);\n\n useEffect(() => {\n const file = selected?.file ?? value;\n if (!file) {\n setFilePreviewUrl(undefined);\n return;\n }\n const url = URL.createObjectURL(file);\n setFilePreviewUrl(url);\n return () => URL.revokeObjectURL(url);\n }, [selected, value]);\n\n const previewUrl = filePreviewUrl ?? defaultPreviewUrl;\n const hasPreview = Boolean(previewUrl);\n const aspectClass = ASPECT_RATIO_CLASSES[aspectRatio] ?? ASPECT_RATIO_CLASSES.square;\n const imgFitClass = fit === 'contain' ? 'object-contain p-3' : 'object-cover';\n // Default max-width caps the preview at a sensible thumbnail size — without\n // this, an `aspect-square` preview inside a wide form column becomes a\n // huge square (`w-full` × 1:1 ratio = container width tall). Consumers\n // can override via the `maxWidth` prop.\n const computedMaxWidth = maxWidth ? (typeof maxWidth === 'number' ? `${maxWidth}px` : maxWidth) : '240px';\n const wrapperStyle = layout === 'inline' ? undefined : { maxWidth: computedMaxWidth };\n const inlinePreviewStyle =\n layout === 'inline'\n ? {\n maxWidth: maxWidth ? computedMaxWidth : '185px',\n width: '100%',\n }\n : undefined;\n\n const handleInput = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const list = e.target.files;\n if (!list || list.length === 0) {\n removeAll();\n onChange?.(undefined);\n if (inputRef.current) {\n inputRef.current.value = '';\n }\n return;\n }\n setFiles(list);\n onChange?.(list[0]);\n },\n [removeAll, setFiles, onChange]\n );\n\n const triggerFileDialog = useCallback(() => {\n if (disabled) return;\n inputRef.current?.click();\n }, [disabled]);\n\n const handleRemove = useCallback(() => {\n if (selected) {\n remove(selected.id);\n }\n onChange?.(undefined);\n if (inputRef.current) {\n inputRef.current.value = '';\n }\n }, [selected, remove, onChange]);\n\n return (\n <div className={cn('image-upload--component', 'space-y-3')} style={wrapperStyle}>\n <input\n ref={(node) => { inputRef.current = node; if (typeof forwardedRef === \"function\") forwardedRef(node); else if (forwardedRef) forwardedRef.current = node; }}\n id={inputId}\n type=\"file\"\n className=\"sr-only\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n onChange={handleInput}\n />\n\n <div className={cn(layout === 'inline' ? 'flex items-start gap-4' : 'space-y-3')}>\n <div\n className={cn(\n 'relative overflow-hidden rounded-md border transition-colors',\n layout === 'inline' ? 'flex-shrink-0 w-full' : 'w-full',\n aspectClass,\n hasPreview\n ? 'border-border bg-muted/20'\n : cn(\n 'border-dashed bg-background text-muted-foreground dark:bg-foreground',\n invalid ? 'border-destructive' : 'border-muted-foreground/60'\n )\n )}\n style={inlinePreviewStyle}\n >\n {hasPreview && previewUrl ? (\n <img\n src={previewUrl}\n alt={selected?.name || 'Selected image'}\n className={cn('absolute inset-0 h-full w-full', imgFitClass)}\n />\n ) : (\n <div className=\"absolute inset-0 flex items-center justify-center\">\n <ImageIcon aria-hidden className=\"h-8 w-8\" />\n </div>\n )}\n </div>\n\n <div className={cn('space-y-2', layout === 'inline' && 'flex-1 min-w-0')}>\n <div className=\"flex flex-wrap items-center gap-2\">\n\t <Button\n\t type=\"button\"\n\t variant=\"secondary\"\n\t buttonStyle=\"outline\"\n\t onClick={triggerFileDialog}\n\t disabled={disabled}\n\t >\n\t {selectOrChangeButtonLabel}\n\t </Button>\n {!selected && !!hasPreview && (\n <Text size=\"xs\" type=\"secondary\">{strings.keepCurrent}</Text>\n )}\n </div>\n\n {!!acceptedExtensionsLabel && (\n <Text size=\"xs\" type=\"secondary\">\n {strings.supportsTemplate\n .replace('{ext}', acceptedExtensionsLabel)\n .replace('{size}', String(MAX_FILE_SIZE_MB))}\n </Text>\n )}\n\n {!!selected && (\n <div className=\"space-y-1\">\n <Text weight=\"medium\" title={selected.name} className=\"truncate\">\n {selected.name}\n </Text>\n <Text size=\"xs\" type=\"secondary\">\n {selected.formattedSize}\n </Text>\n {!!multiple && files.length > 1 && (\n <Text size=\"xs\" type=\"secondary\">\n {strings.moreFiles(files.length - 1)}\n </Text>\n )}\n <Button\n type=\"button\"\n variant=\"error\"\n buttonStyle=\"ghost\"\n size=\"xs\"\n icon={Trash2}\n onClick={handleRemove}\n >\n {strings.remove}\n </Button>\n </div>\n )}\n\n {!selected && !hasPreview && (\n <Text size=\"xs\" type=\"secondary\">{strings.noSelection}</Text>\n )}\n </div>\n </div>\n\n {/* Validation errors */}\n {Object.keys(validationErrors).length > 0 && (\n <div className=\"space-y-1\">\n {Object.entries(validationErrors).map(([name, err]) => (\n <Text key={name} size=\"xs\" type=\"error\">\n {name}: {err}\n </Text>\n ))}\n </div>\n )}\n </div>\n );\n}\n\nconst ImageUpload = React.forwardRef<HTMLInputElement, ImageUploadProps>(ImageUploadImpl);\nImageUpload.displayName = 'ImageUpload';\n\nexport { ImageUpload };\n","import * as React from 'react';\n/**\n * Dropzone — bare drag-and-drop chrome with click-to-browse fallback.\n *\n * Use this primitive directly when FileUpload / ImageUpload / MediaGallery\n * shapes don't fit (e.g. drag-to-attach into a chat composer, drag-into-grid\n * cell). Validation, file-state management, and previews are NOT included —\n * this component just surfaces a clean drop target and emits raw\n * `File` instances to the consumer via `onDrop`.\n *\n * Three sizes drive the minimum drop area, icon size, and instruction text\n * scale; `compact` is the smallest, `lg` matches a hero file picker.\n *\n * Strings overridable for i18n.\n */\nimport { useCallback, useRef, useState} from 'react';\nimport type { ReactNode, KeyboardEvent, MouseEvent, DragEvent, ChangeEvent, ForwardedRef} from 'react';\nimport { UploadCloud } from 'lucide-react';\nimport { Text } from '@/components/typography';\nimport { useStrings } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nexport type DropzoneSize = 'compact' | 'base' | 'lg';\n\nexport interface DropzoneStrings {\n\tinstruction: string;\n\thelper: string;\n\tdragOver: string;\n}\n\nexport const defaultDropzoneStrings: DropzoneStrings = {\n\tinstruction: 'Drag files here or click to browse',\n\thelper: '',\n\tdragOver: 'Release to upload',\n};\n\nexport interface DropzoneProps {\n\tonDrop: (files: File[]) => void;\n\taccept?: string;\n\tmultiple?: boolean;\n\tdisabled?: boolean;\n\tinvalid?: boolean;\n\tsize?: DropzoneSize;\n\ticon?: ReactNode;\n\tclassName?: string;\n\t/** Optional content rendered below the instruction (e.g. a \"Browse\" button). */\n\tchildren?: ReactNode;\n\tstrings?: Partial<DropzoneStrings>;\n}\n\nconst SIZE_CHROME: Record<DropzoneSize, { padding: string; minH: string; iconBox: string; iconSize: string }> = {\n\tcompact: { padding: 'px-4 py-4', minH: 'min-h-[112px]', iconBox: 'h-9 w-9', iconSize: 'size-4' },\n\tbase: { padding: 'px-6 py-8', minH: 'min-h-[180px]', iconBox: 'h-12 w-12', iconSize: 'size-6' },\n\tlg: { padding: 'px-8 py-12', minH: 'min-h-[260px]', iconBox: 'h-14 w-14', iconSize: 'size-7' },\n};\n\nfunction DropzoneImpl(\n {\n\tonDrop,\n\taccept,\n\tmultiple = false,\n\tdisabled = false,\n\tinvalid = false,\n\tsize = 'base',\n\ticon,\n\tclassName,\n\tchildren,\n\tstrings: stringsProp,\n}: DropzoneProps,\n forwardedRef: ForwardedRef<HTMLInputElement>,\n) {\n\tconst strings = useStrings(defaultDropzoneStrings, stringsProp);\n\tconst inputRef = useRef<HTMLInputElement | null>(null);\n\tconst [isDragging, setIsDragging] = useState(false);\n\tconst chrome = SIZE_CHROME[size];\n\n\tconst openPicker = useCallback(() => {\n\t\tif (!disabled) inputRef.current?.click();\n\t}, [disabled]);\n\n\tconst handleInput = useCallback(\n\t\t(e: ChangeEvent<HTMLInputElement>) => {\n\t\t\tconst list = e.target.files;\n\t\t\tif (!list || list.length === 0) return;\n\t\t\tonDrop(Array.from(list));\n\t\t\tif (inputRef.current) inputRef.current.value = '';\n\t\t},\n\t\t[onDrop],\n\t);\n\n\tconst handleDragEnter = useCallback(\n\t\t(e: DragEvent<HTMLDivElement>) => {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\tif (!disabled) setIsDragging(true);\n\t\t},\n\t\t[disabled],\n\t);\n\n\tconst handleDragLeave = useCallback((e: DragEvent<HTMLDivElement>) => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\tsetIsDragging(false);\n\t}, []);\n\n\tconst handleDrop = useCallback(\n\t\t(e: DragEvent<HTMLDivElement>) => {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\tsetIsDragging(false);\n\t\t\tif (disabled) return;\n\t\t\tconst list = e.dataTransfer?.files;\n\t\t\tif (!list || list.length === 0) return;\n\t\t\tonDrop(Array.from(list));\n\t\t},\n\t\t[disabled, onDrop],\n\t);\n\n\tconst handleKey = (e: KeyboardEvent<HTMLDivElement>) => {\n\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\te.preventDefault();\n\t\t\topenPicker();\n\t\t}\n\t};\n\n\tconst handleClick = (e: MouseEvent<HTMLDivElement>) => {\n\t\tif (e.defaultPrevented) return;\n\t\topenPicker();\n\t};\n\n\treturn (\n\t\t<div\n\t\t\trole=\"button\"\n\t\t\ttabIndex={disabled ? -1 : 0}\n\t\t\taria-disabled={disabled || undefined}\n\t\t\taria-invalid={invalid || undefined}\n\t\t\tonClick={handleClick}\n\t\t\tonKeyDown={handleKey}\n\t\t\tonDragEnter={handleDragEnter}\n\t\t\tonDragOver={handleDragEnter}\n\t\t\tonDragLeave={handleDragLeave}\n\t\t\tonDrop={handleDrop}\n\t\t\tclassName={cn('dropzone--component', \n\t\t\t\t'relative flex flex-col items-center justify-center gap-3 rounded-xl border border-dashed text-center transition-colors duration-150',\n\t\t\t\tchrome.minH,\n\t\t\t\tchrome.padding,\n\t\t\t\tinvalid ? 'border-destructive' : 'border-muted-foreground/40',\n\t\t\t\t'bg-muted/30 hover:border-primary hover:bg-primary/5 hover:text-primary',\n\t\t\t\tdisabled && 'cursor-not-allowed opacity-50 hover:border-muted-foreground/40 hover:bg-muted/30 hover:text-muted-foreground',\n\t\t\t\t!disabled && isDragging && 'border-primary bg-primary/10 text-primary',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<input\n\t\t\t\tref={(node) => { inputRef.current = node; if (typeof forwardedRef === \"function\") forwardedRef(node); else if (forwardedRef) forwardedRef.current = node; }}\n\t\t\t\ttype=\"file\"\n\t\t\t\tclassName=\"hidden\"\n\t\t\t\taccept={accept}\n\t\t\t\tmultiple={multiple}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tonChange={handleInput}\n\t\t\t\tonClick={(e) => e.stopPropagation()}\n\t\t\t/>\n\n\t\t\t<span\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'inline-flex items-center justify-center rounded-full bg-primary/10 text-primary',\n\t\t\t\t\tchrome.iconBox,\n\t\t\t\t)}\n\t\t\t\taria-hidden=\"true\"\n\t\t\t>\n\t\t\t\t{icon ?? <UploadCloud className={chrome.iconSize} />}\n\t\t\t</span>\n\n\t\t\t<div className=\"space-y-1\">\n\t\t\t\t<Text size={size === 'compact' ? 'xs' : 'sm'} weight=\"medium\">\n\t\t\t\t\t{isDragging ? strings.dragOver : strings.instruction}\n\t\t\t\t</Text>\n\t\t\t\t{!!strings.helper && (\n\t\t\t\t\t<Text size=\"xs\" type=\"secondary\">\n\t\t\t\t\t\t{strings.helper}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{!!children && (\n\t\t\t\t<div onClick={(e) => e.stopPropagation()} onKeyDown={(e) => e.stopPropagation()}>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nconst Dropzone = React.forwardRef<HTMLInputElement, DropzoneProps>(DropzoneImpl);\nDropzone.displayName = 'Dropzone';\n\nexport { Dropzone };\n","import * as React from 'react';\n/**\n * AvatarUpload — round avatar picker. Click or drag a file onto the circle to\n * upload; an X button (visible on hover) clears the selection. Honours\n * controlled `value` (a `File`), and reflects an existing `defaultPreviewUrl`\n * when no file is staged. Use for profile photos / org logos where the\n * preview is small and the only meaningful interaction is replace + clear.\n *\n * Pair with a separate \"remove from server\" handler if your data model\n * needs to delete a previously persisted image (this component only manages\n * the local staged file).\n *\n * Strings overridable for i18n.\n */\nimport { useCallback, useEffect, useId, useMemo, useRef, useState} from 'react';\nimport type { ChangeEvent, DragEvent, KeyboardEvent, ForwardedRef} from 'react';\nimport { Camera, X } from 'lucide-react';\nimport { Text } from '@/components/typography';\nimport { useFiles } from '@/hooks/use-files';\nimport { useStrings } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nexport type AvatarUploadSize = 'sm' | 'base' | 'lg';\n\nexport interface AvatarUploadStrings {\n\tchange: string;\n\tremove: string;\n\thint: string;\n\tdragOver: string;\n}\n\nexport const defaultAvatarUploadStrings: AvatarUploadStrings = {\n\tchange: 'Change photo',\n\tremove: 'Remove photo',\n\thint: 'Click or drop an image',\n\tdragOver: 'Drop image to upload',\n};\n\nexport interface AvatarUploadProps {\n\tvalue?: File;\n\tonChange?: (file?: File) => void;\n\tdefaultPreviewUrl?: string;\n\taccept?: string;\n\tdisabled?: boolean;\n\tinvalid?: boolean;\n\tsize?: AvatarUploadSize;\n\tclassName?: string;\n\tstrings?: Partial<AvatarUploadStrings>;\n\t/** Initials shown when no preview is available. */\n\tinitials?: string;\n}\n\nconst SIZE_PX: Record<AvatarUploadSize, { box: string; icon: string; remove: string }> = {\n\tsm: { box: 'size-16', icon: 'size-4', remove: 'size-5' },\n\tbase: { box: 'size-24', icon: 'size-5', remove: 'size-6' },\n\tlg: { box: 'size-32', icon: 'size-6', remove: 'size-7' },\n};\n\nfunction AvatarUploadImpl(\n {\n\tvalue,\n\tonChange,\n\tdefaultPreviewUrl,\n\taccept = '.png,.jpg,.jpeg,.gif,.webp',\n\tdisabled = false,\n\tinvalid = false,\n\tsize = 'base',\n\tclassName,\n\tstrings: stringsProp,\n\tinitials,\n}: AvatarUploadProps,\n forwardedRef: ForwardedRef<HTMLInputElement>,\n) {\n\tconst strings = useStrings(defaultAvatarUploadStrings, stringsProp);\n\tconst inputId = useId();\n\tconst inputRef = useRef<HTMLInputElement | null>(null);\n\tconst [isDragging, setIsDragging] = useState(false);\n\tconst sizes = SIZE_PX[size];\n\n\tconst { files, setFiles, removeAll } = useFiles({\n\t\tmaxFiles: 1,\n\t\tallowedExtensions: useMemo(\n\t\t\t() =>\n\t\t\t\taccept\n\t\t\t\t\t.split(',')\n\t\t\t\t\t.map((s) => s.trim().replace(/^\\./, '').toLowerCase())\n\t\t\t\t\t.filter(Boolean),\n\t\t\t[accept],\n\t\t),\n\t});\n\n\tuseEffect(() => {\n\t\tif (value) setFiles([value]);\n\t\telse removeAll();\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [value]);\n\n\tconst selected = files[0];\n\tconst [filePreviewUrl, setFilePreviewUrl] = useState<string | undefined>(undefined);\n\n\tuseEffect(() => {\n\t\tconst file = selected?.file ?? value;\n\t\tif (!file) {\n\t\t\tsetFilePreviewUrl(undefined);\n\t\t\treturn;\n\t\t}\n\t\tconst url = URL.createObjectURL(file);\n\t\tsetFilePreviewUrl(url);\n\t\treturn () => URL.revokeObjectURL(url);\n\t}, [selected, value]);\n\n\tconst previewUrl = filePreviewUrl ?? defaultPreviewUrl;\n\tconst hasPreview = Boolean(previewUrl);\n\n\tconst handleInput = useCallback(\n\t\t(e: ChangeEvent<HTMLInputElement>) => {\n\t\t\tconst list = e.target.files;\n\t\t\tif (!list || list.length === 0) return;\n\t\t\tsetFiles(list);\n\t\t\tonChange?.(list[0]);\n\t\t\tif (inputRef.current) inputRef.current.value = '';\n\t\t},\n\t\t[onChange, setFiles],\n\t);\n\n\tconst trigger = useCallback(() => {\n\t\tif (!disabled) inputRef.current?.click();\n\t}, [disabled]);\n\n\tconst handleRemove = useCallback(() => {\n\t\tremoveAll();\n\t\tonChange?.(undefined);\n\t\tif (inputRef.current) inputRef.current.value = '';\n\t}, [onChange, removeAll]);\n\n\tconst handleKey = (e: KeyboardEvent<HTMLDivElement>) => {\n\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\te.preventDefault();\n\t\t\ttrigger();\n\t\t}\n\t};\n\n\tconst handleDragEnter = useCallback(\n\t\t(e: DragEvent<HTMLDivElement>) => {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\tif (!disabled) setIsDragging(true);\n\t\t},\n\t\t[disabled],\n\t);\n\n\tconst handleDragLeave = useCallback((e: DragEvent<HTMLDivElement>) => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\tsetIsDragging(false);\n\t}, []);\n\n\tconst handleDrop = useCallback(\n\t\t(e: DragEvent<HTMLDivElement>) => {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\tsetIsDragging(false);\n\t\t\tif (disabled) return;\n\t\t\tconst list = e.dataTransfer?.files;\n\t\t\tif (!list || list.length === 0) return;\n\t\t\tsetFiles(list);\n\t\t\tonChange?.(list[0]);\n\t\t},\n\t\t[disabled, onChange, setFiles],\n\t);\n\n\treturn (\n\t\t<div className={cn('avatar-upload--component', 'inline-flex flex-col items-center gap-2', className)}>\n\t\t\t<div\n\t\t\t\trole=\"button\"\n\t\t\t\ttabIndex={disabled ? -1 : 0}\n\t\t\t\taria-disabled={disabled || undefined}\n\t\t\t\taria-invalid={invalid || undefined}\n\t\t\t\tonClick={trigger}\n\t\t\t\tonKeyDown={handleKey}\n\t\t\t\tonDragEnter={handleDragEnter}\n\t\t\t\tonDragOver={handleDragEnter}\n\t\t\t\tonDragLeave={handleDragLeave}\n\t\t\t\tonDrop={handleDrop}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'group relative flex shrink-0 items-center justify-center overflow-hidden rounded-full',\n\t\t\t\t\t'border border-dashed transition-colors duration-150 outline-none',\n\t\t\t\t\t'focus-visible:ring-2 focus-visible:ring-ring/50',\n\t\t\t\t\thasPreview\n\t\t\t\t\t\t? 'border-border/60 bg-muted/20'\n\t\t\t\t\t\t: cn(\n\t\t\t\t\t\t\t\t'bg-muted/30 hover:border-primary hover:bg-primary/5',\n\t\t\t\t\t\t\t\tinvalid ? 'border-destructive' : 'border-muted-foreground/40',\n\t\t\t\t\t\t\t),\n\t\t\t\t\tdisabled && 'cursor-not-allowed opacity-50',\n\t\t\t\t\t!disabled && isDragging && 'border-primary bg-primary/10',\n\t\t\t\t\tsizes.box,\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<input\n\t\t\t\t\tid={inputId}\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=\"file\"\n\t\t\t\t\tclassName=\"sr-only\"\n\t\t\t\t\taccept={accept}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tonChange={handleInput}\n\t\t\t\t/>\n\n\t\t\t\t{hasPreview && previewUrl ? (\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc={previewUrl}\n\t\t\t\t\t\talt={strings.change}\n\t\t\t\t\t\tclassName=\"absolute inset-0 size-full object-cover\"\n\t\t\t\t\t/>\n\t\t\t\t) : initials ? (\n\t\t\t\t\t<Text size={size === 'lg' ? 'lg' : 'base'} weight=\"bold\" className=\"leading-none\">\n\t\t\t\t\t\t{initials}\n\t\t\t\t\t</Text>\n\t\t\t\t) : (\n\t\t\t\t\t<Camera className={cn(sizes.icon, 'text-muted-foreground')} aria-hidden=\"true\" />\n\t\t\t\t)}\n\n\t\t\t\t{/* Hover overlay */}\n\t\t\t\t{!disabled && hasPreview && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"pointer-events-none absolute inset-0 hidden items-center justify-center bg-black/40 text-white group-hover:flex\"\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Camera className={sizes.icon} />\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{/* Remove pill */}\n\t\t\t\t{!disabled && hasPreview && (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\taria-label={strings.remove}\n\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\thandleRemove();\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'absolute right-0.5 top-0.5 inline-flex items-center justify-center rounded-full bg-card text-foreground shadow ring-1 ring-border',\n\t\t\t\t\t\t\t'opacity-0 transition-opacity group-hover:opacity-100 focus-visible:opacity-100',\n\t\t\t\t\t\t\tsizes.remove,\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<X className=\"size-3\" />\n\t\t\t\t\t</button>\n\t\t\t\t)}\n\n\t\t\t\t{!disabled && !hasPreview && isDragging && (\n\t\t\t\t\t<Text size=\"xxs\" weight=\"medium\" className=\"absolute inset-x-0 bottom-1.5 text-center text-primary\">\n\t\t\t\t\t\t{strings.dragOver}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{!hasPreview && (\n\t\t\t\t<Text size=\"xs\" type=\"secondary\">\n\t\t\t\t\t{strings.hint}\n\t\t\t\t</Text>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nconst AvatarUpload = React.forwardRef<HTMLInputElement, AvatarUploadProps>(AvatarUploadImpl);\nAvatarUpload.displayName = 'AvatarUpload';\n\nexport { AvatarUpload };\n","/**\n * MediaGallery — multi-image upload + sortable thumbnail grid. Drop a batch\n * of images onto the dashed top tile or click to open the picker; tiles\n * appear inline and can be reordered via drag (`@dnd-kit/sortable`). The\n * first tile is implicitly the \"cover\" and is marked with a small chip;\n * each tile has a hover-revealed remove button.\n *\n * Use for product galleries, mood boards, or any collection where the order\n * matters and the consumer needs the final `File[]` (and the order of those\n * files) on submit.\n *\n * Strings overridable for i18n.\n */\nimport { useCallback, useEffect, useId, useMemo, useRef, useState } from 'react';\nimport type { ChangeEvent, DragEvent } from 'react';\nimport {\n\tDndContext,\n\ttype DragEndEvent,\n\tPointerSensor,\n\tuseSensor,\n\tuseSensors,\n} from '@dnd-kit/core';\nimport {\n\tSortableContext,\n\trectSortingStrategy,\n\tuseSortable,\n} from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { ImagePlus, X } from 'lucide-react';\nimport { Text } from '@/components/typography';\nimport { useStrings } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nexport interface MediaGalleryStrings {\n\taddInstruction: string;\n\thelper: string;\n\tdragOver: string;\n\tcover: string;\n\tremoveAria: string;\n\tmaxReached: string;\n}\n\nexport const defaultMediaGalleryStrings: MediaGalleryStrings = {\n\taddInstruction: 'Drop or click to add images',\n\thelper: '',\n\tdragOver: 'Release to upload',\n\tcover: 'Cover',\n\tremoveAria: 'Remove image',\n\tmaxReached: 'You have reached the maximum number of images.',\n};\n\nexport interface MediaGalleryProps {\n\tvalue?: File[];\n\tonChange?: (files: File[]) => void;\n\taccept?: string;\n\tmaxFiles?: number;\n\tdisabled?: boolean;\n\tinvalid?: boolean;\n\tclassName?: string;\n\ttileClassName?: string;\n\tstrings?: Partial<MediaGalleryStrings>;\n}\n\ninterface InternalItem {\n\tid: string;\n\tfile: File;\n\tpreviewUrl: string;\n}\n\nlet counter = 0;\nconst makeId = () => `media-${Date.now().toString(36)}-${(counter++).toString(36)}`;\n\nfunction SortableTile({\n\titem,\n\tisFirst,\n\tdisabled,\n\tonRemove,\n\tstrings,\n\ttileClassName,\n}: {\n\titem: InternalItem;\n\tisFirst: boolean;\n\tdisabled: boolean;\n\tonRemove: () => void;\n\tstrings: MediaGalleryStrings;\n\ttileClassName?: string;\n}) {\n\tconst { attributes, listeners, setNodeRef, transform, transition, isDragging } =\n\t\tuseSortable({ id: item.id, disabled });\n\tconst style = {\n\t\ttransform: CSS.Transform.toString(transform),\n\t\ttransition,\n\t} as React.CSSProperties;\n\n\treturn (\n\t\t<div\n\t\t\tref={setNodeRef}\n\t\t\tstyle={style}\n\t\t\tclassName={cn('media-gallery--component', \n\t\t\t\t'group relative aspect-square overflow-hidden rounded-lg border border-border/60 bg-muted/30',\n\t\t\t\t'cursor-grab active:cursor-grabbing',\n\t\t\t\tisDragging && 'z-10 shadow-lg ring-2 ring-primary/40',\n\t\t\t\tdisabled && 'pointer-events-none opacity-50',\n\t\t\t\ttileClassName,\n\t\t\t)}\n\t\t\t{...attributes}\n\t\t\t{...listeners}\n\t\t>\n\t\t\t<img\n\t\t\t\tsrc={item.previewUrl}\n\t\t\t\talt={item.file.name}\n\t\t\t\tclassName=\"absolute inset-0 size-full object-cover\"\n\t\t\t\tdraggable={false}\n\t\t\t/>\n\t\t\t{isFirst && (\n\t\t\t\t<span\n\t\t\t\t\tclassName=\"absolute left-1.5 top-1.5 rounded-full bg-card/90 px-1.5 py-0.5 text-xxs font-semibold text-foreground shadow ring-1 ring-border\"\n\t\t\t\t>\n\t\t\t\t\t{strings.cover}\n\t\t\t\t</span>\n\t\t\t)}\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\taria-label={strings.removeAria}\n\t\t\t\tonPointerDown={(e) => e.stopPropagation()}\n\t\t\t\tonClick={(e) => {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tonRemove();\n\t\t\t\t}}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'absolute right-1.5 top-1.5 inline-flex size-6 items-center justify-center rounded-full bg-card text-foreground shadow ring-1 ring-border',\n\t\t\t\t\t'opacity-0 transition-opacity group-hover:opacity-100 focus-visible:opacity-100',\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<X className=\"size-3.5\" />\n\t\t\t</button>\n\t\t</div>\n\t);\n}\n\nexport function MediaGallery({\n\tvalue,\n\tonChange,\n\taccept = '.png,.jpg,.jpeg,.gif,.webp',\n\tmaxFiles,\n\tdisabled = false,\n\tinvalid = false,\n\tclassName,\n\ttileClassName,\n\tstrings: stringsProp,\n}: MediaGalleryProps) {\n\tconst strings = useStrings(defaultMediaGalleryStrings, stringsProp);\n\tconst inputId = useId();\n\tconst inputRef = useRef<HTMLInputElement | null>(null);\n\tconst [items, setItems] = useState<InternalItem[]>([]);\n\tconst [isDragging, setIsDragging] = useState(false);\n\n\tconst sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 6 } }));\n\n\t// Track the live preview-URL set in a ref so the unmount cleanup sees the\n\t// latest values without depending on render-time `items`. Without this,\n\t// the cleanup closes over the initial empty array and any object URLs\n\t// created during the lifetime of the component leak (the browser will\n\t// still hold them until the document unloads).\n\tconst itemsRef = useRef<InternalItem[]>([]);\n\titemsRef.current = items;\n\n\t// Reflect controlled value\n\tuseEffect(() => {\n\t\tif (!value) return;\n\t\tsetItems((prev) => {\n\t\t\t// Skip if files are equal references already (avoid resetting URLs).\n\t\t\tif (prev.length === value.length && prev.every((p, i) => p.file === value[i])) {\n\t\t\t\treturn prev;\n\t\t\t}\n\t\t\t// Revoke old URLs we no longer use.\n\t\t\tprev.forEach((p) => URL.revokeObjectURL(p.previewUrl));\n\t\t\treturn value.map((file) => ({\n\t\t\t\tid: makeId(),\n\t\t\t\tfile,\n\t\t\t\tpreviewUrl: URL.createObjectURL(file),\n\t\t\t}));\n\t\t});\n\t}, [value]);\n\n\t// Cleanup on unmount — revoke whatever previews were live at the time.\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\titemsRef.current.forEach((it) => URL.revokeObjectURL(it.previewUrl));\n\t\t};\n\t}, []);\n\n\tconst emit = useCallback(\n\t\t(next: InternalItem[]) => {\n\t\t\tonChange?.(next.map((it) => it.file));\n\t\t},\n\t\t[onChange],\n\t);\n\n\tconst addFiles = useCallback(\n\t\t(incoming: File[]) => {\n\t\t\tif (disabled) return;\n\t\t\tsetItems((prev) => {\n\t\t\t\tconst remaining = maxFiles !== undefined ? Math.max(0, maxFiles - prev.length) : incoming.length;\n\t\t\t\tconst accepted = incoming.slice(0, remaining);\n\t\t\t\tconst additions: InternalItem[] = accepted.map((file) => ({\n\t\t\t\t\tid: makeId(),\n\t\t\t\t\tfile,\n\t\t\t\t\tpreviewUrl: URL.createObjectURL(file),\n\t\t\t\t}));\n\t\t\t\tconst next = [...prev, ...additions];\n\t\t\t\temit(next);\n\t\t\t\treturn next;\n\t\t\t});\n\t\t},\n\t\t[disabled, emit, maxFiles],\n\t);\n\n\tconst remove = useCallback(\n\t\t(id: string) => {\n\t\t\tsetItems((prev) => {\n\t\t\t\tconst target = prev.find((p) => p.id === id);\n\t\t\t\tif (target) URL.revokeObjectURL(target.previewUrl);\n\t\t\t\tconst next = prev.filter((p) => p.id !== id);\n\t\t\t\temit(next);\n\t\t\t\treturn next;\n\t\t\t});\n\t\t},\n\t\t[emit],\n\t);\n\n\tconst onPickerChange = useCallback(\n\t\t(e: ChangeEvent<HTMLInputElement>) => {\n\t\t\tconst list = e.target.files;\n\t\t\tif (!list || list.length === 0) return;\n\t\t\taddFiles(Array.from(list));\n\t\t\tif (inputRef.current) inputRef.current.value = '';\n\t\t},\n\t\t[addFiles],\n\t);\n\n\tconst handleDragEnter = useCallback(\n\t\t(e: DragEvent<HTMLDivElement>) => {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\tif (!disabled) setIsDragging(true);\n\t\t},\n\t\t[disabled],\n\t);\n\n\tconst handleDragLeave = useCallback((e: DragEvent<HTMLDivElement>) => {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\t\tsetIsDragging(false);\n\t}, []);\n\n\tconst handleDrop = useCallback(\n\t\t(e: DragEvent<HTMLDivElement>) => {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\tsetIsDragging(false);\n\t\t\tif (disabled) return;\n\t\t\tconst list = e.dataTransfer?.files;\n\t\t\tif (!list || list.length === 0) return;\n\t\t\taddFiles(Array.from(list));\n\t\t},\n\t\t[addFiles, disabled],\n\t);\n\n\tconst onDragEnd = useCallback(\n\t\t(event: DragEndEvent) => {\n\t\t\tconst { active, over } = event;\n\t\t\tif (!over || active.id === over.id) return;\n\t\t\tsetItems((prev) => {\n\t\t\t\tconst fromIdx = prev.findIndex((p) => p.id === active.id);\n\t\t\t\tconst toIdx = prev.findIndex((p) => p.id === over.id);\n\t\t\t\tif (fromIdx === -1 || toIdx === -1) return prev;\n\t\t\t\tconst next = [...prev];\n\t\t\t\tconst [moved] = next.splice(fromIdx, 1);\n\t\t\t\tnext.splice(toIdx, 0, moved);\n\t\t\t\temit(next);\n\t\t\t\treturn next;\n\t\t\t});\n\t\t},\n\t\t[emit],\n\t);\n\n\tconst tileIds = useMemo(() => items.map((it) => it.id), [items]);\n\tconst isFull = maxFiles !== undefined && items.length >= maxFiles;\n\n\treturn (\n\t\t<div className={cn('space-y-3', className)}>\n\t\t\t<DndContext sensors={sensors} onDragEnd={onDragEnd}>\n\t\t\t\t<SortableContext items={tileIds} strategy={rectSortingStrategy}>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'grid grid-cols-2 gap-2',\n\t\t\t\t\t\t\t'sm:grid-cols-3 md:grid-cols-4',\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{items.map((item, i) => (\n\t\t\t\t\t\t\t<SortableTile\n\t\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\t\titem={item}\n\t\t\t\t\t\t\t\tisFirst={i === 0}\n\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\tonRemove={() => remove(item.id)}\n\t\t\t\t\t\t\t\tstrings={strings}\n\t\t\t\t\t\t\t\ttileClassName={tileClassName}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))}\n\n\t\t\t\t\t\t{!isFull && (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\t\t\ttabIndex={disabled ? -1 : 0}\n\t\t\t\t\t\t\t\taria-disabled={disabled || undefined}\n\t\t\t\t\t\t\t\taria-invalid={invalid || undefined}\n\t\t\t\t\t\t\t\tonClick={() => !disabled && inputRef.current?.click()}\n\t\t\t\t\t\t\t\tonKeyDown={(e) => {\n\t\t\t\t\t\t\t\t\tif (e.key === 'Enter' || e.key === ' ') {\n\t\t\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\t\t\tinputRef.current?.click();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tonDragEnter={handleDragEnter}\n\t\t\t\t\t\t\t\tonDragOver={handleDragEnter}\n\t\t\t\t\t\t\t\tonDragLeave={handleDragLeave}\n\t\t\t\t\t\t\t\tonDrop={handleDrop}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'flex aspect-square items-center justify-center rounded-lg border border-dashed text-center outline-none transition-colors',\n\t\t\t\t\t\t\t\t\t'hover:border-primary hover:bg-primary/5 hover:text-primary focus-visible:ring-2 focus-visible:ring-ring/50',\n\t\t\t\t\t\t\t\t\tinvalid ? 'border-destructive' : 'border-muted-foreground/40',\n\t\t\t\t\t\t\t\t\tdisabled && 'cursor-not-allowed opacity-50',\n\t\t\t\t\t\t\t\t\t!disabled && isDragging && 'border-primary bg-primary/10 text-primary',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\tid={inputId}\n\t\t\t\t\t\t\t\t\tref={inputRef}\n\t\t\t\t\t\t\t\t\ttype=\"file\"\n\t\t\t\t\t\t\t\t\tclassName=\"sr-only\"\n\t\t\t\t\t\t\t\t\taccept={accept}\n\t\t\t\t\t\t\t\t\tmultiple\n\t\t\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\t\t\tonChange={onPickerChange}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<div className=\"flex flex-col items-center gap-2 px-2\">\n\t\t\t\t\t\t\t\t\t<ImagePlus className=\"size-5 text-muted-foreground\" aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t<Text size=\"xs\" weight=\"medium\">\n\t\t\t\t\t\t\t\t\t\t{isDragging ? strings.dragOver : strings.addInstruction}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</SortableContext>\n\t\t\t</DndContext>\n\n\t\t\t{!!isFull && (\n\t\t\t\t<Text size=\"xs\" type=\"secondary\">\n\t\t\t\t\t{strings.maxReached}\n\t\t\t\t</Text>\n\t\t\t)}\n\t\t\t{!isFull && !!strings.helper && (\n\t\t\t\t<Text size=\"xs\" type=\"secondary\">\n\t\t\t\t\t{strings.helper}\n\t\t\t\t</Text>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nMediaGallery.displayName = 'MediaGallery';\n","/**\n * UploadProgressList — render-only list of in-flight uploads. Each row shows\n * a status icon (queued / uploading / done / error / cancelled), filename,\n * size, a progress bar driven by `progress` (0–100), and an action button\n * that maps to the row's status (cancel while uploading, retry on error,\n * remove when done). Pair with FileUpload / MediaGallery / Dropzone — those\n * components emit raw `File` instances; this one displays the upload UI\n * once the consumer has wired them to its API.\n *\n * Strings overridable for i18n.\n */\nimport {\n\tAlertCircle,\n\tCheck,\n\tClock,\n\tRefreshCw,\n\tUploadCloud,\n\tX,\n} from 'lucide-react';\nimport { Text } from '@/components/typography';\nimport { Button } from '@/components/base/buttons';\nimport { useStrings } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nexport type UploadStatus = 'queued' | 'uploading' | 'done' | 'error' | 'cancelled';\n\nexport interface UploadItem {\n\tid: string;\n\tname: string;\n\t/** Pre-formatted size string (e.g. \"2.4 MB\"). */\n\tsize?: string;\n\t/** Upload progress 0–100. Ignored when status is `done`/`error`/`cancelled`. */\n\tprogress?: number;\n\tstatus: UploadStatus;\n\t/** Error message rendered under the row when status is `error`. */\n\terror?: string;\n\t/**\n\t * Optional thumbnail URL — when set and the consumer renders this list\n\t * inside `<UploadTray>`, the row uses the thumbnail in place of the\n\t * status icon. Pure-`<UploadProgressList>` callers can ignore this.\n\t */\n\tpreview?: string;\n}\n\nexport interface UploadProgressListStrings {\n\tqueued: string;\n\tuploading: string;\n\tdone: string;\n\terror: string;\n\tcancelled: string;\n\tcancel: string;\n\tretry: string;\n\tremove: string;\n}\n\nexport const defaultUploadProgressListStrings: UploadProgressListStrings = {\n\tqueued: 'Queued',\n\tuploading: 'Uploading',\n\tdone: 'Uploaded',\n\terror: 'Failed',\n\tcancelled: 'Cancelled',\n\tcancel: 'Cancel',\n\tretry: 'Retry',\n\tremove: 'Remove',\n};\n\nexport interface UploadProgressListProps {\n\titems: UploadItem[];\n\tonCancel?: (id: string) => void;\n\tonRetry?: (id: string) => void;\n\tonRemove?: (id: string) => void;\n\tclassName?: string;\n\tstrings?: Partial<UploadProgressListStrings>;\n}\n\nconst STATUS_TONE: Record<\n\tUploadStatus,\n\t{ icon: typeof Check; bg: string; fg: string; bar: string }\n> = {\n\tqueued: { icon: Clock, bg: 'bg-muted', fg: 'text-muted-foreground', bar: 'bg-muted-foreground/30' },\n\tuploading: { icon: UploadCloud, bg: 'bg-primary/15', fg: 'text-primary', bar: 'bg-primary' },\n\tdone: { icon: Check, bg: 'bg-success/15', fg: 'text-success', bar: 'bg-success' },\n\terror: { icon: AlertCircle, bg: 'bg-destructive/15', fg: 'text-destructive', bar: 'bg-destructive' },\n\tcancelled: { icon: X, bg: 'bg-muted', fg: 'text-muted-foreground', bar: 'bg-muted-foreground/30' },\n};\n\nexport function UploadProgressList({\n\titems,\n\tonCancel,\n\tonRetry,\n\tonRemove,\n\tclassName,\n\tstrings: stringsProp,\n}: UploadProgressListProps) {\n\tconst strings = useStrings(defaultUploadProgressListStrings, stringsProp);\n\tconst statusLabel: Record<UploadStatus, string> = {\n\t\tqueued: strings.queued,\n\t\tuploading: strings.uploading,\n\t\tdone: strings.done,\n\t\terror: strings.error,\n\t\tcancelled: strings.cancelled,\n\t};\n\n\tif (items.length === 0) return null;\n\n\treturn (\n\t\t<ul className={cn('upload-progress-list--component', 'space-y-2', className)}>\n\t\t\t{items.map((item) => {\n\t\t\t\tconst tone = STATUS_TONE[item.status];\n\t\t\t\tconst Icon = tone.icon;\n\t\t\t\tconst pct =\n\t\t\t\t\titem.status === 'done'\n\t\t\t\t\t\t? 100\n\t\t\t\t\t\t: item.status === 'cancelled' || item.status === 'error'\n\t\t\t\t\t\t\t? item.progress ?? 0\n\t\t\t\t\t\t\t: Math.max(0, Math.min(100, item.progress ?? 0));\n\t\t\t\tconst showProgress = item.status === 'uploading' || item.status === 'queued';\n\t\t\t\treturn (\n\t\t\t\t\t<li\n\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\tclassName=\"rounded-md border border-border/60 bg-card px-3 py-2\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"flex items-center gap-3\">\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'inline-flex size-7 shrink-0 items-center justify-center rounded-md',\n\t\t\t\t\t\t\t\t\ttone.bg,\n\t\t\t\t\t\t\t\t\ttone.fg,\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t'size-3.5',\n\t\t\t\t\t\t\t\t\t\titem.status === 'uploading' && 'animate-pulse',\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t<div className=\"min-w-0 flex-1\">\n\t\t\t\t\t\t\t\t<div className=\"flex items-baseline justify-between gap-2\">\n\t\t\t\t\t\t\t\t\t<Text weight=\"medium\" className=\"truncate\">\n\t\t\t\t\t\t\t\t\t\t{item.name}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t<Text size=\"xxs\" type=\"secondary\" className=\"shrink-0 tabular-nums\">\n\t\t\t\t\t\t\t\t\t\t{item.size}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t{showProgress ? (\n\t\t\t\t\t\t\t\t\t<div className=\"mt-1.5 h-1 w-full overflow-hidden rounded-full bg-muted\">\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tclassName={cn('h-full rounded-full transition-[width] duration-200', tone.bar)}\n\t\t\t\t\t\t\t\t\t\t\tstyle={{ width: `${pct}%` }}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<Text size=\"xxs\" type={item.status === 'error' ? 'error' : 'secondary'}>\n\t\t\t\t\t\t\t\t\t\t{statusLabel[item.status]}\n\t\t\t\t\t\t\t\t\t\t{item.status === 'error' && !!item.error && ` — ${item.error}`}\n\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t<div className=\"flex shrink-0 items-center gap-1\">\n\t\t\t\t\t\t\t\t{item.status === 'uploading' && !!onCancel && (\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\t\t\tsize=\"icon-xs\"\n\t\t\t\t\t\t\t\t\t\taria-label={strings.cancel}\n\t\t\t\t\t\t\t\t\t\tonClick={() => onCancel(item.id)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<X className=\"size-3.5\" />\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{item.status === 'error' && !!onRetry && (\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\t\t\tsize=\"icon-xs\"\n\t\t\t\t\t\t\t\t\t\taria-label={strings.retry}\n\t\t\t\t\t\t\t\t\t\tonClick={() => onRetry(item.id)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<RefreshCw className=\"size-3.5\" />\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{(item.status === 'done' ||\n\t\t\t\t\t\t\t\t\titem.status === 'error' ||\n\t\t\t\t\t\t\t\t\titem.status === 'cancelled') &&\n\t\t\t\t\t\t\t\t\t!!onRemove && (\n\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\tsize=\"icon-xs\"\n\t\t\t\t\t\t\t\t\t\t\taria-label={strings.remove}\n\t\t\t\t\t\t\t\t\t\t\tonClick={() => onRemove(item.id)}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<X className=\"size-3.5\" />\n\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</li>\n\t\t\t\t);\n\t\t\t})}\n\t\t</ul>\n\t);\n}\n\nUploadProgressList.displayName = 'UploadProgressList';\n","/**\n * UploadTray — the canonical \"drag-and-drop area + per-file progress\n * rows + summary toolbar\" surface. Composes:\n *\n * - `Dropzone` — drag/drop chrome + click-to-browse\n * - `UploadProgressList` — per-file row with status icon + progress\n * bar + cancel/retry/remove actions\n * - `Badge` — status counters in the toolbar\n * - `Button` — \"Clear all\" action\n *\n * Framework-agnostic. Every action is callback-driven — the library\n * doesn't perform the upload; it surfaces the UX. The consumer wires\n * the actual transfer (XHR, fetch, S3 multipart, …) and feeds back\n * `progress` / `status` updates by mutating the `items` array.\n *\n * Pair with `useFiles` (the existing client-side validation hook) at\n * the call site if you want pre-flight size/type rejection.\n */\nimport { forwardRef, useCallback } from 'react';\n\nimport { Badge } from '@/components/base/badge';\nimport { Button } from '@/components/base/buttons';\nimport { Text } from '@/components/typography';\nimport { useStrings, type StringsProp } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport { Dropzone, type DropzoneProps } from './dropzone';\nimport {\n\tUploadProgressList,\n\ttype UploadItem,\n\ttype UploadProgressListStrings,\n} from './upload-progress-list';\n\nexport interface UploadTrayStrings {\n\theading: string;\n\tcompletedLabel: string;\n\tfailedLabel: string;\n\tuploadingLabel: string;\n\tqueuedLabel: string;\n\tclearAll: string;\n}\n\nexport const defaultUploadTrayStrings: UploadTrayStrings = {\n\theading: 'Upload progress',\n\tcompletedLabel: 'Completed',\n\tfailedLabel: 'Failed',\n\tuploadingLabel: 'Uploading',\n\tqueuedLabel: 'Queued',\n\tclearAll: 'Clear all',\n};\n\nexport interface UploadTrayProps {\n\t/** Files currently in the tray (queued / uploading / done / error / cancelled). */\n\titems: UploadItem[];\n\t/**\n\t * Fires when the user drops or browses files. The library does NOT\n\t * write to the items array — the consumer turns these into queued\n\t * `UploadItem`s, kicks off the actual transfer, and updates progress.\n\t */\n\tonAddFiles: (files: File[]) => void;\n\t/** Per-row cancel handler (passed through to UploadProgressList). */\n\tonCancel?: (id: string) => void;\n\t/** Per-row retry handler. */\n\tonRetry?: (id: string) => void;\n\t/** Per-row remove handler. */\n\tonRemove?: (id: string) => void;\n\t/**\n\t * Clears the entire tray. When omitted, the \"Clear all\" button is\n\t * hidden — useful for surfaces where in-flight uploads can't be\n\t * cancelled in bulk.\n\t */\n\tonClearAll?: () => void;\n\t/** Forwarded to the inner `<Dropzone>`. Only the meaningful subset. */\n\tdropzone?: Pick<\n\t\tDropzoneProps,\n\t\t'accept' | 'multiple' | 'size' | 'disabled' | 'invalid' | 'strings'\n\t>;\n\tclassName?: string;\n\tstrings?: StringsProp<UploadTrayStrings>;\n\t/** Strings forwarded to the inner `<UploadProgressList>`. */\n\tlistStrings?: StringsProp<UploadProgressListStrings>;\n}\n\nfunction countStatus(items: UploadItem[]) {\n\tlet completed = 0;\n\tlet failed = 0;\n\tlet uploading = 0;\n\tlet queued = 0;\n\tfor (const item of items) {\n\t\tif (item.status === 'done') completed += 1;\n\t\telse if (item.status === 'error') failed += 1;\n\t\telse if (item.status === 'uploading') uploading += 1;\n\t\telse if (item.status === 'queued') queued += 1;\n\t}\n\treturn { completed, failed, uploading, queued };\n}\n\nexport const UploadTray = forwardRef<HTMLDivElement, UploadTrayProps>(function UploadTray({\n\titems,\n\tonAddFiles,\n\tonCancel,\n\tonRetry,\n\tonRemove,\n\tonClearAll,\n\tdropzone,\n\tclassName,\n\tstrings: stringsProp,\n\tlistStrings,\n}, ref) {\n\tconst strings = useStrings(defaultUploadTrayStrings, stringsProp);\n\tconst { completed, failed, uploading, queued } = countStatus(items);\n\n\tconst handleDrop = useCallback(\n\t\t(files: File[]) => {\n\t\t\tif (files.length > 0) onAddFiles(files);\n\t\t},\n\t\t[onAddFiles],\n\t);\n\n\tconst hasItems = items.length > 0;\n\n\treturn (\n\t\t<div ref={ref} className={cn('upload-tray--component', 'flex flex-col gap-4', className)}>\n\t\t\t<Dropzone\n\t\t\t\tonDrop={handleDrop}\n\t\t\t\taccept={dropzone?.accept}\n\t\t\t\tmultiple={dropzone?.multiple}\n\t\t\t\tsize={dropzone?.size}\n\t\t\t\tdisabled={dropzone?.disabled}\n\t\t\t\tinvalid={dropzone?.invalid}\n\t\t\t\tstrings={dropzone?.strings}\n\t\t\t/>\n\n\t\t\t{!!hasItems && (\n\t\t\t\t<>\n\t\t\t\t\t<div className=\"flex flex-wrap items-center justify-between gap-2\">\n\t\t\t\t\t\t<div className=\"flex flex-wrap items-center gap-2\">\n\t\t\t\t\t\t\t<Text tag=\"span\" weight=\"semibold\">\n\t\t\t\t\t\t\t\t{strings.heading}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t{completed > 0 && (\n\t\t\t\t\t\t\t\t<Badge variant=\"success\">\n\t\t\t\t\t\t\t\t\t{strings.completedLabel}: {completed}\n\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{failed > 0 && (\n\t\t\t\t\t\t\t\t<Badge variant=\"destructive\">\n\t\t\t\t\t\t\t\t\t{strings.failedLabel}: {failed}\n\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{uploading > 0 && (\n\t\t\t\t\t\t\t\t<Badge variant=\"info\">\n\t\t\t\t\t\t\t\t\t{strings.uploadingLabel}: {uploading}\n\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{queued > 0 && (\n\t\t\t\t\t\t\t\t<Badge variant=\"secondary\">\n\t\t\t\t\t\t\t\t\t{strings.queuedLabel}: {queued}\n\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{!!onClearAll && (\n\t\t\t\t\t\t\t<Button variant=\"secondary\" buttonStyle=\"ghost\" onClick={onClearAll}>\n\t\t\t\t\t\t\t\t{strings.clearAll}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<UploadProgressList\n\t\t\t\t\t\titems={items}\n\t\t\t\t\t\tonCancel={onCancel}\n\t\t\t\t\t\tonRetry={onRetry}\n\t\t\t\t\t\tonRemove={onRemove}\n\t\t\t\t\t\tstrings={listStrings}\n\t\t\t\t\t/>\n\t\t\t\t</>\n\t\t\t)}\n\n\t\t</div>\n\t);\n});\n\nUploadTray.displayName = 'UploadTray';\n","/**\n * Shared default strings for repeater-style form fields\n * (`<List>`, `<StringRepeater>`, `<ObjectRepeater>`,\n * `<LocalizedStringRepeater>`, …).\n *\n * Each repeater has its own concrete `Strings` interface — the shared\n * defaults below cover the keys they all share. Per-field strings files\n * spread these defaults into their own constant so consumers can override\n * any subset uniformly.\n */\n\nexport interface RepeaterSharedStrings {\n\temptyState: string;\n\taddItem: string;\n\tremoveAriaLabel: string;\n}\n\nexport const defaultRepeaterStrings: RepeaterSharedStrings = {\n\temptyState: 'No items added yet.',\n\taddItem: 'Add item',\n\tremoveAriaLabel: 'Remove item',\n};\n","/**\n * Repeater — shared chrome for any list-style form field. Renders a list of\n * rows with optional drag handle and a per-row remove icon, plus an empty\n * state and a trailing \"+ add\" button. The row body is consumer-rendered via\n * `children` (or `renderRow`), so this primitive is the visual contract that\n * `StringRepeater`, `ObjectRepeater`, `LocalizedStringRepeater`, and\n * `KeyValueEditor` all share — without locking down what each row is editing.\n *\n * Sortable is opt-in (`sortable`); when enabled the rows are wired up\n * through `@dnd-kit/sortable` and the consumer can render the supplied\n * `dragHandleProps` on whichever element is the visual handle.\n *\n * The `<Repeater>` is intentionally headless on the value side — it does not\n * own the items array. Consumers (RHF callers via `useFieldArray`, manual\n * controlled state, etc.) pass `items`, `onAdd`, `onRemove`, and\n * (optionally) `onMove` callbacks. This keeps the primitive framework- and\n * state-shape-agnostic.\n */\nimport {\n DndContext,\n KeyboardSensor,\n PointerSensor,\n closestCenter,\n useSensor,\n useSensors,\n type DragEndEvent,\n} from '@dnd-kit/core';\nimport {\n SortableContext,\n arrayMove,\n sortableKeyboardCoordinates,\n useSortable,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { GripVertical, Plus, Trash2, X } from 'lucide-react';\nimport {\n type CSSProperties,\n type ReactNode,\n useCallback,\n useMemo,\n} from 'react';\n\nimport { Button } from '@/components/base/buttons';\nimport Text from '@/components/typography/text';\nimport { useStrings, type StringsProp } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport { defaultRepeaterStrings } from './repeaters.strings';\n\nexport interface RepeaterStrings {\n /** Empty state copy — shown when `items` is empty. */\n emptyState: string;\n /** Label of the trailing \"+\" button. */\n addButton: string;\n /** Per-row remove button aria-label. */\n removeAriaLabel: string;\n /** Drag-handle aria-label (only relevant when `sortable`). */\n dragHandleAriaLabel: string;\n}\n\nexport const defaultRepeaterPrimitiveStrings: RepeaterStrings = {\n emptyState: defaultRepeaterStrings.emptyState,\n addButton: defaultRepeaterStrings.addItem,\n removeAriaLabel: defaultRepeaterStrings.removeAriaLabel,\n dragHandleAriaLabel: 'Drag to reorder',\n};\n\n/**\n * Visual density of a row. `inline` is the canonical compact admin row\n * (single input + remove icon). `card` wraps richer content in a\n * bordered surface — used by `ObjectRepeater` and any consumer with\n * multi-field rows that need their own delete affordance.\n */\nexport type RepeaterRowVariant = 'inline' | 'card';\n\nexport type RepeaterRemoveVariant = 'ghost' | 'icon-button';\n\nexport interface RepeaterItem {\n /** Stable id (RHF `field.id`, generated UUID, etc.) — used as React key\n * and as the drag handle id when sortable. */\n id: string;\n}\n\ninterface RepeaterRowRenderContext {\n /** Index of the row in the items array. */\n index: number;\n /** True while the row is being actively dragged. */\n isDragging: boolean;\n}\n\nexport interface RepeaterProps<T extends RepeaterItem> {\n items: ReadonlyArray<T>;\n /** Render the body of a single row. */\n renderRow: (item: T, ctx: RepeaterRowRenderContext) => ReactNode;\n /** Called when the consumer presses the \"+ add\" button. */\n onAdd: () => void;\n /** Called when the consumer presses a per-row remove button. */\n onRemove: (index: number) => void;\n /** Called when a row is dragged to a new position. Required when\n * `sortable` is true; ignored otherwise. */\n onMove?: (fromIndex: number, toIndex: number) => void;\n /** Enable drag-to-reorder. Default `false`. */\n sortable?: boolean;\n /** Visual style of each row's outer chrome. Default `'inline'`. */\n rowVariant?: RepeaterRowVariant;\n /** Remove button style. Default `'ghost'` (subtle X icon, hover →\n * destructive tint). `'icon-button'` mirrors `<Button icon={Trash2}>`\n * — used by card rows that need a more prominent affordance. */\n removeVariant?: RepeaterRemoveVariant;\n /** Hide the per-row remove button. Default `false`. Useful when the\n * consumer renders its own remove inside the row body. */\n hideRemove?: boolean;\n /** Disable add + remove + drag affordances. */\n disabled?: boolean;\n /** Hide the trailing \"+ add\" button. Useful when the consumer composes\n * it elsewhere or has a maxItems cap. */\n hideAdd?: boolean;\n /** Override default strings. */\n strings?: StringsProp<RepeaterStrings>;\n /** Class applied to the outer wrapper. */\n className?: string;\n}\n\ninterface RowProps<T extends RepeaterItem> {\n item: T;\n index: number;\n sortable: boolean;\n rowVariant: RepeaterRowVariant;\n removeVariant: RepeaterRemoveVariant;\n hideRemove: boolean;\n disabled: boolean;\n strings: RepeaterStrings;\n onRemove: (index: number) => void;\n renderRow: RepeaterProps<T>['renderRow'];\n}\n\nfunction Row<T extends RepeaterItem>({\n item,\n index,\n sortable,\n rowVariant,\n removeVariant,\n hideRemove,\n disabled,\n strings,\n onRemove,\n renderRow,\n}: RowProps<T>) {\n const sortableState = useSortable({ id: item.id, disabled: disabled || !sortable });\n const isDragging = sortable ? sortableState.isDragging : false;\n\n const style: CSSProperties | undefined = sortable\n ? {\n transform: CSS.Transform.toString(sortableState.transform),\n transition: sortableState.transition,\n opacity: isDragging ? 0.6 : 1,\n }\n : undefined;\n\n const ref = sortable ? sortableState.setNodeRef : undefined;\n const dragAttributes = sortable ? sortableState.attributes : {};\n const dragListeners = sortable ? sortableState.listeners : undefined;\n\n const dragHandle = sortable ? (\n <button\n type=\"button\"\n aria-label={strings.dragHandleAriaLabel}\n className={cn(\n 'inline-flex size-9 shrink-0 items-center justify-center rounded-md',\n 'text-muted-foreground/50 hover:text-foreground hover:bg-muted',\n 'cursor-grab active:cursor-grabbing',\n 'outline-none focus-visible:ring-2 focus-visible:ring-ring/50',\n 'transition-colors',\n disabled && 'pointer-events-none opacity-50',\n )}\n {...dragAttributes}\n {...dragListeners}\n >\n <GripVertical className=\"size-4\" aria-hidden=\"true\" />\n </button>\n ) : null;\n\n const removeButton = hideRemove ? null : removeVariant === 'icon-button' ? (\n <Button\n type=\"button\"\n variant=\"secondary\"\n buttonStyle=\"outline\"\n size=\"sm\"\n aria-label={strings.removeAriaLabel}\n disabled={disabled}\n onClick={() => onRemove(index)}\n className=\"shrink-0\"\n >\n <Trash2 className=\"size-4\" aria-hidden=\"true\" />\n </Button>\n ) : (\n <button\n type=\"button\"\n aria-label={strings.removeAriaLabel}\n disabled={disabled}\n onClick={() => onRemove(index)}\n className={cn(\n 'inline-flex size-9 shrink-0 items-center justify-center rounded-md',\n 'text-muted-foreground/70 hover:bg-destructive/10 hover:text-destructive',\n 'outline-none focus-visible:ring-2 focus-visible:ring-ring/50',\n 'transition-colors',\n 'disabled:pointer-events-none disabled:opacity-50',\n )}\n >\n <X className=\"size-4\" aria-hidden=\"true\" />\n </button>\n );\n\n if (rowVariant === 'card') {\n return (\n <div\n ref={ref}\n style={style}\n className={cn('repeater--component', \n 'relative rounded-md border border-input bg-card p-4',\n sortable && 'pl-2',\n )}\n >\n <div className=\"flex items-start gap-2\">\n {dragHandle}\n <div className=\"min-w-0 flex-1\">\n {renderRow(item, { index, isDragging })}\n </div>\n {removeButton}\n </div>\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n style={style}\n className=\"flex items-start gap-2\"\n >\n {dragHandle}\n <div className=\"min-w-0 flex-1\">\n {renderRow(item, { index, isDragging })}\n </div>\n {removeButton}\n </div>\n );\n}\n\nexport function Repeater<T extends RepeaterItem>({\n items,\n renderRow,\n onAdd,\n onRemove,\n onMove,\n sortable = false,\n rowVariant = 'inline',\n removeVariant = 'ghost',\n hideRemove = false,\n hideAdd = false,\n disabled = false,\n strings: stringsProp,\n className,\n}: RepeaterProps<T>) {\n const strings = useStrings(defaultRepeaterPrimitiveStrings, stringsProp);\n\n const sensors = useSensors(\n useSensor(PointerSensor, { activationConstraint: { distance: 4 } }),\n useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates }),\n );\n\n const handleDragEnd = useCallback(\n (event: DragEndEvent) => {\n const { active, over } = event;\n if (!over || active.id === over.id) return;\n const fromIndex = items.findIndex((item) => item.id === active.id);\n const toIndex = items.findIndex((item) => item.id === over.id);\n if (fromIndex < 0 || toIndex < 0) return;\n onMove?.(fromIndex, toIndex);\n },\n [items, onMove],\n );\n\n const itemIds = useMemo(() => items.map((item) => item.id), [items]);\n\n const list = (\n <div className=\"space-y-2\">\n {items.map((item, index) => (\n <Row<T>\n key={item.id}\n item={item}\n index={index}\n sortable={sortable}\n rowVariant={rowVariant}\n removeVariant={removeVariant}\n hideRemove={hideRemove}\n disabled={disabled}\n strings={strings}\n onRemove={onRemove}\n renderRow={renderRow}\n />\n ))}\n </div>\n );\n\n return (\n <div className={cn('space-y-3', className)}>\n {items.length === 0 ? (\n <div className=\"rounded-md border border-dashed border-input p-4\">\n <Text type=\"secondary\">{strings.emptyState}</Text>\n </div>\n ) : sortable ? (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragEnd={handleDragEnd}\n >\n <SortableContext items={itemIds} strategy={verticalListSortingStrategy}>\n {list}\n </SortableContext>\n </DndContext>\n ) : (\n list\n )}\n\n {!hideAdd && (\n <Button\n type=\"button\"\n variant=\"secondary\"\n buttonStyle=\"outline\"\n size=\"sm\"\n disabled={disabled}\n onClick={onAdd}\n >\n <Plus className=\"size-4 mr-1.5\" />\n {strings.addButton}\n </Button>\n )}\n </div>\n );\n}\n\nRepeater.displayName = 'Repeater';\n\n/** Re-export `arrayMove` from `@dnd-kit/sortable` so consumers using\n * the headless shape don't need to add the dep import themselves. */\nexport { arrayMove };\n","/**\n * KeyValueEditor — dynamic editor for arbitrary key→value string pairs. Emits\n * a `Record<string, string>` to consumers; rows with empty keys are dropped\n * from the output. Use for metadata, environment vars, or feature flags.\n *\n * Built on the shared `<Repeater>` primitive so it visually matches the\n * `StringRepeater` / `ObjectRepeater` / `LocalizedStringRepeater` family —\n * same row chrome, same remove icon, same add-button styling, optional\n * drag-to-reorder.\n */\nimport { useState, useRef, useCallback, memo } from 'react';\n\nimport { Label } from '@/components/typography';\nimport { useStrings } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport { Input } from './input';\nimport { Repeater } from './repeater';\n\nexport type KeyValuePair = { key: string; value: string };\n\nexport interface KeyValueEditorStrings {\n keyLabel: string;\n valueLabel: string;\n keyPlaceholder: string;\n valuePlaceholder: string;\n addButton: string;\n removeRowAriaLabel: string;\n emptyState: string;\n}\n\nexport const defaultKeyValueEditorStrings: KeyValueEditorStrings = {\n keyLabel: 'Key',\n valueLabel: 'Value',\n keyPlaceholder: 'key',\n valuePlaceholder: 'value',\n addButton: 'Add row',\n removeRowAriaLabel: 'Remove row',\n emptyState: 'No rows yet.',\n};\n\nexport interface KeyValueEditorProps {\n value?: Record<string, string>;\n onChange?: (val: Record<string, string>) => void;\n invalid?: boolean;\n /** Enable drag-to-reorder. Default `false`. */\n sortable?: boolean;\n /** Override default strings (labels, placeholders, button text). */\n strings?: Partial<KeyValueEditorStrings>;\n /** @deprecated Use `strings.keyPlaceholder` instead. */\n keyPlaceholder?: string;\n /** @deprecated Use `strings.valuePlaceholder` instead. */\n valuePlaceholder?: string;\n /** @deprecated Use `strings.keyLabel` instead. */\n keyLabel?: string;\n /** @deprecated Use `strings.valueLabel` instead. */\n valueLabel?: string;\n /** @deprecated Use `strings.addButton` instead. */\n addButtonText?: string;\n}\n\ntype KeyValueRow = KeyValuePair & { id: string };\n\nconst generateId = (): string => {\n if (typeof crypto !== 'undefined' && 'randomUUID' in crypto) {\n return crypto.randomUUID();\n }\n return Math.random().toString(36).slice(2, 10);\n};\n\ninterface KeyValueEditorRowProps {\n row: KeyValueRow;\n keyPlaceholder: string;\n valuePlaceholder: string;\n invalid?: boolean;\n onKeyChange: (id: string, value: string) => void;\n onValueChange: (id: string, value: string) => void;\n}\n\nconst KeyValueEditorRow = memo(function KeyValueEditorRow({\n row,\n keyPlaceholder,\n valuePlaceholder,\n invalid,\n onKeyChange,\n onValueChange,\n}: KeyValueEditorRowProps) {\n const { id, key: keyValue, value } = row;\n\n return (\n <div className={cn('key-value-editor--component', 'grid grid-cols-1 md:grid-cols-2 gap-2')}>\n <Input\n value={keyValue ?? ''}\n placeholder={keyPlaceholder}\n onChange={(e) => onKeyChange(id, e.target.value)}\n invalid={invalid}\n />\n <Input\n value={value ?? ''}\n placeholder={valuePlaceholder}\n onChange={(e) => onValueChange(id, e.target.value)}\n invalid={invalid}\n />\n </div>\n );\n});\n\nexport function KeyValueEditor({\n value,\n onChange,\n invalid,\n sortable = false,\n keyPlaceholder,\n valuePlaceholder,\n keyLabel,\n valueLabel,\n addButtonText,\n strings: stringsProp,\n}: KeyValueEditorProps) {\n const strings = useStrings(defaultKeyValueEditorStrings, {\n ...(keyPlaceholder !== undefined ? { keyPlaceholder } : {}),\n ...(valuePlaceholder !== undefined ? { valuePlaceholder } : {}),\n ...(keyLabel !== undefined ? { keyLabel } : {}),\n ...(valueLabel !== undefined ? { valueLabel } : {}),\n ...(addButtonText !== undefined ? { addButton: addButtonText } : {}),\n ...stringsProp,\n });\n // Track if we're making internal changes to avoid re-syncing\n const isInternalChange = useRef(false);\n\n // Initialize rows from value prop\n const [rows, setRows] = useState<KeyValueRow[]>(() => {\n if (value && Object.keys(value).length > 0) {\n return Object.entries(value).map(([k, v]) => ({\n id: generateId(),\n key: k,\n value: String(v ?? ''),\n }));\n }\n return [{ id: generateId(), key: '', value: '' }];\n });\n\n // Emit changes to parent\n const emit = useCallback(\n (next: KeyValueRow[]) => {\n const obj: Record<string, string> = {};\n next.forEach(({ key, value }) => {\n if (key.trim() !== '') obj[key] = value ?? '';\n });\n isInternalChange.current = true;\n onChange?.(obj);\n queueMicrotask(() => {\n isInternalChange.current = false;\n });\n },\n [onChange]\n );\n\n const handleKeyChange = useCallback(\n (id: string, newKey: string) => {\n setRows((prev) => {\n const next = prev.map((row) => (row.id === id ? { ...row, key: newKey } : row));\n emit(next);\n return next;\n });\n },\n [emit]\n );\n\n const handleValueChange = useCallback(\n (id: string, newValue: string) => {\n setRows((prev) => {\n const next = prev.map((row) => (row.id === id ? { ...row, value: newValue } : row));\n emit(next);\n return next;\n });\n },\n [emit]\n );\n\n const addRow = useCallback(() => {\n setRows((prev) => {\n const next = [...prev, { id: generateId(), key: '', value: '' }];\n emit(next);\n return next;\n });\n }, [emit]);\n\n const removeRow = useCallback(\n (index: number) => {\n setRows((prev) => {\n const next = prev.filter((_, i) => i !== index);\n const result = next.length ? next : [{ id: generateId(), key: '', value: '' }];\n emit(result);\n return result;\n });\n },\n [emit]\n );\n\n const moveRow = useCallback(\n (from: number, to: number) => {\n setRows((prev) => {\n const next = [...prev];\n const [moved] = next.splice(from, 1);\n next.splice(to, 0, moved);\n emit(next);\n return next;\n });\n },\n [emit]\n );\n\n // Render the column labels OUTSIDE the repeater so the per-row drag\n // handle + remove button stay aligned with the input baseline. Gutter\n // padding (left for sortable handle, right for remove X) matches the\n // `<Repeater>` row's `gap-2` + `size-9` button widths.\n const showHeader = !!strings.keyLabel || !!strings.valueLabel;\n const leftGutter = sortable ? 'pl-11' : '';\n const rightGutter = 'pr-11';\n\n return (\n <div className=\"space-y-2\">\n {showHeader && (\n <div className={cn('grid grid-cols-1 md:grid-cols-2 gap-2', leftGutter, rightGutter)}>\n {!!strings.keyLabel && <Label className=\"flex items-center\">{strings.keyLabel}</Label>}\n {!!strings.valueLabel && <Label className=\"flex items-center\">{strings.valueLabel}</Label>}\n </div>\n )}\n <Repeater\n items={rows}\n sortable={sortable}\n onAdd={addRow}\n onRemove={removeRow}\n onMove={moveRow}\n strings={{\n emptyState: strings.emptyState,\n addButton: strings.addButton,\n removeAriaLabel: strings.removeRowAriaLabel,\n }}\n renderRow={(row) => (\n <KeyValueEditorRow\n row={row}\n keyPlaceholder={strings.keyPlaceholder}\n valuePlaceholder={strings.valuePlaceholder}\n invalid={invalid}\n onKeyChange={handleKeyChange}\n onValueChange={handleValueChange}\n />\n )}\n />\n </div>\n );\n}\n\nKeyValueEditor.displayName = 'KeyValueEditor';\n","/**\n * StringRepeater — RHF-driven repeater for arrays of plain strings. Use under\n * a `FormProvider`; the `name` prop must point at a `string[]` path in the\n * form values. Pair with `useFieldArray` semantics: rows can be added,\n * removed, and (optionally) reordered. Strings overridable for i18n.\n *\n * Built on the shared `<Repeater>` primitive so it stays visually\n * consistent with `ObjectRepeater`, `LocalizedStringRepeater`, and\n * `KeyValueEditor`.\n */\nimport { useFieldArray, useFormContext } from 'react-hook-form';\n\nimport { useStrings } from '@/lib/strings';\n\nimport { Input } from './input';\nimport { Repeater } from './repeater';\nimport { defaultRepeaterStrings } from './repeaters.strings';\n\nexport interface StringRepeaterStrings {\n placeholder: string;\n addButton: string;\n emptyState: string;\n removeAriaLabel: string;\n}\n\nexport const defaultStringRepeaterStrings: StringRepeaterStrings = {\n placeholder: 'Enter value',\n addButton: 'Add item',\n ...defaultRepeaterStrings,\n};\n\nexport interface StringRepeaterProps {\n name: string;\n invalid?: boolean;\n /** Enable drag-to-reorder. Default `false`. */\n sortable?: boolean;\n /** Override default strings (placeholder, button, empty state). */\n strings?: Partial<StringRepeaterStrings>;\n /** @deprecated Use `strings.placeholder` instead. */\n placeholder?: string;\n /** @deprecated Use `strings.addButton` instead. */\n addButtonText?: string;\n /** @deprecated Use `strings.emptyState` instead. */\n emptyMessage?: string;\n}\n\nexport function StringRepeater({\n name,\n placeholder,\n addButtonText,\n emptyMessage,\n invalid,\n sortable = false,\n strings: stringsProp,\n}: StringRepeaterProps) {\n const strings = useStrings(defaultStringRepeaterStrings, {\n ...(placeholder !== undefined ? { placeholder } : {}),\n ...(addButtonText !== undefined ? { addButton: addButtonText } : {}),\n ...(emptyMessage !== undefined ? { emptyState: emptyMessage } : {}),\n ...stringsProp,\n });\n const { control, register } = useFormContext();\n const { fields, append, remove, move } = useFieldArray({\n control,\n name,\n });\n\n return (\n <Repeater className=\"string-repeater--component\"\n items={fields}\n sortable={sortable}\n onAdd={() => append('')}\n onRemove={(index) => remove(index)}\n onMove={(from, to) => move(from, to)}\n strings={{\n emptyState: strings.emptyState,\n addButton: strings.addButton,\n removeAriaLabel: strings.removeAriaLabel,\n }}\n renderRow={(_field, { index }) => (\n <Input\n {...register(`${name}.${index}`)}\n placeholder={strings.placeholder}\n invalid={invalid}\n />\n )}\n />\n );\n}\n\nStringRepeater.displayName = 'StringRepeater';\n","/**\n * ObjectRepeater — RHF-driven repeater for arrays of homogeneous objects.\n * Field definitions describe the shape of each row (label, type, placeholder,\n * required, hint); the repeater wires each cell through `useFieldArray` and\n * renders rows as bordered cards via the shared `<Repeater>` primitive.\n * Strings overridable for i18n.\n */\nimport { useCallback } from 'react';\nimport { useFieldArray, useFormContext } from 'react-hook-form';\n\nimport { FormField } from '@/components/base/forms/form-field';\nimport { useStrings } from '@/lib/strings';\n\nimport { Input } from './input';\nimport { Repeater } from './repeater';\nimport { defaultRepeaterStrings } from './repeaters.strings';\nimport { Textarea } from './textarea';\n\nimport { cn } from '@/lib/utils';\nexport interface ObjectRepeaterStrings {\n addButton: string;\n emptyState: string;\n removeAriaLabel: string;\n}\n\nexport const defaultObjectRepeaterStrings: ObjectRepeaterStrings = {\n addButton: 'Add item',\n ...defaultRepeaterStrings,\n};\n\nexport interface ObjectFieldDef {\n /** Field name within the object */\n name: string;\n\n /** Label for the field */\n label: string;\n\n /** Input type */\n type?: 'text' | 'textarea' | 'number';\n\n /** Placeholder text */\n placeholder?: string;\n\n /** Whether the field is required */\n required?: boolean;\n\n /** Hint text (shown right of label) */\n hint?: string;\n}\n\nexport interface ObjectRepeaterProps {\n name: string;\n fields: ObjectFieldDef[];\n invalid?: boolean;\n /** Enable drag-to-reorder. Default `false`. */\n sortable?: boolean;\n /** Override default strings (button labels, empty state). */\n strings?: Partial<ObjectRepeaterStrings>;\n /** @deprecated Use `strings.addButton` instead. */\n addButtonText?: string;\n /** @deprecated Use `strings.emptyState` instead. */\n emptyMessage?: string;\n}\n\nexport function ObjectRepeater({\n name,\n fields: fieldDefs,\n addButtonText,\n emptyMessage,\n invalid,\n sortable = false,\n strings: stringsProp,\n}: ObjectRepeaterProps) {\n const strings = useStrings(defaultObjectRepeaterStrings, {\n ...(addButtonText !== undefined ? { addButton: addButtonText } : {}),\n ...(emptyMessage !== undefined ? { emptyState: emptyMessage } : {}),\n ...stringsProp,\n });\n const { control, register } = useFormContext();\n const { fields, append, remove, move } = useFieldArray({\n control,\n name,\n });\n\n const createEmptyObject = useCallback(() => {\n return fieldDefs.reduce(\n (acc, field) => {\n acc[field.name] = '';\n return acc;\n },\n {} as Record<string, string>\n );\n }, [fieldDefs]);\n\n return (\n <Repeater\n items={fields}\n sortable={sortable}\n rowVariant=\"card\"\n removeVariant=\"ghost\"\n onAdd={() => append(createEmptyObject())}\n onRemove={(index) => remove(index)}\n onMove={(from, to) => move(from, to)}\n strings={{\n emptyState: strings.emptyState,\n addButton: strings.addButton,\n removeAriaLabel: strings.removeAriaLabel,\n }}\n renderRow={(_field, { index }) => (\n <div className={cn('object-repeater--component', 'space-y-3')}>\n {fieldDefs.map((fieldDef) => {\n const fieldPath = `${name}.${index}.${fieldDef.name}`;\n return (\n <FormField\n key={fieldDef.name}\n label={fieldDef.label}\n required={fieldDef.required}\n hint={fieldDef.hint}\n htmlFor={fieldPath}\n >\n {fieldDef.type === 'textarea' ? (\n <Textarea\n {...register(fieldPath)}\n id={fieldPath}\n placeholder={fieldDef.placeholder}\n minRows={3}\n invalid={invalid}\n />\n ) : (\n <Input\n {...register(fieldPath)}\n id={fieldPath}\n type={fieldDef.type || 'text'}\n placeholder={fieldDef.placeholder}\n invalid={invalid}\n />\n )}\n </FormField>\n );\n })}\n </div>\n )}\n />\n );\n}\n\nObjectRepeater.displayName = 'ObjectRepeater';\n","/**\n * List — RHF-driven sortable list of plain strings. Identical use-case to\n * `<StringRepeater sortable>` and now built on the same `<Repeater>`\n * primitive so the visual chrome (drag handle, ghost X remove, dashed\n * empty state, \"+ add\" button) matches the rest of the repeater family\n * exactly. Kept as a separate export because it ships with `sortable`\n * on by default — `<StringRepeater>` ships with sortable off.\n */\nimport { useFieldArray, useFormContext } from 'react-hook-form';\n\nimport { useStrings, type StringsProp } from '@/lib/strings';\n\nimport { Input } from './input';\nimport { Repeater } from './repeater';\nimport { defaultRepeaterStrings } from './repeaters.strings';\n\nexport interface ListStrings {\n addButton: string;\n emptyState: string;\n dragHandle: string;\n removeAriaLabel: string;\n}\n\nexport const defaultListStrings: ListStrings = {\n addButton: 'Add item',\n emptyState: defaultRepeaterStrings.emptyState,\n dragHandle: 'Drag to reorder',\n removeAriaLabel: defaultRepeaterStrings.removeAriaLabel,\n};\n\nexport interface ListProps {\n /** Field name in form */\n name: string;\n\n /** Input placeholder */\n placeholder?: string;\n\n /** @deprecated Use `strings.addButton` instead. */\n addButtonText?: string;\n\n /** @deprecated Use `strings.emptyState` instead. */\n emptyMessage?: string;\n\n /** Disable drag-to-reorder. Default `false` (sortable on). */\n disableSort?: boolean;\n\n /** Error state for styling (passed from FormField) */\n invalid?: boolean;\n\n /** String overrides merged over defaults. */\n strings?: StringsProp<ListStrings>;\n}\n\nexport function List({\n name,\n placeholder,\n addButtonText,\n emptyMessage,\n disableSort = false,\n invalid,\n strings: stringsProp,\n}: ListProps) {\n const strings = useStrings(defaultListStrings, {\n ...(addButtonText !== undefined ? { addButton: addButtonText } : {}),\n ...(emptyMessage !== undefined ? { emptyState: emptyMessage } : {}),\n ...(stringsProp ?? {}),\n });\n const { control, register } = useFormContext();\n const { fields, append, remove, move } = useFieldArray({ control, name });\n\n return (\n <Repeater className=\"list--component\"\n items={fields}\n sortable={!disableSort}\n onAdd={() => append('')}\n onRemove={(index) => remove(index)}\n onMove={(from, to) => move(from, to)}\n strings={{\n emptyState: strings.emptyState,\n addButton: strings.addButton,\n removeAriaLabel: strings.removeAriaLabel,\n dragHandleAriaLabel: strings.dragHandle,\n }}\n renderRow={(_field, { index }) => (\n <Input\n {...register(`${name}.${index}`)}\n placeholder={placeholder}\n invalid={invalid}\n />\n )}\n />\n );\n}\n\nList.displayName = 'List';\n","/**\n * PillRadioGroup — compact, inline single-select rendered as connected pill\n * buttons. Best for 2–4 options where a full `<Select>` is too heavy and\n * cards are too tall (e.g. timeframe toggles, view-mode switchers).\n *\n * Custom-styled buttons rather than the shadcn ToggleGroup primitive: the\n * primitive strips inner rounding when spacing=0, which doesn't match this\n * design system's pill connector style.\n */\nimport * as React from 'react';\n\nimport { cn } from '@/lib/utils';\nimport { useFormsConfig } from '@/lib/ui-provider';\nimport { resolveFormControlSize } from '../form-sizing';\nimport {\n\tchoicePillSizeTokens,\n\ttype ChoiceGroupBaseProps,\n\ttype ChoiceOptionBase,\n} from './choice-types';\n\nexport interface PillRadioGroupOption extends ChoiceOptionBase {}\n\nexport interface PillRadioGroupProps\n\textends Omit<ChoiceGroupBaseProps, 'name'> {\n\tname: string;\n\tvalue: string | null | undefined;\n\toptions: PillRadioGroupOption[];\n\tonChange: (value: string | null) => void;\n\t/** Allow deselecting (click active pill to clear). Default false. */\n\tallowClear?: boolean;\n\t/** Stretch pills to fill the container. */\n\tfullWidth?: boolean;\n}\n\nexport function PillRadioGroup({\n\tname,\n\tvalue,\n\toptions,\n\tonChange,\n\tallowClear = false,\n\tsize: sizeProp,\n\tfullWidth = false,\n\tdisabled = false,\n\tinvalid = false,\n\tclassName,\n}: PillRadioGroupProps) {\n\tconst { defaultControlSize } = useFormsConfig();\n\tconst size = resolveFormControlSize(sizeProp, defaultControlSize);\n\n\tconst handleClick = React.useCallback(\n\t\t(optionValue: string) => {\n\t\t\tif (optionValue === value) {\n\t\t\t\tif (allowClear) onChange(null);\n\t\t\t} else {\n\t\t\t\tonChange(optionValue);\n\t\t\t}\n\t\t},\n\t\t[allowClear, onChange, value],\n\t);\n\n\treturn (\n\t\t<div\n\t\t\tdata-name={name}\n\t\t\trole=\"radiogroup\"\n\t\t\taria-invalid={invalid || undefined}\n\t\t\tclassName={cn('pill-radio-group--component', \n\t\t\t\t'border-input inline-flex items-center overflow-hidden rounded-lg border',\n\t\t\t\tfullWidth && 'w-full',\n\t\t\t\t'aria-invalid:border-destructive aria-invalid:ring-2 aria-invalid:ring-destructive/20',\n\t\t\t\tdisabled && 'pointer-events-none opacity-50',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{options.map((option, index) => {\n\t\t\t\tconst isSelected = option.value === value;\n\t\t\t\tconst Icon = option.icon;\n\t\t\t\tconst optionLabel =\n\t\t\t\t\ttypeof option.label === 'string' ? option.label : undefined;\n\t\t\t\treturn (\n\t\t\t\t\t<button\n\t\t\t\t\t\tkey={option.value}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\trole=\"radio\"\n\t\t\t\t\t\taria-checked={isSelected}\n\t\t\t\t\t\taria-label={optionLabel || option.value}\n\t\t\t\t\t\tdisabled={disabled || option.disabled}\n\t\t\t\t\t\tonClick={() => handleClick(option.value)}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'inline-flex select-none items-center justify-center font-medium transition-colors',\n\t\t\t\t\t\t\t'focus-visible:ring-ring/50 outline-none focus-visible:z-10 focus-visible:ring-2',\n\t\t\t\t\t\t\t'disabled:pointer-events-none disabled:opacity-50',\n\t\t\t\t\t\t\tchoicePillSizeTokens[size],\n\t\t\t\t\t\t\tfullWidth && 'flex-1',\n\t\t\t\t\t\t\tindex > 0 && 'border-input border-l',\n\t\t\t\t\t\t\tisSelected\n\t\t\t\t\t\t\t\t? 'bg-primary text-primary-foreground'\n\t\t\t\t\t\t\t\t: 'bg-background text-foreground hover:bg-muted',\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{!!Icon && <Icon className={cn('size-3.5', option.label && 'mr-1.5')} />}\n\t\t\t\t\t\t{option.label}\n\t\t\t\t\t</button>\n\t\t\t\t);\n\t\t\t})}\n\t\t</div>\n\t);\n}\n\nPillRadioGroup.displayName = 'PillRadioGroup';\n","import { useFormContext } from 'react-hook-form';\n\nimport { Input } from './input';\nimport { Textarea } from './textarea';\n\nimport { cn } from '@/lib/utils';\nexport interface LocalizedStringFieldProps {\n /** Field name (path in form values) - should point to object with locale keys (e.g., 'en' and 'bg') */\n name: string;\n\n /** Input type */\n type?: 'text' | 'textarea' | 'number';\n\n /** Placeholder text */\n placeholder?: string;\n\n /** Primary locale code (e.g., 'en') */\n primaryLocale: string;\n\n /** Secondary locale code (e.g., 'bg') */\n secondaryLocale: string;\n\n /** Current active locale ('primary' or 'secondary') */\n activeLocale: 'primary' | 'secondary';\n\n /** Error state for styling (passed from FormField) */\n invalid?: boolean;\n\n /** Additional class names */\n className?: string;\n}\n\n/**\n * LocalizedStringField - Input for bilingual string fields\n */\nexport function LocalizedStringField({\n name,\n type = 'text',\n placeholder,\n primaryLocale,\n secondaryLocale,\n activeLocale,\n invalid,\n className,\n}: LocalizedStringFieldProps) {\n const { register } = useFormContext();\n\n const localeKey = activeLocale === 'primary' ? primaryLocale : secondaryLocale;\n const fieldName = `${name}.${localeKey}`;\n\n if (type === 'textarea') {\n return (\n <Textarea\n {...register(fieldName)}\n placeholder={placeholder}\n minRows={3}\n invalid={invalid}\n className={cn('localized-string-field--component', className)}\n />\n );\n }\n\n return (\n <Input\n {...register(fieldName)}\n type={type === 'number' ? 'number' : 'text'}\n placeholder={placeholder}\n invalid={invalid}\n className={className}\n />\n );\n}\n\nLocalizedStringField.displayName = 'LocalizedStringField';\n","import { useFormContext } from 'react-hook-form';\n\nimport { Label } from '@/components/typography';\nimport { Input } from './input';\nimport { Textarea } from './textarea';\n\nexport interface LocalizedObjectFieldDef {\n /** Field name within the object */\n name: string;\n\n /** Label for the field */\n label: string;\n\n /** Input type */\n type?: 'text' | 'textarea' | 'number';\n\n /** Placeholder text */\n placeholder?: string;\n\n /** Whether the field is required */\n required?: boolean;\n}\n\nexport interface LocalizedObjectFieldProps {\n /** Field name (path in form values) - should point to object with locale keys */\n name: string;\n\n /** Field definitions for the object properties */\n fields: LocalizedObjectFieldDef[];\n\n /** Primary locale code (e.g., 'en') */\n primaryLocale: string;\n\n /** Secondary locale code (e.g., 'bg') */\n secondaryLocale: string;\n\n /** Current active locale ('primary' or 'secondary') */\n activeLocale: 'primary' | 'secondary';\n\n /** Error state for styling (passed from FormField) */\n invalid?: boolean;\n\n /** Additional class names */\n className?: string;\n}\n\n/**\n * LocalizedObjectField - Input for bilingual object fields\n */\nexport function LocalizedObjectField({\n name,\n fields,\n primaryLocale,\n secondaryLocale,\n activeLocale,\n invalid,\n className,\n}: LocalizedObjectFieldProps) {\n const { register } = useFormContext();\n\n const localeKey = activeLocale === 'primary' ? primaryLocale : secondaryLocale;\n\n return (\n <div className={`w-full space-y-3 rounded-md border p-4 ${className ?? ''}`}>\n {fields.map((field) => {\n const fieldName = `${name}.${localeKey}.${field.name}`;\n\n return (\n <div key={field.name} className=\"w-full space-y-1.5\">\n <Label htmlFor={fieldName}>\n {field.label}\n {!!field.required && <span className=\"text-destructive ml-1\">*</span>}\n </Label>\n {field.type === 'textarea' ? (\n <Textarea\n {...register(fieldName)}\n placeholder={field.placeholder}\n minRows={3}\n invalid={invalid}\n />\n ) : (\n <Input\n {...register(fieldName)}\n type={field.type === 'number' ? 'number' : 'text'}\n placeholder={field.placeholder}\n invalid={invalid}\n />\n )}\n </div>\n );\n })}\n </div>\n );\n}\n\nLocalizedObjectField.displayName = 'LocalizedObjectField';\n","/**\n * LocalizedStringRepeater — bilingual variant of `<StringRepeater>`. The\n * `name` prop points at an object whose keys are locale codes and whose\n * values are string arrays; `activeLocale` selects which locale's array to\n * edit. Built on the shared `<Repeater>` primitive for visual parity with\n * the rest of the repeater family.\n */\nimport { useFieldArray, useFormContext } from 'react-hook-form';\n\nimport { useStrings, type StringsProp } from '@/lib/strings';\n\nimport { Repeater } from './repeater';\nimport { defaultRepeaterStrings } from './repeaters.strings';\nimport { Textarea } from './textarea';\n\nexport interface LocalizedStringRepeaterStrings {\n placeholder: string;\n addButton: string;\n emptyState: string;\n removeAriaLabel: string;\n}\n\nexport const defaultLocalizedStringRepeaterStrings: LocalizedStringRepeaterStrings = {\n placeholder: 'Enter value',\n addButton: defaultRepeaterStrings.addItem,\n emptyState: defaultRepeaterStrings.emptyState,\n removeAriaLabel: defaultRepeaterStrings.removeAriaLabel,\n};\n\nexport interface LocalizedStringRepeaterProps {\n /** Field name (path in form values) - should point to object with locale array keys */\n name: string;\n\n /** @deprecated Use `strings.placeholder` instead. */\n placeholder?: string;\n\n /** @deprecated Use `strings.addButton` instead. */\n addButtonText?: string;\n\n /** @deprecated Use `strings.emptyState` instead. */\n emptyMessage?: string;\n\n /** Primary locale code (e.g., 'en') */\n primaryLocale: string;\n\n /** Secondary locale code (e.g., 'bg') */\n secondaryLocale: string;\n\n /** Current active locale ('primary' or 'secondary') */\n activeLocale: 'primary' | 'secondary';\n\n /** Enable drag-to-reorder. Default `false`. */\n sortable?: boolean;\n\n /** Error state for styling (passed from FormField) */\n invalid?: boolean;\n\n /** String overrides merged over defaults. */\n strings?: StringsProp<LocalizedStringRepeaterStrings>;\n}\n\nexport function LocalizedStringRepeater({\n name,\n placeholder,\n addButtonText,\n emptyMessage,\n primaryLocale,\n secondaryLocale,\n activeLocale,\n invalid,\n sortable = false,\n strings: stringsProp,\n}: LocalizedStringRepeaterProps) {\n const strings = useStrings(defaultLocalizedStringRepeaterStrings, {\n ...(placeholder !== undefined ? { placeholder } : {}),\n ...(addButtonText !== undefined ? { addButton: addButtonText } : {}),\n ...(emptyMessage !== undefined ? { emptyState: emptyMessage } : {}),\n ...(stringsProp ?? {}),\n });\n const { control, register } = useFormContext();\n\n const localeKey = activeLocale === 'primary' ? primaryLocale : secondaryLocale;\n const fieldName = `${name}.${localeKey}`;\n\n const { fields, append, remove, move } = useFieldArray({\n control,\n name: fieldName,\n });\n\n return (\n <Repeater className=\"localized-string-repeater--component\"\n items={fields}\n sortable={sortable}\n onAdd={() => append('')}\n onRemove={(index) => remove(index)}\n onMove={(from, to) => move(from, to)}\n strings={{\n emptyState: strings.emptyState,\n addButton: strings.addButton,\n removeAriaLabel: strings.removeAriaLabel,\n }}\n renderRow={(_field, { index }) => (\n <Textarea\n {...register(`${fieldName}.${index}`)}\n placeholder={strings.placeholder}\n minRows={2}\n invalid={invalid}\n />\n )}\n />\n );\n}\n\nLocalizedStringRepeater.displayName = 'LocalizedStringRepeater';\n","import { useMemo } from 'react';\nimport type { SubmitHandler } from 'react-hook-form';\nimport { useForm } from 'react-hook-form';\n\nimport { ControlledFormField } from './form-field';\nimport { Input } from './fields';\nimport { Text } from '@/components/typography';\n\nimport { cn } from '@/lib/utils';\nexport type ErrorBag = Record<string, string | string[] | undefined>;\n\nexport interface OperationPasswordFormProps {\n\tformId: string;\n\tonSubmit: (data: { password: string }) => Promise<void>;\n\terrors?: ErrorBag;\n\tisLoading?: boolean;\n\tlabel: string;\n}\n\ninterface PasswordFormValues {\n\tpassword: string;\n}\n\nexport function OperationPasswordForm(props: OperationPasswordFormProps) {\n\tconst { formId, onSubmit, errors, isLoading, label } = props;\n\n\tconst getError = (field: keyof PasswordFormValues): string | undefined => {\n\t\tconst value = errors?.[field];\n\t\treturn Array.isArray(value) ? value[0] : value;\n\t};\n\tconst passwordError = getError('password');\n\tconst passwordErrorFn = passwordError ? () => passwordError : undefined;\n\n\tconst topLevelError =\n\t\t(Array.isArray(errors?.general) ? errors.general[0] : errors?.general) ||\n\t\t(Array.isArray(errors?.server) ? errors.server[0] : errors?.server);\n\n\tconst defaultValues = useMemo<PasswordFormValues>(() => ({ password: '' }), []);\n\n\tconst { handleSubmit, control } = useForm<PasswordFormValues>({ defaultValues });\n\n\tconst submit: SubmitHandler<PasswordFormValues> = async (values) => {\n\t\tawait onSubmit({ password: values.password });\n\t};\n\n\tconst disabled = Boolean(isLoading);\n\n\treturn (\n\t\t<form\n\t\t\tid={formId}\n\t\t\tonSubmit={handleSubmit(submit)}\n\t\t\tclassName={cn('operation-password-form--component', 'space-y-4')}\n\t\t>\n\t\t\t{Boolean(topLevelError) && (\n\t\t\t\t<Text\n\t\t\t\t\ttype=\"error\"\n\t\t\t\t>\n\t\t\t\t\t{topLevelError}\n\t\t\t\t</Text>\n\t\t\t)}\n\n\t\t\t<ControlledFormField\n\t\t\t\tname=\"password\"\n\t\t\t\tcontrol={control}\n\t\t\t\terror={passwordErrorFn}\n\t\t\t\tlabel={label}\n\t\t\t\trequired\n\t\t\t>\n\t\t\t\t{(field, _error, invalid) => (\n\t\t\t\t\t<Input\n\t\t\t\t\t\ttype=\"password\"\n\t\t\t\t\t\tvalue={field.value ?? ''}\n\t\t\t\t\t\tonChange={field.onChange}\n\t\t\t\t\t\tonBlur={field.onBlur}\n\t\t\t\t\t\tname={field.name}\n\t\t\t\t\t\tinvalid={invalid}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tautoFocus\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</ControlledFormField>\n\t\t</form>\n\t);\n}\n\nOperationPasswordForm.displayName = 'OperationPasswordForm';\n"],"mappings":"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"}