admin-ui-starter-kit 0.6.6 → 0.6.8

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 (1256) hide show
  1. package/.agents/skills/component-library-rules/SKILL.md +2 -2
  2. package/.agents/skills/component-library-rules/references/components/INDEX.json +15 -1
  3. package/.agents/skills/component-library-rules/references/components/INDEX.md +15 -1
  4. package/.agents/skills/component-library-rules/references/components/base__boolean-indicator.md +33 -0
  5. package/.agents/skills/component-library-rules/references/components/base__cards.md +7 -6
  6. package/.agents/skills/component-library-rules/references/components/base__carousel.md +4 -4
  7. package/.agents/skills/component-library-rules/references/components/base__collapsible.md +39 -0
  8. package/.agents/skills/component-library-rules/references/components/base__combobox.md +1 -1
  9. package/.agents/skills/component-library-rules/references/components/base__conditional-rendering.md +39 -0
  10. package/.agents/skills/component-library-rules/references/components/base__css-variables.md +2 -1
  11. package/.agents/skills/component-library-rules/references/components/base__date-block.md +39 -0
  12. package/.agents/skills/component-library-rules/references/components/base__dialog.md +39 -0
  13. package/.agents/skills/component-library-rules/references/components/base__display-utilities.md +59 -95
  14. package/.agents/skills/component-library-rules/references/components/base__event-calendar.md +1 -1
  15. package/.agents/skills/component-library-rules/references/components/base__item.md +4 -3
  16. package/.agents/skills/component-library-rules/references/components/base__money-display.md +39 -0
  17. package/.agents/skills/component-library-rules/references/components/base__notification-banner.md +39 -0
  18. package/.agents/skills/component-library-rules/references/components/base__placeholder-pattern.md +39 -0
  19. package/.agents/skills/component-library-rules/references/components/base__progress.md +33 -0
  20. package/.agents/skills/component-library-rules/references/components/base__qr-code.md +39 -0
  21. package/.agents/skills/component-library-rules/references/components/base__separator.md +33 -0
  22. package/.agents/skills/component-library-rules/references/components/base__skeleton.md +55 -0
  23. package/.agents/skills/component-library-rules/references/components/base__throttle-alert.md +39 -0
  24. package/.agents/skills/component-library-rules/references/components/base__typography.md +1 -1
  25. package/.agents/skills/component-library-rules/references/components/base__visually-hidden.md +39 -0
  26. package/.agents/skills/component-library-rules/references/components/composed__metadata-list.md +3 -3
  27. package/.agents/skills/component-library-rules/references/components/features__activities.md +1 -1
  28. package/.agents/skills/component-library-rules/references/components/features__enhanced-activities.md +6 -6
  29. package/.agents/skills/component-library-rules/references/components/features__metrics-overview.md +3 -3
  30. package/.agents/skills/component-library-rules/references/components/features__overlays.md +2 -2
  31. package/.agents/skills/component-library-rules/references/components/features__products.md +1 -1
  32. package/.agents/skills/component-library-rules/references/components/layout__layout-app-shell.md +1 -1
  33. package/.agents/skills/component-library-rules/references/components/layout__layout-containers.md +1 -1
  34. package/.agents/skills/component-library-rules/references/components/layout__layout-page.md +2 -1
  35. package/.agents/skills/component-library-rules/references/components/layout__layout-sidebar.md +2 -2
  36. package/.agents/skills/component-library-rules/references/ui-provider.md +2 -2
  37. package/dist/_shared/accordion-8B4OFqiT.cjs +2 -0
  38. package/dist/_shared/accordion-8B4OFqiT.cjs.map +1 -0
  39. package/dist/_shared/accordion-DlpTSZ3p.js +135 -0
  40. package/dist/_shared/accordion-DlpTSZ3p.js.map +1 -0
  41. package/dist/_shared/action-menu-BYrYdpkR.cjs +2 -0
  42. package/dist/_shared/action-menu-BYrYdpkR.cjs.map +1 -0
  43. package/dist/_shared/action-menu-CYwMZX-b.js +96 -0
  44. package/dist/_shared/action-menu-CYwMZX-b.js.map +1 -0
  45. package/dist/_shared/ai-artifact-BylloxGO.js +1099 -0
  46. package/dist/_shared/ai-artifact-BylloxGO.js.map +1 -0
  47. package/dist/_shared/ai-artifact-DfT97Mpi.cjs +3 -0
  48. package/dist/_shared/ai-artifact-DfT97Mpi.cjs.map +1 -0
  49. package/dist/_shared/auth-1Ht9Kevx.js +643 -0
  50. package/dist/_shared/auth-1Ht9Kevx.js.map +1 -0
  51. package/dist/_shared/auth-DTN6sFXM.cjs +2 -0
  52. package/dist/_shared/auth-DTN6sFXM.cjs.map +1 -0
  53. package/dist/_shared/badge-LSAgdmGt.cjs +2 -0
  54. package/dist/_shared/badge-LSAgdmGt.cjs.map +1 -0
  55. package/dist/_shared/badge-nZ2zbAV4.js +110 -0
  56. package/dist/_shared/badge-nZ2zbAV4.js.map +1 -0
  57. package/dist/_shared/button-Be2ayMxF.js +192 -0
  58. package/dist/_shared/button-Be2ayMxF.js.map +1 -0
  59. package/dist/_shared/button-CfQtOuBK.cjs +2 -0
  60. package/dist/_shared/button-CfQtOuBK.cjs.map +1 -0
  61. package/dist/_shared/buttons-DABiSx6N.cjs +2 -0
  62. package/dist/_shared/buttons-DABiSx6N.cjs.map +1 -0
  63. package/dist/_shared/buttons-DYQqQPpk.js +137 -0
  64. package/dist/_shared/buttons-DYQqQPpk.js.map +1 -0
  65. package/dist/_shared/card-radio-group-DKhZhBFV.cjs +2 -0
  66. package/dist/_shared/card-radio-group-DKhZhBFV.cjs.map +1 -0
  67. package/dist/_shared/card-radio-group-DRjmLN5s.js +150 -0
  68. package/dist/_shared/card-radio-group-DRjmLN5s.js.map +1 -0
  69. package/dist/_shared/cards-BJctT9KD.js +428 -0
  70. package/dist/_shared/cards-BJctT9KD.js.map +1 -0
  71. package/dist/_shared/cards-m03XN10f.cjs +2 -0
  72. package/dist/_shared/cards-m03XN10f.cjs.map +1 -0
  73. package/dist/_shared/combobox-BdBpeD3C.cjs +2 -0
  74. package/dist/_shared/combobox-BdBpeD3C.cjs.map +1 -0
  75. package/dist/_shared/combobox-D9tU_83-.js +954 -0
  76. package/dist/_shared/combobox-D9tU_83-.js.map +1 -0
  77. package/dist/_shared/command-BbJB0pjP.cjs +2 -0
  78. package/dist/_shared/command-BbJB0pjP.cjs.map +1 -0
  79. package/dist/_shared/command-IP2wy_HN.js +39 -0
  80. package/dist/_shared/command-IP2wy_HN.js.map +1 -0
  81. package/dist/_shared/comments-B_WKQUol.js +952 -0
  82. package/dist/_shared/comments-B_WKQUol.js.map +1 -0
  83. package/dist/_shared/comments-DMHMNObS.cjs +2 -0
  84. package/dist/_shared/comments-DMHMNObS.cjs.map +1 -0
  85. package/dist/_shared/copyable-BJYx2SlN.js +38 -0
  86. package/dist/_shared/copyable-BJYx2SlN.js.map +1 -0
  87. package/dist/_shared/copyable-DiDEjp8Z.cjs +2 -0
  88. package/dist/_shared/copyable-DiDEjp8Z.cjs.map +1 -0
  89. package/dist/_shared/data-display-4E_irfF2.js +1878 -0
  90. package/dist/_shared/data-display-4E_irfF2.js.map +1 -0
  91. package/dist/_shared/data-display-BPn-7qFO.cjs +2 -0
  92. package/dist/_shared/data-display-BPn-7qFO.cjs.map +1 -0
  93. package/dist/_shared/date-picker-CvqLnlxm.js +1361 -0
  94. package/dist/_shared/date-picker-CvqLnlxm.js.map +1 -0
  95. package/dist/_shared/date-picker-D83fCi2g.cjs +2 -0
  96. package/dist/_shared/date-picker-D83fCi2g.cjs.map +1 -0
  97. package/dist/_shared/date-pickers-C6ku2BPp.cjs +2 -0
  98. package/dist/_shared/date-pickers-C6ku2BPp.cjs.map +1 -0
  99. package/dist/_shared/date-pickers-RdbwIhdY.js +329 -0
  100. package/dist/_shared/date-pickers-RdbwIhdY.js.map +1 -0
  101. package/dist/_shared/display-DFVeSuWL.js +986 -0
  102. package/dist/_shared/display-DFVeSuWL.js.map +1 -0
  103. package/dist/_shared/display-Lr3xTd4a.cjs +2 -0
  104. package/dist/_shared/display-Lr3xTd4a.cjs.map +1 -0
  105. package/dist/_shared/forms-BA8Aa_fi.js +3534 -0
  106. package/dist/_shared/forms-BA8Aa_fi.js.map +1 -0
  107. package/dist/_shared/forms-CNjjdFcf.cjs +2 -0
  108. package/dist/_shared/forms-CNjjdFcf.cjs.map +1 -0
  109. package/dist/_shared/header-BEsz1_so.cjs +2 -0
  110. package/dist/_shared/header-BEsz1_so.cjs.map +1 -0
  111. package/dist/_shared/header-bJx8z6zT.js +447 -0
  112. package/dist/_shared/header-bJx8z6zT.js.map +1 -0
  113. package/dist/_shared/hooks-gRgVhyY2.js +95 -0
  114. package/dist/_shared/hooks-gRgVhyY2.js.map +1 -0
  115. package/dist/_shared/hooks-nFiRfUxX.cjs +2 -0
  116. package/dist/_shared/hooks-nFiRfUxX.cjs.map +1 -0
  117. package/dist/_shared/input-CzJzVyQ0.js +182 -0
  118. package/dist/_shared/input-CzJzVyQ0.js.map +1 -0
  119. package/dist/_shared/input-Dvvmn96E.cjs +2 -0
  120. package/dist/_shared/input-Dvvmn96E.cjs.map +1 -0
  121. package/dist/_shared/item-CVjjpHQd.js +226 -0
  122. package/dist/_shared/item-CVjjpHQd.js.map +1 -0
  123. package/dist/_shared/item-ChHblHhR.cjs +2 -0
  124. package/dist/_shared/item-ChHblHhR.cjs.map +1 -0
  125. package/dist/_shared/layout-C_dYiKtE.cjs +2 -0
  126. package/dist/_shared/layout-C_dYiKtE.cjs.map +1 -0
  127. package/dist/_shared/layout-nigj488k.js +268 -0
  128. package/dist/_shared/layout-nigj488k.js.map +1 -0
  129. package/dist/_shared/mentions-BE51BNeq.cjs +2 -0
  130. package/dist/_shared/mentions-BE51BNeq.cjs.map +1 -0
  131. package/dist/_shared/mentions-CBhP29St.js +506 -0
  132. package/dist/_shared/mentions-CBhP29St.js.map +1 -0
  133. package/dist/_shared/money-display-BFk9Gu21.cjs +2 -0
  134. package/dist/_shared/money-display-BFk9Gu21.cjs.map +1 -0
  135. package/dist/_shared/money-display-DpuLnsK2.js +198 -0
  136. package/dist/_shared/money-display-DpuLnsK2.js.map +1 -0
  137. package/dist/_shared/navigation-CWK_YQ5Y.js +436 -0
  138. package/dist/_shared/navigation-CWK_YQ5Y.js.map +1 -0
  139. package/dist/_shared/navigation-DTBMb7-M.cjs +2 -0
  140. package/dist/_shared/navigation-DTBMb7-M.cjs.map +1 -0
  141. package/dist/_shared/overlays-BJLczwpz.js +735 -0
  142. package/dist/_shared/overlays-BJLczwpz.js.map +1 -0
  143. package/dist/_shared/overlays-DbaPLT67.cjs +2 -0
  144. package/dist/_shared/overlays-DbaPLT67.cjs.map +1 -0
  145. package/dist/_shared/popover-menu-D_t6rCvN.cjs +2 -0
  146. package/dist/_shared/popover-menu-D_t6rCvN.cjs.map +1 -0
  147. package/dist/_shared/popover-menu-f2O6R_27.js +93 -0
  148. package/dist/_shared/popover-menu-f2O6R_27.js.map +1 -0
  149. package/dist/_shared/rich-text-editor-DmZHbsms.js +620 -0
  150. package/dist/_shared/rich-text-editor-DmZHbsms.js.map +1 -0
  151. package/dist/_shared/rich-text-editor-DqUU-H7i.cjs +2 -0
  152. package/dist/_shared/rich-text-editor-DqUU-H7i.cjs.map +1 -0
  153. package/dist/_shared/settings-D-HAOE3R.js +143 -0
  154. package/dist/_shared/settings-D-HAOE3R.js.map +1 -0
  155. package/dist/_shared/settings-DkL3bOk0.cjs +2 -0
  156. package/dist/_shared/settings-DkL3bOk0.cjs.map +1 -0
  157. package/dist/_shared/sidebar-BTyx7ipN.cjs +2 -0
  158. package/dist/_shared/sidebar-BTyx7ipN.cjs.map +1 -0
  159. package/dist/_shared/sidebar-DkBNualh.js +548 -0
  160. package/dist/_shared/sidebar-DkBNualh.js.map +1 -0
  161. package/dist/_shared/skeleton-DwF5VdMh.cjs +2 -0
  162. package/dist/_shared/skeleton-DwF5VdMh.cjs.map +1 -0
  163. package/dist/_shared/skeleton-yUXqeWzB.js +256 -0
  164. package/dist/_shared/skeleton-yUXqeWzB.js.map +1 -0
  165. package/dist/_shared/spinner-BDrUzfTo.cjs +2 -0
  166. package/dist/_shared/spinner-BDrUzfTo.cjs.map +1 -0
  167. package/dist/_shared/spinner-CuVZhJhN.js +67 -0
  168. package/dist/_shared/spinner-CuVZhJhN.js.map +1 -0
  169. package/dist/_shared/table-Cq0jkSm5.js +1377 -0
  170. package/dist/_shared/table-Cq0jkSm5.js.map +1 -0
  171. package/dist/_shared/table-GqTKCC8F.cjs +2 -0
  172. package/dist/_shared/table-GqTKCC8F.cjs.map +1 -0
  173. package/dist/_shared/textarea-C0iZwWdD.js +118 -0
  174. package/dist/_shared/textarea-C0iZwWdD.js.map +1 -0
  175. package/dist/_shared/textarea-bHFAtwYd.cjs +2 -0
  176. package/dist/_shared/textarea-bHFAtwYd.cjs.map +1 -0
  177. package/dist/_shared/typography-5bLhAYaK.js +201 -0
  178. package/dist/_shared/typography-5bLhAYaK.js.map +1 -0
  179. package/dist/_shared/typography-CWEobAJV.cjs +2 -0
  180. package/dist/_shared/typography-CWEobAJV.cjs.map +1 -0
  181. package/dist/_shared/ui-provider-CrsJ_dGn.cjs +2 -0
  182. package/dist/_shared/ui-provider-CrsJ_dGn.cjs.map +1 -0
  183. package/dist/_shared/ui-provider-Dz2qXgZQ.js +89 -0
  184. package/dist/_shared/ui-provider-Dz2qXgZQ.js.map +1 -0
  185. package/dist/_shared/workspace-5UId04M9.js +357 -0
  186. package/dist/_shared/workspace-5UId04M9.js.map +1 -0
  187. package/dist/_shared/workspace-BMws_rFf.cjs +2 -0
  188. package/dist/_shared/workspace-BMws_rFf.cjs.map +1 -0
  189. package/dist/components/base/accordion/index.cjs +1 -1
  190. package/dist/components/base/accordion/index.js +1 -1
  191. package/dist/components/base/badge/index.cjs +1 -1
  192. package/dist/components/base/badge/index.js +1 -1
  193. package/dist/components/base/buttons/button.d.ts.map +1 -1
  194. package/dist/components/base/buttons/index.cjs +1 -1
  195. package/dist/components/base/buttons/index.js +2 -2
  196. package/dist/components/base/buttons/tooltip-button.d.ts.map +1 -1
  197. package/dist/components/base/cards/index.cjs +1 -1
  198. package/dist/components/base/cards/index.js +2 -2
  199. package/dist/components/base/cards/partials/card-primitives.d.ts.map +1 -1
  200. package/dist/components/base/cards/smart-card.d.ts.map +1 -1
  201. package/dist/components/base/cards/smart-card.types.d.ts +7 -3
  202. package/dist/components/base/cards/smart-card.types.d.ts.map +1 -1
  203. package/dist/components/base/carousel/index.cjs +1 -1
  204. package/dist/components/base/carousel/index.js +1 -1
  205. package/dist/components/base/combobox/index.cjs +1 -1
  206. package/dist/components/base/combobox/index.js +1 -1
  207. package/dist/components/base/command/index.cjs +1 -1
  208. package/dist/components/base/command/index.js +1 -1
  209. package/dist/components/base/copyable/index.cjs +1 -1
  210. package/dist/components/base/copyable/index.js +1 -1
  211. package/dist/components/base/currency/index.cjs +1 -1
  212. package/dist/components/base/currency/index.js +1 -1
  213. package/dist/components/base/date-pickers/index.cjs +1 -1
  214. package/dist/components/base/date-pickers/index.js +2 -2
  215. package/dist/components/base/display/chart.cjs +1 -1
  216. package/dist/components/base/display/chart.js +1 -1
  217. package/dist/components/base/display/index.cjs +1 -1
  218. package/dist/components/base/display/index.js +5 -5
  219. package/dist/components/base/display/skeleton.d.ts +52 -1
  220. package/dist/components/base/display/skeleton.d.ts.map +1 -1
  221. package/dist/components/base/event-calendar/index.cjs +1 -1
  222. package/dist/components/base/event-calendar/index.cjs.map +1 -1
  223. package/dist/components/base/event-calendar/index.js +7 -7
  224. package/dist/components/base/event-calendar/index.js.map +1 -1
  225. package/dist/components/base/forms/fields/file-upload.d.ts.map +1 -1
  226. package/dist/components/base/forms/index.cjs +1 -1
  227. package/dist/components/base/forms/index.js +5 -5
  228. package/dist/components/base/item/index.cjs +1 -1
  229. package/dist/components/base/item/index.js +1 -1
  230. package/dist/components/base/item/item.d.ts.map +1 -1
  231. package/dist/components/base/item/item.types.d.ts +3 -0
  232. package/dist/components/base/item/item.types.d.ts.map +1 -1
  233. package/dist/components/base/map/index.cjs +1 -1
  234. package/dist/components/base/map/index.js +2 -2
  235. package/dist/components/base/navigation/index.cjs +1 -1
  236. package/dist/components/base/navigation/index.js +2 -2
  237. package/dist/components/base/popover-menu/index.cjs +1 -1
  238. package/dist/components/base/popover-menu/index.js +1 -1
  239. package/dist/components/base/spinner/index.cjs +1 -1
  240. package/dist/components/base/spinner/index.js +1 -1
  241. package/dist/components/base/table/index.cjs +1 -1
  242. package/dist/components/base/table/index.js +1 -1
  243. package/dist/components/base/table/table-header.d.ts.map +1 -1
  244. package/dist/components/base/toaster/index.cjs +1 -1
  245. package/dist/components/base/toaster/index.cjs.map +1 -1
  246. package/dist/components/base/toaster/index.js +82 -23
  247. package/dist/components/base/toaster/index.js.map +1 -1
  248. package/dist/components/base/toaster/toaster.d.ts +1 -1
  249. package/dist/components/base/toaster/toaster.d.ts.map +1 -1
  250. package/dist/components/composed/admin/api-key-list/api-key-list.d.ts.map +1 -1
  251. package/dist/components/composed/admin/index.cjs +1 -1
  252. package/dist/components/composed/admin/index.cjs.map +1 -1
  253. package/dist/components/composed/admin/index.js +69 -69
  254. package/dist/components/composed/admin/index.js.map +1 -1
  255. package/dist/components/composed/ai/index.cjs +1 -1
  256. package/dist/components/composed/ai/index.cjs.map +1 -1
  257. package/dist/components/composed/ai/index.js +25 -25
  258. package/dist/components/composed/ai/index.js.map +1 -1
  259. package/dist/components/composed/analytics/index.cjs +1 -1
  260. package/dist/components/composed/analytics/index.cjs.map +1 -1
  261. package/dist/components/composed/analytics/index.js +33 -33
  262. package/dist/components/composed/analytics/index.js.map +1 -1
  263. package/dist/components/composed/cards/index.cjs +1 -1
  264. package/dist/components/composed/cards/index.cjs.map +1 -1
  265. package/dist/components/composed/cards/index.js +15 -15
  266. package/dist/components/composed/cards/index.js.map +1 -1
  267. package/dist/components/composed/commerce/index.cjs +1 -1
  268. package/dist/components/composed/commerce/index.cjs.map +1 -1
  269. package/dist/components/composed/commerce/index.js +28 -28
  270. package/dist/components/composed/commerce/index.js.map +1 -1
  271. package/dist/components/composed/dark-surfaces/index.cjs +1 -1
  272. package/dist/components/composed/dark-surfaces/index.js +4 -4
  273. package/dist/components/composed/data-display/dense-info-card/partials/dense-info-dashboard.d.ts.map +1 -1
  274. package/dist/components/composed/data-display/dense-info-card/partials/dense-info-financial.d.ts.map +1 -1
  275. package/dist/components/composed/data-display/dense-info-card/partials/dense-info-score.d.ts.map +1 -1
  276. package/dist/components/composed/data-display/index.cjs +1 -1
  277. package/dist/components/composed/data-display/index.js +1 -1
  278. package/dist/components/composed/data-display/metadata/metadata-list.d.ts.map +1 -1
  279. package/dist/components/composed/data-display/resource-selector-card.d.ts.map +1 -1
  280. package/dist/components/composed/navigation/index.cjs +1 -1
  281. package/dist/components/composed/navigation/index.cjs.map +1 -1
  282. package/dist/components/composed/navigation/index.js +15 -15
  283. package/dist/components/composed/navigation/index.js.map +1 -1
  284. package/dist/components/composed/onboarding/index.cjs +1 -1
  285. package/dist/components/composed/onboarding/index.js +3 -3
  286. package/dist/components/composed/timelines/index.cjs +1 -1
  287. package/dist/components/composed/timelines/index.cjs.map +1 -1
  288. package/dist/components/composed/timelines/index.js +10 -10
  289. package/dist/components/composed/timelines/index.js.map +1 -1
  290. package/dist/components/features/activities/index.cjs +1 -1
  291. package/dist/components/features/activities/index.cjs.map +1 -1
  292. package/dist/components/features/activities/index.js +10 -10
  293. package/dist/components/features/activities/index.js.map +1 -1
  294. package/dist/components/features/ai-chat/index.cjs +2 -2
  295. package/dist/components/features/ai-chat/index.cjs.map +1 -1
  296. package/dist/components/features/ai-chat/index.js +8 -8
  297. package/dist/components/features/ai-chat/index.js.map +1 -1
  298. package/dist/components/features/card/index.cjs +1 -1
  299. package/dist/components/features/card/index.js +4 -4
  300. package/dist/components/features/comments/index.cjs +1 -1
  301. package/dist/components/features/comments/index.js +2 -2
  302. package/dist/components/features/data-view/index.cjs +1 -1
  303. package/dist/components/features/data-view/index.cjs.map +1 -1
  304. package/dist/components/features/data-view/index.js +3 -3
  305. package/dist/components/features/data-view/index.js.map +1 -1
  306. package/dist/components/features/event-log/index.cjs +1 -1
  307. package/dist/components/features/event-log/index.js +5 -5
  308. package/dist/components/features/filters/index.cjs +1 -1
  309. package/dist/components/features/filters/index.cjs.map +1 -1
  310. package/dist/components/features/filters/index.js +194 -194
  311. package/dist/components/features/filters/index.js.map +1 -1
  312. package/dist/components/features/filters/partials/filters-button.d.ts.map +1 -1
  313. package/dist/components/features/global-search/index.cjs +1 -1
  314. package/dist/components/features/global-search/index.cjs.map +1 -1
  315. package/dist/components/features/global-search/index.js +14 -14
  316. package/dist/components/features/global-search/index.js.map +1 -1
  317. package/dist/components/features/kanban/index.cjs +1 -1
  318. package/dist/components/features/kanban/index.js +3 -3
  319. package/dist/components/features/media-library/index.cjs +1 -1
  320. package/dist/components/features/media-library/index.cjs.map +1 -1
  321. package/dist/components/features/media-library/index.js +25 -25
  322. package/dist/components/features/media-library/index.js.map +1 -1
  323. package/dist/components/features/mentions/index.cjs +1 -1
  324. package/dist/components/features/mentions/index.js +1 -1
  325. package/dist/components/features/overlays/index.cjs +1 -1
  326. package/dist/components/features/overlays/index.js +1 -1
  327. package/dist/components/features/products/index.cjs +1 -1
  328. package/dist/components/features/products/index.cjs.map +1 -1
  329. package/dist/components/features/products/index.js +14 -14
  330. package/dist/components/features/products/index.js.map +1 -1
  331. package/dist/components/features/resource/index.cjs +1 -1
  332. package/dist/components/features/resource/index.cjs.map +1 -1
  333. package/dist/components/features/resource/index.js +6 -6
  334. package/dist/components/features/resource/index.js.map +1 -1
  335. package/dist/components/features/rich-text-editor/index.cjs +1 -1
  336. package/dist/components/features/rich-text-editor/index.js +1 -1
  337. package/dist/components/features/schema-form/index.cjs +1 -1
  338. package/dist/components/features/schema-form/index.js +8 -8
  339. package/dist/components/features/suggestions/index.cjs +1 -1
  340. package/dist/components/features/suggestions/index.js +1 -1
  341. package/dist/components/features/sync/index.cjs +1 -1
  342. package/dist/components/features/sync/index.js +2 -2
  343. package/dist/components/layout/auth/index.cjs +1 -1
  344. package/dist/components/layout/auth/index.js +1 -1
  345. package/dist/components/layout/header/index.cjs +1 -1
  346. package/dist/components/layout/header/index.js +1 -1
  347. package/dist/components/layout/hooks/index.cjs +1 -1
  348. package/dist/components/layout/hooks/index.js +1 -1
  349. package/dist/components/layout/index.cjs +1 -1
  350. package/dist/components/layout/index.js +7 -7
  351. package/dist/components/layout/page/index.cjs +1 -1
  352. package/dist/components/layout/page/index.js +1 -1
  353. package/dist/components/layout/page/page.types.d.ts +5 -0
  354. package/dist/components/layout/page/page.types.d.ts.map +1 -1
  355. package/dist/components/layout/page/partials/page-header.d.ts +1 -1
  356. package/dist/components/layout/page/partials/page-header.d.ts.map +1 -1
  357. package/dist/components/layout/settings/index.cjs +1 -1
  358. package/dist/components/layout/settings/index.js +1 -1
  359. package/dist/components/layout/sidebar/index.cjs +1 -1
  360. package/dist/components/layout/sidebar/index.js +2 -2
  361. package/dist/components/layout/workspace/index.cjs +1 -1
  362. package/dist/components/layout/workspace/index.js +1 -1
  363. package/dist/components/typography/index.cjs +1 -1
  364. package/dist/components/typography/index.js +1 -1
  365. package/dist/index.cjs +1 -1
  366. package/dist/index.js +1 -1
  367. package/dist/lib/ui-provider/defaults.d.ts.map +1 -1
  368. package/dist/lib/ui-provider/index.cjs +1 -1
  369. package/dist/lib/ui-provider/index.d.ts +1 -1
  370. package/dist/lib/ui-provider/index.d.ts.map +1 -1
  371. package/dist/lib/ui-provider/index.js +1 -1
  372. package/dist/lib/ui-provider/types.d.ts +14 -0
  373. package/dist/lib/ui-provider/types.d.ts.map +1 -1
  374. package/dist/services/actions/index.cjs +1 -1
  375. package/dist/services/actions/index.js +1 -1
  376. package/dist/showcase/assets/AreaChart-oKO7Ng_P.js +6 -0
  377. package/dist/showcase/assets/CompositeItem-CK7jBYU8.js +1 -0
  378. package/dist/showcase/assets/CompositeRoot-_AuToqhT.js +1 -0
  379. package/dist/showcase/assets/DialogTrigger-C44ZZXQ9.js +1 -0
  380. package/dist/showcase/assets/LabelableContext-DLVZlnur.js +1 -0
  381. package/dist/showcase/assets/PreviewLayout-Oik7TDHN.js +1 -0
  382. package/dist/showcase/assets/RadioGroup-DeYb8CGE.js +1 -0
  383. package/dist/showcase/assets/ScrollAreaCorner-BZlE_Bil.js +1 -0
  384. package/dist/showcase/assets/Separator-uiIktHzk.js +1 -0
  385. package/dist/showcase/assets/ToolbarRootContext-CEzj5dKk.js +1 -0
  386. package/dist/showcase/assets/accordion-B_wg_YOp.js +171 -0
  387. package/dist/showcase/assets/accordion-variants-O6U7E38x.js +1 -0
  388. package/dist/showcase/assets/action-menu-D_wGvb_o.js +1 -0
  389. package/dist/showcase/assets/actions-u4Fl4zm1.js +310 -0
  390. package/dist/showcase/assets/activities-C6iITHzB.js +500 -0
  391. package/dist/showcase/assets/activities-feed-card-OpYs16UV.js +1 -0
  392. package/dist/showcase/assets/admin-Bq15E5Wd.js +140 -0
  393. package/dist/showcase/assets/ai-DcUzGTlb.js +207 -0
  394. package/dist/showcase/assets/ai-artifact-BUAu1_jV.js +2 -0
  395. package/dist/showcase/assets/ai-chat-C6OWWBqh.js +568 -0
  396. package/dist/showcase/assets/ai-elements-CCe4Aqj_.js +387 -0
  397. package/dist/showcase/assets/ai-tool-call-B_NF1ePn.js +1 -0
  398. package/dist/showcase/assets/alert-B4VWkFPE.js +1 -0
  399. package/dist/showcase/assets/alert-BDIqciKo.js +62 -0
  400. package/dist/showcase/assets/alert-jvCEGWe6.js +93 -0
  401. package/dist/showcase/assets/api-key-list-BH8mde9A.js +1 -0
  402. package/dist/showcase/assets/api-key-list-CA6O3hsc.js +73 -0
  403. package/dist/showcase/assets/app-sidebar-DsMTwSAB.js +1 -0
  404. package/dist/showcase/assets/arrow-down-BzPC0rON.js +1 -0
  405. package/dist/showcase/assets/arrow-left-DNehZvF-.js +1 -0
  406. package/dist/showcase/assets/arrow-right-CKIgWncF.js +1 -0
  407. package/dist/showcase/assets/arrow-up-YjujZi8v.js +1 -0
  408. package/dist/showcase/assets/arrow-up-right-KnVxFmw9.js +1 -0
  409. package/dist/showcase/assets/avatar-BBLri7tX.js +57 -0
  410. package/dist/showcase/assets/avatar-BeFx8JQd.js +1 -0
  411. package/dist/showcase/assets/avatar-CFWUZzaF.js +67 -0
  412. package/dist/showcase/assets/avatar-D6exHRSK.js +1 -0
  413. package/dist/showcase/assets/badge-check-BfY3RIjR.js +1 -0
  414. package/dist/showcase/assets/badge-jGj2HQsg.js +31 -0
  415. package/dist/showcase/assets/bell-CTDSIOv8.js +1 -0
  416. package/dist/showcase/assets/boolean-indicator-C1u7OFcR.js +1 -0
  417. package/dist/showcase/assets/bot-D-iqtYiQ.js +1 -0
  418. package/dist/showcase/assets/box-DxjjLEh2.js +1 -0
  419. package/dist/showcase/assets/braces-B6XLlZwJ.js +1 -0
  420. package/dist/showcase/assets/brain-BdNpswBH.js +1 -0
  421. package/dist/showcase/assets/brand-C6srYuIa.js +36 -0
  422. package/dist/showcase/assets/breadcrumb-BaeV7C4t.js +52 -0
  423. package/dist/showcase/assets/breadcrumb-jKu4EUFo.js +1 -0
  424. package/dist/showcase/assets/breadcrumbs-D7vYX_5y.js +1 -0
  425. package/dist/showcase/assets/briefcase-cs9wyoxL.js +1 -0
  426. package/dist/showcase/assets/building-2-rcMEYcbf.js +1 -0
  427. package/dist/showcase/assets/button-group-D1oXfasP.js +1 -0
  428. package/dist/showcase/assets/button-oBRwhAhs.js +44 -0
  429. package/dist/showcase/assets/buttons-D_SDu9w3.js +272 -0
  430. package/dist/showcase/assets/calendar-CGTiVckW.js +1 -0
  431. package/dist/showcase/assets/calendar-ChLkVME0.js +16 -0
  432. package/dist/showcase/assets/calendar-CjMPvWfI.js +1 -0
  433. package/dist/showcase/assets/calendar-days-CNom8Y38.js +1 -0
  434. package/dist/showcase/assets/camera-D0rjOOcs.js +1 -0
  435. package/dist/showcase/assets/card-CYz4UxYz.js +1 -0
  436. package/dist/showcase/assets/card-D9updr3B.js +188 -0
  437. package/dist/showcase/assets/card-primitives-BQ0hSEWX.js +1 -0
  438. package/dist/showcase/assets/card-radio-group-CrNG04Bl.js +1 -0
  439. package/dist/showcase/assets/cards-D4Lw-AI6.js +354 -0
  440. package/dist/showcase/assets/carousel-C6Mmapzw.js +449 -0
  441. package/dist/showcase/assets/cell-renderers-BF80Z3jW.js +1 -0
  442. package/dist/showcase/assets/chart-BHgMfUB5.js +358 -0
  443. package/dist/showcase/assets/chart-column-CE_VhlUz.js +1 -0
  444. package/dist/showcase/assets/checkbox-CDLT09vU.js +1 -0
  445. package/dist/showcase/assets/checkbox-Dj24Tegr.js +1 -0
  446. package/dist/showcase/assets/chevron-down-1GeJ4hOO.js +1 -0
  447. package/dist/showcase/assets/chevron-left-wqlWv2Qy.js +1 -0
  448. package/dist/showcase/assets/chevron-up-CZAm-2rZ.js +1 -0
  449. package/dist/showcase/assets/chevrons-up-down-DgysGYWR.js +1 -0
  450. package/dist/showcase/assets/circle-C9Ooo8Lv.js +1 -0
  451. package/dist/showcase/assets/circle-alert-C6XBfkf2.js +1 -0
  452. package/dist/showcase/assets/circle-check-DvCYlVmL.js +1 -0
  453. package/dist/showcase/assets/circle-check-big-C8o9clAE.js +1 -0
  454. package/dist/showcase/assets/circle-dot-BoYf3vOR.js +1 -0
  455. package/dist/showcase/assets/circle-question-mark-DYPX0qe9.js +1 -0
  456. package/dist/showcase/assets/circle-x-GosnT0l7.js +1 -0
  457. package/dist/showcase/assets/clock-3-DklFhayq.js +1 -0
  458. package/dist/showcase/assets/clock-BvwTkk1w.js +1 -0
  459. package/dist/showcase/assets/code-xml-AGOwtN8Z.js +1 -0
  460. package/dist/showcase/assets/collapsible-CBkbr3ho.js +1 -0
  461. package/dist/showcase/assets/collapsible-CmY1SA28.js +27 -0
  462. package/dist/showcase/assets/collapsible-DfDnQ_t_.js +1 -0
  463. package/dist/showcase/assets/combobox-BsZQo7hF.js +685 -0
  464. package/dist/showcase/assets/command-B0Q84gg6.js +1 -0
  465. package/dist/showcase/assets/command-BtADdA65.js +1 -0
  466. package/dist/showcase/assets/comment-composer-BmBnkba9.js +1 -0
  467. package/dist/showcase/assets/comment-item-y5mTfSmU.js +1 -0
  468. package/dist/showcase/assets/comments-BuYiGPxI.js +357 -0
  469. package/dist/showcase/assets/commerce-21Ef_rsW.js +267 -0
  470. package/dist/showcase/assets/composite-fKT6fZFs.js +1 -0
  471. package/dist/showcase/assets/conditional-rendering-DsTG0sOE.js +1 -0
  472. package/dist/showcase/assets/contact-card-S8koA9Sr.js +65 -0
  473. package/dist/showcase/assets/content-container-B4gW5fmA.js +1 -0
  474. package/dist/showcase/assets/copyable-D2xL2rMm.js +96 -0
  475. package/dist/showcase/assets/copyable-gLrmPayI.js +1 -0
  476. package/dist/showcase/assets/course-card-B8eEvF7a.js +77 -0
  477. package/dist/showcase/assets/cpu-Cp1On3tr.js +1 -0
  478. package/dist/showcase/assets/credit-card-QbZMZB90.js +1 -0
  479. package/dist/showcase/assets/css-variables-BXICo9fV.js +1205 -0
  480. package/dist/showcase/assets/currency-D2MSLjLt.js +149 -0
  481. package/dist/showcase/assets/dark-surfaces-CJsxuvQU.js +90 -0
  482. package/dist/showcase/assets/data-view-syhKhdz9.js +124 -0
  483. package/dist/showcase/assets/data-view-znnAeb6b.js +4 -0
  484. package/dist/showcase/assets/database-isLkCvDd.js +1 -0
  485. package/dist/showcase/assets/date-block-BDn9lGVM.js +1 -0
  486. package/dist/showcase/assets/date-block-CqRL1xfo.js +1 -0
  487. package/dist/showcase/assets/date-picker-DNcmSgQk.js +1 -0
  488. package/dist/showcase/assets/date-pickers-3lQUDDS7.js +73 -0
  489. package/dist/showcase/assets/dense-info-CfvqiIpM.js +106 -0
  490. package/dist/showcase/assets/design-system-consistency-C3yRhKwF.js +264 -0
  491. package/dist/showcase/assets/dialog-DiAkrPHO.js +1 -0
  492. package/dist/showcase/assets/dialog-feUFM03m.js +1 -0
  493. package/dist/showcase/assets/dialog-ruVOqJnB.js +1 -0
  494. package/dist/showcase/assets/display-utilities-SPJxlrkp.js +4 -0
  495. package/dist/showcase/assets/display-utilities.examples-ByRydMl0.js +302 -0
  496. package/dist/showcase/assets/dist-C9DVZddl.js +45 -0
  497. package/dist/showcase/assets/dist-DNARKM_B.js +1 -0
  498. package/dist/showcase/assets/dollar-sign-CUDuWyun.js +1 -0
  499. package/dist/showcase/assets/download-CIbh9VUU.js +1 -0
  500. package/dist/showcase/assets/dropdown-menu-MoIAG0ES.js +1 -0
  501. package/dist/showcase/assets/dropzone-D0kHIUuh.js +1 -0
  502. package/dist/showcase/assets/earth-BpNTeF25.js +1 -0
  503. package/dist/showcase/assets/ellipsis-B9w0cuoH.js +1 -0
  504. package/dist/showcase/assets/ellipsis-vertical-DHbOsjTF.js +1 -0
  505. package/dist/showcase/assets/empty-DvYVgcNF.js +1 -0
  506. package/dist/showcase/assets/empty-item-oFM5kPCp.js +49 -0
  507. package/dist/showcase/assets/empty-state-DTq86muv.js +1 -0
  508. package/dist/showcase/assets/empty-state-De7XCht-.js +190 -0
  509. package/dist/showcase/assets/enhanced-activities--XHjx99M.js +357 -0
  510. package/dist/showcase/assets/enhanced-combobox-CX_mTkei.js +1 -0
  511. package/dist/showcase/assets/esm-XXqBjGGF.js +2 -0
  512. package/dist/showcase/assets/event-calendar-zTiCWOF5.js +138 -0
  513. package/dist/showcase/assets/event-log-C_zSlY6y.js +330 -0
  514. package/dist/showcase/assets/example-Cv05rz75.js +1 -0
  515. package/dist/showcase/assets/external-link-DaR-AMyf.js +1 -0
  516. package/dist/showcase/assets/eye-CDSbB0kZ.js +1 -0
  517. package/dist/showcase/assets/feature-announcement-DJ26ZDVB.js +34 -0
  518. package/dist/showcase/assets/file-DPSK5cGC.js +1 -0
  519. package/dist/showcase/assets/file-text-BBWpAppG.js +1 -0
  520. package/dist/showcase/assets/filter-layout-CZRGcd6Z.js +1 -0
  521. package/dist/showcase/assets/filters-Bn7hYUeq.js +139 -0
  522. package/dist/showcase/assets/flag-BRs-GTCx.js +1 -0
  523. package/dist/showcase/assets/folder-open-DnFjlB3X.js +1 -0
  524. package/dist/showcase/assets/form-field-SW-Yp7H7.js +1 -0
  525. package/dist/showcase/assets/format-Bki5m7M3.js +1 -0
  526. package/dist/showcase/assets/forms-CAUL2gGq.js +915 -0
  527. package/dist/showcase/assets/funnel-D6g2Suhd.js +1 -0
  528. package/dist/showcase/assets/generic-CU6JNqKO.js +1 -0
  529. package/dist/showcase/assets/getPseudoElementBounds-yqDwWA_y.js +1 -0
  530. package/dist/showcase/assets/gift-B2Qp9Vqt.js +1 -0
  531. package/dist/showcase/assets/giftcard-cards-Dk0DYoN2.js +85 -0
  532. package/dist/showcase/assets/git-branch-CPtvCNGc.js +1 -0
  533. package/dist/showcase/assets/global-search-D1ow01VA.js +1 -0
  534. package/dist/showcase/assets/global-search-DQR2AgDO.js +215 -0
  535. package/dist/showcase/assets/globe-BiZgUZFZ.js +1 -0
  536. package/dist/showcase/assets/gradient-card-D5isLy3_.js +58 -0
  537. package/dist/showcase/assets/hash-NJ5ohGOa.js +1 -0
  538. package/dist/showcase/assets/header-Df9uYSSH.js +1 -0
  539. package/dist/showcase/assets/header-notifications-sPR5NuON.js +1 -0
  540. package/dist/showcase/assets/heart-C4t7PVKW.js +1 -0
  541. package/dist/showcase/assets/hooks-0TKg0ZAK.js +220 -0
  542. package/dist/showcase/assets/house-CuLXFtjd.js +1 -0
  543. package/dist/showcase/assets/icon-badge-Cr6DD-_7.js +1 -0
  544. package/dist/showcase/assets/icon-badge-DMdMSSRL.js +37 -0
  545. package/dist/showcase/assets/image-DYjJaO0i.js +1 -0
  546. package/dist/showcase/assets/inbox-DGF8FgvV.js +1 -0
  547. package/dist/showcase/assets/index-ATou_nFA.js +10 -0
  548. package/dist/showcase/assets/index-C8U-r6l7.css +2 -0
  549. package/dist/showcase/assets/inertValue-CBi0sj8C.js +1 -0
  550. package/dist/showcase/assets/info-DLaTRPUT.js +1 -0
  551. package/dist/showcase/assets/inline-stat-DGpunTNF.js +1 -0
  552. package/dist/showcase/assets/inline-stat-rUaaOSmR.js +15 -0
  553. package/dist/showcase/assets/input-Cmrgo51H.js +1 -0
  554. package/dist/showcase/assets/input-CnmnWnGb.js +1 -0
  555. package/dist/showcase/assets/input-group-BwujFvXM.js +1 -0
  556. package/dist/showcase/assets/input-group-DvXgZtra.js +47 -0
  557. package/dist/showcase/assets/inputs-CjzW_R8z.js +155 -0
  558. package/dist/showcase/assets/installation-2dW-rmF2.js +134 -0
  559. package/dist/showcase/assets/invoice-header-DeWxMKCe.js +36 -0
  560. package/dist/showcase/assets/invoice-items-Dxb95w0e.js +36 -0
  561. package/dist/showcase/assets/invoice-mini-EMzCkmR7.js +14 -0
  562. package/dist/showcase/assets/invoice-table-ClWJaclJ.js +30 -0
  563. package/dist/showcase/assets/isSameDay-BNPzVySj.js +1 -0
  564. package/dist/showcase/assets/isToday-D6n7oLej.js +1 -0
  565. package/dist/showcase/assets/italic-B8w3dpYw.js +1 -0
  566. package/dist/showcase/assets/item-B8_dwOlT.js +1 -0
  567. package/dist/showcase/assets/item-Baq-Mmy2.js +1 -0
  568. package/dist/showcase/assets/item-BtMuqGwy.js +140 -0
  569. package/dist/showcase/assets/kanban-B-QxvKMg.js +188 -0
  570. package/dist/showcase/assets/key-round-CrBIyzIa.js +1 -0
  571. package/dist/showcase/assets/label-VWe_nbHh.js +1 -0
  572. package/dist/showcase/assets/languages-N0uGt5nC.js +1 -0
  573. package/dist/showcase/assets/layers-DEZvT5cX.js +1 -0
  574. package/dist/showcase/assets/layout-app-shell-T9UqKX2o.js +608 -0
  575. package/dist/showcase/assets/layout-auth-IVC4DuU3.js +790 -0
  576. package/dist/showcase/assets/layout-containers-naBpuH05.js +101 -0
  577. package/dist/showcase/assets/layout-header-9i_7ygKU.js +203 -0
  578. package/dist/showcase/assets/layout-page-CrEUiJpW.js +315 -0
  579. package/dist/showcase/assets/layout-primitives-DPrVHpu3.js +34 -0
  580. package/dist/showcase/assets/layout-sidebar-D7z6-kPu.js +224 -0
  581. package/dist/showcase/assets/layout-users-Cov9D84d.js +117 -0
  582. package/dist/showcase/assets/layout-workspace-Czlmi8gY.js +191 -0
  583. package/dist/showcase/assets/lib-DNMH46Rn.js +1 -0
  584. package/dist/showcase/assets/list-checks-DygDRIGi.js +1 -0
  585. package/dist/showcase/assets/lock-DqEahakB.js +1 -0
  586. package/dist/showcase/assets/lock-keyhole-CETEK3R0.js +1 -0
  587. package/dist/showcase/assets/mail-LKhBlrEc.js +1 -0
  588. package/dist/showcase/assets/mail-check-BOTjWQJf.js +1 -0
  589. package/dist/showcase/assets/map-0vJT2r8C.js +124 -0
  590. package/dist/showcase/assets/map-pin-D0qrpDJI.js +1 -0
  591. package/dist/showcase/assets/media-library-Bp99WaS9.js +699 -0
  592. package/dist/showcase/assets/mention-inline-suggestions-mlV7LRvD.js +1 -0
  593. package/dist/showcase/assets/mentions-Cmd1zxOR.js +138 -0
  594. package/dist/showcase/assets/menus-CtjFPoDr.js +171 -0
  595. package/dist/showcase/assets/message-square-BXyvikcZ.js +1 -0
  596. package/dist/showcase/assets/metadata-list-DLUBcy7E.js +286 -0
  597. package/dist/showcase/assets/metadata-list-F3bWXtZB.js +1 -0
  598. package/dist/showcase/assets/metric-CXPRptlh.js +1 -0
  599. package/dist/showcase/assets/metric-bar-BY25WVZ0.js +1 -0
  600. package/dist/showcase/assets/metric-grid-DQtf9y6E.js +1 -0
  601. package/dist/showcase/assets/metric-trend-chip-CXHpkj3U.js +1 -0
  602. package/dist/showcase/assets/metrics-analytics-bar-BIuwiVrn.js +44 -0
  603. package/dist/showcase/assets/metrics-analytics-cards-yx5lMGQf.js +50 -0
  604. package/dist/showcase/assets/metrics-comparison-BC_7jLXf.js +76 -0
  605. package/dist/showcase/assets/metrics-heatmap-C_nhCljz.js +27 -0
  606. package/dist/showcase/assets/metrics-inline-badge-3oySQnoR.js +17 -0
  607. package/dist/showcase/assets/metrics-kpi-row-zS4-oiTO.js +31 -0
  608. package/dist/showcase/assets/metrics-micro-grid-UJkA2LNR.js +42 -0
  609. package/dist/showcase/assets/metrics-overview-DQFr22ol.js +192 -0
  610. package/dist/showcase/assets/metrics-stat-cards-DnBirxKV.js +54 -0
  611. package/dist/showcase/assets/minus-BOVQEx6C.js +1 -0
  612. package/dist/showcase/assets/money-display-DV7xlrNV.js +1 -0
  613. package/dist/showcase/assets/money-display-DxnM5--7.js +1 -0
  614. package/dist/showcase/assets/month-year-picker-BzRXCrQ7.js +1 -0
  615. package/dist/showcase/assets/navigation-ChJKLv4Y.js +90 -0
  616. package/dist/showcase/assets/navigation-D7VJsKrP.js +231 -0
  617. package/dist/showcase/assets/navigation-extras-BVc1xQuB.js +43 -0
  618. package/dist/showcase/assets/notification-banner-1ivcmPLe.js +1 -0
  619. package/dist/showcase/assets/onboarding-checklist-CbARgwpX.js +119 -0
  620. package/dist/showcase/assets/overflow-tab-bar-DlqMmyTx.js +1 -0
  621. package/dist/showcase/assets/overlays-DkWO50b8.js +159 -0
  622. package/dist/showcase/assets/overlays-KKZpxWjt.js +408 -0
  623. package/dist/showcase/assets/overview-BjQe-YZE.js +184 -0
  624. package/dist/showcase/assets/package-DhQRoFDo.js +1 -0
  625. package/dist/showcase/assets/package-check-CBgGiccG.js +1 -0
  626. package/dist/showcase/assets/page-BWTmyV5J.js +1 -0
  627. package/dist/showcase/assets/page-action-button-DV-YYRA4.js +1 -0
  628. package/dist/showcase/assets/page-header-Bmg4NU_P.js +1 -0
  629. package/dist/showcase/assets/pagination-ByQ_OXRU.js +1 -0
  630. package/dist/showcase/assets/pagination-Db5CuoBb.js +42 -0
  631. package/dist/showcase/assets/paperclip-BQNPUzG_.js +1 -0
  632. package/dist/showcase/assets/password-input-CPvjzM1f.js +1 -0
  633. package/dist/showcase/assets/pencil-DuBakHme.js +1 -0
  634. package/dist/showcase/assets/phone-t94LTB1m.js +1 -0
  635. package/dist/showcase/assets/placeholder-pattern-BNou2ep-.js +1 -0
  636. package/dist/showcase/assets/plus-BRcp6JhT.js +1 -0
  637. package/dist/showcase/assets/popover-CVuJP03o.js +1 -0
  638. package/dist/showcase/assets/popover-D_P2gTn8.js +1 -0
  639. package/dist/showcase/assets/popover-menu-DGY5jEk4.js +1 -0
  640. package/dist/showcase/assets/products-8sUfDMPU.js +423 -0
  641. package/dist/showcase/assets/progress-BrMvIZIz.js +1 -0
  642. package/dist/showcase/assets/progress-CSXZAavT.js +18 -0
  643. package/dist/showcase/assets/progress-Dvqpf_O0.js +1 -0
  644. package/dist/showcase/assets/props-table-BAfz1Zc6.js +1 -0
  645. package/dist/showcase/assets/props.generated-CuVoOKYT.json +41746 -0
  646. package/dist/showcase/assets/qr-code-C-CaHJQ2.js +1 -0
  647. package/dist/showcase/assets/quote-Ci80eS0u.js +1 -0
  648. package/dist/showcase/assets/receipt-jvwbPuE3.js +1 -0
  649. package/dist/showcase/assets/receipt-text-CT0GiMQm.js +1 -0
  650. package/dist/showcase/assets/refinement-guide-BnCQ9-6f.js +189 -0
  651. package/dist/showcase/assets/refresh-cw-CXDARnCe.js +1 -0
  652. package/dist/showcase/assets/resolveValueLabel-DJanfUim.js +1 -0
  653. package/dist/showcase/assets/resource-Bir-z7ie.js +139 -0
  654. package/dist/showcase/assets/resource-D19qhfYP.js +1 -0
  655. package/dist/showcase/assets/resource-selector-card-BUbuu-QH.js +43 -0
  656. package/dist/showcase/assets/rich-text-editor-BCtz589M.js +124 -0
  657. package/dist/showcase/assets/rich-text-editor-uu9FmB8B.js +143 -0
  658. package/dist/showcase/assets/rotate-ccw-DEIVfiHA.js +1 -0
  659. package/dist/showcase/assets/route-B5vtDLsE.js +1 -0
  660. package/dist/showcase/assets/save-DQ4Up8ZB.js +1 -0
  661. package/dist/showcase/assets/schema-form-D7wbdl5u.js +327 -0
  662. package/dist/showcase/assets/scroll-area-B0QD6o1Y.js +32 -0
  663. package/dist/showcase/assets/scroll-area-BoZ1SrfI.js +1 -0
  664. package/dist/showcase/assets/section-BXsVHOsI.js +1 -0
  665. package/dist/showcase/assets/select-CW8SYsOY.js +1 -0
  666. package/dist/showcase/assets/select-DmRqLSoG.js +1 -0
  667. package/dist/showcase/assets/send-Dxs1-xSj.js +1 -0
  668. package/dist/showcase/assets/separator-BLOG_8oO.js +1 -0
  669. package/dist/showcase/assets/separator-DZC_uQU-.js +1 -0
  670. package/dist/showcase/assets/separator-OlLHRN7k.js +28 -0
  671. package/dist/showcase/assets/settings-2-BSpgytsy.js +1 -0
  672. package/dist/showcase/assets/settings-CCNP7XOu.js +1 -0
  673. package/dist/showcase/assets/sheet-DIfJjbgA.js +1 -0
  674. package/dist/showcase/assets/shield-D2gTWkwA.js +1 -0
  675. package/dist/showcase/assets/shield-alert-C-3oWpoe.js +1 -0
  676. package/dist/showcase/assets/shield-check-D11r1eJ8.js +1 -0
  677. package/dist/showcase/assets/shopping-bag-DAeaVQ5O.js +1 -0
  678. package/dist/showcase/assets/showcase-GdZcH6OR.js +132 -0
  679. package/dist/showcase/assets/sidebar-RBzHNuB7.js +1 -0
  680. package/dist/showcase/assets/sidebar.context-Dyw470Qp.js +1 -0
  681. package/dist/showcase/assets/skeleton-B7crngMw.js +1 -0
  682. package/dist/showcase/assets/skeleton-BwEVNdGJ.js +1 -0
  683. package/dist/showcase/assets/skeleton-DM73_ueB.js +1 -0
  684. package/dist/showcase/assets/skeleton-cHsWJOtO.js +29 -0
  685. package/dist/showcase/assets/slider-DRPnIs0S.js +1 -0
  686. package/dist/showcase/assets/smart-card-DER7dpD9.js +1 -0
  687. package/dist/showcase/assets/sonner-Go1YsPBH.js +22 -0
  688. package/dist/showcase/assets/sortable.esm-q6LdsxSr.js +5 -0
  689. package/dist/showcase/assets/sparkles-DqH40POl.js +1 -0
  690. package/dist/showcase/assets/spinner-C0YWWxyj.js +1 -0
  691. package/dist/showcase/assets/spinner-CpHNR13f.js +30 -0
  692. package/dist/showcase/assets/spinner-Dwvf24e9.js +49 -0
  693. package/dist/showcase/assets/square-pen-D-xHmIA0.js +1 -0
  694. package/dist/showcase/assets/stacked-avatars-C92NYKIa.js +1 -0
  695. package/dist/showcase/assets/star-dD4CAJ83.js +1 -0
  696. package/dist/showcase/assets/startOfDay-BXZshd4g.js +1 -0
  697. package/dist/showcase/assets/styles-BPJdkO_3.js +1 -0
  698. package/dist/showcase/assets/suggestions-CyhKme4Q.js +126 -0
  699. package/dist/showcase/assets/switch-C7DVTgQd.js +1 -0
  700. package/dist/showcase/assets/switch-LU6nljdS.js +1 -0
  701. package/dist/showcase/assets/sync-bERw1shm.js +124 -0
  702. package/dist/showcase/assets/table-BuIv4nqB.js +686 -0
  703. package/dist/showcase/assets/table-CDMDtBgJ.js +1 -0
  704. package/dist/showcase/assets/table-actions-DsK7d8Yb.js +1 -0
  705. package/dist/showcase/assets/tabs-BDryywGb.js +19 -0
  706. package/dist/showcase/assets/tabs-BNaZmM48.js +1 -0
  707. package/dist/showcase/assets/tags-input-CzE_5BJl.js +1 -0
  708. package/dist/showcase/assets/text-button-B1m5cpX_.js +1 -0
  709. package/dist/showcase/assets/text-link-CqjW10Ce.js +1 -0
  710. package/dist/showcase/assets/textarea-xJ3EE8R9.js +1 -0
  711. package/dist/showcase/assets/textarea-xOekToAG.js +1 -0
  712. package/dist/showcase/assets/throttle-alert-BH1HMiaI.js +1 -0
  713. package/dist/showcase/assets/timelines-DjWkuOz3.js +200 -0
  714. package/dist/showcase/assets/toggle-group-Css6pfUI.js +1 -0
  715. package/dist/showcase/assets/toggles-DhDrn3YH.js +71 -0
  716. package/dist/showcase/assets/toggles-group-e4xtKzkl.js +32 -0
  717. package/dist/showcase/assets/tooltip-DMvMUrGe.js +31 -0
  718. package/dist/showcase/assets/trash-2-zILxQmtX.js +1 -0
  719. package/dist/showcase/assets/trending-up-CRH278ig.js +1 -0
  720. package/dist/showcase/assets/truck-At9CEKg7.js +1 -0
  721. package/dist/showcase/assets/typography-B0ehvSV4.js +223 -0
  722. package/dist/showcase/assets/ui-badge-CyLWYf3f.js +28 -0
  723. package/dist/showcase/assets/ui-card-BPnLZmkJ.js +30 -0
  724. package/dist/showcase/assets/ui-table-C-zXhcOm.js +42 -0
  725. package/dist/showcase/assets/upload-tray-IyQJEM9n.js +138 -0
  726. package/dist/showcase/assets/use-layout-link-Cux4giQO.js +1 -0
  727. package/dist/showcase/assets/useAriaLabelledBy-Bo0rTGvc.js +1 -0
  728. package/dist/showcase/assets/useCollapsiblePanel-CzU-1LY3.js +1 -0
  729. package/dist/showcase/assets/useCompositeItem-CJFNnVql.js +1 -0
  730. package/dist/showcase/assets/useCompositeListItem-BAuO9hue.js +1 -0
  731. package/dist/showcase/assets/useLabelableId-HuACs9ba.js +1 -0
  732. package/dist/showcase/assets/useOpenInteractionType-MEUfJuxN.js +1 -0
  733. package/dist/showcase/assets/useRender-B-6DpRfj.js +1 -0
  734. package/dist/showcase/assets/useTriggerFocusGuards-B-mRyUJJ.js +1 -0
  735. package/dist/showcase/assets/useValueChanged-CVn_Rfso.js +1 -0
  736. package/dist/showcase/assets/user-eelwPGBI.js +1 -0
  737. package/dist/showcase/assets/user-plus-DhswMZvb.js +1 -0
  738. package/dist/showcase/assets/users-BVMmaveS.js +1 -0
  739. package/dist/showcase/assets/vendor-profile-FHaiInTe.js +37 -0
  740. package/dist/showcase/assets/video-C42fxAyj.js +1 -0
  741. package/dist/showcase/assets/visually-hidden-BwzlEinj.js +1 -0
  742. package/dist/showcase/assets/wrench-EKI7PaKp.js +1 -0
  743. package/dist/showcase/assets/x--LIqlhum.js +1 -0
  744. package/dist/showcase/assets/zap-C1fX30vt.js +1 -0
  745. package/dist/showcase/index.html +2 -2
  746. package/dist/style.css +1 -1
  747. package/package.json +1 -1
  748. package/src/css/tokens/foundation.css +20 -6
  749. package/src/css/tokens/primitives.css +1 -1
  750. package/src/css/tokens/states.css +3 -0
  751. package/dist/_shared/accordion-BRj4TDQx.js +0 -135
  752. package/dist/_shared/accordion-BRj4TDQx.js.map +0 -1
  753. package/dist/_shared/accordion-DvlDjk29.cjs +0 -2
  754. package/dist/_shared/accordion-DvlDjk29.cjs.map +0 -1
  755. package/dist/_shared/action-menu-BrHF4nss.cjs +0 -2
  756. package/dist/_shared/action-menu-BrHF4nss.cjs.map +0 -1
  757. package/dist/_shared/action-menu-Crn22LKo.js +0 -96
  758. package/dist/_shared/action-menu-Crn22LKo.js.map +0 -1
  759. package/dist/_shared/ai-artifact-BHgd3agA.js +0 -1099
  760. package/dist/_shared/ai-artifact-BHgd3agA.js.map +0 -1
  761. package/dist/_shared/ai-artifact-BRM5cvGv.cjs +0 -3
  762. package/dist/_shared/ai-artifact-BRM5cvGv.cjs.map +0 -1
  763. package/dist/_shared/alert-CMVVt2Br.js +0 -81
  764. package/dist/_shared/alert-CMVVt2Br.js.map +0 -1
  765. package/dist/_shared/alert-Dmhtbmpg.cjs +0 -2
  766. package/dist/_shared/alert-Dmhtbmpg.cjs.map +0 -1
  767. package/dist/_shared/auth-DZW6NkJx.cjs +0 -2
  768. package/dist/_shared/auth-DZW6NkJx.cjs.map +0 -1
  769. package/dist/_shared/auth-Dh790NI_.js +0 -643
  770. package/dist/_shared/auth-Dh790NI_.js.map +0 -1
  771. package/dist/_shared/badge-B8xGFpfM.cjs +0 -2
  772. package/dist/_shared/badge-B8xGFpfM.cjs.map +0 -1
  773. package/dist/_shared/badge-BYNwSWh5.js +0 -110
  774. package/dist/_shared/badge-BYNwSWh5.js.map +0 -1
  775. package/dist/_shared/button-BMiPFJIb.cjs +0 -2
  776. package/dist/_shared/button-BMiPFJIb.cjs.map +0 -1
  777. package/dist/_shared/button-vv59_uS_.js +0 -189
  778. package/dist/_shared/button-vv59_uS_.js.map +0 -1
  779. package/dist/_shared/buttons-CvqIMv3I.js +0 -137
  780. package/dist/_shared/buttons-CvqIMv3I.js.map +0 -1
  781. package/dist/_shared/buttons-tCkWktN3.cjs +0 -2
  782. package/dist/_shared/buttons-tCkWktN3.cjs.map +0 -1
  783. package/dist/_shared/card-radio-group-Bhe8gAbH.js +0 -150
  784. package/dist/_shared/card-radio-group-Bhe8gAbH.js.map +0 -1
  785. package/dist/_shared/card-radio-group-CdG1zr8M.cjs +0 -2
  786. package/dist/_shared/card-radio-group-CdG1zr8M.cjs.map +0 -1
  787. package/dist/_shared/cards-Cu6p1Brd.cjs +0 -2
  788. package/dist/_shared/cards-Cu6p1Brd.cjs.map +0 -1
  789. package/dist/_shared/cards-cQ9lL6zy.js +0 -354
  790. package/dist/_shared/cards-cQ9lL6zy.js.map +0 -1
  791. package/dist/_shared/combobox-BGYjyXeN.cjs +0 -2
  792. package/dist/_shared/combobox-BGYjyXeN.cjs.map +0 -1
  793. package/dist/_shared/combobox-DTwomOBt.js +0 -954
  794. package/dist/_shared/combobox-DTwomOBt.js.map +0 -1
  795. package/dist/_shared/command-ByedBajF.js +0 -39
  796. package/dist/_shared/command-ByedBajF.js.map +0 -1
  797. package/dist/_shared/command-EGR0nhGc.cjs +0 -2
  798. package/dist/_shared/command-EGR0nhGc.cjs.map +0 -1
  799. package/dist/_shared/comments-C97vL5km.js +0 -952
  800. package/dist/_shared/comments-C97vL5km.js.map +0 -1
  801. package/dist/_shared/comments-DBe6dP-d.cjs +0 -2
  802. package/dist/_shared/comments-DBe6dP-d.cjs.map +0 -1
  803. package/dist/_shared/copyable-BgFdERqs.js +0 -38
  804. package/dist/_shared/copyable-BgFdERqs.js.map +0 -1
  805. package/dist/_shared/copyable-Ce8rmE-V.cjs +0 -2
  806. package/dist/_shared/copyable-Ce8rmE-V.cjs.map +0 -1
  807. package/dist/_shared/data-display-DUWxoDKq.js +0 -1873
  808. package/dist/_shared/data-display-DUWxoDKq.js.map +0 -1
  809. package/dist/_shared/data-display-o-rbMuIA.cjs +0 -2
  810. package/dist/_shared/data-display-o-rbMuIA.cjs.map +0 -1
  811. package/dist/_shared/date-picker-Cxx9jllA.js +0 -1361
  812. package/dist/_shared/date-picker-Cxx9jllA.js.map +0 -1
  813. package/dist/_shared/date-picker-DE5A8yqN.cjs +0 -2
  814. package/dist/_shared/date-picker-DE5A8yqN.cjs.map +0 -1
  815. package/dist/_shared/date-pickers-Dex1Mfye.cjs +0 -2
  816. package/dist/_shared/date-pickers-Dex1Mfye.cjs.map +0 -1
  817. package/dist/_shared/date-pickers-m0dpDcqH.js +0 -329
  818. package/dist/_shared/date-pickers-m0dpDcqH.js.map +0 -1
  819. package/dist/_shared/display-Bro3Kufg.js +0 -986
  820. package/dist/_shared/display-Bro3Kufg.js.map +0 -1
  821. package/dist/_shared/display-CRQjSjgB.cjs +0 -2
  822. package/dist/_shared/display-CRQjSjgB.cjs.map +0 -1
  823. package/dist/_shared/forms-D-SNQmtB.cjs +0 -2
  824. package/dist/_shared/forms-D-SNQmtB.cjs.map +0 -1
  825. package/dist/_shared/forms-p7cfzJwf.js +0 -3533
  826. package/dist/_shared/forms-p7cfzJwf.js.map +0 -1
  827. package/dist/_shared/header-8C71wVRp.js +0 -447
  828. package/dist/_shared/header-8C71wVRp.js.map +0 -1
  829. package/dist/_shared/header-CYgFCnjZ.cjs +0 -2
  830. package/dist/_shared/header-CYgFCnjZ.cjs.map +0 -1
  831. package/dist/_shared/hooks-Ci1LFWRG.js +0 -95
  832. package/dist/_shared/hooks-Ci1LFWRG.js.map +0 -1
  833. package/dist/_shared/hooks-Cjl7LJpn.cjs +0 -2
  834. package/dist/_shared/hooks-Cjl7LJpn.cjs.map +0 -1
  835. package/dist/_shared/input-BgcP6x4C.js +0 -182
  836. package/dist/_shared/input-BgcP6x4C.js.map +0 -1
  837. package/dist/_shared/input-DV3g7Fm5.cjs +0 -2
  838. package/dist/_shared/input-DV3g7Fm5.cjs.map +0 -1
  839. package/dist/_shared/item-D7GTzvhf.js +0 -226
  840. package/dist/_shared/item-D7GTzvhf.js.map +0 -1
  841. package/dist/_shared/item-DTrnHpfm.cjs +0 -2
  842. package/dist/_shared/item-DTrnHpfm.cjs.map +0 -1
  843. package/dist/_shared/layout-BExg7Vlx.js +0 -261
  844. package/dist/_shared/layout-BExg7Vlx.js.map +0 -1
  845. package/dist/_shared/layout-CKRD_goE.cjs +0 -2
  846. package/dist/_shared/layout-CKRD_goE.cjs.map +0 -1
  847. package/dist/_shared/mentions-BtGhYisA.js +0 -506
  848. package/dist/_shared/mentions-BtGhYisA.js.map +0 -1
  849. package/dist/_shared/mentions-CnVOuQJU.cjs +0 -2
  850. package/dist/_shared/mentions-CnVOuQJU.cjs.map +0 -1
  851. package/dist/_shared/money-display-BvVpRUs5.cjs +0 -2
  852. package/dist/_shared/money-display-BvVpRUs5.cjs.map +0 -1
  853. package/dist/_shared/money-display-D6Qtvyyv.js +0 -198
  854. package/dist/_shared/money-display-D6Qtvyyv.js.map +0 -1
  855. package/dist/_shared/navigation-C4dO1I82.cjs +0 -2
  856. package/dist/_shared/navigation-C4dO1I82.cjs.map +0 -1
  857. package/dist/_shared/navigation-Ct-LFlpY.js +0 -436
  858. package/dist/_shared/navigation-Ct-LFlpY.js.map +0 -1
  859. package/dist/_shared/overlays-ChyqXn0n.js +0 -735
  860. package/dist/_shared/overlays-ChyqXn0n.js.map +0 -1
  861. package/dist/_shared/overlays-Dn2bt3CL.cjs +0 -2
  862. package/dist/_shared/overlays-Dn2bt3CL.cjs.map +0 -1
  863. package/dist/_shared/popover-menu-17Dxn25O.js +0 -93
  864. package/dist/_shared/popover-menu-17Dxn25O.js.map +0 -1
  865. package/dist/_shared/popover-menu-DXVN0bvj.cjs +0 -2
  866. package/dist/_shared/popover-menu-DXVN0bvj.cjs.map +0 -1
  867. package/dist/_shared/rich-text-editor-BRpcNkj1.js +0 -620
  868. package/dist/_shared/rich-text-editor-BRpcNkj1.js.map +0 -1
  869. package/dist/_shared/rich-text-editor-BXxGNbmI.cjs +0 -2
  870. package/dist/_shared/rich-text-editor-BXxGNbmI.cjs.map +0 -1
  871. package/dist/_shared/settings-CW9yzfQM.js +0 -143
  872. package/dist/_shared/settings-CW9yzfQM.js.map +0 -1
  873. package/dist/_shared/settings-cCPrw7si.cjs +0 -2
  874. package/dist/_shared/settings-cCPrw7si.cjs.map +0 -1
  875. package/dist/_shared/sidebar-Cq6J_I4l.cjs +0 -2
  876. package/dist/_shared/sidebar-Cq6J_I4l.cjs.map +0 -1
  877. package/dist/_shared/sidebar-DtF_ihE3.js +0 -548
  878. package/dist/_shared/sidebar-DtF_ihE3.js.map +0 -1
  879. package/dist/_shared/spinner-DY2de3Wt.cjs +0 -2
  880. package/dist/_shared/spinner-DY2de3Wt.cjs.map +0 -1
  881. package/dist/_shared/spinner-ZmIq_zsx.js +0 -67
  882. package/dist/_shared/spinner-ZmIq_zsx.js.map +0 -1
  883. package/dist/_shared/table-BBWc-wIw.js +0 -1377
  884. package/dist/_shared/table-BBWc-wIw.js.map +0 -1
  885. package/dist/_shared/table-DMDkdLzV.cjs +0 -2
  886. package/dist/_shared/table-DMDkdLzV.cjs.map +0 -1
  887. package/dist/_shared/textarea-C1TeJ7Vt.cjs +0 -2
  888. package/dist/_shared/textarea-C1TeJ7Vt.cjs.map +0 -1
  889. package/dist/_shared/textarea-CGRkgH5z.js +0 -118
  890. package/dist/_shared/textarea-CGRkgH5z.js.map +0 -1
  891. package/dist/_shared/typography-CzFVA1w1.js +0 -201
  892. package/dist/_shared/typography-CzFVA1w1.js.map +0 -1
  893. package/dist/_shared/typography-GtkgK9QX.cjs +0 -2
  894. package/dist/_shared/typography-GtkgK9QX.cjs.map +0 -1
  895. package/dist/_shared/ui-provider-DZWtUXf2.cjs +0 -2
  896. package/dist/_shared/ui-provider-DZWtUXf2.cjs.map +0 -1
  897. package/dist/_shared/ui-provider-Dj6OSOZi.js +0 -81
  898. package/dist/_shared/ui-provider-Dj6OSOZi.js.map +0 -1
  899. package/dist/_shared/workspace-BF5BtDhD.cjs +0 -2
  900. package/dist/_shared/workspace-BF5BtDhD.cjs.map +0 -1
  901. package/dist/_shared/workspace-IvsczduM.js +0 -357
  902. package/dist/_shared/workspace-IvsczduM.js.map +0 -1
  903. package/dist/showcase/assets/AreaChart-CsIm9z7Y.js +0 -6
  904. package/dist/showcase/assets/CompositeItem-D9zznn01.js +0 -1
  905. package/dist/showcase/assets/CompositeRoot-CvxtZ81W.js +0 -1
  906. package/dist/showcase/assets/DialogTrigger-C-osQGHu.js +0 -1
  907. package/dist/showcase/assets/LabelableContext-_EE-HBND.js +0 -1
  908. package/dist/showcase/assets/PreviewLayout-KdEsSl3b.js +0 -1
  909. package/dist/showcase/assets/RadioGroup-4jOeNTc1.js +0 -1
  910. package/dist/showcase/assets/ScrollAreaCorner-CXTdUcaE.js +0 -1
  911. package/dist/showcase/assets/Separator-CHVXO6nj.js +0 -1
  912. package/dist/showcase/assets/ToolbarRootContext-CM5tQGGX.js +0 -1
  913. package/dist/showcase/assets/accordion-CA84bxb2.js +0 -171
  914. package/dist/showcase/assets/accordion-variants-DqWzAOO3.js +0 -1
  915. package/dist/showcase/assets/action-menu-D0q5z-Kq.js +0 -1
  916. package/dist/showcase/assets/actions-DnqxABJU.js +0 -310
  917. package/dist/showcase/assets/activities-BC9hoMy9.js +0 -500
  918. package/dist/showcase/assets/activities-feed-card-D6wGLpbH.js +0 -1
  919. package/dist/showcase/assets/admin-CMnMsugJ.js +0 -140
  920. package/dist/showcase/assets/ai-B6_sE9Zg.js +0 -207
  921. package/dist/showcase/assets/ai-artifact-BVvbsSJB.js +0 -2
  922. package/dist/showcase/assets/ai-chat-lcXeqJrA.js +0 -568
  923. package/dist/showcase/assets/ai-elements-B32o_UjE.js +0 -387
  924. package/dist/showcase/assets/ai-tool-call-BLrAioKz.js +0 -1
  925. package/dist/showcase/assets/alert-B1p1Grce.js +0 -62
  926. package/dist/showcase/assets/alert-BBiffYsY.js +0 -93
  927. package/dist/showcase/assets/alert-vH0nJ8J9.js +0 -1
  928. package/dist/showcase/assets/api-key-list-BrSc6V1y.js +0 -1
  929. package/dist/showcase/assets/api-key-list-CoKe_PaL.js +0 -73
  930. package/dist/showcase/assets/app-sidebar-R93lRPB4.js +0 -1
  931. package/dist/showcase/assets/arrow-down-xxVIADbv.js +0 -1
  932. package/dist/showcase/assets/arrow-left-DxnlnN8R.js +0 -1
  933. package/dist/showcase/assets/arrow-right-S5k93UPM.js +0 -1
  934. package/dist/showcase/assets/arrow-up-OlEVG7a-.js +0 -1
  935. package/dist/showcase/assets/arrow-up-right-j55bbl4b.js +0 -1
  936. package/dist/showcase/assets/avatar-BbiXvZq7.js +0 -67
  937. package/dist/showcase/assets/avatar-Bwpw-hQo.js +0 -57
  938. package/dist/showcase/assets/avatar-D0DKQ1lK.js +0 -1
  939. package/dist/showcase/assets/avatar-WyjSBov9.js +0 -1
  940. package/dist/showcase/assets/badge-BzLZQO3L.js +0 -31
  941. package/dist/showcase/assets/badge-check-TFWm1m3F.js +0 -1
  942. package/dist/showcase/assets/bell-CmuQlO_k.js +0 -1
  943. package/dist/showcase/assets/bot-Bu518AJB.js +0 -1
  944. package/dist/showcase/assets/box-D-wrSdOJ.js +0 -1
  945. package/dist/showcase/assets/braces-CgCdmdAl.js +0 -1
  946. package/dist/showcase/assets/brain-DkHdwgHO.js +0 -1
  947. package/dist/showcase/assets/brand-CpovnVoG.js +0 -36
  948. package/dist/showcase/assets/breadcrumb-BUc0WC5d.js +0 -1
  949. package/dist/showcase/assets/breadcrumb-Do_Dazt1.js +0 -52
  950. package/dist/showcase/assets/breadcrumbs-Bj21o2zm.js +0 -1
  951. package/dist/showcase/assets/briefcase-CQBh2kok.js +0 -1
  952. package/dist/showcase/assets/building-2-D07Ej6iR.js +0 -1
  953. package/dist/showcase/assets/button-CCZ4KEGQ.js +0 -44
  954. package/dist/showcase/assets/button-group-BTjeHOvz.js +0 -1
  955. package/dist/showcase/assets/buttons-D45Wwiwn.js +0 -272
  956. package/dist/showcase/assets/calendar-BsEWULmZ.js +0 -16
  957. package/dist/showcase/assets/calendar-CkPefzIO.js +0 -1
  958. package/dist/showcase/assets/calendar-DZlT3qTq.js +0 -1
  959. package/dist/showcase/assets/calendar-days-C9awTMru.js +0 -1
  960. package/dist/showcase/assets/camera-CQhMw-RD.js +0 -1
  961. package/dist/showcase/assets/card-CKrz_UHt.js +0 -1
  962. package/dist/showcase/assets/card-DZgZgjXO.js +0 -188
  963. package/dist/showcase/assets/card-primitives-CpkDLK3Y.js +0 -1
  964. package/dist/showcase/assets/card-radio-group-BjXwMI4v.js +0 -1
  965. package/dist/showcase/assets/cards-Cd24XZ9l.js +0 -353
  966. package/dist/showcase/assets/carousel-Doon04yO.js +0 -449
  967. package/dist/showcase/assets/cell-renderers-CTay3duH.js +0 -1
  968. package/dist/showcase/assets/chart-CkvbdpWw.js +0 -358
  969. package/dist/showcase/assets/chart-column-Dz57kUMl.js +0 -1
  970. package/dist/showcase/assets/checkbox-L-L4-wvA.js +0 -1
  971. package/dist/showcase/assets/checkbox-sP254E7e.js +0 -1
  972. package/dist/showcase/assets/chevron-down-CLc_a2Ua.js +0 -1
  973. package/dist/showcase/assets/chevron-left-CMRIGOJt.js +0 -1
  974. package/dist/showcase/assets/chevron-up-BDw6LdDZ.js +0 -1
  975. package/dist/showcase/assets/chevrons-up-down-C519RKki.js +0 -1
  976. package/dist/showcase/assets/circle-B_tOHWTY.js +0 -1
  977. package/dist/showcase/assets/circle-alert-B56AFULT.js +0 -1
  978. package/dist/showcase/assets/circle-check-B4XZj4Ty.js +0 -1
  979. package/dist/showcase/assets/circle-check-big-C0iEkwPB.js +0 -1
  980. package/dist/showcase/assets/circle-dot-DPdJZkc6.js +0 -1
  981. package/dist/showcase/assets/circle-question-mark-LTetdrq6.js +0 -1
  982. package/dist/showcase/assets/circle-x-B4FwM-sI.js +0 -1
  983. package/dist/showcase/assets/clock-3-DZhjBuw8.js +0 -1
  984. package/dist/showcase/assets/clock-B9Fna2Q3.js +0 -1
  985. package/dist/showcase/assets/code-xml-B6Xb_vIg.js +0 -1
  986. package/dist/showcase/assets/collapsible-Bf7Oo37i.js +0 -27
  987. package/dist/showcase/assets/collapsible-BfLeooy8.js +0 -1
  988. package/dist/showcase/assets/combobox-4NYfJznY.js +0 -685
  989. package/dist/showcase/assets/command-7jRRucHf.js +0 -1
  990. package/dist/showcase/assets/command-D56CjgNc.js +0 -1
  991. package/dist/showcase/assets/comment-composer-BWeXIZfK.js +0 -1
  992. package/dist/showcase/assets/comment-item-ChkiK-ut.js +0 -1
  993. package/dist/showcase/assets/comments-YnEop7v3.js +0 -357
  994. package/dist/showcase/assets/commerce-7XxWJChs.js +0 -267
  995. package/dist/showcase/assets/composite-CHcyYCsk.js +0 -1
  996. package/dist/showcase/assets/contact-card-BXw-VuBm.js +0 -65
  997. package/dist/showcase/assets/content-container-C4uopCBg.js +0 -1
  998. package/dist/showcase/assets/copyable-CjVYEJ0P.js +0 -1
  999. package/dist/showcase/assets/copyable-Cz2jW7yL.js +0 -96
  1000. package/dist/showcase/assets/course-card-CvK3dw9W.js +0 -77
  1001. package/dist/showcase/assets/cpu-Vk5WgcC1.js +0 -1
  1002. package/dist/showcase/assets/credit-card-CaigqZGk.js +0 -1
  1003. package/dist/showcase/assets/css-variables-hLaBmeMt.js +0 -1190
  1004. package/dist/showcase/assets/currency-yO1giHp1.js +0 -149
  1005. package/dist/showcase/assets/dark-surfaces-BPQnyk9a.js +0 -90
  1006. package/dist/showcase/assets/data-view-CjjXn5VT.js +0 -124
  1007. package/dist/showcase/assets/data-view-DF0n8uva.js +0 -4
  1008. package/dist/showcase/assets/database-ChUBDe8E.js +0 -1
  1009. package/dist/showcase/assets/date-block-DUg1Oyn4.js +0 -1
  1010. package/dist/showcase/assets/date-picker-CoQPZa34.js +0 -1
  1011. package/dist/showcase/assets/date-pickers-B-IUbyXw.js +0 -73
  1012. package/dist/showcase/assets/dense-info-zVQSWqOU.js +0 -106
  1013. package/dist/showcase/assets/design-system-consistency-Bnz_h3-6.js +0 -264
  1014. package/dist/showcase/assets/dialog-BtilpgxJ.js +0 -1
  1015. package/dist/showcase/assets/dialog-kf9WwmTC.js +0 -1
  1016. package/dist/showcase/assets/display-utilities-BBzG5EPX.js +0 -267
  1017. package/dist/showcase/assets/dist-9gFIhkw-.js +0 -45
  1018. package/dist/showcase/assets/dist-CGpz_7Mu.js +0 -1
  1019. package/dist/showcase/assets/dollar-sign-CWbYI3Pd.js +0 -1
  1020. package/dist/showcase/assets/download-Bt_z-poH.js +0 -1
  1021. package/dist/showcase/assets/dropdown-menu-C1_SYTHm.js +0 -1
  1022. package/dist/showcase/assets/dropzone-D5BGVTnl.js +0 -1
  1023. package/dist/showcase/assets/earth-sP5mIgG3.js +0 -1
  1024. package/dist/showcase/assets/ellipsis-vertical-BD7kMOzj.js +0 -1
  1025. package/dist/showcase/assets/ellipsis-yqIF49C8.js +0 -1
  1026. package/dist/showcase/assets/empty-DIrJgtrh.js +0 -1
  1027. package/dist/showcase/assets/empty-item-GgnZk2yf.js +0 -49
  1028. package/dist/showcase/assets/empty-state-ZGKkJ6sf.js +0 -190
  1029. package/dist/showcase/assets/empty-state-n_Fspzt-.js +0 -1
  1030. package/dist/showcase/assets/enhanced-activities-CCw_hZnZ.js +0 -357
  1031. package/dist/showcase/assets/enhanced-combobox-bBF-ADDs.js +0 -1
  1032. package/dist/showcase/assets/esm-CyFPn936.js +0 -2
  1033. package/dist/showcase/assets/event-calendar-Czo7yBDx.js +0 -138
  1034. package/dist/showcase/assets/event-log-DJ3B3nMV.js +0 -330
  1035. package/dist/showcase/assets/example-eGsLGIcp.js +0 -1
  1036. package/dist/showcase/assets/external-link-DPOQEVWH.js +0 -1
  1037. package/dist/showcase/assets/eye-CN92NVL0.js +0 -1
  1038. package/dist/showcase/assets/feature-announcement-BXkSW17e.js +0 -34
  1039. package/dist/showcase/assets/file-CFHePlKG.js +0 -1
  1040. package/dist/showcase/assets/file-text--WYCYQMw.js +0 -1
  1041. package/dist/showcase/assets/filter-layout-B35gGmcO.js +0 -1
  1042. package/dist/showcase/assets/filters-GDW_oiT3.js +0 -139
  1043. package/dist/showcase/assets/flag-XsT9XFPr.js +0 -1
  1044. package/dist/showcase/assets/folder-open-RtsQ8vxf.js +0 -1
  1045. package/dist/showcase/assets/form-field-Bijd1Gex.js +0 -1
  1046. package/dist/showcase/assets/format-Ckw4OM66.js +0 -1
  1047. package/dist/showcase/assets/forms-00bU7LN8.js +0 -915
  1048. package/dist/showcase/assets/funnel-qu25WlXD.js +0 -1
  1049. package/dist/showcase/assets/generic-Bf82Wiol.js +0 -1
  1050. package/dist/showcase/assets/getPseudoElementBounds-BR4_m2HH.js +0 -1
  1051. package/dist/showcase/assets/gift-D4GQoqzV.js +0 -1
  1052. package/dist/showcase/assets/giftcard-cards-CMutwaAY.js +0 -85
  1053. package/dist/showcase/assets/git-branch-B2QG2zRg.js +0 -1
  1054. package/dist/showcase/assets/global-search-CRAB9TSF.js +0 -1
  1055. package/dist/showcase/assets/global-search-DY0cKfhY.js +0 -215
  1056. package/dist/showcase/assets/globe-BxZW28rG.js +0 -1
  1057. package/dist/showcase/assets/gradient-card-CQGnXG8r.js +0 -58
  1058. package/dist/showcase/assets/hash-CsRtIoKK.js +0 -1
  1059. package/dist/showcase/assets/header-DzYOgZLP.js +0 -1
  1060. package/dist/showcase/assets/header-notifications-D_CJPbvs.js +0 -1
  1061. package/dist/showcase/assets/heart-B2YsYprq.js +0 -1
  1062. package/dist/showcase/assets/hooks-BhUMA4Tb.js +0 -220
  1063. package/dist/showcase/assets/house-HeRFNhI0.js +0 -1
  1064. package/dist/showcase/assets/icon-badge-CpDkc-S0.js +0 -37
  1065. package/dist/showcase/assets/icon-badge-eNEGgpAV.js +0 -1
  1066. package/dist/showcase/assets/image-T88JyDag.js +0 -1
  1067. package/dist/showcase/assets/inbox-DLrLLnTR.js +0 -1
  1068. package/dist/showcase/assets/index-DDZl6kOS.js +0 -10
  1069. package/dist/showcase/assets/index-nOkXemgw.css +0 -2
  1070. package/dist/showcase/assets/inertValue-BajuuRy4.js +0 -1
  1071. package/dist/showcase/assets/info-CNYfw2Yz.js +0 -1
  1072. package/dist/showcase/assets/inline-stat-BN6yhDR5.js +0 -15
  1073. package/dist/showcase/assets/inline-stat-Bqw3lVfk.js +0 -1
  1074. package/dist/showcase/assets/input-C-9K6F0N.js +0 -1
  1075. package/dist/showcase/assets/input-DaZzfkZV.js +0 -1
  1076. package/dist/showcase/assets/input-group-DE-Xdhv4.js +0 -1
  1077. package/dist/showcase/assets/input-group-DIQZnytn.js +0 -47
  1078. package/dist/showcase/assets/inputs-Cl_JgSR4.js +0 -155
  1079. package/dist/showcase/assets/installation-DdhD4Dkq.js +0 -134
  1080. package/dist/showcase/assets/invoice-header-DOs2ACqQ.js +0 -36
  1081. package/dist/showcase/assets/invoice-items-1EuA62mF.js +0 -36
  1082. package/dist/showcase/assets/invoice-mini-vCrYEtWp.js +0 -14
  1083. package/dist/showcase/assets/invoice-table--mDTs1Iz.js +0 -30
  1084. package/dist/showcase/assets/isSameDay-BNB1yam4.js +0 -1
  1085. package/dist/showcase/assets/isToday-BugOpGJC.js +0 -1
  1086. package/dist/showcase/assets/italic-Ck4UD2ZT.js +0 -1
  1087. package/dist/showcase/assets/item-BcesxqFS.js +0 -139
  1088. package/dist/showcase/assets/item-BgPlwUMv.js +0 -1
  1089. package/dist/showcase/assets/item-CB9k_rmo.js +0 -1
  1090. package/dist/showcase/assets/kanban-cPuSVqWY.js +0 -188
  1091. package/dist/showcase/assets/key-round-BmYjd5dk.js +0 -1
  1092. package/dist/showcase/assets/label-BTIBJBqN.js +0 -1
  1093. package/dist/showcase/assets/languages-he6FNXRs.js +0 -1
  1094. package/dist/showcase/assets/layers-B_48DtOz.js +0 -1
  1095. package/dist/showcase/assets/layout-app-shell-zwLv6jTP.js +0 -608
  1096. package/dist/showcase/assets/layout-auth-2Zv5lr52.js +0 -790
  1097. package/dist/showcase/assets/layout-containers-Dzw3xlKn.js +0 -101
  1098. package/dist/showcase/assets/layout-header-TJ-WVmG3.js +0 -203
  1099. package/dist/showcase/assets/layout-page-CIVQCKXK.js +0 -314
  1100. package/dist/showcase/assets/layout-primitives-i_O81fzT.js +0 -34
  1101. package/dist/showcase/assets/layout-sidebar-eH_pwBq_.js +0 -224
  1102. package/dist/showcase/assets/layout-users-CWSaFBLj.js +0 -117
  1103. package/dist/showcase/assets/layout-workspace-w3oe32GE.js +0 -191
  1104. package/dist/showcase/assets/lib-CoS0xjP8.js +0 -1
  1105. package/dist/showcase/assets/list-checks-DecRPpK3.js +0 -1
  1106. package/dist/showcase/assets/lock-D9f8uXol.js +0 -1
  1107. package/dist/showcase/assets/lock-keyhole-C20eixH6.js +0 -1
  1108. package/dist/showcase/assets/mail-CVgP8Qlo.js +0 -1
  1109. package/dist/showcase/assets/mail-check-mplTKcSH.js +0 -1
  1110. package/dist/showcase/assets/map-B6OGeOup.js +0 -124
  1111. package/dist/showcase/assets/map-pin-BZXSwrzT.js +0 -1
  1112. package/dist/showcase/assets/media-library-DSlVIM1Q.js +0 -699
  1113. package/dist/showcase/assets/mention-inline-suggestions-CNAEeXgy.js +0 -1
  1114. package/dist/showcase/assets/mentions-Cb3g4hDN.js +0 -138
  1115. package/dist/showcase/assets/menus-CE0Hlj8N.js +0 -171
  1116. package/dist/showcase/assets/message-square-HliU8vbW.js +0 -1
  1117. package/dist/showcase/assets/metadata-list-CJ5v5Bvc.js +0 -286
  1118. package/dist/showcase/assets/metadata-list-DY92-pw2.js +0 -1
  1119. package/dist/showcase/assets/metric-DxMTjIvU.js +0 -1
  1120. package/dist/showcase/assets/metric-bar-cW9nWCRl.js +0 -1
  1121. package/dist/showcase/assets/metric-grid-CvfO52X1.js +0 -1
  1122. package/dist/showcase/assets/metric-trend-chip-BmjQdRus.js +0 -1
  1123. package/dist/showcase/assets/metrics-analytics-bar-BZqB5d1y.js +0 -44
  1124. package/dist/showcase/assets/metrics-analytics-cards-jAhlrQCI.js +0 -50
  1125. package/dist/showcase/assets/metrics-comparison-DURZ6qEL.js +0 -76
  1126. package/dist/showcase/assets/metrics-heatmap-HhJDBguh.js +0 -27
  1127. package/dist/showcase/assets/metrics-inline-badge-Dq5k-P6F.js +0 -17
  1128. package/dist/showcase/assets/metrics-kpi-row-DXzhwa6z.js +0 -31
  1129. package/dist/showcase/assets/metrics-micro-grid-C6O5b0wP.js +0 -42
  1130. package/dist/showcase/assets/metrics-overview-Hv2mseb3.js +0 -192
  1131. package/dist/showcase/assets/metrics-stat-cards-CW42vBCS.js +0 -54
  1132. package/dist/showcase/assets/minus-BW62vCxf.js +0 -1
  1133. package/dist/showcase/assets/money-display-CAdGk5Lr.js +0 -1
  1134. package/dist/showcase/assets/month-year-picker-dHuvgz1E.js +0 -1
  1135. package/dist/showcase/assets/navigation-C4uSLvbZ.js +0 -90
  1136. package/dist/showcase/assets/navigation-SjsZrtIc.js +0 -231
  1137. package/dist/showcase/assets/navigation-extras-CMVNVskk.js +0 -43
  1138. package/dist/showcase/assets/onboarding-checklist-C1jwRdMU.js +0 -119
  1139. package/dist/showcase/assets/overflow-tab-bar-BYFLpl5w.js +0 -1
  1140. package/dist/showcase/assets/overlays-0Y8MAz39.js +0 -159
  1141. package/dist/showcase/assets/overlays-ClOnjahL.js +0 -408
  1142. package/dist/showcase/assets/overview-B5ztGmTp.js +0 -184
  1143. package/dist/showcase/assets/package-check-MeSw6bS4.js +0 -1
  1144. package/dist/showcase/assets/package-vYJ0q0QM.js +0 -1
  1145. package/dist/showcase/assets/page-4lMKtBQ7.js +0 -1
  1146. package/dist/showcase/assets/page-action-button-C5-TGSzy.js +0 -1
  1147. package/dist/showcase/assets/page-header-C_-KYryO.js +0 -1
  1148. package/dist/showcase/assets/pagination-D3L3Iwus.js +0 -1
  1149. package/dist/showcase/assets/pagination-dZXPxwHx.js +0 -42
  1150. package/dist/showcase/assets/paperclip-BZhdPOw8.js +0 -1
  1151. package/dist/showcase/assets/password-input-CDSMtGxt.js +0 -1
  1152. package/dist/showcase/assets/pencil-DiYr3CZ9.js +0 -1
  1153. package/dist/showcase/assets/phone-Dm5qzlG8.js +0 -1
  1154. package/dist/showcase/assets/plus-pfGaA3St.js +0 -1
  1155. package/dist/showcase/assets/popover-CjVWDO7C.js +0 -1
  1156. package/dist/showcase/assets/popover-menu-JcZyGV3Y.js +0 -1
  1157. package/dist/showcase/assets/popover-pZ4Jbp0s.js +0 -1
  1158. package/dist/showcase/assets/products-C62MKtAR.js +0 -423
  1159. package/dist/showcase/assets/progress-Btw-ZUaU.js +0 -18
  1160. package/dist/showcase/assets/progress-DpB5LL6R.js +0 -1
  1161. package/dist/showcase/assets/props-table-Bjc9IHmp.js +0 -1
  1162. package/dist/showcase/assets/props.generated-cO7HmIpY.json +0 -41578
  1163. package/dist/showcase/assets/quote-DcxVd1fj.js +0 -1
  1164. package/dist/showcase/assets/receipt-BHns-S5Q.js +0 -1
  1165. package/dist/showcase/assets/receipt-text-L0aYasyt.js +0 -1
  1166. package/dist/showcase/assets/refinement-guide-BBOGBJ4I.js +0 -189
  1167. package/dist/showcase/assets/refresh-cw-z6mlm0HI.js +0 -1
  1168. package/dist/showcase/assets/resolveValueLabel-hsarzg5A.js +0 -1
  1169. package/dist/showcase/assets/resource-CIn_zKZ4.js +0 -139
  1170. package/dist/showcase/assets/resource-DxktLgEK.js +0 -1
  1171. package/dist/showcase/assets/resource-selector-card-dkcEQ6bl.js +0 -43
  1172. package/dist/showcase/assets/rich-text-editor-Dd-rWisw.js +0 -124
  1173. package/dist/showcase/assets/rich-text-editor-DvJMFj48.js +0 -143
  1174. package/dist/showcase/assets/rotate-ccw-DEz6nb5P.js +0 -1
  1175. package/dist/showcase/assets/route-BeXaXTk8.js +0 -1
  1176. package/dist/showcase/assets/save-EE7Tc5OT.js +0 -1
  1177. package/dist/showcase/assets/schema-form-RK9Zpz1E.js +0 -327
  1178. package/dist/showcase/assets/scroll-area-BejQJ0Q1.js +0 -32
  1179. package/dist/showcase/assets/scroll-area-DS8LJ7LG.js +0 -1
  1180. package/dist/showcase/assets/section-Cv8i4DIx.js +0 -1
  1181. package/dist/showcase/assets/select-Cuy3YKW9.js +0 -1
  1182. package/dist/showcase/assets/select-qFy1jm91.js +0 -1
  1183. package/dist/showcase/assets/send-CXv0ST9u.js +0 -1
  1184. package/dist/showcase/assets/separator-CecGyBaV.js +0 -1
  1185. package/dist/showcase/assets/separator-CqtFQXrk.js +0 -28
  1186. package/dist/showcase/assets/settings-2-CCeMwMOj.js +0 -1
  1187. package/dist/showcase/assets/settings-CXjN6wTC.js +0 -1
  1188. package/dist/showcase/assets/sheet-Csyrmkqp.js +0 -1
  1189. package/dist/showcase/assets/shield-DR0ZfAFA.js +0 -1
  1190. package/dist/showcase/assets/shield-alert-Bp1iFJ2q.js +0 -1
  1191. package/dist/showcase/assets/shield-check-ClL4B_Cd.js +0 -1
  1192. package/dist/showcase/assets/shopping-bag-DnSmbPUX.js +0 -1
  1193. package/dist/showcase/assets/showcase-CQKt5VGi.js +0 -132
  1194. package/dist/showcase/assets/sidebar-CXy94md1.js +0 -1
  1195. package/dist/showcase/assets/sidebar.context-C8gkOwJ5.js +0 -1
  1196. package/dist/showcase/assets/skeleton-B8wC5P66.js +0 -29
  1197. package/dist/showcase/assets/skeleton-DBlCLlBC.js +0 -1
  1198. package/dist/showcase/assets/slider-BcjkNx6W.js +0 -1
  1199. package/dist/showcase/assets/smart-card-Cg6rtWH9.js +0 -1
  1200. package/dist/showcase/assets/sonner-ZGBQ13wS.js +0 -22
  1201. package/dist/showcase/assets/sortable.esm-CGFWc-Cn.js +0 -5
  1202. package/dist/showcase/assets/sparkles-q1-9JZqa.js +0 -1
  1203. package/dist/showcase/assets/spinner-CKg8QLHu.js +0 -1
  1204. package/dist/showcase/assets/spinner-D1Ao9j9T.js +0 -49
  1205. package/dist/showcase/assets/spinner-oahLIkgb.js +0 -30
  1206. package/dist/showcase/assets/square-pen-DZ3bQJia.js +0 -1
  1207. package/dist/showcase/assets/stacked-avatars-CKPtb3Hj.js +0 -1
  1208. package/dist/showcase/assets/star-suetD-KI.js +0 -1
  1209. package/dist/showcase/assets/startOfDay-OjIsUeiv.js +0 -1
  1210. package/dist/showcase/assets/styles-1mYOoC2k.js +0 -1
  1211. package/dist/showcase/assets/suggestions-DLYaI-In.js +0 -126
  1212. package/dist/showcase/assets/switch-CTTrJNwo.js +0 -1
  1213. package/dist/showcase/assets/switch-ChJWWmxN.js +0 -1
  1214. package/dist/showcase/assets/sync-DsHYydvo.js +0 -124
  1215. package/dist/showcase/assets/table-Ck2ptin2.js +0 -686
  1216. package/dist/showcase/assets/table-DyJ9oADQ.js +0 -1
  1217. package/dist/showcase/assets/table-actions-COU4zHfh.js +0 -1
  1218. package/dist/showcase/assets/tabs-Bl_RHGIw.js +0 -1
  1219. package/dist/showcase/assets/tabs-DS-4VSkb.js +0 -19
  1220. package/dist/showcase/assets/tags-input-BlYzb5fF.js +0 -1
  1221. package/dist/showcase/assets/text-button-OPdNs3fb.js +0 -1
  1222. package/dist/showcase/assets/text-link-D27gqGeg.js +0 -1
  1223. package/dist/showcase/assets/textarea-DpC7J5F-.js +0 -1
  1224. package/dist/showcase/assets/textarea-JtXUjxvc.js +0 -1
  1225. package/dist/showcase/assets/timelines-DQM-B4Xo.js +0 -200
  1226. package/dist/showcase/assets/toggle-group-CMneKREH.js +0 -1
  1227. package/dist/showcase/assets/toggles-CAXXgjO_.js +0 -71
  1228. package/dist/showcase/assets/toggles-group-CHRqrpoM.js +0 -32
  1229. package/dist/showcase/assets/tooltip-CwGZAioX.js +0 -31
  1230. package/dist/showcase/assets/trash-2-BpMb9Zbb.js +0 -1
  1231. package/dist/showcase/assets/trending-up-B1BzitCg.js +0 -1
  1232. package/dist/showcase/assets/truck-CDSE5-HZ.js +0 -1
  1233. package/dist/showcase/assets/typography-BoNJ1hRZ.js +0 -223
  1234. package/dist/showcase/assets/ui-badge-Djh6NiB2.js +0 -28
  1235. package/dist/showcase/assets/ui-card-QC_rl_H2.js +0 -30
  1236. package/dist/showcase/assets/ui-table-qAGsc3qN.js +0 -42
  1237. package/dist/showcase/assets/upload-tray-DKCJgW5u.js +0 -138
  1238. package/dist/showcase/assets/use-layout-link-BPlsZ8Ys.js +0 -1
  1239. package/dist/showcase/assets/useAnchoredPopupScrollLock-526MebAC.js +0 -1
  1240. package/dist/showcase/assets/useAriaLabelledBy-CqySZiH9.js +0 -1
  1241. package/dist/showcase/assets/useCollapsiblePanel-DWX7LbGX.js +0 -1
  1242. package/dist/showcase/assets/useCompositeItem-DGEBUXgE.js +0 -1
  1243. package/dist/showcase/assets/useCompositeListItem-B2nuNlc2.js +0 -1
  1244. package/dist/showcase/assets/useLabelableId-DY4O1lpt.js +0 -1
  1245. package/dist/showcase/assets/useOpenInteractionType-DxwujDvt.js +0 -1
  1246. package/dist/showcase/assets/useRender-BPoNv-Lm.js +0 -1
  1247. package/dist/showcase/assets/useTriggerFocusGuards-BnOSAjfy.js +0 -1
  1248. package/dist/showcase/assets/useValueChanged-CXmDOWxx.js +0 -1
  1249. package/dist/showcase/assets/user-BGchdtV_.js +0 -1
  1250. package/dist/showcase/assets/user-plus-BifI_xVA.js +0 -1
  1251. package/dist/showcase/assets/users-Cl5yYqdg.js +0 -1
  1252. package/dist/showcase/assets/vendor-profile-BNW4FYna.js +0 -37
  1253. package/dist/showcase/assets/video-BtQPixYN.js +0 -1
  1254. package/dist/showcase/assets/wrench-CRalc5fG.js +0 -1
  1255. package/dist/showcase/assets/x-D6hUY89S.js +0 -1
  1256. package/dist/showcase/assets/zap-v_qbqeI5.js +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cards-BJctT9KD.js","names":[],"sources":["../../src/components/ui/card.tsx","../../src/components/base/cards/smart-card.tokens.ts","../../src/components/base/cards/partials/has-renderable-content.ts","../../src/components/base/cards/partials/card-primitives.tsx","../../src/components/base/display/alert.tsx","../../src/components/base/cards/partials/smart-card-alert.tsx","../../src/components/base/cards/partials/smart-card-actions-menu.tsx","../../src/components/base/cards/partials/smart-card-header-row.tsx","../../src/components/base/cards/smart-card.strings.ts","../../src/components/base/cards/partials/smart-card-skeleton.tsx","../../src/components/base/cards/smart-card.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Card({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & { size?: \"default\" | \"sm\" }) {\n return (\n <div\n data-slot=\"card\"\n data-size={size}\n className={cn(\"ring-foreground/10 bg-card text-card-foreground gap-6 overflow-hidden rounded-xl py-6 text-sm shadow-xs ring-1 has-[>img:first-child]:pt-0 data-[size=sm]:gap-4 data-[size=sm]:py-4 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl group/card flex flex-col\", className)}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"gap-1 rounded-t-xl px-6 group-data-[size=sm]/card:px-4 [.border-b]:pb-6 group-data-[size=sm]/card:[.border-b]:pb-4 group/card-header @container/card-header grid auto-rows-min items-start has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\"text-base leading-normal font-medium group-data-[size=sm]/card:text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(\n \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"px-6 group-data-[size=sm]/card:px-4\", className)}\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\"rounded-b-xl px-6 group-data-[size=sm]/card:px-4 [.border-t]:pt-6 group-data-[size=sm]/card:[.border-t]:pt-4 flex items-center\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n}\n","import { cn } from '@/lib/utils';\n\nimport type { CardPadding, SmartCardSurface } from './smart-card.types';\n\n/**\n * BEM-style hooks applied to every SmartCard subregion. Library\n * consumers can target them in CSS / tests / analytics without\n * relying on shadcn's data-slot attributes (which are framework\n * internals). Keep these names consistent — they are part of the\n * public DOM contract.\n */\nexport const CARD_BEM = {\n\troot: 'card--component',\n\theader: 'card--header',\n\ttitle: 'card--title',\n\tdescription: 'card--description',\n\tcontent: 'card--content',\n\tfooter: 'card--footer',\n\talert: 'card--alert',\n} as const;\n\ninterface PaddingTokens {\n\tshell: string;\n\theaderX: string;\n\tcontentX: string;\n\tcontentY: string;\n\tfooterX: string;\n\talertX: string;\n\t/** Vertical offset applied when alert sits BELOW the header (pulls it up). */\n\talertOffsetWithHeader: string;\n\t/** Vertical spacing applied when alert is the first content (no header). */\n\talertOffsetStandalone: string;\n}\n\nexport const PADDING: Record<CardPadding, PaddingTokens> = {\n\tsmall: {\n\t\tshell: 'gap-space-lg py-surface-sm',\n\t\theaderX: 'px-surface-sm',\n\t\tcontentX: 'px-surface-sm',\n\t\tcontentY: 'py-0',\n\t\tfooterX: 'px-surface-sm',\n\t\talertX: 'px-surface-sm',\n\t\talertOffsetWithHeader: '-mt-1',\n\t\talertOffsetStandalone: 'mt-0',\n\t},\n\tdefault: {\n\t\tshell: 'gap-space-xl py-[calc(var(--surface-y)+var(--space-xs))]',\n\t\theaderX: 'px-[calc(var(--surface-x)+var(--space-xs))]',\n\t\tcontentX: 'px-[calc(var(--surface-x)+var(--space-xs))]',\n\t\tcontentY: 'py-0',\n\t\tfooterX: 'px-[calc(var(--surface-x)+var(--space-xs))]',\n\t\talertX: 'px-[calc(var(--surface-x)+var(--space-xs))]',\n\t\talertOffsetWithHeader: '-mt-1',\n\t\talertOffsetStandalone: 'mt-0',\n\t},\n};\n\n/**\n * Surface-specific shell classes. The `framed` variant provides one clean\n * card surface with a soft tokenized ring, not nested borders that compete\n * with the example chrome.\n */\nexport const SURFACE_CLASSES: Record<SmartCardSurface, string> = {\n\tcard: 'rounded-lg border border-border bg-card text-card-foreground shadow-xs',\n\tflat: 'bg-transparent text-card-foreground border-none shadow-none',\n\tframed: cn(\n\t\t'rounded-lg border border-border bg-card text-card-foreground shadow-xs',\n\t\t'ring-4 ring-border/30',\n\t),\n};\n","import { Fragment, isValidElement, type ReactNode } from 'react';\n\n/**\n * Predicate used by SmartCard subregions to decide whether each slot\n * warrants rendering its wrapper. Numbers (incl. `0`) and JSX always\n * render; falsy / empty-string content is treated as absent. Fragments\n * recurse into their children.\n */\nexport function hasRenderableContent(content?: ReactNode): boolean {\n\tif (content === null || content === undefined) return false;\n\tif (typeof content === 'boolean') return false;\n\tif (typeof content === 'string') return content.trim().length > 0;\n\tif (typeof content === 'number' || typeof content === 'bigint') return true;\n\tif (Array.isArray(content)) return content.some(hasRenderableContent);\n\tif (isValidElement<{ children?: ReactNode }>(content)) {\n\t\tif (content.type === Fragment) return hasRenderableContent(content.props.children);\n\t\treturn true;\n\t}\n\treturn true;\n}\n","/**\n * Internal layout primitives — re-exported from `smart-card.tsx` for\n * advanced composition (deeply customised layouts that still want the\n * design-system surface tokens). Each primitive is intentionally thin:\n * a single responsibility, a single set of default classes, no business\n * logic. The BEM hooks (`card--component`, `card--header`, etc.) are\n * applied here so the public DOM contract lives in one place.\n */\nimport {\n\ttype ComponentPropsWithRef,\n\ttype ComponentPropsWithoutRef,\n} from 'react';\n\nimport {\n\tCard as CardPrimitive,\n\tCardContent as CardContentPrimitive,\n\tCardDescription as CardDescriptionPrimitive,\n\tCardFooter as CardFooterPrimitive,\n\tCardHeader as CardHeaderPrimitive,\n\tCardTitle as CardTitlePrimitive,\n} from '@/components/ui/card';\nimport Text from '@/components/typography/text';\nimport { cn } from '@/lib/utils';\n\nimport { CARD_BEM } from '../smart-card.tokens';\n\nimport { hasRenderableContent } from './has-renderable-content';\n\nexport function CardShell({ className, ...props }: ComponentPropsWithRef<'div'>) {\n\treturn (\n\t\t<CardPrimitive\n\t\t\tclassName={cn(\n\t\t\t\tCARD_BEM.root,\n\t\t\t\t'flex w-full flex-col gap-3 py-4 ring-0',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport function CardHeader({\n\tclassName,\n\t...props\n}: ComponentPropsWithoutRef<'div'>) {\n\treturn (\n\t\t<CardHeaderPrimitive\n\t\t\tclassName={cn(CARD_BEM.header, 'flex flex-col gap-1 px-4', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport function CardTitle({\n\tclassName,\n\tchildren,\n\t...props\n}: ComponentPropsWithoutRef<'div'>) {\n\tif (!hasRenderableContent(children)) return null;\n\n\tconst isPlainText =\n\t\ttypeof children === 'string' ||\n\t\ttypeof children === 'number' ||\n\t\ttypeof children === 'bigint';\n\n\tif (!isPlainText) {\n\t\treturn (\n\t\t\t<CardTitlePrimitive\n\t\t\t\tclassName={cn(CARD_BEM.title, 'min-w-0 text-base leading-tight font-semibold', className)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</CardTitlePrimitive>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Text\n\t\t\tdata-slot=\"card-title\"\n\t\t\ttag=\"div\"\n\t\t\tsize=\"base\"\n\t\t\tweight=\"semibold\"\n\t\t\tlineHeight=\"tight\"\n\t\t\tclassName={cn(CARD_BEM.title, 'min-w-0 font-semibold', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</Text>\n\t);\n}\n\nexport function CardDescription({\n\tclassName,\n\tchildren,\n\t...props\n}: ComponentPropsWithoutRef<'div'>) {\n\tif (!hasRenderableContent(children)) return null;\n\n\tconst isPlainText =\n\t\ttypeof children === 'string' ||\n\t\ttypeof children === 'number' ||\n\t\ttypeof children === 'bigint';\n\n\tif (!isPlainText) {\n\t\treturn (\n\t\t\t<CardDescriptionPrimitive\n\t\t\t\tclassName={cn(\n\t\t\t\t\tCARD_BEM.description,\n\t\t\t\t\t'text-muted-foreground text-sm',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</CardDescriptionPrimitive>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Text\n\t\t\tdata-slot=\"card-description\"\n\t\t\ttag=\"div\"\n\t\t\ttype=\"secondary\"\n\t\t\tclassName={cn(\n\t\t\t\tCARD_BEM.description,\n\t\t\t\t'text-muted-foreground text-sm',\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</Text>\n\t);\n}\n\nexport function CardContent({\n\tclassName,\n\t...props\n}: ComponentPropsWithoutRef<'div'>) {\n\treturn (\n\t\t<CardContentPrimitive\n\t\t\tclassName={cn(CARD_BEM.content, 'px-4', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport function CardFooter({\n\tclassName,\n\t...props\n}: ComponentPropsWithoutRef<'div'>) {\n\treturn (\n\t\t<CardFooterPrimitive\n\t\t\tclassName={cn(CARD_BEM.footer, 'flex items-center px-4', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n","/**\n * Alert — base notice primitive with semantic variants and responsive actions.\n *\n * Package-owned wrapper inspired by ReUI's alert layout. It intentionally\n * does not edit `src/components/ui/alert.tsx`; consumers import this base\n * alert for the library's typography, token, and DOM-hook contract.\n */\nimport { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nconst alertVariants = cva(\n\t[\n\t\t'alert--component relative grid w-full grid-cols-[0_1fr] items-start gap-y-1 rounded-lg border px-4 py-3 text-left',\n\t\t'has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2.5',\n\t\t'has-[>[data-slot=alert-action]]:sm:grid-cols-[auto_1fr_auto]',\n\t\t'[&>svg]:row-span-2 [&>svg]:mt-0.5 [&>svg]:size-4 [&>svg]:shrink-0',\n\t],\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault: 'border-border bg-card text-card-foreground',\n\t\t\t\tinfo: 'border-info/30 bg-info/5 text-card-foreground [&>svg]:text-info',\n\t\t\t\tsuccess: 'border-success/30 bg-success/10 text-card-foreground [&>svg]:text-success',\n\t\t\t\twarning: 'border-warning/40 bg-warning/10 text-card-foreground [&>svg]:text-warning',\n\t\t\t\tdestructive: 'border-destructive/30 bg-destructive/5 text-card-foreground [&>svg]:text-destructive',\n\t\t\t\tinverse: [\n\t\t\t\t\t'border-foreground bg-foreground text-background',\n\t\t\t\t\t'[&>svg]:text-background',\n\t\t\t\t\t'[&_[data-slot=alert-title]_[data-typography=text]]:text-background',\n\t\t\t\t\t'[&_[data-slot=alert-description]_[data-typography=text]]:text-background/75',\n\t\t\t\t],\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: 'default',\n\t\t},\n\t},\n);\n\nexport type AlertVariant = NonNullable<VariantProps<typeof alertVariants>['variant']>;\n\nexport interface AlertProps\n\textends ComponentPropsWithoutRef<'div'>,\n\t\tVariantProps<typeof alertVariants> {}\n\nconst Alert = forwardRef<HTMLDivElement, AlertProps>(function Alert(\n\t{ className, variant, role = 'alert', ...props },\n\tref,\n) {\n\treturn (\n\t\t<div\n\t\t\tref={ref}\n\t\t\tdata-slot=\"alert\"\n\t\t\tdata-variant={variant ?? 'default'}\n\t\t\trole={role}\n\t\t\tclassName={cn(alertVariants({ variant }), className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\nAlert.displayName = 'Alert';\n\nconst AlertTitle = forwardRef<HTMLDivElement, ComponentPropsWithoutRef<'div'>>(\n\tfunction AlertTitle({ className, children, ...props }, ref) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tdata-slot=\"alert-title\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'alert--title col-start-2 min-h-4 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:opacity-80',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<Text tag=\"span\" weight=\"semibold\" className=\"leading-snug\">\n\t\t\t\t\t{children}\n\t\t\t\t</Text>\n\t\t\t</div>\n\t\t);\n\t},\n);\nAlertTitle.displayName = 'AlertTitle';\n\nconst AlertDescription = forwardRef<HTMLDivElement, ComponentPropsWithoutRef<'div'>>(\n\tfunction AlertDescription({ className, children, ...props }, ref) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tdata-slot=\"alert-description\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'alert--description col-start-2 grid justify-items-start gap-1 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:opacity-80 [&_p]:leading-relaxed',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"leading-normal\">\n\t\t\t\t\t{children}\n\t\t\t\t</Text>\n\t\t\t</div>\n\t\t);\n\t},\n);\nAlertDescription.displayName = 'AlertDescription';\n\nconst AlertAction = forwardRef<HTMLDivElement, ComponentPropsWithoutRef<'div'>>(\n\tfunction AlertAction({ className, ...props }, ref) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tdata-slot=\"alert-action\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'alert--action flex flex-wrap items-center gap-1.5 max-sm:col-start-2 max-sm:mt-2 max-sm:justify-start sm:col-start-3 sm:row-start-1 sm:justify-end sm:self-center',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nAlertAction.displayName = 'AlertAction';\n\nexport { Alert, AlertTitle, AlertDescription, AlertAction, alertVariants };\n","/**\n * Inline alert banner rendered between the header and the card body.\n * Pulls itself up under the header (`alertOffsetWithHeader`) when one\n * exists so the visual gap between header bottom and alert top stays\n * tight; otherwise pushes itself down (`alertOffsetStandalone`) so it\n * doesn't kiss the card top edge.\n */\nimport type { ReactNode } from 'react';\n\nimport { Alert, AlertDescription } from '@/components/base/display/alert';\nimport { cn } from '@/lib/utils';\n\nimport { CARD_BEM, PADDING } from '../smart-card.tokens';\nimport type { CardAlertVariant, CardPadding } from '../smart-card.types';\n\ninterface AlertSlotProps {\n\talert: ReactNode | string;\n\talertVariant: CardAlertVariant;\n\thasHeader: boolean;\n\tpadding: CardPadding;\n}\n\nexport function SmartCardAlert({\n\talert,\n\talertVariant,\n\thasHeader,\n\tpadding,\n}: AlertSlotProps) {\n\tconst tokens = PADDING[padding];\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\tCARD_BEM.alert,\n\t\t\t\ttokens.alertX,\n\t\t\t\thasHeader ? tokens.alertOffsetWithHeader : tokens.alertOffsetStandalone,\n\t\t\t)}\n\t\t>\n\t\t\t<Alert variant={alertVariant}>\n\t\t\t\t<AlertDescription>{alert}</AlertDescription>\n\t\t\t</Alert>\n\t\t</div>\n\t);\n}\n","/**\n * SmartCard actions menu — `⋮` trigger + dropdown of consumer-supplied\n * `SmartCardAction` items. Always renders a 28×28 square trigger so it\n * reads cleanly as a circle (consumer overrides to `rounded-full`) or\n * a rectangle (default `rounded-md`).\n */\nimport { MoreHorizontal } from 'lucide-react';\n\nimport {\n\tDropdownMenu,\n\tDropdownMenuContent,\n\tDropdownMenuItem,\n\tDropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\nimport { cn } from '@/lib/utils';\n\nimport type { SmartCardAction } from '../smart-card.types';\n\ninterface ActionsMenuProps {\n\tactions: SmartCardAction[];\n\tactionsLabel: string;\n}\n\nexport function ActionsMenu({ actions, actionsLabel }: ActionsMenuProps) {\n\treturn (\n\t\t<DropdownMenu>\n\t\t\t<DropdownMenuTrigger\n\t\t\t\ttype=\"button\"\n\t\t\t\taria-label={actionsLabel}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'inline-flex size-control-sm shrink-0 items-center justify-center rounded-radius p-0',\n\t\t\t\t\t'text-muted-foreground hover:bg-accent hover:text-accent-foreground',\n\t\t\t\t\t'outline-none focus-visible:ring-2 focus-visible:ring-ring/50',\n\t\t\t\t\t'transition-colors',\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<MoreHorizontal className=\"size-4\" />\n\t\t\t</DropdownMenuTrigger>\n\t\t\t<DropdownMenuContent align=\"end\" className=\"min-w-36\">\n\t\t\t\t{actions.map((action, index) => (\n\t\t\t\t\t<DropdownMenuItem\n\t\t\t\t\t\tkey={action.id ?? `${action.label}-${index}`}\n\t\t\t\t\t\tonClick={action.onClick}\n\t\t\t\t\t\tdisabled={action.disabled}\n\t\t\t\t\t\tclassName=\"gap-space-lg px-row-x py-row-y text-sm\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{!!action.icon && (\n\t\t\t\t\t\t\t<span className=\"flex shrink-0 items-center\">{action.icon}</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{action.label}\n\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t))}\n\t\t\t</DropdownMenuContent>\n\t\t</DropdownMenu>\n\t);\n}\n","/**\n * SmartCardHeaderRow — the chrome above the card body. Combines icon /\n * title / description / tooltip / suffix on the leading side with the\n * trailing `headerEnd` / `headerAction` slots and the actions menu.\n *\n * `TooltipTrigger_Info` is colocated here because it's only used by the\n * header — keeping it private avoids polluting the public partial\n * surface.\n */\nimport { Info } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { Button } from '@/components/base/buttons';\nimport {\n\tTooltip,\n\tTooltipContent,\n\tTooltipTrigger,\n} from '@/components/base/display/tooltip';\nimport { cn } from '@/lib/utils';\n\nimport { PADDING } from '../smart-card.tokens';\nimport type { CardPadding, SmartCardAction } from '../smart-card.types';\n\nimport { CardHeader, CardTitle, CardDescription } from './card-primitives';\nimport { hasRenderableContent } from './has-renderable-content';\nimport { ActionsMenu } from './smart-card-actions-menu';\n\nfunction TooltipTrigger_Info({ tooltipLabel }: { tooltipLabel: string }) {\n\treturn (\n\t\t<TooltipTrigger\n\t\t\trender={(triggerProps) => {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\tconst passthrough = triggerProps as Record<string, any>;\n\t\t\t\treturn (\n\t\t\t\t\t<Button\n\t\t\t\t\t\t{...passthrough}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\tsize=\"icon-small\"\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'h-5 w-5 text-muted-foreground',\n\t\t\t\t\t\t\tpassthrough.className,\n\t\t\t\t\t\t)}\n\t\t\t\t\t\taria-label={tooltipLabel}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Info className=\"size-3.5\" />\n\t\t\t\t\t</Button>\n\t\t\t\t);\n\t\t\t}}\n\t\t/>\n\t);\n}\n\ninterface HeaderProps {\n\ticon?: ReactNode;\n\ttitle?: ReactNode;\n\ttitleSuffix?: ReactNode;\n\tdescription?: ReactNode;\n\ttooltip?: ReactNode;\n\ttooltipLabel: string;\n\theaderStart?: ReactNode;\n\theaderEnd?: ReactNode;\n\theaderAction?: ReactNode;\n\tactions?: SmartCardAction[];\n\tactionsLabel: string;\n\tpadding: CardPadding;\n\tclassName?: string;\n}\n\nexport function SmartCardHeaderRow({\n\ticon,\n\ttitle,\n\ttitleSuffix,\n\tdescription,\n\ttooltip,\n\ttooltipLabel,\n\theaderStart,\n\theaderEnd,\n\theaderAction,\n\tactions,\n\tactionsLabel,\n\tpadding,\n\tclassName,\n}: HeaderProps) {\n\tconst cardActions = Array.isArray(actions) ? actions : [];\n\tconst hasActions = cardActions.length > 0;\n\n\tconst hasIcon = hasRenderableContent(icon);\n\tconst hasTitle = hasRenderableContent(title);\n\tconst hasTitleSuffix = hasRenderableContent(titleSuffix);\n\tconst hasDescription = hasRenderableContent(description);\n\tconst hasTooltip = hasRenderableContent(tooltip);\n\tconst hasHeaderStart = hasRenderableContent(headerStart);\n\tconst hasHeaderEnd = hasRenderableContent(headerEnd);\n\tconst hasHeaderAction = hasRenderableContent(headerAction);\n\n\tconst showTitleRow = hasIcon || hasTitle || hasTitleSuffix || hasTooltip;\n\tconst showTrailing = hasHeaderEnd || hasHeaderAction || hasActions;\n\n\treturn (\n\t\t<CardHeader\n\t\t\tclassName={cn(\n\t\t\t\t'flex-row items-start justify-between gap-3 pb-0',\n\t\t\t\tPADDING[padding].headerX,\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<div className=\"flex min-w-0 flex-1 flex-col gap-1\">\n\t\t\t\t{!!hasHeaderStart && headerStart}\n\n\t\t\t\t{!!showTitleRow && (\n\t\t\t\t\t<div className=\"flex min-w-0 flex-wrap items-center gap-x-2 gap-y-1\">\n\t\t\t\t\t\t{!!hasIcon && (\n\t\t\t\t\t\t\t<span className=\"flex shrink-0 items-center text-muted-foreground\">\n\t\t\t\t\t\t\t\t{icon}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<CardTitle>{title}</CardTitle>\n\t\t\t\t\t\t{!!hasTitleSuffix && (\n\t\t\t\t\t\t\t<div className=\"flex items-center gap-2\">{titleSuffix}</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!!hasTooltip && (\n\t\t\t\t\t\t\t<Tooltip>\n\t\t\t\t\t\t\t\t<TooltipTrigger_Info tooltipLabel={tooltipLabel} />\n\t\t\t\t\t\t\t\t<TooltipContent>{tooltip}</TooltipContent>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{!!hasDescription && (\n\t\t\t\t\t<CardDescription className=\"text-left\">{description}</CardDescription>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{!!showTrailing && (\n\t\t\t\t<div className=\"flex shrink-0 items-center gap-2\">\n\t\t\t\t\t{!!hasHeaderEnd && headerEnd}\n\t\t\t\t\t{!!hasHeaderAction && headerAction}\n\t\t\t\t\t{!!hasActions && (\n\t\t\t\t\t\t<ActionsMenu actions={cardActions} actionsLabel={actionsLabel} />\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</CardHeader>\n\t);\n}\n","/**\n * SmartCard strings — i18n surface for the chrome the consumer doesn't\n * pass directly. Most copy (title, description, action labels, alert\n * body) flows in via props; the strings here cover the implicit\n * affordances (expand toggle).\n */\n\nexport interface SmartCardStrings {\n\texpandLabel: string;\n\tcollapseLabel: string;\n}\n\nexport const defaultSmartCardStrings: SmartCardStrings = {\n\texpandLabel: 'Expand card',\n\tcollapseLabel: 'Collapse card',\n};\n","/**\n * SmartCardSkeleton — placeholder shell rendered while a SmartCard's\n * data is loading. Picks up the canonical card surface so the loading\n * state visually matches the eventual `SmartCard` it'll replace.\n */\nimport type { ReactNode } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nimport { SURFACE_CLASSES } from '../smart-card.tokens';\n\nimport {\n\tCardContent,\n\tCardHeader,\n\tCardShell,\n\tCardTitle,\n} from './card-primitives';\n\nexport interface SmartCardSkeletonProps {\n\ttitle?: ReactNode;\n\tlines?: number;\n\tclassName?: string;\n}\n\nexport function SmartCardSkeleton({\n\ttitle,\n\tlines = 2,\n\tclassName,\n}: SmartCardSkeletonProps) {\n\tconst SkeletonBar = ({ barClassName }: { barClassName?: string }) => (\n\t\t<div className={cn('animate-pulse rounded bg-muted', barClassName)} />\n\t);\n\n\treturn (\n\t\t<CardShell className={cn(SURFACE_CLASSES.card, 'gap-4 py-6', className)}>\n\t\t\t<CardHeader className=\"flex-col gap-1.5 px-6 pb-0\">\n\t\t\t\t{title ? <CardTitle>{title}</CardTitle> : <SkeletonBar barClassName=\"h-4 w-32\" />}\n\t\t\t</CardHeader>\n\t\t\t<CardContent className=\"space-y-3 px-6 py-0\">\n\t\t\t\t{Array.from({ length: lines }, (_, i) => (\n\t\t\t\t\t<SkeletonBar\n\t\t\t\t\t\tkey={`skel-${String(i)}`}\n\t\t\t\t\t\tbarClassName={cn('h-4', i === 0 ? 'w-full' : 'w-3/4')}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</CardContent>\n\t\t</CardShell>\n\t);\n}\n\nSmartCardSkeleton.displayName = 'SmartCardSkeleton';\n","/**\n * SmartCard — composed card with header (icon, title, suffix, description,\n * tooltip), actions menu, alert banner, header / content / footer slots,\n * surface variants (card / flat / framed), and an opt-in expandable body.\n *\n * The single card primitive everything else builds on — never reach past it\n * to shadcn `Card` directly. The CardShell / CardHeader / CardTitle /\n * CardDescription / CardContent / CardFooter primitives are re-exported\n * for advanced composition (deeply customised layouts that still want the\n * design-system surface tokens). Each subregion paints a BEM-style hook\n * (`card--component`, `card--header`, `card--title`, …) for CSS / test /\n * analytics targeting independent of shadcn's data-slot internals.\n *\n * The file is a thin orchestrator. The actual chrome lives in:\n * - `./smart-card.types.ts` — public prop / variant types\n * - `./smart-card.strings.ts` — i18n (expand toggle copy)\n * - `./smart-card.tokens.ts` — PADDING + SURFACE_CLASSES + CARD_BEM\n * - `./partials/card-primitives.tsx` — CardShell + CardHeader / Title /\n * Description / Content / Footer\n * - `./partials/smart-card-header-row.tsx` — header layout + actions menu\n * - `./partials/smart-card-alert.tsx` — inline alert banner\n * - `./partials/smart-card-actions-menu.tsx` — `⋮` dropdown\n * - `./partials/smart-card-skeleton.tsx` — loading placeholder\n * - `./partials/has-renderable-content.ts` — slot-empty predicate\n */\nimport { ChevronDown } from 'lucide-react';\nimport {\n\ttype CSSProperties,\n\tforwardRef,\n\tuseCallback,\n\tuseState,\n} from 'react';\n\nimport { Button } from '@/components/base/buttons';\nimport { useStrings } from '@/lib/strings';\nimport { useCardConfig } from '@/lib/ui-provider';\nimport { cn } from '@/lib/utils';\n\nimport {\n\tCardContent,\n\tCardFooter,\n\tCardShell,\n} from './partials/card-primitives';\nimport { hasRenderableContent } from './partials/has-renderable-content';\nimport { SmartCardAlert } from './partials/smart-card-alert';\nimport { SmartCardHeaderRow } from './partials/smart-card-header-row';\nimport {\n\tdefaultSmartCardStrings,\n} from './smart-card.strings';\nimport {\n\tPADDING,\n\tSURFACE_CLASSES,\n} from './smart-card.tokens';\nimport type {\n\tCardPadding,\n\tSmartCardProps,\n\tSmartCardSurface,\n} from './smart-card.types';\n\nfunction normalizeCardPadding(padding: CardPadding | string | undefined): CardPadding {\n\tif (padding === 'small' || padding === 'default') return padding;\n\tif (padding === 'sm') return 'small';\n\tif (padding === 'base' || padding === 'lg') return 'default';\n\treturn 'default';\n}\n\nexport const SmartCard = forwardRef<HTMLDivElement, SmartCardProps>(function SmartCard({\n\ticon,\n\ttitle,\n\ttitleSuffix,\n\tdescription,\n\ttooltip,\n\ttooltipAriaLabel = 'Card info',\n\tfooterText,\n\talert,\n\talertVariant = 'default',\n\tsurface,\n\ttransparent = false,\n\tpadding,\n\tactions,\n\tactionsLabel = 'Card actions',\n\theaderAction,\n\theaderStart,\n\theaderEnd,\n\tcontentTop,\n\tcontentBottom,\n\tfooterSlot,\n\theaderDivider,\n\tfooterDivider = false,\n\texpandable = false,\n\tdefaultExpanded = false,\n\texpanded: expandedProp,\n\tonExpandedChange,\n\tchildren,\n\tclassName,\n\theaderClassName,\n\tcontentClassName,\n\tfooterClassName,\n\tstrings: stringsProp,\n}, ref) {\n\tconst {\n\t\tdefaultPadding,\n\t\tdefaultSurface,\n\t\tdefaultHeaderDivider,\n\t} = useCardConfig();\n\tconst resolvedPadding = normalizeCardPadding(padding ?? defaultPadding);\n\tconst tokens = PADDING[resolvedPadding];\n\tconst cardActions = Array.isArray(actions) ? actions : [];\n\tconst strings = useStrings(defaultSmartCardStrings, stringsProp);\n\n\tconst isExpandable = expandable !== false && expandable !== undefined;\n\tconst collapsedMaxHeightRaw =\n\t\ttypeof expandable === 'object' && expandable?.collapsedMaxHeight !== undefined\n\t\t\t? expandable.collapsedMaxHeight\n\t\t\t: '12rem';\n\tconst collapsedMaxHeight =\n\t\ttypeof collapsedMaxHeightRaw === 'number'\n\t\t\t? `${collapsedMaxHeightRaw}px`\n\t\t\t: collapsedMaxHeightRaw;\n\n\tconst isExpandedControlled = expandedProp !== undefined;\n\tconst [internalExpanded, setInternalExpanded] = useState(defaultExpanded);\n\tconst expanded = isExpandedControlled ? expandedProp : internalExpanded;\n\tconst handleToggle = useCallback(() => {\n\t\tconst next = !expanded;\n\t\tif (!isExpandedControlled) setInternalExpanded(next);\n\t\tonExpandedChange?.(next);\n\t}, [expanded, isExpandedControlled, onExpandedChange]);\n\n\tconst hasHeader =\n\t\thasRenderableContent(icon) ||\n\t\thasRenderableContent(title) ||\n\t\thasRenderableContent(description) ||\n\t\tcardActions.length > 0 ||\n\t\thasRenderableContent(headerAction) ||\n\t\thasRenderableContent(headerStart) ||\n\t\thasRenderableContent(headerEnd);\n\n\tconst hasAlert = hasRenderableContent(alert);\n\tconst hasFooterText = hasRenderableContent(footerText);\n\tconst hasFooterSlot = hasRenderableContent(footerSlot);\n\tconst hasContentTop = hasRenderableContent(contentTop);\n\tconst hasContentBottom = hasRenderableContent(contentBottom);\n\n\tconst tooltipLabel =\n\t\ttooltipAriaLabel.trim().length > 0 ? tooltipAriaLabel : 'Card info';\n\n\tconst collapseStyle: CSSProperties | undefined = isExpandable\n\t\t? {\n\t\t\t\tmaxHeight: expanded ? '' : collapsedMaxHeight,\n\t\t\t}\n\t\t: undefined;\n\n\t// Resolve surface — explicit `surface` wins, else legacy `transparent`,\n\t// else the provider default, else the default framed chrome.\n\tconst resolvedSurface: SmartCardSurface =\n\t\tsurface ?? (transparent ? 'flat' : defaultSurface ?? 'framed');\n\tconst resolvedHeaderDivider = headerDivider ?? defaultHeaderDivider ?? false;\n\n\treturn (\n\t\t<CardShell\n\t\t\tref={ref}\n\t\t\tdata-surface={resolvedSurface}\n\t\t\tclassName={cn(\n\t\t\t\tSURFACE_CLASSES[resolvedSurface],\n\t\t\t\ttokens.shell,\n\t\t\t\t// `isExpandable` parks the chevron at `-bottom-4` outside the\n\t\t\t\t// shell — `overflow-visible` lets it render past the card\n\t\t\t\t// edge, otherwise the shadcn primitive's `overflow-hidden`\n\t\t\t\t// clips it.\n\t\t\t\tisExpandable && 'relative pb-1 !overflow-visible',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{!!hasHeader && (\n\t\t\t\t<SmartCardHeaderRow\n\t\t\t\t\ticon={icon}\n\t\t\t\t\ttitle={title}\n\t\t\t\t\ttitleSuffix={titleSuffix}\n\t\t\t\t\tdescription={description}\n\t\t\t\t\ttooltip={tooltip}\n\t\t\t\t\ttooltipLabel={tooltipLabel}\n\t\t\t\t\theaderStart={headerStart}\n\t\t\t\t\theaderEnd={headerEnd}\n\t\t\t\t\theaderAction={headerAction}\n\t\t\t\t\tactions={cardActions}\n\t\t\t\t\tactionsLabel={actionsLabel}\n\t\t\t\t\tpadding={resolvedPadding}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\tresolvedHeaderDivider && 'pb-3 border-b border-border/60',\n\t\t\t\t\t\theaderClassName,\n\t\t\t\t\t)}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t{!!hasAlert && (\n\t\t\t\t<SmartCardAlert\n\t\t\t\t\talert={alert}\n\t\t\t\t\talertVariant={alertVariant}\n\t\t\t\t\thasHeader={hasHeader}\n\t\t\t\t\tpadding={resolvedPadding}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t<CardContent\n\t\t\t\tclassName={cn(\n\t\t\t\t\ttokens.contentX,\n\t\t\t\t\ttokens.contentY,\n\t\t\t\t\tisExpandable &&\n\t\t\t\t\t\t'relative overflow-hidden transition-[max-height] duration-500 ease-in-out',\n\t\t\t\t\tcontentClassName,\n\t\t\t\t)}\n\t\t\t\tstyle={collapseStyle}\n\t\t\t>\n\t\t\t\t{!!hasContentTop && contentTop}\n\t\t\t\t{children}\n\t\t\t\t{!!hasContentBottom && contentBottom}\n\n\t\t\t\t{!!isExpandable && !expanded && (\n\t\t\t\t\t<div\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tclassName=\"from-background pointer-events-none absolute inset-x-0 bottom-0 h-20 rounded-b-lg bg-linear-to-t to-transparent\"\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</CardContent>\n\n\t\t\t{!!hasFooterText && (\n\t\t\t\t<CardFooter\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'justify-end text-xs text-muted-foreground',\n\t\t\t\t\t\ttokens.footerX,\n\t\t\t\t\t\tfooterDivider && 'pt-3 border-t border-border/60',\n\t\t\t\t\t\tfooterClassName,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{footerText}\n\t\t\t\t</CardFooter>\n\t\t\t)}\n\n\t\t\t{!!hasFooterSlot && (\n\t\t\t\t<CardFooter\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'flex-col items-stretch',\n\t\t\t\t\t\ttokens.footerX,\n\t\t\t\t\t\tfooterDivider && 'pt-3 border-t border-border/60',\n\t\t\t\t\t\tfooterClassName,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{footerSlot}\n\t\t\t\t</CardFooter>\n\t\t\t)}\n\n\t\t\t{!!isExpandable && (\n\t\t\t\t<div className=\"absolute -bottom-4 left-1/2 -translate-x-1/2 z-10\">\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\tbuttonStyle=\"outline\"\n\t\t\t\t\t\tsize=\"icon-small\"\n\t\t\t\t\t\tonClick={handleToggle}\n\t\t\t\t\t\taria-expanded={expanded}\n\t\t\t\t\t\taria-label={expanded ? strings.collapseLabel : strings.expandLabel}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'inline-flex size-control-sm items-center justify-center rounded-full',\n\t\t\t\t\t\t\t'border border-border bg-background text-foreground shadow-sm',\n\t\t\t\t\t\t\t'hover:bg-muted/40 transition-colors',\n\t\t\t\t\t\t\t'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/50',\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ChevronDown\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'size-4 transition-transform duration-300',\n\t\t\t\t\t\t\t\texpanded && 'rotate-180',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span className=\"sr-only\">\n\t\t\t\t\t\t\t{expanded ? strings.collapseLabel : strings.expandLabel}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</CardShell>\n\t);\n});\n\nSmartCard.displayName = 'SmartCard';\n\n// ──────────────────────────────────────────────────────────────────────────\n// Re-exports — public surface lives here so `import { ... } from\n// '@/components/base/cards'` keeps working through the file split.\n// ──────────────────────────────────────────────────────────────────────────\n\nexport {\n\tdefaultSmartCardStrings,\n\ttype SmartCardStrings,\n} from './smart-card.strings';\nexport type {\n\tCardAlertVariant,\n\tCardPadding,\n\tSmartCardAction,\n\tSmartCardProps,\n\tSmartCardSkeletonProps,\n\tSmartCardSurface,\n} from './smart-card.types';\nexport {\n\tCardContent,\n\tCardDescription,\n\tCardFooter,\n\tCardHeader,\n\tCardShell,\n\tCardTitle,\n} from './partials/card-primitives';\nexport { SmartCardSkeleton } from './partials/smart-card-skeleton';\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ const e=require("./chunk-CMqjfN_6.cjs"),t=require("../lib/strings.cjs"),n=require("./ui-provider-CrsJ_dGn.cjs"),r=require("../lib/utils.cjs"),i=require("./button-CfQtOuBK.cjs"),a=require("./tooltip-mvxZV_Lu.cjs"),o=require("./typography-CWEobAJV.cjs"),s=require("./dropdown-menu-CHQzQWUK.cjs");let c=require("react");c=e.t(c,1);let l=require("react/jsx-runtime"),u=require("lucide-react"),d=require("class-variance-authority");function f({className:e,size:t=`default`,...n}){return(0,l.jsx)(`div`,{"data-slot":`card`,"data-size":t,className:r.cn(`ring-foreground/10 bg-card text-card-foreground gap-6 overflow-hidden rounded-xl py-6 text-sm shadow-xs ring-1 has-[>img:first-child]:pt-0 data-[size=sm]:gap-4 data-[size=sm]:py-4 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl group/card flex flex-col`,e),...n})}function p({className:e,...t}){return(0,l.jsx)(`div`,{"data-slot":`card-header`,className:r.cn(`gap-1 rounded-t-xl px-6 group-data-[size=sm]/card:px-4 [.border-b]:pb-6 group-data-[size=sm]/card:[.border-b]:pb-4 group/card-header @container/card-header grid auto-rows-min items-start has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto]`,e),...t})}function m({className:e,...t}){return(0,l.jsx)(`div`,{"data-slot":`card-title`,className:r.cn(`text-base leading-normal font-medium group-data-[size=sm]/card:text-sm`,e),...t})}function h({className:e,...t}){return(0,l.jsx)(`div`,{"data-slot":`card-description`,className:r.cn(`text-muted-foreground text-sm`,e),...t})}function g({className:e,...t}){return(0,l.jsx)(`div`,{"data-slot":`card-content`,className:r.cn(`px-6 group-data-[size=sm]/card:px-4`,e),...t})}function _({className:e,...t}){return(0,l.jsx)(`div`,{"data-slot":`card-footer`,className:r.cn(`rounded-b-xl px-6 group-data-[size=sm]/card:px-4 [.border-t]:pt-6 group-data-[size=sm]/card:[.border-t]:pt-4 flex items-center`,e),...t})}var v={root:`card--component`,header:`card--header`,title:`card--title`,description:`card--description`,content:`card--content`,footer:`card--footer`,alert:`card--alert`},y={small:{shell:`gap-space-lg py-surface-sm`,headerX:`px-surface-sm`,contentX:`px-surface-sm`,contentY:`py-0`,footerX:`px-surface-sm`,alertX:`px-surface-sm`,alertOffsetWithHeader:`-mt-1`,alertOffsetStandalone:`mt-0`},default:{shell:`gap-space-xl py-[calc(var(--surface-y)+var(--space-xs))]`,headerX:`px-[calc(var(--surface-x)+var(--space-xs))]`,contentX:`px-[calc(var(--surface-x)+var(--space-xs))]`,contentY:`py-0`,footerX:`px-[calc(var(--surface-x)+var(--space-xs))]`,alertX:`px-[calc(var(--surface-x)+var(--space-xs))]`,alertOffsetWithHeader:`-mt-1`,alertOffsetStandalone:`mt-0`}},b={card:`rounded-lg border border-border bg-card text-card-foreground shadow-xs`,flat:`bg-transparent text-card-foreground border-none shadow-none`,framed:r.cn(`rounded-lg border border-border bg-card text-card-foreground shadow-xs`,`ring-4 ring-border/30`)};function x(e){return e==null||typeof e==`boolean`?!1:typeof e==`string`?e.trim().length>0:typeof e==`number`||typeof e==`bigint`?!0:Array.isArray(e)?e.some(x):(0,c.isValidElement)(e)&&e.type===c.Fragment?x(e.props.children):!0}function S({className:e,...t}){return(0,l.jsx)(f,{className:r.cn(v.root,`flex w-full flex-col gap-3 py-4 ring-0`,e),...t})}function C({className:e,...t}){return(0,l.jsx)(p,{className:r.cn(v.header,`flex flex-col gap-1 px-4`,e),...t})}function w({className:e,children:t,...n}){return x(t)?typeof t==`string`||typeof t==`number`||typeof t==`bigint`?(0,l.jsx)(o.s,{"data-slot":`card-title`,tag:`div`,size:`base`,weight:`semibold`,lineHeight:`tight`,className:r.cn(v.title,`min-w-0 font-semibold`,e),...n,children:t}):(0,l.jsx)(m,{className:r.cn(v.title,`min-w-0 text-base leading-tight font-semibold`,e),...n,children:t}):null}function T({className:e,children:t,...n}){return x(t)?typeof t==`string`||typeof t==`number`||typeof t==`bigint`?(0,l.jsx)(o.s,{"data-slot":`card-description`,tag:`div`,type:`secondary`,className:r.cn(v.description,`text-muted-foreground text-sm`,e),...n,children:t}):(0,l.jsx)(h,{className:r.cn(v.description,`text-muted-foreground text-sm`,e),...n,children:t}):null}function E({className:e,...t}){return(0,l.jsx)(g,{className:r.cn(v.content,`px-4`,e),...t})}function D({className:e,...t}){return(0,l.jsx)(_,{className:r.cn(v.footer,`flex items-center px-4`,e),...t})}var O=(0,d.cva)([`alert--component relative grid w-full grid-cols-[0_1fr] items-start gap-y-1 rounded-lg border px-4 py-3 text-left`,`has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2.5`,`has-[>[data-slot=alert-action]]:sm:grid-cols-[auto_1fr_auto]`,`[&>svg]:row-span-2 [&>svg]:mt-0.5 [&>svg]:size-4 [&>svg]:shrink-0`],{variants:{variant:{default:`border-border bg-card text-card-foreground`,info:`border-info/30 bg-info/5 text-card-foreground [&>svg]:text-info`,success:`border-success/30 bg-success/10 text-card-foreground [&>svg]:text-success`,warning:`border-warning/40 bg-warning/10 text-card-foreground [&>svg]:text-warning`,destructive:`border-destructive/30 bg-destructive/5 text-card-foreground [&>svg]:text-destructive`,inverse:[`border-foreground bg-foreground text-background`,`[&>svg]:text-background`,`[&_[data-slot=alert-title]_[data-typography=text]]:text-background`,`[&_[data-slot=alert-description]_[data-typography=text]]:text-background/75`]}},defaultVariants:{variant:`default`}}),k=(0,c.forwardRef)(function({className:e,variant:t,role:n=`alert`,...i},a){return(0,l.jsx)(`div`,{ref:a,"data-slot":`alert`,"data-variant":t??`default`,role:n,className:r.cn(O({variant:t}),e),...i})});k.displayName=`Alert`;var A=(0,c.forwardRef)(function({className:e,children:t,...n},i){return(0,l.jsx)(`div`,{ref:i,"data-slot":`alert-title`,className:r.cn(`alert--title col-start-2 min-h-4 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:opacity-80`,e),...n,children:(0,l.jsx)(o.s,{tag:`span`,weight:`semibold`,className:`leading-snug`,children:t})})});A.displayName=`AlertTitle`;var j=(0,c.forwardRef)(function({className:e,children:t,...n},i){return(0,l.jsx)(`div`,{ref:i,"data-slot":`alert-description`,className:r.cn(`alert--description col-start-2 grid justify-items-start gap-1 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:opacity-80 [&_p]:leading-relaxed`,e),...n,children:(0,l.jsx)(o.s,{tag:`span`,size:`xs`,type:`secondary`,className:`leading-normal`,children:t})})});j.displayName=`AlertDescription`;var M=(0,c.forwardRef)(function({className:e,...t},n){return(0,l.jsx)(`div`,{ref:n,"data-slot":`alert-action`,className:r.cn(`alert--action flex flex-wrap items-center gap-1.5 max-sm:col-start-2 max-sm:mt-2 max-sm:justify-start sm:col-start-3 sm:row-start-1 sm:justify-end sm:self-center`,e),...t})});M.displayName=`AlertAction`;function ee({alert:e,alertVariant:t,hasHeader:n,padding:i}){let a=y[i];return(0,l.jsx)(`div`,{className:r.cn(v.alert,a.alertX,n?a.alertOffsetWithHeader:a.alertOffsetStandalone),children:(0,l.jsx)(k,{variant:t,children:(0,l.jsx)(j,{children:e})})})}function N({actions:e,actionsLabel:t}){return(0,l.jsxs)(s.t,{children:[(0,l.jsx)(s.g,{type:`button`,"aria-label":t,className:r.cn(`inline-flex size-control-sm shrink-0 items-center justify-center rounded-radius p-0`,`text-muted-foreground hover:bg-accent hover:text-accent-foreground`,`outline-none focus-visible:ring-2 focus-visible:ring-ring/50`,`transition-colors`),children:(0,l.jsx)(u.MoreHorizontal,{className:`size-4`})}),(0,l.jsx)(s.r,{align:`end`,className:`min-w-36`,children:e.map((e,t)=>(0,l.jsxs)(s.a,{onClick:e.onClick,disabled:e.disabled,className:`gap-space-lg px-row-x py-row-y text-sm`,children:[!!e.icon&&(0,l.jsx)(`span`,{className:`flex shrink-0 items-center`,children:e.icon}),e.label]},e.id??`${e.label}-${t}`))})]})}function P({tooltipLabel:e}){return(0,l.jsx)(a.i,{render:t=>{let n=t;return(0,l.jsx)(i.t,{...n,type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`icon-small`,className:r.cn(`h-5 w-5 text-muted-foreground`,n.className),"aria-label":e,children:(0,l.jsx)(u.Info,{className:`size-3.5`})})}})}function F({icon:e,title:t,titleSuffix:n,description:i,tooltip:o,tooltipLabel:s,headerStart:c,headerEnd:u,headerAction:d,actions:f,actionsLabel:p,padding:m,className:h}){let g=Array.isArray(f)?f:[],_=g.length>0,v=x(e),b=x(t),S=x(n),E=x(i),D=x(o),O=x(c),k=x(u),A=x(d),j=v||b||S||D,M=k||A||_;return(0,l.jsxs)(C,{className:r.cn(`flex-row items-start justify-between gap-3 pb-0`,y[m].headerX,h),children:[(0,l.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-1`,children:[!!O&&c,!!j&&(0,l.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-x-2 gap-y-1`,children:[!!v&&(0,l.jsx)(`span`,{className:`flex shrink-0 items-center text-muted-foreground`,children:e}),(0,l.jsx)(w,{children:t}),!!S&&(0,l.jsx)(`div`,{className:`flex items-center gap-2`,children:n}),!!D&&(0,l.jsxs)(a.t,{children:[(0,l.jsx)(P,{tooltipLabel:s}),(0,l.jsx)(a.n,{children:o})]})]}),!!E&&(0,l.jsx)(T,{className:`text-left`,children:i})]}),!!M&&(0,l.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[!!k&&u,!!A&&d,!!_&&(0,l.jsx)(N,{actions:g,actionsLabel:p})]})]})}var I={expandLabel:`Expand card`,collapseLabel:`Collapse card`};function L({title:e,lines:t=2,className:n}){let i=({barClassName:e})=>(0,l.jsx)(`div`,{className:r.cn(`animate-pulse rounded bg-muted`,e)});return(0,l.jsxs)(S,{className:r.cn(b.card,`gap-4 py-6`,n),children:[(0,l.jsx)(C,{className:`flex-col gap-1.5 px-6 pb-0`,children:e?(0,l.jsx)(w,{children:e}):(0,l.jsx)(i,{barClassName:`h-4 w-32`})}),(0,l.jsx)(E,{className:`space-y-3 px-6 py-0`,children:Array.from({length:t},(e,t)=>(0,l.jsx)(i,{barClassName:r.cn(`h-4`,t===0?`w-full`:`w-3/4`)},`skel-${String(t)}`))})]})}L.displayName=`SmartCardSkeleton`;function te(e){return e===`small`||e==="default"?e:e===`sm`?`small`:`default`}var R=(0,c.forwardRef)(function({icon:e,title:a,titleSuffix:o,description:s,tooltip:d,tooltipAriaLabel:f=`Card info`,footerText:p,alert:m,alertVariant:h=`default`,surface:g,transparent:_=!1,padding:v,actions:C,actionsLabel:w=`Card actions`,headerAction:T,headerStart:O,headerEnd:k,contentTop:A,contentBottom:j,footerSlot:M,headerDivider:N,footerDivider:P=!1,expandable:L=!1,defaultExpanded:R=!1,expanded:z,onExpandedChange:B,children:ne,className:re,headerClassName:ie,contentClassName:ae,footerClassName:V,strings:oe},se){let{defaultPadding:ce,defaultSurface:le,defaultHeaderDivider:H}=n.n(),U=te(v??ce),W=y[U],G=Array.isArray(C)?C:[],K=t.useStrings(I,oe),q=L!==!1&&L!==void 0,J=typeof L==`object`&&L?.collapsedMaxHeight!==void 0?L.collapsedMaxHeight:`12rem`,ue=typeof J==`number`?`${J}px`:J,Y=z!==void 0,[de,fe]=(0,c.useState)(R),X=Y?z:de,pe=(0,c.useCallback)(()=>{let e=!X;Y||fe(e),B?.(e)},[X,Y,B]),Z=x(e)||x(a)||x(s)||G.length>0||x(T)||x(O)||x(k),me=x(m),he=x(p),ge=x(M),_e=x(A),Q=x(j),ve=f.trim().length>0?f:`Card info`,ye=q?{maxHeight:X?``:ue}:void 0,$=g??(_?`flat`:le??`framed`),be=N??H??!1;return(0,l.jsxs)(S,{ref:se,"data-surface":$,className:r.cn(b[$],W.shell,q&&`relative pb-1 !overflow-visible`,re),children:[!!Z&&(0,l.jsx)(F,{icon:e,title:a,titleSuffix:o,description:s,tooltip:d,tooltipLabel:ve,headerStart:O,headerEnd:k,headerAction:T,actions:G,actionsLabel:w,padding:U,className:r.cn(be&&`pb-3 border-b border-border/60`,ie)}),!!me&&(0,l.jsx)(ee,{alert:m,alertVariant:h,hasHeader:Z,padding:U}),(0,l.jsxs)(E,{className:r.cn(W.contentX,W.contentY,q&&`relative overflow-hidden transition-[max-height] duration-500 ease-in-out`,ae),style:ye,children:[!!_e&&A,ne,!!Q&&j,!!q&&!X&&(0,l.jsx)(`div`,{"aria-hidden":`true`,className:`from-background pointer-events-none absolute inset-x-0 bottom-0 h-20 rounded-b-lg bg-linear-to-t to-transparent`})]}),!!he&&(0,l.jsx)(D,{className:r.cn(`justify-end text-xs text-muted-foreground`,W.footerX,P&&`pt-3 border-t border-border/60`,V),children:p}),!!ge&&(0,l.jsx)(D,{className:r.cn(`flex-col items-stretch`,W.footerX,P&&`pt-3 border-t border-border/60`,V),children:M}),!!q&&(0,l.jsx)(`div`,{className:`absolute -bottom-4 left-1/2 -translate-x-1/2 z-10`,children:(0,l.jsxs)(i.t,{type:`button`,variant:`secondary`,buttonStyle:`outline`,size:`icon-small`,onClick:pe,"aria-expanded":X,"aria-label":X?K.collapseLabel:K.expandLabel,className:r.cn(`inline-flex size-control-sm items-center justify-center rounded-full`,`border border-border bg-background text-foreground shadow-sm`,`hover:bg-muted/40 transition-colors`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/50`),children:[(0,l.jsx)(u.ChevronDown,{"aria-hidden":`true`,className:r.cn(`size-4 transition-transform duration-300`,X&&`rotate-180`)}),(0,l.jsx)(`span`,{className:`sr-only`,children:X?K.collapseLabel:K.expandLabel})]})})]})});R.displayName=`SmartCard`,Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,"f",{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,"m",{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,"p",{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return I}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return T}});
2
+ //# sourceMappingURL=cards-m03XN10f.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cards-m03XN10f.cjs","names":[],"sources":["../../src/components/ui/card.tsx","../../src/components/base/cards/smart-card.tokens.ts","../../src/components/base/cards/partials/has-renderable-content.ts","../../src/components/base/cards/partials/card-primitives.tsx","../../src/components/base/display/alert.tsx","../../src/components/base/cards/partials/smart-card-alert.tsx","../../src/components/base/cards/partials/smart-card-actions-menu.tsx","../../src/components/base/cards/partials/smart-card-header-row.tsx","../../src/components/base/cards/smart-card.strings.ts","../../src/components/base/cards/partials/smart-card-skeleton.tsx","../../src/components/base/cards/smart-card.tsx"],"sourcesContent":["import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Card({\n className,\n size = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & { size?: \"default\" | \"sm\" }) {\n return (\n <div\n data-slot=\"card\"\n data-size={size}\n className={cn(\"ring-foreground/10 bg-card text-card-foreground gap-6 overflow-hidden rounded-xl py-6 text-sm shadow-xs ring-1 has-[>img:first-child]:pt-0 data-[size=sm]:gap-4 data-[size=sm]:py-4 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl group/card flex flex-col\", className)}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"gap-1 rounded-t-xl px-6 group-data-[size=sm]/card:px-4 [.border-b]:pb-6 group-data-[size=sm]/card:[.border-b]:pb-4 group/card-header @container/card-header grid auto-rows-min items-start has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto]\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\"text-base leading-normal font-medium group-data-[size=sm]/card:text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n )\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(\n \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"px-6 group-data-[size=sm]/card:px-4\", className)}\n {...props}\n />\n )\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\"rounded-b-xl px-6 group-data-[size=sm]/card:px-4 [.border-t]:pt-6 group-data-[size=sm]/card:[.border-t]:pt-4 flex items-center\", className)}\n {...props}\n />\n )\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n}\n","import { cn } from '@/lib/utils';\n\nimport type { CardPadding, SmartCardSurface } from './smart-card.types';\n\n/**\n * BEM-style hooks applied to every SmartCard subregion. Library\n * consumers can target them in CSS / tests / analytics without\n * relying on shadcn's data-slot attributes (which are framework\n * internals). Keep these names consistent — they are part of the\n * public DOM contract.\n */\nexport const CARD_BEM = {\n\troot: 'card--component',\n\theader: 'card--header',\n\ttitle: 'card--title',\n\tdescription: 'card--description',\n\tcontent: 'card--content',\n\tfooter: 'card--footer',\n\talert: 'card--alert',\n} as const;\n\ninterface PaddingTokens {\n\tshell: string;\n\theaderX: string;\n\tcontentX: string;\n\tcontentY: string;\n\tfooterX: string;\n\talertX: string;\n\t/** Vertical offset applied when alert sits BELOW the header (pulls it up). */\n\talertOffsetWithHeader: string;\n\t/** Vertical spacing applied when alert is the first content (no header). */\n\talertOffsetStandalone: string;\n}\n\nexport const PADDING: Record<CardPadding, PaddingTokens> = {\n\tsmall: {\n\t\tshell: 'gap-space-lg py-surface-sm',\n\t\theaderX: 'px-surface-sm',\n\t\tcontentX: 'px-surface-sm',\n\t\tcontentY: 'py-0',\n\t\tfooterX: 'px-surface-sm',\n\t\talertX: 'px-surface-sm',\n\t\talertOffsetWithHeader: '-mt-1',\n\t\talertOffsetStandalone: 'mt-0',\n\t},\n\tdefault: {\n\t\tshell: 'gap-space-xl py-[calc(var(--surface-y)+var(--space-xs))]',\n\t\theaderX: 'px-[calc(var(--surface-x)+var(--space-xs))]',\n\t\tcontentX: 'px-[calc(var(--surface-x)+var(--space-xs))]',\n\t\tcontentY: 'py-0',\n\t\tfooterX: 'px-[calc(var(--surface-x)+var(--space-xs))]',\n\t\talertX: 'px-[calc(var(--surface-x)+var(--space-xs))]',\n\t\talertOffsetWithHeader: '-mt-1',\n\t\talertOffsetStandalone: 'mt-0',\n\t},\n};\n\n/**\n * Surface-specific shell classes. The `framed` variant provides one clean\n * card surface with a soft tokenized ring, not nested borders that compete\n * with the example chrome.\n */\nexport const SURFACE_CLASSES: Record<SmartCardSurface, string> = {\n\tcard: 'rounded-lg border border-border bg-card text-card-foreground shadow-xs',\n\tflat: 'bg-transparent text-card-foreground border-none shadow-none',\n\tframed: cn(\n\t\t'rounded-lg border border-border bg-card text-card-foreground shadow-xs',\n\t\t'ring-4 ring-border/30',\n\t),\n};\n","import { Fragment, isValidElement, type ReactNode } from 'react';\n\n/**\n * Predicate used by SmartCard subregions to decide whether each slot\n * warrants rendering its wrapper. Numbers (incl. `0`) and JSX always\n * render; falsy / empty-string content is treated as absent. Fragments\n * recurse into their children.\n */\nexport function hasRenderableContent(content?: ReactNode): boolean {\n\tif (content === null || content === undefined) return false;\n\tif (typeof content === 'boolean') return false;\n\tif (typeof content === 'string') return content.trim().length > 0;\n\tif (typeof content === 'number' || typeof content === 'bigint') return true;\n\tif (Array.isArray(content)) return content.some(hasRenderableContent);\n\tif (isValidElement<{ children?: ReactNode }>(content)) {\n\t\tif (content.type === Fragment) return hasRenderableContent(content.props.children);\n\t\treturn true;\n\t}\n\treturn true;\n}\n","/**\n * Internal layout primitives — re-exported from `smart-card.tsx` for\n * advanced composition (deeply customised layouts that still want the\n * design-system surface tokens). Each primitive is intentionally thin:\n * a single responsibility, a single set of default classes, no business\n * logic. The BEM hooks (`card--component`, `card--header`, etc.) are\n * applied here so the public DOM contract lives in one place.\n */\nimport {\n\ttype ComponentPropsWithRef,\n\ttype ComponentPropsWithoutRef,\n} from 'react';\n\nimport {\n\tCard as CardPrimitive,\n\tCardContent as CardContentPrimitive,\n\tCardDescription as CardDescriptionPrimitive,\n\tCardFooter as CardFooterPrimitive,\n\tCardHeader as CardHeaderPrimitive,\n\tCardTitle as CardTitlePrimitive,\n} from '@/components/ui/card';\nimport Text from '@/components/typography/text';\nimport { cn } from '@/lib/utils';\n\nimport { CARD_BEM } from '../smart-card.tokens';\n\nimport { hasRenderableContent } from './has-renderable-content';\n\nexport function CardShell({ className, ...props }: ComponentPropsWithRef<'div'>) {\n\treturn (\n\t\t<CardPrimitive\n\t\t\tclassName={cn(\n\t\t\t\tCARD_BEM.root,\n\t\t\t\t'flex w-full flex-col gap-3 py-4 ring-0',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport function CardHeader({\n\tclassName,\n\t...props\n}: ComponentPropsWithoutRef<'div'>) {\n\treturn (\n\t\t<CardHeaderPrimitive\n\t\t\tclassName={cn(CARD_BEM.header, 'flex flex-col gap-1 px-4', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport function CardTitle({\n\tclassName,\n\tchildren,\n\t...props\n}: ComponentPropsWithoutRef<'div'>) {\n\tif (!hasRenderableContent(children)) return null;\n\n\tconst isPlainText =\n\t\ttypeof children === 'string' ||\n\t\ttypeof children === 'number' ||\n\t\ttypeof children === 'bigint';\n\n\tif (!isPlainText) {\n\t\treturn (\n\t\t\t<CardTitlePrimitive\n\t\t\t\tclassName={cn(CARD_BEM.title, 'min-w-0 text-base leading-tight font-semibold', className)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</CardTitlePrimitive>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Text\n\t\t\tdata-slot=\"card-title\"\n\t\t\ttag=\"div\"\n\t\t\tsize=\"base\"\n\t\t\tweight=\"semibold\"\n\t\t\tlineHeight=\"tight\"\n\t\t\tclassName={cn(CARD_BEM.title, 'min-w-0 font-semibold', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</Text>\n\t);\n}\n\nexport function CardDescription({\n\tclassName,\n\tchildren,\n\t...props\n}: ComponentPropsWithoutRef<'div'>) {\n\tif (!hasRenderableContent(children)) return null;\n\n\tconst isPlainText =\n\t\ttypeof children === 'string' ||\n\t\ttypeof children === 'number' ||\n\t\ttypeof children === 'bigint';\n\n\tif (!isPlainText) {\n\t\treturn (\n\t\t\t<CardDescriptionPrimitive\n\t\t\t\tclassName={cn(\n\t\t\t\t\tCARD_BEM.description,\n\t\t\t\t\t'text-muted-foreground text-sm',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</CardDescriptionPrimitive>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Text\n\t\t\tdata-slot=\"card-description\"\n\t\t\ttag=\"div\"\n\t\t\ttype=\"secondary\"\n\t\t\tclassName={cn(\n\t\t\t\tCARD_BEM.description,\n\t\t\t\t'text-muted-foreground text-sm',\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</Text>\n\t);\n}\n\nexport function CardContent({\n\tclassName,\n\t...props\n}: ComponentPropsWithoutRef<'div'>) {\n\treturn (\n\t\t<CardContentPrimitive\n\t\t\tclassName={cn(CARD_BEM.content, 'px-4', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport function CardFooter({\n\tclassName,\n\t...props\n}: ComponentPropsWithoutRef<'div'>) {\n\treturn (\n\t\t<CardFooterPrimitive\n\t\t\tclassName={cn(CARD_BEM.footer, 'flex items-center px-4', className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n","/**\n * Alert — base notice primitive with semantic variants and responsive actions.\n *\n * Package-owned wrapper inspired by ReUI's alert layout. It intentionally\n * does not edit `src/components/ui/alert.tsx`; consumers import this base\n * alert for the library's typography, token, and DOM-hook contract.\n */\nimport { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nconst alertVariants = cva(\n\t[\n\t\t'alert--component relative grid w-full grid-cols-[0_1fr] items-start gap-y-1 rounded-lg border px-4 py-3 text-left',\n\t\t'has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2.5',\n\t\t'has-[>[data-slot=alert-action]]:sm:grid-cols-[auto_1fr_auto]',\n\t\t'[&>svg]:row-span-2 [&>svg]:mt-0.5 [&>svg]:size-4 [&>svg]:shrink-0',\n\t],\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault: 'border-border bg-card text-card-foreground',\n\t\t\t\tinfo: 'border-info/30 bg-info/5 text-card-foreground [&>svg]:text-info',\n\t\t\t\tsuccess: 'border-success/30 bg-success/10 text-card-foreground [&>svg]:text-success',\n\t\t\t\twarning: 'border-warning/40 bg-warning/10 text-card-foreground [&>svg]:text-warning',\n\t\t\t\tdestructive: 'border-destructive/30 bg-destructive/5 text-card-foreground [&>svg]:text-destructive',\n\t\t\t\tinverse: [\n\t\t\t\t\t'border-foreground bg-foreground text-background',\n\t\t\t\t\t'[&>svg]:text-background',\n\t\t\t\t\t'[&_[data-slot=alert-title]_[data-typography=text]]:text-background',\n\t\t\t\t\t'[&_[data-slot=alert-description]_[data-typography=text]]:text-background/75',\n\t\t\t\t],\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: 'default',\n\t\t},\n\t},\n);\n\nexport type AlertVariant = NonNullable<VariantProps<typeof alertVariants>['variant']>;\n\nexport interface AlertProps\n\textends ComponentPropsWithoutRef<'div'>,\n\t\tVariantProps<typeof alertVariants> {}\n\nconst Alert = forwardRef<HTMLDivElement, AlertProps>(function Alert(\n\t{ className, variant, role = 'alert', ...props },\n\tref,\n) {\n\treturn (\n\t\t<div\n\t\t\tref={ref}\n\t\t\tdata-slot=\"alert\"\n\t\t\tdata-variant={variant ?? 'default'}\n\t\t\trole={role}\n\t\t\tclassName={cn(alertVariants({ variant }), className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\nAlert.displayName = 'Alert';\n\nconst AlertTitle = forwardRef<HTMLDivElement, ComponentPropsWithoutRef<'div'>>(\n\tfunction AlertTitle({ className, children, ...props }, ref) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tdata-slot=\"alert-title\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'alert--title col-start-2 min-h-4 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:opacity-80',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<Text tag=\"span\" weight=\"semibold\" className=\"leading-snug\">\n\t\t\t\t\t{children}\n\t\t\t\t</Text>\n\t\t\t</div>\n\t\t);\n\t},\n);\nAlertTitle.displayName = 'AlertTitle';\n\nconst AlertDescription = forwardRef<HTMLDivElement, ComponentPropsWithoutRef<'div'>>(\n\tfunction AlertDescription({ className, children, ...props }, ref) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tdata-slot=\"alert-description\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'alert--description col-start-2 grid justify-items-start gap-1 [&_a]:underline [&_a]:underline-offset-3 [&_a]:hover:opacity-80 [&_p]:leading-relaxed',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<Text tag=\"span\" size=\"xs\" type=\"secondary\" className=\"leading-normal\">\n\t\t\t\t\t{children}\n\t\t\t\t</Text>\n\t\t\t</div>\n\t\t);\n\t},\n);\nAlertDescription.displayName = 'AlertDescription';\n\nconst AlertAction = forwardRef<HTMLDivElement, ComponentPropsWithoutRef<'div'>>(\n\tfunction AlertAction({ className, ...props }, ref) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tdata-slot=\"alert-action\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'alert--action flex flex-wrap items-center gap-1.5 max-sm:col-start-2 max-sm:mt-2 max-sm:justify-start sm:col-start-3 sm:row-start-1 sm:justify-end sm:self-center',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nAlertAction.displayName = 'AlertAction';\n\nexport { Alert, AlertTitle, AlertDescription, AlertAction, alertVariants };\n","/**\n * Inline alert banner rendered between the header and the card body.\n * Pulls itself up under the header (`alertOffsetWithHeader`) when one\n * exists so the visual gap between header bottom and alert top stays\n * tight; otherwise pushes itself down (`alertOffsetStandalone`) so it\n * doesn't kiss the card top edge.\n */\nimport type { ReactNode } from 'react';\n\nimport { Alert, AlertDescription } from '@/components/base/display/alert';\nimport { cn } from '@/lib/utils';\n\nimport { CARD_BEM, PADDING } from '../smart-card.tokens';\nimport type { CardAlertVariant, CardPadding } from '../smart-card.types';\n\ninterface AlertSlotProps {\n\talert: ReactNode | string;\n\talertVariant: CardAlertVariant;\n\thasHeader: boolean;\n\tpadding: CardPadding;\n}\n\nexport function SmartCardAlert({\n\talert,\n\talertVariant,\n\thasHeader,\n\tpadding,\n}: AlertSlotProps) {\n\tconst tokens = PADDING[padding];\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\tCARD_BEM.alert,\n\t\t\t\ttokens.alertX,\n\t\t\t\thasHeader ? tokens.alertOffsetWithHeader : tokens.alertOffsetStandalone,\n\t\t\t)}\n\t\t>\n\t\t\t<Alert variant={alertVariant}>\n\t\t\t\t<AlertDescription>{alert}</AlertDescription>\n\t\t\t</Alert>\n\t\t</div>\n\t);\n}\n","/**\n * SmartCard actions menu — `⋮` trigger + dropdown of consumer-supplied\n * `SmartCardAction` items. Always renders a 28×28 square trigger so it\n * reads cleanly as a circle (consumer overrides to `rounded-full`) or\n * a rectangle (default `rounded-md`).\n */\nimport { MoreHorizontal } from 'lucide-react';\n\nimport {\n\tDropdownMenu,\n\tDropdownMenuContent,\n\tDropdownMenuItem,\n\tDropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\nimport { cn } from '@/lib/utils';\n\nimport type { SmartCardAction } from '../smart-card.types';\n\ninterface ActionsMenuProps {\n\tactions: SmartCardAction[];\n\tactionsLabel: string;\n}\n\nexport function ActionsMenu({ actions, actionsLabel }: ActionsMenuProps) {\n\treturn (\n\t\t<DropdownMenu>\n\t\t\t<DropdownMenuTrigger\n\t\t\t\ttype=\"button\"\n\t\t\t\taria-label={actionsLabel}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'inline-flex size-control-sm shrink-0 items-center justify-center rounded-radius p-0',\n\t\t\t\t\t'text-muted-foreground hover:bg-accent hover:text-accent-foreground',\n\t\t\t\t\t'outline-none focus-visible:ring-2 focus-visible:ring-ring/50',\n\t\t\t\t\t'transition-colors',\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<MoreHorizontal className=\"size-4\" />\n\t\t\t</DropdownMenuTrigger>\n\t\t\t<DropdownMenuContent align=\"end\" className=\"min-w-36\">\n\t\t\t\t{actions.map((action, index) => (\n\t\t\t\t\t<DropdownMenuItem\n\t\t\t\t\t\tkey={action.id ?? `${action.label}-${index}`}\n\t\t\t\t\t\tonClick={action.onClick}\n\t\t\t\t\t\tdisabled={action.disabled}\n\t\t\t\t\t\tclassName=\"gap-space-lg px-row-x py-row-y text-sm\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{!!action.icon && (\n\t\t\t\t\t\t\t<span className=\"flex shrink-0 items-center\">{action.icon}</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{action.label}\n\t\t\t\t\t</DropdownMenuItem>\n\t\t\t\t))}\n\t\t\t</DropdownMenuContent>\n\t\t</DropdownMenu>\n\t);\n}\n","/**\n * SmartCardHeaderRow — the chrome above the card body. Combines icon /\n * title / description / tooltip / suffix on the leading side with the\n * trailing `headerEnd` / `headerAction` slots and the actions menu.\n *\n * `TooltipTrigger_Info` is colocated here because it's only used by the\n * header — keeping it private avoids polluting the public partial\n * surface.\n */\nimport { Info } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { Button } from '@/components/base/buttons';\nimport {\n\tTooltip,\n\tTooltipContent,\n\tTooltipTrigger,\n} from '@/components/base/display/tooltip';\nimport { cn } from '@/lib/utils';\n\nimport { PADDING } from '../smart-card.tokens';\nimport type { CardPadding, SmartCardAction } from '../smart-card.types';\n\nimport { CardHeader, CardTitle, CardDescription } from './card-primitives';\nimport { hasRenderableContent } from './has-renderable-content';\nimport { ActionsMenu } from './smart-card-actions-menu';\n\nfunction TooltipTrigger_Info({ tooltipLabel }: { tooltipLabel: string }) {\n\treturn (\n\t\t<TooltipTrigger\n\t\t\trender={(triggerProps) => {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\tconst passthrough = triggerProps as Record<string, any>;\n\t\t\t\treturn (\n\t\t\t\t\t<Button\n\t\t\t\t\t\t{...passthrough}\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\tsize=\"icon-small\"\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'h-5 w-5 text-muted-foreground',\n\t\t\t\t\t\t\tpassthrough.className,\n\t\t\t\t\t\t)}\n\t\t\t\t\t\taria-label={tooltipLabel}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Info className=\"size-3.5\" />\n\t\t\t\t\t</Button>\n\t\t\t\t);\n\t\t\t}}\n\t\t/>\n\t);\n}\n\ninterface HeaderProps {\n\ticon?: ReactNode;\n\ttitle?: ReactNode;\n\ttitleSuffix?: ReactNode;\n\tdescription?: ReactNode;\n\ttooltip?: ReactNode;\n\ttooltipLabel: string;\n\theaderStart?: ReactNode;\n\theaderEnd?: ReactNode;\n\theaderAction?: ReactNode;\n\tactions?: SmartCardAction[];\n\tactionsLabel: string;\n\tpadding: CardPadding;\n\tclassName?: string;\n}\n\nexport function SmartCardHeaderRow({\n\ticon,\n\ttitle,\n\ttitleSuffix,\n\tdescription,\n\ttooltip,\n\ttooltipLabel,\n\theaderStart,\n\theaderEnd,\n\theaderAction,\n\tactions,\n\tactionsLabel,\n\tpadding,\n\tclassName,\n}: HeaderProps) {\n\tconst cardActions = Array.isArray(actions) ? actions : [];\n\tconst hasActions = cardActions.length > 0;\n\n\tconst hasIcon = hasRenderableContent(icon);\n\tconst hasTitle = hasRenderableContent(title);\n\tconst hasTitleSuffix = hasRenderableContent(titleSuffix);\n\tconst hasDescription = hasRenderableContent(description);\n\tconst hasTooltip = hasRenderableContent(tooltip);\n\tconst hasHeaderStart = hasRenderableContent(headerStart);\n\tconst hasHeaderEnd = hasRenderableContent(headerEnd);\n\tconst hasHeaderAction = hasRenderableContent(headerAction);\n\n\tconst showTitleRow = hasIcon || hasTitle || hasTitleSuffix || hasTooltip;\n\tconst showTrailing = hasHeaderEnd || hasHeaderAction || hasActions;\n\n\treturn (\n\t\t<CardHeader\n\t\t\tclassName={cn(\n\t\t\t\t'flex-row items-start justify-between gap-3 pb-0',\n\t\t\t\tPADDING[padding].headerX,\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t<div className=\"flex min-w-0 flex-1 flex-col gap-1\">\n\t\t\t\t{!!hasHeaderStart && headerStart}\n\n\t\t\t\t{!!showTitleRow && (\n\t\t\t\t\t<div className=\"flex min-w-0 flex-wrap items-center gap-x-2 gap-y-1\">\n\t\t\t\t\t\t{!!hasIcon && (\n\t\t\t\t\t\t\t<span className=\"flex shrink-0 items-center text-muted-foreground\">\n\t\t\t\t\t\t\t\t{icon}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<CardTitle>{title}</CardTitle>\n\t\t\t\t\t\t{!!hasTitleSuffix && (\n\t\t\t\t\t\t\t<div className=\"flex items-center gap-2\">{titleSuffix}</div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{!!hasTooltip && (\n\t\t\t\t\t\t\t<Tooltip>\n\t\t\t\t\t\t\t\t<TooltipTrigger_Info tooltipLabel={tooltipLabel} />\n\t\t\t\t\t\t\t\t<TooltipContent>{tooltip}</TooltipContent>\n\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{!!hasDescription && (\n\t\t\t\t\t<CardDescription className=\"text-left\">{description}</CardDescription>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{!!showTrailing && (\n\t\t\t\t<div className=\"flex shrink-0 items-center gap-2\">\n\t\t\t\t\t{!!hasHeaderEnd && headerEnd}\n\t\t\t\t\t{!!hasHeaderAction && headerAction}\n\t\t\t\t\t{!!hasActions && (\n\t\t\t\t\t\t<ActionsMenu actions={cardActions} actionsLabel={actionsLabel} />\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</CardHeader>\n\t);\n}\n","/**\n * SmartCard strings — i18n surface for the chrome the consumer doesn't\n * pass directly. Most copy (title, description, action labels, alert\n * body) flows in via props; the strings here cover the implicit\n * affordances (expand toggle).\n */\n\nexport interface SmartCardStrings {\n\texpandLabel: string;\n\tcollapseLabel: string;\n}\n\nexport const defaultSmartCardStrings: SmartCardStrings = {\n\texpandLabel: 'Expand card',\n\tcollapseLabel: 'Collapse card',\n};\n","/**\n * SmartCardSkeleton — placeholder shell rendered while a SmartCard's\n * data is loading. Picks up the canonical card surface so the loading\n * state visually matches the eventual `SmartCard` it'll replace.\n */\nimport type { ReactNode } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nimport { SURFACE_CLASSES } from '../smart-card.tokens';\n\nimport {\n\tCardContent,\n\tCardHeader,\n\tCardShell,\n\tCardTitle,\n} from './card-primitives';\n\nexport interface SmartCardSkeletonProps {\n\ttitle?: ReactNode;\n\tlines?: number;\n\tclassName?: string;\n}\n\nexport function SmartCardSkeleton({\n\ttitle,\n\tlines = 2,\n\tclassName,\n}: SmartCardSkeletonProps) {\n\tconst SkeletonBar = ({ barClassName }: { barClassName?: string }) => (\n\t\t<div className={cn('animate-pulse rounded bg-muted', barClassName)} />\n\t);\n\n\treturn (\n\t\t<CardShell className={cn(SURFACE_CLASSES.card, 'gap-4 py-6', className)}>\n\t\t\t<CardHeader className=\"flex-col gap-1.5 px-6 pb-0\">\n\t\t\t\t{title ? <CardTitle>{title}</CardTitle> : <SkeletonBar barClassName=\"h-4 w-32\" />}\n\t\t\t</CardHeader>\n\t\t\t<CardContent className=\"space-y-3 px-6 py-0\">\n\t\t\t\t{Array.from({ length: lines }, (_, i) => (\n\t\t\t\t\t<SkeletonBar\n\t\t\t\t\t\tkey={`skel-${String(i)}`}\n\t\t\t\t\t\tbarClassName={cn('h-4', i === 0 ? 'w-full' : 'w-3/4')}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</CardContent>\n\t\t</CardShell>\n\t);\n}\n\nSmartCardSkeleton.displayName = 'SmartCardSkeleton';\n","/**\n * SmartCard — composed card with header (icon, title, suffix, description,\n * tooltip), actions menu, alert banner, header / content / footer slots,\n * surface variants (card / flat / framed), and an opt-in expandable body.\n *\n * The single card primitive everything else builds on — never reach past it\n * to shadcn `Card` directly. The CardShell / CardHeader / CardTitle /\n * CardDescription / CardContent / CardFooter primitives are re-exported\n * for advanced composition (deeply customised layouts that still want the\n * design-system surface tokens). Each subregion paints a BEM-style hook\n * (`card--component`, `card--header`, `card--title`, …) for CSS / test /\n * analytics targeting independent of shadcn's data-slot internals.\n *\n * The file is a thin orchestrator. The actual chrome lives in:\n * - `./smart-card.types.ts` — public prop / variant types\n * - `./smart-card.strings.ts` — i18n (expand toggle copy)\n * - `./smart-card.tokens.ts` — PADDING + SURFACE_CLASSES + CARD_BEM\n * - `./partials/card-primitives.tsx` — CardShell + CardHeader / Title /\n * Description / Content / Footer\n * - `./partials/smart-card-header-row.tsx` — header layout + actions menu\n * - `./partials/smart-card-alert.tsx` — inline alert banner\n * - `./partials/smart-card-actions-menu.tsx` — `⋮` dropdown\n * - `./partials/smart-card-skeleton.tsx` — loading placeholder\n * - `./partials/has-renderable-content.ts` — slot-empty predicate\n */\nimport { ChevronDown } from 'lucide-react';\nimport {\n\ttype CSSProperties,\n\tforwardRef,\n\tuseCallback,\n\tuseState,\n} from 'react';\n\nimport { Button } from '@/components/base/buttons';\nimport { useStrings } from '@/lib/strings';\nimport { useCardConfig } from '@/lib/ui-provider';\nimport { cn } from '@/lib/utils';\n\nimport {\n\tCardContent,\n\tCardFooter,\n\tCardShell,\n} from './partials/card-primitives';\nimport { hasRenderableContent } from './partials/has-renderable-content';\nimport { SmartCardAlert } from './partials/smart-card-alert';\nimport { SmartCardHeaderRow } from './partials/smart-card-header-row';\nimport {\n\tdefaultSmartCardStrings,\n} from './smart-card.strings';\nimport {\n\tPADDING,\n\tSURFACE_CLASSES,\n} from './smart-card.tokens';\nimport type {\n\tCardPadding,\n\tSmartCardProps,\n\tSmartCardSurface,\n} from './smart-card.types';\n\nfunction normalizeCardPadding(padding: CardPadding | string | undefined): CardPadding {\n\tif (padding === 'small' || padding === 'default') return padding;\n\tif (padding === 'sm') return 'small';\n\tif (padding === 'base' || padding === 'lg') return 'default';\n\treturn 'default';\n}\n\nexport const SmartCard = forwardRef<HTMLDivElement, SmartCardProps>(function SmartCard({\n\ticon,\n\ttitle,\n\ttitleSuffix,\n\tdescription,\n\ttooltip,\n\ttooltipAriaLabel = 'Card info',\n\tfooterText,\n\talert,\n\talertVariant = 'default',\n\tsurface,\n\ttransparent = false,\n\tpadding,\n\tactions,\n\tactionsLabel = 'Card actions',\n\theaderAction,\n\theaderStart,\n\theaderEnd,\n\tcontentTop,\n\tcontentBottom,\n\tfooterSlot,\n\theaderDivider,\n\tfooterDivider = false,\n\texpandable = false,\n\tdefaultExpanded = false,\n\texpanded: expandedProp,\n\tonExpandedChange,\n\tchildren,\n\tclassName,\n\theaderClassName,\n\tcontentClassName,\n\tfooterClassName,\n\tstrings: stringsProp,\n}, ref) {\n\tconst {\n\t\tdefaultPadding,\n\t\tdefaultSurface,\n\t\tdefaultHeaderDivider,\n\t} = useCardConfig();\n\tconst resolvedPadding = normalizeCardPadding(padding ?? defaultPadding);\n\tconst tokens = PADDING[resolvedPadding];\n\tconst cardActions = Array.isArray(actions) ? actions : [];\n\tconst strings = useStrings(defaultSmartCardStrings, stringsProp);\n\n\tconst isExpandable = expandable !== false && expandable !== undefined;\n\tconst collapsedMaxHeightRaw =\n\t\ttypeof expandable === 'object' && expandable?.collapsedMaxHeight !== undefined\n\t\t\t? expandable.collapsedMaxHeight\n\t\t\t: '12rem';\n\tconst collapsedMaxHeight =\n\t\ttypeof collapsedMaxHeightRaw === 'number'\n\t\t\t? `${collapsedMaxHeightRaw}px`\n\t\t\t: collapsedMaxHeightRaw;\n\n\tconst isExpandedControlled = expandedProp !== undefined;\n\tconst [internalExpanded, setInternalExpanded] = useState(defaultExpanded);\n\tconst expanded = isExpandedControlled ? expandedProp : internalExpanded;\n\tconst handleToggle = useCallback(() => {\n\t\tconst next = !expanded;\n\t\tif (!isExpandedControlled) setInternalExpanded(next);\n\t\tonExpandedChange?.(next);\n\t}, [expanded, isExpandedControlled, onExpandedChange]);\n\n\tconst hasHeader =\n\t\thasRenderableContent(icon) ||\n\t\thasRenderableContent(title) ||\n\t\thasRenderableContent(description) ||\n\t\tcardActions.length > 0 ||\n\t\thasRenderableContent(headerAction) ||\n\t\thasRenderableContent(headerStart) ||\n\t\thasRenderableContent(headerEnd);\n\n\tconst hasAlert = hasRenderableContent(alert);\n\tconst hasFooterText = hasRenderableContent(footerText);\n\tconst hasFooterSlot = hasRenderableContent(footerSlot);\n\tconst hasContentTop = hasRenderableContent(contentTop);\n\tconst hasContentBottom = hasRenderableContent(contentBottom);\n\n\tconst tooltipLabel =\n\t\ttooltipAriaLabel.trim().length > 0 ? tooltipAriaLabel : 'Card info';\n\n\tconst collapseStyle: CSSProperties | undefined = isExpandable\n\t\t? {\n\t\t\t\tmaxHeight: expanded ? '' : collapsedMaxHeight,\n\t\t\t}\n\t\t: undefined;\n\n\t// Resolve surface — explicit `surface` wins, else legacy `transparent`,\n\t// else the provider default, else the default framed chrome.\n\tconst resolvedSurface: SmartCardSurface =\n\t\tsurface ?? (transparent ? 'flat' : defaultSurface ?? 'framed');\n\tconst resolvedHeaderDivider = headerDivider ?? defaultHeaderDivider ?? false;\n\n\treturn (\n\t\t<CardShell\n\t\t\tref={ref}\n\t\t\tdata-surface={resolvedSurface}\n\t\t\tclassName={cn(\n\t\t\t\tSURFACE_CLASSES[resolvedSurface],\n\t\t\t\ttokens.shell,\n\t\t\t\t// `isExpandable` parks the chevron at `-bottom-4` outside the\n\t\t\t\t// shell — `overflow-visible` lets it render past the card\n\t\t\t\t// edge, otherwise the shadcn primitive's `overflow-hidden`\n\t\t\t\t// clips it.\n\t\t\t\tisExpandable && 'relative pb-1 !overflow-visible',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{!!hasHeader && (\n\t\t\t\t<SmartCardHeaderRow\n\t\t\t\t\ticon={icon}\n\t\t\t\t\ttitle={title}\n\t\t\t\t\ttitleSuffix={titleSuffix}\n\t\t\t\t\tdescription={description}\n\t\t\t\t\ttooltip={tooltip}\n\t\t\t\t\ttooltipLabel={tooltipLabel}\n\t\t\t\t\theaderStart={headerStart}\n\t\t\t\t\theaderEnd={headerEnd}\n\t\t\t\t\theaderAction={headerAction}\n\t\t\t\t\tactions={cardActions}\n\t\t\t\t\tactionsLabel={actionsLabel}\n\t\t\t\t\tpadding={resolvedPadding}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\tresolvedHeaderDivider && 'pb-3 border-b border-border/60',\n\t\t\t\t\t\theaderClassName,\n\t\t\t\t\t)}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t{!!hasAlert && (\n\t\t\t\t<SmartCardAlert\n\t\t\t\t\talert={alert}\n\t\t\t\t\talertVariant={alertVariant}\n\t\t\t\t\thasHeader={hasHeader}\n\t\t\t\t\tpadding={resolvedPadding}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t<CardContent\n\t\t\t\tclassName={cn(\n\t\t\t\t\ttokens.contentX,\n\t\t\t\t\ttokens.contentY,\n\t\t\t\t\tisExpandable &&\n\t\t\t\t\t\t'relative overflow-hidden transition-[max-height] duration-500 ease-in-out',\n\t\t\t\t\tcontentClassName,\n\t\t\t\t)}\n\t\t\t\tstyle={collapseStyle}\n\t\t\t>\n\t\t\t\t{!!hasContentTop && contentTop}\n\t\t\t\t{children}\n\t\t\t\t{!!hasContentBottom && contentBottom}\n\n\t\t\t\t{!!isExpandable && !expanded && (\n\t\t\t\t\t<div\n\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\tclassName=\"from-background pointer-events-none absolute inset-x-0 bottom-0 h-20 rounded-b-lg bg-linear-to-t to-transparent\"\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</CardContent>\n\n\t\t\t{!!hasFooterText && (\n\t\t\t\t<CardFooter\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'justify-end text-xs text-muted-foreground',\n\t\t\t\t\t\ttokens.footerX,\n\t\t\t\t\t\tfooterDivider && 'pt-3 border-t border-border/60',\n\t\t\t\t\t\tfooterClassName,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{footerText}\n\t\t\t\t</CardFooter>\n\t\t\t)}\n\n\t\t\t{!!hasFooterSlot && (\n\t\t\t\t<CardFooter\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'flex-col items-stretch',\n\t\t\t\t\t\ttokens.footerX,\n\t\t\t\t\t\tfooterDivider && 'pt-3 border-t border-border/60',\n\t\t\t\t\t\tfooterClassName,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{footerSlot}\n\t\t\t\t</CardFooter>\n\t\t\t)}\n\n\t\t\t{!!isExpandable && (\n\t\t\t\t<div className=\"absolute -bottom-4 left-1/2 -translate-x-1/2 z-10\">\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\tbuttonStyle=\"outline\"\n\t\t\t\t\t\tsize=\"icon-small\"\n\t\t\t\t\t\tonClick={handleToggle}\n\t\t\t\t\t\taria-expanded={expanded}\n\t\t\t\t\t\taria-label={expanded ? strings.collapseLabel : strings.expandLabel}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'inline-flex size-control-sm items-center justify-center rounded-full',\n\t\t\t\t\t\t\t'border border-border bg-background text-foreground shadow-sm',\n\t\t\t\t\t\t\t'hover:bg-muted/40 transition-colors',\n\t\t\t\t\t\t\t'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/50',\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ChevronDown\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'size-4 transition-transform duration-300',\n\t\t\t\t\t\t\t\texpanded && 'rotate-180',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span className=\"sr-only\">\n\t\t\t\t\t\t\t{expanded ? strings.collapseLabel : strings.expandLabel}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</CardShell>\n\t);\n});\n\nSmartCard.displayName = 'SmartCard';\n\n// ──────────────────────────────────────────────────────────────────────────\n// Re-exports — public surface lives here so `import { ... } from\n// '@/components/base/cards'` keeps working through the file split.\n// ──────────────────────────────────────────────────────────────────────────\n\nexport {\n\tdefaultSmartCardStrings,\n\ttype SmartCardStrings,\n} from './smart-card.strings';\nexport type {\n\tCardAlertVariant,\n\tCardPadding,\n\tSmartCardAction,\n\tSmartCardProps,\n\tSmartCardSkeletonProps,\n\tSmartCardSurface,\n} from './smart-card.types';\nexport {\n\tCardContent,\n\tCardDescription,\n\tCardFooter,\n\tCardHeader,\n\tCardShell,\n\tCardTitle,\n} from './partials/card-primitives';\nexport { SmartCardSkeleton } from './partials/smart-card-skeleton';\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ const e=require("./chunk-CMqjfN_6.cjs"),t=require("../lib/strings.cjs"),n=require("./ui-provider-CrsJ_dGn.cjs"),r=require("../lib/utils.cjs"),i=require("./button-CfQtOuBK.cjs"),a=require("./typography-CWEobAJV.cjs"),o=require("./input-Dvvmn96E.cjs"),s=require("./form-sizing-DJus3nK3.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-xs 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-BdBpeD3C.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"combobox-BdBpeD3C.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-xs 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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"}