admin-ui-starter-kit 0.1.0 → 0.1.2
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.
- package/.agents/skills/component-library-rules/SKILL.md +24 -0
- package/.agents/skills/component-library-rules/references/components/base__metadata-list.md +2 -2
- package/.agents/skills/component-library-rules/references/import-paths.md +27 -0
- package/AGENTS.md +8 -3
- package/INTEGRATION.md +33 -2
- package/PUBLISHING.md +3 -1
- package/README.md +33 -6
- package/dist/_shared/accordion-CztqyaIN.js +130 -0
- package/dist/_shared/accordion-CztqyaIN.js.map +1 -0
- package/dist/_shared/accordion-D5uTCLCB.cjs +2 -0
- package/dist/_shared/accordion-D5uTCLCB.cjs.map +1 -0
- package/dist/_shared/action-menu-Yrj6VzFS.js +96 -0
- package/dist/_shared/action-menu-Yrj6VzFS.js.map +1 -0
- package/dist/_shared/action-menu-eVP8GGlv.cjs +2 -0
- package/dist/_shared/action-menu-eVP8GGlv.cjs.map +1 -0
- package/dist/_shared/ai-artifact-DaHXJTKg.cjs +3 -0
- package/dist/_shared/ai-artifact-DaHXJTKg.cjs.map +1 -0
- package/dist/_shared/ai-artifact-DyLn3JAs.js +1068 -0
- package/dist/_shared/ai-artifact-DyLn3JAs.js.map +1 -0
- package/dist/_shared/alert-BVw4Mq6H.js +48 -0
- package/dist/_shared/alert-BVw4Mq6H.js.map +1 -0
- package/dist/_shared/alert-DXSlR9ja.cjs +2 -0
- package/dist/_shared/alert-DXSlR9ja.cjs.map +1 -0
- package/dist/_shared/avatar-CpBz9pTv.js +52 -0
- package/dist/_shared/avatar-CpBz9pTv.js.map +1 -0
- package/dist/_shared/avatar-dg20YFFs.cjs +2 -0
- package/dist/_shared/avatar-dg20YFFs.cjs.map +1 -0
- package/dist/_shared/badge-BVCh_hfL.js +108 -0
- package/dist/_shared/badge-BVCh_hfL.js.map +1 -0
- package/dist/_shared/badge-C49SSz-6.cjs +2 -0
- package/dist/_shared/badge-C49SSz-6.cjs.map +1 -0
- package/dist/_shared/breadcrumbs-Bo7j5Rhv.cjs +2 -0
- package/dist/_shared/breadcrumbs-Bo7j5Rhv.cjs.map +1 -0
- package/dist/_shared/breadcrumbs-Dc93fqqE.js +111 -0
- package/dist/_shared/breadcrumbs-Dc93fqqE.js.map +1 -0
- package/dist/_shared/button-2xglT7yf.cjs +2 -0
- package/dist/_shared/button-2xglT7yf.cjs.map +1 -0
- package/dist/_shared/button-ChCkwoOD.js +176 -0
- package/dist/_shared/button-ChCkwoOD.js.map +1 -0
- package/dist/_shared/button-D0nF99a9.cjs +2 -0
- package/dist/_shared/button-D0nF99a9.cjs.map +1 -0
- package/dist/_shared/button-DBR4QI9E.js +46 -0
- package/dist/_shared/button-DBR4QI9E.js.map +1 -0
- package/dist/_shared/buttons-Bcnt1md_.js +143 -0
- package/dist/_shared/buttons-Bcnt1md_.js.map +1 -0
- package/dist/_shared/buttons-km9xqXJv.cjs +2 -0
- package/dist/_shared/buttons-km9xqXJv.cjs.map +1 -0
- package/dist/_shared/card-radio-group-BGH93O5-.js +158 -0
- package/dist/_shared/card-radio-group-BGH93O5-.js.map +1 -0
- package/dist/_shared/card-radio-group-Vq741uhL.cjs +2 -0
- package/dist/_shared/card-radio-group-Vq741uhL.cjs.map +1 -0
- package/dist/_shared/combobox-BgXAxjU2.js +746 -0
- package/dist/_shared/combobox-BgXAxjU2.js.map +1 -0
- package/dist/_shared/combobox-DuIyh3xJ.cjs +2 -0
- package/dist/_shared/combobox-DuIyh3xJ.cjs.map +1 -0
- package/dist/_shared/command-BbiijN61.js +39 -0
- package/dist/_shared/command-BbiijN61.js.map +1 -0
- package/dist/_shared/command-D7zTvyBJ.cjs +2 -0
- package/dist/_shared/command-D7zTvyBJ.cjs.map +1 -0
- package/dist/_shared/command-DGNtTI-V.cjs +2 -0
- package/dist/_shared/command-DGNtTI-V.cjs.map +1 -0
- package/dist/_shared/command-jKbwFRtS.js +123 -0
- package/dist/_shared/command-jKbwFRtS.js.map +1 -0
- package/dist/_shared/comments-CNUsdwGW.cjs +2 -0
- package/dist/_shared/comments-CNUsdwGW.cjs.map +1 -0
- package/dist/_shared/comments-CvmS7zG3.js +945 -0
- package/dist/_shared/comments-CvmS7zG3.js.map +1 -0
- package/dist/_shared/containers-BFDv7cCV.cjs +2 -0
- package/dist/_shared/containers-BFDv7cCV.cjs.map +1 -0
- package/dist/_shared/containers-C1-A_2PT.js +19 -0
- package/dist/_shared/containers-C1-A_2PT.js.map +1 -0
- package/dist/_shared/content-container-CwqFnaI0.cjs +2 -0
- package/dist/_shared/content-container-CwqFnaI0.cjs.map +1 -0
- package/dist/_shared/content-container-D_3JGBSc.js +33 -0
- package/dist/_shared/content-container-D_3JGBSc.js.map +1 -0
- package/dist/_shared/copyable-CHhCGMfW.js +38 -0
- package/dist/_shared/copyable-CHhCGMfW.js.map +1 -0
- package/dist/_shared/copyable-ndaiocYq.cjs +2 -0
- package/dist/_shared/copyable-ndaiocYq.cjs.map +1 -0
- package/dist/_shared/date-picker-B8O_qbik.js +1353 -0
- package/dist/_shared/date-picker-B8O_qbik.js.map +1 -0
- package/dist/_shared/date-picker-BnOjyuKS.cjs +2 -0
- package/dist/_shared/date-picker-BnOjyuKS.cjs.map +1 -0
- package/dist/_shared/date-pickers-Cas9cPlj.js +330 -0
- package/dist/_shared/date-pickers-Cas9cPlj.js.map +1 -0
- package/dist/_shared/date-pickers-Dk-G3RMy.cjs +2 -0
- package/dist/_shared/date-pickers-Dk-G3RMy.cjs.map +1 -0
- package/dist/_shared/dialog-67GmkMLC.js +101 -0
- package/dist/_shared/dialog-67GmkMLC.js.map +1 -0
- package/dist/_shared/dialog-BF_4uAhE.cjs +2 -0
- package/dist/_shared/dialog-BF_4uAhE.cjs.map +1 -0
- package/dist/_shared/display-B9xVWboG.cjs +8 -0
- package/dist/_shared/display-B9xVWboG.cjs.map +1 -0
- package/dist/_shared/display-BM_GxDAo.js +1237 -0
- package/dist/_shared/display-BM_GxDAo.js.map +1 -0
- package/dist/_shared/dropdown-menu-4nxEBMnd.js +147 -0
- package/dist/_shared/dropdown-menu-4nxEBMnd.js.map +1 -0
- package/dist/_shared/dropdown-menu-DZlWHqWS.cjs +2 -0
- package/dist/_shared/dropdown-menu-DZlWHqWS.cjs.map +1 -0
- package/dist/_shared/form-field-BQlki-8s.js +319 -0
- package/dist/_shared/form-field-BQlki-8s.js.map +1 -0
- package/dist/_shared/form-field-DzpwVS99.cjs +2 -0
- package/dist/_shared/form-field-DzpwVS99.cjs.map +1 -0
- package/dist/_shared/form-sizing-CcbB-OHF.js +21 -0
- package/dist/_shared/form-sizing-CcbB-OHF.js.map +1 -0
- package/dist/_shared/form-sizing-Cw12UeI6.cjs +2 -0
- package/dist/_shared/form-sizing-Cw12UeI6.cjs.map +1 -0
- package/dist/_shared/format-B2AdSQVn.cjs +2 -0
- package/dist/_shared/format-B2AdSQVn.cjs.map +1 -0
- package/dist/_shared/format-CP65h1vK.js +48 -0
- package/dist/_shared/format-CP65h1vK.js.map +1 -0
- package/dist/_shared/forms-B8aaNG44.cjs +2 -0
- package/dist/_shared/forms-B8aaNG44.cjs.map +1 -0
- package/dist/_shared/forms-BusuTZZ2.js +3374 -0
- package/dist/_shared/forms-BusuTZZ2.js.map +1 -0
- package/dist/_shared/header-DWfOUjFL.cjs +2 -0
- package/dist/_shared/header-DWfOUjFL.cjs.map +1 -0
- package/dist/_shared/header-KpdoLtP9.js +369 -0
- package/dist/_shared/header-KpdoLtP9.js.map +1 -0
- package/dist/_shared/heading-BprqyzDs.js +39 -0
- package/dist/_shared/heading-BprqyzDs.js.map +1 -0
- package/dist/_shared/heading-mZc_jan1.cjs +2 -0
- package/dist/_shared/heading-mZc_jan1.cjs.map +1 -0
- package/dist/_shared/hooks-C-uWoRq5.cjs +2 -0
- package/dist/_shared/hooks-C-uWoRq5.cjs.map +1 -0
- package/dist/_shared/hooks-D5HJtvvP.js +118 -0
- package/dist/_shared/hooks-D5HJtvvP.js.map +1 -0
- package/dist/_shared/icon-badge-BBqDyAUz.cjs +2 -0
- package/dist/_shared/icon-badge-BBqDyAUz.cjs.map +1 -0
- package/dist/_shared/icon-badge-Bi63T-bj.js +52 -0
- package/dist/_shared/icon-badge-Bi63T-bj.js.map +1 -0
- package/dist/_shared/input-B2YXTHqz.cjs +2 -0
- package/dist/_shared/input-B2YXTHqz.cjs.map +1 -0
- package/dist/_shared/input-BJb10xb9.cjs +2 -0
- package/dist/_shared/input-BJb10xb9.cjs.map +1 -0
- package/dist/_shared/input-CZxP5Xgj.js +17 -0
- package/dist/_shared/input-CZxP5Xgj.js.map +1 -0
- package/dist/_shared/input-DQahu2sm.js +182 -0
- package/dist/_shared/input-DQahu2sm.js.map +1 -0
- package/dist/_shared/item-Cu5JbZyZ.js +224 -0
- package/dist/_shared/item-Cu5JbZyZ.js.map +1 -0
- package/dist/_shared/item-Cx_7QZ2o.cjs +2 -0
- package/dist/_shared/item-Cx_7QZ2o.cjs.map +1 -0
- package/dist/_shared/mentions-CS3rIhze.js +493 -0
- package/dist/_shared/mentions-CS3rIhze.js.map +1 -0
- package/dist/_shared/mentions-D7gnP3Nf.cjs +2 -0
- package/dist/_shared/mentions-D7gnP3Nf.cjs.map +1 -0
- package/dist/_shared/metadata-CRsVWE8Y.cjs +2 -0
- package/dist/_shared/metadata-CRsVWE8Y.cjs.map +1 -0
- package/dist/_shared/metadata-CfG0FdFZ.js +236 -0
- package/dist/_shared/metadata-CfG0FdFZ.js.map +1 -0
- package/dist/_shared/money-display-Bd0rkjc9.js +198 -0
- package/dist/_shared/money-display-Bd0rkjc9.js.map +1 -0
- package/dist/_shared/money-display-DSFft9Mi.cjs +2 -0
- package/dist/_shared/money-display-DSFft9Mi.cjs.map +1 -0
- package/dist/_shared/navigation-Do9k5Xh1.js +420 -0
- package/dist/_shared/navigation-Do9k5Xh1.js.map +1 -0
- package/dist/_shared/navigation-QAAD3HJd.cjs +2 -0
- package/dist/_shared/navigation-QAAD3HJd.cjs.map +1 -0
- package/dist/_shared/overlays-B8AH8fNv.js +633 -0
- package/dist/_shared/overlays-B8AH8fNv.js.map +1 -0
- package/dist/_shared/overlays-DOcoRy8k.cjs +2 -0
- package/dist/_shared/overlays-DOcoRy8k.cjs.map +1 -0
- package/dist/_shared/page-BPCeKX9X.js +263 -0
- package/dist/_shared/page-BPCeKX9X.js.map +1 -0
- package/dist/_shared/page-DMM32sxi.cjs +2 -0
- package/dist/_shared/page-DMM32sxi.cjs.map +1 -0
- package/dist/_shared/popover-B1f_EUQS.cjs +2 -0
- package/dist/_shared/popover-B1f_EUQS.cjs.map +1 -0
- package/dist/_shared/popover-CgRGcFk9.js +83 -0
- package/dist/_shared/popover-CgRGcFk9.js.map +1 -0
- package/dist/_shared/popover-menu-BEKIT3LR.cjs +2 -0
- package/dist/_shared/popover-menu-BEKIT3LR.cjs.map +1 -0
- package/dist/_shared/popover-menu-BHdHLEVL.js +95 -0
- package/dist/_shared/popover-menu-BHdHLEVL.js.map +1 -0
- package/dist/_shared/rich-text-editor-0uoIoYXU.js +608 -0
- package/dist/_shared/rich-text-editor-0uoIoYXU.js.map +1 -0
- package/dist/_shared/rich-text-editor-wTiARGuB.cjs +2 -0
- package/dist/_shared/rich-text-editor-wTiARGuB.cjs.map +1 -0
- package/dist/_shared/scroll-area-Bo17wtZD.cjs +2 -0
- package/dist/_shared/scroll-area-Bo17wtZD.cjs.map +1 -0
- package/dist/_shared/scroll-area-Cj-hmB5D.js +41 -0
- package/dist/_shared/scroll-area-Cj-hmB5D.js.map +1 -0
- package/dist/_shared/select-07RRiTWc.js +85 -0
- package/dist/_shared/select-07RRiTWc.js.map +1 -0
- package/dist/_shared/select-BfiU7a4n.cjs +2 -0
- package/dist/_shared/select-BfiU7a4n.cjs.map +1 -0
- package/dist/_shared/separator-CN9zAJfs.cjs +2 -0
- package/dist/_shared/separator-CN9zAJfs.cjs.map +1 -0
- package/dist/_shared/separator-DR0uUMKa.js +16 -0
- package/dist/_shared/separator-DR0uUMKa.js.map +1 -0
- package/dist/_shared/sheet-B5FoGJAZ.cjs +2 -0
- package/dist/_shared/sheet-B5FoGJAZ.cjs.map +1 -0
- package/dist/_shared/sheet-cUI8cypP.js +100 -0
- package/dist/_shared/sheet-cUI8cypP.js.map +1 -0
- package/dist/_shared/sidebar-Bq7yKLrG.cjs +2 -0
- package/dist/_shared/sidebar-Bq7yKLrG.cjs.map +1 -0
- package/dist/_shared/sidebar-Da20tCUc.cjs +2 -0
- package/dist/_shared/sidebar-Da20tCUc.cjs.map +1 -0
- package/dist/_shared/sidebar-Q6TYE8Ux.js +371 -0
- package/dist/_shared/sidebar-Q6TYE8Ux.js.map +1 -0
- package/dist/_shared/sidebar-WmnQ55YY.js +537 -0
- package/dist/_shared/sidebar-WmnQ55YY.js.map +1 -0
- package/dist/_shared/skeleton-B3HWEc6G.js +14 -0
- package/dist/_shared/skeleton-B3HWEc6G.js.map +1 -0
- package/dist/_shared/skeleton-Cz_l8-fc.cjs +2 -0
- package/dist/_shared/skeleton-Cz_l8-fc.cjs.map +1 -0
- package/dist/_shared/slot-BgnZtKR5.js +18 -0
- package/dist/_shared/slot-BgnZtKR5.js.map +1 -0
- package/dist/_shared/slot-Dac1ipUC.cjs +2 -0
- package/dist/_shared/slot-Dac1ipUC.cjs.map +1 -0
- package/dist/_shared/smart-card-Bm_VxYUG.cjs +2 -0
- package/dist/_shared/smart-card-Bm_VxYUG.cjs.map +1 -0
- package/dist/_shared/smart-card-MT6JjkoI.js +360 -0
- package/dist/_shared/smart-card-MT6JjkoI.js.map +1 -0
- package/dist/_shared/spinner-BQjxJ_Kx.js +67 -0
- package/dist/_shared/spinner-BQjxJ_Kx.js.map +1 -0
- package/dist/_shared/spinner-Dvaa6GUm.cjs +2 -0
- package/dist/_shared/spinner-Dvaa6GUm.cjs.map +1 -0
- package/dist/_shared/switch-C0yyhsXZ.js +51 -0
- package/dist/_shared/switch-C0yyhsXZ.js.map +1 -0
- package/dist/_shared/switch-DozkSQNn.cjs +2 -0
- package/dist/_shared/switch-DozkSQNn.cjs.map +1 -0
- package/dist/_shared/textarea-Cgl-FPwu.js +119 -0
- package/dist/_shared/textarea-Cgl-FPwu.js.map +1 -0
- package/dist/_shared/textarea-D8wC0XlZ.cjs +2 -0
- package/dist/_shared/textarea-D8wC0XlZ.cjs.map +1 -0
- package/dist/_shared/tooltip-Cws4BiPT.js +49 -0
- package/dist/_shared/tooltip-Cws4BiPT.js.map +1 -0
- package/dist/_shared/tooltip-DyUi-Tac.cjs +2 -0
- package/dist/_shared/tooltip-DyUi-Tac.cjs.map +1 -0
- package/dist/_shared/typography-BW7iZBx7.cjs +2 -0
- package/dist/_shared/typography-BW7iZBx7.cjs.map +1 -0
- package/dist/_shared/typography-a3hydyvI.js +102 -0
- package/dist/_shared/typography-a3hydyvI.js.map +1 -0
- package/dist/components/base/accordion/index.cjs +1 -1
- package/dist/components/base/accordion/index.js +1 -1
- package/dist/components/base/badge/index.cjs +1 -1
- package/dist/components/base/badge/index.js +1 -1
- package/dist/components/base/buttons/index.cjs +1 -1
- package/dist/components/base/buttons/index.js +2 -2
- package/dist/components/base/cards/index.cjs +1 -1
- package/dist/components/base/cards/index.js +1 -1
- package/dist/components/base/combobox/index.cjs +1 -1
- package/dist/components/base/combobox/index.js +1 -1
- package/dist/components/base/command/index.cjs +1 -1
- package/dist/components/base/command/index.js +2 -2
- package/dist/components/base/copyable/index.cjs +1 -1
- package/dist/components/base/copyable/index.js +1 -1
- package/dist/components/base/currency/index.cjs +1 -1
- package/dist/components/base/currency/index.js +1 -1
- package/dist/components/base/date-pickers/index.cjs +1 -1
- package/dist/components/base/date-pickers/index.js +2 -2
- package/dist/components/base/display/index.cjs +1 -1
- package/dist/components/base/display/index.js +12 -11
- package/dist/components/base/display/metadata/index.cjs +1 -0
- package/dist/components/base/display/metadata/index.js +2 -0
- package/dist/components/base/event-calendar/index.cjs +1 -1
- package/dist/components/base/event-calendar/index.cjs.map +1 -1
- package/dist/components/base/event-calendar/index.js +4 -4
- package/dist/components/base/forms/index.cjs +1 -1
- package/dist/components/base/forms/index.js +6 -6
- package/dist/components/base/item/index.cjs +1 -1
- package/dist/components/base/item/index.js +1 -1
- package/dist/components/base/map/index.cjs +1 -1
- package/dist/components/base/map/index.js +3 -3
- package/dist/components/base/navigation/index.cjs +1 -1
- package/dist/components/base/navigation/index.js +4 -4
- package/dist/components/base/popover/index.cjs +1 -1
- package/dist/components/base/popover/index.js +1 -1
- package/dist/components/base/popover-menu/index.cjs +1 -1
- package/dist/components/base/popover-menu/index.js +1 -1
- package/dist/components/base/sheet/index.cjs +1 -1
- package/dist/components/base/sheet/index.js +1 -1
- package/dist/components/base/sidebar/index.cjs +1 -1
- package/dist/components/base/sidebar/index.js +1 -1
- package/dist/components/base/spinner/index.cjs +1 -1
- package/dist/components/base/spinner/index.js +1 -1
- package/dist/components/base/table/index.cjs +1 -1
- package/dist/components/base/table/index.js +7 -7
- package/dist/components/composed/admin/index.cjs +1 -1
- package/dist/components/composed/admin/index.cjs.map +1 -1
- package/dist/components/composed/admin/index.js +12 -12
- package/dist/components/composed/ai/index.cjs +1 -1
- package/dist/components/composed/ai/index.js +9 -9
- package/dist/components/composed/analytics/index.cjs +1 -1
- package/dist/components/composed/analytics/index.cjs.map +1 -1
- package/dist/components/composed/analytics/index.js +4 -4
- package/dist/components/composed/cards/index.cjs +1 -1
- package/dist/components/composed/cards/index.cjs.map +1 -1
- package/dist/components/composed/cards/index.js +8 -8
- package/dist/components/composed/commerce/index.cjs +1 -1
- package/dist/components/composed/commerce/index.cjs.map +1 -1
- package/dist/components/composed/commerce/index.js +9 -9
- package/dist/components/composed/dark-surfaces/index.cjs +1 -1
- package/dist/components/composed/dark-surfaces/index.cjs.map +1 -1
- package/dist/components/composed/dark-surfaces/index.js +6 -6
- package/dist/components/composed/data-display/index.cjs +1 -1
- package/dist/components/composed/data-display/index.cjs.map +1 -1
- package/dist/components/composed/data-display/index.js +7 -7
- package/dist/components/composed/navigation/index.cjs +1 -1
- package/dist/components/composed/navigation/index.js +4 -4
- package/dist/components/composed/onboarding/index.cjs +1 -1
- package/dist/components/composed/onboarding/index.js +2 -2
- package/dist/components/composed/timelines/index.cjs +1 -1
- package/dist/components/composed/timelines/index.js +2 -2
- package/dist/components/features/activities/index.cjs +1 -1
- package/dist/components/features/activities/index.js +4 -4
- package/dist/components/features/ai-chat/index.cjs +1 -1
- package/dist/components/features/ai-chat/index.cjs.map +1 -1
- package/dist/components/features/ai-chat/index.js +6 -6
- package/dist/components/features/card/index.cjs +1 -1
- package/dist/components/features/card/index.js +3 -3
- package/dist/components/features/comments/index.cjs +1 -1
- package/dist/components/features/comments/index.js +2 -2
- package/dist/components/features/event-log/index.cjs +1 -1
- package/dist/components/features/event-log/index.js +3 -3
- package/dist/components/features/filters/index.cjs +1 -1
- package/dist/components/features/filters/index.js +9 -9
- package/dist/components/features/global-search/index.cjs +1 -1
- package/dist/components/features/global-search/index.js +2 -2
- package/dist/components/features/kanban/index.cjs +1 -1
- package/dist/components/features/kanban/index.js +1 -1
- package/dist/components/features/mentions/index.cjs +1 -1
- package/dist/components/features/mentions/index.js +1 -1
- package/dist/components/features/overlays/index.cjs +1 -1
- package/dist/components/features/overlays/index.js +1 -1
- package/dist/components/features/rich-text-editor/index.cjs +1 -1
- package/dist/components/features/rich-text-editor/index.js +1 -1
- package/dist/components/features/suggestions/index.cjs +1 -1
- package/dist/components/features/suggestions/index.js +1 -1
- package/dist/components/features/sync/index.cjs +1 -1
- package/dist/components/features/sync/index.js +2 -2
- package/dist/components/layout/containers/index.cjs +1 -1
- package/dist/components/layout/containers/index.js +2 -2
- package/dist/components/layout/header/index.cjs +1 -1
- package/dist/components/layout/header/index.js +1 -1
- package/dist/components/layout/hooks/index.cjs +1 -1
- package/dist/components/layout/hooks/index.js +1 -1
- package/dist/components/layout/index.cjs +1 -1
- package/dist/components/layout/index.js +6 -6
- package/dist/components/layout/page/index.cjs +1 -1
- package/dist/components/layout/page/index.js +1 -1
- package/dist/components/layout/sidebar/index.cjs +1 -1
- package/dist/components/layout/sidebar/index.js +2 -2
- package/dist/components/typography/index.cjs +1 -1
- package/dist/components/typography/index.js +3 -2
- package/dist/showcase/assets/AreaChart-CJ57G5Ub.js +6 -0
- package/dist/showcase/assets/CSPContext-BA7DfnCI.js +1 -0
- package/dist/showcase/assets/CompositeItem-PwzgE4va.js +1 -0
- package/dist/showcase/assets/CompositeRoot-Du4CMlK7.js +1 -0
- package/dist/showcase/assets/DialogTrigger-FkENgwo6.js +1 -0
- package/dist/showcase/assets/FormContext-ChygLayp.js +1 -0
- package/dist/showcase/assets/PreviewLayout-z6vpJJGt.js +1 -0
- package/dist/showcase/assets/RadioGroup-CcDmbxOw.js +1 -0
- package/dist/showcase/assets/Separator-Dk4eN76U.js +1 -0
- package/dist/showcase/assets/ToolbarRootContext-D_KAA5hZ.js +1 -0
- package/dist/showcase/assets/accordion-dQszzfmw.js +172 -0
- package/dist/showcase/assets/accordion-variants-Dp4wxic-.js +1 -0
- package/dist/showcase/assets/action-menu-CBi2Eiy0.js +1 -0
- package/dist/showcase/assets/activities-DoXsgP4G.js +501 -0
- package/dist/showcase/assets/activities-feed-card-xz5FtkOm.js +1 -0
- package/dist/showcase/assets/admin-CxklUqAG.js +80 -0
- package/dist/showcase/assets/ai-artifact-DkhUdEbM.js +2 -0
- package/dist/showcase/assets/ai-chat-B6PuqkEu.js +568 -0
- package/dist/showcase/assets/ai-elements-D_rpj_ds.js +379 -0
- package/dist/showcase/assets/ai-new-CUPrAbOK.js +167 -0
- package/dist/showcase/assets/ai-tool-call-CEr-dGVx.js +1 -0
- package/dist/showcase/assets/ai-zxF_msJF.js +41 -0
- package/dist/showcase/assets/alert-771BE3Ny.js +59 -0
- package/dist/showcase/assets/alert-CG42DAlX.js +1 -0
- package/dist/showcase/assets/api-key-list-D6jUN7Fq.js +73 -0
- package/dist/showcase/assets/arrow-down-CUoXUyN1.js +1 -0
- package/dist/showcase/assets/arrow-left-Cdq69X6h.js +1 -0
- package/dist/showcase/assets/arrow-right-i25q9L2H.js +1 -0
- package/dist/showcase/assets/arrow-up-pnezegnF.js +1 -0
- package/dist/showcase/assets/arrow-up-right-CK3XnMah.js +1 -0
- package/dist/showcase/assets/avatar-LPmQqZQv.js +1 -0
- package/dist/showcase/assets/avatar-ZVFIQouy.js +57 -0
- package/dist/showcase/assets/badge-DK4bsgZC.js +28 -0
- package/dist/showcase/assets/badge-check-Cw5gkVcG.js +1 -0
- package/dist/showcase/assets/bell-BvJELoaV.js +1 -0
- package/dist/showcase/assets/bot-DRj6sdSR.js +1 -0
- package/dist/showcase/assets/box-BNND3M2m.js +1 -0
- package/dist/showcase/assets/brain-Cy3o-12l.js +1 -0
- package/dist/showcase/assets/brand-DvipEpFn.js +40 -0
- package/dist/showcase/assets/breadcrumb-B-LNuOyv.js +1 -0
- package/dist/showcase/assets/breadcrumb-Lzpc0yo4.js +52 -0
- package/dist/showcase/assets/breadcrumbs-DD6msKFZ.js +1 -0
- package/dist/showcase/assets/briefcase-LcAwoEmu.js +1 -0
- package/dist/showcase/assets/button-CuwcGzk1.js +44 -0
- package/dist/showcase/assets/button-group-CAImjDrl.js +1 -0
- package/dist/showcase/assets/buttons-DTjNHCMl.js +259 -0
- package/dist/showcase/assets/calendar-B1zW0q6I.js +1 -0
- package/dist/showcase/assets/calendar-Dlv72ytt.js +1 -0
- package/dist/showcase/assets/calendar-ls2A08Pn.js +16 -0
- package/dist/showcase/assets/card-BhtkM1BT.js +1 -0
- package/dist/showcase/assets/cards-BRpRXzGk.js +328 -0
- package/dist/showcase/assets/chart-column-BpQkEi1H.js +1 -0
- package/dist/showcase/assets/chevron-down-DyObdfSb.js +1 -0
- package/dist/showcase/assets/chevron-left-T7dHNxYM.js +1 -0
- package/dist/showcase/assets/chevron-right-D_EcqHpT.js +1 -0
- package/dist/showcase/assets/chevron-up-B38ivdGO.js +1 -0
- package/dist/showcase/assets/chevrons-up-down-SdRARzoq.js +1 -0
- package/dist/showcase/assets/circle-BrCPAmDA.js +1 -0
- package/dist/showcase/assets/circle-alert-DdhzLPY_.js +1 -0
- package/dist/showcase/assets/circle-check-DlA6zidQ.js +1 -0
- package/dist/showcase/assets/circle-check-big-DFGJANQF.js +1 -0
- package/dist/showcase/assets/circle-dot-BKmnVUqM.js +1 -0
- package/dist/showcase/assets/circle-question-mark-BNREvgVC.js +1 -0
- package/dist/showcase/assets/circle-x-C45QjHEs.js +1 -0
- package/dist/showcase/assets/clock-D1nKQzQo.js +1 -0
- package/dist/showcase/assets/code-xml-B8N3GRSu.js +1 -0
- package/dist/showcase/assets/collapsible-4TfcWyNs.js +1 -0
- package/dist/showcase/assets/collapsible-CKbZtvTj.js +27 -0
- package/dist/showcase/assets/combobox-DTdGPaU0.js +622 -0
- package/dist/showcase/assets/command-DymTXwL1.js +1 -0
- package/dist/showcase/assets/command-ksVIHQKJ.js +45 -0
- package/dist/showcase/assets/comment-composer-DC9oS1Yy.js +1 -0
- package/dist/showcase/assets/comment-item-CAmKnJa7.js +1 -0
- package/dist/showcase/assets/comments-Benk-2mV.js +349 -0
- package/dist/showcase/assets/commerce-Qz-mq8mQ.js +78 -0
- package/dist/showcase/assets/commerce-extras-CQRc3Bna.js +179 -0
- package/dist/showcase/assets/composite-DBDXLPyz.js +1 -0
- package/dist/showcase/assets/contact-card-DkL2nI3r.js +65 -0
- package/dist/showcase/assets/content-container-mRm6oJEa.js +1 -0
- package/dist/showcase/assets/copyable-DmLlmwzy.js +96 -0
- package/dist/showcase/assets/course-card-CJJoeZj9.js +113 -0
- package/dist/showcase/assets/cpu-BXJnF2Xy.js +1 -0
- package/dist/showcase/assets/credit-card-BQK3KKb2.js +1 -0
- package/dist/showcase/assets/currency-DBPUh8ee.js +149 -0
- package/dist/showcase/assets/dark-surfaces-LpPuIeYy.js +90 -0
- package/dist/showcase/assets/database-BZerpzGE.js +1 -0
- package/dist/showcase/assets/date-block-iiHUpbNX.js +1 -0
- package/dist/showcase/assets/date-picker-BQeBGL7T.js +1 -0
- package/dist/showcase/assets/date-pickers-CKcUEMMF.js +110 -0
- package/dist/showcase/assets/dense-info-DATmxRU8.js +106 -0
- package/dist/showcase/assets/dialog-Bqu5KDYH.js +1 -0
- package/dist/showcase/assets/display-Bj7uPXD4.js +392 -0
- package/dist/showcase/assets/dist-QK7JxeYv.js +1 -0
- package/dist/showcase/assets/dollar-sign-DFZs6vfz.js +1 -0
- package/dist/showcase/assets/download-5oGw_WbW.js +1 -0
- package/dist/showcase/assets/dropdown-menu-1CJgYn0S.js +1 -0
- package/dist/showcase/assets/dropzone-Co1uhsDn.js +1 -0
- package/dist/showcase/assets/ellipsis-cKRcvuyL.js +1 -0
- package/dist/showcase/assets/ellipsis-vertical-B1RErEkj.js +1 -0
- package/dist/showcase/assets/empty-Y2-4nCBr.js +1 -0
- package/dist/showcase/assets/empty-item-USa6xcUv.js +49 -0
- package/dist/showcase/assets/empty-state-DfhZ9AT5.js +188 -0
- package/dist/showcase/assets/enhanced-activities-DmAPVUSu.js +359 -0
- package/dist/showcase/assets/esm-BeGQ_ZTM.js +2 -0
- package/dist/showcase/assets/event-calendar-D-jGrrZS.js +138 -0
- package/dist/showcase/assets/event-log-tA_i4eR9.js +326 -0
- package/dist/showcase/assets/example-6phCHGsN.js +1 -0
- package/dist/showcase/assets/external-link-BuVHkCy0.js +1 -0
- package/dist/showcase/assets/eye-DC5HfGm6.js +1 -0
- package/dist/showcase/assets/feature-announcement-DwvxLytd.js +34 -0
- package/dist/showcase/assets/file-D-xM4vLy.js +1 -0
- package/dist/showcase/assets/file-text-tmG5vNbr.js +1 -0
- package/dist/showcase/assets/filters-CrGRXmq6.js +78 -0
- package/dist/showcase/assets/flag-CWrEtkY5.js +1 -0
- package/dist/showcase/assets/folder-open-Br-x1pjP.js +1 -0
- package/dist/showcase/assets/form-sizing-Bb5hiM45.js +1 -0
- package/dist/showcase/assets/format-D_ETCyg4.js +1 -0
- package/dist/showcase/assets/forms-B_MkQ3rm.js +790 -0
- package/dist/showcase/assets/generic-CdmsyXV3.js +1 -0
- package/dist/showcase/assets/getPseudoElementBounds-CZnCbCFP.js +1 -0
- package/dist/showcase/assets/gift-NkuklfU2.js +1 -0
- package/dist/showcase/assets/giftcard-cards-BAvevZ0i.js +85 -0
- package/dist/showcase/assets/git-branch-B_CBqPeO.js +1 -0
- package/dist/showcase/assets/global-search-D9teAbPe.js +90 -0
- package/dist/showcase/assets/globe-gzw45GU2.js +1 -0
- package/dist/showcase/assets/gradient-card-Xk2r7R5H.js +58 -0
- package/dist/showcase/assets/header-notifications-_aZCpE5A.js +1 -0
- package/dist/showcase/assets/heart-CEMKbRaZ.js +1 -0
- package/dist/showcase/assets/house-BlGXAcMH.js +1 -0
- package/dist/showcase/assets/icon-badge-z6N9reH_.js +1 -0
- package/dist/showcase/assets/image-B8mzmVBr.js +1 -0
- package/dist/showcase/assets/inbox-qdSnP4UV.js +1 -0
- package/dist/showcase/assets/index-B4ubXfly.js +10 -0
- package/dist/showcase/assets/inertValue-D5Q8cLku.js +1 -0
- package/dist/showcase/assets/info-DBvvNjc_.js +1 -0
- package/dist/showcase/assets/inline-stat-Bm1zVT8D.js +1 -0
- package/dist/showcase/assets/input-CBQR0aeX.js +1 -0
- package/dist/showcase/assets/input-OrUzpI55.js +1 -0
- package/dist/showcase/assets/input-group-DhqOen2N.js +47 -0
- package/dist/showcase/assets/input-group-l8xa5nUq.js +1 -0
- package/dist/showcase/assets/inputs-DbiJ0qy2.js +49 -0
- package/dist/showcase/assets/invoice-header-C6youIbL.js +36 -0
- package/dist/showcase/assets/invoice-items-g6dgryF-.js +36 -0
- package/dist/showcase/assets/invoice-mini-0iWhufpt.js +14 -0
- package/dist/showcase/assets/invoice-table-Bvdh3rRq.js +30 -0
- package/dist/showcase/assets/isSameDay-BpZEtJe8.js +1 -0
- package/dist/showcase/assets/isToday-F0CS28oK.js +1 -0
- package/dist/showcase/assets/italic-CJOEwjdc.js +1 -0
- package/dist/showcase/assets/item-BiMm1PPB.js +1 -0
- package/dist/showcase/assets/item-CN0cwdj_.js +1 -0
- package/dist/showcase/assets/item-DNqEUYLT.js +117 -0
- package/dist/showcase/assets/kanban-DxePEUiQ.js +175 -0
- package/dist/showcase/assets/label-Dx4WO-fg.js +1 -0
- package/dist/showcase/assets/layout-containers-DDl8rG8S.js +96 -0
- package/dist/showcase/assets/layout-header-Bu6IcDWu.js +170 -0
- package/dist/showcase/assets/layout-page-D-88Qnoy.js +122 -0
- package/dist/showcase/assets/layout-sidebar-Ctft10pk.js +224 -0
- package/dist/showcase/assets/layout-users-DtbZduBG.js +104 -0
- package/dist/showcase/assets/lib-D9BoOYUd.js +1 -0
- package/dist/showcase/assets/lock-CHurDI0n.js +1 -0
- package/dist/showcase/assets/mail-DZ1o1RLW.js +1 -0
- package/dist/showcase/assets/map-C8xiyT9X.js +124 -0
- package/dist/showcase/assets/map-pin-CAKaoYod.js +1 -0
- package/dist/showcase/assets/menus-C6mnp636.js +89 -0
- package/dist/showcase/assets/message-square-Zo5J_zU1.js +1 -0
- package/dist/showcase/assets/metadata-list-W83-UMhc.js +278 -0
- package/dist/showcase/assets/metric-BSvxidIX.js +1 -0
- package/dist/showcase/assets/metric-grid-Dtqx_3Lg.js +1 -0
- package/dist/showcase/assets/metric-trend-chip-mtvcJ_M9.js +1 -0
- package/dist/showcase/assets/metrics-analytics-bar-DQbyss7i.js +44 -0
- package/dist/showcase/assets/metrics-analytics-cards-CEBu5Uw0.js +77 -0
- package/dist/showcase/assets/metrics-comparison-Bs-R6v4y.js +76 -0
- package/dist/showcase/assets/metrics-heatmap-BKHWH8sM.js +27 -0
- package/dist/showcase/assets/metrics-inline-badge-BxVn0Y2p.js +17 -0
- package/dist/showcase/assets/metrics-kpi-row-DtACYEds.js +31 -0
- package/dist/showcase/assets/metrics-micro-grid-BkwUGOUR.js +42 -0
- package/dist/showcase/assets/metrics-overview-BAtrlzsI.js +192 -0
- package/dist/showcase/assets/metrics-stat-cards-iCRCNyHY.js +54 -0
- package/dist/showcase/assets/minus-C6eBW-2t.js +1 -0
- package/dist/showcase/assets/money-display-DjGRJ16l.js +1 -0
- package/dist/showcase/assets/month-year-picker-DTDebPqf.js +1 -0
- package/dist/showcase/assets/navigation-BrG8Chig.js +86 -0
- package/dist/showcase/assets/navigation-CfXQJbyM.js +230 -0
- package/dist/showcase/assets/navigation-extras-D_gzLlZ5.js +43 -0
- package/dist/showcase/assets/onboarding-checklist-1EerUwAo.js +119 -0
- package/dist/showcase/assets/overlays-2AB9-S1Z.js +88 -0
- package/dist/showcase/assets/overlays-CYt9o3Xq.js +393 -0
- package/dist/showcase/assets/package-BJMP-Fcr.js +1 -0
- package/dist/showcase/assets/page-action-button-BZxJ0X1j.js +1 -0
- package/dist/showcase/assets/page-header-B_rqHJhe.js +1 -0
- package/dist/showcase/assets/pagination-BHiQvvka.js +1 -0
- package/dist/showcase/assets/pagination-Dq0GruQd.js +42 -0
- package/dist/showcase/assets/paperclip-BMYKrUQo.js +1 -0
- package/dist/showcase/assets/pencil-BJ3VS_FO.js +1 -0
- package/dist/showcase/assets/phone-CsRIyvep.js +1 -0
- package/dist/showcase/assets/plus-D2JuXYLg.js +1 -0
- package/dist/showcase/assets/popover-DNT9755r.js +1 -0
- package/dist/showcase/assets/popover-KvGgcPNg.js +1 -0
- package/dist/showcase/assets/popover-menu-CJx30R65.js +1 -0
- package/dist/showcase/assets/progress-B7WuXcJR.js +1 -0
- package/dist/showcase/assets/progress-CweCSAUv.js +18 -0
- package/dist/showcase/assets/props-table-uDY4eIzt.js +1 -0
- package/dist/showcase/assets/quote-DAyyfzQd.js +1 -0
- package/dist/showcase/assets/receipt-C0mMZGbF.js +1 -0
- package/dist/showcase/assets/refresh-cw-X06JbXb-.js +1 -0
- package/dist/showcase/assets/resolveValueLabel-Bks7UDko.js +1 -0
- package/dist/showcase/assets/rich-text-editor-QJsb-qIe.js +124 -0
- package/dist/showcase/assets/rich-text-editor-h07VBNI9.js +141 -0
- package/dist/showcase/assets/rotate-ccw-D84bdX_x.js +1 -0
- package/dist/showcase/assets/scroll-area-0rT06pXZ.js +1 -0
- package/dist/showcase/assets/scroll-area-YXwdzGpN.js +32 -0
- package/dist/showcase/assets/select-BoWQDtUf.js +1 -0
- package/dist/showcase/assets/send-DJsk3cr1.js +1 -0
- package/dist/showcase/assets/separator-CLSnRcJa.js +28 -0
- package/dist/showcase/assets/separator-DWv-twD-.js +1 -0
- package/dist/showcase/assets/settings-Cb2MsAmN.js +1 -0
- package/dist/showcase/assets/sheet-Dn1-MYus.js +1 -0
- package/dist/showcase/assets/shield-DwLjF5ch.js +1 -0
- package/dist/showcase/assets/shield-alert-D8i6gzMK.js +1 -0
- package/dist/showcase/assets/shield-check-D5YRSBIz.js +1 -0
- package/dist/showcase/assets/shopping-bag-BqlAP4vn.js +1 -0
- package/dist/showcase/assets/sidebar.context-BAp_pBEB.js +1 -0
- package/dist/showcase/assets/skeleton-CeNPp4hr.js +1 -0
- package/dist/showcase/assets/skeleton-QPsnM_NR.js +29 -0
- package/dist/showcase/assets/smart-card-BisUbLPt.js +1 -0
- package/dist/showcase/assets/sonner-B7GzbBK2.js +22 -0
- package/dist/showcase/assets/sortable.esm-BDcEOHT7.js +5 -0
- package/dist/showcase/assets/sparkles-CF9P5Tqh.js +1 -0
- package/dist/showcase/assets/spinner-BeamEyJd.js +49 -0
- package/dist/showcase/assets/spinner-DoYBfalR.js +1 -0
- package/dist/showcase/assets/spinner-UsLsOYzn.js +30 -0
- package/dist/showcase/assets/square-pen-BGTVdnt1.js +1 -0
- package/dist/showcase/assets/stacked-avatars-BWfVX1Ov.js +1 -0
- package/dist/showcase/assets/star-NsPNO9gR.js +1 -0
- package/dist/showcase/assets/startOfDay-zJBpxLuW.js +1 -0
- package/dist/showcase/assets/styles-DA7a7hVy.js +1 -0
- package/dist/showcase/assets/switch-C62S4U2o.js +1 -0
- package/dist/showcase/assets/switch-CYQcinJZ.js +1 -0
- package/dist/showcase/assets/table-w4IABkpa.js +1 -0
- package/dist/showcase/assets/table-xgB63UrY.js +390 -0
- package/dist/showcase/assets/tabs-BFTEaTXj.js +19 -0
- package/dist/showcase/assets/tabs-oMJn9Ujq.js +1 -0
- package/dist/showcase/assets/text-button-BgcutPuu.js +1 -0
- package/dist/showcase/assets/text-link-CS9thOWL.js +1 -0
- package/dist/showcase/assets/textarea-BOBx4EM6.js +1 -0
- package/dist/showcase/assets/textarea-CTzYZZqa.js +1 -0
- package/dist/showcase/assets/timelines-CK07mEBK.js +186 -0
- package/dist/showcase/assets/toggle-group-CSPdPT6G.js +1 -0
- package/dist/showcase/assets/toggles-DDSdl-gA.js +71 -0
- package/dist/showcase/assets/toggles-group-Y2BdKEFB.js +32 -0
- package/dist/showcase/assets/trash-2-C-FAptQP.js +1 -0
- package/dist/showcase/assets/trending-up-BmLhdF_w.js +1 -0
- package/dist/showcase/assets/truck-pZdUS_as.js +1 -0
- package/dist/showcase/assets/typography-CnBH2z7f.js +214 -0
- package/dist/showcase/assets/ui-badge-Cl6INRO5.js +28 -0
- package/dist/showcase/assets/ui-card-B5P-thNu.js +30 -0
- package/dist/showcase/assets/ui-table-B32RILKk.js +42 -0
- package/dist/showcase/assets/upload-tray-mu6bR2ZE.js +138 -0
- package/dist/showcase/assets/useAnchoredPopupScrollLock-CzDaXxmM.js +1 -0
- package/dist/showcase/assets/useCollapsiblePanel-B0DZvDFu.js +1 -0
- package/dist/showcase/assets/useCompositeItem-BVIVLT9X.js +1 -0
- package/dist/showcase/assets/useCompositeListItem-JEMeTFPx.js +1 -0
- package/dist/showcase/assets/useControlled-ZjqBfPCn.js +1 -0
- package/dist/showcase/assets/useLabelableId-D8CZq8Bm.js +1 -0
- package/dist/showcase/assets/useOpenInteractionType-CopGCf3q.js +1 -0
- package/dist/showcase/assets/useRender-zuKv6JQF.js +1 -0
- package/dist/showcase/assets/useRole-08KeyiD3.js +1 -0
- package/dist/showcase/assets/useTriggerFocusGuards-DEuz5CGe.js +1 -0
- package/dist/showcase/assets/useValueChanged-BxFi_qyj.js +1 -0
- package/dist/showcase/assets/user-Bgc2t2_e.js +1 -0
- package/dist/showcase/assets/user-plus-F_TfagnP.js +1 -0
- package/dist/showcase/assets/users-B7G4yTCR.js +1 -0
- package/dist/showcase/assets/vendor-profile-BTQmsKM6.js +37 -0
- package/dist/showcase/assets/wrench-BdzICmjR.js +1 -0
- package/dist/showcase/assets/x-B156Wr-5.js +1 -0
- package/dist/showcase/assets/zap-B3iByjNV.js +1 -0
- package/dist/showcase/index.html +1 -1
- package/package.json +254 -19
- package/dist/_shared/accordion-7rwpgJ1k.cjs +0 -2
- package/dist/_shared/accordion-7rwpgJ1k.cjs.map +0 -1
- package/dist/_shared/accordion-DcduCEIo.js +0 -130
- package/dist/_shared/accordion-DcduCEIo.js.map +0 -1
- package/dist/_shared/action-menu-D0u-q0q-.cjs +0 -2
- package/dist/_shared/action-menu-D0u-q0q-.cjs.map +0 -1
- package/dist/_shared/action-menu-DUBXdReV.js +0 -96
- package/dist/_shared/action-menu-DUBXdReV.js.map +0 -1
- package/dist/_shared/ai-artifact-C3R0god0.cjs +0 -3
- package/dist/_shared/ai-artifact-C3R0god0.cjs.map +0 -1
- package/dist/_shared/ai-artifact-DMjQv_Si.js +0 -1068
- package/dist/_shared/ai-artifact-DMjQv_Si.js.map +0 -1
- package/dist/_shared/alert-B2cuJGAA.cjs +0 -2
- package/dist/_shared/alert-B2cuJGAA.cjs.map +0 -1
- package/dist/_shared/alert-BKUmOI2e.js +0 -48
- package/dist/_shared/alert-BKUmOI2e.js.map +0 -1
- package/dist/_shared/avatar-BcYcRORH.cjs +0 -2
- package/dist/_shared/avatar-BcYcRORH.cjs.map +0 -1
- package/dist/_shared/avatar-CNzG6jSZ.js +0 -52
- package/dist/_shared/avatar-CNzG6jSZ.js.map +0 -1
- package/dist/_shared/badge-BbUN6W7E.js +0 -108
- package/dist/_shared/badge-BbUN6W7E.js.map +0 -1
- package/dist/_shared/badge-BjtDcU1M.cjs +0 -2
- package/dist/_shared/badge-BjtDcU1M.cjs.map +0 -1
- package/dist/_shared/breadcrumbs-DctwTld5.js +0 -111
- package/dist/_shared/breadcrumbs-DctwTld5.js.map +0 -1
- package/dist/_shared/breadcrumbs-m0-gCdNj.cjs +0 -2
- package/dist/_shared/breadcrumbs-m0-gCdNj.cjs.map +0 -1
- package/dist/_shared/button-BCABTFLE.js +0 -46
- package/dist/_shared/button-BCABTFLE.js.map +0 -1
- package/dist/_shared/button-Ck2qS42n.js +0 -176
- package/dist/_shared/button-Ck2qS42n.js.map +0 -1
- package/dist/_shared/button-DjJ-mDI1.cjs +0 -2
- package/dist/_shared/button-DjJ-mDI1.cjs.map +0 -1
- package/dist/_shared/button-DjacsNTg.cjs +0 -2
- package/dist/_shared/button-DjacsNTg.cjs.map +0 -1
- package/dist/_shared/buttons-BVnjQ-uE.js +0 -143
- package/dist/_shared/buttons-BVnjQ-uE.js.map +0 -1
- package/dist/_shared/buttons-BdY6igTr.cjs +0 -2
- package/dist/_shared/buttons-BdY6igTr.cjs.map +0 -1
- package/dist/_shared/card-radio-group--GP1xrz_.js +0 -158
- package/dist/_shared/card-radio-group--GP1xrz_.js.map +0 -1
- package/dist/_shared/card-radio-group-DnQsWozr.cjs +0 -2
- package/dist/_shared/card-radio-group-DnQsWozr.cjs.map +0 -1
- package/dist/_shared/combobox-DBrRE1Dr.cjs +0 -2
- package/dist/_shared/combobox-DBrRE1Dr.cjs.map +0 -1
- package/dist/_shared/combobox-DYztEJaw.js +0 -746
- package/dist/_shared/combobox-DYztEJaw.js.map +0 -1
- package/dist/_shared/command-COvgXQ8r.cjs +0 -2
- package/dist/_shared/command-COvgXQ8r.cjs.map +0 -1
- package/dist/_shared/command-CvZ6Emb8.js +0 -39
- package/dist/_shared/command-CvZ6Emb8.js.map +0 -1
- package/dist/_shared/command-DTFQIUVG.cjs +0 -2
- package/dist/_shared/command-DTFQIUVG.cjs.map +0 -1
- package/dist/_shared/command-Sq8XbHbA.js +0 -123
- package/dist/_shared/command-Sq8XbHbA.js.map +0 -1
- package/dist/_shared/comments-BOFU1GYY.js +0 -945
- package/dist/_shared/comments-BOFU1GYY.js.map +0 -1
- package/dist/_shared/comments-BbTYFzx6.cjs +0 -2
- package/dist/_shared/comments-BbTYFzx6.cjs.map +0 -1
- package/dist/_shared/containers-BthqdOhA.cjs +0 -2
- package/dist/_shared/containers-BthqdOhA.cjs.map +0 -1
- package/dist/_shared/containers-CD2xs1nk.js +0 -19
- package/dist/_shared/containers-CD2xs1nk.js.map +0 -1
- package/dist/_shared/content-container-CFfYbWoa.js +0 -33
- package/dist/_shared/content-container-CFfYbWoa.js.map +0 -1
- package/dist/_shared/content-container-CReiVugL.cjs +0 -2
- package/dist/_shared/content-container-CReiVugL.cjs.map +0 -1
- package/dist/_shared/copyable-CweQ72QI.cjs +0 -2
- package/dist/_shared/copyable-CweQ72QI.cjs.map +0 -1
- package/dist/_shared/copyable-JgsTp6ev.js +0 -38
- package/dist/_shared/copyable-JgsTp6ev.js.map +0 -1
- package/dist/_shared/date-picker-DI4b-SeE.cjs +0 -2
- package/dist/_shared/date-picker-DI4b-SeE.cjs.map +0 -1
- package/dist/_shared/date-picker-DTazvODY.js +0 -1352
- package/dist/_shared/date-picker-DTazvODY.js.map +0 -1
- package/dist/_shared/date-pickers-CLzuzmuc.cjs +0 -2
- package/dist/_shared/date-pickers-CLzuzmuc.cjs.map +0 -1
- package/dist/_shared/date-pickers-CWPxP3zy.js +0 -330
- package/dist/_shared/date-pickers-CWPxP3zy.js.map +0 -1
- package/dist/_shared/dialog-2MJmaj_d.js +0 -101
- package/dist/_shared/dialog-2MJmaj_d.js.map +0 -1
- package/dist/_shared/dialog-KKD0i1T8.cjs +0 -2
- package/dist/_shared/dialog-KKD0i1T8.cjs.map +0 -1
- package/dist/_shared/display-BCy1Ti7T.cjs +0 -8
- package/dist/_shared/display-BCy1Ti7T.cjs.map +0 -1
- package/dist/_shared/display-DUpkE2aS.js +0 -1462
- package/dist/_shared/display-DUpkE2aS.js.map +0 -1
- package/dist/_shared/dropdown-menu-BebBffUH.cjs +0 -2
- package/dist/_shared/dropdown-menu-BebBffUH.cjs.map +0 -1
- package/dist/_shared/dropdown-menu-xdGEynC8.js +0 -147
- package/dist/_shared/dropdown-menu-xdGEynC8.js.map +0 -1
- package/dist/_shared/form-field-rOj3cm6C.js +0 -319
- package/dist/_shared/form-field-rOj3cm6C.js.map +0 -1
- package/dist/_shared/form-field-rcyIIHjR.cjs +0 -2
- package/dist/_shared/form-field-rcyIIHjR.cjs.map +0 -1
- package/dist/_shared/form-sizing--bs_xPe2.cjs +0 -2
- package/dist/_shared/form-sizing--bs_xPe2.cjs.map +0 -1
- package/dist/_shared/form-sizing-CkKcs5fi.js +0 -21
- package/dist/_shared/form-sizing-CkKcs5fi.js.map +0 -1
- package/dist/_shared/format-BlVEsPyT.js +0 -48
- package/dist/_shared/format-BlVEsPyT.js.map +0 -1
- package/dist/_shared/format-DYVtSA2I.cjs +0 -2
- package/dist/_shared/format-DYVtSA2I.cjs.map +0 -1
- package/dist/_shared/forms-BAVsxxRk.js +0 -3374
- package/dist/_shared/forms-BAVsxxRk.js.map +0 -1
- package/dist/_shared/forms-DaZ3LsYc.cjs +0 -2
- package/dist/_shared/forms-DaZ3LsYc.cjs.map +0 -1
- package/dist/_shared/header-BtTMsQ5P.cjs +0 -2
- package/dist/_shared/header-BtTMsQ5P.cjs.map +0 -1
- package/dist/_shared/header-DpW4UWV6.js +0 -369
- package/dist/_shared/header-DpW4UWV6.js.map +0 -1
- package/dist/_shared/hooks-Bsm917yh.cjs +0 -2
- package/dist/_shared/hooks-Bsm917yh.cjs.map +0 -1
- package/dist/_shared/hooks-CX-SICd4.js +0 -118
- package/dist/_shared/hooks-CX-SICd4.js.map +0 -1
- package/dist/_shared/icon-badge-DGKpbo9_.cjs +0 -2
- package/dist/_shared/icon-badge-DGKpbo9_.cjs.map +0 -1
- package/dist/_shared/icon-badge-DoClA_9q.js +0 -52
- package/dist/_shared/icon-badge-DoClA_9q.js.map +0 -1
- package/dist/_shared/input-BXt-YtVs.cjs +0 -2
- package/dist/_shared/input-BXt-YtVs.cjs.map +0 -1
- package/dist/_shared/input-Bx4LeLhn.js +0 -17
- package/dist/_shared/input-Bx4LeLhn.js.map +0 -1
- package/dist/_shared/input-ChZGIhtS.cjs +0 -2
- package/dist/_shared/input-ChZGIhtS.cjs.map +0 -1
- package/dist/_shared/input-Cwv1-5jt.js +0 -182
- package/dist/_shared/input-Cwv1-5jt.js.map +0 -1
- package/dist/_shared/item-BmTYKzEb.js +0 -224
- package/dist/_shared/item-BmTYKzEb.js.map +0 -1
- package/dist/_shared/item-BtR-bz96.cjs +0 -2
- package/dist/_shared/item-BtR-bz96.cjs.map +0 -1
- package/dist/_shared/mentions-DVCjaO_z.cjs +0 -2
- package/dist/_shared/mentions-DVCjaO_z.cjs.map +0 -1
- package/dist/_shared/mentions-DzG8mX5H.js +0 -493
- package/dist/_shared/mentions-DzG8mX5H.js.map +0 -1
- package/dist/_shared/money-display-B5oxCs_0.cjs +0 -2
- package/dist/_shared/money-display-B5oxCs_0.cjs.map +0 -1
- package/dist/_shared/money-display-C0wI02ou.js +0 -198
- package/dist/_shared/money-display-C0wI02ou.js.map +0 -1
- package/dist/_shared/navigation-BA2nsTgU.cjs +0 -2
- package/dist/_shared/navigation-BA2nsTgU.cjs.map +0 -1
- package/dist/_shared/navigation-DHyaf-RZ.js +0 -420
- package/dist/_shared/navigation-DHyaf-RZ.js.map +0 -1
- package/dist/_shared/overlays-Kl6Gp6WR.js +0 -633
- package/dist/_shared/overlays-Kl6Gp6WR.js.map +0 -1
- package/dist/_shared/overlays-W6j-Pe1L.cjs +0 -2
- package/dist/_shared/overlays-W6j-Pe1L.cjs.map +0 -1
- package/dist/_shared/page-DROZhtWT.js +0 -263
- package/dist/_shared/page-DROZhtWT.js.map +0 -1
- package/dist/_shared/page-lh9Rcx_d.cjs +0 -2
- package/dist/_shared/page-lh9Rcx_d.cjs.map +0 -1
- package/dist/_shared/popover-BTEwjJZS.cjs +0 -2
- package/dist/_shared/popover-BTEwjJZS.cjs.map +0 -1
- package/dist/_shared/popover-CF9VWt-l.js +0 -83
- package/dist/_shared/popover-CF9VWt-l.js.map +0 -1
- package/dist/_shared/popover-menu-BYesl29w.js +0 -95
- package/dist/_shared/popover-menu-BYesl29w.js.map +0 -1
- package/dist/_shared/popover-menu-DF9sWz61.cjs +0 -2
- package/dist/_shared/popover-menu-DF9sWz61.cjs.map +0 -1
- package/dist/_shared/rich-text-editor-UZghkgsh.cjs +0 -2
- package/dist/_shared/rich-text-editor-UZghkgsh.cjs.map +0 -1
- package/dist/_shared/rich-text-editor-fUeuK-rY.js +0 -608
- package/dist/_shared/rich-text-editor-fUeuK-rY.js.map +0 -1
- package/dist/_shared/scroll-area-XJLcCczs.js +0 -41
- package/dist/_shared/scroll-area-XJLcCczs.js.map +0 -1
- package/dist/_shared/scroll-area-y8ZJoS97.cjs +0 -2
- package/dist/_shared/scroll-area-y8ZJoS97.cjs.map +0 -1
- package/dist/_shared/select-D8MYF4f7.js +0 -85
- package/dist/_shared/select-D8MYF4f7.js.map +0 -1
- package/dist/_shared/select-DxAiUfpM.cjs +0 -2
- package/dist/_shared/select-DxAiUfpM.cjs.map +0 -1
- package/dist/_shared/separator-BazqiQ9s.js +0 -16
- package/dist/_shared/separator-BazqiQ9s.js.map +0 -1
- package/dist/_shared/separator-DSkXMOXq.cjs +0 -2
- package/dist/_shared/separator-DSkXMOXq.cjs.map +0 -1
- package/dist/_shared/sheet-7iHOs-IU.js +0 -100
- package/dist/_shared/sheet-7iHOs-IU.js.map +0 -1
- package/dist/_shared/sheet-qKtoyxgi.cjs +0 -2
- package/dist/_shared/sheet-qKtoyxgi.cjs.map +0 -1
- package/dist/_shared/sidebar-CaTUJ3t-.js +0 -537
- package/dist/_shared/sidebar-CaTUJ3t-.js.map +0 -1
- package/dist/_shared/sidebar-DVjfsm-f.cjs +0 -2
- package/dist/_shared/sidebar-DVjfsm-f.cjs.map +0 -1
- package/dist/_shared/sidebar-aV5DVAVg.js +0 -371
- package/dist/_shared/sidebar-aV5DVAVg.js.map +0 -1
- package/dist/_shared/sidebar-mL0jSJ8u.cjs +0 -2
- package/dist/_shared/sidebar-mL0jSJ8u.cjs.map +0 -1
- package/dist/_shared/skeleton-Bwv_j9jJ.cjs +0 -2
- package/dist/_shared/skeleton-Bwv_j9jJ.cjs.map +0 -1
- package/dist/_shared/skeleton-DyKa-Ed-.js +0 -14
- package/dist/_shared/skeleton-DyKa-Ed-.js.map +0 -1
- package/dist/_shared/slot-ClIPTht1.cjs +0 -2
- package/dist/_shared/slot-ClIPTht1.cjs.map +0 -1
- package/dist/_shared/slot-CrS_VEVl.js +0 -18
- package/dist/_shared/slot-CrS_VEVl.js.map +0 -1
- package/dist/_shared/smart-card-Ddsjvf7r.cjs +0 -2
- package/dist/_shared/smart-card-Ddsjvf7r.cjs.map +0 -1
- package/dist/_shared/smart-card-hJ01usWt.js +0 -360
- package/dist/_shared/smart-card-hJ01usWt.js.map +0 -1
- package/dist/_shared/spinner-D-pcMBt1.js +0 -67
- package/dist/_shared/spinner-D-pcMBt1.js.map +0 -1
- package/dist/_shared/spinner-zbmhn0vE.cjs +0 -2
- package/dist/_shared/spinner-zbmhn0vE.cjs.map +0 -1
- package/dist/_shared/switch-C5J37LMI.cjs +0 -2
- package/dist/_shared/switch-C5J37LMI.cjs.map +0 -1
- package/dist/_shared/switch-ClGgHcEb.js +0 -51
- package/dist/_shared/switch-ClGgHcEb.js.map +0 -1
- package/dist/_shared/textarea-DeISZfHw.js +0 -119
- package/dist/_shared/textarea-DeISZfHw.js.map +0 -1
- package/dist/_shared/textarea-iR9txrty.cjs +0 -2
- package/dist/_shared/textarea-iR9txrty.cjs.map +0 -1
- package/dist/_shared/tooltip-CEqxHWxQ.js +0 -49
- package/dist/_shared/tooltip-CEqxHWxQ.js.map +0 -1
- package/dist/_shared/tooltip-DPv0LGr9.cjs +0 -2
- package/dist/_shared/tooltip-DPv0LGr9.cjs.map +0 -1
- package/dist/_shared/typography-BtPQBvSm.js +0 -135
- package/dist/_shared/typography-BtPQBvSm.js.map +0 -1
- package/dist/_shared/typography-DClleVWi.cjs +0 -2
- package/dist/_shared/typography-DClleVWi.cjs.map +0 -1
- package/dist/showcase/assets/AreaChart-D-RqNtqG.js +0 -6
- package/dist/showcase/assets/CSPContext-t69BXyB7.js +0 -1
- package/dist/showcase/assets/CompositeItem-DHNLgEeV.js +0 -1
- package/dist/showcase/assets/CompositeRoot-xq_0ZFev.js +0 -1
- package/dist/showcase/assets/DialogTrigger-Cl7n_3xX.js +0 -1
- package/dist/showcase/assets/FormContext-CXdwDz7F.js +0 -1
- package/dist/showcase/assets/PreviewLayout-BHemtKEf.js +0 -1
- package/dist/showcase/assets/RadioGroup-DXAt4VZN.js +0 -1
- package/dist/showcase/assets/Separator-C9vXwWmZ.js +0 -1
- package/dist/showcase/assets/ToolbarRootContext-iF4ctnIz.js +0 -1
- package/dist/showcase/assets/accordion-DzkNgNcB.js +0 -172
- package/dist/showcase/assets/accordion-variants-DP5-oxLe.js +0 -1
- package/dist/showcase/assets/action-menu-CyA2e9TF.js +0 -1
- package/dist/showcase/assets/activities-Dt-dO5ew.js +0 -501
- package/dist/showcase/assets/activities-feed-card-DZdFekXl.js +0 -1
- package/dist/showcase/assets/admin-C2SeJmE7.js +0 -80
- package/dist/showcase/assets/ai-Cwo0h_Xn.js +0 -41
- package/dist/showcase/assets/ai-artifact-3UJofyU5.js +0 -2
- package/dist/showcase/assets/ai-chat-CrFtG_Vg.js +0 -568
- package/dist/showcase/assets/ai-elements-iJ15Y7pS.js +0 -379
- package/dist/showcase/assets/ai-new-DuznZydd.js +0 -167
- package/dist/showcase/assets/ai-tool-call-CTcGGAQU.js +0 -1
- package/dist/showcase/assets/alert-CUGGckOX.js +0 -1
- package/dist/showcase/assets/alert-tWped3Sw.js +0 -59
- package/dist/showcase/assets/api-key-list-Q5LAqzMn.js +0 -73
- package/dist/showcase/assets/arrow-down-CfwCPcHL.js +0 -1
- package/dist/showcase/assets/arrow-left-BKx9qNX6.js +0 -1
- package/dist/showcase/assets/arrow-right-DlEpbqEk.js +0 -1
- package/dist/showcase/assets/arrow-up-BYQ4F9L1.js +0 -1
- package/dist/showcase/assets/arrow-up-right-C8r6vYfE.js +0 -1
- package/dist/showcase/assets/avatar-BuZ3zTbH.js +0 -57
- package/dist/showcase/assets/avatar-DR2mqPpY.js +0 -1
- package/dist/showcase/assets/badge-D1HLfP93.js +0 -28
- package/dist/showcase/assets/badge-check-oP2z_95u.js +0 -1
- package/dist/showcase/assets/bell-BTX2D-ES.js +0 -1
- package/dist/showcase/assets/bot-CKh5XgUG.js +0 -1
- package/dist/showcase/assets/box-F1uaZ6iw.js +0 -1
- package/dist/showcase/assets/brain-dD_ppLUa.js +0 -1
- package/dist/showcase/assets/brand-zisZOFKf.js +0 -40
- package/dist/showcase/assets/breadcrumb-C7vv0L8K.js +0 -52
- package/dist/showcase/assets/breadcrumb-fay5sLba.js +0 -1
- package/dist/showcase/assets/breadcrumbs-DklRXepp.js +0 -1
- package/dist/showcase/assets/briefcase-D9M4aNmi.js +0 -1
- package/dist/showcase/assets/button-DbhXfR1N.js +0 -44
- package/dist/showcase/assets/button-group-BpdhyMif.js +0 -1
- package/dist/showcase/assets/buttons-XexbmUtN.js +0 -259
- package/dist/showcase/assets/calendar-BADJgjpI.js +0 -16
- package/dist/showcase/assets/calendar-Djh3xLVx.js +0 -1
- package/dist/showcase/assets/calendar-dWZ2-0gU.js +0 -1
- package/dist/showcase/assets/card-BUSAPPkx.js +0 -1
- package/dist/showcase/assets/cards-DHBPe01w.js +0 -328
- package/dist/showcase/assets/chart-column-6l5wIZ0h.js +0 -1
- package/dist/showcase/assets/chevron-down-at2vrt1V.js +0 -1
- package/dist/showcase/assets/chevron-left-DIs3WYNO.js +0 -1
- package/dist/showcase/assets/chevron-right-BNy0Or0x.js +0 -1
- package/dist/showcase/assets/chevron-up-CX7619BJ.js +0 -1
- package/dist/showcase/assets/chevrons-up-down-Be6eciau.js +0 -1
- package/dist/showcase/assets/circle-C0Yd1DDS.js +0 -1
- package/dist/showcase/assets/circle-alert-DfQp_X3_.js +0 -1
- package/dist/showcase/assets/circle-check-BkqQe1tv.js +0 -1
- package/dist/showcase/assets/circle-check-big-BXxHUhuc.js +0 -1
- package/dist/showcase/assets/circle-dot-HeRgxZxN.js +0 -1
- package/dist/showcase/assets/circle-question-mark-BgS4fb6N.js +0 -1
- package/dist/showcase/assets/circle-x-CMzwDsaf.js +0 -1
- package/dist/showcase/assets/clock-ynCzs_rR.js +0 -1
- package/dist/showcase/assets/code-xml-B8aVstrJ.js +0 -1
- package/dist/showcase/assets/collapsible-C8CKdiRn.js +0 -27
- package/dist/showcase/assets/collapsible-u43HxDHB.js +0 -1
- package/dist/showcase/assets/combobox-D-6ff0VG.js +0 -622
- package/dist/showcase/assets/command-BsHudlBe.js +0 -1
- package/dist/showcase/assets/command-DZqmBolX.js +0 -45
- package/dist/showcase/assets/comment-composer-OnxlkC5y.js +0 -1
- package/dist/showcase/assets/comment-item-DmZ1AJ2Y.js +0 -1
- package/dist/showcase/assets/comments-BjIVksjE.js +0 -349
- package/dist/showcase/assets/commerce-3T1GxvrA.js +0 -78
- package/dist/showcase/assets/commerce-extras-CYv_uRQR.js +0 -179
- package/dist/showcase/assets/composite-mol0-2zZ.js +0 -1
- package/dist/showcase/assets/contact-card-CWAANJqn.js +0 -65
- package/dist/showcase/assets/content-container-D3Phw6h8.js +0 -1
- package/dist/showcase/assets/copyable-BdzUH3U3.js +0 -96
- package/dist/showcase/assets/course-card-Cb6Y2vJ6.js +0 -113
- package/dist/showcase/assets/cpu-CRrekbGQ.js +0 -1
- package/dist/showcase/assets/credit-card--5vg7bQy.js +0 -1
- package/dist/showcase/assets/currency-VuqnKj_Y.js +0 -149
- package/dist/showcase/assets/dark-surfaces-DEyBimFz.js +0 -90
- package/dist/showcase/assets/database-Bnvw0wVV.js +0 -1
- package/dist/showcase/assets/date-block-IhoCVl_d.js +0 -1
- package/dist/showcase/assets/date-picker-DnJpsnaF.js +0 -1
- package/dist/showcase/assets/date-pickers-CEbieq-R.js +0 -110
- package/dist/showcase/assets/dense-info-B04QmrOd.js +0 -106
- package/dist/showcase/assets/dialog-DotEO3IO.js +0 -1
- package/dist/showcase/assets/display-hK7Dtm-B.js +0 -392
- package/dist/showcase/assets/dist-DQgGKvzA.js +0 -1
- package/dist/showcase/assets/dollar-sign-gJtl-XaL.js +0 -1
- package/dist/showcase/assets/download-CMrNgeil.js +0 -1
- package/dist/showcase/assets/dropdown-menu-Cqv6D7Sb.js +0 -1
- package/dist/showcase/assets/dropzone-v69fWHZJ.js +0 -1
- package/dist/showcase/assets/ellipsis-CgqPlt6Z.js +0 -1
- package/dist/showcase/assets/ellipsis-vertical-CiJqC0n2.js +0 -1
- package/dist/showcase/assets/empty-DYHzk-Gb.js +0 -1
- package/dist/showcase/assets/empty-item-CTwvC_3M.js +0 -49
- package/dist/showcase/assets/empty-state-eUgJ4h41.js +0 -188
- package/dist/showcase/assets/enhanced-activities-XU2u5gO6.js +0 -359
- package/dist/showcase/assets/esm-B7xAMXnv.js +0 -2
- package/dist/showcase/assets/event-calendar-D2rjpzq1.js +0 -138
- package/dist/showcase/assets/event-log-BxER62Ds.js +0 -326
- package/dist/showcase/assets/example-DPfw-R7_.js +0 -1
- package/dist/showcase/assets/external-link-DJNGkjZ0.js +0 -1
- package/dist/showcase/assets/eye-BQU3UqWi.js +0 -1
- package/dist/showcase/assets/feature-announcement-CjGQEODB.js +0 -34
- package/dist/showcase/assets/file-DBpbC8g-.js +0 -1
- package/dist/showcase/assets/file-text-DokBif5V.js +0 -1
- package/dist/showcase/assets/filters-DM2olMKy.js +0 -78
- package/dist/showcase/assets/flag-hAuZbHU1.js +0 -1
- package/dist/showcase/assets/folder-open-DqubQ0ts.js +0 -1
- package/dist/showcase/assets/form-sizing-CfbZF8Ja.js +0 -1
- package/dist/showcase/assets/format-gCABLair.js +0 -1
- package/dist/showcase/assets/forms-FsAT0C-I.js +0 -790
- package/dist/showcase/assets/generic-BUuo7j09.js +0 -1
- package/dist/showcase/assets/getPseudoElementBounds-l8uxcPNL.js +0 -1
- package/dist/showcase/assets/gift-CS7Tg3kD.js +0 -1
- package/dist/showcase/assets/giftcard-cards-h1ffLs9F.js +0 -85
- package/dist/showcase/assets/git-branch-D4-6vv6t.js +0 -1
- package/dist/showcase/assets/global-search-BUyhhsQv.js +0 -90
- package/dist/showcase/assets/globe-CqLYhUfl.js +0 -1
- package/dist/showcase/assets/gradient-card-Bwr9OLIL.js +0 -58
- package/dist/showcase/assets/header-notifications-BWla1yhM.js +0 -1
- package/dist/showcase/assets/heart-DfZtXfIP.js +0 -1
- package/dist/showcase/assets/house-DhIReDt8.js +0 -1
- package/dist/showcase/assets/icon-badge-BgRFYZEc.js +0 -1
- package/dist/showcase/assets/image-D_eNEZWQ.js +0 -1
- package/dist/showcase/assets/inbox-5sFkO7gC.js +0 -1
- package/dist/showcase/assets/index-B-Z7p0So.js +0 -10
- package/dist/showcase/assets/inertValue-NU_Amr-x.js +0 -1
- package/dist/showcase/assets/info-DyB6KH3Z.js +0 -1
- package/dist/showcase/assets/inline-stat-D2aaM1Vt.js +0 -1
- package/dist/showcase/assets/input-BS64kyoq.js +0 -1
- package/dist/showcase/assets/input-DWLyniGt.js +0 -1
- package/dist/showcase/assets/input-group-BS8j5Eek.js +0 -47
- package/dist/showcase/assets/input-group-B_E_3EGS.js +0 -1
- package/dist/showcase/assets/inputs-DOQ2foig.js +0 -49
- package/dist/showcase/assets/invoice-header-C2-uQE_s.js +0 -36
- package/dist/showcase/assets/invoice-items-BUunRJqA.js +0 -36
- package/dist/showcase/assets/invoice-mini-BrLMrzN6.js +0 -14
- package/dist/showcase/assets/invoice-table-CaB9Z8jI.js +0 -30
- package/dist/showcase/assets/isSameDay-rwvIyLOL.js +0 -1
- package/dist/showcase/assets/isToday-CIAzBrb5.js +0 -1
- package/dist/showcase/assets/italic-B02a4PdD.js +0 -1
- package/dist/showcase/assets/item-C-0RObvI.js +0 -117
- package/dist/showcase/assets/item-CCu0Ufaq.js +0 -1
- package/dist/showcase/assets/item-DF4m_56j.js +0 -1
- package/dist/showcase/assets/kanban-BgW23a7P.js +0 -175
- package/dist/showcase/assets/label-MdV7pglj.js +0 -1
- package/dist/showcase/assets/layout-containers-nKVReEJB.js +0 -96
- package/dist/showcase/assets/layout-header-CKyxHHPC.js +0 -170
- package/dist/showcase/assets/layout-page-ClD2yMnK.js +0 -122
- package/dist/showcase/assets/layout-sidebar-jdQnYDiT.js +0 -224
- package/dist/showcase/assets/layout-users-Cv849xnU.js +0 -104
- package/dist/showcase/assets/lib-BHW4JERQ.js +0 -1
- package/dist/showcase/assets/lock-B8bfl9sZ.js +0 -1
- package/dist/showcase/assets/mail-DmOBTX4I.js +0 -1
- package/dist/showcase/assets/map-ButgRl8f.js +0 -124
- package/dist/showcase/assets/map-pin-o3egisLq.js +0 -1
- package/dist/showcase/assets/menus-DdXgYKVA.js +0 -89
- package/dist/showcase/assets/message-square-Bl6P4TA0.js +0 -1
- package/dist/showcase/assets/metadata-list-aXo96h_U.js +0 -278
- package/dist/showcase/assets/metric-BLHKuZtE.js +0 -1
- package/dist/showcase/assets/metric-grid-6Dpj5eV3.js +0 -1
- package/dist/showcase/assets/metric-trend-chip-m389ipmG.js +0 -1
- package/dist/showcase/assets/metrics-analytics-bar-B-1IUlHf.js +0 -44
- package/dist/showcase/assets/metrics-analytics-cards-B8tvK_RB.js +0 -77
- package/dist/showcase/assets/metrics-comparison-DKJ7Js3F.js +0 -76
- package/dist/showcase/assets/metrics-heatmap-BlRnJoI0.js +0 -27
- package/dist/showcase/assets/metrics-inline-badge-COI7f64X.js +0 -17
- package/dist/showcase/assets/metrics-kpi-row-LRfmKhsy.js +0 -31
- package/dist/showcase/assets/metrics-micro-grid-DmqIQVVR.js +0 -42
- package/dist/showcase/assets/metrics-overview-Dbf5RM2k.js +0 -192
- package/dist/showcase/assets/metrics-stat-cards-D5oevQvv.js +0 -54
- package/dist/showcase/assets/minus-D-jmUi0G.js +0 -1
- package/dist/showcase/assets/money-display-C__61373.js +0 -1
- package/dist/showcase/assets/month-year-picker-BfBQePUY.js +0 -1
- package/dist/showcase/assets/navigation-DUAe-sQV.js +0 -86
- package/dist/showcase/assets/navigation-extras-itSAf6QT.js +0 -43
- package/dist/showcase/assets/navigation-fAOvwIlP.js +0 -230
- package/dist/showcase/assets/onboarding-checklist-1gmzk3_J.js +0 -119
- package/dist/showcase/assets/overlays-BMTBOIEI.js +0 -88
- package/dist/showcase/assets/overlays-Lu16yJWM.js +0 -393
- package/dist/showcase/assets/package-BIa1hPVQ.js +0 -1
- package/dist/showcase/assets/page-action-button-C5NiQHnP.js +0 -1
- package/dist/showcase/assets/page-header-Cwf9DuhD.js +0 -1
- package/dist/showcase/assets/pagination-9iSNmdCx.js +0 -1
- package/dist/showcase/assets/pagination-MjniF-7j.js +0 -42
- package/dist/showcase/assets/paperclip-CaNLUOIA.js +0 -1
- package/dist/showcase/assets/pencil-DTLGPoc_.js +0 -1
- package/dist/showcase/assets/phone-XvU6LndA.js +0 -1
- package/dist/showcase/assets/plus-BDSCn8ol.js +0 -1
- package/dist/showcase/assets/popover-CvhuubS6.js +0 -1
- package/dist/showcase/assets/popover-DUQqLZN2.js +0 -1
- package/dist/showcase/assets/popover-menu-DVGBuFpL.js +0 -1
- package/dist/showcase/assets/progress-BQopCRpV.js +0 -1
- package/dist/showcase/assets/progress-CvSUR260.js +0 -18
- package/dist/showcase/assets/props-table-BzUnIcv-.js +0 -1
- package/dist/showcase/assets/quote-D55lkoXn.js +0 -1
- package/dist/showcase/assets/receipt-D3ilhl9U.js +0 -1
- package/dist/showcase/assets/refresh-cw-Csl2LQ4l.js +0 -1
- package/dist/showcase/assets/resolveValueLabel-CM5i142y.js +0 -1
- package/dist/showcase/assets/rich-text-editor-Bz7jWvPv.js +0 -124
- package/dist/showcase/assets/rich-text-editor-DWKFpgNI.js +0 -141
- package/dist/showcase/assets/rotate-ccw-BnkpK7eq.js +0 -1
- package/dist/showcase/assets/scroll-area-BTVLd58j.js +0 -1
- package/dist/showcase/assets/scroll-area-CgFEDepJ.js +0 -32
- package/dist/showcase/assets/select-B7-tZDlG.js +0 -1
- package/dist/showcase/assets/send-BhjEdZ06.js +0 -1
- package/dist/showcase/assets/separator-CJayjKGP.js +0 -28
- package/dist/showcase/assets/separator-CZ_sPWQj.js +0 -1
- package/dist/showcase/assets/settings-Duj7gAZe.js +0 -1
- package/dist/showcase/assets/sheet-BMabZ_Gj.js +0 -1
- package/dist/showcase/assets/shield-C22sWOf4.js +0 -1
- package/dist/showcase/assets/shield-alert-DgZ6UO46.js +0 -1
- package/dist/showcase/assets/shield-check-jGSgmijm.js +0 -1
- package/dist/showcase/assets/shopping-bag-Cd09Ga6D.js +0 -1
- package/dist/showcase/assets/sidebar.context-CXTHS3vn.js +0 -1
- package/dist/showcase/assets/skeleton-Dmp4eC1A.js +0 -1
- package/dist/showcase/assets/skeleton-FLNbc7QP.js +0 -29
- package/dist/showcase/assets/smart-card-50WN9sCI.js +0 -1
- package/dist/showcase/assets/sonner-DR_DYpqb.js +0 -22
- package/dist/showcase/assets/sortable.esm-C_l8_Iqt.js +0 -5
- package/dist/showcase/assets/sparkles-C-fyahzv.js +0 -1
- package/dist/showcase/assets/spinner-B8jgVQNj.js +0 -30
- package/dist/showcase/assets/spinner-C4zPRpI0.js +0 -49
- package/dist/showcase/assets/spinner-DFjHsQlR.js +0 -1
- package/dist/showcase/assets/square-pen-Dp7lCfI3.js +0 -1
- package/dist/showcase/assets/stacked-avatars-CTckbUiW.js +0 -1
- package/dist/showcase/assets/star-l00ivfkD.js +0 -1
- package/dist/showcase/assets/startOfDay-Xmododib.js +0 -1
- package/dist/showcase/assets/styles-zuwR0q1z.js +0 -1
- package/dist/showcase/assets/switch-D3LrIrTQ.js +0 -1
- package/dist/showcase/assets/switch-ylXVyh_N.js +0 -1
- package/dist/showcase/assets/table-Cn3-19zb.js +0 -1
- package/dist/showcase/assets/table-ao3IcAnF.js +0 -390
- package/dist/showcase/assets/tabs-CTLQKtiu.js +0 -19
- package/dist/showcase/assets/tabs-lc1fX94A.js +0 -1
- package/dist/showcase/assets/text-button-Fu8UY1A8.js +0 -1
- package/dist/showcase/assets/text-link--EyGasJN.js +0 -1
- package/dist/showcase/assets/textarea-BdhnlNrF.js +0 -1
- package/dist/showcase/assets/textarea-D1kG3a9B.js +0 -1
- package/dist/showcase/assets/timelines-DF3tNgyG.js +0 -186
- package/dist/showcase/assets/toggle-group-CfxuWsv9.js +0 -1
- package/dist/showcase/assets/toggles-CacdBPlV.js +0 -71
- package/dist/showcase/assets/toggles-group-CRhgTGmL.js +0 -32
- package/dist/showcase/assets/trash-2-B0_GprQM.js +0 -1
- package/dist/showcase/assets/trending-up-B202l1b6.js +0 -1
- package/dist/showcase/assets/truck-Bl1pNrHi.js +0 -1
- package/dist/showcase/assets/typography-DEtOxBlR.js +0 -214
- package/dist/showcase/assets/ui-badge-n4RA0J5b.js +0 -28
- package/dist/showcase/assets/ui-card-Ck-kzrTh.js +0 -30
- package/dist/showcase/assets/ui-table-gzOp82pf.js +0 -42
- package/dist/showcase/assets/upload-tray-VvKdTZSi.js +0 -138
- package/dist/showcase/assets/useAnchoredPopupScrollLock-Cu2ZwN7Z.js +0 -1
- package/dist/showcase/assets/useCollapsiblePanel-C6_cdQ7B.js +0 -1
- package/dist/showcase/assets/useCompositeItem-BfUPqXoj.js +0 -1
- package/dist/showcase/assets/useCompositeListItem-Cf2lpKB8.js +0 -1
- package/dist/showcase/assets/useControlled-C6q3nmcf.js +0 -1
- package/dist/showcase/assets/useLabelableId-CfPT16c1.js +0 -1
- package/dist/showcase/assets/useOpenInteractionType-CGeqRuuY.js +0 -1
- package/dist/showcase/assets/useRender-CoUlh0uZ.js +0 -1
- package/dist/showcase/assets/useRole-DSPUSyVX.js +0 -1
- package/dist/showcase/assets/useTriggerFocusGuards-BwZ1HD24.js +0 -1
- package/dist/showcase/assets/useValueChanged-Dej794I1.js +0 -1
- package/dist/showcase/assets/user-3L762Mec.js +0 -1
- package/dist/showcase/assets/user-plus-9WRYjS04.js +0 -1
- package/dist/showcase/assets/users-CxKZ7gt8.js +0 -1
- package/dist/showcase/assets/vendor-profile-BaCptdMF.js +0 -37
- package/dist/showcase/assets/wrench-Duh91tnW.js +0 -1
- package/dist/showcase/assets/x-t42iKYpL.js +0 -1
- package/dist/showcase/assets/zap-D0z3Tv_L.js +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { useStrings as e } from "../../../lib/strings.js";
|
|
2
2
|
import { cn as t } from "../../../lib/utils.js";
|
|
3
3
|
import { t as n } from "../../../_shared/text-DIxMTECE.js";
|
|
4
|
-
import { t as r } from "../../../_shared/badge-
|
|
5
|
-
import { t as i } from "../../../_shared/smart-card-
|
|
4
|
+
import { t as r } from "../../../_shared/badge-BVCh_hfL.js";
|
|
5
|
+
import { t as i } from "../../../_shared/smart-card-MT6JjkoI.js";
|
|
6
6
|
import { Fragment as a, jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
7
7
|
import { Activity as c, Check as l, Circle as u, Clock as d, Flag as f, GitCommit as p, Loader2 as m, Minus as h, Plus as g, Wrench as _, X as v } from "lucide-react";
|
|
8
8
|
//#region src/components/composed/timelines/steps-card/steps-card.tsx
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`../../../_shared/chunk-D3uCBrYO.cjs`);const e=require(`../../../_shared/ui-provider-uiQgATj1.cjs`),t=require(`../../../lib/utils.cjs`),n=require(`../../../_shared/text-DBnY6fcL.cjs`),r=require(`../../../_shared/badge-BjtDcU1M.cjs`),i=require(`../../../_shared/button-DjacsNTg.cjs`),a=require(`../../../_shared/smart-card-Ddsjvf7r.cjs`),o=require(`../../../_shared/dropdown-menu-BebBffUH.cjs`);let s=require(`react`),c=require(`date-fns`),l=require(`react/jsx-runtime`),u=require(`lucide-react`);var d={icon:u.CircleDot,tone:`neutral`},f={created:{icon:u.Plus,tone:`success`,label:`Created`},updated:{icon:u.Pencil,tone:`info`,label:`Updated`},edited:{icon:u.FileEdit,tone:`info`,label:`Edited`},deleted:{icon:u.Trash2,tone:`destructive`,label:`Deleted`},cancelled:{icon:u.Ban,tone:`destructive`,label:`Cancelled`},restored:{icon:u.Sparkles,tone:`success`,label:`Restored`},status_changed:{icon:u.ArrowLeftRight,tone:`primary`,label:`Status changed`},status_transition:{icon:u.ArrowLeftRight,tone:`primary`,label:`Status changed`},status_override:{icon:u.ArrowLeftRight,tone:`warning`,label:`Status overridden`},assigned:{icon:u.UserPlus,tone:`info`,label:`Assigned`},unassigned:{icon:u.UserMinus,tone:`destructive`,label:`Unassigned`},mail_sent:{icon:u.Mail,tone:`info`,label:`Email sent`},mail_delivered:{icon:u.MailCheck,tone:`success`,label:`Email delivered`},mail_opened:{icon:u.MailOpen,tone:`info`,label:`Email opened`},mail_clicked:{icon:u.MailOpen,tone:`info`,label:`Email clicked`},mail_bounced:{icon:u.MailX,tone:`destructive`,label:`Email bounced`},mail_failed:{icon:u.MailX,tone:`destructive`,label:`Email failed`},comment_created:{icon:u.MessageSquare,tone:`warning`,label:`Comment posted`},comment_deleted:{icon:u.MessageSquare,tone:`destructive`,label:`Comment deleted`},paid:{icon:u.Check,tone:`success`,label:`Paid`},refunded:{icon:u.ArrowLeftRight,tone:`warning`,label:`Refunded`},confirmed:{icon:u.ShieldCheck,tone:`success`,label:`Confirmed`},favorited:{icon:u.Heart,tone:`warning`,label:`Favorited`},ordered:{icon:u.ShoppingBag,tone:`primary`,label:`Order placed`},published:{icon:u.Star,tone:`success`,label:`Published`},flagged:{icon:u.Flag,tone:`warning`,label:`Flagged`},linked:{icon:u.LinkIcon,tone:`info`,label:`Linked`},failed:{icon:u.AlertTriangle,tone:`destructive`,label:`Failed`},health_check_failed:{icon:u.AlertTriangle,tone:`destructive`,label:`Health check failed`}};function p(e,t){return t[e]??d}var m={title:`Activity`,empty:`No activity yet.`,loading:`Loading activity…`,today:`Today`,yesterday:`Yesterday`,undated:`Undated`,you:`You`,showChanges:`Show changes`,hideChanges:`Hide changes`,actionsLabel:`Activity actions`,moreLabel:`More`,sources:{comment:`Comment`,mail:`Mail`,booking_log:`Booking log`,activity_log:``,system:`System`},events:{}};function h(e,t){return e.replace(/\{\{\s*(\w+)\s*\}\}/g,(e,n)=>{let r=t[n];return r===void 0?e:String(r)})}function g(e,t,n){if(!e)return t.undated;let r=new Date(e);if((0,c.isToday)(r))return t.today;if((0,c.isYesterday)(r))return t.yesterday;try{return new Intl.DateTimeFormat(n,{year:`numeric`,month:`long`,day:`numeric`}).format(r)}catch{return new Intl.DateTimeFormat(void 0,{year:`numeric`,month:`long`,day:`numeric`}).format(r)}}function _({activities:e,groupByDate:t=!0,expandedByDefault:n=!1,locale:r,strings:i,formatDateGroupLabel:a}){let[o,c]=(0,s.useState)({}),l=(0,s.useMemo)(()=>{let t=new Map;return e.map(e=>{let n=[String(e.id??``).trim(),String(e.createdAt??``).trim(),String(e.event??``).trim(),String(e.source??``).trim()].join(`:`),r=(t.get(n)??0)+1;return t.set(n,r),{activity:e,key:`${n}:${r}`}})},[e]),u=(0,s.useMemo)(()=>{if(!t)return l.length>0?[{label:``,items:l}]:[];let e=[],n=`__init__`,o=[],s=e=>a?a(e,i):g(e,i,r);for(let t of l){let r=s(t.activity.createdAt??null);r===n?o.push(t):(o.length>0&&e.push({label:n,items:o}),n=r,o=[t])}return o.length>0&&e.push({label:n,items:o}),e},[l,t,r,i,a]),d=(0,s.useCallback)(e=>o[e]??n,[o,n]),f=(0,s.useCallback)(e=>{c(t=>({...t,[e]:!(t[e]??!1)}))},[]),p=(0,s.useCallback)((e,t)=>{c(n=>({...n,[e]:t}))},[]),m=(0,s.useCallback)(()=>{let e={};for(let t of l)e[t.activity.id]=!0;c(e)},[l]),h=(0,s.useCallback)(()=>c({}),[]);return{groups:u,total:l.length,isExpanded:d,toggleExpanded:f,setExpanded:p,expandAll:m,collapseAll:h}}function v({resources:e,onResourcesChange:t}={}){let[n,r]=(0,s.useState)(()=>e??{}),i=(0,s.useRef)(e);(0,s.useEffect)(()=>{e!==i.current&&(i.current=e,r(e??{}))},[e]);let a=(0,s.useRef)(t);(0,s.useEffect)(()=>{a.current=t},[t]);let o=(0,s.useCallback)(e=>{a.current?.(e)},[]),c=(0,s.useCallback)((e,t)=>{r(n=>{let r={...n,[e]:t};return o(r),r})},[o]),l=(0,s.useCallback)((e,t)=>{r(n=>{let r=n[e];if(!r)return n;let i={...n,[e]:{...r,...t}};return o(i),i})},[o]),u=(0,s.useCallback)(e=>{r(t=>{if(!(e in t))return t;let n={...t};return delete n[e],o(n),n})},[o]),d=(0,s.useCallback)(e=>{r(e),o(e)},[o]),f=(0,s.useCallback)(()=>{let e=i.current??{};r(e),o(e)},[o]);return{registry:n,get:(0,s.useCallback)(e=>n[typeof e==`string`?e:e.key],[n]),register:c,update:l,remove:u,setAll:d,reset:f}}function y({activity:e,actions:t,onAction:n,label:r}){return t.length===0?null:(0,l.jsxs)(o.t,{children:[(0,l.jsx)(o.g,{render:e=>(0,l.jsx)(i.t,{...e,type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`icon-sm`,"aria-label":r,className:`h-7 w-7 text-muted-foreground`,children:(0,l.jsx)(u.MoreHorizontal,{className:`size-4`})})}),(0,l.jsx)(o.r,{align:`end`,className:`min-w-[160px]`,children:t.map(t=>{let r=t.icon;return(0,l.jsxs)(o.a,{onClick:()=>{t.disabled||(t.onClick(e),n?.(t.id,e))},disabled:t.disabled,variant:t.tone===`destructive`?`destructive`:`default`,className:`gap-2 px-2 py-1.5 text-xs`,children:[!!r&&(0,l.jsx)(r,{className:`size-3.5`}),t.label]},t.id)})})]})}function b({change:e}){let t=e.old!==null&&e.old!==void 0,r=e.new!==null&&e.new!==void 0;return!t&&!r?(0,l.jsx)(n.t,{size:`xs`,tag:`span`,children:e.description}):(0,l.jsxs)(n.t,{tag:`span`,size:`xs`,className:`inline-flex flex-wrap items-baseline gap-1`,children:[!!t&&(0,l.jsx)(n.t,{tag:`span`,size:`xs`,className:`rounded bg-destructive/10 text-destructive line-through px-1 py-px`,children:e.old}),t&&r&&(0,l.jsx)(n.t,{tag:`span`,size:`xs`,type:`secondary`,children:`→`}),!!r&&(0,l.jsx)(n.t,{tag:`span`,size:`xs`,className:`rounded bg-success/15 text-success px-1 py-px`,children:e.new})]})}function x({changes:e,className:r}){return e.length===0?null:(0,l.jsx)(`div`,{className:t.cn(`space-y-1.5 rounded-lg border border-border/60 bg-muted/30 px-3 py-2`,r),children:e.map(e=>(0,l.jsxs)(`div`,{className:`flex items-baseline gap-2`,children:[(0,l.jsx)(n.t,{size:`xs`,type:`secondary`,weight:`medium`,className:`shrink-0`,children:e.label}),(0,l.jsx)(b,{change:e})]},`${e.key}-${e.label}`))})}function S({label:e,isFirst:r,className:i}){return e===``?null:(0,l.jsx)(n.t,{size:`xxs`,type:`secondary`,weight:`medium`,className:t.cn(`uppercase tracking-wider`,!r&&`mt-5`,i),children:e})}function C({title:e,hint:r,className:i}){return(0,l.jsxs)(`div`,{className:t.cn(`flex flex-col items-center justify-center gap-2 px-6 py-10 text-center`,i),children:[(0,l.jsx)(`span`,{className:`flex size-9 items-center justify-center rounded-full bg-muted text-muted-foreground`,children:(0,l.jsx)(u.Activity,{className:`size-4`})}),(0,l.jsx)(n.t,{weight:`medium`,children:e}),!!r&&(0,l.jsx)(n.t,{size:`xs`,type:`secondary`,children:r})]})}var w={primary:{bg:`bg-primary/15`,fg:`text-primary`,dot:`bg-primary`,line:`bg-primary/30`,chipBg:`bg-primary/10`,chipFg:`text-primary`},success:{bg:`bg-success/15`,fg:`text-success`,dot:`bg-success`,line:`bg-success/30`,chipBg:`bg-success/15`,chipFg:`text-success`},warning:{bg:`bg-warning/30`,fg:`text-warning-foreground`,dot:`bg-warning`,line:`bg-warning/40`,chipBg:`bg-warning/30`,chipFg:`text-warning-foreground`},destructive:{bg:`bg-destructive/15`,fg:`text-destructive`,dot:`bg-destructive`,line:`bg-destructive/30`,chipBg:`bg-destructive/15`,chipFg:`text-destructive`},info:{bg:`bg-info/15`,fg:`text-info`,dot:`bg-info`,line:`bg-info/30`,chipBg:`bg-info/15`,chipFg:`text-info`},neutral:{bg:`bg-muted`,fg:`text-muted-foreground`,dot:`bg-muted-foreground/60`,line:`bg-border`,chipBg:`bg-muted`,chipFg:`text-muted-foreground`}},T={primary:`primary`,success:`success`,warning:`warning`,destructive:`destructive`,info:`info`,neutral:`secondary`};function E({resource:e,config:i,fallbackText:a,onClick:o}){let s=w[i?.tone??`neutral`],c=i?.icon??u.CircleDot,d=i?.label??a??e.label??e.key,f=typeof o==`function`,p=(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(c,{className:t.cn(`size-3 shrink-0`,s.fg)}),(0,l.jsx)(n.t,{tag:`span`,size:`xs`,weight:`medium`,className:s.chipFg,children:d}),!!i?.tags&&i.tags.length>0&&(0,l.jsx)(n.t,{tag:`span`,size:`xxs`,type:`secondary`,className:`border-l border-current/20 pl-1.5 ml-0.5`,children:i.tags.join(` · `)}),!!i?.badge&&(0,l.jsx)(r.t,{inline:!0,variant:T[i.badge.tone??`neutral`],className:`ml-1`,children:i.badge.label})]}),m=t.cn(`inline-flex items-center gap-1 rounded-full px-2 py-0.5 align-baseline`,`border border-border/60`,s.chipBg,f&&`cursor-pointer transition-colors hover:bg-foreground/5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring`);return f?(0,l.jsx)(`button`,{type:`button`,onClick:e=>{e.stopPropagation(),o?.()},className:m,title:i?.note,children:p}):(0,l.jsx)(`span`,{className:m,title:i?.note,children:p})}function D({actorId:e,text:t,href:r,activity:i,youLabel:a,currentUserId:o,onActorClick:s}){let c=o!==void 0&&e!==void 0&&o===e?a:t,u=i.actor??{id:e,name:t};return r?(0,l.jsx)(`a`,{href:r,onClick:e=>{s&&(e.preventDefault(),e.stopPropagation(),s(u,i))},className:`font-semibold text-foreground underline-offset-2 hover:underline`,children:c}):s?(0,l.jsx)(`button`,{type:`button`,onClick:e=>{e.stopPropagation(),s(u,i)},className:`font-semibold text-foreground underline-offset-2 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded`,children:c}):(0,l.jsx)(n.t,{tag:`span`,weight:`semibold`,children:c})}function O(e,t){return e.map((e,i)=>{let a=`seg-${i}-${e.type}`;switch(e.type){case`actor`:return(0,l.jsxs)(s.Fragment,{children:[(0,l.jsx)(D,{actorId:e.actorId,text:e.text,href:e.href,activity:t.activity,youLabel:t.youLabel,currentUserId:t.currentUserId,onActorClick:t.onActorClick}),` `]},a);case`field`:case`value`:return(0,l.jsxs)(s.Fragment,{children:[(0,l.jsx)(n.t,{tag:`span`,weight:`semibold`,children:e.text}),` `]},a);case`status`:return(0,l.jsxs)(s.Fragment,{children:[(0,l.jsx)(r.t,{inline:!0,variant:T[e.tone??`neutral`],children:e.text}),` `]},a);case`resource`:{let n=t.getResourceConfig?.(e.resource);return(0,l.jsxs)(s.Fragment,{children:[(0,l.jsx)(E,{resource:e.resource,config:n,fallbackText:e.text,onClick:t.onResourceClick?()=>t.onResourceClick?.(e.resource,n,t.activity):void 0}),` `]},a)}default:return(0,l.jsxs)(s.Fragment,{children:[(0,l.jsx)(n.t,{tag:`span`,children:e.text}),` `]},a)}})}function k(e){let{activity:t}=e,r=t.headline??t.event,i=t.actor?.name;if(!i||!r.includes(i))return(0,l.jsx)(n.t,{tag:`span`,children:r});let[a,...o]=r.split(i);return(0,l.jsxs)(l.Fragment,{children:[!!a&&(0,l.jsx)(n.t,{tag:`span`,children:a}),(0,l.jsx)(D,{actorId:t.actor?.id,text:i,href:t.actor?.href,activity:t,youLabel:e.youLabel,currentUserId:e.currentUserId,onActorClick:e.onActorClick}),o.length>0&&(0,l.jsx)(n.t,{tag:`span`,children:o.join(i)})]})}function A(e){let t=e.activity.segments;return t&&t.length>0?(0,l.jsx)(`span`,{className:`leading-snug [&>span]:leading-snug`,children:O(t,e)}):(0,l.jsx)(`span`,{className:`leading-snug`,children:k(e)})}function j({icon:e,tone:n,density:r,isLast:i}){let a=w[n];return r===`compact`?(0,l.jsxs)(`div`,{className:`flex flex-col items-center`,children:[(0,l.jsx)(`span`,{"aria-hidden":!0,className:t.cn(`mt-1.5 size-2 shrink-0 rounded-full`,a.dot)}),!i&&(0,l.jsx)(`span`,{"aria-hidden":!0,className:t.cn(`mt-1 w-px flex-1`,a.line)})]}):r===`rich`?(0,l.jsxs)(`div`,{className:`flex flex-col items-center`,children:[(0,l.jsx)(`span`,{className:t.cn(`flex size-7 shrink-0 items-center justify-center rounded-full ring-1 ring-border/60`,a.bg,a.fg),children:(0,l.jsx)(e,{className:`size-3.5`})}),!i&&(0,l.jsx)(`span`,{"aria-hidden":!0,className:t.cn(`mt-1 w-px flex-1`,a.line)})]}):(0,l.jsxs)(`div`,{className:`flex flex-col items-center`,children:[(0,l.jsx)(`span`,{className:t.cn(`flex size-5 shrink-0 items-center justify-center rounded-full`,a.bg,a.fg),children:(0,l.jsx)(e,{className:`size-3`})}),!i&&(0,l.jsx)(`span`,{"aria-hidden":!0,className:t.cn(`mt-1 w-px flex-1`,a.line)})]})}function M(e){let{activity:a,density:o,eventConfig:s,tone:c,isLast:d,expanded:f,onToggleExpanded:p,relativeTime:m,absoluteTime:h,sourceLabel:g,youLabel:_,showChangesLabel:v,hideChangesLabel:b,actionsLabel:S,currentUserId:C,actions:w,onActivityClick:T,onActorClick:D,onResourceClick:O,onAction:k,getResourceConfig:M,headlineOverride:N,markerOverride:P}=e,F=a.iconOverride??s.icon,I=(a.changes?.length??0)>0,L=(a.metadata?.length??0)>0,R=(a.resources?.length??0)>0,z=a.description!==void 0&&a.description!==null&&a.description!==``,B=o!==`compact`,V=o===`rich`,H=N??(0,l.jsx)(A,{activity:a,currentUserId:C,youLabel:_,onActorClick:D,onResourceClick:O,getResourceConfig:M}),U=P??(0,l.jsx)(j,{icon:F,tone:c,density:o,isLast:d}),W=typeof T==`function`;return(0,l.jsxs)(`div`,{className:t.cn(`relative flex gap-3`,W&&`cursor-pointer rounded-md hover:bg-muted/40`),onClick:W?()=>T?.(a):void 0,role:W?`button`:void 0,tabIndex:W?0:void 0,onKeyDown:W?e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),T?.(a))}:void 0,children:[U,(0,l.jsxs)(`div`,{className:t.cn(`min-w-0 flex-1`,!d&&(o===`rich`?`pb-4`:o===`compact`?`pb-2.5`:`pb-3`)),children:[(0,l.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,l.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-x-1.5 gap-y-1`,children:[(0,l.jsx)(n.t,{tag:`span`,lineHeight:`snug`,children:H}),!!g&&(0,l.jsx)(r.t,{inline:!0,variant:`secondary`,children:g}),V&&I&&(0,l.jsx)(i.t,{type:`button`,size:`icon-xs`,variant:`secondary`,buttonStyle:`ghost`,className:`h-5 w-5 text-muted-foreground`,onClick:e=>{e.stopPropagation(),p()},title:f?b:v,"aria-label":f?b:v,"aria-expanded":f,children:f?(0,l.jsx)(u.ChevronDown,{className:`size-3.5`}):(0,l.jsx)(u.ChevronRight,{className:`size-3.5`})})]}),(0,l.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1`,children:[!!m&&(0,l.jsx)(n.t,{size:`xs`,type:`secondary`,className:`whitespace-nowrap tabular-nums pt-0.5`,title:h??void 0,children:m}),V&&w.length>0&&(0,l.jsx)(y,{activity:a,actions:w,onAction:k,label:S})]})]}),!!B&&z&&(0,l.jsx)(n.t,{tag:`div`,size:`xs`,type:`secondary`,className:`mt-1`,children:a.description}),!!V&&L&&a.metadata&&(0,l.jsx)(`div`,{className:`mt-2 flex flex-wrap gap-x-3 gap-y-1`,children:a.metadata.map(e=>(0,l.jsxs)(n.t,{size:`xs`,type:`secondary`,children:[(0,l.jsxs)(n.t,{tag:`span`,size:`xs`,type:`discrete`,children:[e.label,`:`,` `]}),e.value]},e.label))}),!!V&&R&&a.resources&&(0,l.jsx)(`div`,{className:`mt-2 flex flex-wrap gap-1.5`,children:a.resources.map(e=>{let t=M?.(e);return(0,l.jsx)(E,{resource:e,config:t,onClick:O?()=>O(e,t,a):void 0},e.key)})}),!!V&&I&&f&&a.changes&&(0,l.jsx)(`div`,{className:`mt-2`,children:(0,l.jsx)(x,{changes:a.changes})})]})]})}function N(e,t){try{return new Intl.DateTimeFormat(t,{dateStyle:`medium`,timeStyle:`short`}).format(new Date(e))}catch{return e}}function P(e,t){return e.toneOverride??t}function F(r){let{activities:i=[],density:a=`default`,groupByDate:o=!0,expandedByDefault:c=!1,currentUserId:u,loading:d=!1,eventConfig:h,strings:g,slots:y,className:b,locale:x,formatRelativeTime:w,formatAbsoluteTime:T,formatDateGroupLabel:E,getEventLabel:D,getSourceLabel:O,actionsForActivity:k,onActivityClick:A,onActorClick:j,onResourceClick:F,onAction:I,resources:L,onResourcesChange:R}=r,z=(0,s.useMemo)(()=>({...m,...g,sources:{...m.sources,...g?.sources??{}},events:{...m.events,...g?.events??{}}}),[g]),B=(0,s.useMemo)(()=>({...f,...h}),[h]),V=v({resources:L,onResourcesChange:R}),H=_({activities:i,groupByDate:o,expandedByDefault:c,locale:x,strings:z,formatDateGroupLabel:E}),{formatRelativeTime:U}=e.a(),W=w??U??(e=>e),G=T??(e=>N(e,x));if(d)return(0,l.jsx)(`div`,{className:t.cn(`activities-feed--component`,`px-2 py-4`,b),children:y?.loading??(0,l.jsx)(n.t,{type:`secondary`,align:`center`,children:z.loading})});if(i.length===0)return(0,l.jsx)(`div`,{className:t.cn(`px-2 py-2`,b),children:y?.empty??(0,l.jsx)(C,{title:z.empty})});let K=H.groups.reduce((e,t)=>e+t.items.length,0),q=0;return(0,l.jsxs)(`div`,{className:t.cn(`flex flex-col`,b),children:[!!y?.header&&(0,l.jsx)(`div`,{className:`mb-3`,children:y.header}),(0,l.jsx)(`div`,{className:`flex flex-col`,children:H.groups.map((e,n)=>{let r=n===0;return(0,l.jsxs)(`div`,{className:t.cn(r?``:`mt-1`),children:[y?.renderDateLabel?y.renderDateLabel(e.label,r):(0,l.jsx)(S,{label:e.label,isFirst:r,className:r?``:`mb-2`}),(0,l.jsx)(`div`,{className:t.cn(`flex flex-col`,!!e.label&&`mt-2`),children:e.items.map((e,t)=>{let n=e.activity,r=t===0,i=++q===K,o=p(n.event,B),s=P(n,o.tone),c=n.timestamp??(n.createdAt?W(n.createdAt):null),d=n.createdAt?G(n.createdAt):null,f=n.source?O?.(n.source)??z.sources[n.source]??o.sourceLabel??null:o.sourceLabel??null,m=f&&f.trim().length>0?f:null,h=k?.(n)??[],g={density:a,isLast:i,isFirstInGroup:r,activity:n,eventConfig:o,tone:s,relativeTime:c,absoluteTime:d,sourceLabel:m,expanded:H.isExpanded(n.id),toggleExpanded:()=>H.toggleExpanded(n.id)},_=y?.renderRow?.(n,g);if(_!==void 0)return(0,l.jsx)(`div`,{children:_},e.key);let v=y?.renderHeadline?.(n,g),b=y?.renderMarker?.(n,g);return(0,l.jsx)(M,{activity:n,density:a,eventConfig:o,tone:s,isLast:i,expanded:g.expanded,onToggleExpanded:g.toggleExpanded,relativeTime:c,absoluteTime:d,sourceLabel:m,youLabel:z.you,showChangesLabel:z.showChanges,hideChangesLabel:z.hideChanges,actionsLabel:z.actionsLabel,currentUserId:u,actions:h,onActivityClick:A,onActorClick:j,onResourceClick:F,onAction:I,getResourceConfig:e=>V.get(e),headlineOverride:v,markerOverride:b},e.key)})})]},`${e.label}-${n}`)})}),!!y?.footer&&(0,l.jsx)(`div`,{className:`mt-3`,children:y.footer})]})}F.displayName=`ActivityFeed`;function I({title:e,titleSuffix:t,description:n,padding:r=`base`,composerSlot:i,className:o,strings:s,slots:c,...d}){let f={...m,...s,sources:{...m.sources,...s?.sources??{}},events:{...m.events,...s?.events??{}}},p=e??f.title;return(0,l.jsx)(a.t,{icon:(0,l.jsx)(u.Activity,{className:`size-4`}),title:p,titleSuffix:t,description:n,padding:r,className:o,children:(0,l.jsx)(F,{...d,strings:s,slots:{...c,header:i??c?.header}})})}I.displayName=`ActivityFeedCard`,exports.ACTIVITY_TONE=w,exports.ActivityActionsMenu=y,exports.ActivityChanges=x,exports.ActivityDateLabel=S,exports.ActivityEmptyState=C,exports.ActivityFeed=F,exports.ActivityFeedCard=I,exports.ActivityHeadline=A,exports.ActivityMarker=j,exports.ActivityResourceTag=E,exports.ActivityRow=M,exports.TONE_TO_BADGE_VARIANT=T,exports.defaultActivitiesStrings=m,exports.defaultActivityEventConfig=f,exports.defaultEventConfig=d,exports.interpolateActivityString=h,exports.resolveEventConfig=p,exports.useActivityFeed=_,exports.useActivityResources=v;
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`../../../_shared/chunk-D3uCBrYO.cjs`);const e=require(`../../../_shared/ui-provider-uiQgATj1.cjs`),t=require(`../../../lib/utils.cjs`),n=require(`../../../_shared/text-DBnY6fcL.cjs`),r=require(`../../../_shared/badge-C49SSz-6.cjs`),i=require(`../../../_shared/button-D0nF99a9.cjs`),a=require(`../../../_shared/smart-card-Bm_VxYUG.cjs`),o=require(`../../../_shared/dropdown-menu-DZlWHqWS.cjs`);let s=require(`react`),c=require(`date-fns`),l=require(`react/jsx-runtime`),u=require(`lucide-react`);var d={icon:u.CircleDot,tone:`neutral`},f={created:{icon:u.Plus,tone:`success`,label:`Created`},updated:{icon:u.Pencil,tone:`info`,label:`Updated`},edited:{icon:u.FileEdit,tone:`info`,label:`Edited`},deleted:{icon:u.Trash2,tone:`destructive`,label:`Deleted`},cancelled:{icon:u.Ban,tone:`destructive`,label:`Cancelled`},restored:{icon:u.Sparkles,tone:`success`,label:`Restored`},status_changed:{icon:u.ArrowLeftRight,tone:`primary`,label:`Status changed`},status_transition:{icon:u.ArrowLeftRight,tone:`primary`,label:`Status changed`},status_override:{icon:u.ArrowLeftRight,tone:`warning`,label:`Status overridden`},assigned:{icon:u.UserPlus,tone:`info`,label:`Assigned`},unassigned:{icon:u.UserMinus,tone:`destructive`,label:`Unassigned`},mail_sent:{icon:u.Mail,tone:`info`,label:`Email sent`},mail_delivered:{icon:u.MailCheck,tone:`success`,label:`Email delivered`},mail_opened:{icon:u.MailOpen,tone:`info`,label:`Email opened`},mail_clicked:{icon:u.MailOpen,tone:`info`,label:`Email clicked`},mail_bounced:{icon:u.MailX,tone:`destructive`,label:`Email bounced`},mail_failed:{icon:u.MailX,tone:`destructive`,label:`Email failed`},comment_created:{icon:u.MessageSquare,tone:`warning`,label:`Comment posted`},comment_deleted:{icon:u.MessageSquare,tone:`destructive`,label:`Comment deleted`},paid:{icon:u.Check,tone:`success`,label:`Paid`},refunded:{icon:u.ArrowLeftRight,tone:`warning`,label:`Refunded`},confirmed:{icon:u.ShieldCheck,tone:`success`,label:`Confirmed`},favorited:{icon:u.Heart,tone:`warning`,label:`Favorited`},ordered:{icon:u.ShoppingBag,tone:`primary`,label:`Order placed`},published:{icon:u.Star,tone:`success`,label:`Published`},flagged:{icon:u.Flag,tone:`warning`,label:`Flagged`},linked:{icon:u.LinkIcon,tone:`info`,label:`Linked`},failed:{icon:u.AlertTriangle,tone:`destructive`,label:`Failed`},health_check_failed:{icon:u.AlertTriangle,tone:`destructive`,label:`Health check failed`}};function p(e,t){return t[e]??d}var m={title:`Activity`,empty:`No activity yet.`,loading:`Loading activity…`,today:`Today`,yesterday:`Yesterday`,undated:`Undated`,you:`You`,showChanges:`Show changes`,hideChanges:`Hide changes`,actionsLabel:`Activity actions`,moreLabel:`More`,sources:{comment:`Comment`,mail:`Mail`,booking_log:`Booking log`,activity_log:``,system:`System`},events:{}};function h(e,t){return e.replace(/\{\{\s*(\w+)\s*\}\}/g,(e,n)=>{let r=t[n];return r===void 0?e:String(r)})}function g(e,t,n){if(!e)return t.undated;let r=new Date(e);if((0,c.isToday)(r))return t.today;if((0,c.isYesterday)(r))return t.yesterday;try{return new Intl.DateTimeFormat(n,{year:`numeric`,month:`long`,day:`numeric`}).format(r)}catch{return new Intl.DateTimeFormat(void 0,{year:`numeric`,month:`long`,day:`numeric`}).format(r)}}function _({activities:e,groupByDate:t=!0,expandedByDefault:n=!1,locale:r,strings:i,formatDateGroupLabel:a}){let[o,c]=(0,s.useState)({}),l=(0,s.useMemo)(()=>{let t=new Map;return e.map(e=>{let n=[String(e.id??``).trim(),String(e.createdAt??``).trim(),String(e.event??``).trim(),String(e.source??``).trim()].join(`:`),r=(t.get(n)??0)+1;return t.set(n,r),{activity:e,key:`${n}:${r}`}})},[e]),u=(0,s.useMemo)(()=>{if(!t)return l.length>0?[{label:``,items:l}]:[];let e=[],n=`__init__`,o=[],s=e=>a?a(e,i):g(e,i,r);for(let t of l){let r=s(t.activity.createdAt??null);r===n?o.push(t):(o.length>0&&e.push({label:n,items:o}),n=r,o=[t])}return o.length>0&&e.push({label:n,items:o}),e},[l,t,r,i,a]),d=(0,s.useCallback)(e=>o[e]??n,[o,n]),f=(0,s.useCallback)(e=>{c(t=>({...t,[e]:!(t[e]??!1)}))},[]),p=(0,s.useCallback)((e,t)=>{c(n=>({...n,[e]:t}))},[]),m=(0,s.useCallback)(()=>{let e={};for(let t of l)e[t.activity.id]=!0;c(e)},[l]),h=(0,s.useCallback)(()=>c({}),[]);return{groups:u,total:l.length,isExpanded:d,toggleExpanded:f,setExpanded:p,expandAll:m,collapseAll:h}}function v({resources:e,onResourcesChange:t}={}){let[n,r]=(0,s.useState)(()=>e??{}),i=(0,s.useRef)(e);(0,s.useEffect)(()=>{e!==i.current&&(i.current=e,r(e??{}))},[e]);let a=(0,s.useRef)(t);(0,s.useEffect)(()=>{a.current=t},[t]);let o=(0,s.useCallback)(e=>{a.current?.(e)},[]),c=(0,s.useCallback)((e,t)=>{r(n=>{let r={...n,[e]:t};return o(r),r})},[o]),l=(0,s.useCallback)((e,t)=>{r(n=>{let r=n[e];if(!r)return n;let i={...n,[e]:{...r,...t}};return o(i),i})},[o]),u=(0,s.useCallback)(e=>{r(t=>{if(!(e in t))return t;let n={...t};return delete n[e],o(n),n})},[o]),d=(0,s.useCallback)(e=>{r(e),o(e)},[o]),f=(0,s.useCallback)(()=>{let e=i.current??{};r(e),o(e)},[o]);return{registry:n,get:(0,s.useCallback)(e=>n[typeof e==`string`?e:e.key],[n]),register:c,update:l,remove:u,setAll:d,reset:f}}function y({activity:e,actions:t,onAction:n,label:r}){return t.length===0?null:(0,l.jsxs)(o.t,{children:[(0,l.jsx)(o.g,{render:e=>(0,l.jsx)(i.t,{...e,type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`icon-sm`,"aria-label":r,className:`h-7 w-7 text-muted-foreground`,children:(0,l.jsx)(u.MoreHorizontal,{className:`size-4`})})}),(0,l.jsx)(o.r,{align:`end`,className:`min-w-[160px]`,children:t.map(t=>{let r=t.icon;return(0,l.jsxs)(o.a,{onClick:()=>{t.disabled||(t.onClick(e),n?.(t.id,e))},disabled:t.disabled,variant:t.tone===`destructive`?`destructive`:`default`,className:`gap-2 px-2 py-1.5 text-xs`,children:[!!r&&(0,l.jsx)(r,{className:`size-3.5`}),t.label]},t.id)})})]})}function b({change:e}){let t=e.old!==null&&e.old!==void 0,r=e.new!==null&&e.new!==void 0;return!t&&!r?(0,l.jsx)(n.t,{size:`xs`,tag:`span`,children:e.description}):(0,l.jsxs)(n.t,{tag:`span`,size:`xs`,className:`inline-flex flex-wrap items-baseline gap-1`,children:[!!t&&(0,l.jsx)(n.t,{tag:`span`,size:`xs`,className:`rounded bg-destructive/10 text-destructive line-through px-1 py-px`,children:e.old}),t&&r&&(0,l.jsx)(n.t,{tag:`span`,size:`xs`,type:`secondary`,children:`→`}),!!r&&(0,l.jsx)(n.t,{tag:`span`,size:`xs`,className:`rounded bg-success/15 text-success px-1 py-px`,children:e.new})]})}function x({changes:e,className:r}){return e.length===0?null:(0,l.jsx)(`div`,{className:t.cn(`space-y-1.5 rounded-lg border border-border/60 bg-muted/30 px-3 py-2`,r),children:e.map(e=>(0,l.jsxs)(`div`,{className:`flex items-baseline gap-2`,children:[(0,l.jsx)(n.t,{size:`xs`,type:`secondary`,weight:`medium`,className:`shrink-0`,children:e.label}),(0,l.jsx)(b,{change:e})]},`${e.key}-${e.label}`))})}function S({label:e,isFirst:r,className:i}){return e===``?null:(0,l.jsx)(n.t,{size:`xxs`,type:`secondary`,weight:`medium`,className:t.cn(`uppercase tracking-wider`,!r&&`mt-5`,i),children:e})}function C({title:e,hint:r,className:i}){return(0,l.jsxs)(`div`,{className:t.cn(`flex flex-col items-center justify-center gap-2 px-6 py-10 text-center`,i),children:[(0,l.jsx)(`span`,{className:`flex size-9 items-center justify-center rounded-full bg-muted text-muted-foreground`,children:(0,l.jsx)(u.Activity,{className:`size-4`})}),(0,l.jsx)(n.t,{weight:`medium`,children:e}),!!r&&(0,l.jsx)(n.t,{size:`xs`,type:`secondary`,children:r})]})}var w={primary:{bg:`bg-primary/15`,fg:`text-primary`,dot:`bg-primary`,line:`bg-primary/30`,chipBg:`bg-primary/10`,chipFg:`text-primary`},success:{bg:`bg-success/15`,fg:`text-success`,dot:`bg-success`,line:`bg-success/30`,chipBg:`bg-success/15`,chipFg:`text-success`},warning:{bg:`bg-warning/30`,fg:`text-warning-foreground`,dot:`bg-warning`,line:`bg-warning/40`,chipBg:`bg-warning/30`,chipFg:`text-warning-foreground`},destructive:{bg:`bg-destructive/15`,fg:`text-destructive`,dot:`bg-destructive`,line:`bg-destructive/30`,chipBg:`bg-destructive/15`,chipFg:`text-destructive`},info:{bg:`bg-info/15`,fg:`text-info`,dot:`bg-info`,line:`bg-info/30`,chipBg:`bg-info/15`,chipFg:`text-info`},neutral:{bg:`bg-muted`,fg:`text-muted-foreground`,dot:`bg-muted-foreground/60`,line:`bg-border`,chipBg:`bg-muted`,chipFg:`text-muted-foreground`}},T={primary:`primary`,success:`success`,warning:`warning`,destructive:`destructive`,info:`info`,neutral:`secondary`};function E({resource:e,config:i,fallbackText:a,onClick:o}){let s=w[i?.tone??`neutral`],c=i?.icon??u.CircleDot,d=i?.label??a??e.label??e.key,f=typeof o==`function`,p=(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(c,{className:t.cn(`size-3 shrink-0`,s.fg)}),(0,l.jsx)(n.t,{tag:`span`,size:`xs`,weight:`medium`,className:s.chipFg,children:d}),!!i?.tags&&i.tags.length>0&&(0,l.jsx)(n.t,{tag:`span`,size:`xxs`,type:`secondary`,className:`border-l border-current/20 pl-1.5 ml-0.5`,children:i.tags.join(` · `)}),!!i?.badge&&(0,l.jsx)(r.t,{inline:!0,variant:T[i.badge.tone??`neutral`],className:`ml-1`,children:i.badge.label})]}),m=t.cn(`inline-flex items-center gap-1 rounded-full px-2 py-0.5 align-baseline`,`border border-border/60`,s.chipBg,f&&`cursor-pointer transition-colors hover:bg-foreground/5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring`);return f?(0,l.jsx)(`button`,{type:`button`,onClick:e=>{e.stopPropagation(),o?.()},className:m,title:i?.note,children:p}):(0,l.jsx)(`span`,{className:m,title:i?.note,children:p})}function D({actorId:e,text:t,href:r,activity:i,youLabel:a,currentUserId:o,onActorClick:s}){let c=o!==void 0&&e!==void 0&&o===e?a:t,u=i.actor??{id:e,name:t};return r?(0,l.jsx)(`a`,{href:r,onClick:e=>{s&&(e.preventDefault(),e.stopPropagation(),s(u,i))},className:`font-semibold text-foreground underline-offset-2 hover:underline`,children:c}):s?(0,l.jsx)(`button`,{type:`button`,onClick:e=>{e.stopPropagation(),s(u,i)},className:`font-semibold text-foreground underline-offset-2 hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring rounded`,children:c}):(0,l.jsx)(n.t,{tag:`span`,weight:`semibold`,children:c})}function O(e,t){return e.map((e,i)=>{let a=`seg-${i}-${e.type}`;switch(e.type){case`actor`:return(0,l.jsxs)(s.Fragment,{children:[(0,l.jsx)(D,{actorId:e.actorId,text:e.text,href:e.href,activity:t.activity,youLabel:t.youLabel,currentUserId:t.currentUserId,onActorClick:t.onActorClick}),` `]},a);case`field`:case`value`:return(0,l.jsxs)(s.Fragment,{children:[(0,l.jsx)(n.t,{tag:`span`,weight:`semibold`,children:e.text}),` `]},a);case`status`:return(0,l.jsxs)(s.Fragment,{children:[(0,l.jsx)(r.t,{inline:!0,variant:T[e.tone??`neutral`],children:e.text}),` `]},a);case`resource`:{let n=t.getResourceConfig?.(e.resource);return(0,l.jsxs)(s.Fragment,{children:[(0,l.jsx)(E,{resource:e.resource,config:n,fallbackText:e.text,onClick:t.onResourceClick?()=>t.onResourceClick?.(e.resource,n,t.activity):void 0}),` `]},a)}default:return(0,l.jsxs)(s.Fragment,{children:[(0,l.jsx)(n.t,{tag:`span`,children:e.text}),` `]},a)}})}function k(e){let{activity:t}=e,r=t.headline??t.event,i=t.actor?.name;if(!i||!r.includes(i))return(0,l.jsx)(n.t,{tag:`span`,children:r});let[a,...o]=r.split(i);return(0,l.jsxs)(l.Fragment,{children:[!!a&&(0,l.jsx)(n.t,{tag:`span`,children:a}),(0,l.jsx)(D,{actorId:t.actor?.id,text:i,href:t.actor?.href,activity:t,youLabel:e.youLabel,currentUserId:e.currentUserId,onActorClick:e.onActorClick}),o.length>0&&(0,l.jsx)(n.t,{tag:`span`,children:o.join(i)})]})}function A(e){let t=e.activity.segments;return t&&t.length>0?(0,l.jsx)(`span`,{className:`leading-snug [&>span]:leading-snug`,children:O(t,e)}):(0,l.jsx)(`span`,{className:`leading-snug`,children:k(e)})}function j({icon:e,tone:n,density:r,isLast:i}){let a=w[n];return r===`compact`?(0,l.jsxs)(`div`,{className:`flex flex-col items-center`,children:[(0,l.jsx)(`span`,{"aria-hidden":!0,className:t.cn(`mt-1.5 size-2 shrink-0 rounded-full`,a.dot)}),!i&&(0,l.jsx)(`span`,{"aria-hidden":!0,className:t.cn(`mt-1 w-px flex-1`,a.line)})]}):r===`rich`?(0,l.jsxs)(`div`,{className:`flex flex-col items-center`,children:[(0,l.jsx)(`span`,{className:t.cn(`flex size-7 shrink-0 items-center justify-center rounded-full ring-1 ring-border/60`,a.bg,a.fg),children:(0,l.jsx)(e,{className:`size-3.5`})}),!i&&(0,l.jsx)(`span`,{"aria-hidden":!0,className:t.cn(`mt-1 w-px flex-1`,a.line)})]}):(0,l.jsxs)(`div`,{className:`flex flex-col items-center`,children:[(0,l.jsx)(`span`,{className:t.cn(`flex size-5 shrink-0 items-center justify-center rounded-full`,a.bg,a.fg),children:(0,l.jsx)(e,{className:`size-3`})}),!i&&(0,l.jsx)(`span`,{"aria-hidden":!0,className:t.cn(`mt-1 w-px flex-1`,a.line)})]})}function M(e){let{activity:a,density:o,eventConfig:s,tone:c,isLast:d,expanded:f,onToggleExpanded:p,relativeTime:m,absoluteTime:h,sourceLabel:g,youLabel:_,showChangesLabel:v,hideChangesLabel:b,actionsLabel:S,currentUserId:C,actions:w,onActivityClick:T,onActorClick:D,onResourceClick:O,onAction:k,getResourceConfig:M,headlineOverride:N,markerOverride:P}=e,F=a.iconOverride??s.icon,I=(a.changes?.length??0)>0,L=(a.metadata?.length??0)>0,R=(a.resources?.length??0)>0,z=a.description!==void 0&&a.description!==null&&a.description!==``,B=o!==`compact`,V=o===`rich`,H=N??(0,l.jsx)(A,{activity:a,currentUserId:C,youLabel:_,onActorClick:D,onResourceClick:O,getResourceConfig:M}),U=P??(0,l.jsx)(j,{icon:F,tone:c,density:o,isLast:d}),W=typeof T==`function`;return(0,l.jsxs)(`div`,{className:t.cn(`relative flex gap-3`,W&&`cursor-pointer rounded-md hover:bg-muted/40`),onClick:W?()=>T?.(a):void 0,role:W?`button`:void 0,tabIndex:W?0:void 0,onKeyDown:W?e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),T?.(a))}:void 0,children:[U,(0,l.jsxs)(`div`,{className:t.cn(`min-w-0 flex-1`,!d&&(o===`rich`?`pb-4`:o===`compact`?`pb-2.5`:`pb-3`)),children:[(0,l.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,l.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-x-1.5 gap-y-1`,children:[(0,l.jsx)(n.t,{tag:`span`,lineHeight:`snug`,children:H}),!!g&&(0,l.jsx)(r.t,{inline:!0,variant:`secondary`,children:g}),V&&I&&(0,l.jsx)(i.t,{type:`button`,size:`icon-xs`,variant:`secondary`,buttonStyle:`ghost`,className:`h-5 w-5 text-muted-foreground`,onClick:e=>{e.stopPropagation(),p()},title:f?b:v,"aria-label":f?b:v,"aria-expanded":f,children:f?(0,l.jsx)(u.ChevronDown,{className:`size-3.5`}):(0,l.jsx)(u.ChevronRight,{className:`size-3.5`})})]}),(0,l.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1`,children:[!!m&&(0,l.jsx)(n.t,{size:`xs`,type:`secondary`,className:`whitespace-nowrap tabular-nums pt-0.5`,title:h??void 0,children:m}),V&&w.length>0&&(0,l.jsx)(y,{activity:a,actions:w,onAction:k,label:S})]})]}),!!B&&z&&(0,l.jsx)(n.t,{tag:`div`,size:`xs`,type:`secondary`,className:`mt-1`,children:a.description}),!!V&&L&&a.metadata&&(0,l.jsx)(`div`,{className:`mt-2 flex flex-wrap gap-x-3 gap-y-1`,children:a.metadata.map(e=>(0,l.jsxs)(n.t,{size:`xs`,type:`secondary`,children:[(0,l.jsxs)(n.t,{tag:`span`,size:`xs`,type:`discrete`,children:[e.label,`:`,` `]}),e.value]},e.label))}),!!V&&R&&a.resources&&(0,l.jsx)(`div`,{className:`mt-2 flex flex-wrap gap-1.5`,children:a.resources.map(e=>{let t=M?.(e);return(0,l.jsx)(E,{resource:e,config:t,onClick:O?()=>O(e,t,a):void 0},e.key)})}),!!V&&I&&f&&a.changes&&(0,l.jsx)(`div`,{className:`mt-2`,children:(0,l.jsx)(x,{changes:a.changes})})]})]})}function N(e,t){try{return new Intl.DateTimeFormat(t,{dateStyle:`medium`,timeStyle:`short`}).format(new Date(e))}catch{return e}}function P(e,t){return e.toneOverride??t}function F(r){let{activities:i=[],density:a=`default`,groupByDate:o=!0,expandedByDefault:c=!1,currentUserId:u,loading:d=!1,eventConfig:h,strings:g,slots:y,className:b,locale:x,formatRelativeTime:w,formatAbsoluteTime:T,formatDateGroupLabel:E,getEventLabel:D,getSourceLabel:O,actionsForActivity:k,onActivityClick:A,onActorClick:j,onResourceClick:F,onAction:I,resources:L,onResourcesChange:R}=r,z=(0,s.useMemo)(()=>({...m,...g,sources:{...m.sources,...g?.sources??{}},events:{...m.events,...g?.events??{}}}),[g]),B=(0,s.useMemo)(()=>({...f,...h}),[h]),V=v({resources:L,onResourcesChange:R}),H=_({activities:i,groupByDate:o,expandedByDefault:c,locale:x,strings:z,formatDateGroupLabel:E}),{formatRelativeTime:U}=e.a(),W=w??U??(e=>e),G=T??(e=>N(e,x));if(d)return(0,l.jsx)(`div`,{className:t.cn(`activities-feed--component`,`px-2 py-4`,b),children:y?.loading??(0,l.jsx)(n.t,{type:`secondary`,align:`center`,children:z.loading})});if(i.length===0)return(0,l.jsx)(`div`,{className:t.cn(`px-2 py-2`,b),children:y?.empty??(0,l.jsx)(C,{title:z.empty})});let K=H.groups.reduce((e,t)=>e+t.items.length,0),q=0;return(0,l.jsxs)(`div`,{className:t.cn(`flex flex-col`,b),children:[!!y?.header&&(0,l.jsx)(`div`,{className:`mb-3`,children:y.header}),(0,l.jsx)(`div`,{className:`flex flex-col`,children:H.groups.map((e,n)=>{let r=n===0;return(0,l.jsxs)(`div`,{className:t.cn(r?``:`mt-1`),children:[y?.renderDateLabel?y.renderDateLabel(e.label,r):(0,l.jsx)(S,{label:e.label,isFirst:r,className:r?``:`mb-2`}),(0,l.jsx)(`div`,{className:t.cn(`flex flex-col`,!!e.label&&`mt-2`),children:e.items.map((e,t)=>{let n=e.activity,r=t===0,i=++q===K,o=p(n.event,B),s=P(n,o.tone),c=n.timestamp??(n.createdAt?W(n.createdAt):null),d=n.createdAt?G(n.createdAt):null,f=n.source?O?.(n.source)??z.sources[n.source]??o.sourceLabel??null:o.sourceLabel??null,m=f&&f.trim().length>0?f:null,h=k?.(n)??[],g={density:a,isLast:i,isFirstInGroup:r,activity:n,eventConfig:o,tone:s,relativeTime:c,absoluteTime:d,sourceLabel:m,expanded:H.isExpanded(n.id),toggleExpanded:()=>H.toggleExpanded(n.id)},_=y?.renderRow?.(n,g);if(_!==void 0)return(0,l.jsx)(`div`,{children:_},e.key);let v=y?.renderHeadline?.(n,g),b=y?.renderMarker?.(n,g);return(0,l.jsx)(M,{activity:n,density:a,eventConfig:o,tone:s,isLast:i,expanded:g.expanded,onToggleExpanded:g.toggleExpanded,relativeTime:c,absoluteTime:d,sourceLabel:m,youLabel:z.you,showChangesLabel:z.showChanges,hideChangesLabel:z.hideChanges,actionsLabel:z.actionsLabel,currentUserId:u,actions:h,onActivityClick:A,onActorClick:j,onResourceClick:F,onAction:I,getResourceConfig:e=>V.get(e),headlineOverride:v,markerOverride:b},e.key)})})]},`${e.label}-${n}`)})}),!!y?.footer&&(0,l.jsx)(`div`,{className:`mt-3`,children:y.footer})]})}F.displayName=`ActivityFeed`;function I({title:e,titleSuffix:t,description:n,padding:r=`base`,composerSlot:i,className:o,strings:s,slots:c,...d}){let f={...m,...s,sources:{...m.sources,...s?.sources??{}},events:{...m.events,...s?.events??{}}},p=e??f.title;return(0,l.jsx)(a.t,{icon:(0,l.jsx)(u.Activity,{className:`size-4`}),title:p,titleSuffix:t,description:n,padding:r,className:o,children:(0,l.jsx)(F,{...d,strings:s,slots:{...c,header:i??c?.header}})})}I.displayName=`ActivityFeedCard`,exports.ACTIVITY_TONE=w,exports.ActivityActionsMenu=y,exports.ActivityChanges=x,exports.ActivityDateLabel=S,exports.ActivityEmptyState=C,exports.ActivityFeed=F,exports.ActivityFeedCard=I,exports.ActivityHeadline=A,exports.ActivityMarker=j,exports.ActivityResourceTag=E,exports.ActivityRow=M,exports.TONE_TO_BADGE_VARIANT=T,exports.defaultActivitiesStrings=m,exports.defaultActivityEventConfig=f,exports.defaultEventConfig=d,exports.interpolateActivityString=h,exports.resolveEventConfig=p,exports.useActivityFeed=_,exports.useActivityResources=v;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { a as e } from "../../../_shared/ui-provider-4qKSKMPd.js";
|
|
2
2
|
import { cn as t } from "../../../lib/utils.js";
|
|
3
3
|
import { t as n } from "../../../_shared/text-DIxMTECE.js";
|
|
4
|
-
import { t as r } from "../../../_shared/badge-
|
|
5
|
-
import { t as i } from "../../../_shared/button-
|
|
6
|
-
import { t as a } from "../../../_shared/smart-card-
|
|
7
|
-
import { a as o, g as s, r as c, t as l } from "../../../_shared/dropdown-menu-
|
|
4
|
+
import { t as r } from "../../../_shared/badge-BVCh_hfL.js";
|
|
5
|
+
import { t as i } from "../../../_shared/button-ChCkwoOD.js";
|
|
6
|
+
import { t as a } from "../../../_shared/smart-card-MT6JjkoI.js";
|
|
7
|
+
import { a as o, g as s, r as c, t as l } from "../../../_shared/dropdown-menu-4nxEBMnd.js";
|
|
8
8
|
import { Fragment as u, useCallback as d, useEffect as f, useMemo as p, useRef as m, useState as h } from "react";
|
|
9
9
|
import { isToday as g, isYesterday as _ } from "date-fns";
|
|
10
10
|
import { Fragment as v, jsx as y, jsxs as b } from "react/jsx-runtime";
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`../../../_shared/chunk-D3uCBrYO.cjs`);const e=require(`../../../lib/strings.cjs`),t=require(`../../../lib/utils.cjs`),n=require(`../../../_shared/text-DBnY6fcL.cjs`),r=require(`../../../_shared/
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`../../../_shared/chunk-D3uCBrYO.cjs`);const e=require(`../../../lib/strings.cjs`),t=require(`../../../lib/utils.cjs`),n=require(`../../../_shared/text-DBnY6fcL.cjs`),r=require(`../../../_shared/heading-mZc_jan1.cjs`),i=require(`../../../_shared/icon-badge-BBqDyAUz.cjs`),a=require(`../../../_shared/badge-C49SSz-6.cjs`),o=require(`../../../_shared/button-D0nF99a9.cjs`),s=require(`../../../_shared/textarea-D8wC0XlZ.cjs`),c=require(`../../../_shared/ai-artifact-DaHXJTKg.cjs`);let l=require(`react`),u=require(`react/jsx-runtime`),d=require(`lucide-react`);var f={placeholder:`Ask anything…`,attachAria:`Attach files`,submitAria:`Send message`,stopAria:`Stop generating`,modelPickerAria:`Choose model`,hint:`Press {{submitKey}} to send · {{newlineKey}} for newline`},p={scrollToBottom:`Jump to latest`,scrollToBottomAria:`Scroll to bottom`},m={header:`In queue`,cancelAria:`Remove from queue`,queuedLabel:`Queued`,runningLabel:`Running`},h={header:`Try`},g={pending:`Thinking…`},_={prompt:f,conversation:p,queue:m,suggestions:h,message:g,emptyTitle:`Start a conversation`,emptyDescription:`Ask a question, share context, or attach a file to get going.`};function v(e,t){return e.replace(/\{\{\s*(\w+)\s*\}\}/g,(e,n)=>{let r=t[n];return r===void 0?e:String(r)})}function y({attachments:e,onRemove:n,onOpen:r,className:i}){return e.length===0?null:(0,u.jsx)(`div`,{className:t.cn(`flex flex-wrap gap-2`,i),children:e.map(e=>(0,u.jsx)(c.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))})}y.displayName=`AiChatAttachmentsStrip`;function b({threshold:e=80,dependency:t,disableAutoScroll:n=!1}={}){let r=(0,l.useRef)(null),i=(0,l.useRef)(null),[a,o]=(0,l.useState)(!0),s=(0,l.useCallback)((e=`smooth`)=>{i.current?.scrollIntoView({behavior:e,block:`end`})},[]);return(0,l.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,l.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 x({messages:r,renderMessage:i,intro:a,footer:s,empty:c,disableAutoScroll:l,className:f,strings:m}){let h=e.useStrings(p,m),{containerRef:g,endRef:_,isAtBottom:v,scrollToBottom:y}=b({dependency:r.length,disableAutoScroll:l}),x=r.length===0&&!a;return(0,u.jsxs)(`div`,{className:t.cn(`relative flex h-full min-h-0 flex-col`,f),children:[(0,u.jsxs)(`div`,{ref:g,className:`flex-1 overflow-y-auto px-3 py-4 sm:px-4`,children:[!!a&&(0,u.jsx)(`div`,{className:`mb-4`,children:a}),x?c??(0,u.jsx)(`div`,{className:`flex h-full items-center justify-center px-6 py-12`,children:(0,u.jsx)(n.t,{type:`secondary`,children:`No messages yet.`})}):(0,u.jsx)(`ol`,{className:`space-y-4`,children:r.map((e,t)=>(0,u.jsx)(`li`,{children:i(e,{isLast:t===r.length-1,index:t})},e.id))}),!!s&&(0,u.jsx)(`div`,{className:`mt-4`,children:s}),(0,u.jsx)(`div`,{ref:_,"aria-hidden":!0,className:`h-px`})]}),!v&&(0,u.jsx)(`div`,{className:`pointer-events-none absolute bottom-3 left-1/2 -translate-x-1/2`,children:(0,u.jsxs)(o.t,{type:`button`,variant:`secondary`,buttonStyle:`solid`,"aria-label":h.scrollToBottomAria,onClick:()=>y(`smooth`),className:t.cn(`pointer-events-auto rounded-full shadow-md`,`border border-border/60`),children:[(0,u.jsx)(d.ArrowDown,{className:`size-3.5`}),h.scrollToBottom]})})]})}x.displayName=`AiChatConversation`;function S({title:e=`Start a conversation`,description:a,icon:o=d.Sparkles,below:s,className:c}){return(0,u.jsxs)(`div`,{className:t.cn(`flex h-full flex-col items-center justify-center gap-3 px-4 py-10 text-center`,c),children:[(0,u.jsx)(i.t,{icon:o,tone:`primary`,size:`md`,shape:`square`}),(0,u.jsxs)(`div`,{className:`max-w-md space-y-1`,children:[(0,u.jsx)(r.t,{tag:`h4`,children:e}),!!a&&(0,u.jsx)(n.t,{type:`secondary`,children:a})]}),!!s&&(0,u.jsx)(`div`,{className:`mt-4 w-full max-w-2xl`,children:s})]})}S.displayName=`AiChatEmptyState`;function C({message:n,onCopy:r,onRegenerate:i,onAttachmentOpen:a,className:o,strings:s}){let l=e.useStrings(g,s),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??T(e.content):``).filter(Boolean).join(`
|
|
2
2
|
`)||void 0,m=n.pending?(0,u.jsx)(c.y,{children:l.pending}):d.length===0&&f.length>0?null:(0,u.jsx)(`div`,{className:`space-y-2`,children:d.map((e,t)=>e.type===`text`?(0,u.jsx)(`div`,{className:`whitespace-pre-wrap`,children:e.content},t):null)});return(0,u.jsxs)(`div`,{className:t.cn(`space-y-2`,o),children:[(m!==null||n.pending)&&(0,u.jsx)(c.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,u.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,u.jsx)(w,{part:e,onAttachmentOpen:a},t))}),!!n.trailing&&(0,u.jsx)(`div`,{className:t.cn(n.role===`user`?`pr-9 sm:pl-12`:`pl-9 sm:pr-12`),children:n.trailing})]})}C.displayName=`AiChatMessage`;function w({part:e,onAttachmentOpen:t}){switch(e.type){case`text`:return(0,u.jsx)(n.t,{children:e.content});case`reasoning`:return(0,u.jsx)(c.s,{streaming:e.streaming,durationSeconds:e.durationSeconds,children:e.content});case`chain-of-thought`:return(0,u.jsx)(c.a,{steps:e.steps,streaming:e.streaming});case`tool`:return(0,u.jsx)(c.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,u.jsx)(c._,{code:e.code,language:e.language,filename:e.filename,showLineNumbers:e.showLineNumbers,highlightLines:e.highlightLines});case`attachments`:return(0,u.jsx)(y,{attachments:e.items,onOpen:t?e=>t(e.id):void 0});case`sources`:return(0,u.jsx)(c.l,{sources:e.items,variant:e.variant,defaultExpanded:e.defaultExpanded});case`task`:return(0,u.jsx)(c.r,{task:e.task});case`artifact`:return(0,u.jsx)(c.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,u.jsx)(c.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,u.jsx)(u.Fragment,{children:e.render()});default:return null}}function T(e){return typeof e==`string`||typeof e==`number`?String(e):Array.isArray(e)?e.map(T).join(``):``}function E({value:r,onChange:i,onSubmit:a,onStop:c,streaming:p=!1,disabled:m=!1,attachments:h=[],onRemoveAttachment:g,onAttach:_,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(f,O),A=(0,l.useRef)(null),j=!p&&!m&&(r.trim().length>0||h.length>0),M=(0,l.useCallback)(()=>{j&&a?.({text:r,attachments:h})},[j,a,r,h]),N=(0,l.useCallback)(e=>{e.key===`Enter`&&!e.shiftKey&&!e.nativeEvent.isComposing&&(e.preventDefault(),M())},[M]),P=b??!!_,F=typeof navigator<`u`&&navigator.platform?.toLowerCase().includes(`mac`)?`⌘↩`:`↩`;return(0,u.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,u.jsx)(`div`,{className:`border-b border-border/60 p-2`,children:(0,u.jsx)(y,{attachments:h,onRemove:g})}),(0,u.jsx)(s.t,{ref:A,value:r,onChange:e=>i(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,u.jsxs)(`div`,{className:`flex items-center gap-1 border-t border-border/60 px-2 py-1.5`,children:[x,P&&(0,u.jsx)(o.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`icon-sm`,"aria-label":k.attachAria,onClick:_,disabled:m,children:(0,u.jsx)(d.Paperclip,{className:`size-4`})}),(0,u.jsxs)(`div`,{className:`ml-auto flex items-center gap-1`,children:[S,p?(0,u.jsx)(o.t,{type:`button`,variant:`secondary`,buttonStyle:`solid`,size:`icon-sm`,"aria-label":k.stopAria,onClick:c,children:(0,u.jsx)(d.Square,{className:`size-3.5 fill-current`})}):(0,u.jsx)(o.t,{type:`button`,variant:`primary`,buttonStyle:`solid`,size:`icon-sm`,"aria-label":k.submitAria,onClick:M,disabled:!j,children:(0,u.jsx)(d.ArrowUp,{className:`size-4`})})]})]}),!C&&(0,u.jsx)(`div`,{className:`px-3 pb-2`,children:(0,u.jsx)(n.t,{size:`xxs`,type:`discrete`,children:v(k.hint,{submitKey:F,newlineKey:`⇧↩`})})})]})}E.displayName=`AiChatPromptInput`;function D({items:r,hideHeader:i=!1,onCancel:s,className:c,strings:l}){let f=e.useStrings(m,l);return r.length===0?null:(0,u.jsxs)(`div`,{className:t.cn(`rounded-lg border border-border/60 bg-muted/20 px-2.5 py-2`,c),children:[!i&&(0,u.jsxs)(n.t,{size:`xxs`,type:`secondary`,weight:`medium`,className:`mb-1.5 px-1 uppercase tracking-wider`,children:[f.header,` · `,r.length]}),(0,u.jsx)(`ul`,{className:`space-y-1`,children:r.map(e=>{let t=e.status??`queued`;return(0,u.jsxs)(`li`,{className:`flex items-center gap-2 rounded-md bg-card px-2 py-1.5`,children:[t===`running`?(0,u.jsx)(d.Loader2,{className:`size-3.5 shrink-0 animate-spin text-primary`}):(0,u.jsx)(`span`,{"aria-hidden":!0,className:`size-2 shrink-0 rounded-full bg-muted-foreground/50`}),(0,u.jsx)(n.t,{size:`xs`,className:`flex-1 truncate`,children:e.label}),(0,u.jsx)(a.t,{variant:t===`running`?`primary`:`secondary`,children:t===`running`?f.runningLabel:f.queuedLabel}),(!!e.onCancel||!!s)&&(0,u.jsx)(o.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`icon-xs`,"aria-label":f.cancelAria,onClick:()=>{e.onCancel?.(),s?.(e.id)},children:(0,u.jsx)(d.X,{className:`size-3.5`})})]},e.id)})})]})}D.displayName=`AiChatQueue`;function O({suggestions:r,onPick:i,hideHeader:a=!1,className:o,strings:s}){let c=e.useStrings(h,s);return r.length===0?null:(0,u.jsxs)(`div`,{className:t.cn(`flex items-center gap-2`,o),children:[!a&&(0,u.jsxs)(`div`,{className:`inline-flex shrink-0 items-center gap-1.5`,children:[(0,u.jsx)(d.Sparkles,{className:`size-3.5 text-muted-foreground`}),(0,u.jsx)(n.t,{size:`xxs`,type:`secondary`,weight:`medium`,className:`uppercase tracking-wider`,children:c.header})]}),(0,u.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:r.map(e=>{let r=e.icon;return(0,u.jsxs)(`button`,{type:`button`,onClick:()=>i?.(e),className:t.cn(`inline-flex shrink-0 items-center 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`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40`),children:[!!r&&(0,u.jsx)(r,{className:`size-3 text-muted-foreground`}),(0,u.jsx)(n.t,{tag:`span`,size:`xs`,weight:`medium`,children:e.label})]},e.id)})})]})}O.displayName=`AiChatSuggestionsRow`;function k({messages:r,inputValue:i,onInputChange:a,onSubmit:o,onStop:s,streaming:d=!1,disabled:f=!1,attachments:p=[],onRemoveAttachment:m,onAttach:h,showAttach:g,agent:v,headerActions:y,queue:b=[],onCancelQueueItem:w,suggestions:T=[],onPickSuggestion:k,onMessageCopy:A,onMessageRegenerate:j,onAttachmentOpen:M,disableAutoScroll:N,slots:P,strings:F,className:I}){let L=e.useStrings(_,F),[,R]=(0,l.useState)(0),z=(0,l.useCallback)((e,t)=>P?.renderMessage?P.renderMessage(e,t):(0,u.jsx)(C,{className:`ai-chat--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,u.jsxs)(`div`,{className:`flex items-center gap-3 border-b border-border bg-card px-3 py-2 sm:px-4`,children:[(0,u.jsx)(c.p,{name:v.name,icon:v.icon,avatar:v.avatar,subtitle:v.subtitle,tone:v.tone,status:v.status,variant:`inline`}),!!y&&(0,u.jsx)(`div`,{className:`ml-auto flex items-center gap-1`,children:y})]}):null),V=P?.empty??(r.length===0?(0,u.jsx)(S,{title:L.emptyTitle,description:L.emptyDescription}):null),H=P?.queue??(b.length>0?(0,u.jsx)(D,{items:b,onCancel:w,strings:L.queue}):null),U=P?.suggestions??(T.length>0?(0,u.jsx)(O,{suggestions:T,onPick:k,strings:L.suggestions}):null),W=P?.input??(0,u.jsx)(E,{value:i,onChange:a,onSubmit:e=>{o?.(e),R(e=>e+1)},onStop:s,streaming:d,disabled:f,attachments:p,onRemoveAttachment:m,onAttach:h,showAttach:g,strings:L.prompt});return(0,u.jsxs)(`div`,{className:t.cn(`flex h-full flex-col overflow-hidden rounded-xl border border-border bg-background`,I),children:[B,(0,u.jsx)(x,{messages:r,renderMessage:z,intro:P?.intro,footer:P?.belowMessages,empty:V,disableAutoScroll:N,strings:L.conversation}),(H||U||W)&&(0,u.jsxs)(`div`,{className:`border-t border-border bg-card/60`,children:[H&&(0,u.jsx)(`div`,{className:`px-3 pb-2 pt-3 sm:px-4`,children:H}),U&&(0,u.jsx)(`div`,{className:t.cn(`px-3 sm:px-4`,!H&&`pt-3`,`pb-2`),children:U}),W&&(0,u.jsx)(`div`,{className:`px-3 pb-3 pt-2 sm:px-4 sm:pb-4`,children:W})]}),f&&(0,u.jsx)(n.t,{className:`sr-only`,"aria-live":`polite`,children:`Chat is disabled`})]})}k.displayName=`AiChat`,exports.AiChat=k,exports.AiChatAttachmentsStrip=y,exports.AiChatConversation=x,exports.AiChatEmptyState=S,exports.AiChatMessageView=C,exports.AiChatPromptInput=E,exports.AiChatQueue=D,exports.AiChatSuggestionsRow=O,exports.defaultAiChatConversationStrings=p,exports.defaultAiChatMessageStrings=g,exports.defaultAiChatPromptInputStrings=f,exports.defaultAiChatQueueStrings=m,exports.defaultAiChatStrings=_,exports.defaultAiChatSuggestionsStrings=h,exports.interpolateString=v,exports.useAiChatScroll=b;
|
|
3
3
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":[],"sources":["../../../../src/components/features/ai-chat/ai-chat.strings.ts","../../../../src/components/features/ai-chat/partials/ai-chat-attachments-strip.tsx","../../../../src/components/features/ai-chat/hooks/use-ai-chat-scroll.ts","../../../../src/components/features/ai-chat/partials/ai-chat-conversation.tsx","../../../../src/components/features/ai-chat/partials/ai-chat-empty-state.tsx","../../../../src/components/features/ai-chat/partials/ai-chat-message.tsx","../../../../src/components/features/ai-chat/partials/ai-chat-prompt-input.tsx","../../../../src/components/features/ai-chat/partials/ai-chat-queue.tsx","../../../../src/components/features/ai-chat/partials/ai-chat-suggestions-row.tsx","../../../../src/components/features/ai-chat/ai-chat.tsx"],"sourcesContent":["/**\n * Strings for `<AiChat>` and its partials. Each interface is co-located so\n * partials and the feature root all read from one source of truth (rule 19).\n * Consumers override via the `strings` prop on the relevant component; values\n * are deep-merged over the defaults so partial overrides are safe.\n */\n\nexport interface AiChatPromptInputStrings {\n\t/** Placeholder copy for the textarea. */\n\tplaceholder: string;\n\t/** Aria label for the attach button. */\n\tattachAria: string;\n\t/** Aria label for the submit button. */\n\tsubmitAria: string;\n\t/** Aria label for the stop button (replaces submit while streaming). */\n\tstopAria: string;\n\t/** Aria label for the model picker button (when `modelPicker` is provided). */\n\tmodelPickerAria: string;\n\t/** Hint shown under the input. Supports `{{key}}` for the submit shortcut. */\n\thint: string;\n}\n\nexport const defaultAiChatPromptInputStrings: AiChatPromptInputStrings = {\n\tplaceholder: 'Ask anything…',\n\tattachAria: 'Attach files',\n\tsubmitAria: 'Send message',\n\tstopAria: 'Stop generating',\n\tmodelPickerAria: 'Choose model',\n\thint: 'Press {{submitKey}} to send · {{newlineKey}} for newline',\n};\n\nexport interface AiChatConversationStrings {\n\tscrollToBottom: string;\n\tscrollToBottomAria: string;\n}\n\nexport const defaultAiChatConversationStrings: AiChatConversationStrings = {\n\tscrollToBottom: 'Jump to latest',\n\tscrollToBottomAria: 'Scroll to bottom',\n};\n\nexport interface AiChatQueueStrings {\n\theader: string;\n\tcancelAria: string;\n\tqueuedLabel: string;\n\trunningLabel: string;\n}\n\nexport const defaultAiChatQueueStrings: AiChatQueueStrings = {\n\theader: 'In queue',\n\tcancelAria: 'Remove from queue',\n\tqueuedLabel: 'Queued',\n\trunningLabel: 'Running',\n};\n\nexport interface AiChatSuggestionsStrings {\n\theader: string;\n}\n\nexport const defaultAiChatSuggestionsStrings: AiChatSuggestionsStrings = {\n\theader: 'Try',\n};\n\nexport interface AiChatMessageStrings {\n\tpending: string;\n}\n\nexport const defaultAiChatMessageStrings: AiChatMessageStrings = {\n\tpending: 'Thinking…',\n};\n\nexport interface AiChatStrings {\n\tprompt: AiChatPromptInputStrings;\n\tconversation: AiChatConversationStrings;\n\tqueue: AiChatQueueStrings;\n\tsuggestions: AiChatSuggestionsStrings;\n\tmessage: AiChatMessageStrings;\n\temptyTitle: string;\n\temptyDescription: string;\n}\n\nexport const defaultAiChatStrings: AiChatStrings = {\n\tprompt: defaultAiChatPromptInputStrings,\n\tconversation: defaultAiChatConversationStrings,\n\tqueue: defaultAiChatQueueStrings,\n\tsuggestions: defaultAiChatSuggestionsStrings,\n\tmessage: defaultAiChatMessageStrings,\n\temptyTitle: 'Start a conversation',\n\temptyDescription: 'Ask a question, share context, or attach a file to get going.',\n};\n\n/** Replace `{{key}}` tokens with values from `params`. */\nexport function interpolateString(\n\ttemplate: string,\n\tparams: Record<string, string | number>,\n): string {\n\treturn template.replace(/\\{\\{\\s*(\\w+)\\s*\\}\\}/g, (m, k) => {\n\t\tconst v = params[k];\n\t\treturn v === undefined ? m : String(v);\n\t});\n}\n","/**\n * AiChatAttachmentsStrip — flex-wrap row of `<AiAttachment>` chips. Used both\n * in the prompt input (staged uploads — pass `onRemove` to enable a remove\n * button) and inside messages (read-only attachment list).\n */\nimport { AiAttachment } from '@/components/composed/ai/ai-attachment';\nimport { cn } from '@/lib/utils';\n\nimport type { AiChatAttachment } from '../ai-chat.types';\n\nexport interface AiChatAttachmentsStripProps {\n\tattachments: ReadonlyArray<AiChatAttachment>;\n\t/** When set, each chip gets a remove button wired to this handler. */\n\tonRemove?: (id: string) => void;\n\t/** When set, click on a chip calls this. */\n\tonOpen?: (att: AiChatAttachment) => void;\n\tclassName?: string;\n}\n\nexport function AiChatAttachmentsStrip({\n\tattachments,\n\tonRemove,\n\tonOpen,\n\tclassName,\n}: AiChatAttachmentsStripProps) {\n\tif (attachments.length === 0) return null;\n\treturn (\n\t\t<div className={cn('flex flex-wrap gap-2', className)}>\n\t\t\t{attachments.map((att) => (\n\t\t\t\t<AiAttachment\n\t\t\t\t\tkey={att.id}\n\t\t\t\t\tname={att.name}\n\t\t\t\t\tmeta={att.meta}\n\t\t\t\t\tkind={att.kind}\n\t\t\t\t\ticon={att.icon}\n\t\t\t\t\tthumbnailUrl={att.thumbnailUrl}\n\t\t\t\t\tprogress={att.progress}\n\t\t\t\t\terrored={att.errored}\n\t\t\t\t\tonOpen={onOpen ? () => onOpen(att) : undefined}\n\t\t\t\t\tonRemove={onRemove ? () => onRemove(att.id) : undefined}\n\t\t\t\t/>\n\t\t\t))}\n\t\t</div>\n\t);\n}\n\nAiChatAttachmentsStrip.displayName = 'AiChatAttachmentsStrip';\n","/**\n * useAiChatScroll — auto-stick-to-bottom scroll behaviour for chat\n * conversations. Detects when the user has scrolled away from the latest\n * message and pauses auto-scroll until they return.\n *\n * Returns:\n * - `containerRef` — attach to the scroll viewport.\n * - `endRef` — attach to a sentinel at the very bottom.\n * - `isAtBottom` — true when the viewport is pinned to the latest content.\n * - `scrollToBottom` — imperatively scroll to the sentinel.\n */\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nexport interface UseAiChatScrollOptions {\n\t/** Distance (px) from bottom counted as \"at bottom\". */\n\tthreshold?: number;\n\t/** Re-evaluate on these dependencies (typically the message count). */\n\tdependency?: unknown;\n\t/** Disable auto-scroll-on-update behaviour. */\n\tdisableAutoScroll?: boolean;\n}\n\nexport interface UseAiChatScrollReturn {\n\tcontainerRef: React.RefObject<HTMLDivElement | null>;\n\tendRef: React.RefObject<HTMLDivElement | null>;\n\tisAtBottom: boolean;\n\tscrollToBottom: (behavior?: ScrollBehavior) => void;\n}\n\nexport function useAiChatScroll({\n\tthreshold = 80,\n\tdependency,\n\tdisableAutoScroll = false,\n}: UseAiChatScrollOptions = {}): UseAiChatScrollReturn {\n\tconst containerRef = useRef<HTMLDivElement | null>(null);\n\tconst endRef = useRef<HTMLDivElement | null>(null);\n\tconst [isAtBottom, setIsAtBottom] = useState(true);\n\n\tconst scrollToBottom = useCallback(\n\t\t(behavior: ScrollBehavior = 'smooth') => {\n\t\t\tendRef.current?.scrollIntoView({ behavior, block: 'end' });\n\t\t},\n\t\t[],\n\t);\n\n\t// Track scroll position so we can pause auto-scroll when the user reads up.\n\tuseEffect(() => {\n\t\tconst el = containerRef.current;\n\t\tif (!el) return;\n\t\tconst onScroll = () => {\n\t\t\tconst distance = el.scrollHeight - el.clientHeight - el.scrollTop;\n\t\t\tsetIsAtBottom(distance <= threshold);\n\t\t};\n\t\tonScroll();\n\t\tel.addEventListener('scroll', onScroll, { passive: true });\n\t\treturn () => el.removeEventListener('scroll', onScroll);\n\t}, [threshold]);\n\n\t// Auto-scroll when content updates and the user is pinned at the bottom.\n\tuseEffect(() => {\n\t\tif (disableAutoScroll) return;\n\t\tif (!isAtBottom) return;\n\t\t// Use rAF so we wait for layout to settle after the new content paints.\n\t\tconst id = window.requestAnimationFrame(() => scrollToBottom('auto'));\n\t\treturn () => window.cancelAnimationFrame(id);\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [dependency, disableAutoScroll]);\n\n\treturn { containerRef, endRef, isAtBottom, scrollToBottom };\n}\n","/**\n * AiChatConversation — scrollable list container for chat messages with\n * auto-stick-to-bottom behaviour. Renders each message via the consumer's\n * `renderMessage` slot (or the default `<AiChatMessage>` via the parent\n * `<AiChat>`). Surfaces a \"Jump to latest\" pill when the user scrolls away\n * from the bottom while content streams in.\n */\nimport { ArrowDown } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { Button } from '@/components/base/buttons';\nimport { Text } from '@/components/typography';\nimport { useStrings } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport {\n\tdefaultAiChatConversationStrings,\n\ttype AiChatConversationStrings,\n} from '../ai-chat.strings';\nimport type {\n\tAiChatMessage as AiChatMessageType,\n\tAiChatRenderMessageContext,\n} from '../ai-chat.types';\nimport { useAiChatScroll } from '../hooks/use-ai-chat-scroll';\n\nexport interface AiChatConversationProps {\n\tmessages: ReadonlyArray<AiChatMessageType>;\n\trenderMessage: (\n\t\tmessage: AiChatMessageType,\n\t\tctx: AiChatRenderMessageContext,\n\t) => ReactNode;\n\t/** Render before the messages list (intro card, agent greeting). */\n\tintro?: ReactNode;\n\t/** Render after the messages list (e.g. tip ribbon). */\n\tfooter?: ReactNode;\n\t/** Replaces the empty state when `messages.length === 0`. */\n\tempty?: ReactNode;\n\t/** Pause auto-scroll-on-update. */\n\tdisableAutoScroll?: boolean;\n\tclassName?: string;\n\tstrings?: Partial<AiChatConversationStrings>;\n}\n\nexport function AiChatConversation({\n\tmessages,\n\trenderMessage,\n\tintro,\n\tfooter,\n\tempty,\n\tdisableAutoScroll,\n\tclassName,\n\tstrings: stringsProp,\n}: AiChatConversationProps) {\n\tconst strings = useStrings(defaultAiChatConversationStrings, stringsProp);\n\tconst { containerRef, endRef, isAtBottom, scrollToBottom } = useAiChatScroll({\n\t\tdependency: messages.length,\n\t\tdisableAutoScroll,\n\t});\n\n\tconst isEmpty = messages.length === 0 && !intro;\n\n\treturn (\n\t\t<div className={cn('relative flex h-full min-h-0 flex-col', className)}>\n\t\t\t<div\n\t\t\t\tref={containerRef}\n\t\t\t\tclassName=\"flex-1 overflow-y-auto px-3 py-4 sm:px-4\"\n\t\t\t>\n\t\t\t\t{!!intro && <div className=\"mb-4\">{intro}</div>}\n\n\t\t\t\t{isEmpty ? (\n\t\t\t\t\tempty ?? (\n\t\t\t\t\t\t<div className=\"flex h-full items-center justify-center px-6 py-12\">\n\t\t\t\t\t\t\t<Text type=\"secondary\">No messages yet.</Text>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)\n\t\t\t\t) : (\n\t\t\t\t\t<ol className=\"space-y-4\">\n\t\t\t\t\t\t{messages.map((message, idx) => {\n\t\t\t\t\t\t\tconst ctx: AiChatRenderMessageContext = {\n\t\t\t\t\t\t\t\tisLast: idx === messages.length - 1,\n\t\t\t\t\t\t\t\tindex: idx,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<li key={message.id}>{renderMessage(message, ctx)}</li>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</ol>\n\t\t\t\t)}\n\n\t\t\t\t{!!footer && <div className=\"mt-4\">{footer}</div>}\n\n\t\t\t\t<div ref={endRef} aria-hidden className=\"h-px\" />\n\t\t\t</div>\n\n\t\t\t{!isAtBottom && (\n\t\t\t\t<div className=\"pointer-events-none absolute bottom-3 left-1/2 -translate-x-1/2\">\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\tbuttonStyle=\"solid\"\n\t\t\t\t\t\taria-label={strings.scrollToBottomAria}\n\t\t\t\t\t\tonClick={() => scrollToBottom('smooth')}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'pointer-events-auto rounded-full shadow-md',\n\t\t\t\t\t\t\t'border border-border/60',\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ArrowDown className=\"size-3.5\" />\n\t\t\t\t\t\t{strings.scrollToBottom}\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nAiChatConversation.displayName = 'AiChatConversation';\n","/**\n * AiChatEmptyState — default empty surface for `<AiChat>` when no messages\n * are present and no intro is provided. Centers a title + description with\n * an optional below-content slot for prompt-suggestion grids.\n */\nimport type { ReactNode } from 'react';\nimport { Sparkles } from 'lucide-react';\nimport { IconBadge } from '@/components/base/display';\nimport { Heading, Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nexport interface AiChatEmptyStateProps {\n\ttitle?: ReactNode;\n\tdescription?: ReactNode;\n\ticon?: React.ElementType;\n\tbelow?: ReactNode;\n\tclassName?: string;\n}\n\nexport function AiChatEmptyState({\n\ttitle = 'Start a conversation',\n\tdescription,\n\ticon: IconComponent = Sparkles,\n\tbelow,\n\tclassName,\n}: AiChatEmptyStateProps) {\n\treturn (\n\t\t<div className={cn('flex h-full flex-col items-center justify-center gap-3 px-4 py-10 text-center', className)}>\n\t\t\t<IconBadge icon={IconComponent} tone=\"primary\" size=\"md\" shape=\"square\" />\n\t\t\t<div className=\"max-w-md space-y-1\">\n\t\t\t\t<Heading tag=\"h4\">{title}</Heading>\n\t\t\t\t{!!description && (\n\t\t\t\t\t<Text type=\"secondary\">{description}</Text>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t{!!below && <div className=\"mt-4 w-full max-w-2xl\">{below}</div>}\n\t\t</div>\n\t);\n}\n\nAiChatEmptyState.displayName = 'AiChatEmptyState';\n","/**\n * AiChatMessage — message renderer that wraps `<AiMessageBubble>` and routes\n * each `parts[]` entry to its dedicated `composed/ai/*` surface (text, code,\n * tool calls, reasoning, sources, attachments, …).\n *\n * Most surfaces sit BELOW the bubble (artifact, sources, task) since they\n * carry their own chrome; plain text and inline citations render INSIDE the\n * bubble. Custom-typed parts call `render()` directly.\n */\nimport type { ReactNode } from 'react';\nimport { AiArtifact } from '@/components/composed/ai/ai-artifact';\nimport { AiChainOfThought } from '@/components/composed/ai/ai-chain-of-thought';\nimport { AiCodeBlock } from '@/components/composed/ai/ai-code-block';\nimport { AiConfirmation } from '@/components/composed/ai/ai-confirmation';\nimport { AiMessageBubble } from '@/components/composed/ai/ai-message-bubble';\nimport { AiReasoning } from '@/components/composed/ai/ai-reasoning';\nimport { AiShimmer } from '@/components/composed/ai/ai-shimmer';\nimport { AiSources } from '@/components/composed/ai/ai-sources';\nimport { AiTask } from '@/components/composed/ai/ai-task';\nimport { AiToolCall } from '@/components/composed/ai/ai-tool-call';\nimport { Text } from '@/components/typography';\nimport { useStrings } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport {\n\tdefaultAiChatMessageStrings,\n\ttype AiChatMessageStrings,\n} from '../ai-chat.strings';\nimport type {\n\tAiChatMessage as AiChatMessageType,\n\tAiChatMessagePart,\n} from '../ai-chat.types';\nimport { AiChatAttachmentsStrip } from './ai-chat-attachments-strip';\n\nexport interface AiChatMessageProps {\n\tmessage: AiChatMessageType;\n\t/** Copy callback forwarded to the underlying bubble. */\n\tonCopy?: () => void;\n\t/** Regenerate callback forwarded to the underlying bubble (assistant only). */\n\tonRegenerate?: () => void;\n\t/** Open handler for attachment chips inside the message. */\n\tonAttachmentOpen?: (attachmentId: string) => void;\n\tclassName?: string;\n\tstrings?: Partial<AiChatMessageStrings>;\n}\n\nexport function AiChatMessage({\n\tmessage,\n\tonCopy,\n\tonRegenerate,\n\tonAttachmentOpen,\n\tclassName,\n\tstrings: stringsProp,\n}: AiChatMessageProps) {\n\tconst strings = useStrings(defaultAiChatMessageStrings, stringsProp);\n\n\t// Split parts: in-bubble (text) vs below-bubble (everything else).\n\tconst inBubble: AiChatMessagePart[] = [];\n\tconst below: AiChatMessagePart[] = [];\n\tfor (const part of message.parts) {\n\t\tif (part.type === 'text') inBubble.push(part);\n\t\telse below.push(part);\n\t}\n\n\tconst plainText =\n\t\tinBubble\n\t\t\t.map((p) => (p.type === 'text' ? p.plain ?? extractPlain(p.content) : ''))\n\t\t\t.filter(Boolean)\n\t\t\t.join('\\n') || undefined;\n\n\tconst bubbleContent: ReactNode = message.pending ? (\n\t\t<AiShimmer>{strings.pending}</AiShimmer>\n\t) : inBubble.length === 0 && below.length > 0 ? null : (\n\t\t<div className=\"space-y-2\">\n\t\t\t{inBubble.map((part, idx) =>\n\t\t\t\tpart.type === 'text' ? (\n\t\t\t\t\t<div key={idx} className=\"whitespace-pre-wrap\">\n\t\t\t\t\t\t{part.content}\n\t\t\t\t\t</div>\n\t\t\t\t) : null,\n\t\t\t)}\n\t\t</div>\n\t);\n\n\treturn (\n\t\t<div className={cn('space-y-2', className)}>\n\t\t\t{(bubbleContent !== null || message.pending) && (\n\t\t\t\t<AiMessageBubble\n\t\t\t\t\trole={message.role}\n\t\t\t\t\tavatar={message.avatar}\n\t\t\t\t\tauthorName={message.authorName}\n\t\t\t\t\ttimestamp={message.timestamp}\n\t\t\t\t\tplainText={plainText}\n\t\t\t\t\tloading={message.loading}\n\t\t\t\t\tonCopy={plainText ? onCopy ?? (() => undefined) : undefined}\n\t\t\t\t\tonRegenerate={onRegenerate}\n\t\t\t\t>\n\t\t\t\t\t{bubbleContent}\n\t\t\t\t</AiMessageBubble>\n\t\t\t)}\n\n\t\t\t{below.length > 0 && (\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'space-y-2',\n\t\t\t\t\t\tmessage.role === 'user'\n\t\t\t\t\t\t\t? 'pr-9 sm:pl-12'\n\t\t\t\t\t\t\t: 'pl-9 sm:pr-12',\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{below.map((part, idx) => (\n\t\t\t\t\t\t<PartRenderer\n\t\t\t\t\t\t\tkey={idx}\n\t\t\t\t\t\t\tpart={part}\n\t\t\t\t\t\t\tonAttachmentOpen={onAttachmentOpen}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{!!message.trailing && (\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\tmessage.role === 'user' ? 'pr-9 sm:pl-12' : 'pl-9 sm:pr-12',\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{message.trailing}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nAiChatMessage.displayName = 'AiChatMessage';\n\nfunction PartRenderer({\n\tpart,\n\tonAttachmentOpen,\n}: {\n\tpart: AiChatMessagePart;\n\tonAttachmentOpen?: (id: string) => void;\n}) {\n\tswitch (part.type) {\n\t\tcase 'text':\n\t\t\t// In-bubble. Should not reach here.\n\t\t\treturn <Text>{part.content}</Text>;\n\t\tcase 'reasoning':\n\t\t\treturn (\n\t\t\t\t<AiReasoning\n\t\t\t\t\tstreaming={part.streaming}\n\t\t\t\t\tdurationSeconds={part.durationSeconds}\n\t\t\t\t>\n\t\t\t\t\t{part.content}\n\t\t\t\t</AiReasoning>\n\t\t\t);\n\t\tcase 'chain-of-thought':\n\t\t\treturn <AiChainOfThought steps={part.steps} streaming={part.streaming} />;\n\t\tcase 'tool':\n\t\t\treturn (\n\t\t\t\t<AiToolCall\n\t\t\t\t\tname={part.name}\n\t\t\t\t\tstatus={part.status}\n\t\t\t\t\ticon={part.icon}\n\t\t\t\t\targs={part.args}\n\t\t\t\t\tresult={part.result}\n\t\t\t\t\terror={part.error}\n\t\t\t\t\tdurationMs={part.durationMs}\n\t\t\t\t\tdefaultExpanded={part.defaultExpanded}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase 'code':\n\t\t\treturn (\n\t\t\t\t<AiCodeBlock\n\t\t\t\t\tcode={part.code}\n\t\t\t\t\tlanguage={part.language}\n\t\t\t\t\tfilename={part.filename}\n\t\t\t\t\tshowLineNumbers={part.showLineNumbers}\n\t\t\t\t\thighlightLines={part.highlightLines}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase 'attachments':\n\t\t\treturn (\n\t\t\t\t<AiChatAttachmentsStrip\n\t\t\t\t\tattachments={part.items}\n\t\t\t\t\tonOpen={onAttachmentOpen ? (att) => onAttachmentOpen(att.id) : undefined}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase 'sources':\n\t\t\treturn (\n\t\t\t\t<AiSources\n\t\t\t\t\tsources={part.items}\n\t\t\t\t\tvariant={part.variant}\n\t\t\t\t\tdefaultExpanded={part.defaultExpanded}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase 'task':\n\t\t\treturn <AiTask task={part.task} />;\n\t\tcase 'artifact':\n\t\t\treturn (\n\t\t\t\t<AiArtifact\n\t\t\t\t\ttitle={part.title}\n\t\t\t\t\tsubtitle={part.subtitle}\n\t\t\t\t\ticon={part.icon}\n\t\t\t\t\tcopyText={part.copyText}\n\t\t\t\t\tactions={part.actions}\n\t\t\t\t\tonOpen={part.onOpen}\n\t\t\t\t\tonDownload={part.onDownload}\n\t\t\t\t>\n\t\t\t\t\t{part.body}\n\t\t\t\t</AiArtifact>\n\t\t\t);\n\t\tcase 'confirmation':\n\t\t\treturn (\n\t\t\t\t<AiConfirmation\n\t\t\t\t\ttitle={part.title}\n\t\t\t\t\tdescription={part.description}\n\t\t\t\t\ttone={part.tone}\n\t\t\t\t\tstatus={part.status}\n\t\t\t\t\tdetails={part.details}\n\t\t\t\t\tonApprove={part.onApprove}\n\t\t\t\t\tonReject={part.onReject}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase 'custom':\n\t\t\treturn <>{part.render()}</>;\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\nfunction extractPlain(node: ReactNode): string {\n\tif (typeof node === 'string' || typeof node === 'number') return String(node);\n\tif (Array.isArray(node)) return node.map(extractPlain).join('');\n\treturn '';\n}\n","/**\n * AiChatPromptInput — multi-line composer for the chat. Carries:\n * - auto-resizing textarea\n * - staged attachment chips above the field\n * - leading actions slot (model picker, attach)\n * - submit / stop buttons (stop replaces submit while `streaming` is true)\n * - keyboard discipline: Enter to submit, Shift+Enter for newline\n *\n * Stateless: the consumer owns `value`, `attachments`, and `streaming`. The\n * component fires `onSubmit` with `{ text, attachments }` on submit.\n */\nimport { useCallback, useRef, type ReactNode } from 'react';\nimport { ArrowUp, Paperclip, Square } from 'lucide-react';\nimport { Button } from '@/components/base/buttons';\nimport { Textarea } from '@/components/base/forms/fields';\nimport { Text } from '@/components/typography';\nimport { useStrings } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport {\n\tdefaultAiChatPromptInputStrings,\n\tinterpolateString,\n\ttype AiChatPromptInputStrings,\n} from '../ai-chat.strings';\nimport type {\n\tAiChatAttachment,\n\tAiChatSubmitValues,\n} from '../ai-chat.types';\nimport { AiChatAttachmentsStrip } from './ai-chat-attachments-strip';\n\nexport interface AiChatPromptInputProps {\n\t/** Current text value (controlled). */\n\tvalue: string;\n\t/** Text change callback. */\n\tonChange: (value: string) => void;\n\t/** Submit callback — fires on Enter or send-button click. */\n\tonSubmit?: (values: AiChatSubmitValues) => void;\n\t/** Stop callback — wired to the stop button while `streaming`. */\n\tonStop?: () => void;\n\t/** Streaming flag — flips submit ↔ stop and disables the submit button. */\n\tstreaming?: boolean;\n\t/** Disable the entire composer (e.g. while waiting for an upload). */\n\tdisabled?: boolean;\n\t/** Staged attachments (controlled). */\n\tattachments?: ReadonlyArray<AiChatAttachment>;\n\t/** Remove a staged attachment. */\n\tonRemoveAttachment?: (id: string) => void;\n\t/** Triggered when the attach button is pressed. */\n\tonAttach?: () => void;\n\t/** Show the attach button (default: when `onAttach` is provided). */\n\tshowAttach?: boolean;\n\t/** Leading slot rendered before the attach button (typically a model picker). */\n\tleadingActions?: ReactNode;\n\t/** Trailing slot rendered before submit (custom action buttons). */\n\ttrailingActions?: ReactNode;\n\t/** Hide the keyboard hint under the field. */\n\thideHint?: boolean;\n\t/** Override the textarea minimum row count. */\n\tminRows?: number;\n\t/** Override the textarea maximum row count before scroll. */\n\tmaxRows?: number;\n\t/** Auto-focus the textarea on mount. */\n\tautoFocus?: boolean;\n\tclassName?: string;\n\tstrings?: Partial<AiChatPromptInputStrings>;\n}\n\nexport function AiChatPromptInput({\n\tvalue,\n\tonChange,\n\tonSubmit,\n\tonStop,\n\tstreaming = false,\n\tdisabled = false,\n\tattachments = [],\n\tonRemoveAttachment,\n\tonAttach,\n\tshowAttach,\n\tleadingActions,\n\ttrailingActions,\n\thideHint = false,\n\tminRows = 1,\n\tmaxRows = 8,\n\tautoFocus = false,\n\tclassName,\n\tstrings: stringsProp,\n}: AiChatPromptInputProps) {\n\tconst strings = useStrings(defaultAiChatPromptInputStrings, stringsProp);\n\tconst textareaRef = useRef<HTMLTextAreaElement | null>(null);\n\n\tconst canSubmit =\n\t\t!streaming && !disabled && (value.trim().length > 0 || attachments.length > 0);\n\n\tconst handleSubmit = useCallback(() => {\n\t\tif (!canSubmit) return;\n\t\tonSubmit?.({ text: value, attachments });\n\t}, [canSubmit, onSubmit, value, attachments]);\n\n\tconst handleKeyDown = useCallback(\n\t\t(e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n\t\t\tif (e.key === 'Enter' && !e.shiftKey && !e.nativeEvent.isComposing) {\n\t\t\t\te.preventDefault();\n\t\t\t\thandleSubmit();\n\t\t\t}\n\t\t},\n\t\t[handleSubmit],\n\t);\n\n\tconst showAttachBtn = showAttach ?? Boolean(onAttach);\n\tconst submitKeyLabel =\n\t\ttypeof navigator !== 'undefined' && navigator.platform?.toLowerCase().includes('mac')\n\t\t\t? '⌘↩'\n\t\t\t: '↩';\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'rounded-xl border border-border bg-card transition-colors duration-150',\n\t\t\t\t'focus-within:border-foreground/20 focus-within:ring-2 focus-within:ring-ring/30',\n\t\t\t\tdisabled && 'opacity-60 pointer-events-none',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{attachments.length > 0 && (\n\t\t\t\t<div className=\"border-b border-border/60 p-2\">\n\t\t\t\t\t<AiChatAttachmentsStrip\n\t\t\t\t\t\tattachments={attachments}\n\t\t\t\t\t\tonRemove={onRemoveAttachment}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t<Textarea\n\t\t\t\tref={textareaRef}\n\t\t\t\tvalue={value}\n\t\t\t\tonChange={(e) => onChange(e.target.value)}\n\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\tplaceholder={strings.placeholder}\n\t\t\t\tautoResize\n\t\t\t\tminRows={minRows}\n\t\t\t\tmaxRows={maxRows}\n\t\t\t\tautoFocus={autoFocus}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'!border-0 !bg-transparent !shadow-none focus-visible:!ring-0 resize-none px-3 py-2.5',\n\t\t\t\t)}\n\t\t\t/>\n\n\t\t\t<div className=\"flex items-center gap-1 border-t border-border/60 px-2 py-1.5\">\n\t\t\t\t{leadingActions}\n\t\t\t\t{showAttachBtn && (\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\tsize=\"icon-sm\"\n\t\t\t\t\t\taria-label={strings.attachAria}\n\t\t\t\t\t\tonClick={onAttach}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Paperclip className=\"size-4\" />\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\t\t\t\t<div className=\"ml-auto flex items-center gap-1\">\n\t\t\t\t\t{trailingActions}\n\t\t\t\t\t{streaming ? (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\tbuttonStyle=\"solid\"\n\t\t\t\t\t\t\tsize=\"icon-sm\"\n\t\t\t\t\t\t\taria-label={strings.stopAria}\n\t\t\t\t\t\t\tonClick={onStop}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Square className=\"size-3.5 fill-current\" />\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\tbuttonStyle=\"solid\"\n\t\t\t\t\t\t\tsize=\"icon-sm\"\n\t\t\t\t\t\t\taria-label={strings.submitAria}\n\t\t\t\t\t\t\tonClick={handleSubmit}\n\t\t\t\t\t\t\tdisabled={!canSubmit}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ArrowUp className=\"size-4\" />\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t{!hideHint && (\n\t\t\t\t<div className=\"px-3 pb-2\">\n\t\t\t\t\t<Text size=\"xxs\" type=\"discrete\">\n\t\t\t\t\t\t{interpolateString(strings.hint, {\n\t\t\t\t\t\t\tsubmitKey: submitKeyLabel,\n\t\t\t\t\t\t\tnewlineKey: '⇧↩',\n\t\t\t\t\t\t})}\n\t\t\t\t\t</Text>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nAiChatPromptInput.displayName = 'AiChatPromptInput';\n","/**\n * AiChatQueue — pending message queue rendered above the prompt input. Used\n * to surface messages the user submitted faster than the assistant could\n * process — each item shows a status pill and an optional cancel control.\n */\nimport { Loader2, X } from 'lucide-react';\nimport { Badge } from '@/components/base/badge';\nimport { Button } from '@/components/base/buttons';\nimport { Text } from '@/components/typography';\nimport { useStrings } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport {\n\tdefaultAiChatQueueStrings,\n\ttype AiChatQueueStrings,\n} from '../ai-chat.strings';\nimport type { AiChatQueueItem } from '../ai-chat.types';\n\nexport interface AiChatQueueProps {\n\titems: ReadonlyArray<AiChatQueueItem>;\n\thideHeader?: boolean;\n\tonCancel?: (id: string) => void;\n\tclassName?: string;\n\tstrings?: Partial<AiChatQueueStrings>;\n}\n\nexport function AiChatQueue({\n\titems,\n\thideHeader = false,\n\tonCancel,\n\tclassName,\n\tstrings: stringsProp,\n}: AiChatQueueProps) {\n\tconst strings = useStrings(defaultAiChatQueueStrings, stringsProp);\n\tif (items.length === 0) return null;\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'rounded-lg border border-border/60 bg-muted/20 px-2.5 py-2',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{!hideHeader && (\n\t\t\t\t<Text\n\t\t\t\t\tsize=\"xxs\"\n\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\tweight=\"medium\"\n\t\t\t\t\tclassName=\"mb-1.5 px-1 uppercase tracking-wider\"\n\t\t\t\t>\n\t\t\t\t\t{strings.header} · {items.length}\n\t\t\t\t</Text>\n\t\t\t)}\n\t\t\t<ul className=\"space-y-1\">\n\t\t\t\t{items.map((item) => {\n\t\t\t\t\tconst status = item.status ?? 'queued';\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<li\n\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\tclassName=\"flex items-center gap-2 rounded-md bg-card px-2 py-1.5\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{status === 'running' ? (\n\t\t\t\t\t\t\t\t<Loader2 className=\"size-3.5 shrink-0 animate-spin text-primary\" />\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\taria-hidden\n\t\t\t\t\t\t\t\t\tclassName=\"size-2 shrink-0 rounded-full bg-muted-foreground/50\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<Text size=\"xs\" className=\"flex-1 truncate\">\n\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t<Badge variant={status === 'running' ? 'primary' : 'secondary'}>\n\t\t\t\t\t\t\t\t{status === 'running' ? strings.runningLabel : strings.queuedLabel}\n\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t{(!!item.onCancel || !!onCancel) && (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\t\tsize=\"icon-xs\"\n\t\t\t\t\t\t\t\t\taria-label={strings.cancelAria}\n\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\titem.onCancel?.();\n\t\t\t\t\t\t\t\t\t\tonCancel?.(item.id);\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<X className=\"size-3.5\" />\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</li>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</ul>\n\t\t</div>\n\t);\n}\n\nAiChatQueue.displayName = 'AiChatQueue';\n","/**\n * AiChatSuggestionsRow — horizontal scrollable strip of small suggestion\n * chips rendered above the prompt input. Distinct from\n * `<AiPromptSuggestions>` (which is a card-grid of richer suggestions used\n * as a welcome surface): this is the inline, dense variant.\n */\nimport { Sparkles } from 'lucide-react';\nimport { Text } from '@/components/typography';\nimport { useStrings } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport {\n\tdefaultAiChatSuggestionsStrings,\n\ttype AiChatSuggestionsStrings,\n} from '../ai-chat.strings';\nimport type { AiChatSuggestion } from '../ai-chat.types';\n\nexport interface AiChatSuggestionsRowProps {\n\tsuggestions: ReadonlyArray<AiChatSuggestion>;\n\tonPick?: (s: AiChatSuggestion) => void;\n\thideHeader?: boolean;\n\tclassName?: string;\n\tstrings?: Partial<AiChatSuggestionsStrings>;\n}\n\nexport function AiChatSuggestionsRow({\n\tsuggestions,\n\tonPick,\n\thideHeader = false,\n\tclassName,\n\tstrings: stringsProp,\n}: AiChatSuggestionsRowProps) {\n\tconst strings = useStrings(defaultAiChatSuggestionsStrings, stringsProp);\n\tif (suggestions.length === 0) return null;\n\treturn (\n\t\t<div className={cn('flex items-center gap-2', className)}>\n\t\t\t{!hideHeader && (\n\t\t\t\t<div className=\"inline-flex shrink-0 items-center gap-1.5\">\n\t\t\t\t\t<Sparkles className=\"size-3.5 text-muted-foreground\" />\n\t\t\t\t\t<Text size=\"xxs\" type=\"secondary\" weight=\"medium\" className=\"uppercase tracking-wider\">\n\t\t\t\t\t\t{strings.header}\n\t\t\t\t\t</Text>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t<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\">\n\t\t\t\t{suggestions.map((s) => {\n\t\t\t\t\tconst Icon = s.icon;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={s.id}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={() => onPick?.(s)}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'inline-flex shrink-0 items-center gap-1.5 rounded-full border border-border/60 bg-card px-2.5 py-1',\n\t\t\t\t\t\t\t\t'transition-[border-color,background] duration-150',\n\t\t\t\t\t\t\t\t'hover:border-foreground/20 hover:bg-muted/40',\n\t\t\t\t\t\t\t\t'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{!!Icon && <Icon className=\"size-3 text-muted-foreground\" />}\n\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" weight=\"medium\">\n\t\t\t\t\t\t\t\t{s.label}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nAiChatSuggestionsRow.displayName = 'AiChatSuggestionsRow';\n","/**\n * AiChat — framework-agnostic AI chat surface. Tie-together component for\n * the `features/ai-chat/*` partials. Renders an optional agent header, the\n * scrollable conversation, an optional queue + suggestions row, and the\n * prompt input.\n *\n * Composition seams:\n * - `slots` — replace any region (header, intro, empty, queue,\n * suggestions, input, belowMessages) or per-message\n * (`renderMessage`).\n * - `strings` — deep-partial override of every default copy line\n * (prompt, conversation, queue, suggestions, message).\n * - Partials — every partial is exported individually so a consumer\n * can build a custom layout against the same data shape.\n *\n * Headless usage:\n * - The `useAiChatScroll` hook is exported for consumers building a\n * custom conversation layout while keeping auto-stick-to-bottom.\n *\n * Framework-agnostic:\n * - No router, no i18n SDK, no fetcher. Submission is a callback\n * (`onSubmit`); messages, queue, attachments are all controlled props.\n */\nimport { useCallback, useState, type ReactNode } from 'react';\nimport { AiAgent } from '@/components/composed/ai/ai-agent';\nimport { Text } from '@/components/typography';\nimport { useStrings } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport {\n\tdefaultAiChatStrings,\n\ttype AiChatStrings,\n} from './ai-chat.strings';\nimport type {\n\tAiChatAgent,\n\tAiChatAttachment,\n\tAiChatMessage as AiChatMessageType,\n\tAiChatQueueItem,\n\tAiChatSlots,\n\tAiChatSubmitValues,\n\tAiChatSuggestion,\n} from './ai-chat.types';\nimport {\n\tAiChatConversation,\n\tAiChatEmptyState,\n\tAiChatMessage,\n\tAiChatPromptInput,\n\tAiChatQueue,\n\tAiChatSuggestionsRow,\n} from './partials';\n\nexport interface AiChatProps {\n\t/** Conversation messages — order is significant. */\n\tmessages: ReadonlyArray<AiChatMessageType>;\n\n\t/** Controlled prompt input value. */\n\tinputValue: string;\n\t/** Prompt input change callback. */\n\tonInputChange: (value: string) => void;\n\t/** Fired on submit (Enter or send button). */\n\tonSubmit?: (values: AiChatSubmitValues) => void;\n\t/** Fired when the user clicks the stop button while `streaming`. */\n\tonStop?: () => void;\n\t/** Streaming flag — controls submit/stop UI in the prompt input. */\n\tstreaming?: boolean;\n\t/** Disable composer entirely. */\n\tdisabled?: boolean;\n\n\t/** Currently staged attachments. */\n\tattachments?: ReadonlyArray<AiChatAttachment>;\n\t/** Remove a staged attachment. */\n\tonRemoveAttachment?: (id: string) => void;\n\t/** Fires when the user clicks the attach button. */\n\tonAttach?: () => void;\n\t/** Toggles the attach button visibility. Defaults to `true` when `onAttach` is provided. */\n\tshowAttach?: boolean;\n\n\t/** Agent identity — drives the optional header strip. Pass `null` to hide. */\n\tagent?: AiChatAgent | null;\n\t/** Trailing slot inside the header (e.g. settings button). */\n\theaderActions?: ReactNode;\n\n\t/** Pending message queue (rendered above the input). */\n\tqueue?: ReadonlyArray<AiChatQueueItem>;\n\t/** Cancel callback — fires per-item when the queue chip's × is clicked. */\n\tonCancelQueueItem?: (id: string) => void;\n\n\t/** Inline quick suggestions (rendered above the input). */\n\tsuggestions?: ReadonlyArray<AiChatSuggestion>;\n\t/** Suggestion select callback. */\n\tonPickSuggestion?: (s: AiChatSuggestion) => void;\n\n\t/** Per-message copy callback. */\n\tonMessageCopy?: (message: AiChatMessageType) => void;\n\t/** Per-message regenerate callback (assistant only). */\n\tonMessageRegenerate?: (message: AiChatMessageType) => void;\n\t/** Per-message attachment open callback. */\n\tonAttachmentOpen?: (messageId: string, attachmentId: string) => void;\n\n\t/** Disable auto-stick-to-bottom in the conversation. */\n\tdisableAutoScroll?: boolean;\n\n\t/** Slot map for replacing default surfaces. */\n\tslots?: AiChatSlots;\n\t/** String overrides. */\n\tstrings?: Partial<AiChatStrings>;\n\tclassName?: string;\n}\n\nexport function AiChat({\n\tmessages,\n\tinputValue,\n\tonInputChange,\n\tonSubmit,\n\tonStop,\n\tstreaming = false,\n\tdisabled = false,\n\tattachments = [],\n\tonRemoveAttachment,\n\tonAttach,\n\tshowAttach,\n\tagent,\n\theaderActions,\n\tqueue = [],\n\tonCancelQueueItem,\n\tsuggestions = [],\n\tonPickSuggestion,\n\tonMessageCopy,\n\tonMessageRegenerate,\n\tonAttachmentOpen,\n\tdisableAutoScroll,\n\tslots,\n\tstrings: stringsProp,\n\tclassName,\n}: AiChatProps) {\n\tconst strings = useStrings(defaultAiChatStrings, stringsProp);\n\tconst [, force] = useState(0);\n\n\tconst renderMessage = useCallback(\n\t\t(\n\t\t\tmessage: AiChatMessageType,\n\t\t\tctx: { isLast: boolean; index: number },\n\t\t): ReactNode => {\n\t\t\tif (slots?.renderMessage) {\n\t\t\t\treturn slots.renderMessage(message, ctx);\n\t\t\t}\n\t\t\treturn (\n\t\t\t\t<AiChatMessage className=\"ai-chat--component\"\n\t\t\t\t\tmessage={message}\n\t\t\t\t\tstrings={strings.message}\n\t\t\t\t\tonCopy={\n\t\t\t\t\t\tonMessageCopy ? () => onMessageCopy(message) : undefined\n\t\t\t\t\t}\n\t\t\t\t\tonRegenerate={\n\t\t\t\t\t\tonMessageRegenerate\n\t\t\t\t\t\t\t? () => onMessageRegenerate(message)\n\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t}\n\t\t\t\t\tonAttachmentOpen={\n\t\t\t\t\t\tonAttachmentOpen\n\t\t\t\t\t\t\t? (attachmentId) => onAttachmentOpen(message.id, attachmentId)\n\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t);\n\t\t},\n\t\t[\n\t\t\tonAttachmentOpen,\n\t\t\tonMessageCopy,\n\t\t\tonMessageRegenerate,\n\t\t\tslots,\n\t\t\tstrings.message,\n\t\t],\n\t);\n\n\tconst Header: ReactNode =\n\t\tslots?.header ??\n\t\t(agent ? (\n\t\t\t<div className=\"flex items-center gap-3 border-b border-border bg-card px-3 py-2 sm:px-4\">\n\t\t\t\t<AiAgent\n\t\t\t\t\tname={agent.name}\n\t\t\t\t\ticon={agent.icon}\n\t\t\t\t\tavatar={agent.avatar}\n\t\t\t\t\tsubtitle={agent.subtitle}\n\t\t\t\t\ttone={agent.tone}\n\t\t\t\t\tstatus={agent.status}\n\t\t\t\t\tvariant=\"inline\"\n\t\t\t\t/>\n\t\t\t\t{!!headerActions && (\n\t\t\t\t\t<div className=\"ml-auto flex items-center gap-1\">{headerActions}</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t) : null);\n\n\tconst Empty: ReactNode =\n\t\tslots?.empty ??\n\t\t(messages.length === 0 ? (\n\t\t\t<AiChatEmptyState\n\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t/>\n\t\t) : null);\n\n\tconst Queue: ReactNode =\n\t\tslots?.queue ??\n\t\t(queue.length > 0 ? (\n\t\t\t<AiChatQueue\n\t\t\t\titems={queue}\n\t\t\t\tonCancel={onCancelQueueItem}\n\t\t\t\tstrings={strings.queue}\n\t\t\t/>\n\t\t) : null);\n\n\tconst Suggestions: ReactNode =\n\t\tslots?.suggestions ??\n\t\t(suggestions.length > 0 ? (\n\t\t\t<AiChatSuggestionsRow\n\t\t\t\tsuggestions={suggestions}\n\t\t\t\tonPick={onPickSuggestion}\n\t\t\t\tstrings={strings.suggestions}\n\t\t\t/>\n\t\t) : null);\n\n\tconst Input: ReactNode =\n\t\tslots?.input ?? (\n\t\t\t<AiChatPromptInput\n\t\t\t\tvalue={inputValue}\n\t\t\t\tonChange={onInputChange}\n\t\t\t\tonSubmit={(values) => {\n\t\t\t\t\tonSubmit?.(values);\n\t\t\t\t\t// Force re-render so consumers that read inputValue/attachments\n\t\t\t\t\t// from controlled state see the freshly cleared values they\n\t\t\t\t\t// pushed in their onSubmit handler.\n\t\t\t\t\tforce((v) => v + 1);\n\t\t\t\t}}\n\t\t\t\tonStop={onStop}\n\t\t\t\tstreaming={streaming}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tattachments={attachments}\n\t\t\t\tonRemoveAttachment={onRemoveAttachment}\n\t\t\t\tonAttach={onAttach}\n\t\t\t\tshowAttach={showAttach}\n\t\t\t\tstrings={strings.prompt}\n\t\t\t/>\n\t\t);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'flex h-full flex-col overflow-hidden rounded-xl border border-border bg-background',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{Header}\n\n\t\t\t<AiChatConversation\n\t\t\t\tmessages={messages}\n\t\t\t\trenderMessage={renderMessage}\n\t\t\t\tintro={slots?.intro}\n\t\t\t\tfooter={slots?.belowMessages}\n\t\t\t\tempty={Empty}\n\t\t\t\tdisableAutoScroll={disableAutoScroll}\n\t\t\t\tstrings={strings.conversation}\n\t\t\t/>\n\n\t\t\t{(Queue || Suggestions || Input) && (\n\t\t\t\t<div className=\"border-t border-border bg-card/60\">\n\t\t\t\t\t{Queue && (\n\t\t\t\t\t\t<div className=\"px-3 pb-2 pt-3 sm:px-4\">{Queue}</div>\n\t\t\t\t\t)}\n\t\t\t\t\t{Suggestions && (\n\t\t\t\t\t\t<div className={cn('px-3 sm:px-4', !Queue && 'pt-3', 'pb-2')}>\n\t\t\t\t\t\t\t{Suggestions}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t{Input && (\n\t\t\t\t\t\t<div className=\"px-3 pb-3 pt-2 sm:px-4 sm:pb-4\">{Input}</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{disabled && (\n\t\t\t\t<Text className=\"sr-only\" aria-live=\"polite\">\n\t\t\t\t\tChat is disabled\n\t\t\t\t</Text>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nAiChat.displayName = 'AiChat';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../../../../src/components/features/ai-chat/ai-chat.strings.ts","../../../../src/components/features/ai-chat/partials/ai-chat-attachments-strip.tsx","../../../../src/components/features/ai-chat/hooks/use-ai-chat-scroll.ts","../../../../src/components/features/ai-chat/partials/ai-chat-conversation.tsx","../../../../src/components/features/ai-chat/partials/ai-chat-empty-state.tsx","../../../../src/components/features/ai-chat/partials/ai-chat-message.tsx","../../../../src/components/features/ai-chat/partials/ai-chat-prompt-input.tsx","../../../../src/components/features/ai-chat/partials/ai-chat-queue.tsx","../../../../src/components/features/ai-chat/partials/ai-chat-suggestions-row.tsx","../../../../src/components/features/ai-chat/ai-chat.tsx"],"sourcesContent":["/**\n * Strings for `<AiChat>` and its partials. Each interface is co-located so\n * partials and the feature root all read from one source of truth (rule 19).\n * Consumers override via the `strings` prop on the relevant component; values\n * are deep-merged over the defaults so partial overrides are safe.\n */\n\nexport interface AiChatPromptInputStrings {\n\t/** Placeholder copy for the textarea. */\n\tplaceholder: string;\n\t/** Aria label for the attach button. */\n\tattachAria: string;\n\t/** Aria label for the submit button. */\n\tsubmitAria: string;\n\t/** Aria label for the stop button (replaces submit while streaming). */\n\tstopAria: string;\n\t/** Aria label for the model picker button (when `modelPicker` is provided). */\n\tmodelPickerAria: string;\n\t/** Hint shown under the input. Supports `{{key}}` for the submit shortcut. */\n\thint: string;\n}\n\nexport const defaultAiChatPromptInputStrings: AiChatPromptInputStrings = {\n\tplaceholder: 'Ask anything…',\n\tattachAria: 'Attach files',\n\tsubmitAria: 'Send message',\n\tstopAria: 'Stop generating',\n\tmodelPickerAria: 'Choose model',\n\thint: 'Press {{submitKey}} to send · {{newlineKey}} for newline',\n};\n\nexport interface AiChatConversationStrings {\n\tscrollToBottom: string;\n\tscrollToBottomAria: string;\n}\n\nexport const defaultAiChatConversationStrings: AiChatConversationStrings = {\n\tscrollToBottom: 'Jump to latest',\n\tscrollToBottomAria: 'Scroll to bottom',\n};\n\nexport interface AiChatQueueStrings {\n\theader: string;\n\tcancelAria: string;\n\tqueuedLabel: string;\n\trunningLabel: string;\n}\n\nexport const defaultAiChatQueueStrings: AiChatQueueStrings = {\n\theader: 'In queue',\n\tcancelAria: 'Remove from queue',\n\tqueuedLabel: 'Queued',\n\trunningLabel: 'Running',\n};\n\nexport interface AiChatSuggestionsStrings {\n\theader: string;\n}\n\nexport const defaultAiChatSuggestionsStrings: AiChatSuggestionsStrings = {\n\theader: 'Try',\n};\n\nexport interface AiChatMessageStrings {\n\tpending: string;\n}\n\nexport const defaultAiChatMessageStrings: AiChatMessageStrings = {\n\tpending: 'Thinking…',\n};\n\nexport interface AiChatStrings {\n\tprompt: AiChatPromptInputStrings;\n\tconversation: AiChatConversationStrings;\n\tqueue: AiChatQueueStrings;\n\tsuggestions: AiChatSuggestionsStrings;\n\tmessage: AiChatMessageStrings;\n\temptyTitle: string;\n\temptyDescription: string;\n}\n\nexport const defaultAiChatStrings: AiChatStrings = {\n\tprompt: defaultAiChatPromptInputStrings,\n\tconversation: defaultAiChatConversationStrings,\n\tqueue: defaultAiChatQueueStrings,\n\tsuggestions: defaultAiChatSuggestionsStrings,\n\tmessage: defaultAiChatMessageStrings,\n\temptyTitle: 'Start a conversation',\n\temptyDescription: 'Ask a question, share context, or attach a file to get going.',\n};\n\n/** Replace `{{key}}` tokens with values from `params`. */\nexport function interpolateString(\n\ttemplate: string,\n\tparams: Record<string, string | number>,\n): string {\n\treturn template.replace(/\\{\\{\\s*(\\w+)\\s*\\}\\}/g, (m, k) => {\n\t\tconst v = params[k];\n\t\treturn v === undefined ? m : String(v);\n\t});\n}\n","/**\n * AiChatAttachmentsStrip — flex-wrap row of `<AiAttachment>` chips. Used both\n * in the prompt input (staged uploads — pass `onRemove` to enable a remove\n * button) and inside messages (read-only attachment list).\n */\nimport { AiAttachment } from '@/components/composed/ai/ai-attachment';\nimport { cn } from '@/lib/utils';\n\nimport type { AiChatAttachment } from '../ai-chat.types';\n\nexport interface AiChatAttachmentsStripProps {\n\tattachments: ReadonlyArray<AiChatAttachment>;\n\t/** When set, each chip gets a remove button wired to this handler. */\n\tonRemove?: (id: string) => void;\n\t/** When set, click on a chip calls this. */\n\tonOpen?: (att: AiChatAttachment) => void;\n\tclassName?: string;\n}\n\nexport function AiChatAttachmentsStrip({\n\tattachments,\n\tonRemove,\n\tonOpen,\n\tclassName,\n}: AiChatAttachmentsStripProps) {\n\tif (attachments.length === 0) return null;\n\treturn (\n\t\t<div className={cn('flex flex-wrap gap-2', className)}>\n\t\t\t{attachments.map((att) => (\n\t\t\t\t<AiAttachment\n\t\t\t\t\tkey={att.id}\n\t\t\t\t\tname={att.name}\n\t\t\t\t\tmeta={att.meta}\n\t\t\t\t\tkind={att.kind}\n\t\t\t\t\ticon={att.icon}\n\t\t\t\t\tthumbnailUrl={att.thumbnailUrl}\n\t\t\t\t\tprogress={att.progress}\n\t\t\t\t\terrored={att.errored}\n\t\t\t\t\tonOpen={onOpen ? () => onOpen(att) : undefined}\n\t\t\t\t\tonRemove={onRemove ? () => onRemove(att.id) : undefined}\n\t\t\t\t/>\n\t\t\t))}\n\t\t</div>\n\t);\n}\n\nAiChatAttachmentsStrip.displayName = 'AiChatAttachmentsStrip';\n","/**\n * useAiChatScroll — auto-stick-to-bottom scroll behaviour for chat\n * conversations. Detects when the user has scrolled away from the latest\n * message and pauses auto-scroll until they return.\n *\n * Returns:\n * - `containerRef` — attach to the scroll viewport.\n * - `endRef` — attach to a sentinel at the very bottom.\n * - `isAtBottom` — true when the viewport is pinned to the latest content.\n * - `scrollToBottom` — imperatively scroll to the sentinel.\n */\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nexport interface UseAiChatScrollOptions {\n\t/** Distance (px) from bottom counted as \"at bottom\". */\n\tthreshold?: number;\n\t/** Re-evaluate on these dependencies (typically the message count). */\n\tdependency?: unknown;\n\t/** Disable auto-scroll-on-update behaviour. */\n\tdisableAutoScroll?: boolean;\n}\n\nexport interface UseAiChatScrollReturn {\n\tcontainerRef: React.RefObject<HTMLDivElement | null>;\n\tendRef: React.RefObject<HTMLDivElement | null>;\n\tisAtBottom: boolean;\n\tscrollToBottom: (behavior?: ScrollBehavior) => void;\n}\n\nexport function useAiChatScroll({\n\tthreshold = 80,\n\tdependency,\n\tdisableAutoScroll = false,\n}: UseAiChatScrollOptions = {}): UseAiChatScrollReturn {\n\tconst containerRef = useRef<HTMLDivElement | null>(null);\n\tconst endRef = useRef<HTMLDivElement | null>(null);\n\tconst [isAtBottom, setIsAtBottom] = useState(true);\n\n\tconst scrollToBottom = useCallback(\n\t\t(behavior: ScrollBehavior = 'smooth') => {\n\t\t\tendRef.current?.scrollIntoView({ behavior, block: 'end' });\n\t\t},\n\t\t[],\n\t);\n\n\t// Track scroll position so we can pause auto-scroll when the user reads up.\n\tuseEffect(() => {\n\t\tconst el = containerRef.current;\n\t\tif (!el) return;\n\t\tconst onScroll = () => {\n\t\t\tconst distance = el.scrollHeight - el.clientHeight - el.scrollTop;\n\t\t\tsetIsAtBottom(distance <= threshold);\n\t\t};\n\t\tonScroll();\n\t\tel.addEventListener('scroll', onScroll, { passive: true });\n\t\treturn () => el.removeEventListener('scroll', onScroll);\n\t}, [threshold]);\n\n\t// Auto-scroll when content updates and the user is pinned at the bottom.\n\tuseEffect(() => {\n\t\tif (disableAutoScroll) return;\n\t\tif (!isAtBottom) return;\n\t\t// Use rAF so we wait for layout to settle after the new content paints.\n\t\tconst id = window.requestAnimationFrame(() => scrollToBottom('auto'));\n\t\treturn () => window.cancelAnimationFrame(id);\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [dependency, disableAutoScroll]);\n\n\treturn { containerRef, endRef, isAtBottom, scrollToBottom };\n}\n","/**\n * AiChatConversation — scrollable list container for chat messages with\n * auto-stick-to-bottom behaviour. Renders each message via the consumer's\n * `renderMessage` slot (or the default `<AiChatMessage>` via the parent\n * `<AiChat>`). Surfaces a \"Jump to latest\" pill when the user scrolls away\n * from the bottom while content streams in.\n */\nimport { ArrowDown } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { Button } from '@/components/base/buttons';\nimport { Text } from '@/components/typography';\nimport { useStrings } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport {\n\tdefaultAiChatConversationStrings,\n\ttype AiChatConversationStrings,\n} from '../ai-chat.strings';\nimport type {\n\tAiChatMessage as AiChatMessageType,\n\tAiChatRenderMessageContext,\n} from '../ai-chat.types';\nimport { useAiChatScroll } from '../hooks/use-ai-chat-scroll';\n\nexport interface AiChatConversationProps {\n\tmessages: ReadonlyArray<AiChatMessageType>;\n\trenderMessage: (\n\t\tmessage: AiChatMessageType,\n\t\tctx: AiChatRenderMessageContext,\n\t) => ReactNode;\n\t/** Render before the messages list (intro card, agent greeting). */\n\tintro?: ReactNode;\n\t/** Render after the messages list (e.g. tip ribbon). */\n\tfooter?: ReactNode;\n\t/** Replaces the empty state when `messages.length === 0`. */\n\tempty?: ReactNode;\n\t/** Pause auto-scroll-on-update. */\n\tdisableAutoScroll?: boolean;\n\tclassName?: string;\n\tstrings?: Partial<AiChatConversationStrings>;\n}\n\nexport function AiChatConversation({\n\tmessages,\n\trenderMessage,\n\tintro,\n\tfooter,\n\tempty,\n\tdisableAutoScroll,\n\tclassName,\n\tstrings: stringsProp,\n}: AiChatConversationProps) {\n\tconst strings = useStrings(defaultAiChatConversationStrings, stringsProp);\n\tconst { containerRef, endRef, isAtBottom, scrollToBottom } = useAiChatScroll({\n\t\tdependency: messages.length,\n\t\tdisableAutoScroll,\n\t});\n\n\tconst isEmpty = messages.length === 0 && !intro;\n\n\treturn (\n\t\t<div className={cn('relative flex h-full min-h-0 flex-col', className)}>\n\t\t\t<div\n\t\t\t\tref={containerRef}\n\t\t\t\tclassName=\"flex-1 overflow-y-auto px-3 py-4 sm:px-4\"\n\t\t\t>\n\t\t\t\t{!!intro && <div className=\"mb-4\">{intro}</div>}\n\n\t\t\t\t{isEmpty ? (\n\t\t\t\t\tempty ?? (\n\t\t\t\t\t\t<div className=\"flex h-full items-center justify-center px-6 py-12\">\n\t\t\t\t\t\t\t<Text type=\"secondary\">No messages yet.</Text>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)\n\t\t\t\t) : (\n\t\t\t\t\t<ol className=\"space-y-4\">\n\t\t\t\t\t\t{messages.map((message, idx) => {\n\t\t\t\t\t\t\tconst ctx: AiChatRenderMessageContext = {\n\t\t\t\t\t\t\t\tisLast: idx === messages.length - 1,\n\t\t\t\t\t\t\t\tindex: idx,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<li key={message.id}>{renderMessage(message, ctx)}</li>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</ol>\n\t\t\t\t)}\n\n\t\t\t\t{!!footer && <div className=\"mt-4\">{footer}</div>}\n\n\t\t\t\t<div ref={endRef} aria-hidden className=\"h-px\" />\n\t\t\t</div>\n\n\t\t\t{!isAtBottom && (\n\t\t\t\t<div className=\"pointer-events-none absolute bottom-3 left-1/2 -translate-x-1/2\">\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\tbuttonStyle=\"solid\"\n\t\t\t\t\t\taria-label={strings.scrollToBottomAria}\n\t\t\t\t\t\tonClick={() => scrollToBottom('smooth')}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'pointer-events-auto rounded-full shadow-md',\n\t\t\t\t\t\t\t'border border-border/60',\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ArrowDown className=\"size-3.5\" />\n\t\t\t\t\t\t{strings.scrollToBottom}\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nAiChatConversation.displayName = 'AiChatConversation';\n","/**\n * AiChatEmptyState — default empty surface for `<AiChat>` when no messages\n * are present and no intro is provided. Centers a title + description with\n * an optional below-content slot for prompt-suggestion grids.\n */\nimport type { ReactNode } from 'react';\nimport { Sparkles } from 'lucide-react';\nimport { IconBadge } from '@/components/base/display';\nimport { Heading, Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nexport interface AiChatEmptyStateProps {\n\ttitle?: ReactNode;\n\tdescription?: ReactNode;\n\ticon?: React.ElementType;\n\tbelow?: ReactNode;\n\tclassName?: string;\n}\n\nexport function AiChatEmptyState({\n\ttitle = 'Start a conversation',\n\tdescription,\n\ticon: IconComponent = Sparkles,\n\tbelow,\n\tclassName,\n}: AiChatEmptyStateProps) {\n\treturn (\n\t\t<div className={cn('flex h-full flex-col items-center justify-center gap-3 px-4 py-10 text-center', className)}>\n\t\t\t<IconBadge icon={IconComponent} tone=\"primary\" size=\"md\" shape=\"square\" />\n\t\t\t<div className=\"max-w-md space-y-1\">\n\t\t\t\t<Heading tag=\"h4\">{title}</Heading>\n\t\t\t\t{!!description && (\n\t\t\t\t\t<Text type=\"secondary\">{description}</Text>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t{!!below && <div className=\"mt-4 w-full max-w-2xl\">{below}</div>}\n\t\t</div>\n\t);\n}\n\nAiChatEmptyState.displayName = 'AiChatEmptyState';\n","/**\n * AiChatMessage — message renderer that wraps `<AiMessageBubble>` and routes\n * each `parts[]` entry to its dedicated `composed/ai/*` surface (text, code,\n * tool calls, reasoning, sources, attachments, …).\n *\n * Most surfaces sit BELOW the bubble (artifact, sources, task) since they\n * carry their own chrome; plain text and inline citations render INSIDE the\n * bubble. Custom-typed parts call `render()` directly.\n */\nimport type { ReactNode } from 'react';\nimport { AiArtifact } from '@/components/composed/ai/ai-artifact';\nimport { AiChainOfThought } from '@/components/composed/ai/ai-chain-of-thought';\nimport { AiCodeBlock } from '@/components/composed/ai/ai-code-block';\nimport { AiConfirmation } from '@/components/composed/ai/ai-confirmation';\nimport { AiMessageBubble } from '@/components/composed/ai/ai-message-bubble';\nimport { AiReasoning } from '@/components/composed/ai/ai-reasoning';\nimport { AiShimmer } from '@/components/composed/ai/ai-shimmer';\nimport { AiSources } from '@/components/composed/ai/ai-sources';\nimport { AiTask } from '@/components/composed/ai/ai-task';\nimport { AiToolCall } from '@/components/composed/ai/ai-tool-call';\nimport { Text } from '@/components/typography';\nimport { useStrings } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport {\n\tdefaultAiChatMessageStrings,\n\ttype AiChatMessageStrings,\n} from '../ai-chat.strings';\nimport type {\n\tAiChatMessage as AiChatMessageType,\n\tAiChatMessagePart,\n} from '../ai-chat.types';\nimport { AiChatAttachmentsStrip } from './ai-chat-attachments-strip';\n\nexport interface AiChatMessageProps {\n\tmessage: AiChatMessageType;\n\t/** Copy callback forwarded to the underlying bubble. */\n\tonCopy?: () => void;\n\t/** Regenerate callback forwarded to the underlying bubble (assistant only). */\n\tonRegenerate?: () => void;\n\t/** Open handler for attachment chips inside the message. */\n\tonAttachmentOpen?: (attachmentId: string) => void;\n\tclassName?: string;\n\tstrings?: Partial<AiChatMessageStrings>;\n}\n\nexport function AiChatMessage({\n\tmessage,\n\tonCopy,\n\tonRegenerate,\n\tonAttachmentOpen,\n\tclassName,\n\tstrings: stringsProp,\n}: AiChatMessageProps) {\n\tconst strings = useStrings(defaultAiChatMessageStrings, stringsProp);\n\n\t// Split parts: in-bubble (text) vs below-bubble (everything else).\n\tconst inBubble: AiChatMessagePart[] = [];\n\tconst below: AiChatMessagePart[] = [];\n\tfor (const part of message.parts) {\n\t\tif (part.type === 'text') inBubble.push(part);\n\t\telse below.push(part);\n\t}\n\n\tconst plainText =\n\t\tinBubble\n\t\t\t.map((p) => (p.type === 'text' ? p.plain ?? extractPlain(p.content) : ''))\n\t\t\t.filter(Boolean)\n\t\t\t.join('\\n') || undefined;\n\n\tconst bubbleContent: ReactNode = message.pending ? (\n\t\t<AiShimmer>{strings.pending}</AiShimmer>\n\t) : inBubble.length === 0 && below.length > 0 ? null : (\n\t\t<div className=\"space-y-2\">\n\t\t\t{inBubble.map((part, idx) =>\n\t\t\t\tpart.type === 'text' ? (\n\t\t\t\t\t<div key={idx} className=\"whitespace-pre-wrap\">\n\t\t\t\t\t\t{part.content}\n\t\t\t\t\t</div>\n\t\t\t\t) : null,\n\t\t\t)}\n\t\t</div>\n\t);\n\n\treturn (\n\t\t<div className={cn('space-y-2', className)}>\n\t\t\t{(bubbleContent !== null || message.pending) && (\n\t\t\t\t<AiMessageBubble\n\t\t\t\t\trole={message.role}\n\t\t\t\t\tavatar={message.avatar}\n\t\t\t\t\tauthorName={message.authorName}\n\t\t\t\t\ttimestamp={message.timestamp}\n\t\t\t\t\tplainText={plainText}\n\t\t\t\t\tloading={message.loading}\n\t\t\t\t\tonCopy={plainText ? onCopy ?? (() => undefined) : undefined}\n\t\t\t\t\tonRegenerate={onRegenerate}\n\t\t\t\t>\n\t\t\t\t\t{bubbleContent}\n\t\t\t\t</AiMessageBubble>\n\t\t\t)}\n\n\t\t\t{below.length > 0 && (\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'space-y-2',\n\t\t\t\t\t\tmessage.role === 'user'\n\t\t\t\t\t\t\t? 'pr-9 sm:pl-12'\n\t\t\t\t\t\t\t: 'pl-9 sm:pr-12',\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{below.map((part, idx) => (\n\t\t\t\t\t\t<PartRenderer\n\t\t\t\t\t\t\tkey={idx}\n\t\t\t\t\t\t\tpart={part}\n\t\t\t\t\t\t\tonAttachmentOpen={onAttachmentOpen}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{!!message.trailing && (\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\tmessage.role === 'user' ? 'pr-9 sm:pl-12' : 'pl-9 sm:pr-12',\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{message.trailing}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nAiChatMessage.displayName = 'AiChatMessage';\n\nfunction PartRenderer({\n\tpart,\n\tonAttachmentOpen,\n}: {\n\tpart: AiChatMessagePart;\n\tonAttachmentOpen?: (id: string) => void;\n}) {\n\tswitch (part.type) {\n\t\tcase 'text':\n\t\t\t// In-bubble. Should not reach here.\n\t\t\treturn <Text>{part.content}</Text>;\n\t\tcase 'reasoning':\n\t\t\treturn (\n\t\t\t\t<AiReasoning\n\t\t\t\t\tstreaming={part.streaming}\n\t\t\t\t\tdurationSeconds={part.durationSeconds}\n\t\t\t\t>\n\t\t\t\t\t{part.content}\n\t\t\t\t</AiReasoning>\n\t\t\t);\n\t\tcase 'chain-of-thought':\n\t\t\treturn <AiChainOfThought steps={part.steps} streaming={part.streaming} />;\n\t\tcase 'tool':\n\t\t\treturn (\n\t\t\t\t<AiToolCall\n\t\t\t\t\tname={part.name}\n\t\t\t\t\tstatus={part.status}\n\t\t\t\t\ticon={part.icon}\n\t\t\t\t\targs={part.args}\n\t\t\t\t\tresult={part.result}\n\t\t\t\t\terror={part.error}\n\t\t\t\t\tdurationMs={part.durationMs}\n\t\t\t\t\tdefaultExpanded={part.defaultExpanded}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase 'code':\n\t\t\treturn (\n\t\t\t\t<AiCodeBlock\n\t\t\t\t\tcode={part.code}\n\t\t\t\t\tlanguage={part.language}\n\t\t\t\t\tfilename={part.filename}\n\t\t\t\t\tshowLineNumbers={part.showLineNumbers}\n\t\t\t\t\thighlightLines={part.highlightLines}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase 'attachments':\n\t\t\treturn (\n\t\t\t\t<AiChatAttachmentsStrip\n\t\t\t\t\tattachments={part.items}\n\t\t\t\t\tonOpen={onAttachmentOpen ? (att) => onAttachmentOpen(att.id) : undefined}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase 'sources':\n\t\t\treturn (\n\t\t\t\t<AiSources\n\t\t\t\t\tsources={part.items}\n\t\t\t\t\tvariant={part.variant}\n\t\t\t\t\tdefaultExpanded={part.defaultExpanded}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase 'task':\n\t\t\treturn <AiTask task={part.task} />;\n\t\tcase 'artifact':\n\t\t\treturn (\n\t\t\t\t<AiArtifact\n\t\t\t\t\ttitle={part.title}\n\t\t\t\t\tsubtitle={part.subtitle}\n\t\t\t\t\ticon={part.icon}\n\t\t\t\t\tcopyText={part.copyText}\n\t\t\t\t\tactions={part.actions}\n\t\t\t\t\tonOpen={part.onOpen}\n\t\t\t\t\tonDownload={part.onDownload}\n\t\t\t\t>\n\t\t\t\t\t{part.body}\n\t\t\t\t</AiArtifact>\n\t\t\t);\n\t\tcase 'confirmation':\n\t\t\treturn (\n\t\t\t\t<AiConfirmation\n\t\t\t\t\ttitle={part.title}\n\t\t\t\t\tdescription={part.description}\n\t\t\t\t\ttone={part.tone}\n\t\t\t\t\tstatus={part.status}\n\t\t\t\t\tdetails={part.details}\n\t\t\t\t\tonApprove={part.onApprove}\n\t\t\t\t\tonReject={part.onReject}\n\t\t\t\t/>\n\t\t\t);\n\t\tcase 'custom':\n\t\t\treturn <>{part.render()}</>;\n\t\tdefault:\n\t\t\treturn null;\n\t}\n}\n\nfunction extractPlain(node: ReactNode): string {\n\tif (typeof node === 'string' || typeof node === 'number') return String(node);\n\tif (Array.isArray(node)) return node.map(extractPlain).join('');\n\treturn '';\n}\n","/**\n * AiChatPromptInput — multi-line composer for the chat. Carries:\n * - auto-resizing textarea\n * - staged attachment chips above the field\n * - leading actions slot (model picker, attach)\n * - submit / stop buttons (stop replaces submit while `streaming` is true)\n * - keyboard discipline: Enter to submit, Shift+Enter for newline\n *\n * Stateless: the consumer owns `value`, `attachments`, and `streaming`. The\n * component fires `onSubmit` with `{ text, attachments }` on submit.\n */\nimport { useCallback, useRef, type ReactNode } from 'react';\nimport { ArrowUp, Paperclip, Square } from 'lucide-react';\nimport { Button } from '@/components/base/buttons';\nimport { Textarea } from '@/components/base/forms/fields';\nimport { Text } from '@/components/typography';\nimport { useStrings } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport {\n\tdefaultAiChatPromptInputStrings,\n\tinterpolateString,\n\ttype AiChatPromptInputStrings,\n} from '../ai-chat.strings';\nimport type {\n\tAiChatAttachment,\n\tAiChatSubmitValues,\n} from '../ai-chat.types';\nimport { AiChatAttachmentsStrip } from './ai-chat-attachments-strip';\n\nexport interface AiChatPromptInputProps {\n\t/** Current text value (controlled). */\n\tvalue: string;\n\t/** Text change callback. */\n\tonChange: (value: string) => void;\n\t/** Submit callback — fires on Enter or send-button click. */\n\tonSubmit?: (values: AiChatSubmitValues) => void;\n\t/** Stop callback — wired to the stop button while `streaming`. */\n\tonStop?: () => void;\n\t/** Streaming flag — flips submit ↔ stop and disables the submit button. */\n\tstreaming?: boolean;\n\t/** Disable the entire composer (e.g. while waiting for an upload). */\n\tdisabled?: boolean;\n\t/** Staged attachments (controlled). */\n\tattachments?: ReadonlyArray<AiChatAttachment>;\n\t/** Remove a staged attachment. */\n\tonRemoveAttachment?: (id: string) => void;\n\t/** Triggered when the attach button is pressed. */\n\tonAttach?: () => void;\n\t/** Show the attach button (default: when `onAttach` is provided). */\n\tshowAttach?: boolean;\n\t/** Leading slot rendered before the attach button (typically a model picker). */\n\tleadingActions?: ReactNode;\n\t/** Trailing slot rendered before submit (custom action buttons). */\n\ttrailingActions?: ReactNode;\n\t/** Hide the keyboard hint under the field. */\n\thideHint?: boolean;\n\t/** Override the textarea minimum row count. */\n\tminRows?: number;\n\t/** Override the textarea maximum row count before scroll. */\n\tmaxRows?: number;\n\t/** Auto-focus the textarea on mount. */\n\tautoFocus?: boolean;\n\tclassName?: string;\n\tstrings?: Partial<AiChatPromptInputStrings>;\n}\n\nexport function AiChatPromptInput({\n\tvalue,\n\tonChange,\n\tonSubmit,\n\tonStop,\n\tstreaming = false,\n\tdisabled = false,\n\tattachments = [],\n\tonRemoveAttachment,\n\tonAttach,\n\tshowAttach,\n\tleadingActions,\n\ttrailingActions,\n\thideHint = false,\n\tminRows = 1,\n\tmaxRows = 8,\n\tautoFocus = false,\n\tclassName,\n\tstrings: stringsProp,\n}: AiChatPromptInputProps) {\n\tconst strings = useStrings(defaultAiChatPromptInputStrings, stringsProp);\n\tconst textareaRef = useRef<HTMLTextAreaElement | null>(null);\n\n\tconst canSubmit =\n\t\t!streaming && !disabled && (value.trim().length > 0 || attachments.length > 0);\n\n\tconst handleSubmit = useCallback(() => {\n\t\tif (!canSubmit) return;\n\t\tonSubmit?.({ text: value, attachments });\n\t}, [canSubmit, onSubmit, value, attachments]);\n\n\tconst handleKeyDown = useCallback(\n\t\t(e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n\t\t\tif (e.key === 'Enter' && !e.shiftKey && !e.nativeEvent.isComposing) {\n\t\t\t\te.preventDefault();\n\t\t\t\thandleSubmit();\n\t\t\t}\n\t\t},\n\t\t[handleSubmit],\n\t);\n\n\tconst showAttachBtn = showAttach ?? Boolean(onAttach);\n\tconst submitKeyLabel =\n\t\ttypeof navigator !== 'undefined' && navigator.platform?.toLowerCase().includes('mac')\n\t\t\t? '⌘↩'\n\t\t\t: '↩';\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'rounded-xl border border-border bg-card transition-colors duration-150',\n\t\t\t\t'focus-within:border-foreground/20 focus-within:ring-2 focus-within:ring-ring/30',\n\t\t\t\tdisabled && 'opacity-60 pointer-events-none',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{attachments.length > 0 && (\n\t\t\t\t<div className=\"border-b border-border/60 p-2\">\n\t\t\t\t\t<AiChatAttachmentsStrip\n\t\t\t\t\t\tattachments={attachments}\n\t\t\t\t\t\tonRemove={onRemoveAttachment}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t<Textarea\n\t\t\t\tref={textareaRef}\n\t\t\t\tvalue={value}\n\t\t\t\tonChange={(e) => onChange(e.target.value)}\n\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\tplaceholder={strings.placeholder}\n\t\t\t\tautoResize\n\t\t\t\tminRows={minRows}\n\t\t\t\tmaxRows={maxRows}\n\t\t\t\tautoFocus={autoFocus}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'!border-0 !bg-transparent !shadow-none focus-visible:!ring-0 resize-none px-3 py-2.5',\n\t\t\t\t)}\n\t\t\t/>\n\n\t\t\t<div className=\"flex items-center gap-1 border-t border-border/60 px-2 py-1.5\">\n\t\t\t\t{leadingActions}\n\t\t\t\t{showAttachBtn && (\n\t\t\t\t\t<Button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\tsize=\"icon-sm\"\n\t\t\t\t\t\taria-label={strings.attachAria}\n\t\t\t\t\t\tonClick={onAttach}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Paperclip className=\"size-4\" />\n\t\t\t\t\t</Button>\n\t\t\t\t)}\n\t\t\t\t<div className=\"ml-auto flex items-center gap-1\">\n\t\t\t\t\t{trailingActions}\n\t\t\t\t\t{streaming ? (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\tbuttonStyle=\"solid\"\n\t\t\t\t\t\t\tsize=\"icon-sm\"\n\t\t\t\t\t\t\taria-label={strings.stopAria}\n\t\t\t\t\t\t\tonClick={onStop}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Square className=\"size-3.5 fill-current\" />\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tvariant=\"primary\"\n\t\t\t\t\t\t\tbuttonStyle=\"solid\"\n\t\t\t\t\t\t\tsize=\"icon-sm\"\n\t\t\t\t\t\t\taria-label={strings.submitAria}\n\t\t\t\t\t\t\tonClick={handleSubmit}\n\t\t\t\t\t\t\tdisabled={!canSubmit}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<ArrowUp className=\"size-4\" />\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t{!hideHint && (\n\t\t\t\t<div className=\"px-3 pb-2\">\n\t\t\t\t\t<Text size=\"xxs\" type=\"discrete\">\n\t\t\t\t\t\t{interpolateString(strings.hint, {\n\t\t\t\t\t\t\tsubmitKey: submitKeyLabel,\n\t\t\t\t\t\t\tnewlineKey: '⇧↩',\n\t\t\t\t\t\t})}\n\t\t\t\t\t</Text>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nAiChatPromptInput.displayName = 'AiChatPromptInput';\n","/**\n * AiChatQueue — pending message queue rendered above the prompt input. Used\n * to surface messages the user submitted faster than the assistant could\n * process — each item shows a status pill and an optional cancel control.\n */\nimport { Loader2, X } from 'lucide-react';\nimport { Badge } from '@/components/base/badge';\nimport { Button } from '@/components/base/buttons';\nimport { Text } from '@/components/typography';\nimport { useStrings } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport {\n\tdefaultAiChatQueueStrings,\n\ttype AiChatQueueStrings,\n} from '../ai-chat.strings';\nimport type { AiChatQueueItem } from '../ai-chat.types';\n\nexport interface AiChatQueueProps {\n\titems: ReadonlyArray<AiChatQueueItem>;\n\thideHeader?: boolean;\n\tonCancel?: (id: string) => void;\n\tclassName?: string;\n\tstrings?: Partial<AiChatQueueStrings>;\n}\n\nexport function AiChatQueue({\n\titems,\n\thideHeader = false,\n\tonCancel,\n\tclassName,\n\tstrings: stringsProp,\n}: AiChatQueueProps) {\n\tconst strings = useStrings(defaultAiChatQueueStrings, stringsProp);\n\tif (items.length === 0) return null;\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'rounded-lg border border-border/60 bg-muted/20 px-2.5 py-2',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{!hideHeader && (\n\t\t\t\t<Text\n\t\t\t\t\tsize=\"xxs\"\n\t\t\t\t\ttype=\"secondary\"\n\t\t\t\t\tweight=\"medium\"\n\t\t\t\t\tclassName=\"mb-1.5 px-1 uppercase tracking-wider\"\n\t\t\t\t>\n\t\t\t\t\t{strings.header} · {items.length}\n\t\t\t\t</Text>\n\t\t\t)}\n\t\t\t<ul className=\"space-y-1\">\n\t\t\t\t{items.map((item) => {\n\t\t\t\t\tconst status = item.status ?? 'queued';\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<li\n\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\tclassName=\"flex items-center gap-2 rounded-md bg-card px-2 py-1.5\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{status === 'running' ? (\n\t\t\t\t\t\t\t\t<Loader2 className=\"size-3.5 shrink-0 animate-spin text-primary\" />\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\taria-hidden\n\t\t\t\t\t\t\t\t\tclassName=\"size-2 shrink-0 rounded-full bg-muted-foreground/50\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<Text size=\"xs\" className=\"flex-1 truncate\">\n\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t<Badge variant={status === 'running' ? 'primary' : 'secondary'}>\n\t\t\t\t\t\t\t\t{status === 'running' ? strings.runningLabel : strings.queuedLabel}\n\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t{(!!item.onCancel || !!onCancel) && (\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\t\t\t\t\tsize=\"icon-xs\"\n\t\t\t\t\t\t\t\t\taria-label={strings.cancelAria}\n\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\titem.onCancel?.();\n\t\t\t\t\t\t\t\t\t\tonCancel?.(item.id);\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<X className=\"size-3.5\" />\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</li>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</ul>\n\t\t</div>\n\t);\n}\n\nAiChatQueue.displayName = 'AiChatQueue';\n","/**\n * AiChatSuggestionsRow — horizontal scrollable strip of small suggestion\n * chips rendered above the prompt input. Distinct from\n * `<AiPromptSuggestions>` (which is a card-grid of richer suggestions used\n * as a welcome surface): this is the inline, dense variant.\n */\nimport { Sparkles } from 'lucide-react';\nimport { Text } from '@/components/typography';\nimport { useStrings } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport {\n\tdefaultAiChatSuggestionsStrings,\n\ttype AiChatSuggestionsStrings,\n} from '../ai-chat.strings';\nimport type { AiChatSuggestion } from '../ai-chat.types';\n\nexport interface AiChatSuggestionsRowProps {\n\tsuggestions: ReadonlyArray<AiChatSuggestion>;\n\tonPick?: (s: AiChatSuggestion) => void;\n\thideHeader?: boolean;\n\tclassName?: string;\n\tstrings?: Partial<AiChatSuggestionsStrings>;\n}\n\nexport function AiChatSuggestionsRow({\n\tsuggestions,\n\tonPick,\n\thideHeader = false,\n\tclassName,\n\tstrings: stringsProp,\n}: AiChatSuggestionsRowProps) {\n\tconst strings = useStrings(defaultAiChatSuggestionsStrings, stringsProp);\n\tif (suggestions.length === 0) return null;\n\treturn (\n\t\t<div className={cn('flex items-center gap-2', className)}>\n\t\t\t{!hideHeader && (\n\t\t\t\t<div className=\"inline-flex shrink-0 items-center gap-1.5\">\n\t\t\t\t\t<Sparkles className=\"size-3.5 text-muted-foreground\" />\n\t\t\t\t\t<Text size=\"xxs\" type=\"secondary\" weight=\"medium\" className=\"uppercase tracking-wider\">\n\t\t\t\t\t\t{strings.header}\n\t\t\t\t\t</Text>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t<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\">\n\t\t\t\t{suggestions.map((s) => {\n\t\t\t\t\tconst Icon = s.icon;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={s.id}\n\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\tonClick={() => onPick?.(s)}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'inline-flex shrink-0 items-center gap-1.5 rounded-full border border-border/60 bg-card px-2.5 py-1',\n\t\t\t\t\t\t\t\t'transition-[border-color,background] duration-150',\n\t\t\t\t\t\t\t\t'hover:border-foreground/20 hover:bg-muted/40',\n\t\t\t\t\t\t\t\t'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/40',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{!!Icon && <Icon className=\"size-3 text-muted-foreground\" />}\n\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" weight=\"medium\">\n\t\t\t\t\t\t\t\t{s.label}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nAiChatSuggestionsRow.displayName = 'AiChatSuggestionsRow';\n","/**\n * AiChat — framework-agnostic AI chat surface. Tie-together component for\n * the `features/ai-chat/*` partials. Renders an optional agent header, the\n * scrollable conversation, an optional queue + suggestions row, and the\n * prompt input.\n *\n * Composition seams:\n * - `slots` — replace any region (header, intro, empty, queue,\n * suggestions, input, belowMessages) or per-message\n * (`renderMessage`).\n * - `strings` — deep-partial override of every default copy line\n * (prompt, conversation, queue, suggestions, message).\n * - Partials — every partial is exported individually so a consumer\n * can build a custom layout against the same data shape.\n *\n * Headless usage:\n * - The `useAiChatScroll` hook is exported for consumers building a\n * custom conversation layout while keeping auto-stick-to-bottom.\n *\n * Framework-agnostic:\n * - No router, no i18n SDK, no fetcher. Submission is a callback\n * (`onSubmit`); messages, queue, attachments are all controlled props.\n */\nimport { useCallback, useState, type ReactNode } from 'react';\nimport { AiAgent } from '@/components/composed/ai/ai-agent';\nimport { Text } from '@/components/typography';\nimport { useStrings } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport {\n\tdefaultAiChatStrings,\n\ttype AiChatStrings,\n} from './ai-chat.strings';\nimport type {\n\tAiChatAgent,\n\tAiChatAttachment,\n\tAiChatMessage as AiChatMessageType,\n\tAiChatQueueItem,\n\tAiChatSlots,\n\tAiChatSubmitValues,\n\tAiChatSuggestion,\n} from './ai-chat.types';\nimport {\n\tAiChatConversation,\n\tAiChatEmptyState,\n\tAiChatMessage,\n\tAiChatPromptInput,\n\tAiChatQueue,\n\tAiChatSuggestionsRow,\n} from './partials';\n\nexport interface AiChatProps {\n\t/** Conversation messages — order is significant. */\n\tmessages: ReadonlyArray<AiChatMessageType>;\n\n\t/** Controlled prompt input value. */\n\tinputValue: string;\n\t/** Prompt input change callback. */\n\tonInputChange: (value: string) => void;\n\t/** Fired on submit (Enter or send button). */\n\tonSubmit?: (values: AiChatSubmitValues) => void;\n\t/** Fired when the user clicks the stop button while `streaming`. */\n\tonStop?: () => void;\n\t/** Streaming flag — controls submit/stop UI in the prompt input. */\n\tstreaming?: boolean;\n\t/** Disable composer entirely. */\n\tdisabled?: boolean;\n\n\t/** Currently staged attachments. */\n\tattachments?: ReadonlyArray<AiChatAttachment>;\n\t/** Remove a staged attachment. */\n\tonRemoveAttachment?: (id: string) => void;\n\t/** Fires when the user clicks the attach button. */\n\tonAttach?: () => void;\n\t/** Toggles the attach button visibility. Defaults to `true` when `onAttach` is provided. */\n\tshowAttach?: boolean;\n\n\t/** Agent identity — drives the optional header strip. Pass `null` to hide. */\n\tagent?: AiChatAgent | null;\n\t/** Trailing slot inside the header (e.g. settings button). */\n\theaderActions?: ReactNode;\n\n\t/** Pending message queue (rendered above the input). */\n\tqueue?: ReadonlyArray<AiChatQueueItem>;\n\t/** Cancel callback — fires per-item when the queue chip's × is clicked. */\n\tonCancelQueueItem?: (id: string) => void;\n\n\t/** Inline quick suggestions (rendered above the input). */\n\tsuggestions?: ReadonlyArray<AiChatSuggestion>;\n\t/** Suggestion select callback. */\n\tonPickSuggestion?: (s: AiChatSuggestion) => void;\n\n\t/** Per-message copy callback. */\n\tonMessageCopy?: (message: AiChatMessageType) => void;\n\t/** Per-message regenerate callback (assistant only). */\n\tonMessageRegenerate?: (message: AiChatMessageType) => void;\n\t/** Per-message attachment open callback. */\n\tonAttachmentOpen?: (messageId: string, attachmentId: string) => void;\n\n\t/** Disable auto-stick-to-bottom in the conversation. */\n\tdisableAutoScroll?: boolean;\n\n\t/** Slot map for replacing default surfaces. */\n\tslots?: AiChatSlots;\n\t/** String overrides. */\n\tstrings?: Partial<AiChatStrings>;\n\tclassName?: string;\n}\n\nexport function AiChat({\n\tmessages,\n\tinputValue,\n\tonInputChange,\n\tonSubmit,\n\tonStop,\n\tstreaming = false,\n\tdisabled = false,\n\tattachments = [],\n\tonRemoveAttachment,\n\tonAttach,\n\tshowAttach,\n\tagent,\n\theaderActions,\n\tqueue = [],\n\tonCancelQueueItem,\n\tsuggestions = [],\n\tonPickSuggestion,\n\tonMessageCopy,\n\tonMessageRegenerate,\n\tonAttachmentOpen,\n\tdisableAutoScroll,\n\tslots,\n\tstrings: stringsProp,\n\tclassName,\n}: AiChatProps) {\n\tconst strings = useStrings(defaultAiChatStrings, stringsProp);\n\tconst [, force] = useState(0);\n\n\tconst renderMessage = useCallback(\n\t\t(\n\t\t\tmessage: AiChatMessageType,\n\t\t\tctx: { isLast: boolean; index: number },\n\t\t): ReactNode => {\n\t\t\tif (slots?.renderMessage) {\n\t\t\t\treturn slots.renderMessage(message, ctx);\n\t\t\t}\n\t\t\treturn (\n\t\t\t\t<AiChatMessage className=\"ai-chat--component\"\n\t\t\t\t\tmessage={message}\n\t\t\t\t\tstrings={strings.message}\n\t\t\t\t\tonCopy={\n\t\t\t\t\t\tonMessageCopy ? () => onMessageCopy(message) : undefined\n\t\t\t\t\t}\n\t\t\t\t\tonRegenerate={\n\t\t\t\t\t\tonMessageRegenerate\n\t\t\t\t\t\t\t? () => onMessageRegenerate(message)\n\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t}\n\t\t\t\t\tonAttachmentOpen={\n\t\t\t\t\t\tonAttachmentOpen\n\t\t\t\t\t\t\t? (attachmentId) => onAttachmentOpen(message.id, attachmentId)\n\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t);\n\t\t},\n\t\t[\n\t\t\tonAttachmentOpen,\n\t\t\tonMessageCopy,\n\t\t\tonMessageRegenerate,\n\t\t\tslots,\n\t\t\tstrings.message,\n\t\t],\n\t);\n\n\tconst Header: ReactNode =\n\t\tslots?.header ??\n\t\t(agent ? (\n\t\t\t<div className=\"flex items-center gap-3 border-b border-border bg-card px-3 py-2 sm:px-4\">\n\t\t\t\t<AiAgent\n\t\t\t\t\tname={agent.name}\n\t\t\t\t\ticon={agent.icon}\n\t\t\t\t\tavatar={agent.avatar}\n\t\t\t\t\tsubtitle={agent.subtitle}\n\t\t\t\t\ttone={agent.tone}\n\t\t\t\t\tstatus={agent.status}\n\t\t\t\t\tvariant=\"inline\"\n\t\t\t\t/>\n\t\t\t\t{!!headerActions && (\n\t\t\t\t\t<div className=\"ml-auto flex items-center gap-1\">{headerActions}</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t) : null);\n\n\tconst Empty: ReactNode =\n\t\tslots?.empty ??\n\t\t(messages.length === 0 ? (\n\t\t\t<AiChatEmptyState\n\t\t\t\ttitle={strings.emptyTitle}\n\t\t\t\tdescription={strings.emptyDescription}\n\t\t\t/>\n\t\t) : null);\n\n\tconst Queue: ReactNode =\n\t\tslots?.queue ??\n\t\t(queue.length > 0 ? (\n\t\t\t<AiChatQueue\n\t\t\t\titems={queue}\n\t\t\t\tonCancel={onCancelQueueItem}\n\t\t\t\tstrings={strings.queue}\n\t\t\t/>\n\t\t) : null);\n\n\tconst Suggestions: ReactNode =\n\t\tslots?.suggestions ??\n\t\t(suggestions.length > 0 ? (\n\t\t\t<AiChatSuggestionsRow\n\t\t\t\tsuggestions={suggestions}\n\t\t\t\tonPick={onPickSuggestion}\n\t\t\t\tstrings={strings.suggestions}\n\t\t\t/>\n\t\t) : null);\n\n\tconst Input: ReactNode =\n\t\tslots?.input ?? (\n\t\t\t<AiChatPromptInput\n\t\t\t\tvalue={inputValue}\n\t\t\t\tonChange={onInputChange}\n\t\t\t\tonSubmit={(values) => {\n\t\t\t\t\tonSubmit?.(values);\n\t\t\t\t\t// Force re-render so consumers that read inputValue/attachments\n\t\t\t\t\t// from controlled state see the freshly cleared values they\n\t\t\t\t\t// pushed in their onSubmit handler.\n\t\t\t\t\tforce((v) => v + 1);\n\t\t\t\t}}\n\t\t\t\tonStop={onStop}\n\t\t\t\tstreaming={streaming}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tattachments={attachments}\n\t\t\t\tonRemoveAttachment={onRemoveAttachment}\n\t\t\t\tonAttach={onAttach}\n\t\t\t\tshowAttach={showAttach}\n\t\t\t\tstrings={strings.prompt}\n\t\t\t/>\n\t\t);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t'flex h-full flex-col overflow-hidden rounded-xl border border-border bg-background',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t>\n\t\t\t{Header}\n\n\t\t\t<AiChatConversation\n\t\t\t\tmessages={messages}\n\t\t\t\trenderMessage={renderMessage}\n\t\t\t\tintro={slots?.intro}\n\t\t\t\tfooter={slots?.belowMessages}\n\t\t\t\tempty={Empty}\n\t\t\t\tdisableAutoScroll={disableAutoScroll}\n\t\t\t\tstrings={strings.conversation}\n\t\t\t/>\n\n\t\t\t{(Queue || Suggestions || Input) && (\n\t\t\t\t<div className=\"border-t border-border bg-card/60\">\n\t\t\t\t\t{Queue && (\n\t\t\t\t\t\t<div className=\"px-3 pb-2 pt-3 sm:px-4\">{Queue}</div>\n\t\t\t\t\t)}\n\t\t\t\t\t{Suggestions && (\n\t\t\t\t\t\t<div className={cn('px-3 sm:px-4', !Queue && 'pt-3', 'pb-2')}>\n\t\t\t\t\t\t\t{Suggestions}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t{Input && (\n\t\t\t\t\t\t<div className=\"px-3 pb-3 pt-2 sm:px-4 sm:pb-4\">{Input}</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{disabled && (\n\t\t\t\t<Text className=\"sr-only\" aria-live=\"polite\">\n\t\t\t\t\tChat is disabled\n\t\t\t\t</Text>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nAiChat.displayName = 'AiChat';\n"],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { useStrings as e } from "../../../lib/strings.js";
|
|
2
2
|
import { cn as t } from "../../../lib/utils.js";
|
|
3
3
|
import { t as n } from "../../../_shared/text-DIxMTECE.js";
|
|
4
|
-
import {
|
|
5
|
-
import { t as i } from "../../../_shared/icon-badge-
|
|
6
|
-
import { t as a } from "../../../_shared/badge-
|
|
7
|
-
import { t as o } from "../../../_shared/button-
|
|
8
|
-
import { t as s } from "../../../_shared/textarea-
|
|
9
|
-
import { S as c, _ as l, a as u, b as d, d as f, h as p, l as m, p as h, r as g, s as _, t as v, y } from "../../../_shared/ai-artifact-
|
|
4
|
+
import { t as r } from "../../../_shared/heading-BprqyzDs.js";
|
|
5
|
+
import { t as i } from "../../../_shared/icon-badge-Bi63T-bj.js";
|
|
6
|
+
import { t as a } from "../../../_shared/badge-BVCh_hfL.js";
|
|
7
|
+
import { t as o } from "../../../_shared/button-ChCkwoOD.js";
|
|
8
|
+
import { t as s } from "../../../_shared/textarea-Cgl-FPwu.js";
|
|
9
|
+
import { S as c, _ as l, a as u, b as d, d as f, h as p, l as m, p as h, r as g, s as _, t as v, y } from "../../../_shared/ai-artifact-DyLn3JAs.js";
|
|
10
10
|
import { useCallback as b, useEffect as x, useRef as S, useState as C } from "react";
|
|
11
11
|
import { Fragment as w, jsx as T, jsxs as E } from "react/jsx-runtime";
|
|
12
12
|
import { ArrowDown as D, ArrowUp as O, Loader2 as k, Paperclip as A, Sparkles as j, Square as M, X as N } from "lucide-react";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`../../../_shared/chunk-D3uCBrYO.cjs`);const e=require(`../../../lib/strings.cjs`),t=require(`../../../lib/utils.cjs`),n=require(`../../../_shared/text-DBnY6fcL.cjs`),r=require(`../../../_shared/button-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`../../../_shared/chunk-D3uCBrYO.cjs`);const e=require(`../../../lib/strings.cjs`),t=require(`../../../lib/utils.cjs`),n=require(`../../../_shared/text-DBnY6fcL.cjs`),r=require(`../../../_shared/button-D0nF99a9.cjs`),i=require(`../../../_shared/smart-card-Bm_VxYUG.cjs`),a=require(`../../../_shared/overlays-DOcoRy8k.cjs`);let o=require(`react`),s=require(`react/jsx-runtime`),c=require(`lucide-react`);var l={currentlySelected:`Currently selected:`,noResourceContent:`No resource content configured.`,noResourceSelected:`No resource selected.`,changeAction:`Change`};function u({resource:e,hasResource:t,mapInitialSelected:n,onConfirmSelection:r,isConfirmDisabled:i,onDialogOpen:a,onDialogClose:s,onError:c}){let[l,u]=(0,o.useState)(!1),[d,f]=(0,o.useState)(!1),[p,m]=(0,o.useState)(null),h=(0,o.useCallback)(()=>{let t=n(e);m(t),u(!0),a?.(t)},[n,a,e]),g=(0,o.useCallback)(()=>{d||(u(!1),m(null),s?.())},[d,s]),_=(0,o.useMemo)(()=>p===null?!1:i?!i(p):!0,[i,p]),v=(0,o.useCallback)(async()=>{if(!(d||!_||p===null)){f(!0);try{await r(p),u(!1),m(null),s?.()}catch(e){c?.(e,p)}finally{f(!1)}}},[_,d,r,s,c,p]);return(0,o.useMemo)(()=>({resource:e,hasResource:t,isSelectorOpen:l,isConfirming:d,selectedSuggestion:p,setSelectedSuggestion:m,openSelector:h,closeSelector:g,confirmSelection:v,canConfirmSelection:_}),[_,g,v,t,d,l,h,e,p])}var d=e=>({...l,...e??{}});function f({context:e,strings:t}){let n=d(t),r=e.selectedSuggestion;if(r===null)return null;let i=typeof r==`object`&&r&&`label`in r&&typeof r.label==`string`?r.label:``;return(0,s.jsxs)(`div`,{className:`bg-muted rounded-md p-3 text-sm`,children:[(0,s.jsx)(`div`,{className:`font-medium`,children:n.currentlySelected}),(0,s.jsx)(`div`,{className:`text-muted-foreground mt-1`,children:i})]})}f.displayName=`DefaultDialogSummary`;function p({context:e,strings:t}){return(0,s.jsx)(n.t,{type:`secondary`,children:d(t).noResourceContent})}p.displayName=`DefaultResourceContent`;function m({context:e,strings:t}){let i=d(t);return(0,s.jsxs)(`div`,{className:`flex flex-col items-center justify-center py-8 text-center`,children:[(0,s.jsx)(n.t,{type:`secondary`,className:`mb-4`,children:i.noResourceSelected}),(0,s.jsx)(r.t,{variant:`secondary`,buttonStyle:`outline`,onClick:e.openSelector,type:`button`,children:i.changeAction})]})}m.displayName=`DefaultEmptyContent`;function h({SelectorComponent:e,selectorProps:t,context:n}){return(0,s.jsx)(`div`,{className:`py-2`,children:(0,s.jsx)(e,{onSelect:n.setSelectedSuggestion,selected:n.selectedSuggestion,setSelected:n.setSelectedSuggestion,inModal:!0,lockOnSelect:!1,context:`dialog`,...t})})}h.displayName=`DefaultDialogContent`;function g({icon:d,title:g,description:_,className:v,contentClassName:y=`space-y-3`,alert:b,alertVariant:x,actions:S,headerAction:C,footerText:w,resource:T,hasResource:E,selector:D,sections:O,sectionsClassName:k,viewLink:A,ResourceContentComponent:j,EmptyContentComponent:M,renderResourceContent:N,renderEmptyContent:P,strings:F}){let I=e.useStrings(l,F),L=u({resource:T,hasResource:E,mapInitialSelected:D?.mapInitialSelected??(()=>null),onConfirmSelection:D?.onConfirmSelection??(()=>void 0),isConfirmDisabled:D?.isConfirmDisabled,onDialogOpen:D?.onDialogOpen,onDialogClose:D?.onDialogClose}),R=D!==void 0,z=(0,o.useMemo)(()=>{let e=S??[],t=D?.actionLabel?.trim();return!R||!t?e.length>0?e:void 0:[...e,{id:`shared-resource-selector-change`,label:t,onClick:L.openSelector}]},[S,R,D?.actionLabel,L.openSelector]),B=(0,o.useMemo)(()=>{if(N)return N(L);if(j)return(0,s.jsx)(j,{context:L});if(Array.isArray(O)&&O.length>0){let e=O.filter(e=>e.when?e.when(L):!0);if(e.length>0)return(0,s.jsx)(`div`,{className:k??`space-y-3`,children:e.map(e=>{let t=e.Component;return(0,s.jsx)(`div`,{className:e.className,children:(0,s.jsx)(t,{context:L})},e.id)})})}return(0,s.jsx)(p,{context:L,strings:I})},[j,N,O,k,L,I]),V=(0,o.useMemo)(()=>P?P(L):M?(0,s.jsx)(M,{context:L}):R?(0,s.jsx)(m,{context:L,strings:I}):(0,s.jsx)(n.t,{type:`secondary`,children:I.noResourceSelected}),[M,R,P,L,I]),H=D?.DialogContentComponent,U=D?.DialogSummaryComponent,W=D?.SelectorComponent,G=D?.selectorProps??{},K=D?.dialogContentProps??{},q=E?B:V,J=!!(E&&A),Y=!!(R&&D&&W),X=J&&A?(0,s.jsx)(`div`,{className:A.className??`border-t pt-3`,children:(0,s.jsxs)(r.t,{href:A.href,variant:`primary`,fullWidth:!0,children:[(0,s.jsx)(c.Eye,{className:`h-4 w-4`}),A.label]})}):null,Z=Y&&D&&W?(0,s.jsxs)(a.r,{open:L.isSelectorOpen,onOpenChange:e=>{e||L.closeSelector()},title:D.title,description:D.description,size:D.dialogSize??`2xl`,showCancel:!1,showConfirm:!1,children:[H?(0,s.jsx)(H,{SelectorComponent:W,selectorProps:G,context:L,...K}):(0,s.jsx)(h,{SelectorComponent:W,selectorProps:G,context:L}),U?(0,s.jsx)(U,{context:L}):(0,s.jsx)(f,{context:L,strings:I}),(0,s.jsxs)(`div`,{className:`flex justify-end gap-2 border-t pt-4`,children:[(0,s.jsx)(r.t,{variant:`secondary`,buttonStyle:`outline`,onClick:L.closeSelector,disabled:L.isConfirming,type:`button`,children:D.cancelText}),(0,s.jsx)(r.t,{onClick:()=>{L.confirmSelection()},disabled:!L.canConfirmSelection||L.isConfirming,loading:L.isConfirming,type:`button`,children:D.confirmText})]})]}):null;return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(i.t,{icon:d,title:g,description:_,className:t.cn(`shared-resource-card--component`,`!gap-3`,v),contentClassName:y,alert:b,alertVariant:x,actions:z,headerAction:C,footerText:w,children:[q,X]}),Z]})}g.displayName=`SharedResourceCard`;function _(e){return typeof e==`string`||typeof e==`number`||typeof e==`bigint`?(0,s.jsx)(n.t,{className:`booking-calendar-event-card--component`,children:String(e)}):e}function v({title:e,description:a,status:o,items:c,actionLabel:l,onAction:u,className:d,contentClassName:f}){return(0,s.jsxs)(i.t,{title:e,description:a,headerEnd:o,padding:`sm`,className:t.cn(`shadow-none`,d),contentClassName:t.cn(`space-y-4`,f),children:[(0,s.jsx)(`div`,{className:`grid gap-2 sm:grid-cols-2`,children:c.map(e=>(0,s.jsxs)(`div`,{className:t.cn(e.fullWidth===!0&&`sm:col-span-2`),children:[(0,s.jsx)(n.t,{size:`xs`,type:`secondary`,children:e.label}),_(e.value)]},e.id))}),(0,s.jsx)(`div`,{className:`flex justify-end`,children:(0,s.jsx)(r.t,{type:`button`,variant:`primary`,size:`xs`,onClick:u,children:l})})]})}exports.BookingCalendarEventCard=v,exports.DefaultDialogContent=h,exports.DefaultDialogSummary=f,exports.DefaultEmptyContent=m,exports.DefaultResourceContent=p,exports.SharedResourceCard=g,exports.defaultSharedResourceCardStrings=l,exports.useSharedResourceCard=u;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { useStrings as e } from "../../../lib/strings.js";
|
|
2
2
|
import { cn as t } from "../../../lib/utils.js";
|
|
3
3
|
import { t as n } from "../../../_shared/text-DIxMTECE.js";
|
|
4
|
-
import { t as r } from "../../../_shared/button-
|
|
5
|
-
import { t as i } from "../../../_shared/smart-card-
|
|
6
|
-
import { r as a } from "../../../_shared/overlays-
|
|
4
|
+
import { t as r } from "../../../_shared/button-ChCkwoOD.js";
|
|
5
|
+
import { t as i } from "../../../_shared/smart-card-MT6JjkoI.js";
|
|
6
|
+
import { r as a } from "../../../_shared/overlays-B8AH8fNv.js";
|
|
7
7
|
import { useCallback as o, useMemo as s, useState as c } from "react";
|
|
8
8
|
import { Fragment as l, jsx as u, jsxs as d } from "react/jsx-runtime";
|
|
9
9
|
import { Eye as f } from "lucide-react";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../../../_shared/comments-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../../../_shared/comments-CNUsdwGW.cjs`),t=require(`../../../_shared/mentions-D7gnP3Nf.cjs`);exports.CommentAttachmentChip=e.f,exports.CommentComposer=e.l,exports.CommentContent=e.o,exports.CommentEmpty=e.c,exports.CommentItem=e.a,exports.CommentReferenceChip=t.l,exports.CommentTimeline=e.i,exports.Comments=e.n,exports.CommentsCard=e.r,exports.defaultCommentsStrings=e.h,exports.interpolateString=e.g,exports.makeReplyEyebrow=e.u,exports.renderCommentContent=e.s,exports.useAttachmentUpload=e.d,exports.useComments=e.t,exports.useReferencePicker=t.f,exports.useResolvedAccessors=e.p,exports.useResolvedStrings=e.m;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { a as e, c as t, d as n, f as r, g as i, h as a, i as o, l as s, m as c, n as l, o as u, p as d, r as f, s as p, t as m, u as h } from "../../../_shared/comments-
|
|
2
|
-
import { f as g, l as _ } from "../../../_shared/mentions-
|
|
1
|
+
import { a as e, c as t, d as n, f as r, g as i, h as a, i as o, l as s, m as c, n as l, o as u, p as d, r as f, s as p, t as m, u as h } from "../../../_shared/comments-CvmS7zG3.js";
|
|
2
|
+
import { f as g, l as _ } from "../../../_shared/mentions-CS3rIhze.js";
|
|
3
3
|
export { r as CommentAttachmentChip, s as CommentComposer, u as CommentContent, t as CommentEmpty, e as CommentItem, _ as CommentReferenceChip, o as CommentTimeline, l as Comments, f as CommentsCard, a as defaultCommentsStrings, i as interpolateString, h as makeReplyEyebrow, p as renderCommentContent, n as useAttachmentUpload, m as useComments, g as useReferencePicker, d as useResolvedAccessors, c as useResolvedStrings };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`../../../_shared/chunk-D3uCBrYO.cjs`);const e=require(`../../../lib/strings.cjs`),t=require(`../../../_shared/ui-provider-uiQgATj1.cjs`),n=require(`../../../lib/utils.cjs`),r=require(`../../../_shared/text-DBnY6fcL.cjs`),i=require(`../../../_shared/smart-card-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`../../../_shared/chunk-D3uCBrYO.cjs`);const e=require(`../../../lib/strings.cjs`),t=require(`../../../_shared/ui-provider-uiQgATj1.cjs`),n=require(`../../../lib/utils.cjs`),r=require(`../../../_shared/text-DBnY6fcL.cjs`),i=require(`../../../_shared/smart-card-Bm_VxYUG.cjs`),a=require(`../../../_shared/comments-CNUsdwGW.cjs`),o=require(`../../../_shared/mentions-D7gnP3Nf.cjs`);let s=require(`react`),c=require(`react/jsx-runtime`),l=require(`lucide-react`);var u={listAriaLabel:`Activity timeline`,emptyMessage:`No activity yet.`},d={primary:`bg-primary/10 text-primary`,success:`bg-success/15 text-success`,warning:`bg-warning/40 text-warning-foreground`,destructive:`bg-destructive/10 text-destructive`,info:`bg-info/15 text-info`,secondary:`bg-muted text-muted-foreground`},f=({entry:e,resources:t,formatRelativeTime:i,isLast:a})=>{let s=e.icon??l.Circle,u=e.tone??`secondary`,f=e.timestamp&&i?i(e.timestamp):e.timestamp;return(0,c.jsxs)(`li`,{className:`relative flex gap-3`,"data-event-id":e.id,children:[(0,c.jsxs)(`div`,{className:`relative flex flex-col items-center pt-1`,children:[(0,c.jsx)(`div`,{className:n.cn(`flex size-6 shrink-0 items-center justify-center rounded-full ring-1 ring-foreground/[0.04]`,d[u]),children:(0,c.jsx)(s,{className:`size-3`,"aria-hidden":!0})}),!a&&(0,c.jsx)(`div`,{className:`bg-border/60 mt-1 w-px flex-1`,"aria-hidden":!0})]}),(0,c.jsxs)(`div`,{className:`min-w-0 flex-1 pb-3`,children:[(0,c.jsxs)(`div`,{className:`flex flex-wrap items-baseline gap-x-1.5`,children:[!!e.actor&&(0,c.jsx)(r.t,{tag:`span`,weight:`semibold`,children:e.actor}),!!e.action&&(0,c.jsx)(r.t,{tag:`span`,type:`secondary`,children:e.action}),!!e.target&&(0,c.jsx)(r.t,{tag:`span`,weight:`medium`,children:e.target}),!!e.headline&&!e.action&&!e.target&&(0,c.jsx)(r.t,{tag:`span`,children:e.headline}),!!f&&(0,c.jsx)(r.t,{tag:`span`,size:`xs`,type:`secondary`,className:`ml-auto shrink-0 tabular-nums`,children:f})]}),!!e.description&&(0,c.jsx)(`div`,{className:`mt-1 text-sm leading-relaxed`,children:(0,c.jsx)(o.o,{html:e.description,mentions:e.mentions,resources:t})}),e.metadata&&e.metadata.length>0&&(0,c.jsx)(`div`,{className:`mt-1 flex flex-wrap gap-x-3 gap-y-0.5`,children:e.metadata.map(e=>(0,c.jsxs)(r.t,{size:`xs`,type:`secondary`,className:`inline-flex items-baseline gap-1`,children:[(0,c.jsxs)(r.t,{tag:`span`,size:`xs`,type:`discrete`,children:[e.label,`:`]}),(0,c.jsx)(r.t,{tag:`span`,size:`xs`,type:`secondary`,children:e.value})]},e.label))})]})]})};function p(e){if(!e)return()=>{};let t={setErrors:()=>{},reset:()=>{},setSubmitting:()=>{}};return n=>{e(n,t)}}function m(e,t){let n=[...e];return n.sort((e,n)=>{let r=e.timestamp?new Date(e.timestamp).getTime():0,i=n.timestamp?new Date(n.timestamp).getTime():0;return t===`asc`?r-i:i-r}),n}function h(o){let{entries:l,order:d=`desc`,resources:h,onResourceSearch:g,canModerate:_,onCommentDelete:v,onCommentReact:y,onCommentReply:b,onCommentPinToggle:x,strings:S,eventLogStrings:C,renderers:w,composer:T,bare:E=!1,title:D,getMediaUrl:O,getMediaName:k,getStatusLabel:A,formatRelativeTime:j,className:M}=o,N=h,P=g,F=(0,s.useMemo)(()=>m(l,d),[l,d]),I=e.useStrings(u,C),{formatRelativeTime:L}=t.a(),R=j??L??(e=>e),z=(e,t,r)=>{let i=t===r-1,o=w?.[e.kind];if(o)return o(e,{resources:N,accessors:{getMediaUrl:O,getMediaName:k,getStatusLabel:A,formatRelativeTime:R},strings:S});if(e.kind===`comment`){let t=e;return(0,c.jsx)(`li`,{className:n.cn(`event-log--component`,`relative`),"data-event-id":t.id,children:(0,c.jsx)(a.a,{comment:t.comment,canModerate:_,onDelete:v,onPinToggle:x,onReact:y,onReply:b,strings:S,resources:N,getMediaUrl:O,getMediaName:k,getStatusLabel:A,formatRelativeTime:R})},t.id)}let s=e;return(0,c.jsx)(f,{entry:s,resources:N,formatRelativeTime:R,isLast:i},s.id)},B=T?.enabled?(0,c.jsx)(`div`,{children:(0,c.jsx)(a.l,{context:T.context,canComment:!0,onSubmit:p(T.onSubmit),resources:N,onResourceSearch:P,placeholder:T.placeholder,autoFocus:T.autoFocus})}):null,V=T?.position??`top`,H=F.length===0?(0,c.jsx)(r.t,{type:`secondary`,className:`py-2`,children:I.emptyMessage}):(0,c.jsx)(`ul`,{"aria-label":I.listAriaLabel,className:`flex flex-col gap-2.5`,children:F.map((e,t)=>z(e,t,F.length))}),U=(0,c.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[V===`top`&&B,H,V===`bottom`&&B]});return E?U:(0,c.jsx)(i.t,{title:D,padding:`sm`,className:M,children:U})}h.displayName=`EventLog`;var g=e=>(0,c.jsx)(h,{...e});exports.EventLog=h,exports.EventLogComponent=g,exports.EventLogEventRow=f,exports.defaultEventLogStrings=u;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -2,9 +2,9 @@ import { useStrings as e } from "../../../lib/strings.js";
|
|
|
2
2
|
import { a as t } from "../../../_shared/ui-provider-4qKSKMPd.js";
|
|
3
3
|
import { cn as n } from "../../../lib/utils.js";
|
|
4
4
|
import { t as r } from "../../../_shared/text-DIxMTECE.js";
|
|
5
|
-
import { t as i } from "../../../_shared/smart-card-
|
|
6
|
-
import { a, l as o } from "../../../_shared/comments-
|
|
7
|
-
import { o as s } from "../../../_shared/mentions-
|
|
5
|
+
import { t as i } from "../../../_shared/smart-card-MT6JjkoI.js";
|
|
6
|
+
import { a, l as o } from "../../../_shared/comments-CvmS7zG3.js";
|
|
7
|
+
import { o as s } from "../../../_shared/mentions-CS3rIhze.js";
|
|
8
8
|
import { useMemo as c } from "react";
|
|
9
9
|
import { jsx as l, jsxs as u } from "react/jsx-runtime";
|
|
10
10
|
import { Circle as d } from "lucide-react";
|