admin-ui-starter-kit 0.6.6 → 0.6.7

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 (1143) hide show
  1. package/.agents/skills/component-library-rules/references/components/base__cards.md +4 -4
  2. package/.agents/skills/component-library-rules/references/components/base__carousel.md +4 -4
  3. package/.agents/skills/component-library-rules/references/components/base__combobox.md +1 -1
  4. package/.agents/skills/component-library-rules/references/components/base__css-variables.md +2 -1
  5. package/.agents/skills/component-library-rules/references/components/base__event-calendar.md +1 -1
  6. package/.agents/skills/component-library-rules/references/components/base__typography.md +1 -1
  7. package/.agents/skills/component-library-rules/references/components/composed__metadata-list.md +3 -3
  8. package/.agents/skills/component-library-rules/references/components/features__activities.md +1 -1
  9. package/.agents/skills/component-library-rules/references/components/features__enhanced-activities.md +6 -6
  10. package/.agents/skills/component-library-rules/references/components/features__metrics-overview.md +3 -3
  11. package/.agents/skills/component-library-rules/references/components/features__overlays.md +2 -2
  12. package/.agents/skills/component-library-rules/references/components/features__products.md +1 -1
  13. package/.agents/skills/component-library-rules/references/components/layout__layout-app-shell.md +1 -1
  14. package/.agents/skills/component-library-rules/references/components/layout__layout-containers.md +1 -1
  15. package/.agents/skills/component-library-rules/references/components/layout__layout-sidebar.md +2 -2
  16. package/dist/_shared/accordion-CxjH2WZG.js +135 -0
  17. package/dist/_shared/accordion-CxjH2WZG.js.map +1 -0
  18. package/dist/_shared/accordion-mTdJmy23.cjs +2 -0
  19. package/dist/_shared/accordion-mTdJmy23.cjs.map +1 -0
  20. package/dist/_shared/ai-artifact-CS2Pv-bu.js +1099 -0
  21. package/dist/_shared/ai-artifact-CS2Pv-bu.js.map +1 -0
  22. package/dist/_shared/ai-artifact-R4bxz5Iq.cjs +3 -0
  23. package/dist/_shared/ai-artifact-R4bxz5Iq.cjs.map +1 -0
  24. package/dist/_shared/alert-BisCSsOE.cjs +2 -0
  25. package/dist/_shared/alert-BisCSsOE.cjs.map +1 -0
  26. package/dist/_shared/alert-D23Q7I0W.js +81 -0
  27. package/dist/_shared/alert-D23Q7I0W.js.map +1 -0
  28. package/dist/_shared/auth-BV9Daibu.cjs +2 -0
  29. package/dist/_shared/auth-BV9Daibu.cjs.map +1 -0
  30. package/dist/_shared/auth-DACpcTnL.js +643 -0
  31. package/dist/_shared/auth-DACpcTnL.js.map +1 -0
  32. package/dist/_shared/badge-B4oBB5BJ.js +110 -0
  33. package/dist/_shared/badge-B4oBB5BJ.js.map +1 -0
  34. package/dist/_shared/badge-DvUA9Pr2.cjs +2 -0
  35. package/dist/_shared/badge-DvUA9Pr2.cjs.map +1 -0
  36. package/dist/_shared/card-radio-group-BL--IyPB.js +150 -0
  37. package/dist/_shared/card-radio-group-BL--IyPB.js.map +1 -0
  38. package/dist/_shared/card-radio-group-Cl5ptR1d.cjs +2 -0
  39. package/dist/_shared/card-radio-group-Cl5ptR1d.cjs.map +1 -0
  40. package/dist/_shared/cards-CMNXFo3Y.js +354 -0
  41. package/dist/_shared/cards-CMNXFo3Y.js.map +1 -0
  42. package/dist/_shared/cards-DQN9fcwo.cjs +2 -0
  43. package/dist/_shared/cards-DQN9fcwo.cjs.map +1 -0
  44. package/dist/_shared/combobox-D0avSXIB.cjs +2 -0
  45. package/dist/_shared/combobox-D0avSXIB.cjs.map +1 -0
  46. package/dist/_shared/combobox-Df0srISK.js +954 -0
  47. package/dist/_shared/combobox-Df0srISK.js.map +1 -0
  48. package/dist/_shared/command-B5BpMgBT.js +39 -0
  49. package/dist/_shared/command-B5BpMgBT.js.map +1 -0
  50. package/dist/_shared/command-en62SpQ7.cjs +2 -0
  51. package/dist/_shared/command-en62SpQ7.cjs.map +1 -0
  52. package/dist/_shared/comments-CfkortDW.js +952 -0
  53. package/dist/_shared/comments-CfkortDW.js.map +1 -0
  54. package/dist/_shared/comments-yVd7QMOu.cjs +2 -0
  55. package/dist/_shared/comments-yVd7QMOu.cjs.map +1 -0
  56. package/dist/_shared/copyable-Cn7tRGL5.js +38 -0
  57. package/dist/_shared/copyable-Cn7tRGL5.js.map +1 -0
  58. package/dist/_shared/copyable-CoKTxMSP.cjs +2 -0
  59. package/dist/_shared/copyable-CoKTxMSP.cjs.map +1 -0
  60. package/dist/_shared/data-display-BG7CD164.js +1873 -0
  61. package/dist/_shared/data-display-BG7CD164.js.map +1 -0
  62. package/dist/_shared/data-display-CXVoX3la.cjs +2 -0
  63. package/dist/_shared/data-display-CXVoX3la.cjs.map +1 -0
  64. package/dist/_shared/date-picker-Bf-nnyi-.js +1361 -0
  65. package/dist/_shared/date-picker-Bf-nnyi-.js.map +1 -0
  66. package/dist/_shared/date-picker-Cox4PAUt.cjs +2 -0
  67. package/dist/_shared/date-picker-Cox4PAUt.cjs.map +1 -0
  68. package/dist/_shared/date-pickers-DbN4q0dn.cjs +2 -0
  69. package/dist/_shared/date-pickers-DbN4q0dn.cjs.map +1 -0
  70. package/dist/_shared/date-pickers-DvrOCP-s.js +329 -0
  71. package/dist/_shared/date-pickers-DvrOCP-s.js.map +1 -0
  72. package/dist/_shared/display-BQijMo37.js +986 -0
  73. package/dist/_shared/display-BQijMo37.js.map +1 -0
  74. package/dist/_shared/display-C0ut-Lew.cjs +2 -0
  75. package/dist/_shared/display-C0ut-Lew.cjs.map +1 -0
  76. package/dist/_shared/forms-BjG7QIb1.cjs +2 -0
  77. package/dist/_shared/forms-BjG7QIb1.cjs.map +1 -0
  78. package/dist/_shared/forms-DljDdyXR.js +3533 -0
  79. package/dist/_shared/forms-DljDdyXR.js.map +1 -0
  80. package/dist/_shared/header-BpFJRINR.cjs +2 -0
  81. package/dist/_shared/header-BpFJRINR.cjs.map +1 -0
  82. package/dist/_shared/header-CKqQF4_r.js +447 -0
  83. package/dist/_shared/header-CKqQF4_r.js.map +1 -0
  84. package/dist/_shared/hooks-DcCkbP1F.js +95 -0
  85. package/dist/_shared/hooks-DcCkbP1F.js.map +1 -0
  86. package/dist/_shared/hooks-RkLytuGj.cjs +2 -0
  87. package/dist/_shared/hooks-RkLytuGj.cjs.map +1 -0
  88. package/dist/_shared/input-Cin0qpjj.js +182 -0
  89. package/dist/_shared/input-Cin0qpjj.js.map +1 -0
  90. package/dist/_shared/input-uuWeiagN.cjs +2 -0
  91. package/dist/_shared/input-uuWeiagN.cjs.map +1 -0
  92. package/dist/_shared/item-CIlSaQg8.js +226 -0
  93. package/dist/_shared/item-CIlSaQg8.js.map +1 -0
  94. package/dist/_shared/item-CSk9Y2qB.cjs +2 -0
  95. package/dist/_shared/item-CSk9Y2qB.cjs.map +1 -0
  96. package/dist/_shared/layout-Cun0HPL4.cjs +2 -0
  97. package/dist/_shared/layout-Cun0HPL4.cjs.map +1 -0
  98. package/dist/_shared/layout-HrU5gwH3.js +261 -0
  99. package/dist/_shared/layout-HrU5gwH3.js.map +1 -0
  100. package/dist/_shared/mentions-BqN82Fon.cjs +2 -0
  101. package/dist/_shared/mentions-BqN82Fon.cjs.map +1 -0
  102. package/dist/_shared/mentions-DV0FT1Th.js +506 -0
  103. package/dist/_shared/mentions-DV0FT1Th.js.map +1 -0
  104. package/dist/_shared/money-display-D5FCRhzB.cjs +2 -0
  105. package/dist/_shared/money-display-D5FCRhzB.cjs.map +1 -0
  106. package/dist/_shared/money-display-FcCAQDCz.js +198 -0
  107. package/dist/_shared/money-display-FcCAQDCz.js.map +1 -0
  108. package/dist/_shared/navigation-CI_Dd8jM.js +436 -0
  109. package/dist/_shared/navigation-CI_Dd8jM.js.map +1 -0
  110. package/dist/_shared/navigation-DUGhCPzJ.cjs +2 -0
  111. package/dist/_shared/navigation-DUGhCPzJ.cjs.map +1 -0
  112. package/dist/_shared/overlays-BRLemLSn.cjs +2 -0
  113. package/dist/_shared/overlays-BRLemLSn.cjs.map +1 -0
  114. package/dist/_shared/overlays-Bef7VNYY.js +735 -0
  115. package/dist/_shared/overlays-Bef7VNYY.js.map +1 -0
  116. package/dist/_shared/popover-menu-CAjhhTfX.js +93 -0
  117. package/dist/_shared/popover-menu-CAjhhTfX.js.map +1 -0
  118. package/dist/_shared/popover-menu-DlkRgOkR.cjs +2 -0
  119. package/dist/_shared/popover-menu-DlkRgOkR.cjs.map +1 -0
  120. package/dist/_shared/rich-text-editor-Bpt3r3J3.js +620 -0
  121. package/dist/_shared/rich-text-editor-Bpt3r3J3.js.map +1 -0
  122. package/dist/_shared/rich-text-editor-DUTX7kBa.cjs +2 -0
  123. package/dist/_shared/rich-text-editor-DUTX7kBa.cjs.map +1 -0
  124. package/dist/_shared/settings-CNT4-6u8.cjs +2 -0
  125. package/dist/_shared/settings-CNT4-6u8.cjs.map +1 -0
  126. package/dist/_shared/settings-CRP6409J.js +143 -0
  127. package/dist/_shared/settings-CRP6409J.js.map +1 -0
  128. package/dist/_shared/sidebar-B0LcBrfI.cjs +2 -0
  129. package/dist/_shared/sidebar-B0LcBrfI.cjs.map +1 -0
  130. package/dist/_shared/sidebar-Bc6JsOTD.js +548 -0
  131. package/dist/_shared/sidebar-Bc6JsOTD.js.map +1 -0
  132. package/dist/_shared/spinner-CVG62sGs.js +67 -0
  133. package/dist/_shared/spinner-CVG62sGs.js.map +1 -0
  134. package/dist/_shared/spinner-VjdonFU2.cjs +2 -0
  135. package/dist/_shared/spinner-VjdonFU2.cjs.map +1 -0
  136. package/dist/_shared/table-_yujELN3.js +1377 -0
  137. package/dist/_shared/table-_yujELN3.js.map +1 -0
  138. package/dist/_shared/table-iV8H1AE0.cjs +2 -0
  139. package/dist/_shared/table-iV8H1AE0.cjs.map +1 -0
  140. package/dist/_shared/textarea-B4zbbqff.cjs +2 -0
  141. package/dist/_shared/textarea-B4zbbqff.cjs.map +1 -0
  142. package/dist/_shared/textarea-Dp0RU-rc.js +118 -0
  143. package/dist/_shared/textarea-Dp0RU-rc.js.map +1 -0
  144. package/dist/_shared/typography-DXvCmE8w.js +201 -0
  145. package/dist/_shared/typography-DXvCmE8w.js.map +1 -0
  146. package/dist/_shared/typography-pzCKaFOc.cjs +2 -0
  147. package/dist/_shared/typography-pzCKaFOc.cjs.map +1 -0
  148. package/dist/_shared/workspace-C3U57t2a.cjs +2 -0
  149. package/dist/_shared/workspace-C3U57t2a.cjs.map +1 -0
  150. package/dist/_shared/workspace-Db--ow3r.js +357 -0
  151. package/dist/_shared/workspace-Db--ow3r.js.map +1 -0
  152. package/dist/components/base/accordion/index.cjs +1 -1
  153. package/dist/components/base/accordion/index.js +1 -1
  154. package/dist/components/base/badge/index.cjs +1 -1
  155. package/dist/components/base/badge/index.js +1 -1
  156. package/dist/components/base/cards/index.cjs +1 -1
  157. package/dist/components/base/cards/index.js +1 -1
  158. package/dist/components/base/combobox/index.cjs +1 -1
  159. package/dist/components/base/combobox/index.js +1 -1
  160. package/dist/components/base/command/index.cjs +1 -1
  161. package/dist/components/base/command/index.js +1 -1
  162. package/dist/components/base/copyable/index.cjs +1 -1
  163. package/dist/components/base/copyable/index.js +1 -1
  164. package/dist/components/base/currency/index.cjs +1 -1
  165. package/dist/components/base/currency/index.js +1 -1
  166. package/dist/components/base/date-pickers/index.cjs +1 -1
  167. package/dist/components/base/date-pickers/index.js +2 -2
  168. package/dist/components/base/display/chart.cjs +1 -1
  169. package/dist/components/base/display/chart.js +1 -1
  170. package/dist/components/base/display/index.cjs +1 -1
  171. package/dist/components/base/display/index.js +3 -3
  172. package/dist/components/base/event-calendar/index.cjs +1 -1
  173. package/dist/components/base/event-calendar/index.cjs.map +1 -1
  174. package/dist/components/base/event-calendar/index.js +5 -5
  175. package/dist/components/base/event-calendar/index.js.map +1 -1
  176. package/dist/components/base/forms/index.cjs +1 -1
  177. package/dist/components/base/forms/index.js +5 -5
  178. package/dist/components/base/item/index.cjs +1 -1
  179. package/dist/components/base/item/index.js +1 -1
  180. package/dist/components/base/map/index.cjs +1 -1
  181. package/dist/components/base/map/index.js +1 -1
  182. package/dist/components/base/navigation/index.cjs +1 -1
  183. package/dist/components/base/navigation/index.js +1 -1
  184. package/dist/components/base/popover-menu/index.cjs +1 -1
  185. package/dist/components/base/popover-menu/index.js +1 -1
  186. package/dist/components/base/spinner/index.cjs +1 -1
  187. package/dist/components/base/spinner/index.js +1 -1
  188. package/dist/components/base/table/index.cjs +1 -1
  189. package/dist/components/base/table/index.js +1 -1
  190. package/dist/components/base/table/table-header.d.ts.map +1 -1
  191. package/dist/components/composed/admin/index.cjs +1 -1
  192. package/dist/components/composed/admin/index.cjs.map +1 -1
  193. package/dist/components/composed/admin/index.js +11 -11
  194. package/dist/components/composed/admin/index.js.map +1 -1
  195. package/dist/components/composed/ai/index.cjs +1 -1
  196. package/dist/components/composed/ai/index.cjs.map +1 -1
  197. package/dist/components/composed/ai/index.js +24 -24
  198. package/dist/components/composed/ai/index.js.map +1 -1
  199. package/dist/components/composed/analytics/index.cjs +1 -1
  200. package/dist/components/composed/analytics/index.cjs.map +1 -1
  201. package/dist/components/composed/analytics/index.js +25 -25
  202. package/dist/components/composed/analytics/index.js.map +1 -1
  203. package/dist/components/composed/cards/index.cjs +1 -1
  204. package/dist/components/composed/cards/index.cjs.map +1 -1
  205. package/dist/components/composed/cards/index.js +14 -14
  206. package/dist/components/composed/cards/index.js.map +1 -1
  207. package/dist/components/composed/commerce/index.cjs +1 -1
  208. package/dist/components/composed/commerce/index.cjs.map +1 -1
  209. package/dist/components/composed/commerce/index.js +27 -27
  210. package/dist/components/composed/commerce/index.js.map +1 -1
  211. package/dist/components/composed/dark-surfaces/index.cjs +1 -1
  212. package/dist/components/composed/dark-surfaces/index.js +3 -3
  213. package/dist/components/composed/data-display/index.cjs +1 -1
  214. package/dist/components/composed/data-display/index.js +1 -1
  215. package/dist/components/composed/data-display/metadata/metadata-list.d.ts.map +1 -1
  216. package/dist/components/composed/navigation/index.cjs +1 -1
  217. package/dist/components/composed/navigation/index.cjs.map +1 -1
  218. package/dist/components/composed/navigation/index.js +14 -14
  219. package/dist/components/composed/navigation/index.js.map +1 -1
  220. package/dist/components/composed/onboarding/index.cjs +1 -1
  221. package/dist/components/composed/onboarding/index.js +3 -3
  222. package/dist/components/composed/timelines/index.cjs +1 -1
  223. package/dist/components/composed/timelines/index.cjs.map +1 -1
  224. package/dist/components/composed/timelines/index.js +10 -10
  225. package/dist/components/composed/timelines/index.js.map +1 -1
  226. package/dist/components/features/activities/index.cjs +1 -1
  227. package/dist/components/features/activities/index.cjs.map +1 -1
  228. package/dist/components/features/activities/index.js +8 -8
  229. package/dist/components/features/activities/index.js.map +1 -1
  230. package/dist/components/features/ai-chat/index.cjs +2 -2
  231. package/dist/components/features/ai-chat/index.cjs.map +1 -1
  232. package/dist/components/features/ai-chat/index.js +7 -7
  233. package/dist/components/features/ai-chat/index.js.map +1 -1
  234. package/dist/components/features/card/index.cjs +1 -1
  235. package/dist/components/features/card/index.js +3 -3
  236. package/dist/components/features/comments/index.cjs +1 -1
  237. package/dist/components/features/comments/index.js +2 -2
  238. package/dist/components/features/data-view/index.cjs +1 -1
  239. package/dist/components/features/data-view/index.cjs.map +1 -1
  240. package/dist/components/features/data-view/index.js +2 -2
  241. package/dist/components/features/data-view/index.js.map +1 -1
  242. package/dist/components/features/event-log/index.cjs +1 -1
  243. package/dist/components/features/event-log/index.js +4 -4
  244. package/dist/components/features/filters/index.cjs +1 -1
  245. package/dist/components/features/filters/index.cjs.map +1 -1
  246. package/dist/components/features/filters/index.js +10 -10
  247. package/dist/components/features/filters/index.js.map +1 -1
  248. package/dist/components/features/global-search/index.cjs +1 -1
  249. package/dist/components/features/global-search/index.cjs.map +1 -1
  250. package/dist/components/features/global-search/index.js +13 -13
  251. package/dist/components/features/global-search/index.js.map +1 -1
  252. package/dist/components/features/kanban/index.cjs +1 -1
  253. package/dist/components/features/kanban/index.js +2 -2
  254. package/dist/components/features/media-library/index.cjs +1 -1
  255. package/dist/components/features/media-library/index.cjs.map +1 -1
  256. package/dist/components/features/media-library/index.js +22 -22
  257. package/dist/components/features/media-library/index.js.map +1 -1
  258. package/dist/components/features/mentions/index.cjs +1 -1
  259. package/dist/components/features/mentions/index.js +1 -1
  260. package/dist/components/features/overlays/index.cjs +1 -1
  261. package/dist/components/features/overlays/index.js +1 -1
  262. package/dist/components/features/products/index.cjs +1 -1
  263. package/dist/components/features/products/index.cjs.map +1 -1
  264. package/dist/components/features/products/index.js +13 -13
  265. package/dist/components/features/products/index.js.map +1 -1
  266. package/dist/components/features/resource/index.cjs +1 -1
  267. package/dist/components/features/resource/index.cjs.map +1 -1
  268. package/dist/components/features/resource/index.js +5 -5
  269. package/dist/components/features/resource/index.js.map +1 -1
  270. package/dist/components/features/rich-text-editor/index.cjs +1 -1
  271. package/dist/components/features/rich-text-editor/index.js +1 -1
  272. package/dist/components/features/schema-form/index.cjs +1 -1
  273. package/dist/components/features/schema-form/index.js +7 -7
  274. package/dist/components/features/suggestions/index.cjs +1 -1
  275. package/dist/components/features/suggestions/index.js +1 -1
  276. package/dist/components/features/sync/index.cjs +1 -1
  277. package/dist/components/features/sync/index.js +2 -2
  278. package/dist/components/layout/auth/index.cjs +1 -1
  279. package/dist/components/layout/auth/index.js +1 -1
  280. package/dist/components/layout/header/index.cjs +1 -1
  281. package/dist/components/layout/header/index.js +1 -1
  282. package/dist/components/layout/hooks/index.cjs +1 -1
  283. package/dist/components/layout/hooks/index.js +1 -1
  284. package/dist/components/layout/index.cjs +1 -1
  285. package/dist/components/layout/index.js +7 -7
  286. package/dist/components/layout/page/index.cjs +1 -1
  287. package/dist/components/layout/page/index.js +1 -1
  288. package/dist/components/layout/settings/index.cjs +1 -1
  289. package/dist/components/layout/settings/index.js +1 -1
  290. package/dist/components/layout/sidebar/index.cjs +1 -1
  291. package/dist/components/layout/sidebar/index.js +2 -2
  292. package/dist/components/layout/workspace/index.cjs +1 -1
  293. package/dist/components/layout/workspace/index.js +1 -1
  294. package/dist/components/typography/index.cjs +1 -1
  295. package/dist/components/typography/index.js +1 -1
  296. package/dist/services/actions/index.cjs +1 -1
  297. package/dist/services/actions/index.js +1 -1
  298. package/dist/showcase/assets/AreaChart-DtVzijR8.js +6 -0
  299. package/dist/showcase/assets/CompositeItem-SL6R0H3r.js +1 -0
  300. package/dist/showcase/assets/CompositeRoot-CTygKc2d.js +1 -0
  301. package/dist/showcase/assets/DialogTrigger-m2m9VdXk.js +1 -0
  302. package/dist/showcase/assets/LabelableContext-D6DcOg5I.js +1 -0
  303. package/dist/showcase/assets/PreviewLayout-CHW8F5uE.js +1 -0
  304. package/dist/showcase/assets/RadioGroup-BAOoU1eO.js +1 -0
  305. package/dist/showcase/assets/ScrollAreaCorner-CrCCP65t.js +1 -0
  306. package/dist/showcase/assets/Separator-DMs71Vib.js +1 -0
  307. package/dist/showcase/assets/ToolbarRootContext-DWKxsCxT.js +1 -0
  308. package/dist/showcase/assets/accordion-Clw5XNXP.js +171 -0
  309. package/dist/showcase/assets/accordion-variants-jiwKaPjE.js +1 -0
  310. package/dist/showcase/assets/action-menu-CW8zR6Ne.js +1 -0
  311. package/dist/showcase/assets/actions-Cf7vl3u0.js +310 -0
  312. package/dist/showcase/assets/activities-CyI5sJuS.js +500 -0
  313. package/dist/showcase/assets/activities-feed-card-Gv-Y4BBq.js +1 -0
  314. package/dist/showcase/assets/admin-CQVbTxGD.js +140 -0
  315. package/dist/showcase/assets/ai-Bkp2BY_z.js +207 -0
  316. package/dist/showcase/assets/ai-artifact-Cf1vEdVD.js +2 -0
  317. package/dist/showcase/assets/ai-chat-Bs3x6cK3.js +568 -0
  318. package/dist/showcase/assets/ai-elements-VbMUV2-i.js +387 -0
  319. package/dist/showcase/assets/ai-tool-call-BQYg4QB_.js +1 -0
  320. package/dist/showcase/assets/alert-BUmpNcXV.js +1 -0
  321. package/dist/showcase/assets/alert-CWPNW7eb.js +93 -0
  322. package/dist/showcase/assets/alert-nUwhk3AB.js +62 -0
  323. package/dist/showcase/assets/api-key-list-B1qVywOP.js +73 -0
  324. package/dist/showcase/assets/api-key-list-BI2FGbzV.js +1 -0
  325. package/dist/showcase/assets/app-sidebar-B35a8HWK.js +1 -0
  326. package/dist/showcase/assets/arrow-down-C1w0M8tE.js +1 -0
  327. package/dist/showcase/assets/arrow-left-DtILDtAv.js +1 -0
  328. package/dist/showcase/assets/arrow-right-TnZMfDbP.js +1 -0
  329. package/dist/showcase/assets/arrow-up-BX-KDIDB.js +1 -0
  330. package/dist/showcase/assets/arrow-up-right-CrnWqXwJ.js +1 -0
  331. package/dist/showcase/assets/avatar-C5YI0roK.js +67 -0
  332. package/dist/showcase/assets/avatar-DsnH-Xmz.js +1 -0
  333. package/dist/showcase/assets/avatar-S4vMi7Be.js +57 -0
  334. package/dist/showcase/assets/avatar-q4wqX6yD.js +1 -0
  335. package/dist/showcase/assets/badge-DJacF8-J.js +31 -0
  336. package/dist/showcase/assets/badge-check-DDJtQHcD.js +1 -0
  337. package/dist/showcase/assets/bell-DiXXE8YI.js +1 -0
  338. package/dist/showcase/assets/bot-bONqc_7j.js +1 -0
  339. package/dist/showcase/assets/box-lhUq3Chj.js +1 -0
  340. package/dist/showcase/assets/braces-IKXiJgb3.js +1 -0
  341. package/dist/showcase/assets/brain-DcXlhbJZ.js +1 -0
  342. package/dist/showcase/assets/brand-CramZg2-.js +36 -0
  343. package/dist/showcase/assets/breadcrumb-BL7UjlLh.js +1 -0
  344. package/dist/showcase/assets/breadcrumb-CZRbcf09.js +52 -0
  345. package/dist/showcase/assets/breadcrumbs-DJzvSt_Z.js +1 -0
  346. package/dist/showcase/assets/briefcase-CQQ0m97G.js +1 -0
  347. package/dist/showcase/assets/building-2-BkQcv8WR.js +1 -0
  348. package/dist/showcase/assets/button-K7M0irWq.js +44 -0
  349. package/dist/showcase/assets/button-group-KCGa38c8.js +1 -0
  350. package/dist/showcase/assets/buttons-CvyBMRD6.js +272 -0
  351. package/dist/showcase/assets/calendar-BJHjhWQX.js +1 -0
  352. package/dist/showcase/assets/calendar-ChMVRsNC.js +16 -0
  353. package/dist/showcase/assets/calendar-days-BgkRJVxQ.js +1 -0
  354. package/dist/showcase/assets/calendar-xpHhfGnq.js +1 -0
  355. package/dist/showcase/assets/camera-C67freYi.js +1 -0
  356. package/dist/showcase/assets/card-CfOqXMVz.js +188 -0
  357. package/dist/showcase/assets/card-bLjedjT5.js +1 -0
  358. package/dist/showcase/assets/card-primitives-FUPmQCsu.js +1 -0
  359. package/dist/showcase/assets/card-radio-group-D_QNJ2Hm.js +1 -0
  360. package/dist/showcase/assets/cards-yHZa0kEf.js +353 -0
  361. package/dist/showcase/assets/carousel-DG1cKry4.js +449 -0
  362. package/dist/showcase/assets/cell-renderers-qfJ-7alN.js +1 -0
  363. package/dist/showcase/assets/chart-B_yVfbWJ.js +358 -0
  364. package/dist/showcase/assets/chart-column-CYrVWmMk.js +1 -0
  365. package/dist/showcase/assets/checkbox-NW6EcvtD.js +1 -0
  366. package/dist/showcase/assets/checkbox-pA_L1P-f.js +1 -0
  367. package/dist/showcase/assets/chevron-down-DLrHjdQ6.js +1 -0
  368. package/dist/showcase/assets/chevron-left-B_NQOEWI.js +1 -0
  369. package/dist/showcase/assets/chevron-up-6hst2jwR.js +1 -0
  370. package/dist/showcase/assets/chevrons-up-down-C_pj9oOa.js +1 -0
  371. package/dist/showcase/assets/circle-Cw9qV72m.js +1 -0
  372. package/dist/showcase/assets/circle-alert-D3Vcma6L.js +1 -0
  373. package/dist/showcase/assets/circle-check-DdjJpGc9.js +1 -0
  374. package/dist/showcase/assets/circle-check-big-Dnq-jwtv.js +1 -0
  375. package/dist/showcase/assets/circle-dot-DN8DFgIP.js +1 -0
  376. package/dist/showcase/assets/circle-question-mark-Dzgiv4oS.js +1 -0
  377. package/dist/showcase/assets/circle-x-BzTSkndC.js +1 -0
  378. package/dist/showcase/assets/clock-3-CVwHXCmo.js +1 -0
  379. package/dist/showcase/assets/clock-BIJ9p953.js +1 -0
  380. package/dist/showcase/assets/code-xml-DrU5ziCA.js +1 -0
  381. package/dist/showcase/assets/collapsible-7rdCo71k.js +27 -0
  382. package/dist/showcase/assets/collapsible-DCcTSlEH.js +1 -0
  383. package/dist/showcase/assets/combobox-mx8o5sV1.js +685 -0
  384. package/dist/showcase/assets/command-CKJDGdA9.js +1 -0
  385. package/dist/showcase/assets/command-CzGLPzoO.js +1 -0
  386. package/dist/showcase/assets/comment-composer-CSoEIapl.js +1 -0
  387. package/dist/showcase/assets/comment-item-pjaH53iB.js +1 -0
  388. package/dist/showcase/assets/comments-_ccotzWA.js +357 -0
  389. package/dist/showcase/assets/commerce-BuiQiRsf.js +267 -0
  390. package/dist/showcase/assets/composite-Bghohd0p.js +1 -0
  391. package/dist/showcase/assets/contact-card-CqM2uz_w.js +65 -0
  392. package/dist/showcase/assets/content-container-fC4z98GI.js +1 -0
  393. package/dist/showcase/assets/copyable-BMQK8sID.js +1 -0
  394. package/dist/showcase/assets/copyable-DVR2FAa0.js +96 -0
  395. package/dist/showcase/assets/course-card-Cku2z18g.js +77 -0
  396. package/dist/showcase/assets/cpu-A072t3kq.js +1 -0
  397. package/dist/showcase/assets/credit-card-BGwhx9Zo.js +1 -0
  398. package/dist/showcase/assets/css-variables-BAW_VrGk.js +1205 -0
  399. package/dist/showcase/assets/currency-Da3C0Uzb.js +149 -0
  400. package/dist/showcase/assets/dark-surfaces-BHYLEj80.js +90 -0
  401. package/dist/showcase/assets/data-view--EAYihh0.js +124 -0
  402. package/dist/showcase/assets/data-view-BAMwKzZO.js +4 -0
  403. package/dist/showcase/assets/database-C489WIbr.js +1 -0
  404. package/dist/showcase/assets/date-block-DuNaPSBU.js +1 -0
  405. package/dist/showcase/assets/date-picker-Dq-9L64y.js +1 -0
  406. package/dist/showcase/assets/date-pickers-D0ReMKc9.js +73 -0
  407. package/dist/showcase/assets/dense-info-CXwjqQB1.js +106 -0
  408. package/dist/showcase/assets/design-system-consistency-CGoKv0Vf.js +264 -0
  409. package/dist/showcase/assets/dialog-DIrJcAzq.js +1 -0
  410. package/dist/showcase/assets/dialog-O45UwQJs.js +1 -0
  411. package/dist/showcase/assets/display-utilities-VKOARJyC.js +267 -0
  412. package/dist/showcase/assets/dist-BavkTE-I.js +1 -0
  413. package/dist/showcase/assets/dist-DPxPKIgU.js +45 -0
  414. package/dist/showcase/assets/dollar-sign-CH2fcyek.js +1 -0
  415. package/dist/showcase/assets/download-whAw79X4.js +1 -0
  416. package/dist/showcase/assets/dropdown-menu-PVKwhWds.js +1 -0
  417. package/dist/showcase/assets/dropzone-B9sc8Mwa.js +1 -0
  418. package/dist/showcase/assets/earth-BpkE9LMh.js +1 -0
  419. package/dist/showcase/assets/ellipsis-CEVdIbhD.js +1 -0
  420. package/dist/showcase/assets/ellipsis-vertical-CBIvtUVz.js +1 -0
  421. package/dist/showcase/assets/empty-Dp1eCMIl.js +1 -0
  422. package/dist/showcase/assets/empty-item--dZz4VlJ.js +49 -0
  423. package/dist/showcase/assets/empty-state-ZOiE-hWY.js +190 -0
  424. package/dist/showcase/assets/empty-state-dsivN4CA.js +1 -0
  425. package/dist/showcase/assets/enhanced-activities-BpzUxaof.js +357 -0
  426. package/dist/showcase/assets/enhanced-combobox-D71BOuiX.js +1 -0
  427. package/dist/showcase/assets/esm-DT-TXPCJ.js +2 -0
  428. package/dist/showcase/assets/event-calendar-aVpAFZFq.js +138 -0
  429. package/dist/showcase/assets/event-log-DVcvyQ-P.js +330 -0
  430. package/dist/showcase/assets/example-CzbL5xoH.js +1 -0
  431. package/dist/showcase/assets/external-link-BaLE1QE5.js +1 -0
  432. package/dist/showcase/assets/eye-Dq0mLKrs.js +1 -0
  433. package/dist/showcase/assets/feature-announcement-sWKBC2fs.js +34 -0
  434. package/dist/showcase/assets/file-CgW3NvCL.js +1 -0
  435. package/dist/showcase/assets/file-text-JGaJQ8Wd.js +1 -0
  436. package/dist/showcase/assets/filter-layout-jfahl8aJ.js +1 -0
  437. package/dist/showcase/assets/filters-D7zegZVD.js +139 -0
  438. package/dist/showcase/assets/flag-H6U1f4wd.js +1 -0
  439. package/dist/showcase/assets/folder-open-sT96wRxJ.js +1 -0
  440. package/dist/showcase/assets/form-field-CQuSWnj8.js +1 -0
  441. package/dist/showcase/assets/format-DGPJ5dDq.js +1 -0
  442. package/dist/showcase/assets/forms-CdDJkAFt.js +915 -0
  443. package/dist/showcase/assets/funnel-Bh56GDO0.js +1 -0
  444. package/dist/showcase/assets/generic-CqSABKHr.js +1 -0
  445. package/dist/showcase/assets/getPseudoElementBounds-Cgw3-xUB.js +1 -0
  446. package/dist/showcase/assets/gift-ChVS2ovQ.js +1 -0
  447. package/dist/showcase/assets/giftcard-cards-CuaGn8-J.js +85 -0
  448. package/dist/showcase/assets/git-branch-86jQZnz4.js +1 -0
  449. package/dist/showcase/assets/global-search-C92CjOf8.js +215 -0
  450. package/dist/showcase/assets/global-search-DpVIWyO9.js +1 -0
  451. package/dist/showcase/assets/globe-DmGzYOlq.js +1 -0
  452. package/dist/showcase/assets/gradient-card-BUZzXFdZ.js +58 -0
  453. package/dist/showcase/assets/hash-pc6IIDge.js +1 -0
  454. package/dist/showcase/assets/header-DbM4l1Z6.js +1 -0
  455. package/dist/showcase/assets/header-notifications-CaymUd4n.js +1 -0
  456. package/dist/showcase/assets/heart-DtfPBlXq.js +1 -0
  457. package/dist/showcase/assets/hooks-JiLlGOJ-.js +220 -0
  458. package/dist/showcase/assets/house-CzNWewi5.js +1 -0
  459. package/dist/showcase/assets/icon-badge-G9Fp891n.js +1 -0
  460. package/dist/showcase/assets/icon-badge-e8N5BSYf.js +37 -0
  461. package/dist/showcase/assets/image-9IQW7agU.js +1 -0
  462. package/dist/showcase/assets/inbox-DU4YaGtc.js +1 -0
  463. package/dist/showcase/assets/index-CuXjv2p6.css +2 -0
  464. package/dist/showcase/assets/index-DN09-Vts.js +10 -0
  465. package/dist/showcase/assets/inertValue-kRQb7jwi.js +1 -0
  466. package/dist/showcase/assets/info-B9AXwUDF.js +1 -0
  467. package/dist/showcase/assets/inline-stat-BkLIKCvD.js +1 -0
  468. package/dist/showcase/assets/inline-stat-XqGHDQrK.js +15 -0
  469. package/dist/showcase/assets/input-BXHv6p9P.js +1 -0
  470. package/dist/showcase/assets/input-D_T9s_tn.js +1 -0
  471. package/dist/showcase/assets/input-group-Bs8dmhR6.js +47 -0
  472. package/dist/showcase/assets/input-group-CqkASeoV.js +1 -0
  473. package/dist/showcase/assets/inputs-DY7w_ssI.js +155 -0
  474. package/dist/showcase/assets/installation-Dg3FdGJ1.js +134 -0
  475. package/dist/showcase/assets/invoice-header-Ba-Y55Ag.js +36 -0
  476. package/dist/showcase/assets/invoice-items-CIJ8EfPg.js +36 -0
  477. package/dist/showcase/assets/invoice-mini-BISFvM7J.js +14 -0
  478. package/dist/showcase/assets/invoice-table-DcyVZTvl.js +30 -0
  479. package/dist/showcase/assets/isSameDay-av07hGac.js +1 -0
  480. package/dist/showcase/assets/isToday-GY5FlPL9.js +1 -0
  481. package/dist/showcase/assets/italic-Du0n76Xk.js +1 -0
  482. package/dist/showcase/assets/item-D8Lp4R-T.js +139 -0
  483. package/dist/showcase/assets/item-DTsZnSJG.js +1 -0
  484. package/dist/showcase/assets/item-Di7HZF5G.js +1 -0
  485. package/dist/showcase/assets/kanban-Dcminjsa.js +188 -0
  486. package/dist/showcase/assets/key-round-BBue3xKx.js +1 -0
  487. package/dist/showcase/assets/label-dkUEHYaz.js +1 -0
  488. package/dist/showcase/assets/languages-XxP8Uu82.js +1 -0
  489. package/dist/showcase/assets/layers-Bi_-RuHS.js +1 -0
  490. package/dist/showcase/assets/layout-app-shell-Cr6Ep0Zz.js +608 -0
  491. package/dist/showcase/assets/layout-auth-DffIslnp.js +790 -0
  492. package/dist/showcase/assets/layout-containers-BuSg6L6o.js +101 -0
  493. package/dist/showcase/assets/layout-header-DAxSUI18.js +203 -0
  494. package/dist/showcase/assets/layout-page-CVgVJHf1.js +314 -0
  495. package/dist/showcase/assets/layout-primitives-q8NXbEld.js +34 -0
  496. package/dist/showcase/assets/layout-sidebar-bB6AJaGs.js +224 -0
  497. package/dist/showcase/assets/layout-users-DG5u517t.js +117 -0
  498. package/dist/showcase/assets/layout-workspace-CKMDUM2b.js +191 -0
  499. package/dist/showcase/assets/lib-CaQvPpSJ.js +1 -0
  500. package/dist/showcase/assets/list-checks-Dhr60VvL.js +1 -0
  501. package/dist/showcase/assets/lock-CYVbyBpM.js +1 -0
  502. package/dist/showcase/assets/lock-keyhole-TUVID45I.js +1 -0
  503. package/dist/showcase/assets/mail-DfkwmVKE.js +1 -0
  504. package/dist/showcase/assets/mail-check-CnBhgH_h.js +1 -0
  505. package/dist/showcase/assets/map-Ck14_o-F.js +124 -0
  506. package/dist/showcase/assets/map-pin-Di7TUhai.js +1 -0
  507. package/dist/showcase/assets/media-library-CzM_to29.js +699 -0
  508. package/dist/showcase/assets/mention-inline-suggestions-B1RHUfnH.js +1 -0
  509. package/dist/showcase/assets/mentions-CdaPXOLl.js +138 -0
  510. package/dist/showcase/assets/menus-DuqcLdg1.js +171 -0
  511. package/dist/showcase/assets/message-square-DuW3PrFI.js +1 -0
  512. package/dist/showcase/assets/metadata-list-CCRGSPaS.js +286 -0
  513. package/dist/showcase/assets/metadata-list-Drvz5mwy.js +1 -0
  514. package/dist/showcase/assets/metric-BSaXa3Z_.js +1 -0
  515. package/dist/showcase/assets/metric-bar-CM1Rmk8y.js +1 -0
  516. package/dist/showcase/assets/metric-grid-BBGxdYNJ.js +1 -0
  517. package/dist/showcase/assets/metric-trend-chip-C_LrbPyT.js +1 -0
  518. package/dist/showcase/assets/metrics-analytics-bar-ByvVltQV.js +44 -0
  519. package/dist/showcase/assets/metrics-analytics-cards-CNGiVG1A.js +50 -0
  520. package/dist/showcase/assets/metrics-comparison-BLUvtt5N.js +76 -0
  521. package/dist/showcase/assets/metrics-heatmap-CZWhn4_i.js +27 -0
  522. package/dist/showcase/assets/metrics-inline-badge-CcPm2_ON.js +17 -0
  523. package/dist/showcase/assets/metrics-kpi-row-CitG5Aea.js +31 -0
  524. package/dist/showcase/assets/metrics-micro-grid-CAsplRVI.js +42 -0
  525. package/dist/showcase/assets/metrics-overview-DSRwW-3j.js +192 -0
  526. package/dist/showcase/assets/metrics-stat-cards-BTdSpUV_.js +54 -0
  527. package/dist/showcase/assets/minus-BaXg6nPb.js +1 -0
  528. package/dist/showcase/assets/money-display-HegN6NVU.js +1 -0
  529. package/dist/showcase/assets/month-year-picker-DGSalGea.js +1 -0
  530. package/dist/showcase/assets/navigation-B9kcgNmJ.js +90 -0
  531. package/dist/showcase/assets/navigation-D4OJbw4T.js +231 -0
  532. package/dist/showcase/assets/navigation-extras-xm_wzPZr.js +43 -0
  533. package/dist/showcase/assets/onboarding-checklist-CWuCJKDd.js +119 -0
  534. package/dist/showcase/assets/overflow-tab-bar-Dq-I4MUu.js +1 -0
  535. package/dist/showcase/assets/overlays-BHf9SZOh.js +159 -0
  536. package/dist/showcase/assets/overlays-DziL3nVU.js +408 -0
  537. package/dist/showcase/assets/overview-Cc69up8i.js +184 -0
  538. package/dist/showcase/assets/package-Bc-NuFnd.js +1 -0
  539. package/dist/showcase/assets/package-check-5LQwCfGh.js +1 -0
  540. package/dist/showcase/assets/page-B2o5HSfY.js +1 -0
  541. package/dist/showcase/assets/page-action-button-CfS6vsyC.js +1 -0
  542. package/dist/showcase/assets/page-header-W6quU5pO.js +1 -0
  543. package/dist/showcase/assets/pagination-Bfs7Zszm.js +1 -0
  544. package/dist/showcase/assets/pagination-DHs104ji.js +42 -0
  545. package/dist/showcase/assets/paperclip-CXeiMywc.js +1 -0
  546. package/dist/showcase/assets/password-input-C61t743N.js +1 -0
  547. package/dist/showcase/assets/pencil-C1TXsTfP.js +1 -0
  548. package/dist/showcase/assets/phone-Bh-68R_E.js +1 -0
  549. package/dist/showcase/assets/plus-CKBaO4jG.js +1 -0
  550. package/dist/showcase/assets/popover-C_7qLizt.js +1 -0
  551. package/dist/showcase/assets/popover-hgtHqd0h.js +1 -0
  552. package/dist/showcase/assets/popover-menu-DmYSBsji.js +1 -0
  553. package/dist/showcase/assets/products-DSvcQz-Q.js +423 -0
  554. package/dist/showcase/assets/progress-Chxeo8g4.js +18 -0
  555. package/dist/showcase/assets/progress-fYPoCyf-.js +1 -0
  556. package/dist/showcase/assets/props-table-izArO1Pv.js +1 -0
  557. package/dist/showcase/assets/quote-wvfNu9t7.js +1 -0
  558. package/dist/showcase/assets/receipt-BlXBX4ZJ.js +1 -0
  559. package/dist/showcase/assets/receipt-text-stSsUTV5.js +1 -0
  560. package/dist/showcase/assets/refinement-guide-Bri81J9N.js +189 -0
  561. package/dist/showcase/assets/refresh-cw-tZzNDEGO.js +1 -0
  562. package/dist/showcase/assets/resolveValueLabel-Cti97iX8.js +1 -0
  563. package/dist/showcase/assets/resource-B727CTVi.js +139 -0
  564. package/dist/showcase/assets/resource-DytT_quB.js +1 -0
  565. package/dist/showcase/assets/resource-selector-card-wNuW382N.js +43 -0
  566. package/dist/showcase/assets/rich-text-editor-DdK5YD0y.js +143 -0
  567. package/dist/showcase/assets/rich-text-editor-DqY2H6e0.js +124 -0
  568. package/dist/showcase/assets/rotate-ccw-Bp4aMDrI.js +1 -0
  569. package/dist/showcase/assets/route-D2owHMka.js +1 -0
  570. package/dist/showcase/assets/save-DjC_iy0t.js +1 -0
  571. package/dist/showcase/assets/schema-form-CQtLwGC1.js +327 -0
  572. package/dist/showcase/assets/scroll-area-BQlHFfkG.js +32 -0
  573. package/dist/showcase/assets/scroll-area-D3Rrt85s.js +1 -0
  574. package/dist/showcase/assets/section-DYfGx1Q5.js +1 -0
  575. package/dist/showcase/assets/select-BCJGhRpc.js +1 -0
  576. package/dist/showcase/assets/select-Cf5EigqA.js +1 -0
  577. package/dist/showcase/assets/send-86Vr11Ys.js +1 -0
  578. package/dist/showcase/assets/separator-BHjNVb5O.js +1 -0
  579. package/dist/showcase/assets/separator-BejjbTbO.js +28 -0
  580. package/dist/showcase/assets/settings-2-DNNVOsjP.js +1 -0
  581. package/dist/showcase/assets/settings-Bsi5BLx5.js +1 -0
  582. package/dist/showcase/assets/sheet-BazhMvfb.js +1 -0
  583. package/dist/showcase/assets/shield-alert-D-Jbocfj.js +1 -0
  584. package/dist/showcase/assets/shield-check-D9eDVcJ1.js +1 -0
  585. package/dist/showcase/assets/shield-xI2P9G5d.js +1 -0
  586. package/dist/showcase/assets/shopping-bag-DOGs3sez.js +1 -0
  587. package/dist/showcase/assets/showcase-s-5CuLAJ.js +132 -0
  588. package/dist/showcase/assets/sidebar-Rz44gw_a.js +1 -0
  589. package/dist/showcase/assets/sidebar.context-Bbcdo3o8.js +1 -0
  590. package/dist/showcase/assets/skeleton-CY8ieqD-.js +1 -0
  591. package/dist/showcase/assets/skeleton-CgoH6CPT.js +29 -0
  592. package/dist/showcase/assets/slider-okW2bgkG.js +1 -0
  593. package/dist/showcase/assets/smart-card-CVwEPwfI.js +1 -0
  594. package/dist/showcase/assets/sonner-CixCpxj2.js +22 -0
  595. package/dist/showcase/assets/sortable.esm-DKcVtGTb.js +5 -0
  596. package/dist/showcase/assets/sparkles-DDEVdtmy.js +1 -0
  597. package/dist/showcase/assets/spinner-BVGPoAEv.js +49 -0
  598. package/dist/showcase/assets/spinner-FURXSp1Q.js +1 -0
  599. package/dist/showcase/assets/spinner-u6TwJ3Ii.js +30 -0
  600. package/dist/showcase/assets/square-pen-DVXVT0cQ.js +1 -0
  601. package/dist/showcase/assets/stacked-avatars-CKOQhAx4.js +1 -0
  602. package/dist/showcase/assets/star-B3ZPfxuz.js +1 -0
  603. package/dist/showcase/assets/startOfDay-LwMBRUSU.js +1 -0
  604. package/dist/showcase/assets/styles-UIKkojWJ.js +1 -0
  605. package/dist/showcase/assets/suggestions-DbrzKjbi.js +126 -0
  606. package/dist/showcase/assets/switch-CAw84QpS.js +1 -0
  607. package/dist/showcase/assets/switch-Cjt2MCgr.js +1 -0
  608. package/dist/showcase/assets/sync-DWbqfpBH.js +124 -0
  609. package/dist/showcase/assets/table-Bx5lo5FP.js +686 -0
  610. package/dist/showcase/assets/table-C2RQulDb.js +1 -0
  611. package/dist/showcase/assets/table-actions-Clo3WEfM.js +1 -0
  612. package/dist/showcase/assets/tabs-DRtlcg6b.js +19 -0
  613. package/dist/showcase/assets/tabs-wMPtvuT5.js +1 -0
  614. package/dist/showcase/assets/tags-input-D5FpWOWF.js +1 -0
  615. package/dist/showcase/assets/text-button-Cwh6D6qG.js +1 -0
  616. package/dist/showcase/assets/text-link-DI1uXdGl.js +1 -0
  617. package/dist/showcase/assets/textarea-CGbt4gBZ.js +1 -0
  618. package/dist/showcase/assets/textarea-JPgPLhyk.js +1 -0
  619. package/dist/showcase/assets/timelines-CkHN08n6.js +200 -0
  620. package/dist/showcase/assets/toggle-group-BpXkR9uD.js +1 -0
  621. package/dist/showcase/assets/toggles-DK9iCbki.js +71 -0
  622. package/dist/showcase/assets/toggles-group-DwzRj0f7.js +32 -0
  623. package/dist/showcase/assets/tooltip-PtP1suag.js +31 -0
  624. package/dist/showcase/assets/trash-2-BE4XUI2g.js +1 -0
  625. package/dist/showcase/assets/trending-up-ByxOf-nR.js +1 -0
  626. package/dist/showcase/assets/truck-RTOdcRV0.js +1 -0
  627. package/dist/showcase/assets/typography-BKLgHDxU.js +223 -0
  628. package/dist/showcase/assets/ui-badge-DIh_3Wmo.js +28 -0
  629. package/dist/showcase/assets/ui-card-BOdHnZwv.js +30 -0
  630. package/dist/showcase/assets/ui-table-BW4FCClv.js +42 -0
  631. package/dist/showcase/assets/upload-tray-CV9_5Lpa.js +138 -0
  632. package/dist/showcase/assets/use-layout-link-MyeE-CDj.js +1 -0
  633. package/dist/showcase/assets/useAnchoredPopupScrollLock-DSaog2w5.js +1 -0
  634. package/dist/showcase/assets/useAriaLabelledBy-DSpPzrxG.js +1 -0
  635. package/dist/showcase/assets/useCollapsiblePanel-DsuJtES0.js +1 -0
  636. package/dist/showcase/assets/useCompositeItem-lbAimLrR.js +1 -0
  637. package/dist/showcase/assets/useCompositeListItem-pRXWGj4x.js +1 -0
  638. package/dist/showcase/assets/useLabelableId-IRM1zB5m.js +1 -0
  639. package/dist/showcase/assets/useOpenInteractionType-CHDcTj9f.js +1 -0
  640. package/dist/showcase/assets/useRender-Ogz5zjeJ.js +1 -0
  641. package/dist/showcase/assets/useTriggerFocusGuards-Du6btFNB.js +1 -0
  642. package/dist/showcase/assets/useValueChanged-CXpsR4fl.js +1 -0
  643. package/dist/showcase/assets/user-plus-CLj8AZe1.js +1 -0
  644. package/dist/showcase/assets/user-ymdT26JK.js +1 -0
  645. package/dist/showcase/assets/users-BGba2Xwv.js +1 -0
  646. package/dist/showcase/assets/vendor-profile-Ci6c9mFC.js +37 -0
  647. package/dist/showcase/assets/video-BcKa36-p.js +1 -0
  648. package/dist/showcase/assets/wrench-Cj2hRrih.js +1 -0
  649. package/dist/showcase/assets/x-iCqjAC2D.js +1 -0
  650. package/dist/showcase/assets/zap-H4bc_OhS.js +1 -0
  651. package/dist/showcase/index.html +2 -2
  652. package/dist/style.css +1 -1
  653. package/package.json +1 -1
  654. package/src/css/tokens/foundation.css +19 -5
  655. package/dist/_shared/accordion-BRj4TDQx.js +0 -135
  656. package/dist/_shared/accordion-BRj4TDQx.js.map +0 -1
  657. package/dist/_shared/accordion-DvlDjk29.cjs +0 -2
  658. package/dist/_shared/accordion-DvlDjk29.cjs.map +0 -1
  659. package/dist/_shared/ai-artifact-BHgd3agA.js +0 -1099
  660. package/dist/_shared/ai-artifact-BHgd3agA.js.map +0 -1
  661. package/dist/_shared/ai-artifact-BRM5cvGv.cjs +0 -3
  662. package/dist/_shared/ai-artifact-BRM5cvGv.cjs.map +0 -1
  663. package/dist/_shared/alert-CMVVt2Br.js +0 -81
  664. package/dist/_shared/alert-CMVVt2Br.js.map +0 -1
  665. package/dist/_shared/alert-Dmhtbmpg.cjs +0 -2
  666. package/dist/_shared/alert-Dmhtbmpg.cjs.map +0 -1
  667. package/dist/_shared/auth-DZW6NkJx.cjs +0 -2
  668. package/dist/_shared/auth-DZW6NkJx.cjs.map +0 -1
  669. package/dist/_shared/auth-Dh790NI_.js +0 -643
  670. package/dist/_shared/auth-Dh790NI_.js.map +0 -1
  671. package/dist/_shared/badge-B8xGFpfM.cjs +0 -2
  672. package/dist/_shared/badge-B8xGFpfM.cjs.map +0 -1
  673. package/dist/_shared/badge-BYNwSWh5.js +0 -110
  674. package/dist/_shared/badge-BYNwSWh5.js.map +0 -1
  675. package/dist/_shared/card-radio-group-Bhe8gAbH.js +0 -150
  676. package/dist/_shared/card-radio-group-Bhe8gAbH.js.map +0 -1
  677. package/dist/_shared/card-radio-group-CdG1zr8M.cjs +0 -2
  678. package/dist/_shared/card-radio-group-CdG1zr8M.cjs.map +0 -1
  679. package/dist/_shared/cards-Cu6p1Brd.cjs +0 -2
  680. package/dist/_shared/cards-Cu6p1Brd.cjs.map +0 -1
  681. package/dist/_shared/cards-cQ9lL6zy.js +0 -354
  682. package/dist/_shared/cards-cQ9lL6zy.js.map +0 -1
  683. package/dist/_shared/combobox-BGYjyXeN.cjs +0 -2
  684. package/dist/_shared/combobox-BGYjyXeN.cjs.map +0 -1
  685. package/dist/_shared/combobox-DTwomOBt.js +0 -954
  686. package/dist/_shared/combobox-DTwomOBt.js.map +0 -1
  687. package/dist/_shared/command-ByedBajF.js +0 -39
  688. package/dist/_shared/command-ByedBajF.js.map +0 -1
  689. package/dist/_shared/command-EGR0nhGc.cjs +0 -2
  690. package/dist/_shared/command-EGR0nhGc.cjs.map +0 -1
  691. package/dist/_shared/comments-C97vL5km.js +0 -952
  692. package/dist/_shared/comments-C97vL5km.js.map +0 -1
  693. package/dist/_shared/comments-DBe6dP-d.cjs +0 -2
  694. package/dist/_shared/comments-DBe6dP-d.cjs.map +0 -1
  695. package/dist/_shared/copyable-BgFdERqs.js +0 -38
  696. package/dist/_shared/copyable-BgFdERqs.js.map +0 -1
  697. package/dist/_shared/copyable-Ce8rmE-V.cjs +0 -2
  698. package/dist/_shared/copyable-Ce8rmE-V.cjs.map +0 -1
  699. package/dist/_shared/data-display-DUWxoDKq.js +0 -1873
  700. package/dist/_shared/data-display-DUWxoDKq.js.map +0 -1
  701. package/dist/_shared/data-display-o-rbMuIA.cjs +0 -2
  702. package/dist/_shared/data-display-o-rbMuIA.cjs.map +0 -1
  703. package/dist/_shared/date-picker-Cxx9jllA.js +0 -1361
  704. package/dist/_shared/date-picker-Cxx9jllA.js.map +0 -1
  705. package/dist/_shared/date-picker-DE5A8yqN.cjs +0 -2
  706. package/dist/_shared/date-picker-DE5A8yqN.cjs.map +0 -1
  707. package/dist/_shared/date-pickers-Dex1Mfye.cjs +0 -2
  708. package/dist/_shared/date-pickers-Dex1Mfye.cjs.map +0 -1
  709. package/dist/_shared/date-pickers-m0dpDcqH.js +0 -329
  710. package/dist/_shared/date-pickers-m0dpDcqH.js.map +0 -1
  711. package/dist/_shared/display-Bro3Kufg.js +0 -986
  712. package/dist/_shared/display-Bro3Kufg.js.map +0 -1
  713. package/dist/_shared/display-CRQjSjgB.cjs +0 -2
  714. package/dist/_shared/display-CRQjSjgB.cjs.map +0 -1
  715. package/dist/_shared/forms-D-SNQmtB.cjs +0 -2
  716. package/dist/_shared/forms-D-SNQmtB.cjs.map +0 -1
  717. package/dist/_shared/forms-p7cfzJwf.js +0 -3533
  718. package/dist/_shared/forms-p7cfzJwf.js.map +0 -1
  719. package/dist/_shared/header-8C71wVRp.js +0 -447
  720. package/dist/_shared/header-8C71wVRp.js.map +0 -1
  721. package/dist/_shared/header-CYgFCnjZ.cjs +0 -2
  722. package/dist/_shared/header-CYgFCnjZ.cjs.map +0 -1
  723. package/dist/_shared/hooks-Ci1LFWRG.js +0 -95
  724. package/dist/_shared/hooks-Ci1LFWRG.js.map +0 -1
  725. package/dist/_shared/hooks-Cjl7LJpn.cjs +0 -2
  726. package/dist/_shared/hooks-Cjl7LJpn.cjs.map +0 -1
  727. package/dist/_shared/input-BgcP6x4C.js +0 -182
  728. package/dist/_shared/input-BgcP6x4C.js.map +0 -1
  729. package/dist/_shared/input-DV3g7Fm5.cjs +0 -2
  730. package/dist/_shared/input-DV3g7Fm5.cjs.map +0 -1
  731. package/dist/_shared/item-D7GTzvhf.js +0 -226
  732. package/dist/_shared/item-D7GTzvhf.js.map +0 -1
  733. package/dist/_shared/item-DTrnHpfm.cjs +0 -2
  734. package/dist/_shared/item-DTrnHpfm.cjs.map +0 -1
  735. package/dist/_shared/layout-BExg7Vlx.js +0 -261
  736. package/dist/_shared/layout-BExg7Vlx.js.map +0 -1
  737. package/dist/_shared/layout-CKRD_goE.cjs +0 -2
  738. package/dist/_shared/layout-CKRD_goE.cjs.map +0 -1
  739. package/dist/_shared/mentions-BtGhYisA.js +0 -506
  740. package/dist/_shared/mentions-BtGhYisA.js.map +0 -1
  741. package/dist/_shared/mentions-CnVOuQJU.cjs +0 -2
  742. package/dist/_shared/mentions-CnVOuQJU.cjs.map +0 -1
  743. package/dist/_shared/money-display-BvVpRUs5.cjs +0 -2
  744. package/dist/_shared/money-display-BvVpRUs5.cjs.map +0 -1
  745. package/dist/_shared/money-display-D6Qtvyyv.js +0 -198
  746. package/dist/_shared/money-display-D6Qtvyyv.js.map +0 -1
  747. package/dist/_shared/navigation-C4dO1I82.cjs +0 -2
  748. package/dist/_shared/navigation-C4dO1I82.cjs.map +0 -1
  749. package/dist/_shared/navigation-Ct-LFlpY.js +0 -436
  750. package/dist/_shared/navigation-Ct-LFlpY.js.map +0 -1
  751. package/dist/_shared/overlays-ChyqXn0n.js +0 -735
  752. package/dist/_shared/overlays-ChyqXn0n.js.map +0 -1
  753. package/dist/_shared/overlays-Dn2bt3CL.cjs +0 -2
  754. package/dist/_shared/overlays-Dn2bt3CL.cjs.map +0 -1
  755. package/dist/_shared/popover-menu-17Dxn25O.js +0 -93
  756. package/dist/_shared/popover-menu-17Dxn25O.js.map +0 -1
  757. package/dist/_shared/popover-menu-DXVN0bvj.cjs +0 -2
  758. package/dist/_shared/popover-menu-DXVN0bvj.cjs.map +0 -1
  759. package/dist/_shared/rich-text-editor-BRpcNkj1.js +0 -620
  760. package/dist/_shared/rich-text-editor-BRpcNkj1.js.map +0 -1
  761. package/dist/_shared/rich-text-editor-BXxGNbmI.cjs +0 -2
  762. package/dist/_shared/rich-text-editor-BXxGNbmI.cjs.map +0 -1
  763. package/dist/_shared/settings-CW9yzfQM.js +0 -143
  764. package/dist/_shared/settings-CW9yzfQM.js.map +0 -1
  765. package/dist/_shared/settings-cCPrw7si.cjs +0 -2
  766. package/dist/_shared/settings-cCPrw7si.cjs.map +0 -1
  767. package/dist/_shared/sidebar-Cq6J_I4l.cjs +0 -2
  768. package/dist/_shared/sidebar-Cq6J_I4l.cjs.map +0 -1
  769. package/dist/_shared/sidebar-DtF_ihE3.js +0 -548
  770. package/dist/_shared/sidebar-DtF_ihE3.js.map +0 -1
  771. package/dist/_shared/spinner-DY2de3Wt.cjs +0 -2
  772. package/dist/_shared/spinner-DY2de3Wt.cjs.map +0 -1
  773. package/dist/_shared/spinner-ZmIq_zsx.js +0 -67
  774. package/dist/_shared/spinner-ZmIq_zsx.js.map +0 -1
  775. package/dist/_shared/table-BBWc-wIw.js +0 -1377
  776. package/dist/_shared/table-BBWc-wIw.js.map +0 -1
  777. package/dist/_shared/table-DMDkdLzV.cjs +0 -2
  778. package/dist/_shared/table-DMDkdLzV.cjs.map +0 -1
  779. package/dist/_shared/textarea-C1TeJ7Vt.cjs +0 -2
  780. package/dist/_shared/textarea-C1TeJ7Vt.cjs.map +0 -1
  781. package/dist/_shared/textarea-CGRkgH5z.js +0 -118
  782. package/dist/_shared/textarea-CGRkgH5z.js.map +0 -1
  783. package/dist/_shared/typography-CzFVA1w1.js +0 -201
  784. package/dist/_shared/typography-CzFVA1w1.js.map +0 -1
  785. package/dist/_shared/typography-GtkgK9QX.cjs +0 -2
  786. package/dist/_shared/typography-GtkgK9QX.cjs.map +0 -1
  787. package/dist/_shared/workspace-BF5BtDhD.cjs +0 -2
  788. package/dist/_shared/workspace-BF5BtDhD.cjs.map +0 -1
  789. package/dist/_shared/workspace-IvsczduM.js +0 -357
  790. package/dist/_shared/workspace-IvsczduM.js.map +0 -1
  791. package/dist/showcase/assets/AreaChart-CsIm9z7Y.js +0 -6
  792. package/dist/showcase/assets/CompositeItem-D9zznn01.js +0 -1
  793. package/dist/showcase/assets/CompositeRoot-CvxtZ81W.js +0 -1
  794. package/dist/showcase/assets/DialogTrigger-C-osQGHu.js +0 -1
  795. package/dist/showcase/assets/LabelableContext-_EE-HBND.js +0 -1
  796. package/dist/showcase/assets/PreviewLayout-KdEsSl3b.js +0 -1
  797. package/dist/showcase/assets/RadioGroup-4jOeNTc1.js +0 -1
  798. package/dist/showcase/assets/ScrollAreaCorner-CXTdUcaE.js +0 -1
  799. package/dist/showcase/assets/Separator-CHVXO6nj.js +0 -1
  800. package/dist/showcase/assets/ToolbarRootContext-CM5tQGGX.js +0 -1
  801. package/dist/showcase/assets/accordion-CA84bxb2.js +0 -171
  802. package/dist/showcase/assets/accordion-variants-DqWzAOO3.js +0 -1
  803. package/dist/showcase/assets/action-menu-D0q5z-Kq.js +0 -1
  804. package/dist/showcase/assets/actions-DnqxABJU.js +0 -310
  805. package/dist/showcase/assets/activities-BC9hoMy9.js +0 -500
  806. package/dist/showcase/assets/activities-feed-card-D6wGLpbH.js +0 -1
  807. package/dist/showcase/assets/admin-CMnMsugJ.js +0 -140
  808. package/dist/showcase/assets/ai-B6_sE9Zg.js +0 -207
  809. package/dist/showcase/assets/ai-artifact-BVvbsSJB.js +0 -2
  810. package/dist/showcase/assets/ai-chat-lcXeqJrA.js +0 -568
  811. package/dist/showcase/assets/ai-elements-B32o_UjE.js +0 -387
  812. package/dist/showcase/assets/ai-tool-call-BLrAioKz.js +0 -1
  813. package/dist/showcase/assets/alert-B1p1Grce.js +0 -62
  814. package/dist/showcase/assets/alert-BBiffYsY.js +0 -93
  815. package/dist/showcase/assets/alert-vH0nJ8J9.js +0 -1
  816. package/dist/showcase/assets/api-key-list-BrSc6V1y.js +0 -1
  817. package/dist/showcase/assets/api-key-list-CoKe_PaL.js +0 -73
  818. package/dist/showcase/assets/app-sidebar-R93lRPB4.js +0 -1
  819. package/dist/showcase/assets/arrow-down-xxVIADbv.js +0 -1
  820. package/dist/showcase/assets/arrow-left-DxnlnN8R.js +0 -1
  821. package/dist/showcase/assets/arrow-right-S5k93UPM.js +0 -1
  822. package/dist/showcase/assets/arrow-up-OlEVG7a-.js +0 -1
  823. package/dist/showcase/assets/arrow-up-right-j55bbl4b.js +0 -1
  824. package/dist/showcase/assets/avatar-BbiXvZq7.js +0 -67
  825. package/dist/showcase/assets/avatar-Bwpw-hQo.js +0 -57
  826. package/dist/showcase/assets/avatar-D0DKQ1lK.js +0 -1
  827. package/dist/showcase/assets/avatar-WyjSBov9.js +0 -1
  828. package/dist/showcase/assets/badge-BzLZQO3L.js +0 -31
  829. package/dist/showcase/assets/badge-check-TFWm1m3F.js +0 -1
  830. package/dist/showcase/assets/bell-CmuQlO_k.js +0 -1
  831. package/dist/showcase/assets/bot-Bu518AJB.js +0 -1
  832. package/dist/showcase/assets/box-D-wrSdOJ.js +0 -1
  833. package/dist/showcase/assets/braces-CgCdmdAl.js +0 -1
  834. package/dist/showcase/assets/brain-DkHdwgHO.js +0 -1
  835. package/dist/showcase/assets/brand-CpovnVoG.js +0 -36
  836. package/dist/showcase/assets/breadcrumb-BUc0WC5d.js +0 -1
  837. package/dist/showcase/assets/breadcrumb-Do_Dazt1.js +0 -52
  838. package/dist/showcase/assets/breadcrumbs-Bj21o2zm.js +0 -1
  839. package/dist/showcase/assets/briefcase-CQBh2kok.js +0 -1
  840. package/dist/showcase/assets/building-2-D07Ej6iR.js +0 -1
  841. package/dist/showcase/assets/button-CCZ4KEGQ.js +0 -44
  842. package/dist/showcase/assets/button-group-BTjeHOvz.js +0 -1
  843. package/dist/showcase/assets/buttons-D45Wwiwn.js +0 -272
  844. package/dist/showcase/assets/calendar-BsEWULmZ.js +0 -16
  845. package/dist/showcase/assets/calendar-CkPefzIO.js +0 -1
  846. package/dist/showcase/assets/calendar-DZlT3qTq.js +0 -1
  847. package/dist/showcase/assets/calendar-days-C9awTMru.js +0 -1
  848. package/dist/showcase/assets/camera-CQhMw-RD.js +0 -1
  849. package/dist/showcase/assets/card-CKrz_UHt.js +0 -1
  850. package/dist/showcase/assets/card-DZgZgjXO.js +0 -188
  851. package/dist/showcase/assets/card-primitives-CpkDLK3Y.js +0 -1
  852. package/dist/showcase/assets/card-radio-group-BjXwMI4v.js +0 -1
  853. package/dist/showcase/assets/cards-Cd24XZ9l.js +0 -353
  854. package/dist/showcase/assets/carousel-Doon04yO.js +0 -449
  855. package/dist/showcase/assets/cell-renderers-CTay3duH.js +0 -1
  856. package/dist/showcase/assets/chart-CkvbdpWw.js +0 -358
  857. package/dist/showcase/assets/chart-column-Dz57kUMl.js +0 -1
  858. package/dist/showcase/assets/checkbox-L-L4-wvA.js +0 -1
  859. package/dist/showcase/assets/checkbox-sP254E7e.js +0 -1
  860. package/dist/showcase/assets/chevron-down-CLc_a2Ua.js +0 -1
  861. package/dist/showcase/assets/chevron-left-CMRIGOJt.js +0 -1
  862. package/dist/showcase/assets/chevron-up-BDw6LdDZ.js +0 -1
  863. package/dist/showcase/assets/chevrons-up-down-C519RKki.js +0 -1
  864. package/dist/showcase/assets/circle-B_tOHWTY.js +0 -1
  865. package/dist/showcase/assets/circle-alert-B56AFULT.js +0 -1
  866. package/dist/showcase/assets/circle-check-B4XZj4Ty.js +0 -1
  867. package/dist/showcase/assets/circle-check-big-C0iEkwPB.js +0 -1
  868. package/dist/showcase/assets/circle-dot-DPdJZkc6.js +0 -1
  869. package/dist/showcase/assets/circle-question-mark-LTetdrq6.js +0 -1
  870. package/dist/showcase/assets/circle-x-B4FwM-sI.js +0 -1
  871. package/dist/showcase/assets/clock-3-DZhjBuw8.js +0 -1
  872. package/dist/showcase/assets/clock-B9Fna2Q3.js +0 -1
  873. package/dist/showcase/assets/code-xml-B6Xb_vIg.js +0 -1
  874. package/dist/showcase/assets/collapsible-Bf7Oo37i.js +0 -27
  875. package/dist/showcase/assets/collapsible-BfLeooy8.js +0 -1
  876. package/dist/showcase/assets/combobox-4NYfJznY.js +0 -685
  877. package/dist/showcase/assets/command-7jRRucHf.js +0 -1
  878. package/dist/showcase/assets/command-D56CjgNc.js +0 -1
  879. package/dist/showcase/assets/comment-composer-BWeXIZfK.js +0 -1
  880. package/dist/showcase/assets/comment-item-ChkiK-ut.js +0 -1
  881. package/dist/showcase/assets/comments-YnEop7v3.js +0 -357
  882. package/dist/showcase/assets/commerce-7XxWJChs.js +0 -267
  883. package/dist/showcase/assets/composite-CHcyYCsk.js +0 -1
  884. package/dist/showcase/assets/contact-card-BXw-VuBm.js +0 -65
  885. package/dist/showcase/assets/content-container-C4uopCBg.js +0 -1
  886. package/dist/showcase/assets/copyable-CjVYEJ0P.js +0 -1
  887. package/dist/showcase/assets/copyable-Cz2jW7yL.js +0 -96
  888. package/dist/showcase/assets/course-card-CvK3dw9W.js +0 -77
  889. package/dist/showcase/assets/cpu-Vk5WgcC1.js +0 -1
  890. package/dist/showcase/assets/credit-card-CaigqZGk.js +0 -1
  891. package/dist/showcase/assets/css-variables-hLaBmeMt.js +0 -1190
  892. package/dist/showcase/assets/currency-yO1giHp1.js +0 -149
  893. package/dist/showcase/assets/dark-surfaces-BPQnyk9a.js +0 -90
  894. package/dist/showcase/assets/data-view-CjjXn5VT.js +0 -124
  895. package/dist/showcase/assets/data-view-DF0n8uva.js +0 -4
  896. package/dist/showcase/assets/database-ChUBDe8E.js +0 -1
  897. package/dist/showcase/assets/date-block-DUg1Oyn4.js +0 -1
  898. package/dist/showcase/assets/date-picker-CoQPZa34.js +0 -1
  899. package/dist/showcase/assets/date-pickers-B-IUbyXw.js +0 -73
  900. package/dist/showcase/assets/dense-info-zVQSWqOU.js +0 -106
  901. package/dist/showcase/assets/design-system-consistency-Bnz_h3-6.js +0 -264
  902. package/dist/showcase/assets/dialog-BtilpgxJ.js +0 -1
  903. package/dist/showcase/assets/dialog-kf9WwmTC.js +0 -1
  904. package/dist/showcase/assets/display-utilities-BBzG5EPX.js +0 -267
  905. package/dist/showcase/assets/dist-9gFIhkw-.js +0 -45
  906. package/dist/showcase/assets/dist-CGpz_7Mu.js +0 -1
  907. package/dist/showcase/assets/dollar-sign-CWbYI3Pd.js +0 -1
  908. package/dist/showcase/assets/download-Bt_z-poH.js +0 -1
  909. package/dist/showcase/assets/dropdown-menu-C1_SYTHm.js +0 -1
  910. package/dist/showcase/assets/dropzone-D5BGVTnl.js +0 -1
  911. package/dist/showcase/assets/earth-sP5mIgG3.js +0 -1
  912. package/dist/showcase/assets/ellipsis-vertical-BD7kMOzj.js +0 -1
  913. package/dist/showcase/assets/ellipsis-yqIF49C8.js +0 -1
  914. package/dist/showcase/assets/empty-DIrJgtrh.js +0 -1
  915. package/dist/showcase/assets/empty-item-GgnZk2yf.js +0 -49
  916. package/dist/showcase/assets/empty-state-ZGKkJ6sf.js +0 -190
  917. package/dist/showcase/assets/empty-state-n_Fspzt-.js +0 -1
  918. package/dist/showcase/assets/enhanced-activities-CCw_hZnZ.js +0 -357
  919. package/dist/showcase/assets/enhanced-combobox-bBF-ADDs.js +0 -1
  920. package/dist/showcase/assets/esm-CyFPn936.js +0 -2
  921. package/dist/showcase/assets/event-calendar-Czo7yBDx.js +0 -138
  922. package/dist/showcase/assets/event-log-DJ3B3nMV.js +0 -330
  923. package/dist/showcase/assets/example-eGsLGIcp.js +0 -1
  924. package/dist/showcase/assets/external-link-DPOQEVWH.js +0 -1
  925. package/dist/showcase/assets/eye-CN92NVL0.js +0 -1
  926. package/dist/showcase/assets/feature-announcement-BXkSW17e.js +0 -34
  927. package/dist/showcase/assets/file-CFHePlKG.js +0 -1
  928. package/dist/showcase/assets/file-text--WYCYQMw.js +0 -1
  929. package/dist/showcase/assets/filter-layout-B35gGmcO.js +0 -1
  930. package/dist/showcase/assets/filters-GDW_oiT3.js +0 -139
  931. package/dist/showcase/assets/flag-XsT9XFPr.js +0 -1
  932. package/dist/showcase/assets/folder-open-RtsQ8vxf.js +0 -1
  933. package/dist/showcase/assets/form-field-Bijd1Gex.js +0 -1
  934. package/dist/showcase/assets/format-Ckw4OM66.js +0 -1
  935. package/dist/showcase/assets/forms-00bU7LN8.js +0 -915
  936. package/dist/showcase/assets/funnel-qu25WlXD.js +0 -1
  937. package/dist/showcase/assets/generic-Bf82Wiol.js +0 -1
  938. package/dist/showcase/assets/getPseudoElementBounds-BR4_m2HH.js +0 -1
  939. package/dist/showcase/assets/gift-D4GQoqzV.js +0 -1
  940. package/dist/showcase/assets/giftcard-cards-CMutwaAY.js +0 -85
  941. package/dist/showcase/assets/git-branch-B2QG2zRg.js +0 -1
  942. package/dist/showcase/assets/global-search-CRAB9TSF.js +0 -1
  943. package/dist/showcase/assets/global-search-DY0cKfhY.js +0 -215
  944. package/dist/showcase/assets/globe-BxZW28rG.js +0 -1
  945. package/dist/showcase/assets/gradient-card-CQGnXG8r.js +0 -58
  946. package/dist/showcase/assets/hash-CsRtIoKK.js +0 -1
  947. package/dist/showcase/assets/header-DzYOgZLP.js +0 -1
  948. package/dist/showcase/assets/header-notifications-D_CJPbvs.js +0 -1
  949. package/dist/showcase/assets/heart-B2YsYprq.js +0 -1
  950. package/dist/showcase/assets/hooks-BhUMA4Tb.js +0 -220
  951. package/dist/showcase/assets/house-HeRFNhI0.js +0 -1
  952. package/dist/showcase/assets/icon-badge-CpDkc-S0.js +0 -37
  953. package/dist/showcase/assets/icon-badge-eNEGgpAV.js +0 -1
  954. package/dist/showcase/assets/image-T88JyDag.js +0 -1
  955. package/dist/showcase/assets/inbox-DLrLLnTR.js +0 -1
  956. package/dist/showcase/assets/index-DDZl6kOS.js +0 -10
  957. package/dist/showcase/assets/index-nOkXemgw.css +0 -2
  958. package/dist/showcase/assets/inertValue-BajuuRy4.js +0 -1
  959. package/dist/showcase/assets/info-CNYfw2Yz.js +0 -1
  960. package/dist/showcase/assets/inline-stat-BN6yhDR5.js +0 -15
  961. package/dist/showcase/assets/inline-stat-Bqw3lVfk.js +0 -1
  962. package/dist/showcase/assets/input-C-9K6F0N.js +0 -1
  963. package/dist/showcase/assets/input-DaZzfkZV.js +0 -1
  964. package/dist/showcase/assets/input-group-DE-Xdhv4.js +0 -1
  965. package/dist/showcase/assets/input-group-DIQZnytn.js +0 -47
  966. package/dist/showcase/assets/inputs-Cl_JgSR4.js +0 -155
  967. package/dist/showcase/assets/installation-DdhD4Dkq.js +0 -134
  968. package/dist/showcase/assets/invoice-header-DOs2ACqQ.js +0 -36
  969. package/dist/showcase/assets/invoice-items-1EuA62mF.js +0 -36
  970. package/dist/showcase/assets/invoice-mini-vCrYEtWp.js +0 -14
  971. package/dist/showcase/assets/invoice-table--mDTs1Iz.js +0 -30
  972. package/dist/showcase/assets/isSameDay-BNB1yam4.js +0 -1
  973. package/dist/showcase/assets/isToday-BugOpGJC.js +0 -1
  974. package/dist/showcase/assets/italic-Ck4UD2ZT.js +0 -1
  975. package/dist/showcase/assets/item-BcesxqFS.js +0 -139
  976. package/dist/showcase/assets/item-BgPlwUMv.js +0 -1
  977. package/dist/showcase/assets/item-CB9k_rmo.js +0 -1
  978. package/dist/showcase/assets/kanban-cPuSVqWY.js +0 -188
  979. package/dist/showcase/assets/key-round-BmYjd5dk.js +0 -1
  980. package/dist/showcase/assets/label-BTIBJBqN.js +0 -1
  981. package/dist/showcase/assets/languages-he6FNXRs.js +0 -1
  982. package/dist/showcase/assets/layers-B_48DtOz.js +0 -1
  983. package/dist/showcase/assets/layout-app-shell-zwLv6jTP.js +0 -608
  984. package/dist/showcase/assets/layout-auth-2Zv5lr52.js +0 -790
  985. package/dist/showcase/assets/layout-containers-Dzw3xlKn.js +0 -101
  986. package/dist/showcase/assets/layout-header-TJ-WVmG3.js +0 -203
  987. package/dist/showcase/assets/layout-page-CIVQCKXK.js +0 -314
  988. package/dist/showcase/assets/layout-primitives-i_O81fzT.js +0 -34
  989. package/dist/showcase/assets/layout-sidebar-eH_pwBq_.js +0 -224
  990. package/dist/showcase/assets/layout-users-CWSaFBLj.js +0 -117
  991. package/dist/showcase/assets/layout-workspace-w3oe32GE.js +0 -191
  992. package/dist/showcase/assets/lib-CoS0xjP8.js +0 -1
  993. package/dist/showcase/assets/list-checks-DecRPpK3.js +0 -1
  994. package/dist/showcase/assets/lock-D9f8uXol.js +0 -1
  995. package/dist/showcase/assets/lock-keyhole-C20eixH6.js +0 -1
  996. package/dist/showcase/assets/mail-CVgP8Qlo.js +0 -1
  997. package/dist/showcase/assets/mail-check-mplTKcSH.js +0 -1
  998. package/dist/showcase/assets/map-B6OGeOup.js +0 -124
  999. package/dist/showcase/assets/map-pin-BZXSwrzT.js +0 -1
  1000. package/dist/showcase/assets/media-library-DSlVIM1Q.js +0 -699
  1001. package/dist/showcase/assets/mention-inline-suggestions-CNAEeXgy.js +0 -1
  1002. package/dist/showcase/assets/mentions-Cb3g4hDN.js +0 -138
  1003. package/dist/showcase/assets/menus-CE0Hlj8N.js +0 -171
  1004. package/dist/showcase/assets/message-square-HliU8vbW.js +0 -1
  1005. package/dist/showcase/assets/metadata-list-CJ5v5Bvc.js +0 -286
  1006. package/dist/showcase/assets/metadata-list-DY92-pw2.js +0 -1
  1007. package/dist/showcase/assets/metric-DxMTjIvU.js +0 -1
  1008. package/dist/showcase/assets/metric-bar-cW9nWCRl.js +0 -1
  1009. package/dist/showcase/assets/metric-grid-CvfO52X1.js +0 -1
  1010. package/dist/showcase/assets/metric-trend-chip-BmjQdRus.js +0 -1
  1011. package/dist/showcase/assets/metrics-analytics-bar-BZqB5d1y.js +0 -44
  1012. package/dist/showcase/assets/metrics-analytics-cards-jAhlrQCI.js +0 -50
  1013. package/dist/showcase/assets/metrics-comparison-DURZ6qEL.js +0 -76
  1014. package/dist/showcase/assets/metrics-heatmap-HhJDBguh.js +0 -27
  1015. package/dist/showcase/assets/metrics-inline-badge-Dq5k-P6F.js +0 -17
  1016. package/dist/showcase/assets/metrics-kpi-row-DXzhwa6z.js +0 -31
  1017. package/dist/showcase/assets/metrics-micro-grid-C6O5b0wP.js +0 -42
  1018. package/dist/showcase/assets/metrics-overview-Hv2mseb3.js +0 -192
  1019. package/dist/showcase/assets/metrics-stat-cards-CW42vBCS.js +0 -54
  1020. package/dist/showcase/assets/minus-BW62vCxf.js +0 -1
  1021. package/dist/showcase/assets/money-display-CAdGk5Lr.js +0 -1
  1022. package/dist/showcase/assets/month-year-picker-dHuvgz1E.js +0 -1
  1023. package/dist/showcase/assets/navigation-C4uSLvbZ.js +0 -90
  1024. package/dist/showcase/assets/navigation-SjsZrtIc.js +0 -231
  1025. package/dist/showcase/assets/navigation-extras-CMVNVskk.js +0 -43
  1026. package/dist/showcase/assets/onboarding-checklist-C1jwRdMU.js +0 -119
  1027. package/dist/showcase/assets/overflow-tab-bar-BYFLpl5w.js +0 -1
  1028. package/dist/showcase/assets/overlays-0Y8MAz39.js +0 -159
  1029. package/dist/showcase/assets/overlays-ClOnjahL.js +0 -408
  1030. package/dist/showcase/assets/overview-B5ztGmTp.js +0 -184
  1031. package/dist/showcase/assets/package-check-MeSw6bS4.js +0 -1
  1032. package/dist/showcase/assets/package-vYJ0q0QM.js +0 -1
  1033. package/dist/showcase/assets/page-4lMKtBQ7.js +0 -1
  1034. package/dist/showcase/assets/page-action-button-C5-TGSzy.js +0 -1
  1035. package/dist/showcase/assets/page-header-C_-KYryO.js +0 -1
  1036. package/dist/showcase/assets/pagination-D3L3Iwus.js +0 -1
  1037. package/dist/showcase/assets/pagination-dZXPxwHx.js +0 -42
  1038. package/dist/showcase/assets/paperclip-BZhdPOw8.js +0 -1
  1039. package/dist/showcase/assets/password-input-CDSMtGxt.js +0 -1
  1040. package/dist/showcase/assets/pencil-DiYr3CZ9.js +0 -1
  1041. package/dist/showcase/assets/phone-Dm5qzlG8.js +0 -1
  1042. package/dist/showcase/assets/plus-pfGaA3St.js +0 -1
  1043. package/dist/showcase/assets/popover-CjVWDO7C.js +0 -1
  1044. package/dist/showcase/assets/popover-menu-JcZyGV3Y.js +0 -1
  1045. package/dist/showcase/assets/popover-pZ4Jbp0s.js +0 -1
  1046. package/dist/showcase/assets/products-C62MKtAR.js +0 -423
  1047. package/dist/showcase/assets/progress-Btw-ZUaU.js +0 -18
  1048. package/dist/showcase/assets/progress-DpB5LL6R.js +0 -1
  1049. package/dist/showcase/assets/props-table-Bjc9IHmp.js +0 -1
  1050. package/dist/showcase/assets/quote-DcxVd1fj.js +0 -1
  1051. package/dist/showcase/assets/receipt-BHns-S5Q.js +0 -1
  1052. package/dist/showcase/assets/receipt-text-L0aYasyt.js +0 -1
  1053. package/dist/showcase/assets/refinement-guide-BBOGBJ4I.js +0 -189
  1054. package/dist/showcase/assets/refresh-cw-z6mlm0HI.js +0 -1
  1055. package/dist/showcase/assets/resolveValueLabel-hsarzg5A.js +0 -1
  1056. package/dist/showcase/assets/resource-CIn_zKZ4.js +0 -139
  1057. package/dist/showcase/assets/resource-DxktLgEK.js +0 -1
  1058. package/dist/showcase/assets/resource-selector-card-dkcEQ6bl.js +0 -43
  1059. package/dist/showcase/assets/rich-text-editor-Dd-rWisw.js +0 -124
  1060. package/dist/showcase/assets/rich-text-editor-DvJMFj48.js +0 -143
  1061. package/dist/showcase/assets/rotate-ccw-DEz6nb5P.js +0 -1
  1062. package/dist/showcase/assets/route-BeXaXTk8.js +0 -1
  1063. package/dist/showcase/assets/save-EE7Tc5OT.js +0 -1
  1064. package/dist/showcase/assets/schema-form-RK9Zpz1E.js +0 -327
  1065. package/dist/showcase/assets/scroll-area-BejQJ0Q1.js +0 -32
  1066. package/dist/showcase/assets/scroll-area-DS8LJ7LG.js +0 -1
  1067. package/dist/showcase/assets/section-Cv8i4DIx.js +0 -1
  1068. package/dist/showcase/assets/select-Cuy3YKW9.js +0 -1
  1069. package/dist/showcase/assets/select-qFy1jm91.js +0 -1
  1070. package/dist/showcase/assets/send-CXv0ST9u.js +0 -1
  1071. package/dist/showcase/assets/separator-CecGyBaV.js +0 -1
  1072. package/dist/showcase/assets/separator-CqtFQXrk.js +0 -28
  1073. package/dist/showcase/assets/settings-2-CCeMwMOj.js +0 -1
  1074. package/dist/showcase/assets/settings-CXjN6wTC.js +0 -1
  1075. package/dist/showcase/assets/sheet-Csyrmkqp.js +0 -1
  1076. package/dist/showcase/assets/shield-DR0ZfAFA.js +0 -1
  1077. package/dist/showcase/assets/shield-alert-Bp1iFJ2q.js +0 -1
  1078. package/dist/showcase/assets/shield-check-ClL4B_Cd.js +0 -1
  1079. package/dist/showcase/assets/shopping-bag-DnSmbPUX.js +0 -1
  1080. package/dist/showcase/assets/showcase-CQKt5VGi.js +0 -132
  1081. package/dist/showcase/assets/sidebar-CXy94md1.js +0 -1
  1082. package/dist/showcase/assets/sidebar.context-C8gkOwJ5.js +0 -1
  1083. package/dist/showcase/assets/skeleton-B8wC5P66.js +0 -29
  1084. package/dist/showcase/assets/skeleton-DBlCLlBC.js +0 -1
  1085. package/dist/showcase/assets/slider-BcjkNx6W.js +0 -1
  1086. package/dist/showcase/assets/smart-card-Cg6rtWH9.js +0 -1
  1087. package/dist/showcase/assets/sonner-ZGBQ13wS.js +0 -22
  1088. package/dist/showcase/assets/sortable.esm-CGFWc-Cn.js +0 -5
  1089. package/dist/showcase/assets/sparkles-q1-9JZqa.js +0 -1
  1090. package/dist/showcase/assets/spinner-CKg8QLHu.js +0 -1
  1091. package/dist/showcase/assets/spinner-D1Ao9j9T.js +0 -49
  1092. package/dist/showcase/assets/spinner-oahLIkgb.js +0 -30
  1093. package/dist/showcase/assets/square-pen-DZ3bQJia.js +0 -1
  1094. package/dist/showcase/assets/stacked-avatars-CKPtb3Hj.js +0 -1
  1095. package/dist/showcase/assets/star-suetD-KI.js +0 -1
  1096. package/dist/showcase/assets/startOfDay-OjIsUeiv.js +0 -1
  1097. package/dist/showcase/assets/styles-1mYOoC2k.js +0 -1
  1098. package/dist/showcase/assets/suggestions-DLYaI-In.js +0 -126
  1099. package/dist/showcase/assets/switch-CTTrJNwo.js +0 -1
  1100. package/dist/showcase/assets/switch-ChJWWmxN.js +0 -1
  1101. package/dist/showcase/assets/sync-DsHYydvo.js +0 -124
  1102. package/dist/showcase/assets/table-Ck2ptin2.js +0 -686
  1103. package/dist/showcase/assets/table-DyJ9oADQ.js +0 -1
  1104. package/dist/showcase/assets/table-actions-COU4zHfh.js +0 -1
  1105. package/dist/showcase/assets/tabs-Bl_RHGIw.js +0 -1
  1106. package/dist/showcase/assets/tabs-DS-4VSkb.js +0 -19
  1107. package/dist/showcase/assets/tags-input-BlYzb5fF.js +0 -1
  1108. package/dist/showcase/assets/text-button-OPdNs3fb.js +0 -1
  1109. package/dist/showcase/assets/text-link-D27gqGeg.js +0 -1
  1110. package/dist/showcase/assets/textarea-DpC7J5F-.js +0 -1
  1111. package/dist/showcase/assets/textarea-JtXUjxvc.js +0 -1
  1112. package/dist/showcase/assets/timelines-DQM-B4Xo.js +0 -200
  1113. package/dist/showcase/assets/toggle-group-CMneKREH.js +0 -1
  1114. package/dist/showcase/assets/toggles-CAXXgjO_.js +0 -71
  1115. package/dist/showcase/assets/toggles-group-CHRqrpoM.js +0 -32
  1116. package/dist/showcase/assets/tooltip-CwGZAioX.js +0 -31
  1117. package/dist/showcase/assets/trash-2-BpMb9Zbb.js +0 -1
  1118. package/dist/showcase/assets/trending-up-B1BzitCg.js +0 -1
  1119. package/dist/showcase/assets/truck-CDSE5-HZ.js +0 -1
  1120. package/dist/showcase/assets/typography-BoNJ1hRZ.js +0 -223
  1121. package/dist/showcase/assets/ui-badge-Djh6NiB2.js +0 -28
  1122. package/dist/showcase/assets/ui-card-QC_rl_H2.js +0 -30
  1123. package/dist/showcase/assets/ui-table-qAGsc3qN.js +0 -42
  1124. package/dist/showcase/assets/upload-tray-DKCJgW5u.js +0 -138
  1125. package/dist/showcase/assets/use-layout-link-BPlsZ8Ys.js +0 -1
  1126. package/dist/showcase/assets/useAnchoredPopupScrollLock-526MebAC.js +0 -1
  1127. package/dist/showcase/assets/useAriaLabelledBy-CqySZiH9.js +0 -1
  1128. package/dist/showcase/assets/useCollapsiblePanel-DWX7LbGX.js +0 -1
  1129. package/dist/showcase/assets/useCompositeItem-DGEBUXgE.js +0 -1
  1130. package/dist/showcase/assets/useCompositeListItem-B2nuNlc2.js +0 -1
  1131. package/dist/showcase/assets/useLabelableId-DY4O1lpt.js +0 -1
  1132. package/dist/showcase/assets/useOpenInteractionType-DxwujDvt.js +0 -1
  1133. package/dist/showcase/assets/useRender-BPoNv-Lm.js +0 -1
  1134. package/dist/showcase/assets/useTriggerFocusGuards-BnOSAjfy.js +0 -1
  1135. package/dist/showcase/assets/useValueChanged-CXmDOWxx.js +0 -1
  1136. package/dist/showcase/assets/user-BGchdtV_.js +0 -1
  1137. package/dist/showcase/assets/user-plus-BifI_xVA.js +0 -1
  1138. package/dist/showcase/assets/users-Cl5yYqdg.js +0 -1
  1139. package/dist/showcase/assets/vendor-profile-BNW4FYna.js +0 -37
  1140. package/dist/showcase/assets/video-BtQPixYN.js +0 -1
  1141. package/dist/showcase/assets/wrench-CRalc5fG.js +0 -1
  1142. package/dist/showcase/assets/x-D6hUY89S.js +0 -1
  1143. package/dist/showcase/assets/zap-v_qbqeI5.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/features/activities/activities.config.ts","../../../../src/components/features/activities/activities.strings.ts","../../../../src/components/features/activities/hooks/use-activity-feed.ts","../../../../src/components/features/activities/hooks/use-activity-resources.ts","../../../../src/components/features/activities/partials/activity-actions-menu.tsx","../../../../src/components/features/activities/partials/activity-changes.tsx","../../../../src/components/features/activities/partials/activity-date-label.tsx","../../../../src/components/features/activities/partials/activity-empty-state.tsx","../../../../src/components/features/activities/partials/tone-tokens.ts","../../../../src/components/features/activities/partials/activity-resource-tag.tsx","../../../../src/components/features/activities/partials/activity-headline.tsx","../../../../src/components/features/activities/partials/activity-marker.tsx","../../../../src/components/features/activities/partials/activity-row.tsx","../../../../src/components/features/activities/activities-feed.tsx","../../../../src/components/features/activities/partials/activities-feed-card.tsx"],"sourcesContent":["/**\n * Default per-event configuration. Consumers override individual events by\n * spreading this map and overwriting the keys they care about, e.g.:\n *\n * import { defaultActivityEventConfig } from '@/components/features/activities';\n *\n * const eventConfig = {\n * ...defaultActivityEventConfig,\n * order_refunded: { icon: Receipt, tone: 'warning', label: 'Refunded' },\n * };\n *\n * The mass `eventConfig` prop on `<ActivityFeed />` is shallow-merged on top\n * of these defaults, so any unspecified event falls back to the library\n * default and ultimately to the neutral `defaultEvent` entry below.\n */\nimport {\n AlertTriangle,\n ArrowLeftRight,\n Ban,\n Check,\n CircleDot,\n FileEdit,\n Flag,\n Heart,\n LinkIcon,\n Mail,\n MailCheck,\n MailOpen,\n MailX,\n MessageSquare,\n Pencil,\n Plus,\n ShieldCheck,\n ShoppingBag,\n Sparkles,\n Star,\n Trash2,\n UserMinus,\n UserPlus,\n} from 'lucide-react';\n\nimport type { ActivityEventConfig, ActivityEventConfigMap } from './activities.types';\n\n/** Neutral fallback used when an event has no entry in the registry. */\nexport const defaultEventConfig: ActivityEventConfig = {\n icon: CircleDot,\n tone: 'neutral',\n};\n\nexport const defaultActivityEventConfig: ActivityEventConfigMap = {\n // Lifecycle\n created: { icon: Plus, tone: 'success', label: 'Created' },\n updated: { icon: Pencil, tone: 'info', label: 'Updated' },\n edited: { icon: FileEdit, tone: 'info', label: 'Edited' },\n deleted: { icon: Trash2, tone: 'destructive', label: 'Deleted' },\n cancelled: { icon: Ban, tone: 'destructive', label: 'Cancelled' },\n restored: { icon: Sparkles, tone: 'success', label: 'Restored' },\n\n // Status transitions\n status_changed: { icon: ArrowLeftRight, tone: 'primary', label: 'Status changed' },\n status_transition: { icon: ArrowLeftRight, tone: 'primary', label: 'Status changed' },\n status_override: { icon: ArrowLeftRight, tone: 'warning', label: 'Status overridden' },\n\n // People\n assigned: { icon: UserPlus, tone: 'info', label: 'Assigned' },\n unassigned: { icon: UserMinus, tone: 'destructive', label: 'Unassigned' },\n\n // Mail\n mail_sent: { icon: Mail, tone: 'info', label: 'Email sent' },\n mail_delivered: { icon: MailCheck, tone: 'success', label: 'Email delivered' },\n mail_opened: { icon: MailOpen, tone: 'info', label: 'Email opened' },\n mail_clicked: { icon: MailOpen, tone: 'info', label: 'Email clicked' },\n mail_bounced: { icon: MailX, tone: 'destructive', label: 'Email bounced' },\n mail_failed: { icon: MailX, tone: 'destructive', label: 'Email failed' },\n\n // Comments\n comment_created: { icon: MessageSquare, tone: 'warning', label: 'Comment posted' },\n comment_deleted: { icon: MessageSquare, tone: 'destructive', label: 'Comment deleted' },\n\n // Commerce\n paid: { icon: Check, tone: 'success', label: 'Paid' },\n refunded: { icon: ArrowLeftRight, tone: 'warning', label: 'Refunded' },\n confirmed: { icon: ShieldCheck, tone: 'success', label: 'Confirmed' },\n favorited: { icon: Heart, tone: 'warning', label: 'Favorited' },\n ordered: { icon: ShoppingBag, tone: 'primary', label: 'Order placed' },\n\n // Publishing\n published: { icon: Star, tone: 'success', label: 'Published' },\n flagged: { icon: Flag, tone: 'warning', label: 'Flagged' },\n linked: { icon: LinkIcon, tone: 'info', label: 'Linked' },\n\n // Failures\n failed: { icon: AlertTriangle, tone: 'destructive', label: 'Failed' },\n health_check_failed: { icon: AlertTriangle, tone: 'destructive', label: 'Health check failed' },\n};\n\n/** Resolve `eventConfig[event]` with override + default fallback. */\nexport function resolveEventConfig(\n event: string,\n map: ActivityEventConfigMap,\n): ActivityEventConfig {\n return map[event] ?? defaultEventConfig;\n}\n","/**\n * Strings for the Activities feature. Consumers override via the `strings`\n * prop on `<ActivityFeed>` / `<ActivityFeedCard>`. Values are deep-merged\n * over these defaults — `sources` and `events` merge one level deep so a\n * consumer can override a single source/event label without rewriting the\n * whole map.\n */\nexport interface ActivitiesStrings {\n /** Card title — usually \"Activity\". */\n title: string;\n /** Empty-state copy. */\n empty: string;\n /** Loading-state copy. */\n loading: string;\n /** Date-group label for today. */\n today: string;\n /** Date-group label for yesterday. */\n yesterday: string;\n /** Fallback label for activities without a timestamp. */\n undated: string;\n /** Replacement for actor name when `actorId === currentUserId`. */\n you: string;\n /** Toggle button label — collapsed state. */\n showChanges: string;\n /** Toggle button label — expanded state. */\n hideChanges: string;\n /** aria-label for the actions menu trigger. */\n actionsLabel: string;\n /** Generic \"more\" affordance label. */\n moreLabel: string;\n /** Map of `source` → display label. */\n sources: Record<string, string>;\n /** Map of `event` → display label. Used as a fallback for headlines. */\n events: Record<string, string>;\n}\n\nexport const defaultActivitiesStrings: ActivitiesStrings = {\n title: 'Activity',\n empty: 'No activity yet.',\n loading: 'Loading activity…',\n today: 'Today',\n yesterday: 'Yesterday',\n undated: 'Undated',\n you: 'You',\n showChanges: 'Show changes',\n hideChanges: 'Hide changes',\n actionsLabel: 'Activity actions',\n moreLabel: 'More',\n sources: {\n comment: 'Comment',\n mail: 'Mail',\n booking_log: 'Booking log',\n activity_log: '',\n system: 'System',\n },\n events: {},\n};\n\n/** Replace `{{key}}` tokens with values from `params`. */\nexport function interpolate(\n template: string,\n params: Record<string, string | number>,\n): string {\n return template.replace(/\\{\\{\\s*(\\w+)\\s*\\}\\}/g, (match, key) => {\n const v = params[key];\n return v === undefined ? match : String(v);\n });\n}\n","/**\n * useActivityFeed — headless state machine for the Activities feature.\n *\n * Returns date-grouped activities with stable React keys, plus the expand /\n * collapse map for change-detail rows. Consumers wanting a fully custom UI\n * can call this hook directly and bypass `<ActivityFeed />`.\n */\nimport { isToday, isYesterday } from 'date-fns';\nimport { useCallback, useMemo, useState } from 'react';\n\nimport type { ActivitiesStrings } from '../activities.strings';\nimport type { ActivityItem } from '../activities.types';\n\nexport interface ActivityKeyedItem<TData = unknown> {\n activity: ActivityItem<TData>;\n key: string;\n}\n\nexport interface ActivityDateGroup<TData = unknown> {\n label: string;\n items: ActivityKeyedItem<TData>[];\n}\n\nexport interface UseActivityFeedOptions<TData = unknown> {\n activities: ReadonlyArray<ActivityItem<TData>>;\n groupByDate?: boolean;\n expandedByDefault?: boolean;\n locale?: string;\n strings: ActivitiesStrings;\n formatDateGroupLabel?: (\n iso: string | null,\n strings: ActivitiesStrings,\n ) => string;\n}\n\nexport interface UseActivityFeedReturn<TData = unknown> {\n groups: ActivityDateGroup<TData>[];\n total: number;\n isExpanded: (id: string) => boolean;\n toggleExpanded: (id: string) => void;\n setExpanded: (id: string, value: boolean) => void;\n expandAll: () => void;\n collapseAll: () => void;\n}\n\nfunction defaultDateGroupLabel(\n iso: string | null,\n strings: ActivitiesStrings,\n locale?: string,\n): string {\n if (!iso) return strings.undated;\n const date = new Date(iso);\n if (isToday(date)) return strings.today;\n if (isYesterday(date)) return strings.yesterday;\n try {\n return new Intl.DateTimeFormat(locale, {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n }).format(date);\n } catch {\n return new Intl.DateTimeFormat(undefined, {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n }).format(date);\n }\n}\n\nexport function useActivityFeed<TData = unknown>({\n activities,\n groupByDate = true,\n expandedByDefault = false,\n locale,\n strings,\n formatDateGroupLabel,\n}: UseActivityFeedOptions<TData>): UseActivityFeedReturn<TData> {\n const [expandedMap, setExpandedMap] = useState<Record<string, boolean>>({});\n\n const keyed = useMemo<ActivityKeyedItem<TData>[]>(() => {\n const seen = new Map<string, number>();\n return activities.map((activity) => {\n const baseId = String(activity.id ?? '').trim();\n const createdAt = String(activity.createdAt ?? '').trim();\n const event = String(activity.event ?? '').trim();\n const source = String(activity.source ?? '').trim();\n const keyBase = [baseId, createdAt, event, source].join(':');\n const occurrence = (seen.get(keyBase) ?? 0) + 1;\n seen.set(keyBase, occurrence);\n return { activity, key: `${keyBase}:${occurrence}` };\n });\n }, [activities]);\n\n const groups = useMemo<ActivityDateGroup<TData>[]>(() => {\n if (!groupByDate) {\n return keyed.length > 0 ? [{ label: '', items: keyed }] : [];\n }\n const out: ActivityDateGroup<TData>[] = [];\n let currentLabel = '__init__';\n let currentItems: ActivityKeyedItem<TData>[] = [];\n\n const labelFor = (iso: string | null) =>\n formatDateGroupLabel\n ? formatDateGroupLabel(iso, strings)\n : defaultDateGroupLabel(iso, strings, locale);\n\n for (const item of keyed) {\n const iso = item.activity.createdAt ?? null;\n const label = labelFor(iso);\n if (label !== currentLabel) {\n if (currentItems.length > 0) {\n out.push({ label: currentLabel, items: currentItems });\n }\n currentLabel = label;\n currentItems = [item];\n } else {\n currentItems.push(item);\n }\n }\n if (currentItems.length > 0) {\n out.push({ label: currentLabel, items: currentItems });\n }\n return out;\n }, [keyed, groupByDate, locale, strings, formatDateGroupLabel]);\n\n const isExpanded = useCallback(\n (id: string) => expandedMap[id] ?? expandedByDefault,\n [expandedMap, expandedByDefault],\n );\n\n const toggleExpanded = useCallback((id: string) => {\n setExpandedMap((current) => ({\n ...current,\n [id]: !(current[id] ?? false),\n }));\n }, []);\n\n const setExpanded = useCallback((id: string, value: boolean) => {\n setExpandedMap((current) => ({ ...current, [id]: value }));\n }, []);\n\n const expandAll = useCallback(() => {\n const next: Record<string, boolean> = {};\n for (const k of keyed) next[k.activity.id] = true;\n setExpandedMap(next);\n }, [keyed]);\n\n const collapseAll = useCallback(() => setExpandedMap({}), []);\n\n return {\n groups,\n total: keyed.length,\n isExpanded,\n toggleExpanded,\n setExpanded,\n expandAll,\n collapseAll,\n };\n}\n","/**\n * useActivityResources — registry hook for the rich-resource feature.\n *\n * The registry maps `key → ActivityResourceConfig`. Activity items reference\n * resources by `key`; the row renderer looks up the live config so badges,\n * icons, and links can be edited globally without touching individual rows.\n *\n * The hook re-seeds whenever the `resources` prop reference changes and emits\n * the full registry on every mutation via `onResourcesChange`. Wire that\n * callback to localStorage / a backend mutation to persist the user's\n * resource customisations across sessions.\n */\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport type {\n ActivityResourceConfig,\n ActivityResourceRef,\n} from '../activities.types';\n\nexport type ActivityResourceRegistry = Readonly<\n Record<string, ActivityResourceConfig>\n>;\n\nexport interface UseActivityResourcesOptions {\n resources?: ActivityResourceRegistry;\n onResourcesChange?: (registry: ActivityResourceRegistry) => void;\n}\n\nexport interface UseActivityResourcesReturn {\n registry: ActivityResourceRegistry;\n /** Look up a resource by ref or key. */\n get: (\n ref: ActivityResourceRef | string,\n ) => ActivityResourceConfig | undefined;\n /** Replace a resource entry wholesale (or insert new). */\n register: (key: string, config: ActivityResourceConfig) => void;\n /** Shallow-merge a partial update over an existing entry. */\n update: (key: string, partial: Partial<ActivityResourceConfig>) => void;\n /** Remove an entry. */\n remove: (key: string) => void;\n /** Replace the entire registry. */\n setAll: (registry: ActivityResourceRegistry) => void;\n /** Reset to the original `resources` prop (or empty if none). */\n reset: () => void;\n}\n\nexport function useActivityResources({\n resources,\n onResourcesChange,\n}: UseActivityResourcesOptions = {}): UseActivityResourcesReturn {\n const [registry, setRegistry] = useState<ActivityResourceRegistry>(\n () => resources ?? {},\n );\n\n const seedRef = useRef(resources);\n useEffect(() => {\n if (resources !== seedRef.current) {\n seedRef.current = resources;\n setRegistry(resources ?? {});\n }\n }, [resources]);\n\n const onChangeRef = useRef(onResourcesChange);\n useEffect(() => {\n onChangeRef.current = onResourcesChange;\n }, [onResourcesChange]);\n\n const emit = useCallback((next: ActivityResourceRegistry) => {\n onChangeRef.current?.(next);\n }, []);\n\n const register = useCallback(\n (key: string, config: ActivityResourceConfig) => {\n setRegistry((current) => {\n const next = { ...current, [key]: config };\n emit(next);\n return next;\n });\n },\n [emit],\n );\n\n const update = useCallback(\n (key: string, partial: Partial<ActivityResourceConfig>) => {\n setRegistry((current) => {\n const existing = current[key];\n if (!existing) return current;\n const next = {\n ...current,\n [key]: { ...existing, ...partial },\n };\n emit(next);\n return next;\n });\n },\n [emit],\n );\n\n const remove = useCallback(\n (key: string) => {\n setRegistry((current) => {\n if (!(key in current)) return current;\n const next = { ...current };\n delete next[key];\n emit(next);\n return next;\n });\n },\n [emit],\n );\n\n const setAll = useCallback(\n (next: ActivityResourceRegistry) => {\n setRegistry(next);\n emit(next);\n },\n [emit],\n );\n\n const reset = useCallback(() => {\n const next = seedRef.current ?? {};\n setRegistry(next);\n emit(next);\n }, [emit]);\n\n const get = useCallback(\n (ref: ActivityResourceRef | string) => {\n const key = typeof ref === 'string' ? ref : ref.key;\n return registry[key];\n },\n [registry],\n );\n\n return { registry, get, register, update, remove, setAll, reset };\n}\n","/**\n * ActivityActionsMenu — inline overflow menu rendered on rich rows.\n *\n * Backed by the shadcn DropdownMenu primitive; each item fires the\n * activity's per-row `onClick` and forwards `actionId` through `onAction` so\n * consumers can route actions centrally.\n */\nimport { MoreHorizontal } from 'lucide-react';\n\nimport { Button } from '@/components/base/buttons';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@/components/base/navigation';\n\nimport type { ActivityAction, ActivityItem } from '../activities.types';\n\nexport interface ActivityActionsMenuProps<TData = unknown> {\n activity: ActivityItem<TData>;\n actions: readonly ActivityAction<TData>[];\n onAction?: (actionId: string, activity: ActivityItem<TData>) => void;\n label: string;\n}\n\nexport function ActivityActionsMenu<TData = unknown>({\n activity,\n actions,\n onAction,\n label,\n}: ActivityActionsMenuProps<TData>) {\n if (actions.length === 0) return null;\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger\n render={(triggerProps) => (\n <Button\n {...(triggerProps as Record<string, unknown>)}\n type=\"button\"\n variant=\"secondary\"\n buttonStyle=\"ghost\"\n size=\"icon-small\"\n aria-label={label}\n className=\"h-7 w-7 text-muted-foreground\"\n >\n <MoreHorizontal className=\"size-4\" />\n </Button>\n )}\n />\n <DropdownMenuContent align=\"end\" className=\"min-w-40\">\n {actions.map((action) => {\n const Icon = action.icon;\n return (\n <DropdownMenuItem\n key={action.id}\n onClick={() => {\n if (action.disabled) return;\n action.onClick(activity);\n onAction?.(action.id, activity);\n }}\n disabled={action.disabled}\n variant={action.tone === 'destructive' ? 'destructive' : 'default'}\n className=\"gap-2 px-2 py-1.5 text-xs\"\n >\n {!!Icon && <Icon className=\"size-3.5\" />}\n {action.label}\n </DropdownMenuItem>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n","/**\n * ActivityChanges — collapsible old → new diff block.\n *\n * Each entry shows the attribute label, the previous value (line-through, on\n * a destructive tint), an arrow, and the new value (on a success tint). When\n * neither old nor new is set, falls back to `description`.\n */\nimport { Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nimport type { ActivityChange } from '../activities.types';\n\nexport interface ActivityChangesProps {\n changes: readonly ActivityChange[];\n className?: string;\n}\n\nfunction ChangeValue({ change }: { change: ActivityChange }) {\n const hasOld = change.old !== null && change.old !== undefined;\n const hasNew = change.new !== null && change.new !== undefined;\n\n if (!hasOld && !hasNew) {\n return (\n <Text size=\"xs\" tag=\"span\">\n {change.description}\n </Text>\n );\n }\n\n return (\n <Text tag=\"span\" size=\"xs\" className=\"inline-flex flex-wrap items-baseline gap-1\">\n {!!hasOld && (\n <Text\n tag=\"span\"\n size=\"xs\"\n className=\"rounded bg-destructive/10 text-destructive line-through px-1 py-px\"\n >\n {change.old}\n </Text>\n )}\n {hasOld && hasNew && (\n <Text tag=\"span\" size=\"xs\" type=\"secondary\">\n →\n </Text>\n )}\n {!!hasNew && (\n <Text\n tag=\"span\"\n size=\"xs\"\n className=\"rounded bg-success/15 text-success px-1 py-px\"\n >\n {change.new}\n </Text>\n )}\n </Text>\n );\n}\n\nexport function ActivityChanges({ changes, className }: ActivityChangesProps) {\n if (changes.length === 0) return null;\n return (\n <div\n className={cn(\n 'space-y-1.5 rounded-lg border border-border/60 bg-muted/30 px-3 py-2',\n className,\n )}\n >\n {changes.map((change) => (\n <div\n key={`${change.key}-${change.label}`}\n className=\"flex items-baseline gap-2\"\n >\n <Text\n size=\"xs\"\n type=\"secondary\"\n weight=\"medium\"\n className=\"shrink-0\"\n >\n {change.label}\n </Text>\n <ChangeValue change={change} />\n </div>\n ))}\n </div>\n );\n}\n","/**\n * ActivityDateLabel — eyebrow rendered above each date group.\n *\n * Consumers can override via `slots.renderDateLabel`. Default: small\n * uppercase eyebrow above each group, with extra top margin between groups.\n */\nimport { Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nexport interface ActivityDateLabelProps {\n label: string;\n isFirst: boolean;\n className?: string;\n}\n\nexport function ActivityDateLabel({\n label,\n isFirst,\n className,\n}: ActivityDateLabelProps) {\n if (label === '') return null;\n return (\n <Text\n size=\"xxs\"\n type=\"secondary\"\n weight=\"medium\"\n className={cn(\n 'uppercase tracking-wider',\n !isFirst && 'mt-5',\n className,\n )}\n >\n {label}\n </Text>\n );\n}\n","/**\n * ActivityEmptyState — neutral empty surface used when no activities are\n * available. Consumers replace via `slots.empty`.\n */\nimport { Activity } from 'lucide-react';\n\nimport { Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nexport interface ActivityEmptyStateProps {\n title: string;\n hint?: string;\n className?: string;\n}\n\nexport function ActivityEmptyState({\n title,\n hint,\n className,\n}: ActivityEmptyStateProps) {\n return (\n <div\n className={cn(\n 'flex flex-col items-center justify-center gap-2 px-6 py-10 text-center',\n className,\n )}\n >\n <span className=\"flex size-9 items-center justify-center rounded-full bg-muted text-muted-foreground\">\n <Activity className=\"size-4\" />\n </span>\n <Text weight=\"medium\">\n {title}\n </Text>\n {!!hint && (\n <Text size=\"xs\" type=\"secondary\">\n {hint}\n </Text>\n )}\n </div>\n );\n}\n","/**\n * Tone palettes shared by the marker, headline status segments, and the\n * resource tag. Tones map to semantic shadcn tokens — never to raw colours —\n * so a consumer rebrand at `:root` flows through the activities feature\n * automatically.\n */\nimport type { ActivityTone } from '../activities.types';\nimport type { ComposedBadgeVariant } from '@/components/base/badge/badge';\n\nexport interface ActivityToneStyle {\n /** Filled background — used by the rich icon marker. */\n bg: string;\n /** Foreground text colour matching the bg. */\n fg: string;\n /** Solid colour used by the compact dot. */\n dot: string;\n /** Border tint used by the connector line. */\n line: string;\n /** Background for chips / tags. */\n chipBg: string;\n /** Text colour for chips / tags. */\n chipFg: string;\n}\n\nexport const ACTIVITY_TONE: Record<ActivityTone, ActivityToneStyle> = {\n primary: {\n bg: 'bg-primary/10',\n fg: 'text-primary',\n dot: 'bg-primary',\n line: 'bg-primary/30',\n chipBg: 'bg-primary/5',\n chipFg: 'text-primary',\n },\n success: {\n bg: 'bg-success/10',\n fg: 'text-success',\n dot: 'bg-success',\n line: 'bg-success/30',\n chipBg: 'bg-success/10',\n chipFg: 'text-success',\n },\n warning: {\n bg: 'bg-warning/30',\n fg: 'text-warning-foreground',\n dot: 'bg-warning',\n line: 'bg-warning/40',\n chipBg: 'bg-warning/30',\n chipFg: 'text-warning-foreground',\n },\n destructive: {\n bg: 'bg-destructive/10',\n fg: 'text-destructive',\n dot: 'bg-destructive',\n line: 'bg-destructive/30',\n chipBg: 'bg-destructive/10',\n chipFg: 'text-destructive',\n },\n info: {\n bg: 'bg-info/10',\n fg: 'text-info',\n dot: 'bg-info',\n line: 'bg-info/30',\n chipBg: 'bg-info/10',\n chipFg: 'text-info',\n },\n neutral: {\n bg: 'bg-muted',\n fg: 'text-muted-foreground',\n dot: 'bg-muted-foreground/60',\n line: 'bg-border',\n chipBg: 'bg-muted',\n chipFg: 'text-muted-foreground',\n },\n};\n\n/** Map an activity tone onto the closest base/Badge variant. */\nexport const TONE_TO_BADGE_VARIANT: Record<ActivityTone, ComposedBadgeVariant> = {\n primary: 'primary',\n success: 'success',\n warning: 'warning',\n destructive: 'destructive',\n info: 'info',\n neutral: 'secondary',\n};\n","/**\n * ActivityResourceTag — chip rendering for a registered resource.\n *\n * The resource registry stores per-key `ActivityResourceConfig` (label, icon,\n * tone, badge, tags). This component renders those as a single inline chip\n * suitable for embedding into a headline. Falls back gracefully when the\n * registry has no entry — uses the segment's text/label.\n */\nimport { CircleDot } from 'lucide-react';\nimport { cn } from '@/lib/utils';\n\nimport { Badge } from '@/components/base/badge';\nimport { Button } from '@/components/base/buttons';\nimport { Text } from '@/components/typography';\n\nimport type {\n ActivityResourceConfig,\n ActivityResourceRef,\n ActivityTone,\n} from '../activities.types';\n\nimport { ACTIVITY_TONE, TONE_TO_BADGE_VARIANT } from './tone-tokens';\n\nexport interface ActivityResourceTagProps {\n resource: ActivityResourceRef;\n config?: ActivityResourceConfig;\n /** Fallback label if neither config nor segment text are present. */\n fallbackText?: string;\n onClick?: () => void;\n}\n\nexport function ActivityResourceTag({\n resource,\n config,\n fallbackText,\n onClick,\n}: ActivityResourceTagProps) {\n const tone: ActivityTone = config?.tone ?? 'neutral';\n const palette = ACTIVITY_TONE[tone];\n const Icon = config?.icon ?? CircleDot;\n const label = config?.label ?? fallbackText ?? resource.label ?? resource.key;\n const interactive = typeof onClick === 'function';\n\n const inner = (\n <>\n <Icon className={cn('size-icon-sm shrink-0', palette.fg)} />\n <Text tag=\"span\" size=\"inherit\" weight=\"medium\" className={palette.chipFg}>\n {label}\n </Text>\n {!!config?.tags && config.tags.length > 0 && (\n <Text\n tag=\"span\"\n size=\"xxs\"\n type=\"secondary\"\n className=\"ml-space-2xs border-l border-current/20 pl-space-sm\"\n >\n {config.tags.join(' · ')}\n </Text>\n )}\n {!!config?.badge && (\n <Badge\n inline\n variant={TONE_TO_BADGE_VARIANT[config.badge.tone ?? 'neutral']}\n className=\"ml-space-2xs\"\n >\n {config.badge.label}\n </Badge>\n )}\n </>\n );\n\n const chipClass = cn(\n 'inline-flex items-center gap-space-sm rounded-full px-space-md py-space-2xs align-baseline text-xxs',\n 'border border-border/60',\n palette.chipBg,\n interactive &&\n 'cursor-pointer transition-colors hover:bg-foreground/5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n );\n\n if (interactive) {\n return (\n <Button\n type=\"button\"\n variant=\"secondary\"\n buttonStyle=\"ghost\"\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation();\n onClick?.();\n }}\n className={cn(chipClass, 'h-auto rounded-full')}\n title={config?.note}\n >\n {inner}\n </Button>\n );\n }\n\n return (\n <span className={chipClass} title={config?.note}>\n {inner}\n </span>\n );\n}\n","/**\n * ActivityHeadline — segment renderer for the headline line.\n *\n * Renders typed segments (`actor` / `field` / `value` / `status` / `resource`\n * / `text`) into mixed inline content with proper typography and tone.\n *\n * When no segments are provided, falls back to splitting `headline` around\n * the actor's name so the actor still becomes interactive when possible.\n */\nimport { Fragment, type ReactNode } from 'react';\n\nimport { Badge } from '@/components/base/badge';\nimport { Button } from '@/components/base/buttons';\nimport { Text } from '@/components/typography';\n\nimport type {\n ActivityActor,\n ActivityHeadlineSegment,\n ActivityItem,\n ActivityResourceConfig,\n ActivityResourceRef,\n} from '../activities.types';\nimport { ActivityResourceTag } from './activity-resource-tag';\nimport { TONE_TO_BADGE_VARIANT } from './tone-tokens';\n\nexport interface ActivityHeadlineProps<TData = unknown> {\n activity: ActivityItem<TData>;\n currentUserId?: string;\n youLabel: string;\n onActorClick?: (actor: ActivityActor, activity: ActivityItem<TData>) => void;\n onResourceClick?: (\n resource: ActivityResourceRef,\n config: ActivityResourceConfig | undefined,\n activity: ActivityItem<TData>,\n ) => void;\n /** Live registry lookup for resource segments. */\n getResourceConfig?: (\n ref: ActivityResourceRef,\n ) => ActivityResourceConfig | undefined;\n}\n\nfunction ActorNode<TData>({\n actorId,\n text,\n href,\n activity,\n youLabel,\n currentUserId,\n onActorClick,\n}: {\n actorId?: string;\n text: string;\n href?: string;\n activity: ActivityItem<TData>;\n youLabel: string;\n currentUserId?: string;\n onActorClick?: (actor: ActivityActor, activity: ActivityItem<TData>) => void;\n}) {\n const isYou =\n currentUserId !== undefined &&\n actorId !== undefined &&\n currentUserId === actorId;\n const display = isYou ? youLabel : text;\n const actor: ActivityActor = activity.actor ?? { id: actorId, name: text };\n\n if (href) {\n return (\n <a\n href={href}\n onClick={(e) => {\n if (onActorClick) {\n e.preventDefault();\n e.stopPropagation();\n onActorClick(actor, activity);\n }\n }}\n className=\"font-semibold text-foreground underline-offset-2 hover:underline\"\n >\n {display}\n </a>\n );\n }\n\n if (onActorClick) {\n return (\n <Button\n type=\"button\"\n variant=\"secondary\"\n buttonStyle=\"ghost\"\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation();\n onActorClick(actor, activity);\n }}\n className=\"h-auto rounded px-0 py-0 font-semibold text-foreground underline-offset-2 hover:underline\"\n >\n {display}\n </Button>\n );\n }\n\n return (\n <Text tag=\"span\" weight=\"semibold\">\n {display}\n </Text>\n );\n}\n\nfunction renderSegments<TData>(\n segments: readonly ActivityHeadlineSegment[],\n props: ActivityHeadlineProps<TData>,\n): ReactNode {\n return segments.map((segment, index) => {\n const key = `seg-${index}-${segment.type}`;\n switch (segment.type) {\n case 'actor':\n return (\n <Fragment key={key}>\n <ActorNode<TData>\n actorId={segment.actorId}\n text={segment.text}\n href={segment.href}\n activity={props.activity}\n youLabel={props.youLabel}\n currentUserId={props.currentUserId}\n onActorClick={props.onActorClick}\n />{' '}\n </Fragment>\n );\n case 'field':\n case 'value':\n return (\n <Fragment key={key}>\n <Text tag=\"span\" weight=\"semibold\">\n {segment.text}\n </Text>{' '}\n </Fragment>\n );\n case 'status':\n return (\n <Fragment key={key}>\n <Badge\n inline\n variant={TONE_TO_BADGE_VARIANT[segment.tone ?? 'neutral']}\n >\n {segment.text}\n </Badge>{' '}\n </Fragment>\n );\n case 'resource': {\n const config = props.getResourceConfig?.(segment.resource);\n return (\n <Fragment key={key}>\n <ActivityResourceTag\n resource={segment.resource}\n config={config}\n fallbackText={segment.text}\n onClick={\n props.onResourceClick\n ? () =>\n props.onResourceClick?.(\n segment.resource,\n config,\n props.activity,\n )\n : undefined\n }\n />{' '}\n </Fragment>\n );\n }\n case 'text':\n default:\n return (\n <Fragment key={key}>\n <Text tag=\"span\">\n {segment.text}\n </Text>{' '}\n </Fragment>\n );\n }\n });\n}\n\nfunction renderFallback<TData>(props: ActivityHeadlineProps<TData>): ReactNode {\n const { activity } = props;\n const fallbackHeadline =\n activity.headline ?? activity.event;\n const actorName = activity.actor?.name;\n if (!actorName || !fallbackHeadline.includes(actorName)) {\n return (\n <Text tag=\"span\">\n {fallbackHeadline}\n </Text>\n );\n }\n const [before, ...after] = fallbackHeadline.split(actorName);\n return (\n <>\n {!!before && (\n <Text tag=\"span\">\n {before}\n </Text>\n )}\n <ActorNode<TData>\n actorId={activity.actor?.id}\n text={actorName}\n href={activity.actor?.href}\n activity={activity}\n youLabel={props.youLabel}\n currentUserId={props.currentUserId}\n onActorClick={props.onActorClick}\n />\n {after.length > 0 && (\n <Text tag=\"span\">\n {after.join(actorName)}\n </Text>\n )}\n </>\n );\n}\n\nexport function ActivityHeadline<TData = unknown>(\n props: ActivityHeadlineProps<TData>,\n) {\n const segments = props.activity.segments;\n if (segments && segments.length > 0) {\n return (\n <span className=\"leading-snug [&>span]:leading-snug\">\n {renderSegments<TData>(segments, props)}\n </span>\n );\n }\n return <span className=\"leading-snug\">{renderFallback<TData>(props)}</span>;\n}\n","/**\n * ActivityMarker — left-edge visual for a row.\n *\n * Density mapping:\n * - `compact` → small tone-coloured dot\n * - `default` → 22px tone-tinted square with the event icon\n * - `rich` → 28px tone-tinted circle with the event icon\n *\n * Always renders the connector line beneath unless `isLast` is true.\n */\nimport type { LucideIcon } from 'lucide-react';\nimport { cn } from '@/lib/utils';\n\nimport type { ActivityDensity, ActivityTone } from '../activities.types';\n\nimport { ACTIVITY_TONE } from './tone-tokens';\n\nexport interface ActivityMarkerProps {\n icon: LucideIcon;\n tone: ActivityTone;\n density: ActivityDensity;\n isLast: boolean;\n}\n\nexport function ActivityMarker({\n icon: Icon,\n tone,\n density,\n isLast,\n}: ActivityMarkerProps) {\n const palette = ACTIVITY_TONE[tone];\n\n if (density === 'compact') {\n return (\n <div className=\"flex flex-col items-center\">\n <span\n aria-hidden\n className={cn('mt-1.5 size-2 shrink-0 rounded-full', palette.dot)}\n />\n {!isLast && (\n <span aria-hidden className={cn('mt-1 w-px flex-1', palette.line)} />\n )}\n </div>\n );\n }\n\n if (density === 'rich') {\n return (\n <div className=\"flex flex-col items-center\">\n <span\n className={cn(\n 'flex size-7 shrink-0 items-center justify-center rounded-full ring-1 ring-border/60',\n palette.bg,\n palette.fg,\n )}\n >\n <Icon className=\"size-3.5\" />\n </span>\n {!isLast && (\n <span aria-hidden className={cn('mt-1 w-px flex-1', palette.line)} />\n )}\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col items-center\">\n <span\n className={cn(\n 'flex size-5 shrink-0 items-center justify-center rounded-full',\n palette.bg,\n palette.fg,\n )}\n >\n <Icon className=\"size-3\" />\n </span>\n {!isLast && (\n <span aria-hidden className={cn('mt-1 w-px flex-1', palette.line)} />\n )}\n </div>\n );\n}\n","/**\n * ActivityRow — single row layout used by `<ActivityFeed />`.\n *\n * Composes the marker, headline, optional description, metadata chips,\n * source badge, timestamp, and (rich-only) the change-detail block plus\n * action menu. Per-density layout follows the design-system rules:\n * compact (dot, single line) / default (icon, headline + meta line) /\n * rich (icon, full header + body + actions).\n */\nimport { ChevronDown, ChevronRight } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { Badge } from '@/components/base/badge';\nimport { Button } from '@/components/base/buttons';\nimport { Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nimport type {\n ActivityAction,\n ActivityActor,\n ActivityDensity,\n ActivityEventConfig,\n ActivityItem,\n ActivityResourceConfig,\n ActivityResourceRef,\n ActivityTone,\n} from '../activities.types';\n\nimport { ActivityActionsMenu } from './activity-actions-menu';\nimport { ActivityChanges } from './activity-changes';\nimport { ActivityHeadline } from './activity-headline';\nimport { ActivityMarker } from './activity-marker';\nimport { ActivityResourceTag } from './activity-resource-tag';\n\nexport interface ActivityRowProps<TData = unknown> {\n activity: ActivityItem<TData>;\n density: ActivityDensity;\n eventConfig: ActivityEventConfig;\n tone: ActivityTone;\n isLast: boolean;\n expanded: boolean;\n onToggleExpanded: () => void;\n relativeTime: string | null;\n absoluteTime: string | null;\n sourceLabel: string | null;\n youLabel: string;\n showChangesLabel: string;\n hideChangesLabel: string;\n actionsLabel: string;\n currentUserId?: string;\n actions: readonly ActivityAction<TData>[];\n onActivityClick?: (activity: ActivityItem<TData>) => void;\n onActorClick?: (actor: ActivityActor, activity: ActivityItem<TData>) => void;\n onResourceClick?: (\n resource: ActivityResourceRef,\n config: ActivityResourceConfig | undefined,\n activity: ActivityItem<TData>,\n ) => void;\n onAction?: (actionId: string, activity: ActivityItem<TData>) => void;\n getResourceConfig?: (\n ref: ActivityResourceRef,\n ) => ActivityResourceConfig | undefined;\n /** Slot override for the headline only. */\n headlineOverride?: ReactNode;\n /** Slot override for the marker only. */\n markerOverride?: ReactNode;\n}\n\nexport function ActivityRow<TData = unknown>(props: ActivityRowProps<TData>) {\n const {\n activity,\n density,\n eventConfig,\n tone,\n isLast,\n expanded,\n onToggleExpanded,\n relativeTime,\n absoluteTime,\n sourceLabel,\n youLabel,\n showChangesLabel,\n hideChangesLabel,\n actionsLabel,\n currentUserId,\n actions,\n onActivityClick,\n onActorClick,\n onResourceClick,\n onAction,\n getResourceConfig,\n headlineOverride,\n markerOverride,\n } = props;\n\n const Icon = activity.iconOverride ?? eventConfig.icon;\n const hasChanges = (activity.changes?.length ?? 0) > 0;\n const hasMetadata = (activity.metadata?.length ?? 0) > 0;\n const hasResources = (activity.resources?.length ?? 0) > 0;\n const hasDescription =\n activity.description !== undefined &&\n activity.description !== null &&\n activity.description !== '';\n const showSecondaryRow = density !== 'compact';\n const showRichBody = density === 'rich';\n\n const headlineNode =\n headlineOverride ??\n (\n <ActivityHeadline<TData>\n activity={activity}\n currentUserId={currentUserId}\n youLabel={youLabel}\n onActorClick={onActorClick}\n onResourceClick={onResourceClick}\n getResourceConfig={getResourceConfig}\n />\n );\n\n const markerNode =\n markerOverride ?? (\n <ActivityMarker\n icon={Icon}\n tone={tone}\n density={density}\n isLast={isLast}\n />\n );\n\n const interactive = typeof onActivityClick === 'function';\n const hasNestedInteractive = (\n hasChanges ||\n hasResources ||\n actions.length > 0 ||\n typeof onActorClick === 'function' ||\n typeof onResourceClick === 'function'\n );\n const keyboardInteractive = interactive && !hasNestedInteractive;\n\n return (\n <div\n className={cn(\n 'relative flex gap-space-lg',\n interactive && 'cursor-pointer rounded-md hover:bg-muted/40',\n )}\n onClick={interactive ? () => onActivityClick?.(activity) : undefined}\n role={keyboardInteractive ? 'button' : undefined}\n tabIndex={keyboardInteractive ? 0 : undefined}\n onKeyDown={\n keyboardInteractive\n ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onActivityClick?.(activity);\n }\n }\n : undefined\n }\n >\n {markerNode}\n\n <div\n className={cn(\n 'min-w-0 flex-1',\n !isLast && (density === 'rich' ? 'pb-row-y-lg' : density === 'compact' ? 'pb-row-y' : 'pb-row-y-lg'),\n )}\n >\n <div className=\"flex flex-col gap-space-sm sm:flex-row sm:items-start sm:justify-between sm:gap-space-lg\">\n <div className=\"flex min-w-0 flex-wrap items-center gap-x-space-sm gap-y-space-sm\">\n <Text tag=\"span\" size=\"inherit\" lineHeight=\"snug\">\n {headlineNode}\n </Text>\n {!!sourceLabel && (\n <Badge inline variant=\"secondary\">\n {sourceLabel}\n </Badge>\n )}\n {showRichBody && hasChanges && (\n <Button\n type=\"button\"\n size=\"icon-small\"\n variant=\"secondary\"\n buttonStyle=\"ghost\"\n className=\"h-5 w-5 text-muted-foreground\"\n onClick={(e) => {\n e.stopPropagation();\n onToggleExpanded();\n }}\n title={expanded ? hideChangesLabel : showChangesLabel}\n aria-label={expanded ? hideChangesLabel : showChangesLabel}\n aria-expanded={expanded}\n >\n {expanded ? (\n <ChevronDown className=\"size-3.5\" />\n ) : (\n <ChevronRight className=\"size-3.5\" />\n )}\n </Button>\n )}\n </div>\n\n <div className=\"flex shrink-0 items-center gap-space-sm\">\n {!!relativeTime && (\n <Text\n size=\"inherit\"\n type=\"secondary\"\n className=\"whitespace-nowrap tabular-nums pt-space-2xs text-xxs\"\n title={absoluteTime ?? undefined}\n >\n {relativeTime}\n </Text>\n )}\n {showRichBody && actions.length > 0 && (\n <ActivityActionsMenu<TData>\n activity={activity}\n actions={actions}\n onAction={onAction}\n label={actionsLabel}\n />\n )}\n </div>\n </div>\n\n {!!showSecondaryRow && hasDescription && (\n <Text tag=\"div\" size=\"inherit\" type=\"secondary\" className=\"mt-space-sm text-xs\">\n {activity.description}\n </Text>\n )}\n\n {!!showRichBody && hasMetadata && activity.metadata && (\n <div className=\"mt-space-md flex flex-wrap gap-x-space-lg gap-y-space-sm\">\n {activity.metadata.map((m) => (\n <Text key={m.label} size=\"inherit\" type=\"secondary\" className=\"text-xs\">\n <Text tag=\"span\" size=\"inherit\" type=\"discrete\" className=\"text-xxs\">\n {m.label}:{' '}\n </Text>\n {m.value}\n </Text>\n ))}\n </div>\n )}\n\n {!!showRichBody && hasResources && activity.resources && (\n <div className=\"mt-space-md flex flex-wrap gap-space-sm\">\n {activity.resources.map((res) => {\n const cfg = getResourceConfig?.(res);\n return (\n <ActivityResourceTag\n key={res.key}\n resource={res}\n config={cfg}\n onClick={\n onResourceClick\n ? () =>\n onResourceClick(\n res,\n cfg,\n activity,\n )\n : undefined\n }\n />\n );\n })}\n </div>\n )}\n\n {!!showRichBody && hasChanges && expanded && activity.changes && (\n <div className=\"mt-space-md\">\n <ActivityChanges changes={activity.changes} />\n </div>\n )}\n </div>\n </div>\n );\n}\n","/**\n * ActivityFeed — framework-agnostic activity timeline.\n *\n * Composition seams:\n * - `strings` — deep-partial override of every label\n * - `eventConfig` — mass-configurable per-event icon/tone/labels\n * - `slots` — replace any region (row / headline / marker /\n * dateLabel / empty / loading / header / footer)\n * - `slots.renderRow` — full per-row override\n * - `accessors` — formatRelative/Absolute, getEventLabel, …\n * - `actionsForActivity` — surface a per-row action menu (rich density)\n * - `resources` + `onResourcesChange` — registry-driven rich resource\n * tags (icons, badges, links, tags) with save\n * and restore semantics for the consumer\n *\n * Headless usage:\n * - Call `useActivityFeed({ activities, ... })` directly to drive a\n * completely custom UI against the same grouping/expand state machine.\n * - Call `useActivityResources({ resources, onResourcesChange })` to\n * drive the registry independently.\n *\n * Framework-agnostic:\n * - No router import, no i18n SDK import. Wire actor / resource navigation\n * via callbacks at the call site.\n */\nimport { useMemo, type ReactNode } from 'react';\n\nimport { Text } from '@/components/typography';\nimport { useStrings } from '@/lib/strings';\nimport { useDatesConfig } from '@/lib/ui-provider';\nimport { cn } from '@/lib/utils';\n\nimport {\n defaultActivityEventConfig,\n resolveEventConfig,\n} from './activities.config';\nimport {\n defaultActivitiesStrings,\n} from './activities.strings';\nimport type {\n ActivityAction,\n ActivityFeedProps,\n ActivityItem,\n ActivityRenderRowContext,\n ActivityTone,\n} from './activities.types';\nimport { useActivityFeed } from './hooks/use-activity-feed';\nimport { useActivityResources } from './hooks/use-activity-resources';\nimport {\n ActivityDateLabel,\n ActivityEmptyState,\n ActivityRow,\n} from './partials';\n\nfunction defaultFormatAbsolute(iso: string, locale?: string): string {\n try {\n return new Intl.DateTimeFormat(locale, {\n dateStyle: 'medium',\n timeStyle: 'short',\n }).format(new Date(iso));\n } catch {\n return iso;\n }\n}\n\nfunction resolveTone<TData>(\n activity: ActivityItem<TData>,\n eventTone: ActivityTone,\n): ActivityTone {\n return activity.toneOverride ?? eventTone;\n}\n\nexport function ActivityFeed<TData = unknown>(props: ActivityFeedProps<TData>) {\n const {\n activities = [],\n density = 'default',\n groupByDate = true,\n expandedByDefault = false,\n currentUserId,\n loading = false,\n eventConfig: eventConfigOverride,\n strings: stringsProp,\n slots,\n className,\n locale,\n // accessors\n formatRelativeTime,\n formatAbsoluteTime,\n formatDateGroupLabel,\n getEventLabel: _getEventLabel,\n getSourceLabel,\n actionsForActivity,\n // callbacks\n onActivityClick,\n onActorClick,\n onResourceClick,\n onAction,\n // resources\n resources,\n onResourcesChange,\n } = props;\n\n const strings = useStrings(defaultActivitiesStrings, stringsProp);\n\n const eventConfigMap = useMemo(\n () => ({ ...defaultActivityEventConfig, ...eventConfigOverride }),\n [eventConfigOverride],\n );\n\n const registry = useActivityResources({\n resources,\n onResourcesChange,\n });\n\n const feed = useActivityFeed<TData>({\n activities,\n groupByDate,\n expandedByDefault,\n locale,\n strings,\n formatDateGroupLabel,\n });\n\n const { formatRelativeTime: storeFormatRelative } = useDatesConfig();\n const fmtRelative = formatRelativeTime ?? storeFormatRelative ?? ((iso: string) => iso);\n const fmtAbsolute = formatAbsoluteTime ?? ((iso: string) => defaultFormatAbsolute(iso, locale));\n\n if (loading) {\n return (\n <div className={cn('activities-feed--component', 'px-2 py-4', className)}>\n {slots?.loading ?? (\n <Text type=\"secondary\" align=\"center\">\n {strings.loading}\n </Text>\n )}\n </div>\n );\n }\n\n if (activities.length === 0) {\n return (\n <div className={cn('activities-feed--component', 'px-2 py-2', className)}>\n {slots?.empty ?? <ActivityEmptyState title={strings.empty} />}\n </div>\n );\n }\n\n const totalRendered = feed.groups.reduce((acc, g) => acc + g.items.length, 0);\n let renderedSoFar = 0;\n\n return (\n <div className={cn('activities-feed--component flex flex-col', className)}>\n {!!slots?.header && <div className=\"mb-3\">{slots.header}</div>}\n\n <div className=\"flex flex-col\">\n {feed.groups.map((group, gi) => {\n const isFirstGroup = gi === 0;\n return (\n <div key={`${group.label}-${gi}`} className={cn(isFirstGroup ? '' : 'mt-1')}>\n {slots?.renderDateLabel\n ? slots.renderDateLabel(group.label, isFirstGroup)\n : (\n <ActivityDateLabel\n label={group.label}\n isFirst={isFirstGroup}\n className={isFirstGroup ? '' : 'mb-2'}\n />\n )}\n\n <div className={cn('flex flex-col', !!group.label && 'mt-2')}>\n {group.items.map((keyed, ii) => {\n const activity = keyed.activity;\n const isFirstInGroup = ii === 0;\n const isLast =\n ++renderedSoFar === totalRendered;\n const eventCfg = resolveEventConfig(\n activity.event,\n eventConfigMap,\n );\n const tone = resolveTone(activity, eventCfg.tone);\n const relativeTime = activity.timestamp\n ?? (activity.createdAt\n ? fmtRelative(activity.createdAt)\n : null);\n const absoluteTime = activity.createdAt\n ? fmtAbsolute(activity.createdAt)\n : null;\n const sourceLabel = activity.source\n ? (getSourceLabel?.(activity.source)\n ?? strings.sources[activity.source]\n ?? eventCfg.sourceLabel\n ?? null)\n : eventCfg.sourceLabel ?? null;\n const sourceLabelTrimmed =\n sourceLabel && sourceLabel.trim().length > 0\n ? sourceLabel\n : null;\n const actions: readonly ActivityAction<TData>[] =\n actionsForActivity?.(activity) ?? [];\n\n const ctx: ActivityRenderRowContext<TData> = {\n density,\n isLast,\n isFirstInGroup,\n activity,\n eventConfig: eventCfg,\n tone,\n relativeTime,\n absoluteTime,\n sourceLabel: sourceLabelTrimmed,\n expanded: feed.isExpanded(activity.id),\n toggleExpanded: () =>\n feed.toggleExpanded(activity.id),\n };\n\n const customRow = slots?.renderRow?.(activity, ctx);\n if (customRow !== undefined) {\n return (\n <div key={keyed.key}>{customRow}</div>\n );\n }\n\n const headlineOverride =\n slots?.renderHeadline?.(activity, ctx);\n const markerOverride =\n slots?.renderMarker?.(activity, ctx);\n\n return (\n <ActivityRow<TData>\n key={keyed.key}\n activity={activity}\n density={density}\n eventConfig={eventCfg}\n tone={tone}\n isLast={isLast}\n expanded={ctx.expanded}\n onToggleExpanded={ctx.toggleExpanded}\n relativeTime={relativeTime}\n absoluteTime={absoluteTime}\n sourceLabel={sourceLabelTrimmed}\n youLabel={strings.you}\n showChangesLabel={strings.showChanges}\n hideChangesLabel={strings.hideChanges}\n actionsLabel={strings.actionsLabel}\n currentUserId={currentUserId}\n actions={actions}\n onActivityClick={onActivityClick}\n onActorClick={onActorClick}\n onResourceClick={onResourceClick}\n onAction={onAction}\n getResourceConfig={(ref) =>\n registry.get(ref)\n }\n headlineOverride={\n headlineOverride as ReactNode | undefined\n }\n markerOverride={\n markerOverride as ReactNode | undefined\n }\n />\n );\n })}\n </div>\n </div>\n );\n })}\n </div>\n\n {!!slots?.footer && <div className=\"mt-3\">{slots.footer}</div>}\n </div>\n );\n}\n\nActivityFeed.displayName = 'ActivityFeed';\n","/**\n * ActivityFeedCard — `<ActivityFeed />` wrapped in `SmartCard`.\n *\n * Use this when you want the canonical card chrome (title + description +\n * actions menu + content padding). For embedded surfaces (sidebars, panels)\n * use `<ActivityFeed />` directly.\n */\nimport { Activity } from 'lucide-react';\n\nimport { SmartCard } from '@/components/base/cards';\nimport { useStrings } from '@/lib/strings';\n\nimport { ActivityFeed } from '../activities-feed';\nimport { defaultActivitiesStrings } from '../activities.strings';\nimport type { ActivityFeedCardProps } from '../activities.types';\n\nexport function ActivityFeedCard<TData = unknown>({\n title,\n titleSuffix,\n description,\n padding = 'default',\n composerSlot,\n className,\n strings: stringsProp,\n slots,\n ...feedProps\n}: ActivityFeedCardProps<TData>) {\n const strings = useStrings(defaultActivitiesStrings, stringsProp);\n\n const cardTitle = title ?? strings.title;\n\n return (\n <SmartCard\n icon={<Activity className=\"size-4\" />}\n title={cardTitle}\n titleSuffix={titleSuffix}\n description={description}\n padding={padding}\n className={className}\n >\n <ActivityFeed<TData>\n {...feedProps}\n strings={stringsProp}\n slots={{\n ...slots,\n header: composerSlot ?? slots?.header,\n }}\n />\n </SmartCard>\n );\n}\n\nActivityFeedCard.displayName = 'ActivityFeedCard';\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/features/activities/activities.config.ts","../../../../src/components/features/activities/activities.strings.ts","../../../../src/components/features/activities/hooks/use-activity-feed.ts","../../../../src/components/features/activities/hooks/use-activity-resources.ts","../../../../src/components/features/activities/partials/activity-actions-menu.tsx","../../../../src/components/features/activities/partials/activity-changes.tsx","../../../../src/components/features/activities/partials/activity-date-label.tsx","../../../../src/components/features/activities/partials/activity-empty-state.tsx","../../../../src/components/features/activities/partials/tone-tokens.ts","../../../../src/components/features/activities/partials/activity-resource-tag.tsx","../../../../src/components/features/activities/partials/activity-headline.tsx","../../../../src/components/features/activities/partials/activity-marker.tsx","../../../../src/components/features/activities/partials/activity-row.tsx","../../../../src/components/features/activities/activities-feed.tsx","../../../../src/components/features/activities/partials/activities-feed-card.tsx"],"sourcesContent":["/**\n * Default per-event configuration. Consumers override individual events by\n * spreading this map and overwriting the keys they care about, e.g.:\n *\n * import { defaultActivityEventConfig } from '@/components/features/activities';\n *\n * const eventConfig = {\n * ...defaultActivityEventConfig,\n * order_refunded: { icon: Receipt, tone: 'warning', label: 'Refunded' },\n * };\n *\n * The mass `eventConfig` prop on `<ActivityFeed />` is shallow-merged on top\n * of these defaults, so any unspecified event falls back to the library\n * default and ultimately to the neutral `defaultEvent` entry below.\n */\nimport {\n AlertTriangle,\n ArrowLeftRight,\n Ban,\n Check,\n CircleDot,\n FileEdit,\n Flag,\n Heart,\n LinkIcon,\n Mail,\n MailCheck,\n MailOpen,\n MailX,\n MessageSquare,\n Pencil,\n Plus,\n ShieldCheck,\n ShoppingBag,\n Sparkles,\n Star,\n Trash2,\n UserMinus,\n UserPlus,\n} from 'lucide-react';\n\nimport type { ActivityEventConfig, ActivityEventConfigMap } from './activities.types';\n\n/** Neutral fallback used when an event has no entry in the registry. */\nexport const defaultEventConfig: ActivityEventConfig = {\n icon: CircleDot,\n tone: 'neutral',\n};\n\nexport const defaultActivityEventConfig: ActivityEventConfigMap = {\n // Lifecycle\n created: { icon: Plus, tone: 'success', label: 'Created' },\n updated: { icon: Pencil, tone: 'info', label: 'Updated' },\n edited: { icon: FileEdit, tone: 'info', label: 'Edited' },\n deleted: { icon: Trash2, tone: 'destructive', label: 'Deleted' },\n cancelled: { icon: Ban, tone: 'destructive', label: 'Cancelled' },\n restored: { icon: Sparkles, tone: 'success', label: 'Restored' },\n\n // Status transitions\n status_changed: { icon: ArrowLeftRight, tone: 'primary', label: 'Status changed' },\n status_transition: { icon: ArrowLeftRight, tone: 'primary', label: 'Status changed' },\n status_override: { icon: ArrowLeftRight, tone: 'warning', label: 'Status overridden' },\n\n // People\n assigned: { icon: UserPlus, tone: 'info', label: 'Assigned' },\n unassigned: { icon: UserMinus, tone: 'destructive', label: 'Unassigned' },\n\n // Mail\n mail_sent: { icon: Mail, tone: 'info', label: 'Email sent' },\n mail_delivered: { icon: MailCheck, tone: 'success', label: 'Email delivered' },\n mail_opened: { icon: MailOpen, tone: 'info', label: 'Email opened' },\n mail_clicked: { icon: MailOpen, tone: 'info', label: 'Email clicked' },\n mail_bounced: { icon: MailX, tone: 'destructive', label: 'Email bounced' },\n mail_failed: { icon: MailX, tone: 'destructive', label: 'Email failed' },\n\n // Comments\n comment_created: { icon: MessageSquare, tone: 'warning', label: 'Comment posted' },\n comment_deleted: { icon: MessageSquare, tone: 'destructive', label: 'Comment deleted' },\n\n // Commerce\n paid: { icon: Check, tone: 'success', label: 'Paid' },\n refunded: { icon: ArrowLeftRight, tone: 'warning', label: 'Refunded' },\n confirmed: { icon: ShieldCheck, tone: 'success', label: 'Confirmed' },\n favorited: { icon: Heart, tone: 'warning', label: 'Favorited' },\n ordered: { icon: ShoppingBag, tone: 'primary', label: 'Order placed' },\n\n // Publishing\n published: { icon: Star, tone: 'success', label: 'Published' },\n flagged: { icon: Flag, tone: 'warning', label: 'Flagged' },\n linked: { icon: LinkIcon, tone: 'info', label: 'Linked' },\n\n // Failures\n failed: { icon: AlertTriangle, tone: 'destructive', label: 'Failed' },\n health_check_failed: { icon: AlertTriangle, tone: 'destructive', label: 'Health check failed' },\n};\n\n/** Resolve `eventConfig[event]` with override + default fallback. */\nexport function resolveEventConfig(\n event: string,\n map: ActivityEventConfigMap,\n): ActivityEventConfig {\n return map[event] ?? defaultEventConfig;\n}\n","/**\n * Strings for the Activities feature. Consumers override via the `strings`\n * prop on `<ActivityFeed>` / `<ActivityFeedCard>`. Values are deep-merged\n * over these defaults — `sources` and `events` merge one level deep so a\n * consumer can override a single source/event label without rewriting the\n * whole map.\n */\nexport interface ActivitiesStrings {\n /** Card title — usually \"Activity\". */\n title: string;\n /** Empty-state copy. */\n empty: string;\n /** Loading-state copy. */\n loading: string;\n /** Date-group label for today. */\n today: string;\n /** Date-group label for yesterday. */\n yesterday: string;\n /** Fallback label for activities without a timestamp. */\n undated: string;\n /** Replacement for actor name when `actorId === currentUserId`. */\n you: string;\n /** Toggle button label — collapsed state. */\n showChanges: string;\n /** Toggle button label — expanded state. */\n hideChanges: string;\n /** aria-label for the actions menu trigger. */\n actionsLabel: string;\n /** Generic \"more\" affordance label. */\n moreLabel: string;\n /** Map of `source` → display label. */\n sources: Record<string, string>;\n /** Map of `event` → display label. Used as a fallback for headlines. */\n events: Record<string, string>;\n}\n\nexport const defaultActivitiesStrings: ActivitiesStrings = {\n title: 'Activity',\n empty: 'No activity yet.',\n loading: 'Loading activity…',\n today: 'Today',\n yesterday: 'Yesterday',\n undated: 'Undated',\n you: 'You',\n showChanges: 'Show changes',\n hideChanges: 'Hide changes',\n actionsLabel: 'Activity actions',\n moreLabel: 'More',\n sources: {\n comment: 'Comment',\n mail: 'Mail',\n booking_log: 'Booking log',\n activity_log: '',\n system: 'System',\n },\n events: {},\n};\n\n/** Replace `{{key}}` tokens with values from `params`. */\nexport function interpolate(\n template: string,\n params: Record<string, string | number>,\n): string {\n return template.replace(/\\{\\{\\s*(\\w+)\\s*\\}\\}/g, (match, key) => {\n const v = params[key];\n return v === undefined ? match : String(v);\n });\n}\n","/**\n * useActivityFeed — headless state machine for the Activities feature.\n *\n * Returns date-grouped activities with stable React keys, plus the expand /\n * collapse map for change-detail rows. Consumers wanting a fully custom UI\n * can call this hook directly and bypass `<ActivityFeed />`.\n */\nimport { isToday, isYesterday } from 'date-fns';\nimport { useCallback, useMemo, useState } from 'react';\n\nimport type { ActivitiesStrings } from '../activities.strings';\nimport type { ActivityItem } from '../activities.types';\n\nexport interface ActivityKeyedItem<TData = unknown> {\n activity: ActivityItem<TData>;\n key: string;\n}\n\nexport interface ActivityDateGroup<TData = unknown> {\n label: string;\n items: ActivityKeyedItem<TData>[];\n}\n\nexport interface UseActivityFeedOptions<TData = unknown> {\n activities: ReadonlyArray<ActivityItem<TData>>;\n groupByDate?: boolean;\n expandedByDefault?: boolean;\n locale?: string;\n strings: ActivitiesStrings;\n formatDateGroupLabel?: (\n iso: string | null,\n strings: ActivitiesStrings,\n ) => string;\n}\n\nexport interface UseActivityFeedReturn<TData = unknown> {\n groups: ActivityDateGroup<TData>[];\n total: number;\n isExpanded: (id: string) => boolean;\n toggleExpanded: (id: string) => void;\n setExpanded: (id: string, value: boolean) => void;\n expandAll: () => void;\n collapseAll: () => void;\n}\n\nfunction defaultDateGroupLabel(\n iso: string | null,\n strings: ActivitiesStrings,\n locale?: string,\n): string {\n if (!iso) return strings.undated;\n const date = new Date(iso);\n if (isToday(date)) return strings.today;\n if (isYesterday(date)) return strings.yesterday;\n try {\n return new Intl.DateTimeFormat(locale, {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n }).format(date);\n } catch {\n return new Intl.DateTimeFormat(undefined, {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n }).format(date);\n }\n}\n\nexport function useActivityFeed<TData = unknown>({\n activities,\n groupByDate = true,\n expandedByDefault = false,\n locale,\n strings,\n formatDateGroupLabel,\n}: UseActivityFeedOptions<TData>): UseActivityFeedReturn<TData> {\n const [expandedMap, setExpandedMap] = useState<Record<string, boolean>>({});\n\n const keyed = useMemo<ActivityKeyedItem<TData>[]>(() => {\n const seen = new Map<string, number>();\n return activities.map((activity) => {\n const baseId = String(activity.id ?? '').trim();\n const createdAt = String(activity.createdAt ?? '').trim();\n const event = String(activity.event ?? '').trim();\n const source = String(activity.source ?? '').trim();\n const keyBase = [baseId, createdAt, event, source].join(':');\n const occurrence = (seen.get(keyBase) ?? 0) + 1;\n seen.set(keyBase, occurrence);\n return { activity, key: `${keyBase}:${occurrence}` };\n });\n }, [activities]);\n\n const groups = useMemo<ActivityDateGroup<TData>[]>(() => {\n if (!groupByDate) {\n return keyed.length > 0 ? [{ label: '', items: keyed }] : [];\n }\n const out: ActivityDateGroup<TData>[] = [];\n let currentLabel = '__init__';\n let currentItems: ActivityKeyedItem<TData>[] = [];\n\n const labelFor = (iso: string | null) =>\n formatDateGroupLabel\n ? formatDateGroupLabel(iso, strings)\n : defaultDateGroupLabel(iso, strings, locale);\n\n for (const item of keyed) {\n const iso = item.activity.createdAt ?? null;\n const label = labelFor(iso);\n if (label !== currentLabel) {\n if (currentItems.length > 0) {\n out.push({ label: currentLabel, items: currentItems });\n }\n currentLabel = label;\n currentItems = [item];\n } else {\n currentItems.push(item);\n }\n }\n if (currentItems.length > 0) {\n out.push({ label: currentLabel, items: currentItems });\n }\n return out;\n }, [keyed, groupByDate, locale, strings, formatDateGroupLabel]);\n\n const isExpanded = useCallback(\n (id: string) => expandedMap[id] ?? expandedByDefault,\n [expandedMap, expandedByDefault],\n );\n\n const toggleExpanded = useCallback((id: string) => {\n setExpandedMap((current) => ({\n ...current,\n [id]: !(current[id] ?? false),\n }));\n }, []);\n\n const setExpanded = useCallback((id: string, value: boolean) => {\n setExpandedMap((current) => ({ ...current, [id]: value }));\n }, []);\n\n const expandAll = useCallback(() => {\n const next: Record<string, boolean> = {};\n for (const k of keyed) next[k.activity.id] = true;\n setExpandedMap(next);\n }, [keyed]);\n\n const collapseAll = useCallback(() => setExpandedMap({}), []);\n\n return {\n groups,\n total: keyed.length,\n isExpanded,\n toggleExpanded,\n setExpanded,\n expandAll,\n collapseAll,\n };\n}\n","/**\n * useActivityResources — registry hook for the rich-resource feature.\n *\n * The registry maps `key → ActivityResourceConfig`. Activity items reference\n * resources by `key`; the row renderer looks up the live config so badges,\n * icons, and links can be edited globally without touching individual rows.\n *\n * The hook re-seeds whenever the `resources` prop reference changes and emits\n * the full registry on every mutation via `onResourcesChange`. Wire that\n * callback to localStorage / a backend mutation to persist the user's\n * resource customisations across sessions.\n */\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport type {\n ActivityResourceConfig,\n ActivityResourceRef,\n} from '../activities.types';\n\nexport type ActivityResourceRegistry = Readonly<\n Record<string, ActivityResourceConfig>\n>;\n\nexport interface UseActivityResourcesOptions {\n resources?: ActivityResourceRegistry;\n onResourcesChange?: (registry: ActivityResourceRegistry) => void;\n}\n\nexport interface UseActivityResourcesReturn {\n registry: ActivityResourceRegistry;\n /** Look up a resource by ref or key. */\n get: (\n ref: ActivityResourceRef | string,\n ) => ActivityResourceConfig | undefined;\n /** Replace a resource entry wholesale (or insert new). */\n register: (key: string, config: ActivityResourceConfig) => void;\n /** Shallow-merge a partial update over an existing entry. */\n update: (key: string, partial: Partial<ActivityResourceConfig>) => void;\n /** Remove an entry. */\n remove: (key: string) => void;\n /** Replace the entire registry. */\n setAll: (registry: ActivityResourceRegistry) => void;\n /** Reset to the original `resources` prop (or empty if none). */\n reset: () => void;\n}\n\nexport function useActivityResources({\n resources,\n onResourcesChange,\n}: UseActivityResourcesOptions = {}): UseActivityResourcesReturn {\n const [registry, setRegistry] = useState<ActivityResourceRegistry>(\n () => resources ?? {},\n );\n\n const seedRef = useRef(resources);\n useEffect(() => {\n if (resources !== seedRef.current) {\n seedRef.current = resources;\n setRegistry(resources ?? {});\n }\n }, [resources]);\n\n const onChangeRef = useRef(onResourcesChange);\n useEffect(() => {\n onChangeRef.current = onResourcesChange;\n }, [onResourcesChange]);\n\n const emit = useCallback((next: ActivityResourceRegistry) => {\n onChangeRef.current?.(next);\n }, []);\n\n const register = useCallback(\n (key: string, config: ActivityResourceConfig) => {\n setRegistry((current) => {\n const next = { ...current, [key]: config };\n emit(next);\n return next;\n });\n },\n [emit],\n );\n\n const update = useCallback(\n (key: string, partial: Partial<ActivityResourceConfig>) => {\n setRegistry((current) => {\n const existing = current[key];\n if (!existing) return current;\n const next = {\n ...current,\n [key]: { ...existing, ...partial },\n };\n emit(next);\n return next;\n });\n },\n [emit],\n );\n\n const remove = useCallback(\n (key: string) => {\n setRegistry((current) => {\n if (!(key in current)) return current;\n const next = { ...current };\n delete next[key];\n emit(next);\n return next;\n });\n },\n [emit],\n );\n\n const setAll = useCallback(\n (next: ActivityResourceRegistry) => {\n setRegistry(next);\n emit(next);\n },\n [emit],\n );\n\n const reset = useCallback(() => {\n const next = seedRef.current ?? {};\n setRegistry(next);\n emit(next);\n }, [emit]);\n\n const get = useCallback(\n (ref: ActivityResourceRef | string) => {\n const key = typeof ref === 'string' ? ref : ref.key;\n return registry[key];\n },\n [registry],\n );\n\n return { registry, get, register, update, remove, setAll, reset };\n}\n","/**\n * ActivityActionsMenu — inline overflow menu rendered on rich rows.\n *\n * Backed by the shadcn DropdownMenu primitive; each item fires the\n * activity's per-row `onClick` and forwards `actionId` through `onAction` so\n * consumers can route actions centrally.\n */\nimport { MoreHorizontal } from 'lucide-react';\n\nimport { Button } from '@/components/base/buttons';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@/components/base/navigation';\n\nimport type { ActivityAction, ActivityItem } from '../activities.types';\n\nexport interface ActivityActionsMenuProps<TData = unknown> {\n activity: ActivityItem<TData>;\n actions: readonly ActivityAction<TData>[];\n onAction?: (actionId: string, activity: ActivityItem<TData>) => void;\n label: string;\n}\n\nexport function ActivityActionsMenu<TData = unknown>({\n activity,\n actions,\n onAction,\n label,\n}: ActivityActionsMenuProps<TData>) {\n if (actions.length === 0) return null;\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger\n render={(triggerProps) => (\n <Button\n {...(triggerProps as Record<string, unknown>)}\n type=\"button\"\n variant=\"secondary\"\n buttonStyle=\"ghost\"\n size=\"icon-small\"\n aria-label={label}\n className=\"h-7 w-7 text-muted-foreground\"\n >\n <MoreHorizontal className=\"size-4\" />\n </Button>\n )}\n />\n <DropdownMenuContent align=\"end\" className=\"min-w-40\">\n {actions.map((action) => {\n const Icon = action.icon;\n return (\n <DropdownMenuItem\n key={action.id}\n onClick={() => {\n if (action.disabled) return;\n action.onClick(activity);\n onAction?.(action.id, activity);\n }}\n disabled={action.disabled}\n variant={action.tone === 'destructive' ? 'destructive' : 'default'}\n className=\"gap-2 px-2 py-1.5 text-xs\"\n >\n {!!Icon && <Icon className=\"size-3.5\" />}\n {action.label}\n </DropdownMenuItem>\n );\n })}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n","/**\n * ActivityChanges — collapsible old → new diff block.\n *\n * Each entry shows the attribute label, the previous value (line-through, on\n * a destructive tint), an arrow, and the new value (on a success tint). When\n * neither old nor new is set, falls back to `description`.\n */\nimport { Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nimport type { ActivityChange } from '../activities.types';\n\nexport interface ActivityChangesProps {\n changes: readonly ActivityChange[];\n className?: string;\n}\n\nfunction ChangeValue({ change }: { change: ActivityChange }) {\n const hasOld = change.old !== null && change.old !== undefined;\n const hasNew = change.new !== null && change.new !== undefined;\n\n if (!hasOld && !hasNew) {\n return (\n <Text size=\"xs\" tag=\"span\">\n {change.description}\n </Text>\n );\n }\n\n return (\n <Text tag=\"span\" size=\"xs\" className=\"inline-flex flex-wrap items-baseline gap-1\">\n {!!hasOld && (\n <Text\n tag=\"span\"\n size=\"xs\"\n className=\"rounded bg-destructive/10 text-destructive line-through px-1 py-px\"\n >\n {change.old}\n </Text>\n )}\n {hasOld && hasNew && (\n <Text tag=\"span\" size=\"xs\" type=\"secondary\">\n →\n </Text>\n )}\n {!!hasNew && (\n <Text\n tag=\"span\"\n size=\"xs\"\n className=\"rounded bg-success/15 text-success px-1 py-px\"\n >\n {change.new}\n </Text>\n )}\n </Text>\n );\n}\n\nexport function ActivityChanges({ changes, className }: ActivityChangesProps) {\n if (changes.length === 0) return null;\n return (\n <div\n className={cn(\n 'space-y-1.5 rounded-lg border border-border/60 bg-muted/30 px-3 py-2',\n className,\n )}\n >\n {changes.map((change) => (\n <div\n key={`${change.key}-${change.label}`}\n className=\"flex items-baseline gap-2\"\n >\n <Text\n size=\"xs\"\n type=\"secondary\"\n weight=\"medium\"\n className=\"shrink-0\"\n >\n {change.label}\n </Text>\n <ChangeValue change={change} />\n </div>\n ))}\n </div>\n );\n}\n","/**\n * ActivityDateLabel — eyebrow rendered above each date group.\n *\n * Consumers can override via `slots.renderDateLabel`. Default: small\n * uppercase eyebrow above each group, with extra top margin between groups.\n */\nimport { Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nexport interface ActivityDateLabelProps {\n label: string;\n isFirst: boolean;\n className?: string;\n}\n\nexport function ActivityDateLabel({\n label,\n isFirst,\n className,\n}: ActivityDateLabelProps) {\n if (label === '') return null;\n return (\n <Text\n size=\"xs\"\n type=\"secondary\"\n weight=\"medium\"\n className={cn(\n 'uppercase tracking-wider',\n !isFirst && 'mt-5',\n className,\n )}\n >\n {label}\n </Text>\n );\n}\n","/**\n * ActivityEmptyState — neutral empty surface used when no activities are\n * available. Consumers replace via `slots.empty`.\n */\nimport { Activity } from 'lucide-react';\n\nimport { Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nexport interface ActivityEmptyStateProps {\n title: string;\n hint?: string;\n className?: string;\n}\n\nexport function ActivityEmptyState({\n title,\n hint,\n className,\n}: ActivityEmptyStateProps) {\n return (\n <div\n className={cn(\n 'flex flex-col items-center justify-center gap-2 px-6 py-10 text-center',\n className,\n )}\n >\n <span className=\"flex size-9 items-center justify-center rounded-full bg-muted text-muted-foreground\">\n <Activity className=\"size-4\" />\n </span>\n <Text weight=\"medium\">\n {title}\n </Text>\n {!!hint && (\n <Text size=\"xs\" type=\"secondary\">\n {hint}\n </Text>\n )}\n </div>\n );\n}\n","/**\n * Tone palettes shared by the marker, headline status segments, and the\n * resource tag. Tones map to semantic shadcn tokens — never to raw colours —\n * so a consumer rebrand at `:root` flows through the activities feature\n * automatically.\n */\nimport type { ActivityTone } from '../activities.types';\nimport type { ComposedBadgeVariant } from '@/components/base/badge/badge';\n\nexport interface ActivityToneStyle {\n /** Filled background — used by the rich icon marker. */\n bg: string;\n /** Foreground text colour matching the bg. */\n fg: string;\n /** Solid colour used by the compact dot. */\n dot: string;\n /** Border tint used by the connector line. */\n line: string;\n /** Background for chips / tags. */\n chipBg: string;\n /** Text colour for chips / tags. */\n chipFg: string;\n}\n\nexport const ACTIVITY_TONE: Record<ActivityTone, ActivityToneStyle> = {\n primary: {\n bg: 'bg-primary/10',\n fg: 'text-primary',\n dot: 'bg-primary',\n line: 'bg-primary/30',\n chipBg: 'bg-primary/5',\n chipFg: 'text-primary',\n },\n success: {\n bg: 'bg-success/10',\n fg: 'text-success',\n dot: 'bg-success',\n line: 'bg-success/30',\n chipBg: 'bg-success/10',\n chipFg: 'text-success',\n },\n warning: {\n bg: 'bg-warning/30',\n fg: 'text-warning-foreground',\n dot: 'bg-warning',\n line: 'bg-warning/40',\n chipBg: 'bg-warning/30',\n chipFg: 'text-warning-foreground',\n },\n destructive: {\n bg: 'bg-destructive/10',\n fg: 'text-destructive',\n dot: 'bg-destructive',\n line: 'bg-destructive/30',\n chipBg: 'bg-destructive/10',\n chipFg: 'text-destructive',\n },\n info: {\n bg: 'bg-info/10',\n fg: 'text-info',\n dot: 'bg-info',\n line: 'bg-info/30',\n chipBg: 'bg-info/10',\n chipFg: 'text-info',\n },\n neutral: {\n bg: 'bg-muted',\n fg: 'text-muted-foreground',\n dot: 'bg-muted-foreground/60',\n line: 'bg-border',\n chipBg: 'bg-muted',\n chipFg: 'text-muted-foreground',\n },\n};\n\n/** Map an activity tone onto the closest base/Badge variant. */\nexport const TONE_TO_BADGE_VARIANT: Record<ActivityTone, ComposedBadgeVariant> = {\n primary: 'primary',\n success: 'success',\n warning: 'warning',\n destructive: 'destructive',\n info: 'info',\n neutral: 'secondary',\n};\n","/**\n * ActivityResourceTag — chip rendering for a registered resource.\n *\n * The resource registry stores per-key `ActivityResourceConfig` (label, icon,\n * tone, badge, tags). This component renders those as a single inline chip\n * suitable for embedding into a headline. Falls back gracefully when the\n * registry has no entry — uses the segment's text/label.\n */\nimport { CircleDot } from 'lucide-react';\nimport { cn } from '@/lib/utils';\n\nimport { Badge } from '@/components/base/badge';\nimport { Button } from '@/components/base/buttons';\nimport { Text } from '@/components/typography';\n\nimport type {\n ActivityResourceConfig,\n ActivityResourceRef,\n ActivityTone,\n} from '../activities.types';\n\nimport { ACTIVITY_TONE, TONE_TO_BADGE_VARIANT } from './tone-tokens';\n\nexport interface ActivityResourceTagProps {\n resource: ActivityResourceRef;\n config?: ActivityResourceConfig;\n /** Fallback label if neither config nor segment text are present. */\n fallbackText?: string;\n onClick?: () => void;\n}\n\nexport function ActivityResourceTag({\n resource,\n config,\n fallbackText,\n onClick,\n}: ActivityResourceTagProps) {\n const tone: ActivityTone = config?.tone ?? 'neutral';\n const palette = ACTIVITY_TONE[tone];\n const Icon = config?.icon ?? CircleDot;\n const label = config?.label ?? fallbackText ?? resource.label ?? resource.key;\n const interactive = typeof onClick === 'function';\n\n const inner = (\n <>\n <Icon className={cn('size-icon-sm shrink-0', palette.fg)} />\n <Text tag=\"span\" size=\"inherit\" weight=\"medium\" className={palette.chipFg}>\n {label}\n </Text>\n {!!config?.tags && config.tags.length > 0 && (\n <Text\n tag=\"span\"\n size=\"xs\"\n type=\"secondary\"\n className=\"ml-space-2xs border-l border-current/20 pl-space-sm\"\n >\n {config.tags.join(' · ')}\n </Text>\n )}\n {!!config?.badge && (\n <Badge\n inline\n variant={TONE_TO_BADGE_VARIANT[config.badge.tone ?? 'neutral']}\n className=\"ml-space-2xs\"\n >\n {config.badge.label}\n </Badge>\n )}\n </>\n );\n\n const chipClass = cn(\n 'inline-flex items-center gap-space-sm rounded-full px-space-md py-space-2xs align-baseline text-xs',\n 'border border-border/60',\n palette.chipBg,\n interactive &&\n 'cursor-pointer transition-colors hover:bg-foreground/5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n );\n\n if (interactive) {\n return (\n <Button\n type=\"button\"\n variant=\"secondary\"\n buttonStyle=\"ghost\"\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation();\n onClick?.();\n }}\n className={cn(chipClass, 'h-auto rounded-full')}\n title={config?.note}\n >\n {inner}\n </Button>\n );\n }\n\n return (\n <span className={chipClass} title={config?.note}>\n {inner}\n </span>\n );\n}\n","/**\n * ActivityHeadline — segment renderer for the headline line.\n *\n * Renders typed segments (`actor` / `field` / `value` / `status` / `resource`\n * / `text`) into mixed inline content with proper typography and tone.\n *\n * When no segments are provided, falls back to splitting `headline` around\n * the actor's name so the actor still becomes interactive when possible.\n */\nimport { Fragment, type ReactNode } from 'react';\n\nimport { Badge } from '@/components/base/badge';\nimport { Button } from '@/components/base/buttons';\nimport { Text } from '@/components/typography';\n\nimport type {\n ActivityActor,\n ActivityHeadlineSegment,\n ActivityItem,\n ActivityResourceConfig,\n ActivityResourceRef,\n} from '../activities.types';\nimport { ActivityResourceTag } from './activity-resource-tag';\nimport { TONE_TO_BADGE_VARIANT } from './tone-tokens';\n\nexport interface ActivityHeadlineProps<TData = unknown> {\n activity: ActivityItem<TData>;\n currentUserId?: string;\n youLabel: string;\n onActorClick?: (actor: ActivityActor, activity: ActivityItem<TData>) => void;\n onResourceClick?: (\n resource: ActivityResourceRef,\n config: ActivityResourceConfig | undefined,\n activity: ActivityItem<TData>,\n ) => void;\n /** Live registry lookup for resource segments. */\n getResourceConfig?: (\n ref: ActivityResourceRef,\n ) => ActivityResourceConfig | undefined;\n}\n\nfunction ActorNode<TData>({\n actorId,\n text,\n href,\n activity,\n youLabel,\n currentUserId,\n onActorClick,\n}: {\n actorId?: string;\n text: string;\n href?: string;\n activity: ActivityItem<TData>;\n youLabel: string;\n currentUserId?: string;\n onActorClick?: (actor: ActivityActor, activity: ActivityItem<TData>) => void;\n}) {\n const isYou =\n currentUserId !== undefined &&\n actorId !== undefined &&\n currentUserId === actorId;\n const display = isYou ? youLabel : text;\n const actor: ActivityActor = activity.actor ?? { id: actorId, name: text };\n\n if (href) {\n return (\n <a\n href={href}\n onClick={(e) => {\n if (onActorClick) {\n e.preventDefault();\n e.stopPropagation();\n onActorClick(actor, activity);\n }\n }}\n className=\"font-semibold text-foreground underline-offset-2 hover:underline\"\n >\n {display}\n </a>\n );\n }\n\n if (onActorClick) {\n return (\n <Button\n type=\"button\"\n variant=\"secondary\"\n buttonStyle=\"ghost\"\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation();\n onActorClick(actor, activity);\n }}\n className=\"h-auto rounded px-0 py-0 font-semibold text-foreground underline-offset-2 hover:underline\"\n >\n {display}\n </Button>\n );\n }\n\n return (\n <Text tag=\"span\" weight=\"semibold\">\n {display}\n </Text>\n );\n}\n\nfunction renderSegments<TData>(\n segments: readonly ActivityHeadlineSegment[],\n props: ActivityHeadlineProps<TData>,\n): ReactNode {\n return segments.map((segment, index) => {\n const key = `seg-${index}-${segment.type}`;\n switch (segment.type) {\n case 'actor':\n return (\n <Fragment key={key}>\n <ActorNode<TData>\n actorId={segment.actorId}\n text={segment.text}\n href={segment.href}\n activity={props.activity}\n youLabel={props.youLabel}\n currentUserId={props.currentUserId}\n onActorClick={props.onActorClick}\n />{' '}\n </Fragment>\n );\n case 'field':\n case 'value':\n return (\n <Fragment key={key}>\n <Text tag=\"span\" weight=\"semibold\">\n {segment.text}\n </Text>{' '}\n </Fragment>\n );\n case 'status':\n return (\n <Fragment key={key}>\n <Badge\n inline\n variant={TONE_TO_BADGE_VARIANT[segment.tone ?? 'neutral']}\n >\n {segment.text}\n </Badge>{' '}\n </Fragment>\n );\n case 'resource': {\n const config = props.getResourceConfig?.(segment.resource);\n return (\n <Fragment key={key}>\n <ActivityResourceTag\n resource={segment.resource}\n config={config}\n fallbackText={segment.text}\n onClick={\n props.onResourceClick\n ? () =>\n props.onResourceClick?.(\n segment.resource,\n config,\n props.activity,\n )\n : undefined\n }\n />{' '}\n </Fragment>\n );\n }\n case 'text':\n default:\n return (\n <Fragment key={key}>\n <Text tag=\"span\">\n {segment.text}\n </Text>{' '}\n </Fragment>\n );\n }\n });\n}\n\nfunction renderFallback<TData>(props: ActivityHeadlineProps<TData>): ReactNode {\n const { activity } = props;\n const fallbackHeadline =\n activity.headline ?? activity.event;\n const actorName = activity.actor?.name;\n if (!actorName || !fallbackHeadline.includes(actorName)) {\n return (\n <Text tag=\"span\">\n {fallbackHeadline}\n </Text>\n );\n }\n const [before, ...after] = fallbackHeadline.split(actorName);\n return (\n <>\n {!!before && (\n <Text tag=\"span\">\n {before}\n </Text>\n )}\n <ActorNode<TData>\n actorId={activity.actor?.id}\n text={actorName}\n href={activity.actor?.href}\n activity={activity}\n youLabel={props.youLabel}\n currentUserId={props.currentUserId}\n onActorClick={props.onActorClick}\n />\n {after.length > 0 && (\n <Text tag=\"span\">\n {after.join(actorName)}\n </Text>\n )}\n </>\n );\n}\n\nexport function ActivityHeadline<TData = unknown>(\n props: ActivityHeadlineProps<TData>,\n) {\n const segments = props.activity.segments;\n if (segments && segments.length > 0) {\n return (\n <span className=\"leading-snug [&>span]:leading-snug\">\n {renderSegments<TData>(segments, props)}\n </span>\n );\n }\n return <span className=\"leading-snug\">{renderFallback<TData>(props)}</span>;\n}\n","/**\n * ActivityMarker — left-edge visual for a row.\n *\n * Density mapping:\n * - `compact` → small tone-coloured dot\n * - `default` → 22px tone-tinted square with the event icon\n * - `rich` → 28px tone-tinted circle with the event icon\n *\n * Always renders the connector line beneath unless `isLast` is true.\n */\nimport type { LucideIcon } from 'lucide-react';\nimport { cn } from '@/lib/utils';\n\nimport type { ActivityDensity, ActivityTone } from '../activities.types';\n\nimport { ACTIVITY_TONE } from './tone-tokens';\n\nexport interface ActivityMarkerProps {\n icon: LucideIcon;\n tone: ActivityTone;\n density: ActivityDensity;\n isLast: boolean;\n}\n\nexport function ActivityMarker({\n icon: Icon,\n tone,\n density,\n isLast,\n}: ActivityMarkerProps) {\n const palette = ACTIVITY_TONE[tone];\n\n if (density === 'compact') {\n return (\n <div className=\"flex flex-col items-center\">\n <span\n aria-hidden\n className={cn('mt-1.5 size-2 shrink-0 rounded-full', palette.dot)}\n />\n {!isLast && (\n <span aria-hidden className={cn('mt-1 w-px flex-1', palette.line)} />\n )}\n </div>\n );\n }\n\n if (density === 'rich') {\n return (\n <div className=\"flex flex-col items-center\">\n <span\n className={cn(\n 'flex size-7 shrink-0 items-center justify-center rounded-full ring-1 ring-border/60',\n palette.bg,\n palette.fg,\n )}\n >\n <Icon className=\"size-3.5\" />\n </span>\n {!isLast && (\n <span aria-hidden className={cn('mt-1 w-px flex-1', palette.line)} />\n )}\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col items-center\">\n <span\n className={cn(\n 'flex size-5 shrink-0 items-center justify-center rounded-full',\n palette.bg,\n palette.fg,\n )}\n >\n <Icon className=\"size-3\" />\n </span>\n {!isLast && (\n <span aria-hidden className={cn('mt-1 w-px flex-1', palette.line)} />\n )}\n </div>\n );\n}\n","/**\n * ActivityRow — single row layout used by `<ActivityFeed />`.\n *\n * Composes the marker, headline, optional description, metadata chips,\n * source badge, timestamp, and (rich-only) the change-detail block plus\n * action menu. Per-density layout follows the design-system rules:\n * compact (dot, single line) / default (icon, headline + meta line) /\n * rich (icon, full header + body + actions).\n */\nimport { ChevronDown, ChevronRight } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { Badge } from '@/components/base/badge';\nimport { Button } from '@/components/base/buttons';\nimport { Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nimport type {\n ActivityAction,\n ActivityActor,\n ActivityDensity,\n ActivityEventConfig,\n ActivityItem,\n ActivityResourceConfig,\n ActivityResourceRef,\n ActivityTone,\n} from '../activities.types';\n\nimport { ActivityActionsMenu } from './activity-actions-menu';\nimport { ActivityChanges } from './activity-changes';\nimport { ActivityHeadline } from './activity-headline';\nimport { ActivityMarker } from './activity-marker';\nimport { ActivityResourceTag } from './activity-resource-tag';\n\nexport interface ActivityRowProps<TData = unknown> {\n activity: ActivityItem<TData>;\n density: ActivityDensity;\n eventConfig: ActivityEventConfig;\n tone: ActivityTone;\n isLast: boolean;\n expanded: boolean;\n onToggleExpanded: () => void;\n relativeTime: string | null;\n absoluteTime: string | null;\n sourceLabel: string | null;\n youLabel: string;\n showChangesLabel: string;\n hideChangesLabel: string;\n actionsLabel: string;\n currentUserId?: string;\n actions: readonly ActivityAction<TData>[];\n onActivityClick?: (activity: ActivityItem<TData>) => void;\n onActorClick?: (actor: ActivityActor, activity: ActivityItem<TData>) => void;\n onResourceClick?: (\n resource: ActivityResourceRef,\n config: ActivityResourceConfig | undefined,\n activity: ActivityItem<TData>,\n ) => void;\n onAction?: (actionId: string, activity: ActivityItem<TData>) => void;\n getResourceConfig?: (\n ref: ActivityResourceRef,\n ) => ActivityResourceConfig | undefined;\n /** Slot override for the headline only. */\n headlineOverride?: ReactNode;\n /** Slot override for the marker only. */\n markerOverride?: ReactNode;\n}\n\nexport function ActivityRow<TData = unknown>(props: ActivityRowProps<TData>) {\n const {\n activity,\n density,\n eventConfig,\n tone,\n isLast,\n expanded,\n onToggleExpanded,\n relativeTime,\n absoluteTime,\n sourceLabel,\n youLabel,\n showChangesLabel,\n hideChangesLabel,\n actionsLabel,\n currentUserId,\n actions,\n onActivityClick,\n onActorClick,\n onResourceClick,\n onAction,\n getResourceConfig,\n headlineOverride,\n markerOverride,\n } = props;\n\n const Icon = activity.iconOverride ?? eventConfig.icon;\n const hasChanges = (activity.changes?.length ?? 0) > 0;\n const hasMetadata = (activity.metadata?.length ?? 0) > 0;\n const hasResources = (activity.resources?.length ?? 0) > 0;\n const hasDescription =\n activity.description !== undefined &&\n activity.description !== null &&\n activity.description !== '';\n const showSecondaryRow = density !== 'compact';\n const showRichBody = density === 'rich';\n\n const headlineNode =\n headlineOverride ??\n (\n <ActivityHeadline<TData>\n activity={activity}\n currentUserId={currentUserId}\n youLabel={youLabel}\n onActorClick={onActorClick}\n onResourceClick={onResourceClick}\n getResourceConfig={getResourceConfig}\n />\n );\n\n const markerNode =\n markerOverride ?? (\n <ActivityMarker\n icon={Icon}\n tone={tone}\n density={density}\n isLast={isLast}\n />\n );\n\n const interactive = typeof onActivityClick === 'function';\n const hasNestedInteractive = (\n hasChanges ||\n hasResources ||\n actions.length > 0 ||\n typeof onActorClick === 'function' ||\n typeof onResourceClick === 'function'\n );\n const keyboardInteractive = interactive && !hasNestedInteractive;\n\n return (\n <div\n className={cn(\n 'relative flex gap-space-lg',\n interactive && 'cursor-pointer rounded-md hover:bg-muted/40',\n )}\n onClick={interactive ? () => onActivityClick?.(activity) : undefined}\n role={keyboardInteractive ? 'button' : undefined}\n tabIndex={keyboardInteractive ? 0 : undefined}\n onKeyDown={\n keyboardInteractive\n ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onActivityClick?.(activity);\n }\n }\n : undefined\n }\n >\n {markerNode}\n\n <div\n className={cn(\n 'min-w-0 flex-1',\n !isLast && (density === 'rich' ? 'pb-row-y-lg' : density === 'compact' ? 'pb-row-y' : 'pb-row-y-lg'),\n )}\n >\n <div className=\"flex flex-col gap-space-sm sm:flex-row sm:items-start sm:justify-between sm:gap-space-lg\">\n <div className=\"flex min-w-0 flex-wrap items-center gap-x-space-sm gap-y-space-sm\">\n <Text tag=\"span\" size=\"inherit\" lineHeight=\"snug\">\n {headlineNode}\n </Text>\n {!!sourceLabel && (\n <Badge inline variant=\"secondary\">\n {sourceLabel}\n </Badge>\n )}\n {showRichBody && hasChanges && (\n <Button\n type=\"button\"\n size=\"icon-small\"\n variant=\"secondary\"\n buttonStyle=\"ghost\"\n className=\"h-5 w-5 text-muted-foreground\"\n onClick={(e) => {\n e.stopPropagation();\n onToggleExpanded();\n }}\n title={expanded ? hideChangesLabel : showChangesLabel}\n aria-label={expanded ? hideChangesLabel : showChangesLabel}\n aria-expanded={expanded}\n >\n {expanded ? (\n <ChevronDown className=\"size-3.5\" />\n ) : (\n <ChevronRight className=\"size-3.5\" />\n )}\n </Button>\n )}\n </div>\n\n <div className=\"flex shrink-0 items-center gap-space-sm\">\n {!!relativeTime && (\n <Text\n size=\"inherit\"\n type=\"secondary\"\n className=\"whitespace-nowrap tabular-nums pt-space-2xs text-xs\"\n title={absoluteTime ?? undefined}\n >\n {relativeTime}\n </Text>\n )}\n {showRichBody && actions.length > 0 && (\n <ActivityActionsMenu<TData>\n activity={activity}\n actions={actions}\n onAction={onAction}\n label={actionsLabel}\n />\n )}\n </div>\n </div>\n\n {!!showSecondaryRow && hasDescription && (\n <Text tag=\"div\" size=\"inherit\" type=\"secondary\" className=\"mt-space-sm text-xs\">\n {activity.description}\n </Text>\n )}\n\n {!!showRichBody && hasMetadata && activity.metadata && (\n <div className=\"mt-space-md flex flex-wrap gap-x-space-lg gap-y-space-sm\">\n {activity.metadata.map((m) => (\n <Text key={m.label} size=\"inherit\" type=\"secondary\" className=\"text-xs\">\n <Text tag=\"span\" size=\"inherit\" type=\"discrete\" className=\"text-xs\">\n {m.label}:{' '}\n </Text>\n {m.value}\n </Text>\n ))}\n </div>\n )}\n\n {!!showRichBody && hasResources && activity.resources && (\n <div className=\"mt-space-md flex flex-wrap gap-space-sm\">\n {activity.resources.map((res) => {\n const cfg = getResourceConfig?.(res);\n return (\n <ActivityResourceTag\n key={res.key}\n resource={res}\n config={cfg}\n onClick={\n onResourceClick\n ? () =>\n onResourceClick(\n res,\n cfg,\n activity,\n )\n : undefined\n }\n />\n );\n })}\n </div>\n )}\n\n {!!showRichBody && hasChanges && expanded && activity.changes && (\n <div className=\"mt-space-md\">\n <ActivityChanges changes={activity.changes} />\n </div>\n )}\n </div>\n </div>\n );\n}\n","/**\n * ActivityFeed — framework-agnostic activity timeline.\n *\n * Composition seams:\n * - `strings` — deep-partial override of every label\n * - `eventConfig` — mass-configurable per-event icon/tone/labels\n * - `slots` — replace any region (row / headline / marker /\n * dateLabel / empty / loading / header / footer)\n * - `slots.renderRow` — full per-row override\n * - `accessors` — formatRelative/Absolute, getEventLabel, …\n * - `actionsForActivity` — surface a per-row action menu (rich density)\n * - `resources` + `onResourcesChange` — registry-driven rich resource\n * tags (icons, badges, links, tags) with save\n * and restore semantics for the consumer\n *\n * Headless usage:\n * - Call `useActivityFeed({ activities, ... })` directly to drive a\n * completely custom UI against the same grouping/expand state machine.\n * - Call `useActivityResources({ resources, onResourcesChange })` to\n * drive the registry independently.\n *\n * Framework-agnostic:\n * - No router import, no i18n SDK import. Wire actor / resource navigation\n * via callbacks at the call site.\n */\nimport { useMemo, type ReactNode } from 'react';\n\nimport { Text } from '@/components/typography';\nimport { useStrings } from '@/lib/strings';\nimport { useDatesConfig } from '@/lib/ui-provider';\nimport { cn } from '@/lib/utils';\n\nimport {\n defaultActivityEventConfig,\n resolveEventConfig,\n} from './activities.config';\nimport {\n defaultActivitiesStrings,\n} from './activities.strings';\nimport type {\n ActivityAction,\n ActivityFeedProps,\n ActivityItem,\n ActivityRenderRowContext,\n ActivityTone,\n} from './activities.types';\nimport { useActivityFeed } from './hooks/use-activity-feed';\nimport { useActivityResources } from './hooks/use-activity-resources';\nimport {\n ActivityDateLabel,\n ActivityEmptyState,\n ActivityRow,\n} from './partials';\n\nfunction defaultFormatAbsolute(iso: string, locale?: string): string {\n try {\n return new Intl.DateTimeFormat(locale, {\n dateStyle: 'medium',\n timeStyle: 'short',\n }).format(new Date(iso));\n } catch {\n return iso;\n }\n}\n\nfunction resolveTone<TData>(\n activity: ActivityItem<TData>,\n eventTone: ActivityTone,\n): ActivityTone {\n return activity.toneOverride ?? eventTone;\n}\n\nexport function ActivityFeed<TData = unknown>(props: ActivityFeedProps<TData>) {\n const {\n activities = [],\n density = 'default',\n groupByDate = true,\n expandedByDefault = false,\n currentUserId,\n loading = false,\n eventConfig: eventConfigOverride,\n strings: stringsProp,\n slots,\n className,\n locale,\n // accessors\n formatRelativeTime,\n formatAbsoluteTime,\n formatDateGroupLabel,\n getEventLabel: _getEventLabel,\n getSourceLabel,\n actionsForActivity,\n // callbacks\n onActivityClick,\n onActorClick,\n onResourceClick,\n onAction,\n // resources\n resources,\n onResourcesChange,\n } = props;\n\n const strings = useStrings(defaultActivitiesStrings, stringsProp);\n\n const eventConfigMap = useMemo(\n () => ({ ...defaultActivityEventConfig, ...eventConfigOverride }),\n [eventConfigOverride],\n );\n\n const registry = useActivityResources({\n resources,\n onResourcesChange,\n });\n\n const feed = useActivityFeed<TData>({\n activities,\n groupByDate,\n expandedByDefault,\n locale,\n strings,\n formatDateGroupLabel,\n });\n\n const { formatRelativeTime: storeFormatRelative } = useDatesConfig();\n const fmtRelative = formatRelativeTime ?? storeFormatRelative ?? ((iso: string) => iso);\n const fmtAbsolute = formatAbsoluteTime ?? ((iso: string) => defaultFormatAbsolute(iso, locale));\n\n if (loading) {\n return (\n <div className={cn('activities-feed--component', 'px-2 py-4', className)}>\n {slots?.loading ?? (\n <Text type=\"secondary\" align=\"center\">\n {strings.loading}\n </Text>\n )}\n </div>\n );\n }\n\n if (activities.length === 0) {\n return (\n <div className={cn('activities-feed--component', 'px-2 py-2', className)}>\n {slots?.empty ?? <ActivityEmptyState title={strings.empty} />}\n </div>\n );\n }\n\n const totalRendered = feed.groups.reduce((acc, g) => acc + g.items.length, 0);\n let renderedSoFar = 0;\n\n return (\n <div className={cn('activities-feed--component flex flex-col', className)}>\n {!!slots?.header && <div className=\"mb-3\">{slots.header}</div>}\n\n <div className=\"flex flex-col\">\n {feed.groups.map((group, gi) => {\n const isFirstGroup = gi === 0;\n return (\n <div key={`${group.label}-${gi}`} className={cn(isFirstGroup ? '' : 'mt-1')}>\n {slots?.renderDateLabel\n ? slots.renderDateLabel(group.label, isFirstGroup)\n : (\n <ActivityDateLabel\n label={group.label}\n isFirst={isFirstGroup}\n className={isFirstGroup ? '' : 'mb-2'}\n />\n )}\n\n <div className={cn('flex flex-col', !!group.label && 'mt-2')}>\n {group.items.map((keyed, ii) => {\n const activity = keyed.activity;\n const isFirstInGroup = ii === 0;\n const isLast =\n ++renderedSoFar === totalRendered;\n const eventCfg = resolveEventConfig(\n activity.event,\n eventConfigMap,\n );\n const tone = resolveTone(activity, eventCfg.tone);\n const relativeTime = activity.timestamp\n ?? (activity.createdAt\n ? fmtRelative(activity.createdAt)\n : null);\n const absoluteTime = activity.createdAt\n ? fmtAbsolute(activity.createdAt)\n : null;\n const sourceLabel = activity.source\n ? (getSourceLabel?.(activity.source)\n ?? strings.sources[activity.source]\n ?? eventCfg.sourceLabel\n ?? null)\n : eventCfg.sourceLabel ?? null;\n const sourceLabelTrimmed =\n sourceLabel && sourceLabel.trim().length > 0\n ? sourceLabel\n : null;\n const actions: readonly ActivityAction<TData>[] =\n actionsForActivity?.(activity) ?? [];\n\n const ctx: ActivityRenderRowContext<TData> = {\n density,\n isLast,\n isFirstInGroup,\n activity,\n eventConfig: eventCfg,\n tone,\n relativeTime,\n absoluteTime,\n sourceLabel: sourceLabelTrimmed,\n expanded: feed.isExpanded(activity.id),\n toggleExpanded: () =>\n feed.toggleExpanded(activity.id),\n };\n\n const customRow = slots?.renderRow?.(activity, ctx);\n if (customRow !== undefined) {\n return (\n <div key={keyed.key}>{customRow}</div>\n );\n }\n\n const headlineOverride =\n slots?.renderHeadline?.(activity, ctx);\n const markerOverride =\n slots?.renderMarker?.(activity, ctx);\n\n return (\n <ActivityRow<TData>\n key={keyed.key}\n activity={activity}\n density={density}\n eventConfig={eventCfg}\n tone={tone}\n isLast={isLast}\n expanded={ctx.expanded}\n onToggleExpanded={ctx.toggleExpanded}\n relativeTime={relativeTime}\n absoluteTime={absoluteTime}\n sourceLabel={sourceLabelTrimmed}\n youLabel={strings.you}\n showChangesLabel={strings.showChanges}\n hideChangesLabel={strings.hideChanges}\n actionsLabel={strings.actionsLabel}\n currentUserId={currentUserId}\n actions={actions}\n onActivityClick={onActivityClick}\n onActorClick={onActorClick}\n onResourceClick={onResourceClick}\n onAction={onAction}\n getResourceConfig={(ref) =>\n registry.get(ref)\n }\n headlineOverride={\n headlineOverride as ReactNode | undefined\n }\n markerOverride={\n markerOverride as ReactNode | undefined\n }\n />\n );\n })}\n </div>\n </div>\n );\n })}\n </div>\n\n {!!slots?.footer && <div className=\"mt-3\">{slots.footer}</div>}\n </div>\n );\n}\n\nActivityFeed.displayName = 'ActivityFeed';\n","/**\n * ActivityFeedCard — `<ActivityFeed />` wrapped in `SmartCard`.\n *\n * Use this when you want the canonical card chrome (title + description +\n * actions menu + content padding). For embedded surfaces (sidebars, panels)\n * use `<ActivityFeed />` directly.\n */\nimport { Activity } from 'lucide-react';\n\nimport { SmartCard } from '@/components/base/cards';\nimport { useStrings } from '@/lib/strings';\n\nimport { ActivityFeed } from '../activities-feed';\nimport { defaultActivitiesStrings } from '../activities.strings';\nimport type { ActivityFeedCardProps } from '../activities.types';\n\nexport function ActivityFeedCard<TData = unknown>({\n title,\n titleSuffix,\n description,\n padding = 'default',\n composerSlot,\n className,\n strings: stringsProp,\n slots,\n ...feedProps\n}: ActivityFeedCardProps<TData>) {\n const strings = useStrings(defaultActivitiesStrings, stringsProp);\n\n const cardTitle = title ?? strings.title;\n\n return (\n <SmartCard\n icon={<Activity className=\"size-4\" />}\n title={cardTitle}\n titleSuffix={titleSuffix}\n description={description}\n padding={padding}\n className={className}\n >\n <ActivityFeed<TData>\n {...feedProps}\n strings={stringsProp}\n slots={{\n ...slots,\n header: composerSlot ?? slots?.header,\n }}\n />\n </SmartCard>\n );\n}\n\nActivityFeedCard.displayName = 'ActivityFeedCard';\n"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../lib/strings.cjs"),t=require("../../../lib/utils.cjs"),n=require("../../../_shared/button-BMiPFJIb.cjs"),r=require("../../../_shared/typography-GtkgK9QX.cjs"),i=require("../../../_shared/icon-badge-CU6ZkcER.cjs"),a=require("../../../_shared/badge-B8xGFpfM.cjs"),o=require("../../../_shared/textarea-C1TeJ7Vt.cjs"),s=require("../../../_shared/ai-artifact-BRM5cvGv.cjs");let c=require("react"),l=require("react/jsx-runtime"),u=require("lucide-react");var d={placeholder:`Ask anything…`,attachAria:`Attach files`,submitAria:`Send message`,stopAria:`Stop generating`,modelPickerAria:`Choose model`,hint:`Press {{submitKey}} to send · {{newlineKey}} for newline`},f={scrollToBottom:`Jump to latest`,scrollToBottomAria:`Scroll to bottom`},p={header:`In queue`,cancelAria:`Remove from queue`,queuedLabel:`Queued`,runningLabel:`Running`},m={header:`Try`},h={pending:`Thinking…`},g={prompt:d,conversation:f,queue:p,suggestions:m,message:h,emptyTitle:`Start a conversation`,emptyDescription:`Ask a question, share context, or attach a file to get going.`};function _(e,t){return e.replace(/\{\{\s*(\w+)\s*\}\}/g,(e,n)=>{let r=t[n];return r===void 0?e:String(r)})}function v({attachments:e,onRemove:n,onOpen:r,className:i}){return e.length===0?null:(0,l.jsx)(`div`,{className:t.cn(`flex flex-wrap gap-2`,i),children:e.map(e=>(0,l.jsx)(s.h,{name:e.name,meta:e.meta,kind:e.kind,icon:e.icon,thumbnailUrl:e.thumbnailUrl,progress:e.progress,errored:e.errored,onOpen:r?()=>r(e):void 0,onRemove:n?()=>n(e.id):void 0},e.id))})}v.displayName=`AiChatAttachmentsStrip`;function y({threshold:e=80,dependency:t,disableAutoScroll:n=!1}={}){let r=(0,c.useRef)(null),i=(0,c.useRef)(null),[a,o]=(0,c.useState)(!0),s=(0,c.useCallback)((e=`smooth`)=>{i.current?.scrollIntoView({behavior:e,block:`end`})},[]);return(0,c.useEffect)(()=>{let t=r.current;if(!t)return;let n=()=>{o(t.scrollHeight-t.clientHeight-t.scrollTop<=e)};return n(),t.addEventListener(`scroll`,n,{passive:!0}),()=>t.removeEventListener(`scroll`,n)},[e]),(0,c.useEffect)(()=>{if(n||!a)return;let e=window.requestAnimationFrame(()=>s(`auto`));return()=>window.cancelAnimationFrame(e)},[t,n]),{containerRef:r,endRef:i,isAtBottom:a,scrollToBottom:s}}function b({messages:i,renderMessage:a,intro:o,footer:s,empty:c,disableAutoScroll:d,className:p,strings:m}){let h=e.useStrings(f,m),{containerRef:g,endRef:_,isAtBottom:v,scrollToBottom:b}=y({dependency:i.length,disableAutoScroll:d}),x=i.length===0&&!o;return(0,l.jsxs)(`div`,{className:t.cn(`relative flex h-full min-h-0 flex-col`,p),children:[(0,l.jsxs)(`div`,{ref:g,className:`flex-1 overflow-y-auto px-3 py-4 sm:px-4`,children:[!!o&&(0,l.jsx)(`div`,{className:`mb-4`,children:o}),x?c??(0,l.jsx)(`div`,{className:`flex h-full items-center justify-center px-6 py-12`,children:(0,l.jsx)(r.s,{type:`secondary`,children:`No messages yet.`})}):(0,l.jsx)(`ol`,{className:`space-y-4`,children:i.map((e,t)=>(0,l.jsx)(`li`,{children:a(e,{isLast:t===i.length-1,index:t})},e.id))}),!!s&&(0,l.jsx)(`div`,{className:`mt-4`,children:s}),(0,l.jsx)(`div`,{ref:_,"aria-hidden":!0,className:`h-px`})]}),!v&&(0,l.jsx)(`div`,{className:`pointer-events-none absolute bottom-3 left-1/2 -translate-x-1/2`,children:(0,l.jsxs)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`solid`,"aria-label":h.scrollToBottomAria,onClick:()=>b(`smooth`),className:t.cn(`pointer-events-auto rounded-full shadow-md`,`border border-border/60`),children:[(0,l.jsx)(u.ArrowDown,{className:`size-3.5`}),h.scrollToBottom]})})]})}b.displayName=`AiChatConversation`;function x({title:e=`Start a conversation`,description:n,icon:a=u.Sparkles,below:o,className:s}){return(0,l.jsxs)(`div`,{className:t.cn(`flex h-full flex-col items-center justify-center gap-3 px-4 py-10 text-center`,s),children:[(0,l.jsx)(i.t,{icon:a,tone:`primary`,size:`default`,shape:`square`}),(0,l.jsxs)(`div`,{className:`max-w-md space-y-1`,children:[(0,l.jsx)(r.o,{tag:`h4`,children:e}),!!n&&(0,l.jsx)(r.s,{type:`secondary`,children:n})]}),!!o&&(0,l.jsx)(`div`,{className:`mt-4 w-full max-w-2xl`,children:o})]})}x.displayName=`AiChatEmptyState`;function S({message:n,onCopy:r,onRegenerate:i,onAttachmentOpen:a,className:o,strings:c}){let u=e.useStrings(h,c),d=[],f=[];for(let e of n.parts)e.type===`text`?d.push(e):f.push(e);let p=d.map(e=>e.type===`text`?e.plain??w(e.content):``).filter(Boolean).join(`
2
- `)||void 0,m=n.pending?(0,l.jsx)(s.y,{children:u.pending}):d.length===0&&f.length>0?null:(0,l.jsx)(`div`,{className:`space-y-2`,children:d.map((e,t)=>e.type===`text`?(0,l.jsx)(`div`,{className:`whitespace-pre-wrap`,children:e.content},t):null)});return(0,l.jsxs)(`div`,{className:t.cn(`space-y-2`,o),children:[(m!==null||n.pending)&&(0,l.jsx)(s.S,{role:n.role,avatar:n.avatar,authorName:n.authorName,timestamp:n.timestamp,plainText:p,loading:n.loading,onCopy:p?r??(()=>void 0):void 0,onRegenerate:i,children:m}),f.length>0&&(0,l.jsx)(`div`,{className:t.cn(`space-y-2`,n.role===`user`?`pr-9 sm:pl-12`:`pl-9 sm:pr-12`),children:f.map((e,t)=>(0,l.jsx)(C,{part:e,onAttachmentOpen:a},t))}),!!n.trailing&&(0,l.jsx)(`div`,{className:t.cn(n.role===`user`?`pr-9 sm:pl-12`:`pl-9 sm:pr-12`),children:n.trailing})]})}S.displayName=`AiChatMessage`;function C({part:e,onAttachmentOpen:t}){switch(e.type){case`text`:return(0,l.jsx)(r.s,{children:e.content});case`reasoning`:return(0,l.jsx)(s.s,{streaming:e.streaming,durationSeconds:e.durationSeconds,children:e.content});case`chain-of-thought`:return(0,l.jsx)(s.a,{steps:e.steps,streaming:e.streaming});case`tool`:return(0,l.jsx)(s.b,{name:e.name,status:e.status,icon:e.icon,args:e.args,result:e.result,error:e.error,durationMs:e.durationMs,defaultExpanded:e.defaultExpanded});case`code`:return(0,l.jsx)(s._,{code:e.code,language:e.language,filename:e.filename,showLineNumbers:e.showLineNumbers,highlightLines:e.highlightLines});case`attachments`:return(0,l.jsx)(v,{attachments:e.items,onOpen:t?e=>t(e.id):void 0});case`sources`:return(0,l.jsx)(s.l,{sources:e.items,variant:e.variant,defaultExpanded:e.defaultExpanded});case`task`:return(0,l.jsx)(s.r,{task:e.task});case`artifact`:return(0,l.jsx)(s.t,{title:e.title,subtitle:e.subtitle,icon:e.icon,copyText:e.copyText,actions:e.actions,onOpen:e.onOpen,onDownload:e.onDownload,children:e.body});case`confirmation`:return(0,l.jsx)(s.d,{title:e.title,description:e.description,tone:e.tone,status:e.status,details:e.details,onApprove:e.onApprove,onReject:e.onReject});case`custom`:return(0,l.jsx)(l.Fragment,{children:e.render()});default:return null}}function w(e){return typeof e==`string`||typeof e==`number`?String(e):Array.isArray(e)?e.map(w).join(``):``}function T({value:i,onChange:a,onSubmit:s,onStop:f,streaming:p=!1,disabled:m=!1,attachments:h=[],onRemoveAttachment:g,onAttach:y,showAttach:b,leadingActions:x,trailingActions:S,hideHint:C=!1,minRows:w=1,maxRows:T=8,autoFocus:E=!1,className:D,strings:O}){let k=e.useStrings(d,O),A=(0,c.useRef)(null),j=!p&&!m&&(i.trim().length>0||h.length>0),M=(0,c.useCallback)(()=>{j&&s?.({text:i,attachments:h})},[j,s,i,h]),N=(0,c.useCallback)(e=>{e.key===`Enter`&&!e.shiftKey&&!e.nativeEvent.isComposing&&(e.preventDefault(),M())},[M]),P=b??!!y,F=typeof navigator<`u`&&navigator.platform?.toLowerCase().includes(`mac`)?`⌘↩`:`↩`;return(0,l.jsxs)(`div`,{className:t.cn(`rounded-xl border border-border bg-card transition-colors duration-150`,`focus-within:border-foreground/20 focus-within:ring-2 focus-within:ring-ring/30`,m&&`opacity-60 pointer-events-none`,D),children:[h.length>0&&(0,l.jsx)(`div`,{className:`border-b border-border/60 p-2`,children:(0,l.jsx)(v,{attachments:h,onRemove:g})}),(0,l.jsx)(o.t,{ref:A,value:i,onChange:e=>a(e.target.value),onKeyDown:N,placeholder:k.placeholder,autoResize:!0,minRows:w,maxRows:T,autoFocus:E,disabled:m,className:t.cn(`!border-0 !bg-transparent !shadow-none focus-visible:!ring-0 resize-none px-3 py-2.5`)}),(0,l.jsxs)(`div`,{className:`flex items-center gap-1 border-t border-border/60 px-2 py-1.5`,children:[x,P&&(0,l.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`icon-small`,"aria-label":k.attachAria,onClick:y,disabled:m,children:(0,l.jsx)(u.Paperclip,{className:`size-4`})}),(0,l.jsxs)(`div`,{className:`ml-auto flex items-center gap-1`,children:[S,p?(0,l.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`solid`,size:`icon-small`,"aria-label":k.stopAria,onClick:f,children:(0,l.jsx)(u.Square,{className:`size-3.5 fill-current`})}):(0,l.jsx)(n.t,{type:`button`,variant:`primary`,buttonStyle:`solid`,size:`icon-small`,"aria-label":k.submitAria,onClick:M,disabled:!j,children:(0,l.jsx)(u.ArrowUp,{className:`size-4`})})]})]}),!C&&(0,l.jsx)(`div`,{className:`px-3 pb-2`,children:(0,l.jsx)(r.s,{size:`xxs`,type:`discrete`,children:_(k.hint,{submitKey:F,newlineKey:`⇧↩`})})})]})}T.displayName=`AiChatPromptInput`;function E({items:i,hideHeader:o=!1,onCancel:s,className:c,strings:d}){let f=e.useStrings(p,d);return i.length===0?null:(0,l.jsxs)(`div`,{className:t.cn(`rounded-lg border border-border/60 bg-muted/20 px-2.5 py-2`,c),children:[!o&&(0,l.jsxs)(r.s,{size:`xxs`,type:`secondary`,weight:`medium`,className:`mb-1.5 px-1 uppercase tracking-wider`,children:[f.header,` · `,i.length]}),(0,l.jsx)(`ul`,{className:`space-y-1`,children:i.map(e=>{let t=e.status??`queued`;return(0,l.jsxs)(`li`,{className:`flex items-center gap-2 rounded-md bg-card px-2 py-1.5`,children:[t===`running`?(0,l.jsx)(u.Loader2,{className:`size-3.5 shrink-0 animate-spin text-primary`}):(0,l.jsx)(`span`,{"aria-hidden":!0,className:`size-2 shrink-0 rounded-full bg-muted-foreground/50`}),(0,l.jsx)(r.s,{size:`xs`,className:`flex-1 truncate`,children:e.label}),(0,l.jsx)(a.t,{variant:t===`running`?`primary`:`secondary`,children:t===`running`?f.runningLabel:f.queuedLabel}),(!!e.onCancel||!!s)&&(0,l.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`icon-small`,"aria-label":f.cancelAria,onClick:()=>{e.onCancel?.(),s?.(e.id)},children:(0,l.jsx)(u.X,{className:`size-3.5`})})]},e.id)})})]})}E.displayName=`AiChatQueue`;function D({suggestions:i,onPick:a,hideHeader:o=!1,className:s,strings:c}){let d=e.useStrings(m,c);return i.length===0?null:(0,l.jsxs)(`div`,{className:t.cn(`flex items-center gap-2`,s),children:[!o&&(0,l.jsxs)(`div`,{className:`inline-flex shrink-0 items-center gap-1.5`,children:[(0,l.jsx)(u.Sparkles,{className:`size-3.5 text-muted-foreground`}),(0,l.jsx)(r.s,{size:`xxs`,type:`secondary`,weight:`medium`,className:`uppercase tracking-wider`,children:d.header})]}),(0,l.jsx)(`div`,{className:`-mx-1 flex flex-1 items-center gap-1.5 overflow-x-auto px-1 py-0.5 [scrollbar-width:none] [&::-webkit-scrollbar]:hidden`,children:i.map(e=>{let i=e.icon;return(0,l.jsxs)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`small`,onClick:()=>a?.(e),className:t.cn(`h-auto shrink-0 gap-1.5 rounded-full border border-border/60 bg-card px-2.5 py-1`,`transition-[border-color,background] duration-150`,`hover:border-foreground/20 hover:bg-muted/40`),children:[!!i&&(0,l.jsx)(i,{className:`size-3 text-muted-foreground`}),(0,l.jsx)(r.s,{tag:`span`,size:`xs`,weight:`medium`,children:e.label})]},e.id)})})]})}D.displayName=`AiChatSuggestionsRow`;function O({messages:n,inputValue:i,onInputChange:a,onSubmit:o,onStop:u,streaming:d=!1,disabled:f=!1,attachments:p=[],onRemoveAttachment:m,onAttach:h,showAttach:_,agent:v,headerActions:y,queue:C=[],onCancelQueueItem:w,suggestions:O=[],onPickSuggestion:k,onMessageCopy:A,onMessageRegenerate:j,onAttachmentOpen:M,disableAutoScroll:N,slots:P,strings:F,className:I}){let L=e.useStrings(g,F),[,R]=(0,c.useState)(0),z=(0,c.useCallback)((e,t)=>P?.renderMessage?P.renderMessage(e,t):(0,l.jsx)(S,{className:`ai-chat-message--component`,message:e,strings:L.message,onCopy:A?()=>A(e):void 0,onRegenerate:j?()=>j(e):void 0,onAttachmentOpen:M?t=>M(e.id,t):void 0}),[M,A,j,P,L.message]),B=P?.header??(v?(0,l.jsxs)(`div`,{className:`flex items-center gap-3 border-b border-border bg-card px-3 py-2 sm:px-4`,children:[(0,l.jsx)(s.p,{name:v.name,icon:v.icon,avatar:v.avatar,subtitle:v.subtitle,tone:v.tone,status:v.status,variant:`inline`}),!!y&&(0,l.jsx)(`div`,{className:`ml-auto flex items-center gap-1`,children:y})]}):null),V=P?.empty??(n.length===0?(0,l.jsx)(x,{title:L.emptyTitle,description:L.emptyDescription}):null),H=P?.queue??(C.length>0?(0,l.jsx)(E,{items:C,onCancel:w,strings:L.queue}):null),U=P?.suggestions??(O.length>0?(0,l.jsx)(D,{suggestions:O,onPick:k,strings:L.suggestions}):null),W=P?.input??(0,l.jsx)(T,{value:i,onChange:a,onSubmit:e=>{o?.(e),R(e=>e+1)},onStop:u,streaming:d,disabled:f,attachments:p,onRemoveAttachment:m,onAttach:h,showAttach:_,strings:L.prompt});return(0,l.jsxs)(`div`,{className:t.cn(`ai-chat--component flex h-full flex-col overflow-hidden rounded-xl border border-border bg-background`,I),children:[B,(0,l.jsx)(b,{messages:n,renderMessage:z,intro:P?.intro,footer:P?.belowMessages,empty:V,disableAutoScroll:N,strings:L.conversation}),(H||U||W)&&(0,l.jsxs)(`div`,{className:`border-t border-border bg-card/60`,children:[H&&(0,l.jsx)(`div`,{className:`px-3 pb-2 pt-3 sm:px-4`,children:H}),U&&(0,l.jsx)(`div`,{className:t.cn(`px-3 sm:px-4`,!H&&`pt-3`,`pb-2`),children:U}),W&&(0,l.jsx)(`div`,{className:`px-3 pb-3 pt-2 sm:px-4 sm:pb-4`,children:W})]}),f&&(0,l.jsx)(r.s,{className:`sr-only`,"aria-live":`polite`,children:`Chat is disabled`})]})}O.displayName=`AiChat`,exports.AiChat=O,exports.AiChatAttachmentsStrip=v,exports.AiChatConversation=b,exports.AiChatEmptyState=x,exports.AiChatMessageView=S,exports.AiChatPromptInput=T,exports.AiChatQueue=E,exports.AiChatSuggestionsRow=D,exports.defaultAiChatConversationStrings=f,exports.defaultAiChatMessageStrings=h,exports.defaultAiChatPromptInputStrings=d,exports.defaultAiChatQueueStrings=p,exports.defaultAiChatStrings=g,exports.defaultAiChatSuggestionsStrings=m,exports.interpolateString=_,exports.useAiChatScroll=y;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../lib/strings.cjs"),t=require("../../../lib/utils.cjs"),n=require("../../../_shared/button-BMiPFJIb.cjs"),r=require("../../../_shared/typography-pzCKaFOc.cjs"),i=require("../../../_shared/icon-badge-CU6ZkcER.cjs"),a=require("../../../_shared/badge-DvUA9Pr2.cjs"),o=require("../../../_shared/textarea-B4zbbqff.cjs"),s=require("../../../_shared/ai-artifact-R4bxz5Iq.cjs");let c=require("react"),l=require("react/jsx-runtime"),u=require("lucide-react");var d={placeholder:`Ask anything…`,attachAria:`Attach files`,submitAria:`Send message`,stopAria:`Stop generating`,modelPickerAria:`Choose model`,hint:`Press {{submitKey}} to send · {{newlineKey}} for newline`},f={scrollToBottom:`Jump to latest`,scrollToBottomAria:`Scroll to bottom`},p={header:`In queue`,cancelAria:`Remove from queue`,queuedLabel:`Queued`,runningLabel:`Running`},m={header:`Try`},h={pending:`Thinking…`},g={prompt:d,conversation:f,queue:p,suggestions:m,message:h,emptyTitle:`Start a conversation`,emptyDescription:`Ask a question, share context, or attach a file to get going.`};function _(e,t){return e.replace(/\{\{\s*(\w+)\s*\}\}/g,(e,n)=>{let r=t[n];return r===void 0?e:String(r)})}function v({attachments:e,onRemove:n,onOpen:r,className:i}){return e.length===0?null:(0,l.jsx)(`div`,{className:t.cn(`flex flex-wrap gap-2`,i),children:e.map(e=>(0,l.jsx)(s.h,{name:e.name,meta:e.meta,kind:e.kind,icon:e.icon,thumbnailUrl:e.thumbnailUrl,progress:e.progress,errored:e.errored,onOpen:r?()=>r(e):void 0,onRemove:n?()=>n(e.id):void 0},e.id))})}v.displayName=`AiChatAttachmentsStrip`;function y({threshold:e=80,dependency:t,disableAutoScroll:n=!1}={}){let r=(0,c.useRef)(null),i=(0,c.useRef)(null),[a,o]=(0,c.useState)(!0),s=(0,c.useCallback)((e=`smooth`)=>{i.current?.scrollIntoView({behavior:e,block:`end`})},[]);return(0,c.useEffect)(()=>{let t=r.current;if(!t)return;let n=()=>{o(t.scrollHeight-t.clientHeight-t.scrollTop<=e)};return n(),t.addEventListener(`scroll`,n,{passive:!0}),()=>t.removeEventListener(`scroll`,n)},[e]),(0,c.useEffect)(()=>{if(n||!a)return;let e=window.requestAnimationFrame(()=>s(`auto`));return()=>window.cancelAnimationFrame(e)},[t,n]),{containerRef:r,endRef:i,isAtBottom:a,scrollToBottom:s}}function b({messages:i,renderMessage:a,intro:o,footer:s,empty:c,disableAutoScroll:d,className:p,strings:m}){let h=e.useStrings(f,m),{containerRef:g,endRef:_,isAtBottom:v,scrollToBottom:b}=y({dependency:i.length,disableAutoScroll:d}),x=i.length===0&&!o;return(0,l.jsxs)(`div`,{className:t.cn(`relative flex h-full min-h-0 flex-col`,p),children:[(0,l.jsxs)(`div`,{ref:g,className:`flex-1 overflow-y-auto px-3 py-4 sm:px-4`,children:[!!o&&(0,l.jsx)(`div`,{className:`mb-4`,children:o}),x?c??(0,l.jsx)(`div`,{className:`flex h-full items-center justify-center px-6 py-12`,children:(0,l.jsx)(r.s,{type:`secondary`,children:`No messages yet.`})}):(0,l.jsx)(`ol`,{className:`space-y-4`,children:i.map((e,t)=>(0,l.jsx)(`li`,{children:a(e,{isLast:t===i.length-1,index:t})},e.id))}),!!s&&(0,l.jsx)(`div`,{className:`mt-4`,children:s}),(0,l.jsx)(`div`,{ref:_,"aria-hidden":!0,className:`h-px`})]}),!v&&(0,l.jsx)(`div`,{className:`pointer-events-none absolute bottom-3 left-1/2 -translate-x-1/2`,children:(0,l.jsxs)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`solid`,"aria-label":h.scrollToBottomAria,onClick:()=>b(`smooth`),className:t.cn(`pointer-events-auto rounded-full shadow-md`,`border border-border/60`),children:[(0,l.jsx)(u.ArrowDown,{className:`size-3.5`}),h.scrollToBottom]})})]})}b.displayName=`AiChatConversation`;function x({title:e=`Start a conversation`,description:n,icon:a=u.Sparkles,below:o,className:s}){return(0,l.jsxs)(`div`,{className:t.cn(`flex h-full flex-col items-center justify-center gap-3 px-4 py-10 text-center`,s),children:[(0,l.jsx)(i.t,{icon:a,tone:`primary`,size:`default`,shape:`square`}),(0,l.jsxs)(`div`,{className:`max-w-md space-y-1`,children:[(0,l.jsx)(r.o,{tag:`h4`,children:e}),!!n&&(0,l.jsx)(r.s,{type:`secondary`,children:n})]}),!!o&&(0,l.jsx)(`div`,{className:`mt-4 w-full max-w-2xl`,children:o})]})}x.displayName=`AiChatEmptyState`;function S({message:n,onCopy:r,onRegenerate:i,onAttachmentOpen:a,className:o,strings:c}){let u=e.useStrings(h,c),d=[],f=[];for(let e of n.parts)e.type===`text`?d.push(e):f.push(e);let p=d.map(e=>e.type===`text`?e.plain??w(e.content):``).filter(Boolean).join(`
2
+ `)||void 0,m=n.pending?(0,l.jsx)(s.y,{children:u.pending}):d.length===0&&f.length>0?null:(0,l.jsx)(`div`,{className:`space-y-2`,children:d.map((e,t)=>e.type===`text`?(0,l.jsx)(`div`,{className:`whitespace-pre-wrap`,children:e.content},t):null)});return(0,l.jsxs)(`div`,{className:t.cn(`space-y-2`,o),children:[(m!==null||n.pending)&&(0,l.jsx)(s.S,{role:n.role,avatar:n.avatar,authorName:n.authorName,timestamp:n.timestamp,plainText:p,loading:n.loading,onCopy:p?r??(()=>void 0):void 0,onRegenerate:i,children:m}),f.length>0&&(0,l.jsx)(`div`,{className:t.cn(`space-y-2`,n.role===`user`?`pr-9 sm:pl-12`:`pl-9 sm:pr-12`),children:f.map((e,t)=>(0,l.jsx)(C,{part:e,onAttachmentOpen:a},t))}),!!n.trailing&&(0,l.jsx)(`div`,{className:t.cn(n.role===`user`?`pr-9 sm:pl-12`:`pl-9 sm:pr-12`),children:n.trailing})]})}S.displayName=`AiChatMessage`;function C({part:e,onAttachmentOpen:t}){switch(e.type){case`text`:return(0,l.jsx)(r.s,{children:e.content});case`reasoning`:return(0,l.jsx)(s.s,{streaming:e.streaming,durationSeconds:e.durationSeconds,children:e.content});case`chain-of-thought`:return(0,l.jsx)(s.a,{steps:e.steps,streaming:e.streaming});case`tool`:return(0,l.jsx)(s.b,{name:e.name,status:e.status,icon:e.icon,args:e.args,result:e.result,error:e.error,durationMs:e.durationMs,defaultExpanded:e.defaultExpanded});case`code`:return(0,l.jsx)(s._,{code:e.code,language:e.language,filename:e.filename,showLineNumbers:e.showLineNumbers,highlightLines:e.highlightLines});case`attachments`:return(0,l.jsx)(v,{attachments:e.items,onOpen:t?e=>t(e.id):void 0});case`sources`:return(0,l.jsx)(s.l,{sources:e.items,variant:e.variant,defaultExpanded:e.defaultExpanded});case`task`:return(0,l.jsx)(s.r,{task:e.task});case`artifact`:return(0,l.jsx)(s.t,{title:e.title,subtitle:e.subtitle,icon:e.icon,copyText:e.copyText,actions:e.actions,onOpen:e.onOpen,onDownload:e.onDownload,children:e.body});case`confirmation`:return(0,l.jsx)(s.d,{title:e.title,description:e.description,tone:e.tone,status:e.status,details:e.details,onApprove:e.onApprove,onReject:e.onReject});case`custom`:return(0,l.jsx)(l.Fragment,{children:e.render()});default:return null}}function w(e){return typeof e==`string`||typeof e==`number`?String(e):Array.isArray(e)?e.map(w).join(``):``}function T({value:i,onChange:a,onSubmit:s,onStop:f,streaming:p=!1,disabled:m=!1,attachments:h=[],onRemoveAttachment:g,onAttach:y,showAttach:b,leadingActions:x,trailingActions:S,hideHint:C=!1,minRows:w=1,maxRows:T=8,autoFocus:E=!1,className:D,strings:O}){let k=e.useStrings(d,O),A=(0,c.useRef)(null),j=!p&&!m&&(i.trim().length>0||h.length>0),M=(0,c.useCallback)(()=>{j&&s?.({text:i,attachments:h})},[j,s,i,h]),N=(0,c.useCallback)(e=>{e.key===`Enter`&&!e.shiftKey&&!e.nativeEvent.isComposing&&(e.preventDefault(),M())},[M]),P=b??!!y,F=typeof navigator<`u`&&navigator.platform?.toLowerCase().includes(`mac`)?`⌘↩`:`↩`;return(0,l.jsxs)(`div`,{className:t.cn(`rounded-xl border border-border bg-card transition-colors duration-150`,`focus-within:border-foreground/20 focus-within:ring-2 focus-within:ring-ring/30`,m&&`opacity-60 pointer-events-none`,D),children:[h.length>0&&(0,l.jsx)(`div`,{className:`border-b border-border/60 p-2`,children:(0,l.jsx)(v,{attachments:h,onRemove:g})}),(0,l.jsx)(o.t,{ref:A,value:i,onChange:e=>a(e.target.value),onKeyDown:N,placeholder:k.placeholder,autoResize:!0,minRows:w,maxRows:T,autoFocus:E,disabled:m,className:t.cn(`!border-0 !bg-transparent !shadow-none focus-visible:!ring-0 resize-none px-3 py-2.5`)}),(0,l.jsxs)(`div`,{className:`flex items-center gap-1 border-t border-border/60 px-2 py-1.5`,children:[x,P&&(0,l.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`icon-small`,"aria-label":k.attachAria,onClick:y,disabled:m,children:(0,l.jsx)(u.Paperclip,{className:`size-4`})}),(0,l.jsxs)(`div`,{className:`ml-auto flex items-center gap-1`,children:[S,p?(0,l.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`solid`,size:`icon-small`,"aria-label":k.stopAria,onClick:f,children:(0,l.jsx)(u.Square,{className:`size-3.5 fill-current`})}):(0,l.jsx)(n.t,{type:`button`,variant:`primary`,buttonStyle:`solid`,size:`icon-small`,"aria-label":k.submitAria,onClick:M,disabled:!j,children:(0,l.jsx)(u.ArrowUp,{className:`size-4`})})]})]}),!C&&(0,l.jsx)(`div`,{className:`px-3 pb-2`,children:(0,l.jsx)(r.s,{size:`xs`,type:`discrete`,children:_(k.hint,{submitKey:F,newlineKey:`⇧↩`})})})]})}T.displayName=`AiChatPromptInput`;function E({items:i,hideHeader:o=!1,onCancel:s,className:c,strings:d}){let f=e.useStrings(p,d);return i.length===0?null:(0,l.jsxs)(`div`,{className:t.cn(`rounded-lg border border-border/60 bg-muted/20 px-2.5 py-2`,c),children:[!o&&(0,l.jsxs)(r.s,{size:`xs`,type:`secondary`,weight:`medium`,className:`mb-1.5 px-1 uppercase tracking-wider`,children:[f.header,` · `,i.length]}),(0,l.jsx)(`ul`,{className:`space-y-1`,children:i.map(e=>{let t=e.status??`queued`;return(0,l.jsxs)(`li`,{className:`flex items-center gap-2 rounded-md bg-card px-2 py-1.5`,children:[t===`running`?(0,l.jsx)(u.Loader2,{className:`size-3.5 shrink-0 animate-spin text-primary`}):(0,l.jsx)(`span`,{"aria-hidden":!0,className:`size-2 shrink-0 rounded-full bg-muted-foreground/50`}),(0,l.jsx)(r.s,{size:`xs`,className:`flex-1 truncate`,children:e.label}),(0,l.jsx)(a.t,{variant:t===`running`?`primary`:`secondary`,children:t===`running`?f.runningLabel:f.queuedLabel}),(!!e.onCancel||!!s)&&(0,l.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`icon-small`,"aria-label":f.cancelAria,onClick:()=>{e.onCancel?.(),s?.(e.id)},children:(0,l.jsx)(u.X,{className:`size-3.5`})})]},e.id)})})]})}E.displayName=`AiChatQueue`;function D({suggestions:i,onPick:a,hideHeader:o=!1,className:s,strings:c}){let d=e.useStrings(m,c);return i.length===0?null:(0,l.jsxs)(`div`,{className:t.cn(`flex items-center gap-2`,s),children:[!o&&(0,l.jsxs)(`div`,{className:`inline-flex shrink-0 items-center gap-1.5`,children:[(0,l.jsx)(u.Sparkles,{className:`size-3.5 text-muted-foreground`}),(0,l.jsx)(r.s,{size:`xs`,type:`secondary`,weight:`medium`,className:`uppercase tracking-wider`,children:d.header})]}),(0,l.jsx)(`div`,{className:`-mx-1 flex flex-1 items-center gap-1.5 overflow-x-auto px-1 py-0.5 [scrollbar-width:none] [&::-webkit-scrollbar]:hidden`,children:i.map(e=>{let i=e.icon;return(0,l.jsxs)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`small`,onClick:()=>a?.(e),className:t.cn(`h-auto shrink-0 gap-1.5 rounded-full border border-border/60 bg-card px-2.5 py-1`,`transition-[border-color,background] duration-150`,`hover:border-foreground/20 hover:bg-muted/40`),children:[!!i&&(0,l.jsx)(i,{className:`size-3 text-muted-foreground`}),(0,l.jsx)(r.s,{tag:`span`,size:`xs`,weight:`medium`,children:e.label})]},e.id)})})]})}D.displayName=`AiChatSuggestionsRow`;function O({messages:n,inputValue:i,onInputChange:a,onSubmit:o,onStop:u,streaming:d=!1,disabled:f=!1,attachments:p=[],onRemoveAttachment:m,onAttach:h,showAttach:_,agent:v,headerActions:y,queue:C=[],onCancelQueueItem:w,suggestions:O=[],onPickSuggestion:k,onMessageCopy:A,onMessageRegenerate:j,onAttachmentOpen:M,disableAutoScroll:N,slots:P,strings:F,className:I}){let L=e.useStrings(g,F),[,R]=(0,c.useState)(0),z=(0,c.useCallback)((e,t)=>P?.renderMessage?P.renderMessage(e,t):(0,l.jsx)(S,{className:`ai-chat-message--component`,message:e,strings:L.message,onCopy:A?()=>A(e):void 0,onRegenerate:j?()=>j(e):void 0,onAttachmentOpen:M?t=>M(e.id,t):void 0}),[M,A,j,P,L.message]),B=P?.header??(v?(0,l.jsxs)(`div`,{className:`flex items-center gap-3 border-b border-border bg-card px-3 py-2 sm:px-4`,children:[(0,l.jsx)(s.p,{name:v.name,icon:v.icon,avatar:v.avatar,subtitle:v.subtitle,tone:v.tone,status:v.status,variant:`inline`}),!!y&&(0,l.jsx)(`div`,{className:`ml-auto flex items-center gap-1`,children:y})]}):null),V=P?.empty??(n.length===0?(0,l.jsx)(x,{title:L.emptyTitle,description:L.emptyDescription}):null),H=P?.queue??(C.length>0?(0,l.jsx)(E,{items:C,onCancel:w,strings:L.queue}):null),U=P?.suggestions??(O.length>0?(0,l.jsx)(D,{suggestions:O,onPick:k,strings:L.suggestions}):null),W=P?.input??(0,l.jsx)(T,{value:i,onChange:a,onSubmit:e=>{o?.(e),R(e=>e+1)},onStop:u,streaming:d,disabled:f,attachments:p,onRemoveAttachment:m,onAttach:h,showAttach:_,strings:L.prompt});return(0,l.jsxs)(`div`,{className:t.cn(`ai-chat--component flex h-full flex-col overflow-hidden rounded-xl border border-border bg-background`,I),children:[B,(0,l.jsx)(b,{messages:n,renderMessage:z,intro:P?.intro,footer:P?.belowMessages,empty:V,disableAutoScroll:N,strings:L.conversation}),(H||U||W)&&(0,l.jsxs)(`div`,{className:`border-t border-border bg-card/60`,children:[H&&(0,l.jsx)(`div`,{className:`px-3 pb-2 pt-3 sm:px-4`,children:H}),U&&(0,l.jsx)(`div`,{className:t.cn(`px-3 sm:px-4`,!H&&`pt-3`,`pb-2`),children:U}),W&&(0,l.jsx)(`div`,{className:`px-3 pb-3 pt-2 sm:px-4 sm:pb-4`,children:W})]}),f&&(0,l.jsx)(r.s,{className:`sr-only`,"aria-live":`polite`,children:`Chat is disabled`})]})}O.displayName=`AiChat`,exports.AiChat=O,exports.AiChatAttachmentsStrip=v,exports.AiChatConversation=b,exports.AiChatEmptyState=x,exports.AiChatMessageView=S,exports.AiChatPromptInput=T,exports.AiChatQueue=E,exports.AiChatSuggestionsRow=D,exports.defaultAiChatConversationStrings=f,exports.defaultAiChatMessageStrings=h,exports.defaultAiChatPromptInputStrings=d,exports.defaultAiChatQueueStrings=p,exports.defaultAiChatStrings=g,exports.defaultAiChatSuggestionsStrings=m,exports.interpolateString=_,exports.useAiChatScroll=y;
3
3
  //# sourceMappingURL=index.cjs.map