admin-ui-starter-kit 0.6.4 → 0.6.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1176) hide show
  1. package/.agents/skills/component-library-rules/references/components/base__cards.md +3 -4
  2. package/.agents/skills/component-library-rules/references/components/base__table.md +32 -11
  3. package/.agents/skills/component-library-rules/references/components/layout__layout-containers.md +2 -2
  4. package/dist/_shared/accordion-BRj4TDQx.js +135 -0
  5. package/dist/_shared/accordion-BRj4TDQx.js.map +1 -0
  6. package/dist/_shared/accordion-DvlDjk29.cjs +2 -0
  7. package/dist/_shared/accordion-DvlDjk29.cjs.map +1 -0
  8. package/dist/_shared/action-menu-BrHF4nss.cjs +2 -0
  9. package/dist/_shared/action-menu-BrHF4nss.cjs.map +1 -0
  10. package/dist/_shared/action-menu-Crn22LKo.js +96 -0
  11. package/dist/_shared/action-menu-Crn22LKo.js.map +1 -0
  12. package/dist/_shared/ai-artifact-BHgd3agA.js +1099 -0
  13. package/dist/_shared/ai-artifact-BHgd3agA.js.map +1 -0
  14. package/dist/_shared/ai-artifact-BRM5cvGv.cjs +3 -0
  15. package/dist/_shared/ai-artifact-BRM5cvGv.cjs.map +1 -0
  16. package/dist/_shared/alert-CMVVt2Br.js +81 -0
  17. package/dist/_shared/alert-CMVVt2Br.js.map +1 -0
  18. package/dist/_shared/alert-Dmhtbmpg.cjs +2 -0
  19. package/dist/_shared/alert-Dmhtbmpg.cjs.map +1 -0
  20. package/dist/_shared/app-shell-BZQJfTkf.cjs +2 -0
  21. package/dist/_shared/app-shell-BZQJfTkf.cjs.map +1 -0
  22. package/dist/_shared/app-shell-Da6GHxTZ.js +69 -0
  23. package/dist/_shared/app-shell-Da6GHxTZ.js.map +1 -0
  24. package/dist/_shared/auth-DZW6NkJx.cjs +2 -0
  25. package/dist/_shared/auth-DZW6NkJx.cjs.map +1 -0
  26. package/dist/_shared/auth-Dh790NI_.js +643 -0
  27. package/dist/_shared/auth-Dh790NI_.js.map +1 -0
  28. package/dist/_shared/badge-B8xGFpfM.cjs +2 -0
  29. package/dist/_shared/badge-B8xGFpfM.cjs.map +1 -0
  30. package/dist/_shared/badge-BYNwSWh5.js +110 -0
  31. package/dist/_shared/badge-BYNwSWh5.js.map +1 -0
  32. package/dist/_shared/breadcrumbs-CuT0YIfo.js +105 -0
  33. package/dist/_shared/breadcrumbs-CuT0YIfo.js.map +1 -0
  34. package/dist/_shared/breadcrumbs-jNzlYqS9.cjs +2 -0
  35. package/dist/_shared/breadcrumbs-jNzlYqS9.cjs.map +1 -0
  36. package/dist/_shared/button-BMiPFJIb.cjs +2 -0
  37. package/dist/_shared/button-BMiPFJIb.cjs.map +1 -0
  38. package/dist/_shared/button-vv59_uS_.js +189 -0
  39. package/dist/_shared/button-vv59_uS_.js.map +1 -0
  40. package/dist/_shared/buttons-CvqIMv3I.js +137 -0
  41. package/dist/_shared/buttons-CvqIMv3I.js.map +1 -0
  42. package/dist/_shared/buttons-tCkWktN3.cjs +2 -0
  43. package/dist/_shared/buttons-tCkWktN3.cjs.map +1 -0
  44. package/dist/_shared/card-radio-group-Bhe8gAbH.js +150 -0
  45. package/dist/_shared/card-radio-group-Bhe8gAbH.js.map +1 -0
  46. package/dist/_shared/card-radio-group-CdG1zr8M.cjs +2 -0
  47. package/dist/_shared/card-radio-group-CdG1zr8M.cjs.map +1 -0
  48. package/dist/_shared/cards-Cu6p1Brd.cjs +2 -0
  49. package/dist/_shared/cards-Cu6p1Brd.cjs.map +1 -0
  50. package/dist/_shared/cards-cQ9lL6zy.js +354 -0
  51. package/dist/_shared/cards-cQ9lL6zy.js.map +1 -0
  52. package/dist/_shared/combobox-BGYjyXeN.cjs +2 -0
  53. package/dist/_shared/combobox-BGYjyXeN.cjs.map +1 -0
  54. package/dist/_shared/combobox-DTwomOBt.js +954 -0
  55. package/dist/_shared/combobox-DTwomOBt.js.map +1 -0
  56. package/dist/_shared/comments-C97vL5km.js +952 -0
  57. package/dist/_shared/comments-C97vL5km.js.map +1 -0
  58. package/dist/_shared/comments-DBe6dP-d.cjs +2 -0
  59. package/dist/_shared/comments-DBe6dP-d.cjs.map +1 -0
  60. package/dist/_shared/containers-CB7zaAvN.cjs +2 -0
  61. package/dist/_shared/containers-CB7zaAvN.cjs.map +1 -0
  62. package/dist/_shared/containers-CLBmhGfs.js +48 -0
  63. package/dist/_shared/containers-CLBmhGfs.js.map +1 -0
  64. package/dist/_shared/copyable-BgFdERqs.js +38 -0
  65. package/dist/_shared/copyable-BgFdERqs.js.map +1 -0
  66. package/dist/_shared/copyable-Ce8rmE-V.cjs +2 -0
  67. package/dist/_shared/copyable-Ce8rmE-V.cjs.map +1 -0
  68. package/dist/_shared/data-display-DUWxoDKq.js +1873 -0
  69. package/dist/_shared/data-display-DUWxoDKq.js.map +1 -0
  70. package/dist/_shared/data-display-o-rbMuIA.cjs +2 -0
  71. package/dist/_shared/data-display-o-rbMuIA.cjs.map +1 -0
  72. package/dist/_shared/date-picker-Cxx9jllA.js +1361 -0
  73. package/dist/_shared/date-picker-Cxx9jllA.js.map +1 -0
  74. package/dist/_shared/date-picker-DE5A8yqN.cjs +2 -0
  75. package/dist/_shared/date-picker-DE5A8yqN.cjs.map +1 -0
  76. package/dist/_shared/date-pickers-Dex1Mfye.cjs +2 -0
  77. package/dist/_shared/date-pickers-Dex1Mfye.cjs.map +1 -0
  78. package/dist/_shared/date-pickers-m0dpDcqH.js +329 -0
  79. package/dist/_shared/date-pickers-m0dpDcqH.js.map +1 -0
  80. package/dist/_shared/display-Bro3Kufg.js +986 -0
  81. package/dist/_shared/display-Bro3Kufg.js.map +1 -0
  82. package/dist/_shared/display-CRQjSjgB.cjs +2 -0
  83. package/dist/_shared/display-CRQjSjgB.cjs.map +1 -0
  84. package/dist/_shared/form-sizing-DJus3nK3.cjs +2 -0
  85. package/dist/_shared/form-sizing-DJus3nK3.cjs.map +1 -0
  86. package/dist/_shared/form-sizing-DWjJsQSR.js +42 -0
  87. package/dist/_shared/form-sizing-DWjJsQSR.js.map +1 -0
  88. package/dist/_shared/forms-D-SNQmtB.cjs +2 -0
  89. package/dist/_shared/forms-D-SNQmtB.cjs.map +1 -0
  90. package/dist/_shared/forms-p7cfzJwf.js +3533 -0
  91. package/dist/_shared/forms-p7cfzJwf.js.map +1 -0
  92. package/dist/_shared/header-8C71wVRp.js +447 -0
  93. package/dist/_shared/header-8C71wVRp.js.map +1 -0
  94. package/dist/_shared/header-CYgFCnjZ.cjs +2 -0
  95. package/dist/_shared/header-CYgFCnjZ.cjs.map +1 -0
  96. package/dist/_shared/hooks-Ci1LFWRG.js +95 -0
  97. package/dist/_shared/hooks-Ci1LFWRG.js.map +1 -0
  98. package/dist/_shared/hooks-Cjl7LJpn.cjs +2 -0
  99. package/dist/_shared/hooks-Cjl7LJpn.cjs.map +1 -0
  100. package/dist/_shared/input-BgcP6x4C.js +182 -0
  101. package/dist/_shared/input-BgcP6x4C.js.map +1 -0
  102. package/dist/_shared/input-DV3g7Fm5.cjs +2 -0
  103. package/dist/_shared/input-DV3g7Fm5.cjs.map +1 -0
  104. package/dist/_shared/item-D7GTzvhf.js +226 -0
  105. package/dist/_shared/item-D7GTzvhf.js.map +1 -0
  106. package/dist/_shared/item-DTrnHpfm.cjs +2 -0
  107. package/dist/_shared/item-DTrnHpfm.cjs.map +1 -0
  108. package/dist/_shared/layout-BExg7Vlx.js +261 -0
  109. package/dist/_shared/layout-BExg7Vlx.js.map +1 -0
  110. package/dist/_shared/layout-CKRD_goE.cjs +2 -0
  111. package/dist/_shared/layout-CKRD_goE.cjs.map +1 -0
  112. package/dist/_shared/layout.types-CXFAjJCj.cjs +2 -0
  113. package/dist/_shared/layout.types-CXFAjJCj.cjs.map +1 -0
  114. package/dist/_shared/layout.types-ip8BYRa7.js +28 -0
  115. package/dist/_shared/layout.types-ip8BYRa7.js.map +1 -0
  116. package/dist/_shared/mentions-BtGhYisA.js +506 -0
  117. package/dist/_shared/mentions-BtGhYisA.js.map +1 -0
  118. package/dist/_shared/mentions-CnVOuQJU.cjs +2 -0
  119. package/dist/_shared/mentions-CnVOuQJU.cjs.map +1 -0
  120. package/dist/_shared/money-display-BvVpRUs5.cjs +2 -0
  121. package/dist/_shared/money-display-BvVpRUs5.cjs.map +1 -0
  122. package/dist/_shared/money-display-D6Qtvyyv.js +198 -0
  123. package/dist/_shared/money-display-D6Qtvyyv.js.map +1 -0
  124. package/dist/_shared/navigation-C4dO1I82.cjs +2 -0
  125. package/dist/_shared/navigation-C4dO1I82.cjs.map +1 -0
  126. package/dist/_shared/navigation-Ct-LFlpY.js +436 -0
  127. package/dist/_shared/navigation-Ct-LFlpY.js.map +1 -0
  128. package/dist/_shared/overlays-ChyqXn0n.js +735 -0
  129. package/dist/_shared/overlays-ChyqXn0n.js.map +1 -0
  130. package/dist/_shared/overlays-Dn2bt3CL.cjs +2 -0
  131. package/dist/_shared/overlays-Dn2bt3CL.cjs.map +1 -0
  132. package/dist/_shared/popover-menu-17Dxn25O.js +93 -0
  133. package/dist/_shared/popover-menu-17Dxn25O.js.map +1 -0
  134. package/dist/_shared/popover-menu-DXVN0bvj.cjs +2 -0
  135. package/dist/_shared/popover-menu-DXVN0bvj.cjs.map +1 -0
  136. package/dist/_shared/rich-text-editor-BRpcNkj1.js +620 -0
  137. package/dist/_shared/rich-text-editor-BRpcNkj1.js.map +1 -0
  138. package/dist/_shared/rich-text-editor-BXxGNbmI.cjs +2 -0
  139. package/dist/_shared/rich-text-editor-BXxGNbmI.cjs.map +1 -0
  140. package/dist/_shared/settings-CW9yzfQM.js +143 -0
  141. package/dist/_shared/settings-CW9yzfQM.js.map +1 -0
  142. package/dist/_shared/settings-cCPrw7si.cjs +2 -0
  143. package/dist/_shared/settings-cCPrw7si.cjs.map +1 -0
  144. package/dist/_shared/sidebar-Cq6J_I4l.cjs +2 -0
  145. package/dist/_shared/sidebar-Cq6J_I4l.cjs.map +1 -0
  146. package/dist/_shared/sidebar-DtF_ihE3.js +548 -0
  147. package/dist/_shared/sidebar-DtF_ihE3.js.map +1 -0
  148. package/dist/_shared/spinner-DY2de3Wt.cjs +2 -0
  149. package/dist/_shared/spinner-DY2de3Wt.cjs.map +1 -0
  150. package/dist/_shared/spinner-ZmIq_zsx.js +67 -0
  151. package/dist/_shared/spinner-ZmIq_zsx.js.map +1 -0
  152. package/dist/_shared/table-BBWc-wIw.js +1377 -0
  153. package/dist/_shared/table-BBWc-wIw.js.map +1 -0
  154. package/dist/_shared/table-DMDkdLzV.cjs +2 -0
  155. package/dist/_shared/table-DMDkdLzV.cjs.map +1 -0
  156. package/dist/_shared/textarea-C1TeJ7Vt.cjs +2 -0
  157. package/dist/_shared/textarea-C1TeJ7Vt.cjs.map +1 -0
  158. package/dist/_shared/textarea-CGRkgH5z.js +118 -0
  159. package/dist/_shared/textarea-CGRkgH5z.js.map +1 -0
  160. package/dist/_shared/typography-CzFVA1w1.js +201 -0
  161. package/dist/_shared/typography-CzFVA1w1.js.map +1 -0
  162. package/dist/_shared/typography-GtkgK9QX.cjs +2 -0
  163. package/dist/_shared/typography-GtkgK9QX.cjs.map +1 -0
  164. package/dist/_shared/workspace-BF5BtDhD.cjs +2 -0
  165. package/dist/_shared/workspace-BF5BtDhD.cjs.map +1 -0
  166. package/dist/_shared/workspace-IvsczduM.js +357 -0
  167. package/dist/_shared/workspace-IvsczduM.js.map +1 -0
  168. package/dist/components/base/accordion/index.cjs +1 -1
  169. package/dist/components/base/accordion/index.js +1 -1
  170. package/dist/components/base/badge/badge.d.ts.map +1 -1
  171. package/dist/components/base/badge/index.cjs +1 -1
  172. package/dist/components/base/badge/index.js +1 -1
  173. package/dist/components/base/buttons/index.cjs +1 -1
  174. package/dist/components/base/buttons/index.js +2 -2
  175. package/dist/components/base/cards/index.cjs +1 -1
  176. package/dist/components/base/cards/index.js +1 -1
  177. package/dist/components/base/cards/partials/card-primitives.d.ts.map +1 -1
  178. package/dist/components/base/cards/smart-card.types.d.ts +3 -3
  179. package/dist/components/base/carousel/index.cjs +1 -1
  180. package/dist/components/base/carousel/index.js +1 -1
  181. package/dist/components/base/combobox/index.cjs +1 -1
  182. package/dist/components/base/combobox/index.js +1 -1
  183. package/dist/components/base/copyable/index.cjs +1 -1
  184. package/dist/components/base/copyable/index.js +1 -1
  185. package/dist/components/base/currency/index.cjs +1 -1
  186. package/dist/components/base/currency/index.js +1 -1
  187. package/dist/components/base/date-pickers/index.cjs +1 -1
  188. package/dist/components/base/date-pickers/index.js +2 -2
  189. package/dist/components/base/display/chart.cjs +1 -1
  190. package/dist/components/base/display/chart.js +1 -1
  191. package/dist/components/base/display/index.cjs +1 -1
  192. package/dist/components/base/display/index.js +3 -3
  193. package/dist/components/base/event-calendar/index.cjs +1 -1
  194. package/dist/components/base/event-calendar/index.js +3 -3
  195. package/dist/components/base/forms/index.cjs +1 -1
  196. package/dist/components/base/forms/index.js +5 -5
  197. package/dist/components/base/item/index.cjs +1 -1
  198. package/dist/components/base/item/index.js +1 -1
  199. package/dist/components/base/map/index.cjs +1 -1
  200. package/dist/components/base/map/index.js +2 -2
  201. package/dist/components/base/navigation/index.cjs +1 -1
  202. package/dist/components/base/navigation/index.js +3 -3
  203. package/dist/components/base/popover-menu/index.cjs +1 -1
  204. package/dist/components/base/popover-menu/index.js +1 -1
  205. package/dist/components/base/spinner/index.cjs +1 -1
  206. package/dist/components/base/spinner/index.js +1 -1
  207. package/dist/components/base/table/data-table.d.ts.map +1 -1
  208. package/dist/components/base/table/index.cjs +1 -1
  209. package/dist/components/base/table/index.js +1 -1
  210. package/dist/components/composed/admin/index.cjs +1 -1
  211. package/dist/components/composed/admin/index.js +11 -11
  212. package/dist/components/composed/ai/index.cjs +1 -1
  213. package/dist/components/composed/ai/index.js +8 -8
  214. package/dist/components/composed/analytics/index.cjs +1 -1
  215. package/dist/components/composed/analytics/index.js +3 -3
  216. package/dist/components/composed/cards/index.cjs +1 -1
  217. package/dist/components/composed/cards/index.js +7 -7
  218. package/dist/components/composed/commerce/index.cjs +1 -1
  219. package/dist/components/composed/commerce/index.js +8 -8
  220. package/dist/components/composed/dark-surfaces/index.cjs +1 -1
  221. package/dist/components/composed/dark-surfaces/index.js +4 -4
  222. package/dist/components/composed/data-display/index.cjs +1 -1
  223. package/dist/components/composed/data-display/index.js +1 -1
  224. package/dist/components/composed/data-display/metadata/metadata-list.d.ts.map +1 -1
  225. package/dist/components/composed/navigation/index.cjs +1 -1
  226. package/dist/components/composed/navigation/index.js +5 -5
  227. package/dist/components/composed/onboarding/index.cjs +1 -1
  228. package/dist/components/composed/onboarding/index.js +3 -3
  229. package/dist/components/composed/timelines/index.cjs +1 -1
  230. package/dist/components/composed/timelines/index.js +3 -3
  231. package/dist/components/features/activities/index.cjs +1 -1
  232. package/dist/components/features/activities/index.js +4 -4
  233. package/dist/components/features/ai-chat/index.cjs +1 -1
  234. package/dist/components/features/ai-chat/index.js +5 -5
  235. package/dist/components/features/card/index.cjs +1 -1
  236. package/dist/components/features/card/index.js +4 -4
  237. package/dist/components/features/comments/index.cjs +1 -1
  238. package/dist/components/features/comments/index.js +2 -2
  239. package/dist/components/features/data-view/index.cjs +1 -1
  240. package/dist/components/features/data-view/index.js +2 -2
  241. package/dist/components/features/event-log/index.cjs +1 -1
  242. package/dist/components/features/event-log/index.js +4 -4
  243. package/dist/components/features/filters/index.cjs +1 -1
  244. package/dist/components/features/filters/index.js +6 -6
  245. package/dist/components/features/global-search/index.cjs +1 -1
  246. package/dist/components/features/global-search/index.js +4 -4
  247. package/dist/components/features/kanban/index.cjs +1 -1
  248. package/dist/components/features/kanban/index.js +3 -3
  249. package/dist/components/features/media-library/index.cjs +1 -1
  250. package/dist/components/features/media-library/index.js +8 -8
  251. package/dist/components/features/mentions/index.cjs +1 -1
  252. package/dist/components/features/mentions/index.js +1 -1
  253. package/dist/components/features/overlays/index.cjs +1 -1
  254. package/dist/components/features/overlays/index.js +1 -1
  255. package/dist/components/features/products/index.cjs +1 -1
  256. package/dist/components/features/products/index.js +11 -11
  257. package/dist/components/features/resource/index.cjs +1 -1
  258. package/dist/components/features/resource/index.js +4 -4
  259. package/dist/components/features/rich-text-editor/index.cjs +1 -1
  260. package/dist/components/features/rich-text-editor/index.js +1 -1
  261. package/dist/components/features/schema-form/index.cjs +1 -1
  262. package/dist/components/features/schema-form/index.js +8 -8
  263. package/dist/components/features/suggestions/index.cjs +1 -1
  264. package/dist/components/features/suggestions/index.js +1 -1
  265. package/dist/components/features/sync/index.cjs +1 -1
  266. package/dist/components/features/sync/index.js +2 -2
  267. package/dist/components/layout/app-shell/index.cjs +1 -1
  268. package/dist/components/layout/app-shell/index.js +1 -1
  269. package/dist/components/layout/auth/index.cjs +1 -1
  270. package/dist/components/layout/auth/index.js +1 -1
  271. package/dist/components/layout/containers/containers.types.d.ts +2 -2
  272. package/dist/components/layout/containers/containers.types.d.ts.map +1 -1
  273. package/dist/components/layout/containers/content-container.d.ts.map +1 -1
  274. package/dist/components/layout/containers/index.cjs +1 -1
  275. package/dist/components/layout/containers/index.js +1 -2
  276. package/dist/components/layout/header/index.cjs +1 -1
  277. package/dist/components/layout/header/index.js +1 -1
  278. package/dist/components/layout/hooks/index.cjs +1 -1
  279. package/dist/components/layout/hooks/index.js +1 -1
  280. package/dist/components/layout/index.cjs +1 -1
  281. package/dist/components/layout/index.js +11 -12
  282. package/dist/components/layout/layout.types.d.ts.map +1 -1
  283. package/dist/components/layout/page/index.cjs +1 -1
  284. package/dist/components/layout/page/index.js +2 -2
  285. package/dist/components/layout/settings/index.cjs +1 -1
  286. package/dist/components/layout/settings/index.js +1 -1
  287. package/dist/components/layout/sidebar/components/sidebar-grouped-navigation.d.ts.map +1 -1
  288. package/dist/components/layout/sidebar/index.cjs +1 -1
  289. package/dist/components/layout/sidebar/index.js +2 -2
  290. package/dist/components/layout/workspace/index.cjs +1 -1
  291. package/dist/components/layout/workspace/index.js +1 -1
  292. package/dist/components/typography/index.cjs +1 -1
  293. package/dist/components/typography/index.js +1 -1
  294. package/dist/services/actions/index.cjs +1 -1
  295. package/dist/services/actions/index.js +1 -1
  296. package/dist/showcase/assets/AreaChart-CsIm9z7Y.js +6 -0
  297. package/dist/showcase/assets/CompositeItem-D9zznn01.js +1 -0
  298. package/dist/showcase/assets/CompositeRoot-CvxtZ81W.js +1 -0
  299. package/dist/showcase/assets/DialogTrigger-C-osQGHu.js +1 -0
  300. package/dist/showcase/assets/LabelableContext-_EE-HBND.js +1 -0
  301. package/dist/showcase/assets/PreviewLayout-KdEsSl3b.js +1 -0
  302. package/dist/showcase/assets/RadioGroup-4jOeNTc1.js +1 -0
  303. package/dist/showcase/assets/ScrollAreaCorner-CXTdUcaE.js +1 -0
  304. package/dist/showcase/assets/Separator-CHVXO6nj.js +1 -0
  305. package/dist/showcase/assets/ToolbarRootContext-CM5tQGGX.js +1 -0
  306. package/dist/showcase/assets/accordion-CA84bxb2.js +171 -0
  307. package/dist/showcase/assets/accordion-variants-DqWzAOO3.js +1 -0
  308. package/dist/showcase/assets/action-menu-D0q5z-Kq.js +1 -0
  309. package/dist/showcase/assets/actions-DnqxABJU.js +310 -0
  310. package/dist/showcase/assets/activities-BC9hoMy9.js +500 -0
  311. package/dist/showcase/assets/activities-feed-card-D6wGLpbH.js +1 -0
  312. package/dist/showcase/assets/admin-CMnMsugJ.js +140 -0
  313. package/dist/showcase/assets/ai-B6_sE9Zg.js +207 -0
  314. package/dist/showcase/assets/ai-artifact-BVvbsSJB.js +2 -0
  315. package/dist/showcase/assets/ai-chat-lcXeqJrA.js +568 -0
  316. package/dist/showcase/assets/ai-elements-B32o_UjE.js +387 -0
  317. package/dist/showcase/assets/ai-tool-call-BLrAioKz.js +1 -0
  318. package/dist/showcase/assets/alert-B1p1Grce.js +62 -0
  319. package/dist/showcase/assets/alert-BBiffYsY.js +93 -0
  320. package/dist/showcase/assets/alert-vH0nJ8J9.js +1 -0
  321. package/dist/showcase/assets/api-key-list-BrSc6V1y.js +1 -0
  322. package/dist/showcase/assets/api-key-list-CoKe_PaL.js +73 -0
  323. package/dist/showcase/assets/app-sidebar-R93lRPB4.js +1 -0
  324. package/dist/showcase/assets/arrow-down-xxVIADbv.js +1 -0
  325. package/dist/showcase/assets/arrow-left-DxnlnN8R.js +1 -0
  326. package/dist/showcase/assets/arrow-right-S5k93UPM.js +1 -0
  327. package/dist/showcase/assets/arrow-up-OlEVG7a-.js +1 -0
  328. package/dist/showcase/assets/arrow-up-right-j55bbl4b.js +1 -0
  329. package/dist/showcase/assets/avatar-BbiXvZq7.js +67 -0
  330. package/dist/showcase/assets/avatar-Bwpw-hQo.js +57 -0
  331. package/dist/showcase/assets/avatar-D0DKQ1lK.js +1 -0
  332. package/dist/showcase/assets/avatar-WyjSBov9.js +1 -0
  333. package/dist/showcase/assets/badge-BzLZQO3L.js +31 -0
  334. package/dist/showcase/assets/badge-check-TFWm1m3F.js +1 -0
  335. package/dist/showcase/assets/bell-CmuQlO_k.js +1 -0
  336. package/dist/showcase/assets/bot-Bu518AJB.js +1 -0
  337. package/dist/showcase/assets/box-D-wrSdOJ.js +1 -0
  338. package/dist/showcase/assets/braces-CgCdmdAl.js +1 -0
  339. package/dist/showcase/assets/brain-DkHdwgHO.js +1 -0
  340. package/dist/showcase/assets/brand-CpovnVoG.js +36 -0
  341. package/dist/showcase/assets/breadcrumb-BUc0WC5d.js +1 -0
  342. package/dist/showcase/assets/breadcrumb-Do_Dazt1.js +52 -0
  343. package/dist/showcase/assets/breadcrumbs-Bj21o2zm.js +1 -0
  344. package/dist/showcase/assets/briefcase-CQBh2kok.js +1 -0
  345. package/dist/showcase/assets/building-2-D07Ej6iR.js +1 -0
  346. package/dist/showcase/assets/button-CCZ4KEGQ.js +44 -0
  347. package/dist/showcase/assets/button-group-BTjeHOvz.js +1 -0
  348. package/dist/showcase/assets/buttons-D45Wwiwn.js +272 -0
  349. package/dist/showcase/assets/calendar-BsEWULmZ.js +16 -0
  350. package/dist/showcase/assets/calendar-CkPefzIO.js +1 -0
  351. package/dist/showcase/assets/calendar-DZlT3qTq.js +1 -0
  352. package/dist/showcase/assets/calendar-days-C9awTMru.js +1 -0
  353. package/dist/showcase/assets/camera-CQhMw-RD.js +1 -0
  354. package/dist/showcase/assets/card-CKrz_UHt.js +1 -0
  355. package/dist/showcase/assets/card-DZgZgjXO.js +188 -0
  356. package/dist/showcase/assets/card-primitives-CpkDLK3Y.js +1 -0
  357. package/dist/showcase/assets/card-radio-group-BjXwMI4v.js +1 -0
  358. package/dist/showcase/assets/cards-Cd24XZ9l.js +353 -0
  359. package/dist/showcase/assets/carousel-Doon04yO.js +449 -0
  360. package/dist/showcase/assets/cell-renderers-CTay3duH.js +1 -0
  361. package/dist/showcase/assets/chart-CkvbdpWw.js +358 -0
  362. package/dist/showcase/assets/chart-column-Dz57kUMl.js +1 -0
  363. package/dist/showcase/assets/checkbox-L-L4-wvA.js +1 -0
  364. package/dist/showcase/assets/checkbox-sP254E7e.js +1 -0
  365. package/dist/showcase/assets/chevron-down-CLc_a2Ua.js +1 -0
  366. package/dist/showcase/assets/chevron-left-CMRIGOJt.js +1 -0
  367. package/dist/showcase/assets/chevron-up-BDw6LdDZ.js +1 -0
  368. package/dist/showcase/assets/chevrons-up-down-C519RKki.js +1 -0
  369. package/dist/showcase/assets/circle-B_tOHWTY.js +1 -0
  370. package/dist/showcase/assets/circle-alert-B56AFULT.js +1 -0
  371. package/dist/showcase/assets/circle-check-B4XZj4Ty.js +1 -0
  372. package/dist/showcase/assets/circle-check-big-C0iEkwPB.js +1 -0
  373. package/dist/showcase/assets/circle-dot-DPdJZkc6.js +1 -0
  374. package/dist/showcase/assets/circle-question-mark-LTetdrq6.js +1 -0
  375. package/dist/showcase/assets/circle-x-B4FwM-sI.js +1 -0
  376. package/dist/showcase/assets/clock-3-DZhjBuw8.js +1 -0
  377. package/dist/showcase/assets/clock-B9Fna2Q3.js +1 -0
  378. package/dist/showcase/assets/code-xml-B6Xb_vIg.js +1 -0
  379. package/dist/showcase/assets/collapsible-Bf7Oo37i.js +27 -0
  380. package/dist/showcase/assets/collapsible-BfLeooy8.js +1 -0
  381. package/dist/showcase/assets/combobox-4NYfJznY.js +685 -0
  382. package/dist/showcase/assets/command-7jRRucHf.js +1 -0
  383. package/dist/showcase/assets/command-D56CjgNc.js +1 -0
  384. package/dist/showcase/assets/comment-composer-BWeXIZfK.js +1 -0
  385. package/dist/showcase/assets/comment-item-ChkiK-ut.js +1 -0
  386. package/dist/showcase/assets/comments-YnEop7v3.js +357 -0
  387. package/dist/showcase/assets/commerce-7XxWJChs.js +267 -0
  388. package/dist/showcase/assets/composite-CHcyYCsk.js +1 -0
  389. package/dist/showcase/assets/contact-card-BXw-VuBm.js +65 -0
  390. package/dist/showcase/assets/content-container-C4uopCBg.js +1 -0
  391. package/dist/showcase/assets/copyable-CjVYEJ0P.js +1 -0
  392. package/dist/showcase/assets/copyable-Cz2jW7yL.js +96 -0
  393. package/dist/showcase/assets/course-card-CvK3dw9W.js +77 -0
  394. package/dist/showcase/assets/cpu-Vk5WgcC1.js +1 -0
  395. package/dist/showcase/assets/credit-card-CaigqZGk.js +1 -0
  396. package/dist/showcase/assets/css-variables-hLaBmeMt.js +1190 -0
  397. package/dist/showcase/assets/currency-yO1giHp1.js +149 -0
  398. package/dist/showcase/assets/dark-surfaces-BPQnyk9a.js +90 -0
  399. package/dist/showcase/assets/data-view-CjjXn5VT.js +124 -0
  400. package/dist/showcase/assets/data-view-DF0n8uva.js +4 -0
  401. package/dist/showcase/assets/database-ChUBDe8E.js +1 -0
  402. package/dist/showcase/assets/date-block-DUg1Oyn4.js +1 -0
  403. package/dist/showcase/assets/date-picker-CoQPZa34.js +1 -0
  404. package/dist/showcase/assets/date-pickers-B-IUbyXw.js +73 -0
  405. package/dist/showcase/assets/dense-info-zVQSWqOU.js +106 -0
  406. package/dist/showcase/assets/design-system-consistency-Bnz_h3-6.js +264 -0
  407. package/dist/showcase/assets/dialog-BtilpgxJ.js +1 -0
  408. package/dist/showcase/assets/dialog-kf9WwmTC.js +1 -0
  409. package/dist/showcase/assets/display-utilities-BBzG5EPX.js +267 -0
  410. package/dist/showcase/assets/dist-9gFIhkw-.js +45 -0
  411. package/dist/showcase/assets/dist-CGpz_7Mu.js +1 -0
  412. package/dist/showcase/assets/dollar-sign-CWbYI3Pd.js +1 -0
  413. package/dist/showcase/assets/download-Bt_z-poH.js +1 -0
  414. package/dist/showcase/assets/dropdown-menu-C1_SYTHm.js +1 -0
  415. package/dist/showcase/assets/dropzone-D5BGVTnl.js +1 -0
  416. package/dist/showcase/assets/earth-sP5mIgG3.js +1 -0
  417. package/dist/showcase/assets/ellipsis-vertical-BD7kMOzj.js +1 -0
  418. package/dist/showcase/assets/ellipsis-yqIF49C8.js +1 -0
  419. package/dist/showcase/assets/empty-DIrJgtrh.js +1 -0
  420. package/dist/showcase/assets/empty-item-GgnZk2yf.js +49 -0
  421. package/dist/showcase/assets/empty-state-ZGKkJ6sf.js +190 -0
  422. package/dist/showcase/assets/empty-state-n_Fspzt-.js +1 -0
  423. package/dist/showcase/assets/enhanced-activities-CCw_hZnZ.js +357 -0
  424. package/dist/showcase/assets/enhanced-combobox-bBF-ADDs.js +1 -0
  425. package/dist/showcase/assets/esm-CyFPn936.js +2 -0
  426. package/dist/showcase/assets/event-calendar-Czo7yBDx.js +138 -0
  427. package/dist/showcase/assets/event-log-DJ3B3nMV.js +330 -0
  428. package/dist/showcase/assets/example-eGsLGIcp.js +1 -0
  429. package/dist/showcase/assets/external-link-DPOQEVWH.js +1 -0
  430. package/dist/showcase/assets/eye-CN92NVL0.js +1 -0
  431. package/dist/showcase/assets/feature-announcement-BXkSW17e.js +34 -0
  432. package/dist/showcase/assets/file-CFHePlKG.js +1 -0
  433. package/dist/showcase/assets/file-text--WYCYQMw.js +1 -0
  434. package/dist/showcase/assets/filter-layout-B35gGmcO.js +1 -0
  435. package/dist/showcase/assets/filters-GDW_oiT3.js +139 -0
  436. package/dist/showcase/assets/flag-XsT9XFPr.js +1 -0
  437. package/dist/showcase/assets/folder-open-RtsQ8vxf.js +1 -0
  438. package/dist/showcase/assets/form-field-Bijd1Gex.js +1 -0
  439. package/dist/showcase/assets/form-sizing-Dltt6Fj-.js +1 -0
  440. package/dist/showcase/assets/format-Ckw4OM66.js +1 -0
  441. package/dist/showcase/assets/forms-00bU7LN8.js +915 -0
  442. package/dist/showcase/assets/funnel-qu25WlXD.js +1 -0
  443. package/dist/showcase/assets/generic-Bf82Wiol.js +1 -0
  444. package/dist/showcase/assets/getPseudoElementBounds-BR4_m2HH.js +1 -0
  445. package/dist/showcase/assets/gift-D4GQoqzV.js +1 -0
  446. package/dist/showcase/assets/giftcard-cards-CMutwaAY.js +85 -0
  447. package/dist/showcase/assets/git-branch-B2QG2zRg.js +1 -0
  448. package/dist/showcase/assets/global-search-CRAB9TSF.js +1 -0
  449. package/dist/showcase/assets/global-search-DY0cKfhY.js +215 -0
  450. package/dist/showcase/assets/globe-BxZW28rG.js +1 -0
  451. package/dist/showcase/assets/gradient-card-CQGnXG8r.js +58 -0
  452. package/dist/showcase/assets/hash-CsRtIoKK.js +1 -0
  453. package/dist/showcase/assets/header-DzYOgZLP.js +1 -0
  454. package/dist/showcase/assets/header-notifications-D_CJPbvs.js +1 -0
  455. package/dist/showcase/assets/heart-B2YsYprq.js +1 -0
  456. package/dist/showcase/assets/hooks-BhUMA4Tb.js +220 -0
  457. package/dist/showcase/assets/house-HeRFNhI0.js +1 -0
  458. package/dist/showcase/assets/icon-badge-CpDkc-S0.js +37 -0
  459. package/dist/showcase/assets/icon-badge-eNEGgpAV.js +1 -0
  460. package/dist/showcase/assets/image-T88JyDag.js +1 -0
  461. package/dist/showcase/assets/inbox-DLrLLnTR.js +1 -0
  462. package/dist/showcase/assets/index-DDZl6kOS.js +10 -0
  463. package/dist/showcase/assets/index-nOkXemgw.css +2 -0
  464. package/dist/showcase/assets/inertValue-BajuuRy4.js +1 -0
  465. package/dist/showcase/assets/info-CNYfw2Yz.js +1 -0
  466. package/dist/showcase/assets/inline-stat-BN6yhDR5.js +15 -0
  467. package/dist/showcase/assets/inline-stat-Bqw3lVfk.js +1 -0
  468. package/dist/showcase/assets/input-C-9K6F0N.js +1 -0
  469. package/dist/showcase/assets/input-DaZzfkZV.js +1 -0
  470. package/dist/showcase/assets/input-group-DE-Xdhv4.js +1 -0
  471. package/dist/showcase/assets/input-group-DIQZnytn.js +47 -0
  472. package/dist/showcase/assets/inputs-Cl_JgSR4.js +155 -0
  473. package/dist/showcase/assets/installation-DdhD4Dkq.js +134 -0
  474. package/dist/showcase/assets/invoice-header-DOs2ACqQ.js +36 -0
  475. package/dist/showcase/assets/invoice-items-1EuA62mF.js +36 -0
  476. package/dist/showcase/assets/invoice-mini-vCrYEtWp.js +14 -0
  477. package/dist/showcase/assets/invoice-table--mDTs1Iz.js +30 -0
  478. package/dist/showcase/assets/isSameDay-BNB1yam4.js +1 -0
  479. package/dist/showcase/assets/isToday-BugOpGJC.js +1 -0
  480. package/dist/showcase/assets/italic-Ck4UD2ZT.js +1 -0
  481. package/dist/showcase/assets/item-BcesxqFS.js +139 -0
  482. package/dist/showcase/assets/item-BgPlwUMv.js +1 -0
  483. package/dist/showcase/assets/item-CB9k_rmo.js +1 -0
  484. package/dist/showcase/assets/kanban-cPuSVqWY.js +188 -0
  485. package/dist/showcase/assets/key-round-BmYjd5dk.js +1 -0
  486. package/dist/showcase/assets/label-BTIBJBqN.js +1 -0
  487. package/dist/showcase/assets/languages-he6FNXRs.js +1 -0
  488. package/dist/showcase/assets/layers-B_48DtOz.js +1 -0
  489. package/dist/showcase/assets/layout-app-shell-zwLv6jTP.js +608 -0
  490. package/dist/showcase/assets/layout-auth-2Zv5lr52.js +790 -0
  491. package/dist/showcase/assets/layout-containers-Dzw3xlKn.js +101 -0
  492. package/dist/showcase/assets/layout-header-TJ-WVmG3.js +203 -0
  493. package/dist/showcase/assets/layout-page-CIVQCKXK.js +314 -0
  494. package/dist/showcase/assets/layout-primitives-i_O81fzT.js +34 -0
  495. package/dist/showcase/assets/layout-sidebar-eH_pwBq_.js +224 -0
  496. package/dist/showcase/assets/layout-users-CWSaFBLj.js +117 -0
  497. package/dist/showcase/assets/layout-workspace-w3oe32GE.js +191 -0
  498. package/dist/showcase/assets/lib-CoS0xjP8.js +1 -0
  499. package/dist/showcase/assets/list-checks-DecRPpK3.js +1 -0
  500. package/dist/showcase/assets/lock-D9f8uXol.js +1 -0
  501. package/dist/showcase/assets/lock-keyhole-C20eixH6.js +1 -0
  502. package/dist/showcase/assets/mail-CVgP8Qlo.js +1 -0
  503. package/dist/showcase/assets/mail-check-mplTKcSH.js +1 -0
  504. package/dist/showcase/assets/map-B6OGeOup.js +124 -0
  505. package/dist/showcase/assets/map-pin-BZXSwrzT.js +1 -0
  506. package/dist/showcase/assets/media-library-DSlVIM1Q.js +699 -0
  507. package/dist/showcase/assets/mention-inline-suggestions-CNAEeXgy.js +1 -0
  508. package/dist/showcase/assets/mentions-Cb3g4hDN.js +138 -0
  509. package/dist/showcase/assets/menus-CE0Hlj8N.js +171 -0
  510. package/dist/showcase/assets/message-square-HliU8vbW.js +1 -0
  511. package/dist/showcase/assets/metadata-list-CJ5v5Bvc.js +286 -0
  512. package/dist/showcase/assets/metadata-list-DY92-pw2.js +1 -0
  513. package/dist/showcase/assets/metric-DxMTjIvU.js +1 -0
  514. package/dist/showcase/assets/metric-bar-cW9nWCRl.js +1 -0
  515. package/dist/showcase/assets/metric-grid-CvfO52X1.js +1 -0
  516. package/dist/showcase/assets/metric-trend-chip-BmjQdRus.js +1 -0
  517. package/dist/showcase/assets/metrics-analytics-bar-BZqB5d1y.js +44 -0
  518. package/dist/showcase/assets/metrics-analytics-cards-jAhlrQCI.js +50 -0
  519. package/dist/showcase/assets/metrics-comparison-DURZ6qEL.js +76 -0
  520. package/dist/showcase/assets/metrics-heatmap-HhJDBguh.js +27 -0
  521. package/dist/showcase/assets/metrics-inline-badge-Dq5k-P6F.js +17 -0
  522. package/dist/showcase/assets/metrics-kpi-row-DXzhwa6z.js +31 -0
  523. package/dist/showcase/assets/metrics-micro-grid-C6O5b0wP.js +42 -0
  524. package/dist/showcase/assets/metrics-overview-Hv2mseb3.js +192 -0
  525. package/dist/showcase/assets/metrics-stat-cards-CW42vBCS.js +54 -0
  526. package/dist/showcase/assets/minus-BW62vCxf.js +1 -0
  527. package/dist/showcase/assets/money-display-CAdGk5Lr.js +1 -0
  528. package/dist/showcase/assets/month-year-picker-dHuvgz1E.js +1 -0
  529. package/dist/showcase/assets/navigation-C4uSLvbZ.js +90 -0
  530. package/dist/showcase/assets/navigation-SjsZrtIc.js +231 -0
  531. package/dist/showcase/assets/navigation-extras-CMVNVskk.js +43 -0
  532. package/dist/showcase/assets/onboarding-checklist-C1jwRdMU.js +119 -0
  533. package/dist/showcase/assets/overflow-tab-bar-BYFLpl5w.js +1 -0
  534. package/dist/showcase/assets/overlays-0Y8MAz39.js +159 -0
  535. package/dist/showcase/assets/overlays-ClOnjahL.js +408 -0
  536. package/dist/showcase/assets/overview-B5ztGmTp.js +184 -0
  537. package/dist/showcase/assets/package-check-MeSw6bS4.js +1 -0
  538. package/dist/showcase/assets/package-vYJ0q0QM.js +1 -0
  539. package/dist/showcase/assets/page-4lMKtBQ7.js +1 -0
  540. package/dist/showcase/assets/page-action-button-C5-TGSzy.js +1 -0
  541. package/dist/showcase/assets/page-header-C_-KYryO.js +1 -0
  542. package/dist/showcase/assets/pagination-D3L3Iwus.js +1 -0
  543. package/dist/showcase/assets/pagination-dZXPxwHx.js +42 -0
  544. package/dist/showcase/assets/paperclip-BZhdPOw8.js +1 -0
  545. package/dist/showcase/assets/password-input-CDSMtGxt.js +1 -0
  546. package/dist/showcase/assets/pencil-DiYr3CZ9.js +1 -0
  547. package/dist/showcase/assets/phone-Dm5qzlG8.js +1 -0
  548. package/dist/showcase/assets/plus-pfGaA3St.js +1 -0
  549. package/dist/showcase/assets/popover-CjVWDO7C.js +1 -0
  550. package/dist/showcase/assets/popover-menu-JcZyGV3Y.js +1 -0
  551. package/dist/showcase/assets/popover-pZ4Jbp0s.js +1 -0
  552. package/dist/showcase/assets/products-C62MKtAR.js +423 -0
  553. package/dist/showcase/assets/progress-Btw-ZUaU.js +18 -0
  554. package/dist/showcase/assets/progress-DpB5LL6R.js +1 -0
  555. package/dist/showcase/assets/props-table-Bjc9IHmp.js +1 -0
  556. package/dist/showcase/assets/quote-DcxVd1fj.js +1 -0
  557. package/dist/showcase/assets/receipt-BHns-S5Q.js +1 -0
  558. package/dist/showcase/assets/receipt-text-L0aYasyt.js +1 -0
  559. package/dist/showcase/assets/refinement-guide-BBOGBJ4I.js +189 -0
  560. package/dist/showcase/assets/refresh-cw-z6mlm0HI.js +1 -0
  561. package/dist/showcase/assets/resolveValueLabel-hsarzg5A.js +1 -0
  562. package/dist/showcase/assets/resource-CIn_zKZ4.js +139 -0
  563. package/dist/showcase/assets/resource-DxktLgEK.js +1 -0
  564. package/dist/showcase/assets/resource-selector-card-dkcEQ6bl.js +43 -0
  565. package/dist/showcase/assets/rich-text-editor-Dd-rWisw.js +124 -0
  566. package/dist/showcase/assets/rich-text-editor-DvJMFj48.js +143 -0
  567. package/dist/showcase/assets/rotate-ccw-DEz6nb5P.js +1 -0
  568. package/dist/showcase/assets/route-BeXaXTk8.js +1 -0
  569. package/dist/showcase/assets/save-EE7Tc5OT.js +1 -0
  570. package/dist/showcase/assets/schema-form-RK9Zpz1E.js +327 -0
  571. package/dist/showcase/assets/scroll-area-BejQJ0Q1.js +32 -0
  572. package/dist/showcase/assets/scroll-area-DS8LJ7LG.js +1 -0
  573. package/dist/showcase/assets/section-Cv8i4DIx.js +1 -0
  574. package/dist/showcase/assets/select-Cuy3YKW9.js +1 -0
  575. package/dist/showcase/assets/select-qFy1jm91.js +1 -0
  576. package/dist/showcase/assets/send-CXv0ST9u.js +1 -0
  577. package/dist/showcase/assets/separator-CecGyBaV.js +1 -0
  578. package/dist/showcase/assets/separator-CqtFQXrk.js +28 -0
  579. package/dist/showcase/assets/settings-2-CCeMwMOj.js +1 -0
  580. package/dist/showcase/assets/settings-CXjN6wTC.js +1 -0
  581. package/dist/showcase/assets/sheet-Csyrmkqp.js +1 -0
  582. package/dist/showcase/assets/shield-DR0ZfAFA.js +1 -0
  583. package/dist/showcase/assets/shield-alert-Bp1iFJ2q.js +1 -0
  584. package/dist/showcase/assets/shield-check-ClL4B_Cd.js +1 -0
  585. package/dist/showcase/assets/shopping-bag-DnSmbPUX.js +1 -0
  586. package/dist/showcase/assets/showcase-CQKt5VGi.js +132 -0
  587. package/dist/showcase/assets/sidebar-CXy94md1.js +1 -0
  588. package/dist/showcase/assets/sidebar.context-C8gkOwJ5.js +1 -0
  589. package/dist/showcase/assets/skeleton-B8wC5P66.js +29 -0
  590. package/dist/showcase/assets/skeleton-DBlCLlBC.js +1 -0
  591. package/dist/showcase/assets/slider-BcjkNx6W.js +1 -0
  592. package/dist/showcase/assets/smart-card-Cg6rtWH9.js +1 -0
  593. package/dist/showcase/assets/sonner-ZGBQ13wS.js +22 -0
  594. package/dist/showcase/assets/sortable.esm-CGFWc-Cn.js +5 -0
  595. package/dist/showcase/assets/sparkles-q1-9JZqa.js +1 -0
  596. package/dist/showcase/assets/spinner-CKg8QLHu.js +1 -0
  597. package/dist/showcase/assets/spinner-D1Ao9j9T.js +49 -0
  598. package/dist/showcase/assets/spinner-oahLIkgb.js +30 -0
  599. package/dist/showcase/assets/square-pen-DZ3bQJia.js +1 -0
  600. package/dist/showcase/assets/stacked-avatars-CKPtb3Hj.js +1 -0
  601. package/dist/showcase/assets/star-suetD-KI.js +1 -0
  602. package/dist/showcase/assets/startOfDay-OjIsUeiv.js +1 -0
  603. package/dist/showcase/assets/styles-1mYOoC2k.js +1 -0
  604. package/dist/showcase/assets/suggestions-DLYaI-In.js +126 -0
  605. package/dist/showcase/assets/switch-CTTrJNwo.js +1 -0
  606. package/dist/showcase/assets/switch-ChJWWmxN.js +1 -0
  607. package/dist/showcase/assets/sync-DsHYydvo.js +124 -0
  608. package/dist/showcase/assets/table-Ck2ptin2.js +686 -0
  609. package/dist/showcase/assets/table-DyJ9oADQ.js +1 -0
  610. package/dist/showcase/assets/table-actions-COU4zHfh.js +1 -0
  611. package/dist/showcase/assets/tabs-Bl_RHGIw.js +1 -0
  612. package/dist/showcase/assets/tabs-DS-4VSkb.js +19 -0
  613. package/dist/showcase/assets/tags-input-BlYzb5fF.js +1 -0
  614. package/dist/showcase/assets/text-button-OPdNs3fb.js +1 -0
  615. package/dist/showcase/assets/text-link-D27gqGeg.js +1 -0
  616. package/dist/showcase/assets/textarea-DpC7J5F-.js +1 -0
  617. package/dist/showcase/assets/textarea-JtXUjxvc.js +1 -0
  618. package/dist/showcase/assets/timelines-DQM-B4Xo.js +200 -0
  619. package/dist/showcase/assets/toggle-group-CMneKREH.js +1 -0
  620. package/dist/showcase/assets/toggles-CAXXgjO_.js +71 -0
  621. package/dist/showcase/assets/toggles-group-CHRqrpoM.js +32 -0
  622. package/dist/showcase/assets/tooltip-CwGZAioX.js +31 -0
  623. package/dist/showcase/assets/trash-2-BpMb9Zbb.js +1 -0
  624. package/dist/showcase/assets/trending-up-B1BzitCg.js +1 -0
  625. package/dist/showcase/assets/truck-CDSE5-HZ.js +1 -0
  626. package/dist/showcase/assets/typography-BoNJ1hRZ.js +223 -0
  627. package/dist/showcase/assets/ui-badge-Djh6NiB2.js +28 -0
  628. package/dist/showcase/assets/ui-card-QC_rl_H2.js +30 -0
  629. package/dist/showcase/assets/ui-table-qAGsc3qN.js +42 -0
  630. package/dist/showcase/assets/upload-tray-DKCJgW5u.js +138 -0
  631. package/dist/showcase/assets/use-layout-link-BPlsZ8Ys.js +1 -0
  632. package/dist/showcase/assets/useAnchoredPopupScrollLock-526MebAC.js +1 -0
  633. package/dist/showcase/assets/useAriaLabelledBy-CqySZiH9.js +1 -0
  634. package/dist/showcase/assets/useCollapsiblePanel-DWX7LbGX.js +1 -0
  635. package/dist/showcase/assets/useCompositeItem-DGEBUXgE.js +1 -0
  636. package/dist/showcase/assets/useCompositeListItem-B2nuNlc2.js +1 -0
  637. package/dist/showcase/assets/useLabelableId-DY4O1lpt.js +1 -0
  638. package/dist/showcase/assets/useOpenInteractionType-DxwujDvt.js +1 -0
  639. package/dist/showcase/assets/useRender-BPoNv-Lm.js +1 -0
  640. package/dist/showcase/assets/useTriggerFocusGuards-BnOSAjfy.js +1 -0
  641. package/dist/showcase/assets/useValueChanged-CXmDOWxx.js +1 -0
  642. package/dist/showcase/assets/user-BGchdtV_.js +1 -0
  643. package/dist/showcase/assets/user-plus-BifI_xVA.js +1 -0
  644. package/dist/showcase/assets/users-Cl5yYqdg.js +1 -0
  645. package/dist/showcase/assets/vendor-profile-BNW4FYna.js +37 -0
  646. package/dist/showcase/assets/video-BtQPixYN.js +1 -0
  647. package/dist/showcase/assets/wrench-CRalc5fG.js +1 -0
  648. package/dist/showcase/assets/x-D6hUY89S.js +1 -0
  649. package/dist/showcase/assets/zap-v_qbqeI5.js +1 -0
  650. package/dist/showcase/index.html +2 -2
  651. package/dist/style.css +1 -1
  652. package/package.json +1 -1
  653. package/src/css/themes/shadcn.default.css +6 -6
  654. package/src/css/tokens/foundation.css +6 -6
  655. package/dist/_shared/accordion-B9EjlZLY.js +0 -135
  656. package/dist/_shared/accordion-B9EjlZLY.js.map +0 -1
  657. package/dist/_shared/accordion-IFDIc0E7.cjs +0 -2
  658. package/dist/_shared/accordion-IFDIc0E7.cjs.map +0 -1
  659. package/dist/_shared/action-menu-B6yFRDz1.cjs +0 -2
  660. package/dist/_shared/action-menu-B6yFRDz1.cjs.map +0 -1
  661. package/dist/_shared/action-menu-CNS-fwQr.js +0 -96
  662. package/dist/_shared/action-menu-CNS-fwQr.js.map +0 -1
  663. package/dist/_shared/ai-artifact-B3qhuiKC.js +0 -1099
  664. package/dist/_shared/ai-artifact-B3qhuiKC.js.map +0 -1
  665. package/dist/_shared/ai-artifact-Dtr0bnVq.cjs +0 -3
  666. package/dist/_shared/ai-artifact-Dtr0bnVq.cjs.map +0 -1
  667. package/dist/_shared/alert-V0V36Sny.cjs +0 -2
  668. package/dist/_shared/alert-V0V36Sny.cjs.map +0 -1
  669. package/dist/_shared/alert-m-4s0Hqq.js +0 -81
  670. package/dist/_shared/alert-m-4s0Hqq.js.map +0 -1
  671. package/dist/_shared/app-shell-D3eGUtL-.js +0 -69
  672. package/dist/_shared/app-shell-D3eGUtL-.js.map +0 -1
  673. package/dist/_shared/app-shell-QJHARDMB.cjs +0 -2
  674. package/dist/_shared/app-shell-QJHARDMB.cjs.map +0 -1
  675. package/dist/_shared/auth-DdezEtKK.cjs +0 -2
  676. package/dist/_shared/auth-DdezEtKK.cjs.map +0 -1
  677. package/dist/_shared/auth-e7yab9pK.js +0 -643
  678. package/dist/_shared/auth-e7yab9pK.js.map +0 -1
  679. package/dist/_shared/badge-BeSKxX1u.cjs +0 -2
  680. package/dist/_shared/badge-BeSKxX1u.cjs.map +0 -1
  681. package/dist/_shared/badge-a2Z3K5aQ.js +0 -110
  682. package/dist/_shared/badge-a2Z3K5aQ.js.map +0 -1
  683. package/dist/_shared/breadcrumbs-AyLzxCJZ.cjs +0 -2
  684. package/dist/_shared/breadcrumbs-AyLzxCJZ.cjs.map +0 -1
  685. package/dist/_shared/breadcrumbs-B57Unsoe.js +0 -105
  686. package/dist/_shared/breadcrumbs-B57Unsoe.js.map +0 -1
  687. package/dist/_shared/button-Bd5bEIiB.cjs +0 -2
  688. package/dist/_shared/button-Bd5bEIiB.cjs.map +0 -1
  689. package/dist/_shared/button-DHksjMvc.js +0 -189
  690. package/dist/_shared/button-DHksjMvc.js.map +0 -1
  691. package/dist/_shared/buttons-Bek9F7qK.cjs +0 -2
  692. package/dist/_shared/buttons-Bek9F7qK.cjs.map +0 -1
  693. package/dist/_shared/buttons-DcynMPnE.js +0 -137
  694. package/dist/_shared/buttons-DcynMPnE.js.map +0 -1
  695. package/dist/_shared/card-radio-group-C2p_iBal.cjs +0 -2
  696. package/dist/_shared/card-radio-group-C2p_iBal.cjs.map +0 -1
  697. package/dist/_shared/card-radio-group-Fdi1Cz1j.js +0 -150
  698. package/dist/_shared/card-radio-group-Fdi1Cz1j.js.map +0 -1
  699. package/dist/_shared/cards-CbbHly7W.cjs +0 -2
  700. package/dist/_shared/cards-CbbHly7W.cjs.map +0 -1
  701. package/dist/_shared/cards-RZxRLx3f.js +0 -355
  702. package/dist/_shared/cards-RZxRLx3f.js.map +0 -1
  703. package/dist/_shared/combobox-BIe72dV3.js +0 -954
  704. package/dist/_shared/combobox-BIe72dV3.js.map +0 -1
  705. package/dist/_shared/combobox-CJiFDoTi.cjs +0 -2
  706. package/dist/_shared/combobox-CJiFDoTi.cjs.map +0 -1
  707. package/dist/_shared/comments-BJqgvSFY.js +0 -952
  708. package/dist/_shared/comments-BJqgvSFY.js.map +0 -1
  709. package/dist/_shared/comments-BjPciQfo.cjs +0 -2
  710. package/dist/_shared/comments-BjPciQfo.cjs.map +0 -1
  711. package/dist/_shared/containers-D7oZE4XI.cjs +0 -2
  712. package/dist/_shared/containers-D7oZE4XI.cjs.map +0 -1
  713. package/dist/_shared/containers-anBivbL9.js +0 -19
  714. package/dist/_shared/containers-anBivbL9.js.map +0 -1
  715. package/dist/_shared/content-container-CVUJCLhn.cjs +0 -2
  716. package/dist/_shared/content-container-CVUJCLhn.cjs.map +0 -1
  717. package/dist/_shared/content-container-Dv8XsAw4.js +0 -33
  718. package/dist/_shared/content-container-Dv8XsAw4.js.map +0 -1
  719. package/dist/_shared/copyable-Dopk9pEJ.js +0 -38
  720. package/dist/_shared/copyable-Dopk9pEJ.js.map +0 -1
  721. package/dist/_shared/copyable-rQwxsTJ3.cjs +0 -2
  722. package/dist/_shared/copyable-rQwxsTJ3.cjs.map +0 -1
  723. package/dist/_shared/data-display-C21skrV4.cjs +0 -2
  724. package/dist/_shared/data-display-C21skrV4.cjs.map +0 -1
  725. package/dist/_shared/data-display-C5-1dZua.js +0 -1873
  726. package/dist/_shared/data-display-C5-1dZua.js.map +0 -1
  727. package/dist/_shared/date-picker-BiUgIkjP.cjs +0 -2
  728. package/dist/_shared/date-picker-BiUgIkjP.cjs.map +0 -1
  729. package/dist/_shared/date-picker-DFkLiveH.js +0 -1361
  730. package/dist/_shared/date-picker-DFkLiveH.js.map +0 -1
  731. package/dist/_shared/date-pickers-C86tVD8e.cjs +0 -2
  732. package/dist/_shared/date-pickers-C86tVD8e.cjs.map +0 -1
  733. package/dist/_shared/date-pickers-D4oxOOHE.js +0 -329
  734. package/dist/_shared/date-pickers-D4oxOOHE.js.map +0 -1
  735. package/dist/_shared/display-B0wLVN8t.js +0 -986
  736. package/dist/_shared/display-B0wLVN8t.js.map +0 -1
  737. package/dist/_shared/display-Bin2vVex.cjs +0 -2
  738. package/dist/_shared/display-Bin2vVex.cjs.map +0 -1
  739. package/dist/_shared/form-sizing-C51oI3Di.js +0 -42
  740. package/dist/_shared/form-sizing-C51oI3Di.js.map +0 -1
  741. package/dist/_shared/form-sizing-Co53Drri.cjs +0 -2
  742. package/dist/_shared/form-sizing-Co53Drri.cjs.map +0 -1
  743. package/dist/_shared/forms-BoquZE2Y.js +0 -3533
  744. package/dist/_shared/forms-BoquZE2Y.js.map +0 -1
  745. package/dist/_shared/forms-CzrEYejY.cjs +0 -2
  746. package/dist/_shared/forms-CzrEYejY.cjs.map +0 -1
  747. package/dist/_shared/header-CxhEtk9M.cjs +0 -2
  748. package/dist/_shared/header-CxhEtk9M.cjs.map +0 -1
  749. package/dist/_shared/header-h3f14vQx.js +0 -447
  750. package/dist/_shared/header-h3f14vQx.js.map +0 -1
  751. package/dist/_shared/hooks-CS55-w3h.js +0 -95
  752. package/dist/_shared/hooks-CS55-w3h.js.map +0 -1
  753. package/dist/_shared/hooks-sfHAyDgD.cjs +0 -2
  754. package/dist/_shared/hooks-sfHAyDgD.cjs.map +0 -1
  755. package/dist/_shared/input-CB6hxh-5.cjs +0 -2
  756. package/dist/_shared/input-CB6hxh-5.cjs.map +0 -1
  757. package/dist/_shared/input-CfnHBT--.js +0 -182
  758. package/dist/_shared/input-CfnHBT--.js.map +0 -1
  759. package/dist/_shared/item-Xs-fgzaT.js +0 -226
  760. package/dist/_shared/item-Xs-fgzaT.js.map +0 -1
  761. package/dist/_shared/item-eUP9Rtmg.cjs +0 -2
  762. package/dist/_shared/item-eUP9Rtmg.cjs.map +0 -1
  763. package/dist/_shared/layout.types-CYuDZ_4h.cjs +0 -2
  764. package/dist/_shared/layout.types-CYuDZ_4h.cjs.map +0 -1
  765. package/dist/_shared/layout.types-j7zZAPtg.js +0 -28
  766. package/dist/_shared/layout.types-j7zZAPtg.js.map +0 -1
  767. package/dist/_shared/mentions-BahbwDwU.js +0 -506
  768. package/dist/_shared/mentions-BahbwDwU.js.map +0 -1
  769. package/dist/_shared/mentions-aHalksbt.cjs +0 -2
  770. package/dist/_shared/mentions-aHalksbt.cjs.map +0 -1
  771. package/dist/_shared/money-display-BLPNMmiT.cjs +0 -2
  772. package/dist/_shared/money-display-BLPNMmiT.cjs.map +0 -1
  773. package/dist/_shared/money-display-D_-Cb8-9.js +0 -198
  774. package/dist/_shared/money-display-D_-Cb8-9.js.map +0 -1
  775. package/dist/_shared/navigation-BcYAwgzo.js +0 -436
  776. package/dist/_shared/navigation-BcYAwgzo.js.map +0 -1
  777. package/dist/_shared/navigation-DAB7uuBj.cjs +0 -2
  778. package/dist/_shared/navigation-DAB7uuBj.cjs.map +0 -1
  779. package/dist/_shared/overlays-DW8OIK5R.js +0 -735
  780. package/dist/_shared/overlays-DW8OIK5R.js.map +0 -1
  781. package/dist/_shared/overlays-Du65iCkx.cjs +0 -2
  782. package/dist/_shared/overlays-Du65iCkx.cjs.map +0 -1
  783. package/dist/_shared/page-D8UMXREv.cjs +0 -2
  784. package/dist/_shared/page-D8UMXREv.cjs.map +0 -1
  785. package/dist/_shared/page-D9LNsHMN.js +0 -262
  786. package/dist/_shared/page-D9LNsHMN.js.map +0 -1
  787. package/dist/_shared/popover-menu-qxBZlTck.js +0 -93
  788. package/dist/_shared/popover-menu-qxBZlTck.js.map +0 -1
  789. package/dist/_shared/popover-menu-z9QTjl4o.cjs +0 -2
  790. package/dist/_shared/popover-menu-z9QTjl4o.cjs.map +0 -1
  791. package/dist/_shared/rich-text-editor-DeIiIDn7.cjs +0 -2
  792. package/dist/_shared/rich-text-editor-DeIiIDn7.cjs.map +0 -1
  793. package/dist/_shared/rich-text-editor-VIBlL0x3.js +0 -620
  794. package/dist/_shared/rich-text-editor-VIBlL0x3.js.map +0 -1
  795. package/dist/_shared/settings-BeZOIEJB.js +0 -143
  796. package/dist/_shared/settings-BeZOIEJB.js.map +0 -1
  797. package/dist/_shared/settings-DI-K34bW.cjs +0 -2
  798. package/dist/_shared/settings-DI-K34bW.cjs.map +0 -1
  799. package/dist/_shared/sidebar-DfToCaiC.cjs +0 -2
  800. package/dist/_shared/sidebar-DfToCaiC.cjs.map +0 -1
  801. package/dist/_shared/sidebar-DhpRdTZH.js +0 -541
  802. package/dist/_shared/sidebar-DhpRdTZH.js.map +0 -1
  803. package/dist/_shared/spinner-D35zNriU.cjs +0 -2
  804. package/dist/_shared/spinner-D35zNriU.cjs.map +0 -1
  805. package/dist/_shared/spinner-DMC2IIml.js +0 -67
  806. package/dist/_shared/spinner-DMC2IIml.js.map +0 -1
  807. package/dist/_shared/table-B_pqCQxC.js +0 -1377
  808. package/dist/_shared/table-B_pqCQxC.js.map +0 -1
  809. package/dist/_shared/table-CGVOXtdv.cjs +0 -2
  810. package/dist/_shared/table-CGVOXtdv.cjs.map +0 -1
  811. package/dist/_shared/textarea-B24qgdmd.cjs +0 -2
  812. package/dist/_shared/textarea-B24qgdmd.cjs.map +0 -1
  813. package/dist/_shared/textarea-ChLRmmVU.js +0 -118
  814. package/dist/_shared/textarea-ChLRmmVU.js.map +0 -1
  815. package/dist/_shared/typography-CO9uwZhF.cjs +0 -2
  816. package/dist/_shared/typography-CO9uwZhF.cjs.map +0 -1
  817. package/dist/_shared/typography-DE0NGEIE.js +0 -201
  818. package/dist/_shared/typography-DE0NGEIE.js.map +0 -1
  819. package/dist/_shared/workspace-BgtWS9fA.cjs +0 -2
  820. package/dist/_shared/workspace-BgtWS9fA.cjs.map +0 -1
  821. package/dist/_shared/workspace-D2jJ0PlS.js +0 -357
  822. package/dist/_shared/workspace-D2jJ0PlS.js.map +0 -1
  823. package/dist/showcase/assets/AreaChart-Y0ZwblHU.js +0 -6
  824. package/dist/showcase/assets/CompositeItem-BIY_Cp7P.js +0 -1
  825. package/dist/showcase/assets/CompositeRoot-DSPvBRQr.js +0 -1
  826. package/dist/showcase/assets/DialogTrigger-DHUp8vXe.js +0 -1
  827. package/dist/showcase/assets/LabelableContext-CasUI4hR.js +0 -1
  828. package/dist/showcase/assets/PreviewLayout-B_l930k0.js +0 -1
  829. package/dist/showcase/assets/RadioGroup-BgZ-UH79.js +0 -1
  830. package/dist/showcase/assets/ScrollAreaCorner-BbwFElLA.js +0 -1
  831. package/dist/showcase/assets/Separator-dQuencsA.js +0 -1
  832. package/dist/showcase/assets/ToolbarRootContext-BE0hbejq.js +0 -1
  833. package/dist/showcase/assets/accordion-D93ZNsLn.js +0 -171
  834. package/dist/showcase/assets/accordion-variants-Bl4bIQH4.js +0 -1
  835. package/dist/showcase/assets/action-menu--rEgMzDi.js +0 -1
  836. package/dist/showcase/assets/actions-3iedOWD9.js +0 -310
  837. package/dist/showcase/assets/activities-CyrAWFlu.js +0 -500
  838. package/dist/showcase/assets/activities-feed-card-bhIATc2O.js +0 -1
  839. package/dist/showcase/assets/admin-CZzNsj2q.js +0 -140
  840. package/dist/showcase/assets/ai-CasHwkW4.js +0 -207
  841. package/dist/showcase/assets/ai-artifact-BgWvrLAb.js +0 -2
  842. package/dist/showcase/assets/ai-chat-seS9aW-1.js +0 -568
  843. package/dist/showcase/assets/ai-elements-Tku5_ous.js +0 -387
  844. package/dist/showcase/assets/ai-tool-call-BU6xbmXG.js +0 -1
  845. package/dist/showcase/assets/alert-6Emt6KX2.js +0 -1
  846. package/dist/showcase/assets/alert-B6aLWiRW.js +0 -62
  847. package/dist/showcase/assets/alert-CtoTQ0vN.js +0 -93
  848. package/dist/showcase/assets/api-key-list-C0glWR3z.js +0 -1
  849. package/dist/showcase/assets/api-key-list-DcWSbY3u.js +0 -73
  850. package/dist/showcase/assets/app-sidebar-D_eNP_jh.js +0 -1
  851. package/dist/showcase/assets/arrow-down-qyKZ1H5j.js +0 -1
  852. package/dist/showcase/assets/arrow-left-C9I0h_su.js +0 -1
  853. package/dist/showcase/assets/arrow-right-DswaRsr6.js +0 -1
  854. package/dist/showcase/assets/arrow-up-5BijPOxK.js +0 -1
  855. package/dist/showcase/assets/arrow-up-right-CbVVNT6g.js +0 -1
  856. package/dist/showcase/assets/avatar-BYHVCvVW.js +0 -67
  857. package/dist/showcase/assets/avatar-BlLAVC87.js +0 -1
  858. package/dist/showcase/assets/avatar-DQTXjcS4.js +0 -1
  859. package/dist/showcase/assets/avatar-DveZy09C.js +0 -57
  860. package/dist/showcase/assets/badge-Bth3mRTh.js +0 -31
  861. package/dist/showcase/assets/badge-check-DocF8Ho3.js +0 -1
  862. package/dist/showcase/assets/bell-DXBoeAzi.js +0 -1
  863. package/dist/showcase/assets/bot-Ch-Y1HK8.js +0 -1
  864. package/dist/showcase/assets/box-72m9QSDa.js +0 -1
  865. package/dist/showcase/assets/braces-CC17X3TE.js +0 -1
  866. package/dist/showcase/assets/brain-Dvbla_5x.js +0 -1
  867. package/dist/showcase/assets/brand-D5ciAq8v.js +0 -36
  868. package/dist/showcase/assets/breadcrumb-BBCaOVyz.js +0 -52
  869. package/dist/showcase/assets/breadcrumb-Bt8yVTCj.js +0 -1
  870. package/dist/showcase/assets/breadcrumbs-CkVWfcAN.js +0 -1
  871. package/dist/showcase/assets/briefcase-8rQTJwpE.js +0 -1
  872. package/dist/showcase/assets/building-2-CV7gTtXz.js +0 -1
  873. package/dist/showcase/assets/button-HGjoBio3.js +0 -44
  874. package/dist/showcase/assets/button-group-LWToSCrp.js +0 -1
  875. package/dist/showcase/assets/buttons-Bn_dX6Kk.js +0 -272
  876. package/dist/showcase/assets/calendar-BTsffmY8.js +0 -1
  877. package/dist/showcase/assets/calendar-Bhpyn4u0.js +0 -1
  878. package/dist/showcase/assets/calendar-DjrUTKcD.js +0 -16
  879. package/dist/showcase/assets/calendar-days-BKCkzWjV.js +0 -1
  880. package/dist/showcase/assets/camera-EjpDG3mc.js +0 -1
  881. package/dist/showcase/assets/card-Bp6iGuOF.js +0 -188
  882. package/dist/showcase/assets/card-CHc6AVFt.js +0 -1
  883. package/dist/showcase/assets/card-primitives-Bv6XGPJd.js +0 -1
  884. package/dist/showcase/assets/card-radio-group-Ce9FsiSv.js +0 -1
  885. package/dist/showcase/assets/cards-_CGG9zir.js +0 -354
  886. package/dist/showcase/assets/carousel-BVbsKH2W.js +0 -449
  887. package/dist/showcase/assets/cell-renderers-CosD6Gby.js +0 -1
  888. package/dist/showcase/assets/chart-CwOp8Sf8.js +0 -358
  889. package/dist/showcase/assets/chart-column-sz871NdJ.js +0 -1
  890. package/dist/showcase/assets/checkbox-BO38TYqr.js +0 -1
  891. package/dist/showcase/assets/checkbox-W4MhlPlJ.js +0 -1
  892. package/dist/showcase/assets/chevron-down-BFh1Fz2P.js +0 -1
  893. package/dist/showcase/assets/chevron-left-C5_X5glO.js +0 -1
  894. package/dist/showcase/assets/chevron-up-DPH3boVS.js +0 -1
  895. package/dist/showcase/assets/chevrons-up-down-CM5mIDaw.js +0 -1
  896. package/dist/showcase/assets/circle-BFDzL1iF.js +0 -1
  897. package/dist/showcase/assets/circle-alert-C6MbOB0m.js +0 -1
  898. package/dist/showcase/assets/circle-check-C0X85t4j.js +0 -1
  899. package/dist/showcase/assets/circle-check-big-CBaodck_.js +0 -1
  900. package/dist/showcase/assets/circle-dot-DdRpIhnL.js +0 -1
  901. package/dist/showcase/assets/circle-question-mark-CKlcead7.js +0 -1
  902. package/dist/showcase/assets/circle-x-MO44aKHe.js +0 -1
  903. package/dist/showcase/assets/clock-3-CXQJFcbh.js +0 -1
  904. package/dist/showcase/assets/clock-GhBJJ6n1.js +0 -1
  905. package/dist/showcase/assets/code-xml-BSX7Qyi5.js +0 -1
  906. package/dist/showcase/assets/collapsible-CZLTO5EH.js +0 -1
  907. package/dist/showcase/assets/collapsible-LrDO_sSQ.js +0 -27
  908. package/dist/showcase/assets/combobox-TmDBXkM-.js +0 -685
  909. package/dist/showcase/assets/command-9-r1qrJt.js +0 -1
  910. package/dist/showcase/assets/command-DGne3l9s.js +0 -1
  911. package/dist/showcase/assets/comment-composer-BI0qnvuY.js +0 -1
  912. package/dist/showcase/assets/comment-item-Cedds6Lm.js +0 -1
  913. package/dist/showcase/assets/comments-De02NOns.js +0 -357
  914. package/dist/showcase/assets/commerce-DldtS83o.js +0 -267
  915. package/dist/showcase/assets/composite-BjZZlzzb.js +0 -1
  916. package/dist/showcase/assets/contact-card-muCZ3uXV.js +0 -65
  917. package/dist/showcase/assets/content-container-BxSLICeL.js +0 -1
  918. package/dist/showcase/assets/copyable-DYhhmTqM.js +0 -1
  919. package/dist/showcase/assets/copyable-MNU75-J9.js +0 -96
  920. package/dist/showcase/assets/course-card-Dl1wsuJx.js +0 -77
  921. package/dist/showcase/assets/cpu-CsWq4fcX.js +0 -1
  922. package/dist/showcase/assets/credit-card-B0AUZiWw.js +0 -1
  923. package/dist/showcase/assets/css-variables-Be7DzahT.js +0 -1190
  924. package/dist/showcase/assets/currency-BtPM_Xtw.js +0 -149
  925. package/dist/showcase/assets/dark-surfaces-DRFERSEv.js +0 -90
  926. package/dist/showcase/assets/data-view-DmWd0h7G.js +0 -4
  927. package/dist/showcase/assets/data-view-DnLH2o0i.js +0 -124
  928. package/dist/showcase/assets/database-C0YqGaQ_.js +0 -1
  929. package/dist/showcase/assets/date-block-BQH25FLS.js +0 -1
  930. package/dist/showcase/assets/date-picker-BF-jevhh.js +0 -1
  931. package/dist/showcase/assets/date-pickers-q2v3ajJm.js +0 -73
  932. package/dist/showcase/assets/dense-info-Cb-roqDU.js +0 -106
  933. package/dist/showcase/assets/design-system-consistency-DMSJknaM.js +0 -264
  934. package/dist/showcase/assets/dialog-C0ALRmbP.js +0 -1
  935. package/dist/showcase/assets/dialog-CbXon08k.js +0 -1
  936. package/dist/showcase/assets/display-utilities-kBUVw7o3.js +0 -267
  937. package/dist/showcase/assets/dist-CTSkWj_M.js +0 -45
  938. package/dist/showcase/assets/dist-W8bxVfew.js +0 -1
  939. package/dist/showcase/assets/dollar-sign-VNxVZleW.js +0 -1
  940. package/dist/showcase/assets/download-Ds_6eIpx.js +0 -1
  941. package/dist/showcase/assets/dropdown-menu-C1G_y9dv.js +0 -1
  942. package/dist/showcase/assets/dropzone-CxOLmdkt.js +0 -1
  943. package/dist/showcase/assets/earth-HLyEI1oq.js +0 -1
  944. package/dist/showcase/assets/ellipsis-BLyAd9A-.js +0 -1
  945. package/dist/showcase/assets/ellipsis-vertical-TG4mYU2J.js +0 -1
  946. package/dist/showcase/assets/empty-B54k9xAG.js +0 -1
  947. package/dist/showcase/assets/empty-item-BmA4rmq7.js +0 -49
  948. package/dist/showcase/assets/empty-state-CH7gjjg7.js +0 -190
  949. package/dist/showcase/assets/empty-state-hUKvmKa-.js +0 -1
  950. package/dist/showcase/assets/enhanced-activities-BRDVL9RR.js +0 -357
  951. package/dist/showcase/assets/enhanced-combobox-2wbQJS6R.js +0 -1
  952. package/dist/showcase/assets/esm-CUTefMLr.js +0 -2
  953. package/dist/showcase/assets/event-calendar-Bf9xFZlt.js +0 -138
  954. package/dist/showcase/assets/event-log-CeRDSL-h.js +0 -330
  955. package/dist/showcase/assets/example-CJMJcnb4.js +0 -1
  956. package/dist/showcase/assets/external-link-CvXhYrnd.js +0 -1
  957. package/dist/showcase/assets/eye-Cl_GfUKH.js +0 -1
  958. package/dist/showcase/assets/feature-announcement-Dw0SokLo.js +0 -34
  959. package/dist/showcase/assets/file-CJFWrwy1.js +0 -1
  960. package/dist/showcase/assets/file-text-BTTFP8Jo.js +0 -1
  961. package/dist/showcase/assets/filter-layout-DUVqG5Ql.js +0 -1
  962. package/dist/showcase/assets/filters-BLcCaplV.js +0 -139
  963. package/dist/showcase/assets/flag-BxI3EGPG.js +0 -1
  964. package/dist/showcase/assets/folder-open-4d8qsiAj.js +0 -1
  965. package/dist/showcase/assets/form-field-Dhy0eM5B.js +0 -1
  966. package/dist/showcase/assets/form-sizing-C3UG5WKC.js +0 -1
  967. package/dist/showcase/assets/format-zGqa9Olc.js +0 -1
  968. package/dist/showcase/assets/forms-D99qG5Gb.js +0 -915
  969. package/dist/showcase/assets/funnel-Cg7SOShf.js +0 -1
  970. package/dist/showcase/assets/generic-CfrG943t.js +0 -1
  971. package/dist/showcase/assets/getPseudoElementBounds-lw5shsdM.js +0 -1
  972. package/dist/showcase/assets/gift-BXtKbzvA.js +0 -1
  973. package/dist/showcase/assets/giftcard-cards-CqYaN0jC.js +0 -85
  974. package/dist/showcase/assets/git-branch-BWAuIMOQ.js +0 -1
  975. package/dist/showcase/assets/global-search-CHUva8pR.js +0 -1
  976. package/dist/showcase/assets/global-search-Df7JovOG.js +0 -215
  977. package/dist/showcase/assets/globe-CvIW_foU.js +0 -1
  978. package/dist/showcase/assets/gradient-card-CdM2J1Hv.js +0 -58
  979. package/dist/showcase/assets/hash-wBs5gyr_.js +0 -1
  980. package/dist/showcase/assets/header-DXPFmpUT.js +0 -1
  981. package/dist/showcase/assets/header-notifications-FsnCJLpe.js +0 -1
  982. package/dist/showcase/assets/heart-B4fOMIr6.js +0 -1
  983. package/dist/showcase/assets/hooks-DtMOMalj.js +0 -220
  984. package/dist/showcase/assets/house-hebmAxEE.js +0 -1
  985. package/dist/showcase/assets/icon-badge-DrZ5qGpa.js +0 -1
  986. package/dist/showcase/assets/icon-badge-JEug_P_U.js +0 -37
  987. package/dist/showcase/assets/image-CxNywgkb.js +0 -1
  988. package/dist/showcase/assets/inbox-DqAmGdDd.js +0 -1
  989. package/dist/showcase/assets/index-DujM0kEF.css +0 -2
  990. package/dist/showcase/assets/index-jD-KSiHu.js +0 -10
  991. package/dist/showcase/assets/inertValue-Dg9TwvOb.js +0 -1
  992. package/dist/showcase/assets/info-B5fZn_ZC.js +0 -1
  993. package/dist/showcase/assets/inline-stat-CklKufoA.js +0 -1
  994. package/dist/showcase/assets/inline-stat-Dep7oHIi.js +0 -15
  995. package/dist/showcase/assets/input-CkNgwwCs.js +0 -1
  996. package/dist/showcase/assets/input-DAPMRlKO.js +0 -1
  997. package/dist/showcase/assets/input-group-06D68uB6.js +0 -47
  998. package/dist/showcase/assets/input-group-Bq9aXQPG.js +0 -1
  999. package/dist/showcase/assets/inputs-C8G3y-zR.js +0 -155
  1000. package/dist/showcase/assets/installation-BV5xOvoE.js +0 -134
  1001. package/dist/showcase/assets/invoice-header-BcUxzT68.js +0 -36
  1002. package/dist/showcase/assets/invoice-items-B42Jfxl7.js +0 -36
  1003. package/dist/showcase/assets/invoice-mini-RJGdlErg.js +0 -14
  1004. package/dist/showcase/assets/invoice-table--MdP6ysv.js +0 -30
  1005. package/dist/showcase/assets/isSameDay-srttAIjD.js +0 -1
  1006. package/dist/showcase/assets/isToday-BPub5Zvi.js +0 -1
  1007. package/dist/showcase/assets/italic-1BNA_XlU.js +0 -1
  1008. package/dist/showcase/assets/item-B9KyqUGa.js +0 -139
  1009. package/dist/showcase/assets/item-DoIlPm6J.js +0 -1
  1010. package/dist/showcase/assets/item-ffIfXEGd.js +0 -1
  1011. package/dist/showcase/assets/kanban-Cfad3edR.js +0 -188
  1012. package/dist/showcase/assets/key-round-J11Zc216.js +0 -1
  1013. package/dist/showcase/assets/label-DqaB8ZB2.js +0 -1
  1014. package/dist/showcase/assets/languages-D9UaP3QU.js +0 -1
  1015. package/dist/showcase/assets/layers-QXZ9Jfej.js +0 -1
  1016. package/dist/showcase/assets/layout-app-shell-CW1eRJmU.js +0 -608
  1017. package/dist/showcase/assets/layout-auth-j4K6lveg.js +0 -790
  1018. package/dist/showcase/assets/layout-containers-NclLtsV0.js +0 -101
  1019. package/dist/showcase/assets/layout-header-B8AOTiwL.js +0 -203
  1020. package/dist/showcase/assets/layout-page-DM79QHyW.js +0 -314
  1021. package/dist/showcase/assets/layout-primitives-Dyop-WMt.js +0 -34
  1022. package/dist/showcase/assets/layout-sidebar-uBNaHqjD.js +0 -224
  1023. package/dist/showcase/assets/layout-users-BkhDiOOz.js +0 -117
  1024. package/dist/showcase/assets/layout-workspace-C2hSimZW.js +0 -191
  1025. package/dist/showcase/assets/lib-CDssULuD.js +0 -1
  1026. package/dist/showcase/assets/list-checks-DA2jqXdm.js +0 -1
  1027. package/dist/showcase/assets/lock-BDZLNQLR.js +0 -1
  1028. package/dist/showcase/assets/lock-keyhole-CWYENd9O.js +0 -1
  1029. package/dist/showcase/assets/mail-CCdaRmft.js +0 -1
  1030. package/dist/showcase/assets/mail-check-DZF1VbCX.js +0 -1
  1031. package/dist/showcase/assets/map-CDFEmmZH.js +0 -124
  1032. package/dist/showcase/assets/map-pin-CdV-R6nt.js +0 -1
  1033. package/dist/showcase/assets/media-library-BJyn1s9d.js +0 -699
  1034. package/dist/showcase/assets/mention-inline-suggestions-DPO6FhXx.js +0 -1
  1035. package/dist/showcase/assets/mentions-DtWHbcS6.js +0 -138
  1036. package/dist/showcase/assets/menus-BmjngFE4.js +0 -171
  1037. package/dist/showcase/assets/message-square-bM29txT3.js +0 -1
  1038. package/dist/showcase/assets/metadata-list-DvYTAJri.js +0 -286
  1039. package/dist/showcase/assets/metadata-list-xVUTVyy9.js +0 -1
  1040. package/dist/showcase/assets/metric-BPNCh4eA.js +0 -1
  1041. package/dist/showcase/assets/metric-bar-BX4sCMrM.js +0 -1
  1042. package/dist/showcase/assets/metric-grid-IyHP3nmU.js +0 -1
  1043. package/dist/showcase/assets/metric-trend-chip-Dih8eR17.js +0 -1
  1044. package/dist/showcase/assets/metrics-analytics-bar-DK16RNMs.js +0 -44
  1045. package/dist/showcase/assets/metrics-analytics-cards-Byyl13YT.js +0 -50
  1046. package/dist/showcase/assets/metrics-comparison-DGHFMBL-.js +0 -76
  1047. package/dist/showcase/assets/metrics-heatmap-Bl6C7i0j.js +0 -27
  1048. package/dist/showcase/assets/metrics-inline-badge-Bz79zbNK.js +0 -17
  1049. package/dist/showcase/assets/metrics-kpi-row-DzZ9dRFY.js +0 -31
  1050. package/dist/showcase/assets/metrics-micro-grid-DyoQiuzr.js +0 -42
  1051. package/dist/showcase/assets/metrics-overview-DoyHPEZw.js +0 -192
  1052. package/dist/showcase/assets/metrics-stat-cards-B1b7NFqW.js +0 -54
  1053. package/dist/showcase/assets/minus-BE2L5hVc.js +0 -1
  1054. package/dist/showcase/assets/money-display-CXQ_8LfA.js +0 -1
  1055. package/dist/showcase/assets/month-year-picker-ra8FEN8F.js +0 -1
  1056. package/dist/showcase/assets/navigation-CFfVZQJ1.js +0 -231
  1057. package/dist/showcase/assets/navigation-Da0MVkqr.js +0 -90
  1058. package/dist/showcase/assets/navigation-extras-LpsdoXfx.js +0 -43
  1059. package/dist/showcase/assets/onboarding-checklist-DPNatNOk.js +0 -119
  1060. package/dist/showcase/assets/overflow-tab-bar-C0vTzcEY.js +0 -1
  1061. package/dist/showcase/assets/overlays-Blmbun0J.js +0 -408
  1062. package/dist/showcase/assets/overlays-t0joc10Y.js +0 -159
  1063. package/dist/showcase/assets/overview-Ckq8vbOR.js +0 -184
  1064. package/dist/showcase/assets/package-Cjod_a06.js +0 -1
  1065. package/dist/showcase/assets/package-check-JRHaNnkl.js +0 -1
  1066. package/dist/showcase/assets/page-9xr7xnuW.js +0 -1
  1067. package/dist/showcase/assets/page-action-button-BRXnfsEx.js +0 -1
  1068. package/dist/showcase/assets/page-header-Bdlxfn_9.js +0 -1
  1069. package/dist/showcase/assets/pagination-CeaYhOvv.js +0 -42
  1070. package/dist/showcase/assets/pagination-DdZZHvNF.js +0 -1
  1071. package/dist/showcase/assets/paperclip-BRM-yXTB.js +0 -1
  1072. package/dist/showcase/assets/password-input-1FVEugoO.js +0 -1
  1073. package/dist/showcase/assets/pencil-DiG2dQ8F.js +0 -1
  1074. package/dist/showcase/assets/phone-BREyNZN-.js +0 -1
  1075. package/dist/showcase/assets/plus-CQcelTNc.js +0 -1
  1076. package/dist/showcase/assets/popover-Czmwspmc.js +0 -1
  1077. package/dist/showcase/assets/popover-menu-beuCaiLt.js +0 -1
  1078. package/dist/showcase/assets/popover-uqk7myG2.js +0 -1
  1079. package/dist/showcase/assets/products-DGNqIbLs.js +0 -423
  1080. package/dist/showcase/assets/progress-D76Df908.js +0 -1
  1081. package/dist/showcase/assets/progress-DjUprSDD.js +0 -18
  1082. package/dist/showcase/assets/props-table-DoDq8Mvr.js +0 -1
  1083. package/dist/showcase/assets/quote-BvGGgyJ0.js +0 -1
  1084. package/dist/showcase/assets/receipt-rgnlMgyi.js +0 -1
  1085. package/dist/showcase/assets/receipt-text-CBQrVlnU.js +0 -1
  1086. package/dist/showcase/assets/refinement-guide-B_BpIMxm.js +0 -189
  1087. package/dist/showcase/assets/refresh-cw-C-yHy6B7.js +0 -1
  1088. package/dist/showcase/assets/resolveValueLabel-0bwEvIG-.js +0 -1
  1089. package/dist/showcase/assets/resource-8f61BZ8t.js +0 -1
  1090. package/dist/showcase/assets/resource-BEh6R0gu.js +0 -139
  1091. package/dist/showcase/assets/resource-selector-card-DJwXY_Ms.js +0 -43
  1092. package/dist/showcase/assets/rich-text-editor-D433iv0N.js +0 -143
  1093. package/dist/showcase/assets/rich-text-editor-vTRfWsOK.js +0 -124
  1094. package/dist/showcase/assets/rotate-ccw-JuE4H14F.js +0 -1
  1095. package/dist/showcase/assets/route-eSu1bFNn.js +0 -1
  1096. package/dist/showcase/assets/save-Bpjj-rBP.js +0 -1
  1097. package/dist/showcase/assets/schema-form-DmOpxd96.js +0 -327
  1098. package/dist/showcase/assets/scroll-area-B9OdCBy9.js +0 -32
  1099. package/dist/showcase/assets/scroll-area-BH80l2As.js +0 -1
  1100. package/dist/showcase/assets/section-BPNIPavy.js +0 -1
  1101. package/dist/showcase/assets/select-BauiG1a3.js +0 -1
  1102. package/dist/showcase/assets/select-CPopSr5c.js +0 -1
  1103. package/dist/showcase/assets/send-DNCcBKXs.js +0 -1
  1104. package/dist/showcase/assets/separator-BK0beCOv.js +0 -28
  1105. package/dist/showcase/assets/separator-CKM9A-mm.js +0 -1
  1106. package/dist/showcase/assets/settings-2-B8fz7JZB.js +0 -1
  1107. package/dist/showcase/assets/settings-Cy2y3sQw.js +0 -1
  1108. package/dist/showcase/assets/sheet-C7VWkXE1.js +0 -1
  1109. package/dist/showcase/assets/shield-ClPev4gS.js +0 -1
  1110. package/dist/showcase/assets/shield-alert-6XO5YZ5u.js +0 -1
  1111. package/dist/showcase/assets/shield-check-DSfGVZq0.js +0 -1
  1112. package/dist/showcase/assets/shopping-bag-DzMrGvpF.js +0 -1
  1113. package/dist/showcase/assets/showcase-DuZaO6q9.js +0 -132
  1114. package/dist/showcase/assets/sidebar-7y9EQYWf.js +0 -1
  1115. package/dist/showcase/assets/sidebar.context-DUheJD8t.js +0 -1
  1116. package/dist/showcase/assets/skeleton-Dgr8Vabr.js +0 -29
  1117. package/dist/showcase/assets/skeleton-HSpErFqw.js +0 -1
  1118. package/dist/showcase/assets/slider-B7f81APg.js +0 -1
  1119. package/dist/showcase/assets/smart-card-p97LLZCW.js +0 -1
  1120. package/dist/showcase/assets/sonner-CWazrN19.js +0 -22
  1121. package/dist/showcase/assets/sortable.esm-uufol7Mz.js +0 -5
  1122. package/dist/showcase/assets/sparkles-Z4V23xKK.js +0 -1
  1123. package/dist/showcase/assets/spinner-BUgjAjWE.js +0 -49
  1124. package/dist/showcase/assets/spinner-CXu7z8-j.js +0 -1
  1125. package/dist/showcase/assets/spinner-DCwR0mnD.js +0 -30
  1126. package/dist/showcase/assets/square-pen-jwp_OWMQ.js +0 -1
  1127. package/dist/showcase/assets/stacked-avatars-CHEpTotO.js +0 -1
  1128. package/dist/showcase/assets/star-Ck8Lg5hm.js +0 -1
  1129. package/dist/showcase/assets/startOfDay-BzULZHy4.js +0 -1
  1130. package/dist/showcase/assets/styles-CNYitflH.js +0 -1
  1131. package/dist/showcase/assets/suggestions-CSF9MlKl.js +0 -126
  1132. package/dist/showcase/assets/switch-BX9KSLIF.js +0 -1
  1133. package/dist/showcase/assets/switch-Bn0WaWa9.js +0 -1
  1134. package/dist/showcase/assets/sync-BuKBnqWW.js +0 -124
  1135. package/dist/showcase/assets/table-DNJcLaud.js +0 -686
  1136. package/dist/showcase/assets/table-NfpOWGsG.js +0 -1
  1137. package/dist/showcase/assets/table-actions-Ci9Yszp0.js +0 -1
  1138. package/dist/showcase/assets/tabs-CYNFQdIr.js +0 -19
  1139. package/dist/showcase/assets/tabs-Cm_p6znb.js +0 -1
  1140. package/dist/showcase/assets/tags-input-DE4QZqS_.js +0 -1
  1141. package/dist/showcase/assets/text-button-D9llh4pU.js +0 -1
  1142. package/dist/showcase/assets/text-link-ZT6QGJOL.js +0 -1
  1143. package/dist/showcase/assets/textarea-CgcHuGVq.js +0 -1
  1144. package/dist/showcase/assets/textarea-D2uT_GJt.js +0 -1
  1145. package/dist/showcase/assets/timelines-BEFO7tJ0.js +0 -200
  1146. package/dist/showcase/assets/toggle-group-oYpa59lN.js +0 -1
  1147. package/dist/showcase/assets/toggles-BL93YmQo.js +0 -71
  1148. package/dist/showcase/assets/toggles-group-BG-xiQCY.js +0 -32
  1149. package/dist/showcase/assets/tooltip-BMI7zHwP.js +0 -31
  1150. package/dist/showcase/assets/trash-2-CtRtVsCy.js +0 -1
  1151. package/dist/showcase/assets/trending-up-2NQ-P8vB.js +0 -1
  1152. package/dist/showcase/assets/truck-Cl0nyN_j.js +0 -1
  1153. package/dist/showcase/assets/typography-C7pCPhg7.js +0 -223
  1154. package/dist/showcase/assets/ui-badge-BvmuMzSq.js +0 -28
  1155. package/dist/showcase/assets/ui-card-B7ziOMAn.js +0 -30
  1156. package/dist/showcase/assets/ui-table-BEFHakBU.js +0 -42
  1157. package/dist/showcase/assets/upload-tray-CMKqTtEp.js +0 -138
  1158. package/dist/showcase/assets/use-layout-link-nEU6ctSs.js +0 -1
  1159. package/dist/showcase/assets/useAnchoredPopupScrollLock-B1xyKMh7.js +0 -1
  1160. package/dist/showcase/assets/useAriaLabelledBy-BMlFgz-H.js +0 -1
  1161. package/dist/showcase/assets/useCollapsiblePanel-BEzH6TC2.js +0 -1
  1162. package/dist/showcase/assets/useCompositeItem-CIuww7-p.js +0 -1
  1163. package/dist/showcase/assets/useCompositeListItem-PrMTh4tz.js +0 -1
  1164. package/dist/showcase/assets/useLabelableId-BBLkeLGr.js +0 -1
  1165. package/dist/showcase/assets/useOpenInteractionType-CW0quo3l.js +0 -1
  1166. package/dist/showcase/assets/useRender-6NNMHJJU.js +0 -1
  1167. package/dist/showcase/assets/useTriggerFocusGuards-DEza_iee.js +0 -1
  1168. package/dist/showcase/assets/useValueChanged-BmWIb3SN.js +0 -1
  1169. package/dist/showcase/assets/user-BDIP5UPS.js +0 -1
  1170. package/dist/showcase/assets/user-plus-BCqHFh2h.js +0 -1
  1171. package/dist/showcase/assets/users-Bh7xGRX2.js +0 -1
  1172. package/dist/showcase/assets/vendor-profile-BlYcRbPI.js +0 -37
  1173. package/dist/showcase/assets/video-BucshqNW.js +0 -1
  1174. package/dist/showcase/assets/wrench-DQvhyTEb.js +0 -1
  1175. package/dist/showcase/assets/x-DyuS4YRT.js +0 -1
  1176. package/dist/showcase/assets/zap-Dpn8_pnQ.js +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"combobox-BIe72dV3.js","names":[],"sources":["../../src/components/ui/combobox.tsx","../../src/components/base/combobox/combobox.strings.ts","../../src/components/base/combobox/constants.ts","../../src/components/base/combobox/components/loading-more.tsx","../../src/components/base/combobox/components/status-content.tsx","../../src/components/base/combobox/components/combobox-dropdown.tsx","../../src/components/base/combobox/components/error-message.tsx","../../src/components/base/combobox/components/highlighted-text.tsx","../../src/components/base/combobox/hooks/use-debounced-search.ts","../../src/components/base/combobox/hooks/use-grouped-items.ts","../../src/components/base/combobox/hooks/use-load-more.ts","../../src/components/base/combobox/hooks/use-enhanced-combobox-core.tsx","../../src/components/base/combobox/enhanced-combobox.tsx","../../src/components/base/combobox/async-resource-combobox.tsx"],"sourcesContent":["import { Combobox as ComboboxPrimitive } from '@base-ui/react/combobox';\nimport { CheckIcon, ChevronDownIcon, XIcon } from 'lucide-react';\nimport * as React from 'react';\nimport { cn } from '@/lib/utils';\n\nconst Combobox = ComboboxPrimitive.Root;\n\nfunction ComboboxInput({\n\tclassName,\n\t...props\n}: ComboboxPrimitive.Input.Props) {\n\treturn (\n\t\t<ComboboxPrimitive.Input\n\t\t\tdata-slot=\"combobox-input\"\n\t\t\tclassName={cn(\n\t\t\t\t'border-input file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground flex h-10 w-full min-w-0 rounded-md border bg-background px-3 py-2 text-sm shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\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 aria-invalid:bg-destructive/15 aria-invalid:placeholder:text-destructive',\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction ComboboxTrigger({\n\tclassName,\n\tchildren,\n\t...props\n}: ComboboxPrimitive.Trigger.Props) {\n\treturn (\n\t\t<ComboboxPrimitive.Trigger\n\t\t\tdata-slot=\"combobox-trigger\"\n\t\t\tclassName={cn(\n\t\t\t\t'border-input file:text-foreground placeholder:text-muted-foreground flex h-10 w-full items-center justify-between rounded-md border bg-background px-3 py-2 text-sm shadow-xs transition-[color,box-shadow] outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\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 aria-invalid:bg-destructive/15 aria-invalid:placeholder:text-destructive',\n\t\t\t\t'[&>span]:line-clamp-1',\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t\t<ComboboxPrimitive.Icon className=\"flex\">\n\t\t\t\t<ChevronDownIcon className=\"size-4 opacity-50\" />\n\t\t\t</ComboboxPrimitive.Icon>\n\t\t</ComboboxPrimitive.Trigger>\n\t);\n}\n\nfunction ComboboxValue({\n\tplaceholder,\n\t...props\n}: ComboboxPrimitive.Value.Props & { placeholder?: React.ReactNode }) {\n\treturn (\n\t\t<ComboboxPrimitive.Value\n\t\t\tdata-slot=\"combobox-value\"\n\t\t\tplaceholder={\n\t\t\t\t!!placeholder && <span className=\"text-muted-foreground\">{placeholder}</span>\n\t\t\t}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction ComboboxClear({\n\tclassName,\n\t...props\n}: ComboboxPrimitive.Clear.Props) {\n\treturn (\n\t\t<ComboboxPrimitive.Clear\n\t\t\tdata-slot=\"combobox-clear\"\n\t\t\tclassName={cn(\n\t\t\t\t'absolute right-8 top-1/2 -translate-y-1/2 rounded-sm opacity-50 ring-offset-background transition-opacity',\n\t\t\t\t'hover:opacity-100 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n\t\t\t\t'disabled:pointer-events-none',\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<XIcon className=\"size-4\" />\n\t\t</ComboboxPrimitive.Clear>\n\t);\n}\n\nexport type ComboboxSize = 'sm' | 'md' | 'lg';\n\nconst inputSizeClasses: Record<ComboboxSize, string> = {\n\tsm: 'h-8 text-xs pl-2 pr-8',\n\tmd: 'h-10 text-sm pl-3 pr-10',\n\tlg: 'h-12 text-base pl-4 pr-12',\n};\n\nconst inputSizeWithClearClasses: Record<ComboboxSize, string> = {\n\tsm: 'pr-14',\n\tmd: 'pr-16',\n\tlg: 'pr-20',\n};\n\nconst iconContainerSizeClasses: Record<ComboboxSize, string> = {\n\tsm: 'right-1',\n\tmd: 'right-2',\n\tlg: 'right-3',\n};\n\nconst iconSizeClasses: Record<ComboboxSize, string> = {\n\tsm: 'size-3',\n\tmd: 'size-4',\n\tlg: 'size-5',\n};\n\ntype ComboboxInputTriggerProps = Omit<ComboboxPrimitive.Input.Props, 'size'> & {\n\tshowClear?: boolean;\n\tsize?: ComboboxSize;\n\terror?: boolean;\n};\n\nfunction ComboboxInputTrigger({\n\tclassName,\n\tshowClear = false,\n\tsize = 'md',\n\terror,\n\t...props\n}: ComboboxInputTriggerProps) {\n\treturn (\n\t\t<div className=\"relative\">\n\t\t\t<ComboboxPrimitive.Input\n\t\t\t\tdata-slot=\"combobox-input\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'border-input file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground w-full min-w-0 rounded-md border bg-background shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n\t\t\t\t\t'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n\t\t\t\t\t'aria-invalid:ring-destructive/20 aria-invalid:border-destructive aria-invalid:bg-destructive/15 aria-invalid:placeholder:text-destructive',\n\t\t\t\t\tinputSizeClasses[size],\n\t\t\t\t\tshowClear && inputSizeWithClearClasses[size],\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t\taria-invalid={error || undefined}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'absolute top-1/2 -translate-y-1/2 flex items-center gap-1 text-muted-foreground',\n\t\t\t\t\ticonContainerSizeClasses[size]\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{!!showClear && (\n <ComboboxPrimitive.Clear\n\t\t\t\t\t\tdata-slot=\"combobox-clear\"\n\t\t\t\t\t\tclassName=\"rounded-sm p-1 opacity-50 hover:opacity-100 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<XIcon className={iconSizeClasses[size]} />\n\t\t\t\t\t</ComboboxPrimitive.Clear>\n )}\n\t\t\t\t<ComboboxPrimitive.Trigger className=\"rounded-sm p-1 hover:bg-accent focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\">\n\t\t\t\t\t<ChevronDownIcon className={iconSizeClasses[size]} />\n\t\t\t\t</ComboboxPrimitive.Trigger>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\n// Portal\nconst ComboboxPortal = ComboboxPrimitive.Portal;\n\n// Positioner\nfunction ComboboxPositioner({\n\tclassName,\n\tsideOffset = 4,\n\t...props\n}: ComboboxPrimitive.Positioner.Props) {\n\treturn (\n\t\t<ComboboxPrimitive.Positioner\n\t\t\tdata-slot=\"combobox-positioner\"\n\t\t\tsideOffset={sideOffset}\n\t\t\tclassName={cn('z-50 outline-none', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n// Popup (content)\nfunction ComboboxPopup({\n\tclassName,\n\t...props\n}: ComboboxPrimitive.Popup.Props) {\n\treturn (\n\t\t<ComboboxPrimitive.Popup\n\t\t\tdata-slot=\"combobox-popup\"\n\t\t\tclassName={cn(\n\t\t\t\t'w-[var(--anchor-width)] min-w-[8rem] max-w-[var(--available-width)] max-h-[min(var(--available-height),24rem)]',\n\t\t\t\t'overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md',\n\t\t\t\t'origin-[var(--transform-origin)]',\n\t\t\t\t'data-[starting-style]:opacity-0 data-[starting-style]:scale-95',\n\t\t\t\t'data-[ending-style]:opacity-0 data-[ending-style]:scale-95',\n\t\t\t\t'transition-[opacity,transform] duration-150',\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n// List\nfunction ComboboxList({\n\tclassName,\n\t...props\n}: ComboboxPrimitive.List.Props) {\n\treturn (\n\t\t<ComboboxPrimitive.List\n\t\t\tdata-slot=\"combobox-list\"\n\t\t\tclassName={cn(\n\t\t\t\t'max-h-[min(24rem,var(--available-height))] overflow-y-auto overscroll-contain p-1',\n\t\t\t\t'outline-none empty:hidden',\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n// Item\n//\n// Layout: `[content][indicator]` with the selection check pinned to the\n// right (`justify-between`). Consumers render leading icons naturally inside\n// `renderItem` — the `gap` between icon and label is set by the consumer.\nconst itemSizeClasses: Record<ComboboxSize, string> = {\n\tsm: 'py-1 px-2 text-xs gap-2',\n\tmd: 'py-1.5 px-2.5 text-sm gap-2',\n\tlg: 'py-2 px-3 text-base gap-2.5',\n};\n\nconst itemIndicatorSizeClasses: Record<ComboboxSize, string> = {\n\tsm: 'size-3',\n\tmd: 'size-4',\n\tlg: 'size-5',\n};\n\nfunction ComboboxItem({\n\tclassName,\n\tchildren,\n\tsize = 'md',\n\t...props\n}: ComboboxPrimitive.Item.Props & { size?: ComboboxSize }) {\n\treturn (\n\t\t<ComboboxPrimitive.Item\n\t\t\tdata-slot=\"combobox-item\"\n\t\t\tclassName={cn(\n\t\t\t\t'flex w-full cursor-default select-none items-center justify-between rounded-sm outline-none',\n\t\t\t\t'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n\t\t\t\t'data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground',\n\t\t\t\titemSizeClasses[size],\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<span className=\"flex min-w-0 flex-1 items-center gap-2 truncate\">\n\t\t\t\t{children}\n\t\t\t</span>\n\t\t\t<ComboboxPrimitive.ItemIndicator\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'flex shrink-0 items-center justify-center text-muted-foreground',\n\t\t\t\t\titemIndicatorSizeClasses[size]\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<CheckIcon className={itemIndicatorSizeClasses[size]} />\n\t\t\t</ComboboxPrimitive.ItemIndicator>\n\t\t</ComboboxPrimitive.Item>\n\t);\n}\n\n// Item Indicator (standalone)\nfunction ComboboxItemIndicator({\n\tclassName,\n\tchildren,\n\t...props\n}: ComboboxPrimitive.ItemIndicator.Props) {\n\treturn (\n\t\t<ComboboxPrimitive.ItemIndicator\n\t\t\tdata-slot=\"combobox-item-indicator\"\n\t\t\tclassName={cn(className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children ?? <CheckIcon className=\"size-4\" />}\n\t\t</ComboboxPrimitive.ItemIndicator>\n\t);\n}\n\n// Empty\nfunction ComboboxEmpty({\n\tclassName,\n\tchildren,\n\t...props\n}: ComboboxPrimitive.Empty.Props) {\n\treturn (\n\t\t<ComboboxPrimitive.Empty\n\t\t\tdata-slot=\"combobox-empty\"\n\t\t\tclassName={cn(\n\t\t\t\t'py-6 text-center text-sm text-muted-foreground empty:hidden',\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</ComboboxPrimitive.Empty>\n\t);\n}\n\n// Status (for async loading states)\nfunction ComboboxStatus({\n\tclassName,\n\t...props\n}: ComboboxPrimitive.Status.Props) {\n\treturn (\n\t\t<ComboboxPrimitive.Status\n\t\t\tdata-slot=\"combobox-status\"\n\t\t\tclassName={cn(\n\t\t\t\t'flex items-center gap-2 px-3 py-2 text-sm text-muted-foreground empty:hidden',\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n// Group\nfunction ComboboxGroup({\n\tclassName,\n\t...props\n}: ComboboxPrimitive.Group.Props) {\n\treturn (\n\t\t<ComboboxPrimitive.Group\n\t\t\tdata-slot=\"combobox-group\"\n\t\t\tclassName={cn('overflow-hidden p-1', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n// Group Label\nfunction ComboboxGroupLabel({\n\tclassName,\n\t...props\n}: ComboboxPrimitive.GroupLabel.Props) {\n\treturn (\n\t\t<ComboboxPrimitive.GroupLabel\n\t\t\tdata-slot=\"combobox-group-label\"\n\t\t\tclassName={cn('px-2 py-1.5 text-xs font-medium text-muted-foreground', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n// Collection (for rendering items)\nconst ComboboxCollection = ComboboxPrimitive.Collection;\n\n// Separator\nfunction ComboboxSeparator({\n\tclassName,\n\t...props\n}: ComboboxPrimitive.Separator.Props) {\n\treturn (\n\t\t<ComboboxPrimitive.Separator\n\t\t\tdata-slot=\"combobox-separator\"\n\t\t\tclassName={cn('-mx-1 my-1 h-px bg-muted', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n// Chips container (for multiple selection)\nconst chipsSizeClasses: Record<ComboboxSize, string> = {\n\tsm: 'min-h-8 gap-1 px-2 py-1 text-xs',\n\tmd: 'min-h-10 gap-1.5 px-3 py-2 text-sm',\n\tlg: 'min-h-12 gap-2 px-4 py-2.5 text-base',\n};\n\nfunction ComboboxChips({\n\tclassName,\n\tsize = 'md',\n\terror,\n\t...props\n}: React.ComponentPropsWithRef<typeof ComboboxPrimitive.Chips> & {\n\tsize?: ComboboxSize;\n\terror?: boolean;\n}) {\n\treturn (\n\t\t<ComboboxPrimitive.Chips\n\t\t\tdata-slot=\"combobox-chips\"\n\t\t\tclassName={cn(\n\t\t\t\t'flex flex-wrap items-center rounded-md border border-input bg-background ring-offset-background shadow-xs transition-[color,box-shadow] outline-none',\n\t\t\t\t'focus-within:border-ring focus-within:ring-ring/50 focus-within:ring-[3px]',\n\t\t\t\t'aria-invalid:ring-destructive/20 aria-invalid:border-destructive aria-invalid:bg-destructive/15',\n\t\t\t\tchipsSizeClasses[size],\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\taria-invalid={error || undefined}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n// Chip\nfunction ComboboxChip({\n\tclassName,\n\tchildren,\n\t...props\n}: ComboboxPrimitive.Chip.Props) {\n\treturn (\n\t\t<ComboboxPrimitive.Chip\n\t\t\tdata-slot=\"combobox-chip\"\n\t\t\tclassName={cn(\n\t\t\t\t'inline-flex items-center gap-1 rounded-md bg-secondary px-2 py-1 text-xs font-medium text-secondary-foreground',\n\t\t\t\t'data-[highlighted]:bg-primary data-[highlighted]:text-primary-foreground',\n\t\t\t\t'focus-within:bg-primary focus-within:text-primary-foreground',\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t\t<ComboboxPrimitive.ChipRemove className=\"rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\">\n\t\t\t\t<XIcon className=\"size-3\" />\n\t\t\t</ComboboxPrimitive.ChipRemove>\n\t\t</ComboboxPrimitive.Chip>\n\t);\n}\n\n// Chips Input\nfunction ComboboxChipsInput({\n\tclassName,\n\t...props\n}: ComboboxPrimitive.Input.Props) {\n\treturn (\n\t\t<ComboboxPrimitive.Input\n\t\t\tdata-slot=\"combobox-chips-input\"\n\t\t\tclassName={cn(\n\t\t\t\t'min-w-[80px] flex-1 bg-transparent outline-none placeholder:text-muted-foreground',\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n// Backdrop (for modal)\nfunction ComboboxBackdrop({\n\tclassName,\n\t...props\n}: ComboboxPrimitive.Backdrop.Props) {\n\treturn (\n\t\t<ComboboxPrimitive.Backdrop\n\t\t\tdata-slot=\"combobox-backdrop\"\n\t\t\tclassName={cn(\n\t\t\t\t'fixed inset-0 z-50 bg-black/80',\n\t\t\t\t'data-[starting-style]:opacity-0 data-[ending-style]:opacity-0',\n\t\t\t\t'transition-opacity duration-150',\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n// Arrow\nfunction ComboboxArrow({\n\tclassName,\n\t...props\n}: ComboboxPrimitive.Arrow.Props) {\n\treturn (\n\t\t<ComboboxPrimitive.Arrow\n\t\t\tdata-slot=\"combobox-arrow\"\n\t\t\tclassName={cn('fill-popover', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n// useFilter hook re-export\nconst useComboboxFilter = ComboboxPrimitive.useFilter;\n\nexport {\n\tCombobox,\n\tComboboxInput,\n\tComboboxInputTrigger,\n\tComboboxTrigger,\n\tComboboxValue,\n\tComboboxClear,\n\tComboboxPortal,\n\tComboboxPositioner,\n\tComboboxPopup,\n\tComboboxList,\n\tComboboxItem,\n\tComboboxItemIndicator,\n\tComboboxEmpty,\n\tComboboxStatus,\n\tComboboxGroup,\n\tComboboxGroupLabel,\n\tComboboxCollection,\n\tComboboxSeparator,\n\tComboboxChips,\n\tComboboxChip,\n\tComboboxChipsInput,\n\tComboboxBackdrop,\n\tComboboxArrow,\n\tuseComboboxFilter,\n};\n","/**\n * Default user-facing strings for `<EnhancedCombobox>`.\n *\n * Consumers wire backend i18n at the call site:\n *\n * <EnhancedCombobox strings={{ noResults: t('search.empty') }} … />\n *\n * Templates use `{placeholder}` tokens — the component substitutes them at\n * render time. Function-valued strings would also work; we keep templates\n * here for the constants file.\n */\nimport type { ComboboxStrings } from './types';\n\nexport const defaultComboboxStrings: ComboboxStrings = {\n\tplaceholder: 'Search...',\n\tclear: 'Clear selection',\n\ttoggle: 'Open options',\n\tsearching: 'Loading...',\n\tnoResults: 'No results found.',\n\ttypeToSearch: 'Type at least {min} characters to search...',\n\ttypeMore: 'Type {remaining} more character{s} to search...',\n\tcreateNew: 'Create {value}',\n\tloadingMore: 'Loading...',\n\tapply: 'Apply',\n\tcancel: 'Cancel',\n};\n\nexport type { ComboboxStrings };\n","/**\n * Constants and default values for the Enhanced Combobox component.\n *\n * Default strings live in `./combobox.strings.ts` per rule 19. The legacy\n * `DEFAULT_STRINGS` alias is re-exported below for any external consumer\n * still using the old name; new code should import `defaultComboboxStrings`\n * from `./combobox.strings`.\n */\n\nexport { defaultComboboxStrings, defaultComboboxStrings as DEFAULT_STRINGS } from './combobox.strings';\n\n// ============================================================================\n// Default Values\n// ============================================================================\n\nexport const DEFAULT_MIN_SEARCH_LENGTH = 3;\nexport const DEFAULT_DEBOUNCE_MS = 300;\nexport const DEFAULT_SIZE = 'default';\nexport const LOAD_MORE_THRESHOLD = 0.8;\nexport const LOAD_MORE_DEBOUNCE_MS = 100;\nexport const LOAD_MORE_COOLDOWN_MS = 500;\n\n// ============================================================================\n// Symbols\n// ============================================================================\n\nexport const CREATE_OPTION_SYMBOL = Symbol('enhanced-combobox-create-option');\n\n// ============================================================================\n// Type Guards\n// ============================================================================\n\nexport function isCreateOption<T>(item: T): item is T & { [CREATE_OPTION_SYMBOL]: string } {\n\treturn (\n\t\ttypeof item === 'object' &&\n\t\titem !== null &&\n\t\tCREATE_OPTION_SYMBOL in (item as object)\n\t);\n}\n\nexport function getCreateOptionValue<T>(item: T): string {\n\tif (!isCreateOption(item)) {\n\t\tthrow new Error('Item is not a create option');\n\t}\n\treturn (item as { [CREATE_OPTION_SYMBOL]: string })[CREATE_OPTION_SYMBOL];\n}\n\nexport function createCreateOption<T>(inputValue: string): T {\n\treturn { [CREATE_OPTION_SYMBOL]: inputValue } as unknown as T;\n}\n","/**\n * LoadingMore Component\n */\n\nimport { Loader2 } from 'lucide-react';\nimport * as React from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface LoadingMoreProps {\n\tisLoading: boolean;\n\ttext: string;\n\tclassName?: string;\n}\n\nexport function LoadingMore({\n\tisLoading,\n\ttext,\n\tclassName,\n}: LoadingMoreProps): React.ReactElement | null {\n\tif (!isLoading) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn('loading-more--component', \n\t\t\t\t'flex items-center justify-center gap-space-sm px-control py-space-xs text-xs text-muted-foreground',\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\trole=\"status\"\n\t\t\taria-live=\"polite\"\n\t\t>\n\t\t\t<Loader2 className=\"size-icon-sm animate-spin\" aria-hidden=\"true\" />\n\t\t\t<span>{text}</span>\n\t\t</div>\n\t);\n}\n\nLoadingMore.displayName = 'LoadingMore';\n","/**\n * StatusContent Component\n */\n\nimport { Loader2 } from 'lucide-react';\nimport * as React from 'react';\nimport type { ComboboxStrings } from '../types';\n\nexport interface StatusContentProps {\n\tisLoading?: boolean;\n\tsearchValue: string;\n\tminSearchLength: number;\n\titemCount: number;\n\tstrings: ComboboxStrings;\n}\n\nexport function StatusContent({\n\tisLoading,\n\tsearchValue,\n\tminSearchLength,\n\titemCount,\n\tstrings,\n}: StatusContentProps): React.ReactNode {\n\tconst trimmed = searchValue.trim();\n\n\tif (isLoading) {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<Loader2 className=\"size-icon-sm animate-spin\" />\n\t\t\t\t{strings.searching}\n\t\t\t</>\n\t\t);\n\t}\n\n\tif (trimmed === '') {\n\t\tif (strings.typeToSearch.includes('{min}')) {\n\t\t\treturn strings.typeToSearch.replace('{min}', String(minSearchLength));\n\t\t}\n\t\treturn strings.typeToSearch;\n\t}\n\n\tif (trimmed.length < minSearchLength) {\n\t\tconst remaining = minSearchLength - trimmed.length;\n\t\tif (strings.typeMore.includes('{remaining}') || strings.typeMore.includes('{s}')) {\n\t\t\treturn strings.typeMore\n\t\t\t\t.replace('{remaining}', String(remaining))\n\t\t\t\t.replace('{s}', remaining !== 1 ? 's' : '');\n\t\t}\n\t\treturn strings.typeMore;\n\t}\n\n\tif (itemCount === 0) {\n\t\treturn null;\n\t}\n\n\treturn null;\n}\n\nStatusContent.displayName = 'StatusContent';\n","/**\n * Shared ComboboxDropdown Component\n *\n * Renders the dropdown content for both single and multiple selection variants.\n * Extracts shared rendering logic to reduce duplication.\n */\n\nimport * as React from 'react';\n\nimport {\n\tComboboxPortal,\n\tComboboxPositioner,\n\tComboboxPopup,\n\tComboboxEmpty,\n\tComboboxList,\n\tComboboxItem,\n\tComboboxStatus,\n\tComboboxGroup,\n\tComboboxGroupLabel,\n\tComboboxCollection,\n} from '@/components/ui/combobox';\nimport { Button } from '@/components/base/buttons';\nimport { ScrollArea } from '@/components/base/display/scroll-area';\n\nimport { DEFAULT_SIZE } from '../constants';\nimport type { ComboboxStrings, ComboboxSize } from '../types';\nimport { LoadingMore } from './loading-more';\nimport { StatusContent } from './status-content';\n\nconst primitiveSizeByComboboxSize: Record<ComboboxSize, 'sm' | 'md'> = {\n\tsmall: 'sm',\n\tdefault: 'md',\n};\n\nconst itemClassByComboboxSize: Record<ComboboxSize, string> = {\n\tsmall: 'min-h-control-sm gap-space-lg rounded-md px-row-x py-row-y text-xs leading-tight [&>span:first-child]:gap-space-lg [&>span:first-child]:text-xs',\n\tdefault: 'min-h-control gap-space-lg rounded-md px-row-x py-row-y text-sm leading-tight [&>span:first-child]:gap-space-lg [&>span:first-child]:text-sm',\n};\n\nconst groupLabelClassName =\n\t'px-row-x py-row-y text-xxs font-medium uppercase tracking-wide text-muted-foreground';\n\nexport interface ComboboxDropdownProps<T> {\n\t// Display state\n\tisLoading: boolean;\n\tshowStatus: boolean;\n\tshowEmpty: boolean;\n\n\t// Search\n\tsearchValue: string;\n\tminSearchLength: number;\n\n\t// Items\n\titems: T[];\n\tgroupedItems: Map<string, T[]> | null;\n\tcreateOptionItem: T | null;\n\n\t// Rendering\n\trenderItemContent: (item: T) => React.ReactNode;\n\tgetItemReactKey: (item: T) => string;\n\tgetItemDisabled?: (item: T) => boolean;\n\trenderGroupLabel?: (group: string) => React.ReactNode;\n\n\t// Load more\n\tisLoadingMore?: boolean;\n\n\t// Strings\n\tstrings: ComboboxStrings;\n\n\t// Size\n\tsize?: ComboboxSize;\n\n\t// Portal\n\tportalContainer?: React.RefObject<HTMLElement | null>;\n\n\t// Refs\n\tlistRef: React.RefObject<HTMLDivElement | null>;\n\n\t// Multiple selection anchor\n\tanchor?: React.RefObject<HTMLElement | null>;\n\n\t/** Optional apply / cancel footer for the apply-button workflow. */\n\tapplyFooter?: {\n\t\tapplyLabel: string;\n\t\tcancelLabel: string;\n\t\tonApply: () => void;\n\t\tonCancel: () => void;\n\t};\n}\n\nexport function ComboboxDropdown<T>({\n\tisLoading,\n\tshowStatus,\n\tshowEmpty,\n\tsearchValue,\n\tminSearchLength,\n\titems,\n\tgroupedItems,\n\tcreateOptionItem,\n\trenderItemContent,\n\tgetItemReactKey,\n\tgetItemDisabled,\n\trenderGroupLabel,\n\tisLoadingMore,\n\tstrings,\n\tsize = DEFAULT_SIZE,\n\tportalContainer,\n\tlistRef,\n\tanchor,\n\tapplyFooter,\n}: ComboboxDropdownProps<T>): React.ReactElement {\n\tconst positionerClassName = portalContainer != null ? 'z-[100]' : undefined;\n\tconst primitiveSize = primitiveSizeByComboboxSize[size];\n\n\tconst content = (\n\t\t<ComboboxPositioner\n\t\t\tanchor={anchor}\n\t\t\tclassName={positionerClassName}\n\t\t>\n\t\t\t<ComboboxPopup\n\t\t\t\taria-busy={isLoading || undefined}\n\t\t\t\tclassName=\"combobox-dropdown--popup rounded-radius border-border/70 shadow-sm\"\n\t\t\t>\n\t\t\t\t{/* Status message */}\n\t\t\t\t{!!showStatus && (\n\t\t\t\t\t<ComboboxStatus className=\"gap-space-sm px-control py-space-xs text-xs text-muted-foreground\">\n\t\t\t\t\t\t<StatusContent\n\t\t\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\t\t\tsearchValue={searchValue}\n\t\t\t\t\t\t\tminSearchLength={minSearchLength}\n\t\t\t\t\t\t\titemCount={items.length}\n\t\t\t\t\t\t\tstrings={strings}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ComboboxStatus>\n\t\t\t\t)}\n\n\t\t\t\t{/* Empty state */}\n\t\t\t\t{!!showEmpty && (\n\t\t\t\t\t<ComboboxEmpty className=\"px-control py-space-xs text-center text-xs text-muted-foreground\">\n\t\t\t\t\t\t{strings.noResults}\n\t\t\t\t\t</ComboboxEmpty>\n\t\t\t\t)}\n\n\t\t\t\t{/* Items list */}\n\t\t\t\t<ScrollArea\n\t\t\t\t\tviewportRef={listRef}\n\t\t\t\t\tclassName=\"max-h-[min(20rem,var(--available-height))]\"\n\t\t\t\t>\n\t\t\t\t\t<ComboboxList className=\"combobox-dropdown--list max-h-none overflow-visible p-space-sm\">\n\t\t\t\t\t\t{groupedItems ? (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t{Array.from(groupedItems.entries()).map(([group, groupItems]) => {\n\t\t\t\t\t\t\t\t\tconst groupLabel =\n\t\t\t\t\t\t\t\t\t\ttypeof renderGroupLabel === 'function'\n\t\t\t\t\t\t\t\t\t\t\t? renderGroupLabel(group)\n\t\t\t\t\t\t\t\t\t\t\t: group;\n\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<ComboboxGroup className=\"combobox-dropdown--group p-0\" key={group} items={groupItems}>\n\t\t\t\t\t\t\t\t\t\t\t<ComboboxGroupLabel className={groupLabelClassName}>{groupLabel}</ComboboxGroupLabel>\n\t\t\t\t\t\t\t\t\t\t\t<ComboboxCollection>\n\t\t\t\t\t\t\t\t\t\t\t\t{(item: T) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<ComboboxItem\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={getItemReactKey(item)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={item}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize={primitiveSize}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={itemClassByComboboxSize[size]}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={getItemDisabled?.(item)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{renderItemContent(item)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</ComboboxItem>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t</ComboboxCollection>\n\t\t\t\t\t\t\t\t\t\t</ComboboxGroup>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})}\n\n\t\t\t\t\t\t\t\t{createOptionItem != null && (\n\t\t\t\t\t\t\t\t\t<ComboboxItem\n\t\t\t\t\t\t\t\t\t\tkey={getItemReactKey(createOptionItem)}\n\t\t\t\t\t\t\t\t\t\tvalue={createOptionItem}\n\t\t\t\t\t\t\t\t\t\tsize={primitiveSize}\n\t\t\t\t\t\t\t\t\t\tclassName={itemClassByComboboxSize[size]}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{renderItemContent(createOptionItem)}\n\t\t\t\t\t\t\t\t\t</ComboboxItem>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<ComboboxCollection>\n\t\t\t\t\t\t\t\t{(item: T) => (\n\t\t\t\t\t\t\t\t\t<ComboboxItem\n\t\t\t\t\t\t\t\t\t\tkey={getItemReactKey(item)}\n\t\t\t\t\t\t\t\t\t\tvalue={item}\n\t\t\t\t\t\t\t\t\t\tsize={primitiveSize}\n\t\t\t\t\t\t\t\t\t\tclassName={itemClassByComboboxSize[size]}\n\t\t\t\t\t\t\t\t\t\tdisabled={getItemDisabled?.(item)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{renderItemContent(item)}\n\t\t\t\t\t\t\t\t\t</ComboboxItem>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</ComboboxCollection>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</ComboboxList>\n\t\t\t\t</ScrollArea>\n\n\t\t\t\t{/* Loading more indicator */}\n\t\t\t\t<LoadingMore\n\t\t\t\t\tisLoading={!!isLoadingMore}\n\t\t\t\t\ttext={strings.loadingMore}\n\t\t\t\t/>\n\n\t\t\t\t{/* Apply / cancel footer (multi-select with applyButton). */}\n\t\t\t\t{!!applyFooter && (\n\t\t\t\t\t<div className=\"flex items-center justify-end gap-space-md border-t border-border/60 px-control py-space-xs\">\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\tapplyFooter.onCancel();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{applyFooter.cancelLabel}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\tapplyFooter.onApply();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{applyFooter.applyLabel}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</ComboboxPopup>\n\t\t</ComboboxPositioner>\n\t);\n\n\tif (portalContainer) {\n\t\treturn <ComboboxPortal container={portalContainer}>{content}</ComboboxPortal>;\n\t}\n\n\treturn <ComboboxPortal>{content}</ComboboxPortal>;\n}\n\nComboboxDropdown.displayName = 'ComboboxDropdown';\n","/**\n * ErrorMessage Component\n */\n\nimport * as React from 'react';\nimport { cn } from '@/lib/utils';\nimport type { ComboboxSize } from '../types';\n\nexport interface ErrorMessageProps {\n\terror?: string;\n\tsize: ComboboxSize;\n\tclassName?: string;\n}\n\nconst sizeClasses: Record<ComboboxSize, string> = {\n\tsmall: 'text-xs mt-space-sm',\n\tdefault: 'text-sm mt-space-md',\n};\n\nexport function ErrorMessage({\n\terror,\n\tsize,\n\tclassName,\n}: ErrorMessageProps): React.ReactElement | null {\n\tif (!error) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<p\n\t\t\tclassName={cn('error-message--component', 'text-destructive', sizeClasses[size], className)}\n\t\t\trole=\"alert\"\n\t\t\taria-live=\"polite\"\n\t\t>\n\t\t\t{error}\n\t\t</p>\n\t);\n}\n\nErrorMessage.displayName = 'ErrorMessage';\n","/**\n * HighlightedText Component\n */\n\nimport * as React from 'react';\n\nexport interface HighlightedTextProps {\n\ttext: string;\n\thighlight: string;\n\thighlightClassName?: string;\n}\n\nfunction escapeRegExp(str: string): string {\n\treturn str.replace(/[$()*+.?[\\\\\\]^{|}]/g, '\\\\$&');\n}\n\nexport function HighlightedText({\n\ttext,\n\thighlight,\n\thighlightClassName = 'rounded-sm bg-warning/20 px-0.5 text-warning-foreground dark:bg-warning/25',\n}: HighlightedTextProps): React.ReactNode {\n\tif (!highlight.trim()) {\n\t\treturn text;\n\t}\n\n\tconst regex = new RegExp(`(${escapeRegExp(highlight)})`, 'gi');\n\tconst parts = text.split(regex);\n\tlet cursor = 0;\n\n\treturn (\n\t\t<>\n\t\t\t{parts.map((part, index) => {\n\t\t\t\tconst isMatch = index % 2 === 1;\n\t\t\t\tconst key = String(cursor);\n\t\t\t\tcursor += part.length;\n\n\t\t\t\tif (isMatch) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<mark key={key} className={highlightClassName}>\n\t\t\t\t\t\t\t{part}\n\t\t\t\t\t\t</mark>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn <span key={key}>{part}</span>;\n\t\t\t})}\n\t\t</>\n\t);\n}\n\nHighlightedText.displayName = 'HighlightedText';\n","/**\n * Hook for debounced search functionality\n */\n\nimport { useEffect, useRef } from 'react';\nimport { DEFAULT_DEBOUNCE_MS, DEFAULT_MIN_SEARCH_LENGTH } from '../constants';\n\nexport interface UseDebouncedSearchOptions {\n\tsearchValue: string;\n\tonSearch: ((value: string) => void) | undefined;\n\tdebounceMs?: number;\n\tminSearchLength?: number;\n}\n\nexport function useDebouncedSearch({\n\tsearchValue,\n\tonSearch,\n\tdebounceMs = DEFAULT_DEBOUNCE_MS,\n\tminSearchLength = DEFAULT_MIN_SEARCH_LENGTH,\n}: UseDebouncedSearchOptions): void {\n\tconst timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n\t// Hold the latest onSearch in a ref so the debounce effect does NOT depend\n\t// on its identity. Consumers almost always pass an inline callback whose\n\t// reference changes every render; depending on it here re-ran the effect on\n\t// every render and — when onSearch triggered a state update — caused an\n\t// infinite fetch loop. The effect now only re-runs on real input changes.\n\tconst onSearchRef = useRef(onSearch);\n\tuseEffect(() => {\n\t\tonSearchRef.current = onSearch;\n\t}, [onSearch]);\n\n\tuseEffect(() => {\n\t\tif (!onSearchRef.current) return;\n\n\t\tif (timeoutRef.current) {\n\t\t\tclearTimeout(timeoutRef.current);\n\t\t}\n\n\t\tconst trimmed = searchValue.trim();\n\t\tif (trimmed.length >= minSearchLength) {\n\t\t\ttimeoutRef.current = setTimeout(() => {\n\t\t\t\tonSearchRef.current?.(trimmed);\n\t\t\t}, debounceMs);\n\t\t}\n\n\t\treturn () => {\n\t\t\tif (timeoutRef.current) {\n\t\t\t\tclearTimeout(timeoutRef.current);\n\t\t\t}\n\t\t};\n\t}, [searchValue, debounceMs, minSearchLength]);\n}\n","/**\n * Hook for grouping items by category\n */\n\nimport { useMemo } from 'react';\n\nexport interface UseGroupedItemsOptions<T> {\n\titems: T[];\n\tgetItemGroup: ((item: T) => string) | undefined;\n}\n\nexport type GroupedItemsResult<T> = Map<string, T[]> | null;\n\nexport function useGroupedItems<T>({\n\titems,\n\tgetItemGroup,\n}: UseGroupedItemsOptions<T>): GroupedItemsResult<T> {\n\treturn useMemo(() => {\n\t\tif (!getItemGroup) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst groups = new Map<string, T[]>();\n\n\t\tfor (const item of items) {\n\t\t\tconst groupKey = getItemGroup(item);\n\t\t\tconst existing = groups.get(groupKey);\n\n\t\t\tif (existing) {\n\t\t\t\texisting.push(item);\n\t\t\t} else {\n\t\t\t\tgroups.set(groupKey, [item]);\n\t\t\t}\n\t\t}\n\n\t\treturn groups;\n\t}, [items, getItemGroup]);\n}\n","/**\n * Hook for infinite scroll / load more functionality\n */\n\nimport { useCallback, useEffect, useRef } from 'react';\nimport {\n\tLOAD_MORE_THRESHOLD,\n\tLOAD_MORE_DEBOUNCE_MS,\n\tLOAD_MORE_COOLDOWN_MS,\n} from '../constants';\n\nexport interface UseLoadMoreOptions {\n\thasMore: boolean | undefined;\n\tonLoadMore: (() => void) | undefined;\n\tisLoadingMore: boolean | undefined;\n}\n\nexport interface UseLoadMoreReturn {\n\thandleScroll: (event: Event) => void;\n}\n\nexport function useLoadMore({\n\thasMore,\n\tonLoadMore,\n\tisLoadingMore,\n}: UseLoadMoreOptions): UseLoadMoreReturn {\n\tconst isLoadingRef = useRef(false);\n\tconst debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n\tconst handleScroll = useCallback(\n\t\t(event: Event) => {\n\t\t\tif (!hasMore || !onLoadMore || isLoadingMore || isLoadingRef.current) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst target = event.target as HTMLElement;\n\t\t\tconst { scrollHeight, scrollTop, clientHeight } = target;\n\t\t\tconst scrollPercentage = (scrollTop + clientHeight) / scrollHeight;\n\n\t\t\tif (scrollPercentage >= LOAD_MORE_THRESHOLD) {\n\t\t\t\tif (debounceRef.current) {\n\t\t\t\t\tclearTimeout(debounceRef.current);\n\t\t\t\t}\n\n\t\t\t\tdebounceRef.current = setTimeout(() => {\n\t\t\t\t\tisLoadingRef.current = true;\n\t\t\t\t\tonLoadMore();\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tisLoadingRef.current = false;\n\t\t\t\t\t}, LOAD_MORE_COOLDOWN_MS);\n\t\t\t\t}, LOAD_MORE_DEBOUNCE_MS);\n\t\t\t}\n\t\t},\n\t\t[hasMore, onLoadMore, isLoadingMore]\n\t);\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (debounceRef.current) {\n\t\t\t\tclearTimeout(debounceRef.current);\n\t\t\t}\n\t\t};\n\t}, []);\n\n\treturn { handleScroll };\n}\n","/**\n * Core hook for Enhanced Combobox components\n *\n * Extracts shared logic between single and multiple selection variants\n * to reduce duplication and ensure consistent behavior.\n */\n\nimport { PlusIcon } from 'lucide-react';\nimport * as React from 'react';\nimport { useRef, useMemo, useEffect, useCallback } from 'react';\nimport { Text } from '@/components/typography';\nimport { useStrings, type StringsProp } from '@/lib/strings';\n\nimport { HighlightedText } from '../components/highlighted-text';\nimport { defaultComboboxStrings } from '../combobox.strings';\nimport {\n\tDEFAULT_MIN_SEARCH_LENGTH,\n\tDEFAULT_DEBOUNCE_MS,\n\tisCreateOption,\n\tgetCreateOptionValue,\n\tcreateCreateOption,\n} from '../constants';\nimport type { ComboboxStrings, BaseComboboxProps } from '../types';\nimport { useDebouncedSearch } from './use-debounced-search';\nimport { useGroupedItems } from './use-grouped-items';\nimport { useLoadMore } from './use-load-more';\n\nimport { cn } from '@/lib/utils';\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface UseEnhancedComboboxCoreOptions<T> extends BaseComboboxProps<T> {\n\t/** Items that should always be included (selected items) */\n\tensuredItems?: T[];\n}\n\nexport interface UseEnhancedComboboxCoreReturn<T> {\n\t// Resolved values\n\tstrings: ComboboxStrings;\n\tgetKey: (item: T) => string;\n\ttrimmedSearch: string;\n\n\t// Refs\n\tlistRef: React.RefObject<HTMLDivElement | null>;\n\n\t// Items\n\tbaseItems: T[];\n\tallItems: T[];\n\tgroupedItems: Map<string, T[]> | null;\n\tcreateOptionItem: T | null;\n\n\t// Display state\n\tshowStatus: boolean;\n\tshowEmpty: boolean;\n\tshowCreateOption: boolean;\n\n\t// Handlers\n\trenderItemContent: (item: T) => React.ReactNode;\n\titemToStringLabel: (item: T) => string;\n\tgetItemReactKey: (item: T) => string;\n\n\t// Scroll handling\n\thandleScroll: (event: Event) => void;\n}\n\n// ============================================================================\n// Hook Implementation\n// ============================================================================\n\nfunction useComboboxStrings(custom?: StringsProp<ComboboxStrings>): ComboboxStrings {\n\treturn useStrings(defaultComboboxStrings, custom);\n}\n\nfunction hasExactMatch<T>(\n\titems: T[],\n\tsearchValue: string,\n\tgetItemLabel: (item: T) => string\n): boolean {\n\tconst normalizedSearch = searchValue.toLowerCase();\n\treturn items.some(\n\t\t(item) => getItemLabel(item).toLowerCase() === normalizedSearch\n\t);\n}\n\nexport function useEnhancedComboboxCore<T>({\n\t// Core props\n\titems,\n\tsearchValue,\n\tgetItemLabel,\n\tgetItemKey,\n\tisLoading = false,\n\tminSearchLength = DEFAULT_MIN_SEARCH_LENGTH,\n\tstrings: stringsProp,\n\trenderItem,\n\n\t// Debounced Search\n\tonSearch,\n\tdebounceMs = DEFAULT_DEBOUNCE_MS,\n\n\t// Creatable\n\tcreatable,\n\tonCreate,\n\n\t// Grouped Items\n\tgetItemGroup,\n\n\t// Load More\n\thasMore,\n\tonLoadMore,\n\tisLoadingMore,\n\n\t// Highlight Match\n\thighlightMatch,\n\n\t\t// Ensured items (selected items that should always be included)\n\tensuredItems = [],\n}: UseEnhancedComboboxCoreOptions<T>): UseEnhancedComboboxCoreReturn<T> {\n\t// -------------------------------------------------------------------------\n\t// Setup\n\t// -------------------------------------------------------------------------\n\n\tconst strings = useComboboxStrings(stringsProp);\n\tconst getKey = getItemKey ?? getItemLabel;\n\tconst listRef = useRef<HTMLDivElement | null>(null);\n\tconst trimmedSearch = searchValue.trim();\n\n\t// -------------------------------------------------------------------------\n\t// Hooks\n\t// -------------------------------------------------------------------------\n\n\tuseDebouncedSearch({\n\t\tsearchValue,\n\t\tonSearch,\n\t\tdebounceMs,\n\t\tminSearchLength,\n\t});\n\n\tconst { handleScroll } = useLoadMore({\n\t\thasMore,\n\t\tonLoadMore,\n\t\tisLoadingMore,\n\t});\n\n\t// Attach scroll listener\n\tuseEffect(() => {\n\t\tconst listEl = listRef.current;\n\t\tif (!listEl || !hasMore || !onLoadMore) return;\n\n\t\tlistEl.addEventListener('scroll', handleScroll);\n\t\treturn () => listEl.removeEventListener('scroll', handleScroll);\n\t}, [handleScroll, hasMore, onLoadMore]);\n\n\t// -------------------------------------------------------------------------\n\t// Computed Values\n\t// -------------------------------------------------------------------------\n\n\t// Merge ensured items with fetched items\n\tconst baseItems = useMemo(() => {\n\t\tif (ensuredItems.length === 0) return items;\n\n\t\tconst merged = [...ensuredItems];\n\t\titems.forEach((item) => {\n\t\t\tconst itemKey = getKey(item);\n\t\t\tif (!ensuredItems.some((ensured) => getKey(ensured) === itemKey)) {\n\t\t\t\tmerged.push(item);\n\t\t\t}\n\t\t});\n\t\treturn merged;\n\t}, [items, ensuredItems, getKey]);\n\n\t// Group items if grouping is enabled\n\tconst groupedItems = useGroupedItems({\n\t\titems: baseItems,\n\t\tgetItemGroup,\n\t});\n\n\t// Determine if create option should be shown\n\tconst showCreateOption = useMemo(() => {\n\t\tif (!creatable || !onCreate) return false;\n\t\tif (trimmedSearch.length < minSearchLength) return false;\n\t\treturn !hasExactMatch(baseItems, trimmedSearch, getItemLabel);\n\t}, [creatable, onCreate, trimmedSearch, minSearchLength, baseItems, getItemLabel]);\n\n\tconst createOptionItem = useMemo(() => {\n\t\tif (!showCreateOption) return null;\n\t\treturn createCreateOption<T>(trimmedSearch);\n\t}, [showCreateOption, trimmedSearch]);\n\n\t// Build final items array with create option\n\tconst allItems = useMemo(() => {\n\t\tif (createOptionItem) return [...baseItems, createOptionItem];\n\t\treturn baseItems;\n\t}, [baseItems, createOptionItem]);\n\n\t// Status display conditions\n\tconst showStatus = isLoading || trimmedSearch.length < minSearchLength;\n\tconst showEmpty =\n\t\t!isLoading &&\n\t\ttrimmedSearch.length >= minSearchLength &&\n\t\titems.length === 0 &&\n\t\t!showCreateOption;\n\n\t// -------------------------------------------------------------------------\n\t// Handlers\n\t// -------------------------------------------------------------------------\n\n\tconst renderItemContent = useCallback(\n\t\t(item: T): React.ReactNode => {\n\t\t\t// Handle create option\n\t\t\tif (isCreateOption(item)) {\n\t\t\t\tconst value = getCreateOptionValue(item);\n\t\t\t\treturn (\n\t\t\t\t\t<span className={cn('use-enhanced-combobox-core--component', 'flex items-center gap-space-sm text-xs')}>\n\t\t\t\t\t\t<PlusIcon className=\"size-icon-sm\" />\n\t\t\t\t\t\t{strings.createNew.includes('{value}') ? (\n\t\t\t\t\t\t\tstrings.createNew.replace('{value}', value)\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<span className=\"inline-flex items-center gap-space-sm\">\n\t\t\t\t\t\t\t\t<span>{strings.createNew}</span>\n\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" weight=\"medium\" className=\"text-xs\">{value}</Text>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</span>\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Custom renderer takes precedence\n\t\t\tif (renderItem) {\n\t\t\t\treturn renderItem(item);\n\t\t\t}\n\n\t\t\t// Default rendering with optional highlighting\n\t\t\tconst label = getItemLabel(item);\n\t\t\tif (highlightMatch && trimmedSearch) {\n\t\t\t\treturn <HighlightedText text={label} highlight={trimmedSearch} />;\n\t\t\t}\n\t\t\treturn label;\n\t\t},\n\t\t[strings.createNew, renderItem, getItemLabel, highlightMatch, trimmedSearch]\n\t);\n\n\tconst itemToStringLabel = useCallback(\n\t\t(item: T): string => {\n\t\t\tif (isCreateOption(item)) {\n\t\t\t\treturn getCreateOptionValue(item);\n\t\t\t}\n\t\t\treturn getItemLabel(item);\n\t\t},\n\t\t[getItemLabel]\n\t);\n\n\tconst getItemReactKey = useCallback(\n\t\t(item: T): string => {\n\t\t\tif (isCreateOption(item)) return `__create__:${getCreateOptionValue(item)}`;\n\t\t\treturn String(getKey(item));\n\t\t},\n\t\t[getKey]\n\t);\n\n\treturn {\n\t\tstrings,\n\t\tgetKey,\n\t\ttrimmedSearch,\n\t\tlistRef,\n\t\tbaseItems,\n\t\tallItems,\n\t\tgroupedItems,\n\t\tcreateOptionItem,\n\t\tshowStatus,\n\t\tshowEmpty,\n\t\tshowCreateOption,\n\t\trenderItemContent,\n\t\titemToStringLabel,\n\t\tgetItemReactKey,\n\t\thandleScroll,\n\t};\n}\n","/**\n * Enhanced Combobox Components\n *\n * A feature-rich, API-driven combobox built on Base UI with shadcn styling.\n * Supports single and multiple selection, form integration, debounced search,\n * grouping, pagination, and more.\n *\n * This version uses shared hooks and components to eliminate duplication\n * between single and multiple selection variants.\n */\n\nimport * as React from 'react';\nimport { useRef, useCallback, useEffect, useState } from 'react';\nimport { ChevronDownIcon, XIcon } from 'lucide-react';\nimport { Combobox as ComboboxPrimitive } from '@base-ui/react/combobox';\n\nimport {\n\tCombobox as BaseCombobox,\n\tComboboxChips,\n\tComboboxChip,\n\tComboboxChipsInput,\n} from '@/components/ui/combobox';\nimport { Button } from '@/components/base/buttons';\nimport { Input } from '@/components/base/forms/fields';\nimport { useFormsConfig, type FormControlSize } from '@/lib/ui-provider';\nimport { cn } from '@/lib/utils';\n\nimport { ComboboxDropdown } from './components/combobox-dropdown';\nimport { ErrorMessage } from './components/error-message';\nimport {\n\tformControlIconClasses,\n\tformControlMinHeightClasses,\n\tformControlPaddingClasses,\n} from '../forms/form-sizing';\nimport {\n\tDEFAULT_MIN_SEARCH_LENGTH,\n\tDEFAULT_SIZE,\n\tisCreateOption,\n\tgetCreateOptionValue,\n} from './constants';\n\nimport { useEnhancedComboboxCore } from './hooks/use-enhanced-combobox-core';\nimport type {\n\tEnhancedComboboxProps,\n\tEnhancedComboboxMultipleProps,\n\tComboboxSize,\n} from './types';\n\nconst formControlSizeToComboboxSize: Record<FormControlSize, ComboboxSize> = {\n\tsmall: 'small',\n\tdefault: 'default',\n};\n\nfunction resolveComboboxSize(\n\tsizeProp: ComboboxSize | undefined,\n\tdefaultControlSize: FormControlSize | undefined,\n): ComboboxSize {\n\treturn sizeProp ?? formControlSizeToComboboxSize[defaultControlSize ?? 'default'] ?? DEFAULT_SIZE;\n}\n\nconst comboboxSizeToFormControlSize: Record<ComboboxSize, FormControlSize> = {\n\tsmall: 'small',\n\tdefault: 'default',\n};\n\nconst inputEndPaddingBySize: Record<ComboboxSize, string> = {\n\tsmall: 'pe-control-actions-sm',\n\tdefault: 'pe-control-actions',\n};\n\nconst primitiveComboboxSizeBySize: Record<ComboboxSize, 'sm' | 'md'> = {\n\tsmall: 'sm',\n\tdefault: 'md',\n};\n\nfunction getComboboxFormSize(size: ComboboxSize): FormControlSize {\n\treturn comboboxSizeToFormControlSize[size];\n}\n\ninterface ComboboxInputFieldProps {\n\tplaceholder: string;\n\tclearLabel: string;\n\ttoggleLabel: string;\n\tsize: FormControlSize;\n\terror?: boolean;\n\trequired?: boolean;\n\tdisabled?: boolean;\n\tclearable?: boolean;\n\tclassName?: string;\n\tonBlur?: () => void;\n}\n\nfunction ComboboxInputField({\n\tplaceholder,\n\tclearLabel,\n\ttoggleLabel,\n\tsize,\n\terror,\n\trequired,\n\tdisabled,\n\tclearable = true,\n\tclassName,\n\tonBlur,\n}: ComboboxInputFieldProps): React.ReactElement {\n\treturn (\n\t\t<div className=\"relative\">\n\t\t\t<ComboboxPrimitive.Input\n\t\t\t\trender={\n\t\t\t\t\t<Input\n\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\tinvalid={error}\n\t\t\t\t\t\tclassName={cn(inputEndPaddingBySize[size], className)}\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\tplaceholder={placeholder}\n\t\t\t\taria-invalid={error || undefined}\n\t\t\t\taria-required={required}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tonBlur={onBlur}\n\t\t\t/>\n\t\t\t<div className=\"absolute inset-y-0 end-1 flex items-center gap-1 text-muted-foreground\">\n\t\t\t\t{clearable ? (\n\t\t\t\t\t<ComboboxPrimitive.Clear\n\t\t\t\t\t\trender={\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\tsize=\"icon-small\"\n\t\t\t\t\t\t\t\tclassName=\"size-control-clear text-muted-foreground hover:text-foreground\"\n\t\t\t\t\t\t\t\taria-label={clearLabel}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<XIcon className={formControlIconClasses[size]} aria-hidden=\"true\" />\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t) : null}\n\t\t\t\t<ComboboxPrimitive.Trigger\n\t\t\t\t\trender={\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\tsize=\"icon-small\"\n\t\t\t\t\t\t\tclassName=\"size-control-clear text-muted-foreground hover:text-foreground\"\n\t\t\t\t\t\t\taria-label={toggleLabel}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ChevronDownIcon className={formControlIconClasses[size]} aria-hidden=\"true\" />\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\n// ============================================================================\n// Single Selection Component\n// ============================================================================\n\nexport function EnhancedCombobox<T>({\n\t// Core props\n\titems,\n\tselectedValue,\n\tonSelectedValueChange,\n\tsearchValue,\n\tonSearchValueChange,\n\tgetItemLabel,\n\tgetItemKey,\n\tisLoading = false,\n\tminSearchLength = DEFAULT_MIN_SEARCH_LENGTH,\n\tstrings: stringsProp,\n\tdisabled = false,\n\tclassName,\n\tclearable = true,\n\trenderItem,\n\tportalContainer,\n\n\t// Form Integration\n\tname,\n\tinvalid,\n\terror,\n\trequired,\n\tonBlur,\n\n\t// Debounced Search\n\tonSearch,\n\tdebounceMs,\n\n\t// Creatable\n\tcreatable,\n\tonCreate,\n\n\t// Grouped Items\n\tgetItemGroup,\n\trenderGroupLabel,\n\n\t// Load More\n\thasMore,\n\tonLoadMore,\n\tisLoadingMore,\n\n\t// Disable individual items\n\tgetItemDisabled,\n\n\t// Highlight Match\n\thighlightMatch,\n\n\t// Size\n\tsize: sizeProp,\n\n\t// Controlled Open\n\topen,\n\tonOpenChange,\n}: EnhancedComboboxProps<T>): React.ReactElement {\n\tconst { defaultControlSize } = useFormsConfig();\n\tconst size = resolveComboboxSize(sizeProp, defaultControlSize);\n\tconst formSize = getComboboxFormSize(size);\n\tconst hasError = invalid || Boolean(error);\n\n\t// Use shared core hook\n\tconst core = useEnhancedComboboxCore({\n\t\titems,\n\t\tsearchValue,\n\t\tonSearchValueChange,\n\t\tgetItemLabel,\n\t\tgetItemKey,\n\t\tisLoading,\n\t\tminSearchLength,\n\t\tstrings: stringsProp,\n\t\trenderItem,\n\t\tonSearch,\n\t\tdebounceMs,\n\t\tcreatable,\n\t\tonCreate,\n\t\tgetItemGroup,\n\t\thasMore,\n\t\tonLoadMore,\n\t\tisLoadingMore,\n\t\thighlightMatch,\n\t\tsize,\n\t\t// Include selected value in items list\n\t\tensuredItems: selectedValue ? [selectedValue] : [],\n\t});\n\n\t// Track open state so we can show the selected label when closed\n\tconst [isOpen, setIsOpen] = useState(false);\n\tconst handleOpenChange = useCallback(\n\t\t(nextOpen: boolean) => {\n\t\t\tsetIsOpen(nextOpen);\n\t\t\tif (!nextOpen) {\n\t\t\t\t// Clear search when closing so next open starts fresh\n\t\t\t\tonSearchValueChange('');\n\t\t\t}\n\t\t\tonOpenChange?.(nextOpen);\n\t\t},\n\t\t[onOpenChange, onSearchValueChange],\n\t);\n\n\t// When closed with a selected value, show the label; when open, show search text\n\tconst displayInputValue = isOpen\n\t\t? searchValue\n\t\t: (selectedValue ? core.itemToStringLabel(selectedValue) : '');\n\n\t// Handle value change, including create option\n\tconst handleValueChange = useCallback(\n\t\t(value: T | null): void => {\n\t\t\tif (value && isCreateOption(value)) {\n\t\t\t\tconst inputValue = getCreateOptionValue(value);\n\t\t\t\tonCreate?.(inputValue);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tonSelectedValueChange(value);\n\t\t},\n\t\t[onSelectedValueChange, onCreate]\n\t);\n\n\treturn (\n\t\t<div className=\"enhanced-combobox--component\">\n\t\t\t<BaseCombobox\n\t\t\t\titems={core.allItems}\n\t\t\t\tvalue={selectedValue}\n\t\t\t\tonValueChange={handleValueChange}\n\t\t\t\tinputValue={displayInputValue}\n\t\t\t\tonInputValueChange={(value, { reason }) => {\n\t\t\t\t\tif (reason === 'item-press') {\n\t\t\t\t\t\tonSearchValueChange('');\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tonSearchValueChange(value);\n\t\t\t\t}}\n\t\t\t\titemToStringLabel={core.itemToStringLabel}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tfilter={null}\n\t\t\t\tname={name}\n\t\t\t\trequired={required}\n\t\t\t\topen={open}\n\t\t\t\tonOpenChange={handleOpenChange}\n\t\t\t>\n\t\t\t\t<ComboboxInputField\n\t\t\t\t\tplaceholder={core.strings.placeholder}\n\t\t\t\t\tclearLabel={core.strings.clear}\n\t\t\t\t\ttoggleLabel={core.strings.toggle}\n\t\t\t\t\tclassName={className}\n\t\t\t\t\tsize={formSize}\n\t\t\t\t\terror={hasError}\n\t\t\t\t\trequired={required}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tclearable={clearable}\n\t\t\t\t\tonBlur={onBlur}\n\t\t\t\t/>\n\n\t\t\t\t<ComboboxDropdown\n\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\tshowStatus={core.showStatus}\n\t\t\t\t\tshowEmpty={core.showEmpty}\n\t\t\t\t\tsearchValue={searchValue}\n\t\t\t\t\tminSearchLength={minSearchLength}\n\t\t\t\t\titems={items}\n\t\t\t\t\tgroupedItems={core.groupedItems}\n\t\t\t\t\tcreateOptionItem={core.createOptionItem}\n\t\t\t\t\trenderItemContent={core.renderItemContent}\n\t\t\t\t\tgetItemReactKey={core.getItemReactKey}\n\t\t\t\t\tgetItemDisabled={getItemDisabled}\n\t\t\t\t\trenderGroupLabel={renderGroupLabel}\n\t\t\t\t\tisLoadingMore={isLoadingMore}\n\t\t\t\t\tstrings={core.strings}\n\t\t\t\t\tsize={size}\n\t\t\t\t\tportalContainer={portalContainer}\n\t\t\t\t\tlistRef={core.listRef}\n\t\t\t\t/>\n\t\t\t</BaseCombobox>\n\n\t\t\t<ErrorMessage error={error} size={size} />\n\t\t</div>\n\t);\n}\n\n// ============================================================================\n// Multiple Selection Component\n// ============================================================================\n\nexport function EnhancedComboboxMultiple<T>({\n\t// Core props\n\titems,\n\tselectedValues,\n\tonSelectedValuesChange,\n\tsearchValue,\n\tonSearchValueChange,\n\tgetItemLabel,\n\tgetItemKey,\n\tisLoading = false,\n\tminSearchLength = DEFAULT_MIN_SEARCH_LENGTH,\n\tstrings: stringsProp,\n\tdisabled = false,\n\tclassName,\n\trenderItem,\n\tportalContainer,\n\n\t// Form Integration\n\tname,\n\tinvalid,\n\terror,\n\trequired,\n\tonBlur,\n\n\t// Debounced Search\n\tonSearch,\n\tdebounceMs,\n\n\t// Creatable\n\tcreatable,\n\tonCreate,\n\n\t// Grouped Items\n\tgetItemGroup,\n\trenderGroupLabel,\n\n\t// Load More\n\thasMore,\n\tonLoadMore,\n\tisLoadingMore,\n\n\t// Disable individual items\n\tgetItemDisabled,\n\n\t// Highlight Match\n\thighlightMatch,\n\n\t// Size\n\tsize: sizeProp,\n\n\t// Controlled Open\n\topen,\n\tonOpenChange,\n\n\t// Behaviour\n\tcloseOnSelect = false,\n\tapplyButton = false,\n\tonApply,\n\tonCancel,\n}: EnhancedComboboxMultipleProps<T>): React.ReactElement {\n\tconst { defaultControlSize } = useFormsConfig();\n\tconst size = resolveComboboxSize(sizeProp, defaultControlSize);\n\tconst formSize = getComboboxFormSize(size);\n\tconst primitiveComboboxSize = primitiveComboboxSizeBySize[size];\n\tconst hasError = invalid || Boolean(error);\n\tconst containerRef = useRef<HTMLDivElement | null>(null);\n\tconst getKey = getItemKey ?? getItemLabel;\n\n\t// Draft state — only used in `applyButton` mode. Tracks the user's\n\t// in-progress selection so we can commit it on Apply or revert on\n\t// Cancel. When apply mode is OFF, we pass selections through immediately.\n\tconst [draftValues, setDraftValues] = useState<T[]>(selectedValues);\n\tconst [internalOpen, setInternalOpen] = useState(false);\n\tconst isOpenControlled = open !== undefined;\n\tconst resolvedOpen = isOpenControlled ? open : internalOpen;\n\n\tuseEffect(() => {\n\t\tif (applyButton) setDraftValues(selectedValues);\n\t}, [applyButton, selectedValues]);\n\n\tconst setOpen = useCallback(\n\t\t(next: boolean) => {\n\t\t\tif (!isOpenControlled) setInternalOpen(next);\n\t\t\tonOpenChange?.(next);\n\t\t},\n\t\t[isOpenControlled, onOpenChange],\n\t);\n\n\t// Use shared core hook\n\tconst core = useEnhancedComboboxCore({\n\t\titems,\n\t\tsearchValue,\n\t\tonSearchValueChange,\n\t\tgetItemLabel,\n\t\tgetItemKey,\n\t\tisLoading,\n\t\tminSearchLength,\n\t\tstrings: stringsProp,\n\t\trenderItem,\n\t\tonSearch,\n\t\tdebounceMs,\n\t\tcreatable,\n\t\tonCreate,\n\t\tgetItemGroup,\n\t\thasMore,\n\t\tonLoadMore,\n\t\tisLoadingMore,\n\t\thighlightMatch,\n\t\tsize,\n\t\t// Include selected values in items list\n\t\tensuredItems: selectedValues,\n\t});\n\n\t// Handle value change, filtering out create options\n\tconst handleValueChange = useCallback(\n\t\t(values: T[]): void => {\n\t\t\tconst regularValues: T[] = [];\n\t\t\tlet createValue: string | null = null;\n\n\t\t\tfor (const value of values) {\n\t\t\t\tif (isCreateOption(value)) {\n\t\t\t\t\tcreateValue = getCreateOptionValue(value);\n\t\t\t\t} else {\n\t\t\t\t\tregularValues.push(value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (createValue) {\n\t\t\t\tonCreate?.(createValue);\n\t\t\t}\n\n\t\t\tconst next = (regularValues.length !== values.length || !createValue) ? regularValues : null;\n\t\t\tif (next) {\n\t\t\t\tif (applyButton) {\n\t\t\t\t\tsetDraftValues(next);\n\t\t\t\t} else {\n\t\t\t\t\tonSelectedValuesChange(next);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (closeOnSelect) {\n\t\t\t\tsetOpen(false);\n\t\t\t}\n\t\t},\n\t\t[onSelectedValuesChange, onCreate, applyButton, closeOnSelect, setOpen],\n\t);\n\n\tconst handleApply = useCallback(() => {\n\t\tif (applyButton) onSelectedValuesChange(draftValues);\n\t\tonApply?.();\n\t\tsetOpen(false);\n\t}, [applyButton, draftValues, onApply, onSelectedValuesChange, setOpen]);\n\n\tconst handleCancel = useCallback(() => {\n\t\tif (applyButton) setDraftValues(selectedValues);\n\t\tonCancel?.();\n\t\tsetOpen(false);\n\t}, [applyButton, selectedValues, onCancel, setOpen]);\n\n\tconst visibleValues = applyButton ? draftValues : selectedValues;\n\tconst chipsPlaceholder = visibleValues.length > 0 ? undefined : core.strings.placeholder;\n\n\treturn (\n\t\t<div className=\"enhanced-combobox--component\">\n\t\t\t<BaseCombobox\n\t\t\t\titems={core.allItems}\n\t\t\t\tmultiple\n\t\t\t\tvalue={visibleValues}\n\t\t\t\tonValueChange={handleValueChange}\n\t\t\t\tinputValue={searchValue}\n\t\t\t\tonInputValueChange={(value, { reason }) => {\n\t\t\t\t\tif (reason === 'item-press') {\n\t\t\t\t\t\tonSearchValueChange('');\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tonSearchValueChange(value);\n\t\t\t\t}}\n\t\t\t\titemToStringLabel={core.itemToStringLabel}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tfilter={null}\n\t\t\t\tname={name}\n\t\t\t\trequired={required}\n\t\t\t\topen={resolvedOpen}\n\t\t\t\tonOpenChange={(next) => {\n\t\t\t\t\t// In apply-button mode, closing without committing should\n\t\t\t\t\t// revert the draft so the next open starts clean.\n\t\t\t\t\tif (!next && applyButton) setDraftValues(selectedValues);\n\t\t\t\t\tsetOpen(next);\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<ComboboxChips\n\t\t\t\t\tref={containerRef}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\tformControlMinHeightClasses[formSize],\n\t\t\t\t\t\tformControlPaddingClasses[formSize],\n\t\t\t\t\t\tformSize === 'small' ? 'text-xs' : 'text-sm',\n\t\t\t\t\t\t'bg-transparent !shadow-none',\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tsize={primitiveComboboxSize}\n\t\t\t\t\terror={hasError}\n\t\t\t\t>\n\t\t\t\t\t{visibleValues.map((item) => (\n\t\t\t\t\t\t<ComboboxChip key={getKey(item)}>\n\t\t\t\t\t\t\t{getItemLabel(item)}\n\t\t\t\t\t\t</ComboboxChip>\n\t\t\t\t\t))}\n\t\t\t\t\t<ComboboxChipsInput\n\t\t\t\t\t\tplaceholder={chipsPlaceholder}\n\t\t\t\t\t\taria-invalid={hasError || undefined}\n\t\t\t\t\t\taria-required={required}\n\t\t\t\t\t\tonBlur={onBlur}\n\t\t\t\t\t/>\n\t\t\t\t</ComboboxChips>\n\n\t\t\t\t<ComboboxDropdown\n\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\tshowStatus={core.showStatus}\n\t\t\t\t\tshowEmpty={core.showEmpty}\n\t\t\t\t\tsearchValue={searchValue}\n\t\t\t\t\tminSearchLength={minSearchLength}\n\t\t\t\t\titems={items}\n\t\t\t\t\tgroupedItems={core.groupedItems}\n\t\t\t\t\tcreateOptionItem={core.createOptionItem}\n\t\t\t\t\trenderItemContent={core.renderItemContent}\n\t\t\t\t\tgetItemReactKey={core.getItemReactKey}\n\t\t\t\t\tgetItemDisabled={getItemDisabled}\n\t\t\t\t\trenderGroupLabel={renderGroupLabel}\n\t\t\t\t\tisLoadingMore={isLoadingMore}\n\t\t\t\t\tstrings={core.strings}\n\t\t\t\t\tsize={size}\n\t\t\t\t\tportalContainer={portalContainer}\n\t\t\t\t\tlistRef={core.listRef}\n\t\t\t\t\tanchor={containerRef}\n\t\t\t\t\tapplyFooter={applyButton ? {\n\t\t\t\t\t\tapplyLabel: core.strings.apply,\n\t\t\t\t\t\tcancelLabel: core.strings.cancel,\n\t\t\t\t\t\tonApply: handleApply,\n\t\t\t\t\t\tonCancel: handleCancel,\n\t\t\t\t\t} : undefined}\n\t\t\t\t/>\n\t\t\t</BaseCombobox>\n\n\t\t\t<ErrorMessage error={error} size={size} />\n\t\t</div>\n\t);\n}\n\n// ============================================================================\n// Legacy Aliases\n// ============================================================================\n\n/** @deprecated Use EnhancedCombobox instead */\nexport const ApiCombobox = EnhancedCombobox;\n\n/** @deprecated Use EnhancedComboboxMultiple instead */\nexport const ApiComboboxMultiple = EnhancedComboboxMultiple;\n\nEnhancedCombobox.displayName = 'EnhancedCombobox';\nEnhancedComboboxMultiple.displayName = 'EnhancedComboboxMultiple';\n","import { useCallback, useEffect, useMemo, useRef, useState, type ReactNode } from 'react';\n\nimport { Text } from '@/components/typography';\nimport { useStrings, type StringsProp } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport { EnhancedCombobox } from './enhanced-combobox';\nimport { defaultComboboxStrings } from './combobox.strings';\nimport { DEFAULT_DEBOUNCE_MS } from './constants';\nimport type { ComboboxSize, ComboboxStrings, EnhancedComboboxProps } from './types';\n\nexport interface AsyncResourceComboboxFetcherArgs {\n\tquery: string;\n\tlimit: number;\n\tsignal?: AbortSignal;\n}\n\nexport type AsyncResourceComboboxFetcher<T> = (\n\targs: AsyncResourceComboboxFetcherArgs,\n) => Promise<T[]>;\n\nexport interface AsyncResourceComboboxStrings extends ComboboxStrings {\n\terror: string;\n}\n\nexport const defaultAsyncResourceComboboxStrings: AsyncResourceComboboxStrings = {\n\t...defaultComboboxStrings,\n\terror: 'Unable to load options.',\n};\n\nexport interface AsyncResourceComboboxRenderOptionContext {\n\tquery: string;\n\tisSelected: boolean;\n}\n\nexport interface AsyncResourceComboboxProps<T>\n\textends Omit<\n\t\tEnhancedComboboxProps<T>,\n\t\t| 'items'\n\t\t| 'selectedValue'\n\t\t| 'onSelectedValueChange'\n\t\t| 'searchValue'\n\t\t| 'onSearchValueChange'\n\t\t| 'getItemLabel'\n\t\t| 'getItemKey'\n\t\t| 'isLoading'\n\t\t| 'renderItem'\n\t\t| 'strings'\n\t\t| 'error'\n\t\t| 'debounceMs'\n\t> {\n\tfetcher: AsyncResourceComboboxFetcher<T>;\n\tvalue?: T | null;\n\tdefaultValue?: T | null;\n\tonValueChange?: (value: T | null) => void;\n\tonAfterFetch?: (items: T[], context: AsyncResourceComboboxFetcherArgs) => void;\n\tonError?: (error: unknown, context: AsyncResourceComboboxFetcherArgs) => void;\n\tgetKey: (item: T) => string;\n\tgetLabel: (item: T) => string;\n\tgetDescription?: (item: T) => ReactNode;\n\tgetMeta?: (item: T) => ReactNode;\n\trenderOption?: (item: T, context: AsyncResourceComboboxRenderOptionContext) => ReactNode;\n\tlimit?: number;\n\tdebounceMs?: number;\n\tpreload?: boolean;\n\terrorMessage?: ReactNode;\n\tstrings?: StringsProp<AsyncResourceComboboxStrings>;\n\tsize?: ComboboxSize;\n}\n\nexport function AsyncResourceCombobox<T>({\n\tfetcher,\n\tvalue,\n\tdefaultValue = null,\n\tonValueChange,\n\tonAfterFetch,\n\tonError,\n\tgetKey,\n\tgetLabel,\n\tgetDescription,\n\tgetMeta,\n\trenderOption,\n\tlimit = 10,\n\tdebounceMs = DEFAULT_DEBOUNCE_MS,\n\tpreload = true,\n\tminSearchLength = 0,\n\terrorMessage,\n\tstrings: stringsProp,\n\tdisabled,\n\t...props\n}: AsyncResourceComboboxProps<T>) {\n\tconst strings = useStrings(defaultAsyncResourceComboboxStrings, stringsProp);\n\tconst isControlled = value !== undefined;\n\tconst [internalValue, setInternalValue] = useState<T | null>(defaultValue);\n\tconst selectedValue = isControlled ? value : internalValue;\n\tconst [searchValue, setSearchValue] = useState('');\n\tconst [items, setItems] = useState<T[]>([]);\n\tconst [isLoading, setIsLoading] = useState(false);\n\tconst [error, setError] = useState<unknown>(null);\n\tconst requestIdRef = useRef(0);\n\tconst trimmedSearch = searchValue.trim();\n\n\tconst handleValueChange = useCallback(\n\t\t(nextValue: T | null) => {\n\t\t\tif (!isControlled) {\n\t\t\t\tsetInternalValue(nextValue);\n\t\t\t}\n\t\t\tonValueChange?.(nextValue);\n\t\t},\n\t\t[isControlled, onValueChange],\n\t);\n\n\tuseEffect(() => {\n\t\tif (disabled) return;\n\n\t\tconst shouldFetch =\n\t\t\ttrimmedSearch.length > 0\n\t\t\t\t? trimmedSearch.length >= minSearchLength\n\t\t\t\t: preload;\n\n\t\tif (!shouldFetch) {\n\t\t\tsetItems([]);\n\t\t\tsetIsLoading(false);\n\t\t\tsetError(null);\n\t\t\treturn;\n\t\t}\n\n\t\tconst requestId = requestIdRef.current + 1;\n\t\trequestIdRef.current = requestId;\n\t\tconst controller = new AbortController();\n\t\tconst context: AsyncResourceComboboxFetcherArgs = {\n\t\t\tquery: trimmedSearch,\n\t\t\tlimit,\n\t\t\tsignal: controller.signal,\n\t\t};\n\n\t\tconst timeout = window.setTimeout(() => {\n\t\t\tsetIsLoading(true);\n\t\t\tsetError(null);\n\n\t\t\tfetcher(context)\n\t\t\t\t.then((nextItems) => {\n\t\t\t\t\tif (controller.signal.aborted || requestIdRef.current !== requestId) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tsetItems(nextItems);\n\t\t\t\t\tonAfterFetch?.(nextItems, context);\n\t\t\t\t})\n\t\t\t\t.catch((nextError: unknown) => {\n\t\t\t\t\tif (controller.signal.aborted || requestIdRef.current !== requestId) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tsetItems([]);\n\t\t\t\t\tsetError(nextError);\n\t\t\t\t\tonError?.(nextError, context);\n\t\t\t\t})\n\t\t\t\t.finally(() => {\n\t\t\t\t\tif (!controller.signal.aborted && requestIdRef.current === requestId) {\n\t\t\t\t\t\tsetIsLoading(false);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t}, debounceMs);\n\n\t\treturn () => {\n\t\t\twindow.clearTimeout(timeout);\n\t\t\tcontroller.abort();\n\t\t};\n\t}, [\n\t\tdebounceMs,\n\t\tdisabled,\n\t\tfetcher,\n\t\tlimit,\n\t\tminSearchLength,\n\t\tonAfterFetch,\n\t\tonError,\n\t\tpreload,\n\t\ttrimmedSearch,\n\t]);\n\n\tconst renderItem = useCallback(\n\t\t(item: T) => {\n\t\t\tif (renderOption) {\n\t\t\t\treturn renderOption(item, {\n\t\t\t\t\tquery: trimmedSearch,\n\t\t\t\t\tisSelected: selectedValue ? getKey(selectedValue) === getKey(item) : false,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst description = getDescription?.(item);\n\t\t\tconst meta = getMeta?.(item);\n\n\t\t\treturn (\n\t\t\t\t<span className=\"async-resource-combobox--option flex min-w-0 items-center gap-space-md text-xs leading-tight\">\n\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" weight=\"medium\" className=\"min-w-0 shrink truncate\">\n\t\t\t\t\t\t{getLabel(item)}\n\t\t\t\t\t</Text>\n\t\t\t\t\t{(!!description || !!meta) && (\n\t\t\t\t\t\t<span className=\"inline-flex min-w-0 flex-1 items-center gap-space-sm overflow-hidden text-xs text-muted-foreground\">\n\t\t\t\t\t\t\t{!!description && (\n\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" type=\"secondary\" className=\"min-w-0 truncate\">\n\t\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{!!meta && (\n\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" type=\"secondary\" className=\"min-w-0 truncate opacity-75\">\n\t\t\t\t\t\t\t\t\t{meta}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t)}\n\t\t\t\t</span>\n\t\t\t);\n\t\t},\n\t\t[getDescription, getKey, getLabel, getMeta, renderOption, selectedValue, trimmedSearch],\n\t);\n\n\tconst resolvedError = useMemo(() => {\n\t\tif (!error) return undefined;\n\t\treturn errorMessage ?? strings.error;\n\t}, [error, errorMessage, strings.error]);\n\n\treturn (\n\t\t<div\n\t\t\tdata-component=\"async-resource-combobox\"\n\t\t\tdata-slot=\"async-resource-combobox\"\n\t\t\tclassName={cn('async-resource-combobox--component', props.className)}\n\t\t>\n\t\t\t<EnhancedCombobox\n\t\t\t\t{...props}\n\t\t\t\tclassName={undefined}\n\t\t\t\tdisabled={disabled}\n\t\t\t\titems={items}\n\t\t\t\tselectedValue={selectedValue ?? null}\n\t\t\t\tonSelectedValueChange={handleValueChange}\n\t\t\t\tsearchValue={searchValue}\n\t\t\t\tonSearchValueChange={setSearchValue}\n\t\t\t\tgetItemLabel={getLabel}\n\t\t\t\tgetItemKey={getKey}\n\t\t\t\tisLoading={isLoading}\n\t\t\t\tminSearchLength={minSearchLength}\n\t\t\t\tstrings={strings}\n\t\t\t\trenderItem={renderItem}\n\t\t\t\terror={typeof resolvedError === 'string' ? resolvedError : undefined}\n\t\t\t/>\n\t\t\t{resolvedError && typeof resolvedError !== 'string' && (\n\t\t\t\t<div className=\"async-resource-combobox--error mt-1.5\">\n\t\t\t\t\t{resolvedError}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nAsyncResourceCombobox.displayName = 'AsyncResourceCombobox';\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- const e=require("./chunk-CMqjfN_6.cjs"),t=require("../lib/strings.cjs"),n=require("./ui-provider-DZWtUXf2.cjs"),r=require("../lib/utils.cjs"),i=require("./button-Bd5bEIiB.cjs"),a=require("./typography-CO9uwZhF.cjs"),o=require("./input-CB6hxh-5.cjs"),s=require("./form-sizing-Co53Drri.cjs"),c=require("./scroll-area-CIRXK7s0.cjs");let l=require("react");l=e.t(l,1);let u=require("react/jsx-runtime"),d=require("lucide-react"),f=require("@base-ui/react/combobox");var p=f.Combobox.Root;function m({className:e,...t}){return(0,u.jsx)(f.Combobox.Input,{"data-slot":`combobox-input`,className:r.cn(`border-input file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground flex h-10 w-full min-w-0 rounded-md border bg-background px-3 py-2 text-sm shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50`,`focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]`,`aria-invalid:ring-destructive/20 aria-invalid:border-destructive aria-invalid:bg-destructive/15 aria-invalid:placeholder:text-destructive`,e),...t})}function h({className:e,children:t,...n}){return(0,u.jsxs)(f.Combobox.Trigger,{"data-slot":`combobox-trigger`,className:r.cn(`border-input file:text-foreground placeholder:text-muted-foreground flex h-10 w-full items-center justify-between rounded-md border bg-background px-3 py-2 text-sm shadow-xs transition-[color,box-shadow] outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50`,`focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]`,`aria-invalid:ring-destructive/20 aria-invalid:border-destructive aria-invalid:bg-destructive/15 aria-invalid:placeholder:text-destructive`,`[&>span]:line-clamp-1`,e),...n,children:[t,(0,u.jsx)(f.Combobox.Icon,{className:`flex`,children:(0,u.jsx)(d.ChevronDownIcon,{className:`size-4 opacity-50`})})]})}function g({placeholder:e,...t}){return(0,u.jsx)(f.Combobox.Value,{"data-slot":`combobox-value`,placeholder:!!e&&(0,u.jsx)(`span`,{className:`text-muted-foreground`,children:e}),...t})}function _({className:e,...t}){return(0,u.jsx)(f.Combobox.Clear,{"data-slot":`combobox-clear`,className:r.cn(`absolute right-8 top-1/2 -translate-y-1/2 rounded-sm opacity-50 ring-offset-background transition-opacity`,`hover:opacity-100 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]`,`disabled:pointer-events-none`,e),...t,children:(0,u.jsx)(d.XIcon,{className:`size-4`})})}var v={sm:`h-8 text-xs pl-2 pr-8`,md:`h-10 text-sm pl-3 pr-10`,lg:`h-12 text-base pl-4 pr-12`},y={sm:`pr-14`,md:`pr-16`,lg:`pr-20`},b={sm:`right-1`,md:`right-2`,lg:`right-3`},x={sm:`size-3`,md:`size-4`,lg:`size-5`};function S({className:e,showClear:t=!1,size:n=`md`,error:i,...a}){return(0,u.jsxs)(`div`,{className:`relative`,children:[(0,u.jsx)(f.Combobox.Input,{"data-slot":`combobox-input`,className:r.cn(`border-input file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground w-full min-w-0 rounded-md border bg-background shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50`,`focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]`,`aria-invalid:ring-destructive/20 aria-invalid:border-destructive aria-invalid:bg-destructive/15 aria-invalid:placeholder:text-destructive`,v[n],t&&y[n],e),"aria-invalid":i||void 0,...a}),(0,u.jsxs)(`div`,{className:r.cn(`absolute top-1/2 -translate-y-1/2 flex items-center gap-1 text-muted-foreground`,b[n]),children:[!!t&&(0,u.jsx)(f.Combobox.Clear,{"data-slot":`combobox-clear`,className:`rounded-sm p-1 opacity-50 hover:opacity-100 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]`,children:(0,u.jsx)(d.XIcon,{className:x[n]})}),(0,u.jsx)(f.Combobox.Trigger,{className:`rounded-sm p-1 hover:bg-accent focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]`,children:(0,u.jsx)(d.ChevronDownIcon,{className:x[n]})})]})]})}var C=f.Combobox.Portal;function w({className:e,sideOffset:t=4,...n}){return(0,u.jsx)(f.Combobox.Positioner,{"data-slot":`combobox-positioner`,sideOffset:t,className:r.cn(`z-50 outline-none`,e),...n})}function T({className:e,...t}){return(0,u.jsx)(f.Combobox.Popup,{"data-slot":`combobox-popup`,className:r.cn(`w-[var(--anchor-width)] min-w-[8rem] max-w-[var(--available-width)] max-h-[min(var(--available-height),24rem)]`,`overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md`,`origin-[var(--transform-origin)]`,`data-[starting-style]:opacity-0 data-[starting-style]:scale-95`,`data-[ending-style]:opacity-0 data-[ending-style]:scale-95`,`transition-[opacity,transform] duration-150`,e),...t})}function E({className:e,...t}){return(0,u.jsx)(f.Combobox.List,{"data-slot":`combobox-list`,className:r.cn(`max-h-[min(24rem,var(--available-height))] overflow-y-auto overscroll-contain p-1`,`outline-none empty:hidden`,e),...t})}var D={sm:`py-1 px-2 text-xs gap-2`,md:`py-1.5 px-2.5 text-sm gap-2`,lg:`py-2 px-3 text-base gap-2.5`},O={sm:`size-3`,md:`size-4`,lg:`size-5`};function k({className:e,children:t,size:n=`md`,...i}){return(0,u.jsxs)(f.Combobox.Item,{"data-slot":`combobox-item`,className:r.cn(`flex w-full cursor-default select-none items-center justify-between rounded-sm outline-none`,`data-[disabled]:pointer-events-none data-[disabled]:opacity-50`,`data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground`,D[n],e),...i,children:[(0,u.jsx)(`span`,{className:`flex min-w-0 flex-1 items-center gap-2 truncate`,children:t}),(0,u.jsx)(f.Combobox.ItemIndicator,{className:r.cn(`flex shrink-0 items-center justify-center text-muted-foreground`,O[n]),children:(0,u.jsx)(d.CheckIcon,{className:O[n]})})]})}function A({className:e,children:t,...n}){return(0,u.jsx)(f.Combobox.ItemIndicator,{"data-slot":`combobox-item-indicator`,className:r.cn(e),...n,children:t??(0,u.jsx)(d.CheckIcon,{className:`size-4`})})}function j({className:e,children:t,...n}){return(0,u.jsx)(f.Combobox.Empty,{"data-slot":`combobox-empty`,className:r.cn(`py-6 text-center text-sm text-muted-foreground empty:hidden`,e),...n,children:t})}function M({className:e,...t}){return(0,u.jsx)(f.Combobox.Status,{"data-slot":`combobox-status`,className:r.cn(`flex items-center gap-2 px-3 py-2 text-sm text-muted-foreground empty:hidden`,e),...t})}function N({className:e,...t}){return(0,u.jsx)(f.Combobox.Group,{"data-slot":`combobox-group`,className:r.cn(`overflow-hidden p-1`,e),...t})}function P({className:e,...t}){return(0,u.jsx)(f.Combobox.GroupLabel,{"data-slot":`combobox-group-label`,className:r.cn(`px-2 py-1.5 text-xs font-medium text-muted-foreground`,e),...t})}var F=f.Combobox.Collection;function I({className:e,...t}){return(0,u.jsx)(f.Combobox.Separator,{"data-slot":`combobox-separator`,className:r.cn(`-mx-1 my-1 h-px bg-muted`,e),...t})}var L={sm:`min-h-8 gap-1 px-2 py-1 text-xs`,md:`min-h-10 gap-1.5 px-3 py-2 text-sm`,lg:`min-h-12 gap-2 px-4 py-2.5 text-base`};function R({className:e,size:t=`md`,error:n,...i}){return(0,u.jsx)(f.Combobox.Chips,{"data-slot":`combobox-chips`,className:r.cn(`flex flex-wrap items-center rounded-md border border-input bg-background ring-offset-background shadow-xs transition-[color,box-shadow] outline-none`,`focus-within:border-ring focus-within:ring-ring/50 focus-within:ring-[3px]`,`aria-invalid:ring-destructive/20 aria-invalid:border-destructive aria-invalid:bg-destructive/15`,L[t],e),"aria-invalid":n||void 0,...i})}function z({className:e,children:t,...n}){return(0,u.jsxs)(f.Combobox.Chip,{"data-slot":`combobox-chip`,className:r.cn(`inline-flex items-center gap-1 rounded-md bg-secondary px-2 py-1 text-xs font-medium text-secondary-foreground`,`data-[highlighted]:bg-primary data-[highlighted]:text-primary-foreground`,`focus-within:bg-primary focus-within:text-primary-foreground`,e),...n,children:[t,(0,u.jsx)(f.Combobox.ChipRemove,{className:`rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]`,children:(0,u.jsx)(d.XIcon,{className:`size-3`})})]})}function ee({className:e,...t}){return(0,u.jsx)(f.Combobox.Input,{"data-slot":`combobox-chips-input`,className:r.cn(`min-w-[80px] flex-1 bg-transparent outline-none placeholder:text-muted-foreground`,e),...t})}function B({className:e,...t}){return(0,u.jsx)(f.Combobox.Backdrop,{"data-slot":`combobox-backdrop`,className:r.cn(`fixed inset-0 z-50 bg-black/80`,`data-[starting-style]:opacity-0 data-[ending-style]:opacity-0`,`transition-opacity duration-150`,e),...t})}function V({className:e,...t}){return(0,u.jsx)(f.Combobox.Arrow,{"data-slot":`combobox-arrow`,className:r.cn(`fill-popover`,e),...t})}var H=f.Combobox.useFilter,U={placeholder:`Search...`,clear:`Clear selection`,toggle:`Open options`,searching:`Loading...`,noResults:`No results found.`,typeToSearch:`Type at least {min} characters to search...`,typeMore:`Type {remaining} more character{s} to search...`,createNew:`Create {value}`,loadingMore:`Loading...`,apply:`Apply`,cancel:`Cancel`},W=3,te=300,G=`default`,K=.8,ne=100,re=500,q=Symbol(`enhanced-combobox-create-option`);function J(e){return typeof e==`object`&&!!e&&q in e}function Y(e){if(!J(e))throw Error(`Item is not a create option`);return e[q]}function ie(e){return{[q]:e}}function X({isLoading:e,text:t,className:n}){return e?(0,u.jsxs)(`div`,{className:r.cn(`loading-more--component`,`flex items-center justify-center gap-space-sm px-control py-space-xs text-xs text-muted-foreground`,n),role:`status`,"aria-live":`polite`,children:[(0,u.jsx)(d.Loader2,{className:`size-icon-sm animate-spin`,"aria-hidden":`true`}),(0,u.jsx)(`span`,{children:t})]}):null}X.displayName=`LoadingMore`;function Z({isLoading:e,searchValue:t,minSearchLength:n,itemCount:r,strings:i}){let a=t.trim();if(e)return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(d.Loader2,{className:`size-icon-sm animate-spin`}),i.searching]});if(a===``)return i.typeToSearch.includes(`{min}`)?i.typeToSearch.replace(`{min}`,String(n)):i.typeToSearch;if(a.length<n){let e=n-a.length;return i.typeMore.includes(`{remaining}`)||i.typeMore.includes(`{s}`)?i.typeMore.replace(`{remaining}`,String(e)).replace(`{s}`,e===1?``:`s`):i.typeMore}return null}Z.displayName=`StatusContent`;var ae={small:`sm`,default:`md`},oe={small:`min-h-control-sm gap-space-lg rounded-md px-row-x py-row-y text-xs leading-tight [&>span:first-child]:gap-space-lg [&>span:first-child]:text-xs`,default:`min-h-control gap-space-lg rounded-md px-row-x py-row-y text-sm leading-tight [&>span:first-child]:gap-space-lg [&>span:first-child]:text-sm`},se=`px-row-x py-row-y text-xxs font-medium uppercase tracking-wide text-muted-foreground`;function ce({isLoading:e,showStatus:t,showEmpty:n,searchValue:r,minSearchLength:a,items:o,groupedItems:s,createOptionItem:l,renderItemContent:d,getItemReactKey:f,getItemDisabled:p,renderGroupLabel:m,isLoadingMore:h,strings:g,size:_=G,portalContainer:v,listRef:y,anchor:b,applyFooter:x}){let S=v==null?void 0:`z-[100]`,D=ae[_],O=(0,u.jsx)(w,{anchor:b,className:S,children:(0,u.jsxs)(T,{"aria-busy":e||void 0,className:`combobox-dropdown--popup rounded-radius border-border/70 shadow-sm`,children:[!!t&&(0,u.jsx)(M,{className:`gap-space-sm px-control py-space-xs text-xs text-muted-foreground`,children:(0,u.jsx)(Z,{isLoading:e,searchValue:r,minSearchLength:a,itemCount:o.length,strings:g})}),!!n&&(0,u.jsx)(j,{className:`px-control py-space-xs text-center text-xs text-muted-foreground`,children:g.noResults}),(0,u.jsx)(c.t,{viewportRef:y,className:`max-h-[min(20rem,var(--available-height))]`,children:(0,u.jsx)(E,{className:`combobox-dropdown--list max-h-none overflow-visible p-space-sm`,children:s?(0,u.jsxs)(u.Fragment,{children:[Array.from(s.entries()).map(([e,t])=>(0,u.jsxs)(N,{className:`combobox-dropdown--group p-0`,items:t,children:[(0,u.jsx)(P,{className:se,children:typeof m==`function`?m(e):e}),(0,u.jsx)(F,{children:e=>(0,u.jsx)(k,{value:e,size:D,className:oe[_],disabled:p?.(e),children:d(e)},f(e))})]},e)),l!=null&&(0,u.jsx)(k,{value:l,size:D,className:oe[_],children:d(l)},f(l))]}):(0,u.jsx)(F,{children:e=>(0,u.jsx)(k,{value:e,size:D,className:oe[_],disabled:p?.(e),children:d(e)},f(e))})})}),(0,u.jsx)(X,{isLoading:!!h,text:g.loadingMore}),!!x&&(0,u.jsxs)(`div`,{className:`flex items-center justify-end gap-space-md border-t border-border/60 px-control py-space-xs`,children:[(0,u.jsx)(i.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,onClick:e=>{e.preventDefault(),e.stopPropagation(),x.onCancel()},children:x.cancelLabel}),(0,u.jsx)(i.t,{type:`button`,variant:`primary`,onClick:e=>{e.preventDefault(),e.stopPropagation(),x.onApply()},children:x.applyLabel})]})]})});return v?(0,u.jsx)(C,{container:v,children:O}):(0,u.jsx)(C,{children:O})}ce.displayName=`ComboboxDropdown`;var le={small:`text-xs mt-space-sm`,default:`text-sm mt-space-md`};function ue({error:e,size:t,className:n}){return e?(0,u.jsx)(`p`,{className:r.cn(`error-message--component`,`text-destructive`,le[t],n),role:`alert`,"aria-live":`polite`,children:e}):null}ue.displayName=`ErrorMessage`;function Q(e){return e.replace(/[$()*+.?[\\\]^{|}]/g,`\\$&`)}function $({text:e,highlight:t,highlightClassName:n=`rounded-sm bg-warning/20 px-0.5 text-warning-foreground dark:bg-warning/25`}){if(!t.trim())return e;let r=RegExp(`(${Q(t)})`,`gi`),i=e.split(r),a=0;return(0,u.jsx)(u.Fragment,{children:i.map((e,t)=>{let r=t%2==1,i=String(a);return a+=e.length,r?(0,u.jsx)(`mark`,{className:n,children:e},i):(0,u.jsx)(`span`,{children:e},i)})})}$.displayName=`HighlightedText`;function de({searchValue:e,onSearch:t,debounceMs:n=300,minSearchLength:r=3}){let i=(0,l.useRef)(null),a=(0,l.useRef)(t);(0,l.useEffect)(()=>{a.current=t},[t]),(0,l.useEffect)(()=>{if(!a.current)return;i.current&&clearTimeout(i.current);let t=e.trim();return t.length>=r&&(i.current=setTimeout(()=>{a.current?.(t)},n)),()=>{i.current&&clearTimeout(i.current)}},[e,n,r])}function fe({items:e,getItemGroup:t}){return(0,l.useMemo)(()=>{if(!t)return null;let n=new Map;for(let r of e){let e=t(r),i=n.get(e);i?i.push(r):n.set(e,[r])}return n},[e,t])}function pe({hasMore:e,onLoadMore:t,isLoadingMore:n}){let r=(0,l.useRef)(!1),i=(0,l.useRef)(null),a=(0,l.useCallback)(a=>{if(!e||!t||n||r.current)return;let{scrollHeight:o,scrollTop:s,clientHeight:c}=a.target;(s+c)/o>=.8&&(i.current&&clearTimeout(i.current),i.current=setTimeout(()=>{r.current=!0,t(),setTimeout(()=>{r.current=!1},500)},100))},[e,t,n]);return(0,l.useEffect)(()=>()=>{i.current&&clearTimeout(i.current)},[]),{handleScroll:a}}function me(e){return t.useStrings(U,e)}function he(e,t,n){let r=t.toLowerCase();return e.some(e=>n(e).toLowerCase()===r)}function ge({items:e,searchValue:t,getItemLabel:n,getItemKey:i,isLoading:o=!1,minSearchLength:s=3,strings:c,renderItem:f,onSearch:p,debounceMs:m=300,creatable:h,onCreate:g,getItemGroup:_,hasMore:v,onLoadMore:y,isLoadingMore:b,highlightMatch:x,ensuredItems:S=[]}){let C=me(c),w=i??n,T=(0,l.useRef)(null),E=t.trim();de({searchValue:t,onSearch:p,debounceMs:m,minSearchLength:s});let{handleScroll:D}=pe({hasMore:v,onLoadMore:y,isLoadingMore:b});(0,l.useEffect)(()=>{let e=T.current;if(!(!e||!v||!y))return e.addEventListener(`scroll`,D),()=>e.removeEventListener(`scroll`,D)},[D,v,y]);let O=(0,l.useMemo)(()=>{if(S.length===0)return e;let t=[...S];return e.forEach(e=>{let n=w(e);S.some(e=>w(e)===n)||t.push(e)}),t},[e,S,w]),k=fe({items:O,getItemGroup:_}),A=(0,l.useMemo)(()=>!h||!g||E.length<s?!1:!he(O,E,n),[h,g,E,s,O,n]),j=(0,l.useMemo)(()=>A?ie(E):null,[A,E]);return{strings:C,getKey:w,trimmedSearch:E,listRef:T,baseItems:O,allItems:(0,l.useMemo)(()=>j?[...O,j]:O,[O,j]),groupedItems:k,createOptionItem:j,showStatus:o||E.length<s,showEmpty:!o&&E.length>=s&&e.length===0&&!A,showCreateOption:A,renderItemContent:(0,l.useCallback)(e=>{if(J(e)){let t=Y(e);return(0,u.jsxs)(`span`,{className:r.cn(`use-enhanced-combobox-core--component`,`flex items-center gap-space-sm text-xs`),children:[(0,u.jsx)(d.PlusIcon,{className:`size-icon-sm`}),C.createNew.includes(`{value}`)?C.createNew.replace(`{value}`,t):(0,u.jsxs)(`span`,{className:`inline-flex items-center gap-space-sm`,children:[(0,u.jsx)(`span`,{children:C.createNew}),(0,u.jsx)(a.s,{tag:`span`,size:`xs`,weight:`medium`,className:`text-xs`,children:t})]})]})}if(f)return f(e);let t=n(e);return x&&E?(0,u.jsx)($,{text:t,highlight:E}):t},[C.createNew,f,n,x,E]),itemToStringLabel:(0,l.useCallback)(e=>J(e)?Y(e):n(e),[n]),getItemReactKey:(0,l.useCallback)(e=>J(e)?`__create__:${Y(e)}`:String(w(e)),[w]),handleScroll:D}}var _e={small:`small`,default:`default`};function ve(e,t){return e??_e[t??`default`]??`default`}var ye={small:`small`,default:`default`},be={small:`pe-control-actions-sm`,default:`pe-control-actions`},xe={small:`sm`,default:`md`};function Se(e){return ye[e]}function Ce({placeholder:e,clearLabel:t,toggleLabel:n,size:a,error:c,required:l,disabled:p,clearable:m=!0,className:h,onBlur:g}){return(0,u.jsxs)(`div`,{className:`relative`,children:[(0,u.jsx)(f.Combobox.Input,{render:(0,u.jsx)(o.t,{size:a,invalid:c,className:r.cn(be[a],h)}),placeholder:e,"aria-invalid":c||void 0,"aria-required":l,disabled:p,onBlur:g}),(0,u.jsxs)(`div`,{className:`absolute inset-y-0 end-1 flex items-center gap-1 text-muted-foreground`,children:[m?(0,u.jsx)(f.Combobox.Clear,{render:(0,u.jsx)(i.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`icon-small`,className:`size-control-clear text-muted-foreground hover:text-foreground`,"aria-label":t,children:(0,u.jsx)(d.XIcon,{className:s.a[a],"aria-hidden":`true`})})}):null,(0,u.jsx)(f.Combobox.Trigger,{render:(0,u.jsx)(i.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`icon-small`,className:`size-control-clear text-muted-foreground hover:text-foreground`,"aria-label":n,children:(0,u.jsx)(d.ChevronDownIcon,{className:s.a[a],"aria-hidden":`true`})})})]})]})}function we({items:e,selectedValue:t,onSelectedValueChange:r,searchValue:i,onSearchValueChange:a,getItemLabel:o,getItemKey:s,isLoading:c=!1,minSearchLength:d=3,strings:f,disabled:m=!1,className:h,clearable:g=!0,renderItem:_,portalContainer:v,name:y,invalid:b,error:x,required:S,onBlur:C,onSearch:w,debounceMs:T,creatable:E,onCreate:D,getItemGroup:O,renderGroupLabel:k,hasMore:A,onLoadMore:j,isLoadingMore:M,getItemDisabled:N,highlightMatch:P,size:F,open:I,onOpenChange:L}){let{defaultControlSize:R}=n.o(),z=ve(F,R),ee=Se(z),B=b||!!x,V=ge({items:e,searchValue:i,onSearchValueChange:a,getItemLabel:o,getItemKey:s,isLoading:c,minSearchLength:d,strings:f,renderItem:_,onSearch:w,debounceMs:T,creatable:E,onCreate:D,getItemGroup:O,hasMore:A,onLoadMore:j,isLoadingMore:M,highlightMatch:P,size:z,ensuredItems:t?[t]:[]}),[H,U]=(0,l.useState)(!1),W=(0,l.useCallback)(e=>{U(e),e||a(``),L?.(e)},[L,a]),te=H?i:t?V.itemToStringLabel(t):``,G=(0,l.useCallback)(e=>{if(e&&J(e)){let t=Y(e);D?.(t);return}r(e)},[r,D]);return(0,u.jsxs)(`div`,{className:`enhanced-combobox--component`,children:[(0,u.jsxs)(p,{items:V.allItems,value:t,onValueChange:G,inputValue:te,onInputValueChange:(e,{reason:t})=>{if(t===`item-press`){a(``);return}a(e)},itemToStringLabel:V.itemToStringLabel,disabled:m,filter:null,name:y,required:S,open:I,onOpenChange:W,children:[(0,u.jsx)(Ce,{placeholder:V.strings.placeholder,clearLabel:V.strings.clear,toggleLabel:V.strings.toggle,className:h,size:ee,error:B,required:S,disabled:m,clearable:g,onBlur:C}),(0,u.jsx)(ce,{isLoading:c,showStatus:V.showStatus,showEmpty:V.showEmpty,searchValue:i,minSearchLength:d,items:e,groupedItems:V.groupedItems,createOptionItem:V.createOptionItem,renderItemContent:V.renderItemContent,getItemReactKey:V.getItemReactKey,getItemDisabled:N,renderGroupLabel:k,isLoadingMore:M,strings:V.strings,size:z,portalContainer:v,listRef:V.listRef})]}),(0,u.jsx)(ue,{error:x,size:z})]})}function Te({items:e,selectedValues:t,onSelectedValuesChange:i,searchValue:a,onSearchValueChange:o,getItemLabel:c,getItemKey:d,isLoading:f=!1,minSearchLength:m=3,strings:h,disabled:g=!1,className:_,renderItem:v,portalContainer:y,name:b,invalid:x,error:S,required:C,onBlur:w,onSearch:T,debounceMs:E,creatable:D,onCreate:O,getItemGroup:k,renderGroupLabel:A,hasMore:j,onLoadMore:M,isLoadingMore:N,getItemDisabled:P,highlightMatch:F,size:I,open:L,onOpenChange:B,closeOnSelect:V=!1,applyButton:H=!1,onApply:U,onCancel:W}){let{defaultControlSize:te}=n.o(),G=ve(I,te),K=Se(G),ne=xe[G],re=x||!!S,q=(0,l.useRef)(null),ie=d??c,[X,Z]=(0,l.useState)(t),[ae,oe]=(0,l.useState)(!1),se=L!==void 0,le=se?L:ae;(0,l.useEffect)(()=>{H&&Z(t)},[H,t]);let Q=(0,l.useCallback)(e=>{se||oe(e),B?.(e)},[se,B]),$=ge({items:e,searchValue:a,onSearchValueChange:o,getItemLabel:c,getItemKey:d,isLoading:f,minSearchLength:m,strings:h,renderItem:v,onSearch:T,debounceMs:E,creatable:D,onCreate:O,getItemGroup:k,hasMore:j,onLoadMore:M,isLoadingMore:N,highlightMatch:F,size:G,ensuredItems:t}),de=(0,l.useCallback)(e=>{let t=[],n=null;for(let r of e)J(r)?n=Y(r):t.push(r);n&&O?.(n);let r=t.length!==e.length||!n?t:null;r&&(H?Z(r):i(r)),V&&Q(!1)},[i,O,H,V,Q]),fe=(0,l.useCallback)(()=>{H&&i(X),U?.(),Q(!1)},[H,X,U,i,Q]),pe=(0,l.useCallback)(()=>{H&&Z(t),W?.(),Q(!1)},[H,t,W,Q]),me=H?X:t,he=me.length>0?void 0:$.strings.placeholder;return(0,u.jsxs)(`div`,{className:`enhanced-combobox--component`,children:[(0,u.jsxs)(p,{items:$.allItems,multiple:!0,value:me,onValueChange:de,inputValue:a,onInputValueChange:(e,{reason:t})=>{if(t===`item-press`){o(``);return}o(e)},itemToStringLabel:$.itemToStringLabel,disabled:g,filter:null,name:b,required:C,open:le,onOpenChange:e=>{!e&&H&&Z(t),Q(e)},children:[(0,u.jsxs)(R,{ref:q,className:r.cn(s.c[K],s.l[K],K===`small`?`text-xs`:`text-sm`,`bg-transparent !shadow-none`,_),size:ne,error:re,children:[me.map(e=>(0,u.jsx)(z,{children:c(e)},ie(e))),(0,u.jsx)(ee,{placeholder:he,"aria-invalid":re||void 0,"aria-required":C,onBlur:w})]}),(0,u.jsx)(ce,{isLoading:f,showStatus:$.showStatus,showEmpty:$.showEmpty,searchValue:a,minSearchLength:m,items:e,groupedItems:$.groupedItems,createOptionItem:$.createOptionItem,renderItemContent:$.renderItemContent,getItemReactKey:$.getItemReactKey,getItemDisabled:P,renderGroupLabel:A,isLoadingMore:N,strings:$.strings,size:G,portalContainer:y,listRef:$.listRef,anchor:q,applyFooter:H?{applyLabel:$.strings.apply,cancelLabel:$.strings.cancel,onApply:fe,onCancel:pe}:void 0})]}),(0,u.jsx)(ue,{error:S,size:G})]})}var Ee=we,De=Te;we.displayName=`EnhancedCombobox`,Te.displayName=`EnhancedComboboxMultiple`;var Oe={...U,error:`Unable to load options.`};function ke({fetcher:e,value:n,defaultValue:i=null,onValueChange:o,onAfterFetch:s,onError:c,getKey:d,getLabel:f,getDescription:p,getMeta:m,renderOption:h,limit:g=10,debounceMs:_=300,preload:v=!0,minSearchLength:y=0,errorMessage:b,strings:x,disabled:S,...C}){let w=t.useStrings(Oe,x),T=n!==void 0,[E,D]=(0,l.useState)(i),O=T?n:E,[k,A]=(0,l.useState)(``),[j,M]=(0,l.useState)([]),[N,P]=(0,l.useState)(!1),[F,I]=(0,l.useState)(null),L=(0,l.useRef)(0),R=k.trim(),z=(0,l.useCallback)(e=>{T||D(e),o?.(e)},[T,o]);(0,l.useEffect)(()=>{if(S)return;if(!(R.length>0?R.length>=y:v)){M([]),P(!1),I(null);return}let t=L.current+1;L.current=t;let n=new AbortController,r={query:R,limit:g,signal:n.signal},i=window.setTimeout(()=>{P(!0),I(null),e(r).then(e=>{n.signal.aborted||L.current!==t||(M(e),s?.(e,r))}).catch(e=>{n.signal.aborted||L.current!==t||(M([]),I(e),c?.(e,r))}).finally(()=>{!n.signal.aborted&&L.current===t&&P(!1)})},_);return()=>{window.clearTimeout(i),n.abort()}},[_,S,e,g,y,s,c,v,R]);let ee=(0,l.useCallback)(e=>{if(h)return h(e,{query:R,isSelected:O?d(O)===d(e):!1});let t=p?.(e),n=m?.(e);return(0,u.jsxs)(`span`,{className:`async-resource-combobox--option flex min-w-0 items-center gap-space-md text-xs leading-tight`,children:[(0,u.jsx)(a.s,{tag:`span`,size:`inherit`,weight:`medium`,className:`min-w-0 shrink truncate`,children:f(e)}),(!!t||!!n)&&(0,u.jsxs)(`span`,{className:`inline-flex min-w-0 flex-1 items-center gap-space-sm overflow-hidden text-xs text-muted-foreground`,children:[!!t&&(0,u.jsx)(a.s,{tag:`span`,size:`inherit`,type:`secondary`,className:`min-w-0 truncate`,children:t}),!!n&&(0,u.jsx)(a.s,{tag:`span`,size:`inherit`,type:`secondary`,className:`min-w-0 truncate opacity-75`,children:n})]})]})},[p,d,f,m,h,O,R]),B=(0,l.useMemo)(()=>{if(F)return b??w.error},[F,b,w.error]);return(0,u.jsxs)(`div`,{"data-component":`async-resource-combobox`,"data-slot":`async-resource-combobox`,className:r.cn(`async-resource-combobox--component`,C.className),children:[(0,u.jsx)(we,{...C,className:void 0,disabled:S,items:j,selectedValue:O??null,onSelectedValueChange:z,searchValue:k,onSearchValueChange:A,getItemLabel:f,getItemKey:d,isLoading:N,minSearchLength:y,strings:w,renderItem:ee,error:typeof B==`string`?B:void 0}),B&&typeof B!=`string`&&(0,u.jsx)(`div`,{className:`async-resource-combobox--error mt-1.5`,children:B})]})}ke.displayName=`AsyncResourceCombobox`,Object.defineProperty(exports,"A",{enumerable:!0,get:function(){return z}}),Object.defineProperty(exports,"B",{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,"C",{enumerable:!0,get:function(){return ie}}),Object.defineProperty(exports,"D",{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,"E",{enumerable:!0,get:function(){return U}}),Object.defineProperty(exports,"F",{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,"G",{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,"H",{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,"I",{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,"J",{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,"K",{enumerable:!0,get:function(){return I}}),Object.defineProperty(exports,"L",{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,"M",{enumerable:!0,get:function(){return ee}}),Object.defineProperty(exports,"N",{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,"O",{enumerable:!0,get:function(){return V}}),Object.defineProperty(exports,"P",{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,"R",{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,"S",{enumerable:!0,get:function(){return K}}),Object.defineProperty(exports,"T",{enumerable:!0,get:function(){return J}}),Object.defineProperty(exports,"U",{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,"V",{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,"W",{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,"X",{enumerable:!0,get:function(){return H}}),Object.defineProperty(exports,"Y",{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,"_",{enumerable:!0,get:function(){return te}}),Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return we}}),Object.defineProperty(exports,"b",{enumerable:!0,get:function(){return re}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return pe}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return $}}),Object.defineProperty(exports,"f",{enumerable:!0,get:function(){return ue}}),Object.defineProperty(exports,"g",{enumerable:!0,get:function(){return q}}),Object.defineProperty(exports,"h",{enumerable:!0,get:function(){return X}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return De}}),Object.defineProperty(exports,"j",{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,"k",{enumerable:!0,get:function(){return B}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return fe}}),Object.defineProperty(exports,"m",{enumerable:!0,get:function(){return Z}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return Oe}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return Te}}),Object.defineProperty(exports,"p",{enumerable:!0,get:function(){return ce}}),Object.defineProperty(exports,"q",{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return Ee}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return ge}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return ke}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return de}}),Object.defineProperty(exports,"v",{enumerable:!0,get:function(){return W}}),Object.defineProperty(exports,"w",{enumerable:!0,get:function(){return Y}}),Object.defineProperty(exports,"x",{enumerable:!0,get:function(){return ne}}),Object.defineProperty(exports,"y",{enumerable:!0,get:function(){return G}}),Object.defineProperty(exports,"z",{enumerable:!0,get:function(){return S}});
2
- //# sourceMappingURL=combobox-CJiFDoTi.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"combobox-CJiFDoTi.cjs","names":[],"sources":["../../src/components/ui/combobox.tsx","../../src/components/base/combobox/combobox.strings.ts","../../src/components/base/combobox/constants.ts","../../src/components/base/combobox/components/loading-more.tsx","../../src/components/base/combobox/components/status-content.tsx","../../src/components/base/combobox/components/combobox-dropdown.tsx","../../src/components/base/combobox/components/error-message.tsx","../../src/components/base/combobox/components/highlighted-text.tsx","../../src/components/base/combobox/hooks/use-debounced-search.ts","../../src/components/base/combobox/hooks/use-grouped-items.ts","../../src/components/base/combobox/hooks/use-load-more.ts","../../src/components/base/combobox/hooks/use-enhanced-combobox-core.tsx","../../src/components/base/combobox/enhanced-combobox.tsx","../../src/components/base/combobox/async-resource-combobox.tsx"],"sourcesContent":["import { Combobox as ComboboxPrimitive } from '@base-ui/react/combobox';\nimport { CheckIcon, ChevronDownIcon, XIcon } from 'lucide-react';\nimport * as React from 'react';\nimport { cn } from '@/lib/utils';\n\nconst Combobox = ComboboxPrimitive.Root;\n\nfunction ComboboxInput({\n\tclassName,\n\t...props\n}: ComboboxPrimitive.Input.Props) {\n\treturn (\n\t\t<ComboboxPrimitive.Input\n\t\t\tdata-slot=\"combobox-input\"\n\t\t\tclassName={cn(\n\t\t\t\t'border-input file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground flex h-10 w-full min-w-0 rounded-md border bg-background px-3 py-2 text-sm shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\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 aria-invalid:bg-destructive/15 aria-invalid:placeholder:text-destructive',\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction ComboboxTrigger({\n\tclassName,\n\tchildren,\n\t...props\n}: ComboboxPrimitive.Trigger.Props) {\n\treturn (\n\t\t<ComboboxPrimitive.Trigger\n\t\t\tdata-slot=\"combobox-trigger\"\n\t\t\tclassName={cn(\n\t\t\t\t'border-input file:text-foreground placeholder:text-muted-foreground flex h-10 w-full items-center justify-between rounded-md border bg-background px-3 py-2 text-sm shadow-xs transition-[color,box-shadow] outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\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 aria-invalid:bg-destructive/15 aria-invalid:placeholder:text-destructive',\n\t\t\t\t'[&>span]:line-clamp-1',\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t\t<ComboboxPrimitive.Icon className=\"flex\">\n\t\t\t\t<ChevronDownIcon className=\"size-4 opacity-50\" />\n\t\t\t</ComboboxPrimitive.Icon>\n\t\t</ComboboxPrimitive.Trigger>\n\t);\n}\n\nfunction ComboboxValue({\n\tplaceholder,\n\t...props\n}: ComboboxPrimitive.Value.Props & { placeholder?: React.ReactNode }) {\n\treturn (\n\t\t<ComboboxPrimitive.Value\n\t\t\tdata-slot=\"combobox-value\"\n\t\t\tplaceholder={\n\t\t\t\t!!placeholder && <span className=\"text-muted-foreground\">{placeholder}</span>\n\t\t\t}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction ComboboxClear({\n\tclassName,\n\t...props\n}: ComboboxPrimitive.Clear.Props) {\n\treturn (\n\t\t<ComboboxPrimitive.Clear\n\t\t\tdata-slot=\"combobox-clear\"\n\t\t\tclassName={cn(\n\t\t\t\t'absolute right-8 top-1/2 -translate-y-1/2 rounded-sm opacity-50 ring-offset-background transition-opacity',\n\t\t\t\t'hover:opacity-100 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n\t\t\t\t'disabled:pointer-events-none',\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<XIcon className=\"size-4\" />\n\t\t</ComboboxPrimitive.Clear>\n\t);\n}\n\nexport type ComboboxSize = 'sm' | 'md' | 'lg';\n\nconst inputSizeClasses: Record<ComboboxSize, string> = {\n\tsm: 'h-8 text-xs pl-2 pr-8',\n\tmd: 'h-10 text-sm pl-3 pr-10',\n\tlg: 'h-12 text-base pl-4 pr-12',\n};\n\nconst inputSizeWithClearClasses: Record<ComboboxSize, string> = {\n\tsm: 'pr-14',\n\tmd: 'pr-16',\n\tlg: 'pr-20',\n};\n\nconst iconContainerSizeClasses: Record<ComboboxSize, string> = {\n\tsm: 'right-1',\n\tmd: 'right-2',\n\tlg: 'right-3',\n};\n\nconst iconSizeClasses: Record<ComboboxSize, string> = {\n\tsm: 'size-3',\n\tmd: 'size-4',\n\tlg: 'size-5',\n};\n\ntype ComboboxInputTriggerProps = Omit<ComboboxPrimitive.Input.Props, 'size'> & {\n\tshowClear?: boolean;\n\tsize?: ComboboxSize;\n\terror?: boolean;\n};\n\nfunction ComboboxInputTrigger({\n\tclassName,\n\tshowClear = false,\n\tsize = 'md',\n\terror,\n\t...props\n}: ComboboxInputTriggerProps) {\n\treturn (\n\t\t<div className=\"relative\">\n\t\t\t<ComboboxPrimitive.Input\n\t\t\t\tdata-slot=\"combobox-input\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'border-input file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground w-full min-w-0 rounded-md border bg-background shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50',\n\t\t\t\t\t'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]',\n\t\t\t\t\t'aria-invalid:ring-destructive/20 aria-invalid:border-destructive aria-invalid:bg-destructive/15 aria-invalid:placeholder:text-destructive',\n\t\t\t\t\tinputSizeClasses[size],\n\t\t\t\t\tshowClear && inputSizeWithClearClasses[size],\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t\taria-invalid={error || undefined}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'absolute top-1/2 -translate-y-1/2 flex items-center gap-1 text-muted-foreground',\n\t\t\t\t\ticonContainerSizeClasses[size]\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{!!showClear && (\n <ComboboxPrimitive.Clear\n\t\t\t\t\t\tdata-slot=\"combobox-clear\"\n\t\t\t\t\t\tclassName=\"rounded-sm p-1 opacity-50 hover:opacity-100 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<XIcon className={iconSizeClasses[size]} />\n\t\t\t\t\t</ComboboxPrimitive.Clear>\n )}\n\t\t\t\t<ComboboxPrimitive.Trigger className=\"rounded-sm p-1 hover:bg-accent focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\">\n\t\t\t\t\t<ChevronDownIcon className={iconSizeClasses[size]} />\n\t\t\t\t</ComboboxPrimitive.Trigger>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\n// Portal\nconst ComboboxPortal = ComboboxPrimitive.Portal;\n\n// Positioner\nfunction ComboboxPositioner({\n\tclassName,\n\tsideOffset = 4,\n\t...props\n}: ComboboxPrimitive.Positioner.Props) {\n\treturn (\n\t\t<ComboboxPrimitive.Positioner\n\t\t\tdata-slot=\"combobox-positioner\"\n\t\t\tsideOffset={sideOffset}\n\t\t\tclassName={cn('z-50 outline-none', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n// Popup (content)\nfunction ComboboxPopup({\n\tclassName,\n\t...props\n}: ComboboxPrimitive.Popup.Props) {\n\treturn (\n\t\t<ComboboxPrimitive.Popup\n\t\t\tdata-slot=\"combobox-popup\"\n\t\t\tclassName={cn(\n\t\t\t\t'w-[var(--anchor-width)] min-w-[8rem] max-w-[var(--available-width)] max-h-[min(var(--available-height),24rem)]',\n\t\t\t\t'overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md',\n\t\t\t\t'origin-[var(--transform-origin)]',\n\t\t\t\t'data-[starting-style]:opacity-0 data-[starting-style]:scale-95',\n\t\t\t\t'data-[ending-style]:opacity-0 data-[ending-style]:scale-95',\n\t\t\t\t'transition-[opacity,transform] duration-150',\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n// List\nfunction ComboboxList({\n\tclassName,\n\t...props\n}: ComboboxPrimitive.List.Props) {\n\treturn (\n\t\t<ComboboxPrimitive.List\n\t\t\tdata-slot=\"combobox-list\"\n\t\t\tclassName={cn(\n\t\t\t\t'max-h-[min(24rem,var(--available-height))] overflow-y-auto overscroll-contain p-1',\n\t\t\t\t'outline-none empty:hidden',\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n// Item\n//\n// Layout: `[content][indicator]` with the selection check pinned to the\n// right (`justify-between`). Consumers render leading icons naturally inside\n// `renderItem` — the `gap` between icon and label is set by the consumer.\nconst itemSizeClasses: Record<ComboboxSize, string> = {\n\tsm: 'py-1 px-2 text-xs gap-2',\n\tmd: 'py-1.5 px-2.5 text-sm gap-2',\n\tlg: 'py-2 px-3 text-base gap-2.5',\n};\n\nconst itemIndicatorSizeClasses: Record<ComboboxSize, string> = {\n\tsm: 'size-3',\n\tmd: 'size-4',\n\tlg: 'size-5',\n};\n\nfunction ComboboxItem({\n\tclassName,\n\tchildren,\n\tsize = 'md',\n\t...props\n}: ComboboxPrimitive.Item.Props & { size?: ComboboxSize }) {\n\treturn (\n\t\t<ComboboxPrimitive.Item\n\t\t\tdata-slot=\"combobox-item\"\n\t\t\tclassName={cn(\n\t\t\t\t'flex w-full cursor-default select-none items-center justify-between rounded-sm outline-none',\n\t\t\t\t'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n\t\t\t\t'data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground',\n\t\t\t\titemSizeClasses[size],\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<span className=\"flex min-w-0 flex-1 items-center gap-2 truncate\">\n\t\t\t\t{children}\n\t\t\t</span>\n\t\t\t<ComboboxPrimitive.ItemIndicator\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'flex shrink-0 items-center justify-center text-muted-foreground',\n\t\t\t\t\titemIndicatorSizeClasses[size]\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<CheckIcon className={itemIndicatorSizeClasses[size]} />\n\t\t\t</ComboboxPrimitive.ItemIndicator>\n\t\t</ComboboxPrimitive.Item>\n\t);\n}\n\n// Item Indicator (standalone)\nfunction ComboboxItemIndicator({\n\tclassName,\n\tchildren,\n\t...props\n}: ComboboxPrimitive.ItemIndicator.Props) {\n\treturn (\n\t\t<ComboboxPrimitive.ItemIndicator\n\t\t\tdata-slot=\"combobox-item-indicator\"\n\t\t\tclassName={cn(className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children ?? <CheckIcon className=\"size-4\" />}\n\t\t</ComboboxPrimitive.ItemIndicator>\n\t);\n}\n\n// Empty\nfunction ComboboxEmpty({\n\tclassName,\n\tchildren,\n\t...props\n}: ComboboxPrimitive.Empty.Props) {\n\treturn (\n\t\t<ComboboxPrimitive.Empty\n\t\t\tdata-slot=\"combobox-empty\"\n\t\t\tclassName={cn(\n\t\t\t\t'py-6 text-center text-sm text-muted-foreground empty:hidden',\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</ComboboxPrimitive.Empty>\n\t);\n}\n\n// Status (for async loading states)\nfunction ComboboxStatus({\n\tclassName,\n\t...props\n}: ComboboxPrimitive.Status.Props) {\n\treturn (\n\t\t<ComboboxPrimitive.Status\n\t\t\tdata-slot=\"combobox-status\"\n\t\t\tclassName={cn(\n\t\t\t\t'flex items-center gap-2 px-3 py-2 text-sm text-muted-foreground empty:hidden',\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n// Group\nfunction ComboboxGroup({\n\tclassName,\n\t...props\n}: ComboboxPrimitive.Group.Props) {\n\treturn (\n\t\t<ComboboxPrimitive.Group\n\t\t\tdata-slot=\"combobox-group\"\n\t\t\tclassName={cn('overflow-hidden p-1', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n// Group Label\nfunction ComboboxGroupLabel({\n\tclassName,\n\t...props\n}: ComboboxPrimitive.GroupLabel.Props) {\n\treturn (\n\t\t<ComboboxPrimitive.GroupLabel\n\t\t\tdata-slot=\"combobox-group-label\"\n\t\t\tclassName={cn('px-2 py-1.5 text-xs font-medium text-muted-foreground', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n// Collection (for rendering items)\nconst ComboboxCollection = ComboboxPrimitive.Collection;\n\n// Separator\nfunction ComboboxSeparator({\n\tclassName,\n\t...props\n}: ComboboxPrimitive.Separator.Props) {\n\treturn (\n\t\t<ComboboxPrimitive.Separator\n\t\t\tdata-slot=\"combobox-separator\"\n\t\t\tclassName={cn('-mx-1 my-1 h-px bg-muted', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n// Chips container (for multiple selection)\nconst chipsSizeClasses: Record<ComboboxSize, string> = {\n\tsm: 'min-h-8 gap-1 px-2 py-1 text-xs',\n\tmd: 'min-h-10 gap-1.5 px-3 py-2 text-sm',\n\tlg: 'min-h-12 gap-2 px-4 py-2.5 text-base',\n};\n\nfunction ComboboxChips({\n\tclassName,\n\tsize = 'md',\n\terror,\n\t...props\n}: React.ComponentPropsWithRef<typeof ComboboxPrimitive.Chips> & {\n\tsize?: ComboboxSize;\n\terror?: boolean;\n}) {\n\treturn (\n\t\t<ComboboxPrimitive.Chips\n\t\t\tdata-slot=\"combobox-chips\"\n\t\t\tclassName={cn(\n\t\t\t\t'flex flex-wrap items-center rounded-md border border-input bg-background ring-offset-background shadow-xs transition-[color,box-shadow] outline-none',\n\t\t\t\t'focus-within:border-ring focus-within:ring-ring/50 focus-within:ring-[3px]',\n\t\t\t\t'aria-invalid:ring-destructive/20 aria-invalid:border-destructive aria-invalid:bg-destructive/15',\n\t\t\t\tchipsSizeClasses[size],\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\taria-invalid={error || undefined}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n// Chip\nfunction ComboboxChip({\n\tclassName,\n\tchildren,\n\t...props\n}: ComboboxPrimitive.Chip.Props) {\n\treturn (\n\t\t<ComboboxPrimitive.Chip\n\t\t\tdata-slot=\"combobox-chip\"\n\t\t\tclassName={cn(\n\t\t\t\t'inline-flex items-center gap-1 rounded-md bg-secondary px-2 py-1 text-xs font-medium text-secondary-foreground',\n\t\t\t\t'data-[highlighted]:bg-primary data-[highlighted]:text-primary-foreground',\n\t\t\t\t'focus-within:bg-primary focus-within:text-primary-foreground',\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t\t<ComboboxPrimitive.ChipRemove className=\"rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\">\n\t\t\t\t<XIcon className=\"size-3\" />\n\t\t\t</ComboboxPrimitive.ChipRemove>\n\t\t</ComboboxPrimitive.Chip>\n\t);\n}\n\n// Chips Input\nfunction ComboboxChipsInput({\n\tclassName,\n\t...props\n}: ComboboxPrimitive.Input.Props) {\n\treturn (\n\t\t<ComboboxPrimitive.Input\n\t\t\tdata-slot=\"combobox-chips-input\"\n\t\t\tclassName={cn(\n\t\t\t\t'min-w-[80px] flex-1 bg-transparent outline-none placeholder:text-muted-foreground',\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n// Backdrop (for modal)\nfunction ComboboxBackdrop({\n\tclassName,\n\t...props\n}: ComboboxPrimitive.Backdrop.Props) {\n\treturn (\n\t\t<ComboboxPrimitive.Backdrop\n\t\t\tdata-slot=\"combobox-backdrop\"\n\t\t\tclassName={cn(\n\t\t\t\t'fixed inset-0 z-50 bg-black/80',\n\t\t\t\t'data-[starting-style]:opacity-0 data-[ending-style]:opacity-0',\n\t\t\t\t'transition-opacity duration-150',\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n// Arrow\nfunction ComboboxArrow({\n\tclassName,\n\t...props\n}: ComboboxPrimitive.Arrow.Props) {\n\treturn (\n\t\t<ComboboxPrimitive.Arrow\n\t\t\tdata-slot=\"combobox-arrow\"\n\t\t\tclassName={cn('fill-popover', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n// useFilter hook re-export\nconst useComboboxFilter = ComboboxPrimitive.useFilter;\n\nexport {\n\tCombobox,\n\tComboboxInput,\n\tComboboxInputTrigger,\n\tComboboxTrigger,\n\tComboboxValue,\n\tComboboxClear,\n\tComboboxPortal,\n\tComboboxPositioner,\n\tComboboxPopup,\n\tComboboxList,\n\tComboboxItem,\n\tComboboxItemIndicator,\n\tComboboxEmpty,\n\tComboboxStatus,\n\tComboboxGroup,\n\tComboboxGroupLabel,\n\tComboboxCollection,\n\tComboboxSeparator,\n\tComboboxChips,\n\tComboboxChip,\n\tComboboxChipsInput,\n\tComboboxBackdrop,\n\tComboboxArrow,\n\tuseComboboxFilter,\n};\n","/**\n * Default user-facing strings for `<EnhancedCombobox>`.\n *\n * Consumers wire backend i18n at the call site:\n *\n * <EnhancedCombobox strings={{ noResults: t('search.empty') }} … />\n *\n * Templates use `{placeholder}` tokens — the component substitutes them at\n * render time. Function-valued strings would also work; we keep templates\n * here for the constants file.\n */\nimport type { ComboboxStrings } from './types';\n\nexport const defaultComboboxStrings: ComboboxStrings = {\n\tplaceholder: 'Search...',\n\tclear: 'Clear selection',\n\ttoggle: 'Open options',\n\tsearching: 'Loading...',\n\tnoResults: 'No results found.',\n\ttypeToSearch: 'Type at least {min} characters to search...',\n\ttypeMore: 'Type {remaining} more character{s} to search...',\n\tcreateNew: 'Create {value}',\n\tloadingMore: 'Loading...',\n\tapply: 'Apply',\n\tcancel: 'Cancel',\n};\n\nexport type { ComboboxStrings };\n","/**\n * Constants and default values for the Enhanced Combobox component.\n *\n * Default strings live in `./combobox.strings.ts` per rule 19. The legacy\n * `DEFAULT_STRINGS` alias is re-exported below for any external consumer\n * still using the old name; new code should import `defaultComboboxStrings`\n * from `./combobox.strings`.\n */\n\nexport { defaultComboboxStrings, defaultComboboxStrings as DEFAULT_STRINGS } from './combobox.strings';\n\n// ============================================================================\n// Default Values\n// ============================================================================\n\nexport const DEFAULT_MIN_SEARCH_LENGTH = 3;\nexport const DEFAULT_DEBOUNCE_MS = 300;\nexport const DEFAULT_SIZE = 'default';\nexport const LOAD_MORE_THRESHOLD = 0.8;\nexport const LOAD_MORE_DEBOUNCE_MS = 100;\nexport const LOAD_MORE_COOLDOWN_MS = 500;\n\n// ============================================================================\n// Symbols\n// ============================================================================\n\nexport const CREATE_OPTION_SYMBOL = Symbol('enhanced-combobox-create-option');\n\n// ============================================================================\n// Type Guards\n// ============================================================================\n\nexport function isCreateOption<T>(item: T): item is T & { [CREATE_OPTION_SYMBOL]: string } {\n\treturn (\n\t\ttypeof item === 'object' &&\n\t\titem !== null &&\n\t\tCREATE_OPTION_SYMBOL in (item as object)\n\t);\n}\n\nexport function getCreateOptionValue<T>(item: T): string {\n\tif (!isCreateOption(item)) {\n\t\tthrow new Error('Item is not a create option');\n\t}\n\treturn (item as { [CREATE_OPTION_SYMBOL]: string })[CREATE_OPTION_SYMBOL];\n}\n\nexport function createCreateOption<T>(inputValue: string): T {\n\treturn { [CREATE_OPTION_SYMBOL]: inputValue } as unknown as T;\n}\n","/**\n * LoadingMore Component\n */\n\nimport { Loader2 } from 'lucide-react';\nimport * as React from 'react';\nimport { cn } from '@/lib/utils';\n\nexport interface LoadingMoreProps {\n\tisLoading: boolean;\n\ttext: string;\n\tclassName?: string;\n}\n\nexport function LoadingMore({\n\tisLoading,\n\ttext,\n\tclassName,\n}: LoadingMoreProps): React.ReactElement | null {\n\tif (!isLoading) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn('loading-more--component', \n\t\t\t\t'flex items-center justify-center gap-space-sm px-control py-space-xs text-xs text-muted-foreground',\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\trole=\"status\"\n\t\t\taria-live=\"polite\"\n\t\t>\n\t\t\t<Loader2 className=\"size-icon-sm animate-spin\" aria-hidden=\"true\" />\n\t\t\t<span>{text}</span>\n\t\t</div>\n\t);\n}\n\nLoadingMore.displayName = 'LoadingMore';\n","/**\n * StatusContent Component\n */\n\nimport { Loader2 } from 'lucide-react';\nimport * as React from 'react';\nimport type { ComboboxStrings } from '../types';\n\nexport interface StatusContentProps {\n\tisLoading?: boolean;\n\tsearchValue: string;\n\tminSearchLength: number;\n\titemCount: number;\n\tstrings: ComboboxStrings;\n}\n\nexport function StatusContent({\n\tisLoading,\n\tsearchValue,\n\tminSearchLength,\n\titemCount,\n\tstrings,\n}: StatusContentProps): React.ReactNode {\n\tconst trimmed = searchValue.trim();\n\n\tif (isLoading) {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<Loader2 className=\"size-icon-sm animate-spin\" />\n\t\t\t\t{strings.searching}\n\t\t\t</>\n\t\t);\n\t}\n\n\tif (trimmed === '') {\n\t\tif (strings.typeToSearch.includes('{min}')) {\n\t\t\treturn strings.typeToSearch.replace('{min}', String(minSearchLength));\n\t\t}\n\t\treturn strings.typeToSearch;\n\t}\n\n\tif (trimmed.length < minSearchLength) {\n\t\tconst remaining = minSearchLength - trimmed.length;\n\t\tif (strings.typeMore.includes('{remaining}') || strings.typeMore.includes('{s}')) {\n\t\t\treturn strings.typeMore\n\t\t\t\t.replace('{remaining}', String(remaining))\n\t\t\t\t.replace('{s}', remaining !== 1 ? 's' : '');\n\t\t}\n\t\treturn strings.typeMore;\n\t}\n\n\tif (itemCount === 0) {\n\t\treturn null;\n\t}\n\n\treturn null;\n}\n\nStatusContent.displayName = 'StatusContent';\n","/**\n * Shared ComboboxDropdown Component\n *\n * Renders the dropdown content for both single and multiple selection variants.\n * Extracts shared rendering logic to reduce duplication.\n */\n\nimport * as React from 'react';\n\nimport {\n\tComboboxPortal,\n\tComboboxPositioner,\n\tComboboxPopup,\n\tComboboxEmpty,\n\tComboboxList,\n\tComboboxItem,\n\tComboboxStatus,\n\tComboboxGroup,\n\tComboboxGroupLabel,\n\tComboboxCollection,\n} from '@/components/ui/combobox';\nimport { Button } from '@/components/base/buttons';\nimport { ScrollArea } from '@/components/base/display/scroll-area';\n\nimport { DEFAULT_SIZE } from '../constants';\nimport type { ComboboxStrings, ComboboxSize } from '../types';\nimport { LoadingMore } from './loading-more';\nimport { StatusContent } from './status-content';\n\nconst primitiveSizeByComboboxSize: Record<ComboboxSize, 'sm' | 'md'> = {\n\tsmall: 'sm',\n\tdefault: 'md',\n};\n\nconst itemClassByComboboxSize: Record<ComboboxSize, string> = {\n\tsmall: 'min-h-control-sm gap-space-lg rounded-md px-row-x py-row-y text-xs leading-tight [&>span:first-child]:gap-space-lg [&>span:first-child]:text-xs',\n\tdefault: 'min-h-control gap-space-lg rounded-md px-row-x py-row-y text-sm leading-tight [&>span:first-child]:gap-space-lg [&>span:first-child]:text-sm',\n};\n\nconst groupLabelClassName =\n\t'px-row-x py-row-y text-xxs font-medium uppercase tracking-wide text-muted-foreground';\n\nexport interface ComboboxDropdownProps<T> {\n\t// Display state\n\tisLoading: boolean;\n\tshowStatus: boolean;\n\tshowEmpty: boolean;\n\n\t// Search\n\tsearchValue: string;\n\tminSearchLength: number;\n\n\t// Items\n\titems: T[];\n\tgroupedItems: Map<string, T[]> | null;\n\tcreateOptionItem: T | null;\n\n\t// Rendering\n\trenderItemContent: (item: T) => React.ReactNode;\n\tgetItemReactKey: (item: T) => string;\n\tgetItemDisabled?: (item: T) => boolean;\n\trenderGroupLabel?: (group: string) => React.ReactNode;\n\n\t// Load more\n\tisLoadingMore?: boolean;\n\n\t// Strings\n\tstrings: ComboboxStrings;\n\n\t// Size\n\tsize?: ComboboxSize;\n\n\t// Portal\n\tportalContainer?: React.RefObject<HTMLElement | null>;\n\n\t// Refs\n\tlistRef: React.RefObject<HTMLDivElement | null>;\n\n\t// Multiple selection anchor\n\tanchor?: React.RefObject<HTMLElement | null>;\n\n\t/** Optional apply / cancel footer for the apply-button workflow. */\n\tapplyFooter?: {\n\t\tapplyLabel: string;\n\t\tcancelLabel: string;\n\t\tonApply: () => void;\n\t\tonCancel: () => void;\n\t};\n}\n\nexport function ComboboxDropdown<T>({\n\tisLoading,\n\tshowStatus,\n\tshowEmpty,\n\tsearchValue,\n\tminSearchLength,\n\titems,\n\tgroupedItems,\n\tcreateOptionItem,\n\trenderItemContent,\n\tgetItemReactKey,\n\tgetItemDisabled,\n\trenderGroupLabel,\n\tisLoadingMore,\n\tstrings,\n\tsize = DEFAULT_SIZE,\n\tportalContainer,\n\tlistRef,\n\tanchor,\n\tapplyFooter,\n}: ComboboxDropdownProps<T>): React.ReactElement {\n\tconst positionerClassName = portalContainer != null ? 'z-[100]' : undefined;\n\tconst primitiveSize = primitiveSizeByComboboxSize[size];\n\n\tconst content = (\n\t\t<ComboboxPositioner\n\t\t\tanchor={anchor}\n\t\t\tclassName={positionerClassName}\n\t\t>\n\t\t\t<ComboboxPopup\n\t\t\t\taria-busy={isLoading || undefined}\n\t\t\t\tclassName=\"combobox-dropdown--popup rounded-radius border-border/70 shadow-sm\"\n\t\t\t>\n\t\t\t\t{/* Status message */}\n\t\t\t\t{!!showStatus && (\n\t\t\t\t\t<ComboboxStatus className=\"gap-space-sm px-control py-space-xs text-xs text-muted-foreground\">\n\t\t\t\t\t\t<StatusContent\n\t\t\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\t\t\tsearchValue={searchValue}\n\t\t\t\t\t\t\tminSearchLength={minSearchLength}\n\t\t\t\t\t\t\titemCount={items.length}\n\t\t\t\t\t\t\tstrings={strings}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</ComboboxStatus>\n\t\t\t\t)}\n\n\t\t\t\t{/* Empty state */}\n\t\t\t\t{!!showEmpty && (\n\t\t\t\t\t<ComboboxEmpty className=\"px-control py-space-xs text-center text-xs text-muted-foreground\">\n\t\t\t\t\t\t{strings.noResults}\n\t\t\t\t\t</ComboboxEmpty>\n\t\t\t\t)}\n\n\t\t\t\t{/* Items list */}\n\t\t\t\t<ScrollArea\n\t\t\t\t\tviewportRef={listRef}\n\t\t\t\t\tclassName=\"max-h-[min(20rem,var(--available-height))]\"\n\t\t\t\t>\n\t\t\t\t\t<ComboboxList className=\"combobox-dropdown--list max-h-none overflow-visible p-space-sm\">\n\t\t\t\t\t\t{groupedItems ? (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t{Array.from(groupedItems.entries()).map(([group, groupItems]) => {\n\t\t\t\t\t\t\t\t\tconst groupLabel =\n\t\t\t\t\t\t\t\t\t\ttypeof renderGroupLabel === 'function'\n\t\t\t\t\t\t\t\t\t\t\t? renderGroupLabel(group)\n\t\t\t\t\t\t\t\t\t\t\t: group;\n\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<ComboboxGroup className=\"combobox-dropdown--group p-0\" key={group} items={groupItems}>\n\t\t\t\t\t\t\t\t\t\t\t<ComboboxGroupLabel className={groupLabelClassName}>{groupLabel}</ComboboxGroupLabel>\n\t\t\t\t\t\t\t\t\t\t\t<ComboboxCollection>\n\t\t\t\t\t\t\t\t\t\t\t\t{(item: T) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<ComboboxItem\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={getItemReactKey(item)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={item}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize={primitiveSize}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclassName={itemClassByComboboxSize[size]}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={getItemDisabled?.(item)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{renderItemContent(item)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</ComboboxItem>\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t</ComboboxCollection>\n\t\t\t\t\t\t\t\t\t\t</ComboboxGroup>\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})}\n\n\t\t\t\t\t\t\t\t{createOptionItem != null && (\n\t\t\t\t\t\t\t\t\t<ComboboxItem\n\t\t\t\t\t\t\t\t\t\tkey={getItemReactKey(createOptionItem)}\n\t\t\t\t\t\t\t\t\t\tvalue={createOptionItem}\n\t\t\t\t\t\t\t\t\t\tsize={primitiveSize}\n\t\t\t\t\t\t\t\t\t\tclassName={itemClassByComboboxSize[size]}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{renderItemContent(createOptionItem)}\n\t\t\t\t\t\t\t\t\t</ComboboxItem>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<ComboboxCollection>\n\t\t\t\t\t\t\t\t{(item: T) => (\n\t\t\t\t\t\t\t\t\t<ComboboxItem\n\t\t\t\t\t\t\t\t\t\tkey={getItemReactKey(item)}\n\t\t\t\t\t\t\t\t\t\tvalue={item}\n\t\t\t\t\t\t\t\t\t\tsize={primitiveSize}\n\t\t\t\t\t\t\t\t\t\tclassName={itemClassByComboboxSize[size]}\n\t\t\t\t\t\t\t\t\t\tdisabled={getItemDisabled?.(item)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{renderItemContent(item)}\n\t\t\t\t\t\t\t\t\t</ComboboxItem>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</ComboboxCollection>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</ComboboxList>\n\t\t\t\t</ScrollArea>\n\n\t\t\t\t{/* Loading more indicator */}\n\t\t\t\t<LoadingMore\n\t\t\t\t\tisLoading={!!isLoadingMore}\n\t\t\t\t\ttext={strings.loadingMore}\n\t\t\t\t/>\n\n\t\t\t\t{/* Apply / cancel footer (multi-select with applyButton). */}\n\t\t\t\t{!!applyFooter && (\n\t\t\t\t\t<div className=\"flex items-center justify-end gap-space-md border-t border-border/60 px-control py-space-xs\">\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\tapplyFooter.onCancel();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{applyFooter.cancelLabel}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\t\tapplyFooter.onApply();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{applyFooter.applyLabel}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</ComboboxPopup>\n\t\t</ComboboxPositioner>\n\t);\n\n\tif (portalContainer) {\n\t\treturn <ComboboxPortal container={portalContainer}>{content}</ComboboxPortal>;\n\t}\n\n\treturn <ComboboxPortal>{content}</ComboboxPortal>;\n}\n\nComboboxDropdown.displayName = 'ComboboxDropdown';\n","/**\n * ErrorMessage Component\n */\n\nimport * as React from 'react';\nimport { cn } from '@/lib/utils';\nimport type { ComboboxSize } from '../types';\n\nexport interface ErrorMessageProps {\n\terror?: string;\n\tsize: ComboboxSize;\n\tclassName?: string;\n}\n\nconst sizeClasses: Record<ComboboxSize, string> = {\n\tsmall: 'text-xs mt-space-sm',\n\tdefault: 'text-sm mt-space-md',\n};\n\nexport function ErrorMessage({\n\terror,\n\tsize,\n\tclassName,\n}: ErrorMessageProps): React.ReactElement | null {\n\tif (!error) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<p\n\t\t\tclassName={cn('error-message--component', 'text-destructive', sizeClasses[size], className)}\n\t\t\trole=\"alert\"\n\t\t\taria-live=\"polite\"\n\t\t>\n\t\t\t{error}\n\t\t</p>\n\t);\n}\n\nErrorMessage.displayName = 'ErrorMessage';\n","/**\n * HighlightedText Component\n */\n\nimport * as React from 'react';\n\nexport interface HighlightedTextProps {\n\ttext: string;\n\thighlight: string;\n\thighlightClassName?: string;\n}\n\nfunction escapeRegExp(str: string): string {\n\treturn str.replace(/[$()*+.?[\\\\\\]^{|}]/g, '\\\\$&');\n}\n\nexport function HighlightedText({\n\ttext,\n\thighlight,\n\thighlightClassName = 'rounded-sm bg-warning/20 px-0.5 text-warning-foreground dark:bg-warning/25',\n}: HighlightedTextProps): React.ReactNode {\n\tif (!highlight.trim()) {\n\t\treturn text;\n\t}\n\n\tconst regex = new RegExp(`(${escapeRegExp(highlight)})`, 'gi');\n\tconst parts = text.split(regex);\n\tlet cursor = 0;\n\n\treturn (\n\t\t<>\n\t\t\t{parts.map((part, index) => {\n\t\t\t\tconst isMatch = index % 2 === 1;\n\t\t\t\tconst key = String(cursor);\n\t\t\t\tcursor += part.length;\n\n\t\t\t\tif (isMatch) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<mark key={key} className={highlightClassName}>\n\t\t\t\t\t\t\t{part}\n\t\t\t\t\t\t</mark>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn <span key={key}>{part}</span>;\n\t\t\t})}\n\t\t</>\n\t);\n}\n\nHighlightedText.displayName = 'HighlightedText';\n","/**\n * Hook for debounced search functionality\n */\n\nimport { useEffect, useRef } from 'react';\nimport { DEFAULT_DEBOUNCE_MS, DEFAULT_MIN_SEARCH_LENGTH } from '../constants';\n\nexport interface UseDebouncedSearchOptions {\n\tsearchValue: string;\n\tonSearch: ((value: string) => void) | undefined;\n\tdebounceMs?: number;\n\tminSearchLength?: number;\n}\n\nexport function useDebouncedSearch({\n\tsearchValue,\n\tonSearch,\n\tdebounceMs = DEFAULT_DEBOUNCE_MS,\n\tminSearchLength = DEFAULT_MIN_SEARCH_LENGTH,\n}: UseDebouncedSearchOptions): void {\n\tconst timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n\t// Hold the latest onSearch in a ref so the debounce effect does NOT depend\n\t// on its identity. Consumers almost always pass an inline callback whose\n\t// reference changes every render; depending on it here re-ran the effect on\n\t// every render and — when onSearch triggered a state update — caused an\n\t// infinite fetch loop. The effect now only re-runs on real input changes.\n\tconst onSearchRef = useRef(onSearch);\n\tuseEffect(() => {\n\t\tonSearchRef.current = onSearch;\n\t}, [onSearch]);\n\n\tuseEffect(() => {\n\t\tif (!onSearchRef.current) return;\n\n\t\tif (timeoutRef.current) {\n\t\t\tclearTimeout(timeoutRef.current);\n\t\t}\n\n\t\tconst trimmed = searchValue.trim();\n\t\tif (trimmed.length >= minSearchLength) {\n\t\t\ttimeoutRef.current = setTimeout(() => {\n\t\t\t\tonSearchRef.current?.(trimmed);\n\t\t\t}, debounceMs);\n\t\t}\n\n\t\treturn () => {\n\t\t\tif (timeoutRef.current) {\n\t\t\t\tclearTimeout(timeoutRef.current);\n\t\t\t}\n\t\t};\n\t}, [searchValue, debounceMs, minSearchLength]);\n}\n","/**\n * Hook for grouping items by category\n */\n\nimport { useMemo } from 'react';\n\nexport interface UseGroupedItemsOptions<T> {\n\titems: T[];\n\tgetItemGroup: ((item: T) => string) | undefined;\n}\n\nexport type GroupedItemsResult<T> = Map<string, T[]> | null;\n\nexport function useGroupedItems<T>({\n\titems,\n\tgetItemGroup,\n}: UseGroupedItemsOptions<T>): GroupedItemsResult<T> {\n\treturn useMemo(() => {\n\t\tif (!getItemGroup) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst groups = new Map<string, T[]>();\n\n\t\tfor (const item of items) {\n\t\t\tconst groupKey = getItemGroup(item);\n\t\t\tconst existing = groups.get(groupKey);\n\n\t\t\tif (existing) {\n\t\t\t\texisting.push(item);\n\t\t\t} else {\n\t\t\t\tgroups.set(groupKey, [item]);\n\t\t\t}\n\t\t}\n\n\t\treturn groups;\n\t}, [items, getItemGroup]);\n}\n","/**\n * Hook for infinite scroll / load more functionality\n */\n\nimport { useCallback, useEffect, useRef } from 'react';\nimport {\n\tLOAD_MORE_THRESHOLD,\n\tLOAD_MORE_DEBOUNCE_MS,\n\tLOAD_MORE_COOLDOWN_MS,\n} from '../constants';\n\nexport interface UseLoadMoreOptions {\n\thasMore: boolean | undefined;\n\tonLoadMore: (() => void) | undefined;\n\tisLoadingMore: boolean | undefined;\n}\n\nexport interface UseLoadMoreReturn {\n\thandleScroll: (event: Event) => void;\n}\n\nexport function useLoadMore({\n\thasMore,\n\tonLoadMore,\n\tisLoadingMore,\n}: UseLoadMoreOptions): UseLoadMoreReturn {\n\tconst isLoadingRef = useRef(false);\n\tconst debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n\tconst handleScroll = useCallback(\n\t\t(event: Event) => {\n\t\t\tif (!hasMore || !onLoadMore || isLoadingMore || isLoadingRef.current) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst target = event.target as HTMLElement;\n\t\t\tconst { scrollHeight, scrollTop, clientHeight } = target;\n\t\t\tconst scrollPercentage = (scrollTop + clientHeight) / scrollHeight;\n\n\t\t\tif (scrollPercentage >= LOAD_MORE_THRESHOLD) {\n\t\t\t\tif (debounceRef.current) {\n\t\t\t\t\tclearTimeout(debounceRef.current);\n\t\t\t\t}\n\n\t\t\t\tdebounceRef.current = setTimeout(() => {\n\t\t\t\t\tisLoadingRef.current = true;\n\t\t\t\t\tonLoadMore();\n\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tisLoadingRef.current = false;\n\t\t\t\t\t}, LOAD_MORE_COOLDOWN_MS);\n\t\t\t\t}, LOAD_MORE_DEBOUNCE_MS);\n\t\t\t}\n\t\t},\n\t\t[hasMore, onLoadMore, isLoadingMore]\n\t);\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (debounceRef.current) {\n\t\t\t\tclearTimeout(debounceRef.current);\n\t\t\t}\n\t\t};\n\t}, []);\n\n\treturn { handleScroll };\n}\n","/**\n * Core hook for Enhanced Combobox components\n *\n * Extracts shared logic between single and multiple selection variants\n * to reduce duplication and ensure consistent behavior.\n */\n\nimport { PlusIcon } from 'lucide-react';\nimport * as React from 'react';\nimport { useRef, useMemo, useEffect, useCallback } from 'react';\nimport { Text } from '@/components/typography';\nimport { useStrings, type StringsProp } from '@/lib/strings';\n\nimport { HighlightedText } from '../components/highlighted-text';\nimport { defaultComboboxStrings } from '../combobox.strings';\nimport {\n\tDEFAULT_MIN_SEARCH_LENGTH,\n\tDEFAULT_DEBOUNCE_MS,\n\tisCreateOption,\n\tgetCreateOptionValue,\n\tcreateCreateOption,\n} from '../constants';\nimport type { ComboboxStrings, BaseComboboxProps } from '../types';\nimport { useDebouncedSearch } from './use-debounced-search';\nimport { useGroupedItems } from './use-grouped-items';\nimport { useLoadMore } from './use-load-more';\n\nimport { cn } from '@/lib/utils';\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface UseEnhancedComboboxCoreOptions<T> extends BaseComboboxProps<T> {\n\t/** Items that should always be included (selected items) */\n\tensuredItems?: T[];\n}\n\nexport interface UseEnhancedComboboxCoreReturn<T> {\n\t// Resolved values\n\tstrings: ComboboxStrings;\n\tgetKey: (item: T) => string;\n\ttrimmedSearch: string;\n\n\t// Refs\n\tlistRef: React.RefObject<HTMLDivElement | null>;\n\n\t// Items\n\tbaseItems: T[];\n\tallItems: T[];\n\tgroupedItems: Map<string, T[]> | null;\n\tcreateOptionItem: T | null;\n\n\t// Display state\n\tshowStatus: boolean;\n\tshowEmpty: boolean;\n\tshowCreateOption: boolean;\n\n\t// Handlers\n\trenderItemContent: (item: T) => React.ReactNode;\n\titemToStringLabel: (item: T) => string;\n\tgetItemReactKey: (item: T) => string;\n\n\t// Scroll handling\n\thandleScroll: (event: Event) => void;\n}\n\n// ============================================================================\n// Hook Implementation\n// ============================================================================\n\nfunction useComboboxStrings(custom?: StringsProp<ComboboxStrings>): ComboboxStrings {\n\treturn useStrings(defaultComboboxStrings, custom);\n}\n\nfunction hasExactMatch<T>(\n\titems: T[],\n\tsearchValue: string,\n\tgetItemLabel: (item: T) => string\n): boolean {\n\tconst normalizedSearch = searchValue.toLowerCase();\n\treturn items.some(\n\t\t(item) => getItemLabel(item).toLowerCase() === normalizedSearch\n\t);\n}\n\nexport function useEnhancedComboboxCore<T>({\n\t// Core props\n\titems,\n\tsearchValue,\n\tgetItemLabel,\n\tgetItemKey,\n\tisLoading = false,\n\tminSearchLength = DEFAULT_MIN_SEARCH_LENGTH,\n\tstrings: stringsProp,\n\trenderItem,\n\n\t// Debounced Search\n\tonSearch,\n\tdebounceMs = DEFAULT_DEBOUNCE_MS,\n\n\t// Creatable\n\tcreatable,\n\tonCreate,\n\n\t// Grouped Items\n\tgetItemGroup,\n\n\t// Load More\n\thasMore,\n\tonLoadMore,\n\tisLoadingMore,\n\n\t// Highlight Match\n\thighlightMatch,\n\n\t\t// Ensured items (selected items that should always be included)\n\tensuredItems = [],\n}: UseEnhancedComboboxCoreOptions<T>): UseEnhancedComboboxCoreReturn<T> {\n\t// -------------------------------------------------------------------------\n\t// Setup\n\t// -------------------------------------------------------------------------\n\n\tconst strings = useComboboxStrings(stringsProp);\n\tconst getKey = getItemKey ?? getItemLabel;\n\tconst listRef = useRef<HTMLDivElement | null>(null);\n\tconst trimmedSearch = searchValue.trim();\n\n\t// -------------------------------------------------------------------------\n\t// Hooks\n\t// -------------------------------------------------------------------------\n\n\tuseDebouncedSearch({\n\t\tsearchValue,\n\t\tonSearch,\n\t\tdebounceMs,\n\t\tminSearchLength,\n\t});\n\n\tconst { handleScroll } = useLoadMore({\n\t\thasMore,\n\t\tonLoadMore,\n\t\tisLoadingMore,\n\t});\n\n\t// Attach scroll listener\n\tuseEffect(() => {\n\t\tconst listEl = listRef.current;\n\t\tif (!listEl || !hasMore || !onLoadMore) return;\n\n\t\tlistEl.addEventListener('scroll', handleScroll);\n\t\treturn () => listEl.removeEventListener('scroll', handleScroll);\n\t}, [handleScroll, hasMore, onLoadMore]);\n\n\t// -------------------------------------------------------------------------\n\t// Computed Values\n\t// -------------------------------------------------------------------------\n\n\t// Merge ensured items with fetched items\n\tconst baseItems = useMemo(() => {\n\t\tif (ensuredItems.length === 0) return items;\n\n\t\tconst merged = [...ensuredItems];\n\t\titems.forEach((item) => {\n\t\t\tconst itemKey = getKey(item);\n\t\t\tif (!ensuredItems.some((ensured) => getKey(ensured) === itemKey)) {\n\t\t\t\tmerged.push(item);\n\t\t\t}\n\t\t});\n\t\treturn merged;\n\t}, [items, ensuredItems, getKey]);\n\n\t// Group items if grouping is enabled\n\tconst groupedItems = useGroupedItems({\n\t\titems: baseItems,\n\t\tgetItemGroup,\n\t});\n\n\t// Determine if create option should be shown\n\tconst showCreateOption = useMemo(() => {\n\t\tif (!creatable || !onCreate) return false;\n\t\tif (trimmedSearch.length < minSearchLength) return false;\n\t\treturn !hasExactMatch(baseItems, trimmedSearch, getItemLabel);\n\t}, [creatable, onCreate, trimmedSearch, minSearchLength, baseItems, getItemLabel]);\n\n\tconst createOptionItem = useMemo(() => {\n\t\tif (!showCreateOption) return null;\n\t\treturn createCreateOption<T>(trimmedSearch);\n\t}, [showCreateOption, trimmedSearch]);\n\n\t// Build final items array with create option\n\tconst allItems = useMemo(() => {\n\t\tif (createOptionItem) return [...baseItems, createOptionItem];\n\t\treturn baseItems;\n\t}, [baseItems, createOptionItem]);\n\n\t// Status display conditions\n\tconst showStatus = isLoading || trimmedSearch.length < minSearchLength;\n\tconst showEmpty =\n\t\t!isLoading &&\n\t\ttrimmedSearch.length >= minSearchLength &&\n\t\titems.length === 0 &&\n\t\t!showCreateOption;\n\n\t// -------------------------------------------------------------------------\n\t// Handlers\n\t// -------------------------------------------------------------------------\n\n\tconst renderItemContent = useCallback(\n\t\t(item: T): React.ReactNode => {\n\t\t\t// Handle create option\n\t\t\tif (isCreateOption(item)) {\n\t\t\t\tconst value = getCreateOptionValue(item);\n\t\t\t\treturn (\n\t\t\t\t\t<span className={cn('use-enhanced-combobox-core--component', 'flex items-center gap-space-sm text-xs')}>\n\t\t\t\t\t\t<PlusIcon className=\"size-icon-sm\" />\n\t\t\t\t\t\t{strings.createNew.includes('{value}') ? (\n\t\t\t\t\t\t\tstrings.createNew.replace('{value}', value)\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<span className=\"inline-flex items-center gap-space-sm\">\n\t\t\t\t\t\t\t\t<span>{strings.createNew}</span>\n\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" weight=\"medium\" className=\"text-xs\">{value}</Text>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</span>\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Custom renderer takes precedence\n\t\t\tif (renderItem) {\n\t\t\t\treturn renderItem(item);\n\t\t\t}\n\n\t\t\t// Default rendering with optional highlighting\n\t\t\tconst label = getItemLabel(item);\n\t\t\tif (highlightMatch && trimmedSearch) {\n\t\t\t\treturn <HighlightedText text={label} highlight={trimmedSearch} />;\n\t\t\t}\n\t\t\treturn label;\n\t\t},\n\t\t[strings.createNew, renderItem, getItemLabel, highlightMatch, trimmedSearch]\n\t);\n\n\tconst itemToStringLabel = useCallback(\n\t\t(item: T): string => {\n\t\t\tif (isCreateOption(item)) {\n\t\t\t\treturn getCreateOptionValue(item);\n\t\t\t}\n\t\t\treturn getItemLabel(item);\n\t\t},\n\t\t[getItemLabel]\n\t);\n\n\tconst getItemReactKey = useCallback(\n\t\t(item: T): string => {\n\t\t\tif (isCreateOption(item)) return `__create__:${getCreateOptionValue(item)}`;\n\t\t\treturn String(getKey(item));\n\t\t},\n\t\t[getKey]\n\t);\n\n\treturn {\n\t\tstrings,\n\t\tgetKey,\n\t\ttrimmedSearch,\n\t\tlistRef,\n\t\tbaseItems,\n\t\tallItems,\n\t\tgroupedItems,\n\t\tcreateOptionItem,\n\t\tshowStatus,\n\t\tshowEmpty,\n\t\tshowCreateOption,\n\t\trenderItemContent,\n\t\titemToStringLabel,\n\t\tgetItemReactKey,\n\t\thandleScroll,\n\t};\n}\n","/**\n * Enhanced Combobox Components\n *\n * A feature-rich, API-driven combobox built on Base UI with shadcn styling.\n * Supports single and multiple selection, form integration, debounced search,\n * grouping, pagination, and more.\n *\n * This version uses shared hooks and components to eliminate duplication\n * between single and multiple selection variants.\n */\n\nimport * as React from 'react';\nimport { useRef, useCallback, useEffect, useState } from 'react';\nimport { ChevronDownIcon, XIcon } from 'lucide-react';\nimport { Combobox as ComboboxPrimitive } from '@base-ui/react/combobox';\n\nimport {\n\tCombobox as BaseCombobox,\n\tComboboxChips,\n\tComboboxChip,\n\tComboboxChipsInput,\n} from '@/components/ui/combobox';\nimport { Button } from '@/components/base/buttons';\nimport { Input } from '@/components/base/forms/fields';\nimport { useFormsConfig, type FormControlSize } from '@/lib/ui-provider';\nimport { cn } from '@/lib/utils';\n\nimport { ComboboxDropdown } from './components/combobox-dropdown';\nimport { ErrorMessage } from './components/error-message';\nimport {\n\tformControlIconClasses,\n\tformControlMinHeightClasses,\n\tformControlPaddingClasses,\n} from '../forms/form-sizing';\nimport {\n\tDEFAULT_MIN_SEARCH_LENGTH,\n\tDEFAULT_SIZE,\n\tisCreateOption,\n\tgetCreateOptionValue,\n} from './constants';\n\nimport { useEnhancedComboboxCore } from './hooks/use-enhanced-combobox-core';\nimport type {\n\tEnhancedComboboxProps,\n\tEnhancedComboboxMultipleProps,\n\tComboboxSize,\n} from './types';\n\nconst formControlSizeToComboboxSize: Record<FormControlSize, ComboboxSize> = {\n\tsmall: 'small',\n\tdefault: 'default',\n};\n\nfunction resolveComboboxSize(\n\tsizeProp: ComboboxSize | undefined,\n\tdefaultControlSize: FormControlSize | undefined,\n): ComboboxSize {\n\treturn sizeProp ?? formControlSizeToComboboxSize[defaultControlSize ?? 'default'] ?? DEFAULT_SIZE;\n}\n\nconst comboboxSizeToFormControlSize: Record<ComboboxSize, FormControlSize> = {\n\tsmall: 'small',\n\tdefault: 'default',\n};\n\nconst inputEndPaddingBySize: Record<ComboboxSize, string> = {\n\tsmall: 'pe-control-actions-sm',\n\tdefault: 'pe-control-actions',\n};\n\nconst primitiveComboboxSizeBySize: Record<ComboboxSize, 'sm' | 'md'> = {\n\tsmall: 'sm',\n\tdefault: 'md',\n};\n\nfunction getComboboxFormSize(size: ComboboxSize): FormControlSize {\n\treturn comboboxSizeToFormControlSize[size];\n}\n\ninterface ComboboxInputFieldProps {\n\tplaceholder: string;\n\tclearLabel: string;\n\ttoggleLabel: string;\n\tsize: FormControlSize;\n\terror?: boolean;\n\trequired?: boolean;\n\tdisabled?: boolean;\n\tclearable?: boolean;\n\tclassName?: string;\n\tonBlur?: () => void;\n}\n\nfunction ComboboxInputField({\n\tplaceholder,\n\tclearLabel,\n\ttoggleLabel,\n\tsize,\n\terror,\n\trequired,\n\tdisabled,\n\tclearable = true,\n\tclassName,\n\tonBlur,\n}: ComboboxInputFieldProps): React.ReactElement {\n\treturn (\n\t\t<div className=\"relative\">\n\t\t\t<ComboboxPrimitive.Input\n\t\t\t\trender={\n\t\t\t\t\t<Input\n\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\tinvalid={error}\n\t\t\t\t\t\tclassName={cn(inputEndPaddingBySize[size], className)}\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\tplaceholder={placeholder}\n\t\t\t\taria-invalid={error || undefined}\n\t\t\t\taria-required={required}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tonBlur={onBlur}\n\t\t\t/>\n\t\t\t<div className=\"absolute inset-y-0 end-1 flex items-center gap-1 text-muted-foreground\">\n\t\t\t\t{clearable ? (\n\t\t\t\t\t<ComboboxPrimitive.Clear\n\t\t\t\t\t\trender={\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\tsize=\"icon-small\"\n\t\t\t\t\t\t\t\tclassName=\"size-control-clear text-muted-foreground hover:text-foreground\"\n\t\t\t\t\t\t\t\taria-label={clearLabel}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<XIcon className={formControlIconClasses[size]} aria-hidden=\"true\" />\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t) : null}\n\t\t\t\t<ComboboxPrimitive.Trigger\n\t\t\t\t\trender={\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\tsize=\"icon-small\"\n\t\t\t\t\t\t\tclassName=\"size-control-clear text-muted-foreground hover:text-foreground\"\n\t\t\t\t\t\t\taria-label={toggleLabel}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ChevronDownIcon className={formControlIconClasses[size]} aria-hidden=\"true\" />\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\n// ============================================================================\n// Single Selection Component\n// ============================================================================\n\nexport function EnhancedCombobox<T>({\n\t// Core props\n\titems,\n\tselectedValue,\n\tonSelectedValueChange,\n\tsearchValue,\n\tonSearchValueChange,\n\tgetItemLabel,\n\tgetItemKey,\n\tisLoading = false,\n\tminSearchLength = DEFAULT_MIN_SEARCH_LENGTH,\n\tstrings: stringsProp,\n\tdisabled = false,\n\tclassName,\n\tclearable = true,\n\trenderItem,\n\tportalContainer,\n\n\t// Form Integration\n\tname,\n\tinvalid,\n\terror,\n\trequired,\n\tonBlur,\n\n\t// Debounced Search\n\tonSearch,\n\tdebounceMs,\n\n\t// Creatable\n\tcreatable,\n\tonCreate,\n\n\t// Grouped Items\n\tgetItemGroup,\n\trenderGroupLabel,\n\n\t// Load More\n\thasMore,\n\tonLoadMore,\n\tisLoadingMore,\n\n\t// Disable individual items\n\tgetItemDisabled,\n\n\t// Highlight Match\n\thighlightMatch,\n\n\t// Size\n\tsize: sizeProp,\n\n\t// Controlled Open\n\topen,\n\tonOpenChange,\n}: EnhancedComboboxProps<T>): React.ReactElement {\n\tconst { defaultControlSize } = useFormsConfig();\n\tconst size = resolveComboboxSize(sizeProp, defaultControlSize);\n\tconst formSize = getComboboxFormSize(size);\n\tconst hasError = invalid || Boolean(error);\n\n\t// Use shared core hook\n\tconst core = useEnhancedComboboxCore({\n\t\titems,\n\t\tsearchValue,\n\t\tonSearchValueChange,\n\t\tgetItemLabel,\n\t\tgetItemKey,\n\t\tisLoading,\n\t\tminSearchLength,\n\t\tstrings: stringsProp,\n\t\trenderItem,\n\t\tonSearch,\n\t\tdebounceMs,\n\t\tcreatable,\n\t\tonCreate,\n\t\tgetItemGroup,\n\t\thasMore,\n\t\tonLoadMore,\n\t\tisLoadingMore,\n\t\thighlightMatch,\n\t\tsize,\n\t\t// Include selected value in items list\n\t\tensuredItems: selectedValue ? [selectedValue] : [],\n\t});\n\n\t// Track open state so we can show the selected label when closed\n\tconst [isOpen, setIsOpen] = useState(false);\n\tconst handleOpenChange = useCallback(\n\t\t(nextOpen: boolean) => {\n\t\t\tsetIsOpen(nextOpen);\n\t\t\tif (!nextOpen) {\n\t\t\t\t// Clear search when closing so next open starts fresh\n\t\t\t\tonSearchValueChange('');\n\t\t\t}\n\t\t\tonOpenChange?.(nextOpen);\n\t\t},\n\t\t[onOpenChange, onSearchValueChange],\n\t);\n\n\t// When closed with a selected value, show the label; when open, show search text\n\tconst displayInputValue = isOpen\n\t\t? searchValue\n\t\t: (selectedValue ? core.itemToStringLabel(selectedValue) : '');\n\n\t// Handle value change, including create option\n\tconst handleValueChange = useCallback(\n\t\t(value: T | null): void => {\n\t\t\tif (value && isCreateOption(value)) {\n\t\t\t\tconst inputValue = getCreateOptionValue(value);\n\t\t\t\tonCreate?.(inputValue);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tonSelectedValueChange(value);\n\t\t},\n\t\t[onSelectedValueChange, onCreate]\n\t);\n\n\treturn (\n\t\t<div className=\"enhanced-combobox--component\">\n\t\t\t<BaseCombobox\n\t\t\t\titems={core.allItems}\n\t\t\t\tvalue={selectedValue}\n\t\t\t\tonValueChange={handleValueChange}\n\t\t\t\tinputValue={displayInputValue}\n\t\t\t\tonInputValueChange={(value, { reason }) => {\n\t\t\t\t\tif (reason === 'item-press') {\n\t\t\t\t\t\tonSearchValueChange('');\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tonSearchValueChange(value);\n\t\t\t\t}}\n\t\t\t\titemToStringLabel={core.itemToStringLabel}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tfilter={null}\n\t\t\t\tname={name}\n\t\t\t\trequired={required}\n\t\t\t\topen={open}\n\t\t\t\tonOpenChange={handleOpenChange}\n\t\t\t>\n\t\t\t\t<ComboboxInputField\n\t\t\t\t\tplaceholder={core.strings.placeholder}\n\t\t\t\t\tclearLabel={core.strings.clear}\n\t\t\t\t\ttoggleLabel={core.strings.toggle}\n\t\t\t\t\tclassName={className}\n\t\t\t\t\tsize={formSize}\n\t\t\t\t\terror={hasError}\n\t\t\t\t\trequired={required}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tclearable={clearable}\n\t\t\t\t\tonBlur={onBlur}\n\t\t\t\t/>\n\n\t\t\t\t<ComboboxDropdown\n\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\tshowStatus={core.showStatus}\n\t\t\t\t\tshowEmpty={core.showEmpty}\n\t\t\t\t\tsearchValue={searchValue}\n\t\t\t\t\tminSearchLength={minSearchLength}\n\t\t\t\t\titems={items}\n\t\t\t\t\tgroupedItems={core.groupedItems}\n\t\t\t\t\tcreateOptionItem={core.createOptionItem}\n\t\t\t\t\trenderItemContent={core.renderItemContent}\n\t\t\t\t\tgetItemReactKey={core.getItemReactKey}\n\t\t\t\t\tgetItemDisabled={getItemDisabled}\n\t\t\t\t\trenderGroupLabel={renderGroupLabel}\n\t\t\t\t\tisLoadingMore={isLoadingMore}\n\t\t\t\t\tstrings={core.strings}\n\t\t\t\t\tsize={size}\n\t\t\t\t\tportalContainer={portalContainer}\n\t\t\t\t\tlistRef={core.listRef}\n\t\t\t\t/>\n\t\t\t</BaseCombobox>\n\n\t\t\t<ErrorMessage error={error} size={size} />\n\t\t</div>\n\t);\n}\n\n// ============================================================================\n// Multiple Selection Component\n// ============================================================================\n\nexport function EnhancedComboboxMultiple<T>({\n\t// Core props\n\titems,\n\tselectedValues,\n\tonSelectedValuesChange,\n\tsearchValue,\n\tonSearchValueChange,\n\tgetItemLabel,\n\tgetItemKey,\n\tisLoading = false,\n\tminSearchLength = DEFAULT_MIN_SEARCH_LENGTH,\n\tstrings: stringsProp,\n\tdisabled = false,\n\tclassName,\n\trenderItem,\n\tportalContainer,\n\n\t// Form Integration\n\tname,\n\tinvalid,\n\terror,\n\trequired,\n\tonBlur,\n\n\t// Debounced Search\n\tonSearch,\n\tdebounceMs,\n\n\t// Creatable\n\tcreatable,\n\tonCreate,\n\n\t// Grouped Items\n\tgetItemGroup,\n\trenderGroupLabel,\n\n\t// Load More\n\thasMore,\n\tonLoadMore,\n\tisLoadingMore,\n\n\t// Disable individual items\n\tgetItemDisabled,\n\n\t// Highlight Match\n\thighlightMatch,\n\n\t// Size\n\tsize: sizeProp,\n\n\t// Controlled Open\n\topen,\n\tonOpenChange,\n\n\t// Behaviour\n\tcloseOnSelect = false,\n\tapplyButton = false,\n\tonApply,\n\tonCancel,\n}: EnhancedComboboxMultipleProps<T>): React.ReactElement {\n\tconst { defaultControlSize } = useFormsConfig();\n\tconst size = resolveComboboxSize(sizeProp, defaultControlSize);\n\tconst formSize = getComboboxFormSize(size);\n\tconst primitiveComboboxSize = primitiveComboboxSizeBySize[size];\n\tconst hasError = invalid || Boolean(error);\n\tconst containerRef = useRef<HTMLDivElement | null>(null);\n\tconst getKey = getItemKey ?? getItemLabel;\n\n\t// Draft state — only used in `applyButton` mode. Tracks the user's\n\t// in-progress selection so we can commit it on Apply or revert on\n\t// Cancel. When apply mode is OFF, we pass selections through immediately.\n\tconst [draftValues, setDraftValues] = useState<T[]>(selectedValues);\n\tconst [internalOpen, setInternalOpen] = useState(false);\n\tconst isOpenControlled = open !== undefined;\n\tconst resolvedOpen = isOpenControlled ? open : internalOpen;\n\n\tuseEffect(() => {\n\t\tif (applyButton) setDraftValues(selectedValues);\n\t}, [applyButton, selectedValues]);\n\n\tconst setOpen = useCallback(\n\t\t(next: boolean) => {\n\t\t\tif (!isOpenControlled) setInternalOpen(next);\n\t\t\tonOpenChange?.(next);\n\t\t},\n\t\t[isOpenControlled, onOpenChange],\n\t);\n\n\t// Use shared core hook\n\tconst core = useEnhancedComboboxCore({\n\t\titems,\n\t\tsearchValue,\n\t\tonSearchValueChange,\n\t\tgetItemLabel,\n\t\tgetItemKey,\n\t\tisLoading,\n\t\tminSearchLength,\n\t\tstrings: stringsProp,\n\t\trenderItem,\n\t\tonSearch,\n\t\tdebounceMs,\n\t\tcreatable,\n\t\tonCreate,\n\t\tgetItemGroup,\n\t\thasMore,\n\t\tonLoadMore,\n\t\tisLoadingMore,\n\t\thighlightMatch,\n\t\tsize,\n\t\t// Include selected values in items list\n\t\tensuredItems: selectedValues,\n\t});\n\n\t// Handle value change, filtering out create options\n\tconst handleValueChange = useCallback(\n\t\t(values: T[]): void => {\n\t\t\tconst regularValues: T[] = [];\n\t\t\tlet createValue: string | null = null;\n\n\t\t\tfor (const value of values) {\n\t\t\t\tif (isCreateOption(value)) {\n\t\t\t\t\tcreateValue = getCreateOptionValue(value);\n\t\t\t\t} else {\n\t\t\t\t\tregularValues.push(value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (createValue) {\n\t\t\t\tonCreate?.(createValue);\n\t\t\t}\n\n\t\t\tconst next = (regularValues.length !== values.length || !createValue) ? regularValues : null;\n\t\t\tif (next) {\n\t\t\t\tif (applyButton) {\n\t\t\t\t\tsetDraftValues(next);\n\t\t\t\t} else {\n\t\t\t\t\tonSelectedValuesChange(next);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (closeOnSelect) {\n\t\t\t\tsetOpen(false);\n\t\t\t}\n\t\t},\n\t\t[onSelectedValuesChange, onCreate, applyButton, closeOnSelect, setOpen],\n\t);\n\n\tconst handleApply = useCallback(() => {\n\t\tif (applyButton) onSelectedValuesChange(draftValues);\n\t\tonApply?.();\n\t\tsetOpen(false);\n\t}, [applyButton, draftValues, onApply, onSelectedValuesChange, setOpen]);\n\n\tconst handleCancel = useCallback(() => {\n\t\tif (applyButton) setDraftValues(selectedValues);\n\t\tonCancel?.();\n\t\tsetOpen(false);\n\t}, [applyButton, selectedValues, onCancel, setOpen]);\n\n\tconst visibleValues = applyButton ? draftValues : selectedValues;\n\tconst chipsPlaceholder = visibleValues.length > 0 ? undefined : core.strings.placeholder;\n\n\treturn (\n\t\t<div className=\"enhanced-combobox--component\">\n\t\t\t<BaseCombobox\n\t\t\t\titems={core.allItems}\n\t\t\t\tmultiple\n\t\t\t\tvalue={visibleValues}\n\t\t\t\tonValueChange={handleValueChange}\n\t\t\t\tinputValue={searchValue}\n\t\t\t\tonInputValueChange={(value, { reason }) => {\n\t\t\t\t\tif (reason === 'item-press') {\n\t\t\t\t\t\tonSearchValueChange('');\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tonSearchValueChange(value);\n\t\t\t\t}}\n\t\t\t\titemToStringLabel={core.itemToStringLabel}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tfilter={null}\n\t\t\t\tname={name}\n\t\t\t\trequired={required}\n\t\t\t\topen={resolvedOpen}\n\t\t\t\tonOpenChange={(next) => {\n\t\t\t\t\t// In apply-button mode, closing without committing should\n\t\t\t\t\t// revert the draft so the next open starts clean.\n\t\t\t\t\tif (!next && applyButton) setDraftValues(selectedValues);\n\t\t\t\t\tsetOpen(next);\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<ComboboxChips\n\t\t\t\t\tref={containerRef}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\tformControlMinHeightClasses[formSize],\n\t\t\t\t\t\tformControlPaddingClasses[formSize],\n\t\t\t\t\t\tformSize === 'small' ? 'text-xs' : 'text-sm',\n\t\t\t\t\t\t'bg-transparent !shadow-none',\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tsize={primitiveComboboxSize}\n\t\t\t\t\terror={hasError}\n\t\t\t\t>\n\t\t\t\t\t{visibleValues.map((item) => (\n\t\t\t\t\t\t<ComboboxChip key={getKey(item)}>\n\t\t\t\t\t\t\t{getItemLabel(item)}\n\t\t\t\t\t\t</ComboboxChip>\n\t\t\t\t\t))}\n\t\t\t\t\t<ComboboxChipsInput\n\t\t\t\t\t\tplaceholder={chipsPlaceholder}\n\t\t\t\t\t\taria-invalid={hasError || undefined}\n\t\t\t\t\t\taria-required={required}\n\t\t\t\t\t\tonBlur={onBlur}\n\t\t\t\t\t/>\n\t\t\t\t</ComboboxChips>\n\n\t\t\t\t<ComboboxDropdown\n\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\tshowStatus={core.showStatus}\n\t\t\t\t\tshowEmpty={core.showEmpty}\n\t\t\t\t\tsearchValue={searchValue}\n\t\t\t\t\tminSearchLength={minSearchLength}\n\t\t\t\t\titems={items}\n\t\t\t\t\tgroupedItems={core.groupedItems}\n\t\t\t\t\tcreateOptionItem={core.createOptionItem}\n\t\t\t\t\trenderItemContent={core.renderItemContent}\n\t\t\t\t\tgetItemReactKey={core.getItemReactKey}\n\t\t\t\t\tgetItemDisabled={getItemDisabled}\n\t\t\t\t\trenderGroupLabel={renderGroupLabel}\n\t\t\t\t\tisLoadingMore={isLoadingMore}\n\t\t\t\t\tstrings={core.strings}\n\t\t\t\t\tsize={size}\n\t\t\t\t\tportalContainer={portalContainer}\n\t\t\t\t\tlistRef={core.listRef}\n\t\t\t\t\tanchor={containerRef}\n\t\t\t\t\tapplyFooter={applyButton ? {\n\t\t\t\t\t\tapplyLabel: core.strings.apply,\n\t\t\t\t\t\tcancelLabel: core.strings.cancel,\n\t\t\t\t\t\tonApply: handleApply,\n\t\t\t\t\t\tonCancel: handleCancel,\n\t\t\t\t\t} : undefined}\n\t\t\t\t/>\n\t\t\t</BaseCombobox>\n\n\t\t\t<ErrorMessage error={error} size={size} />\n\t\t</div>\n\t);\n}\n\n// ============================================================================\n// Legacy Aliases\n// ============================================================================\n\n/** @deprecated Use EnhancedCombobox instead */\nexport const ApiCombobox = EnhancedCombobox;\n\n/** @deprecated Use EnhancedComboboxMultiple instead */\nexport const ApiComboboxMultiple = EnhancedComboboxMultiple;\n\nEnhancedCombobox.displayName = 'EnhancedCombobox';\nEnhancedComboboxMultiple.displayName = 'EnhancedComboboxMultiple';\n","import { useCallback, useEffect, useMemo, useRef, useState, type ReactNode } from 'react';\n\nimport { Text } from '@/components/typography';\nimport { useStrings, type StringsProp } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport { EnhancedCombobox } from './enhanced-combobox';\nimport { defaultComboboxStrings } from './combobox.strings';\nimport { DEFAULT_DEBOUNCE_MS } from './constants';\nimport type { ComboboxSize, ComboboxStrings, EnhancedComboboxProps } from './types';\n\nexport interface AsyncResourceComboboxFetcherArgs {\n\tquery: string;\n\tlimit: number;\n\tsignal?: AbortSignal;\n}\n\nexport type AsyncResourceComboboxFetcher<T> = (\n\targs: AsyncResourceComboboxFetcherArgs,\n) => Promise<T[]>;\n\nexport interface AsyncResourceComboboxStrings extends ComboboxStrings {\n\terror: string;\n}\n\nexport const defaultAsyncResourceComboboxStrings: AsyncResourceComboboxStrings = {\n\t...defaultComboboxStrings,\n\terror: 'Unable to load options.',\n};\n\nexport interface AsyncResourceComboboxRenderOptionContext {\n\tquery: string;\n\tisSelected: boolean;\n}\n\nexport interface AsyncResourceComboboxProps<T>\n\textends Omit<\n\t\tEnhancedComboboxProps<T>,\n\t\t| 'items'\n\t\t| 'selectedValue'\n\t\t| 'onSelectedValueChange'\n\t\t| 'searchValue'\n\t\t| 'onSearchValueChange'\n\t\t| 'getItemLabel'\n\t\t| 'getItemKey'\n\t\t| 'isLoading'\n\t\t| 'renderItem'\n\t\t| 'strings'\n\t\t| 'error'\n\t\t| 'debounceMs'\n\t> {\n\tfetcher: AsyncResourceComboboxFetcher<T>;\n\tvalue?: T | null;\n\tdefaultValue?: T | null;\n\tonValueChange?: (value: T | null) => void;\n\tonAfterFetch?: (items: T[], context: AsyncResourceComboboxFetcherArgs) => void;\n\tonError?: (error: unknown, context: AsyncResourceComboboxFetcherArgs) => void;\n\tgetKey: (item: T) => string;\n\tgetLabel: (item: T) => string;\n\tgetDescription?: (item: T) => ReactNode;\n\tgetMeta?: (item: T) => ReactNode;\n\trenderOption?: (item: T, context: AsyncResourceComboboxRenderOptionContext) => ReactNode;\n\tlimit?: number;\n\tdebounceMs?: number;\n\tpreload?: boolean;\n\terrorMessage?: ReactNode;\n\tstrings?: StringsProp<AsyncResourceComboboxStrings>;\n\tsize?: ComboboxSize;\n}\n\nexport function AsyncResourceCombobox<T>({\n\tfetcher,\n\tvalue,\n\tdefaultValue = null,\n\tonValueChange,\n\tonAfterFetch,\n\tonError,\n\tgetKey,\n\tgetLabel,\n\tgetDescription,\n\tgetMeta,\n\trenderOption,\n\tlimit = 10,\n\tdebounceMs = DEFAULT_DEBOUNCE_MS,\n\tpreload = true,\n\tminSearchLength = 0,\n\terrorMessage,\n\tstrings: stringsProp,\n\tdisabled,\n\t...props\n}: AsyncResourceComboboxProps<T>) {\n\tconst strings = useStrings(defaultAsyncResourceComboboxStrings, stringsProp);\n\tconst isControlled = value !== undefined;\n\tconst [internalValue, setInternalValue] = useState<T | null>(defaultValue);\n\tconst selectedValue = isControlled ? value : internalValue;\n\tconst [searchValue, setSearchValue] = useState('');\n\tconst [items, setItems] = useState<T[]>([]);\n\tconst [isLoading, setIsLoading] = useState(false);\n\tconst [error, setError] = useState<unknown>(null);\n\tconst requestIdRef = useRef(0);\n\tconst trimmedSearch = searchValue.trim();\n\n\tconst handleValueChange = useCallback(\n\t\t(nextValue: T | null) => {\n\t\t\tif (!isControlled) {\n\t\t\t\tsetInternalValue(nextValue);\n\t\t\t}\n\t\t\tonValueChange?.(nextValue);\n\t\t},\n\t\t[isControlled, onValueChange],\n\t);\n\n\tuseEffect(() => {\n\t\tif (disabled) return;\n\n\t\tconst shouldFetch =\n\t\t\ttrimmedSearch.length > 0\n\t\t\t\t? trimmedSearch.length >= minSearchLength\n\t\t\t\t: preload;\n\n\t\tif (!shouldFetch) {\n\t\t\tsetItems([]);\n\t\t\tsetIsLoading(false);\n\t\t\tsetError(null);\n\t\t\treturn;\n\t\t}\n\n\t\tconst requestId = requestIdRef.current + 1;\n\t\trequestIdRef.current = requestId;\n\t\tconst controller = new AbortController();\n\t\tconst context: AsyncResourceComboboxFetcherArgs = {\n\t\t\tquery: trimmedSearch,\n\t\t\tlimit,\n\t\t\tsignal: controller.signal,\n\t\t};\n\n\t\tconst timeout = window.setTimeout(() => {\n\t\t\tsetIsLoading(true);\n\t\t\tsetError(null);\n\n\t\t\tfetcher(context)\n\t\t\t\t.then((nextItems) => {\n\t\t\t\t\tif (controller.signal.aborted || requestIdRef.current !== requestId) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tsetItems(nextItems);\n\t\t\t\t\tonAfterFetch?.(nextItems, context);\n\t\t\t\t})\n\t\t\t\t.catch((nextError: unknown) => {\n\t\t\t\t\tif (controller.signal.aborted || requestIdRef.current !== requestId) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tsetItems([]);\n\t\t\t\t\tsetError(nextError);\n\t\t\t\t\tonError?.(nextError, context);\n\t\t\t\t})\n\t\t\t\t.finally(() => {\n\t\t\t\t\tif (!controller.signal.aborted && requestIdRef.current === requestId) {\n\t\t\t\t\t\tsetIsLoading(false);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t}, debounceMs);\n\n\t\treturn () => {\n\t\t\twindow.clearTimeout(timeout);\n\t\t\tcontroller.abort();\n\t\t};\n\t}, [\n\t\tdebounceMs,\n\t\tdisabled,\n\t\tfetcher,\n\t\tlimit,\n\t\tminSearchLength,\n\t\tonAfterFetch,\n\t\tonError,\n\t\tpreload,\n\t\ttrimmedSearch,\n\t]);\n\n\tconst renderItem = useCallback(\n\t\t(item: T) => {\n\t\t\tif (renderOption) {\n\t\t\t\treturn renderOption(item, {\n\t\t\t\t\tquery: trimmedSearch,\n\t\t\t\t\tisSelected: selectedValue ? getKey(selectedValue) === getKey(item) : false,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst description = getDescription?.(item);\n\t\t\tconst meta = getMeta?.(item);\n\n\t\t\treturn (\n\t\t\t\t<span className=\"async-resource-combobox--option flex min-w-0 items-center gap-space-md text-xs leading-tight\">\n\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" weight=\"medium\" className=\"min-w-0 shrink truncate\">\n\t\t\t\t\t\t{getLabel(item)}\n\t\t\t\t\t</Text>\n\t\t\t\t\t{(!!description || !!meta) && (\n\t\t\t\t\t\t<span className=\"inline-flex min-w-0 flex-1 items-center gap-space-sm overflow-hidden text-xs text-muted-foreground\">\n\t\t\t\t\t\t\t{!!description && (\n\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" type=\"secondary\" className=\"min-w-0 truncate\">\n\t\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{!!meta && (\n\t\t\t\t\t\t\t\t<Text tag=\"span\" size=\"inherit\" type=\"secondary\" className=\"min-w-0 truncate opacity-75\">\n\t\t\t\t\t\t\t\t\t{meta}\n\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t)}\n\t\t\t\t</span>\n\t\t\t);\n\t\t},\n\t\t[getDescription, getKey, getLabel, getMeta, renderOption, selectedValue, trimmedSearch],\n\t);\n\n\tconst resolvedError = useMemo(() => {\n\t\tif (!error) return undefined;\n\t\treturn errorMessage ?? strings.error;\n\t}, [error, errorMessage, strings.error]);\n\n\treturn (\n\t\t<div\n\t\t\tdata-component=\"async-resource-combobox\"\n\t\t\tdata-slot=\"async-resource-combobox\"\n\t\t\tclassName={cn('async-resource-combobox--component', props.className)}\n\t\t>\n\t\t\t<EnhancedCombobox\n\t\t\t\t{...props}\n\t\t\t\tclassName={undefined}\n\t\t\t\tdisabled={disabled}\n\t\t\t\titems={items}\n\t\t\t\tselectedValue={selectedValue ?? null}\n\t\t\t\tonSelectedValueChange={handleValueChange}\n\t\t\t\tsearchValue={searchValue}\n\t\t\t\tonSearchValueChange={setSearchValue}\n\t\t\t\tgetItemLabel={getLabel}\n\t\t\t\tgetItemKey={getKey}\n\t\t\t\tisLoading={isLoading}\n\t\t\t\tminSearchLength={minSearchLength}\n\t\t\t\tstrings={strings}\n\t\t\t\trenderItem={renderItem}\n\t\t\t\terror={typeof resolvedError === 'string' ? resolvedError : undefined}\n\t\t\t/>\n\t\t\t{resolvedError && typeof resolvedError !== 'string' && (\n\t\t\t\t<div className=\"async-resource-combobox--error mt-1.5\">\n\t\t\t\t\t{resolvedError}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nAsyncResourceCombobox.displayName = 'AsyncResourceCombobox';\n"],"mappings":"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"}