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-DaZ3LsYc.cjs","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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"}