admin-ui-starter-kit 0.4.3 → 0.4.4
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/admin-ui-consumer-migration/SKILL.md +10 -0
- package/.agents/skills/admin-ui-consumer-migration/references/actions-service.md +236 -0
- package/CHANGELOG.md +26 -1
- package/COMPONENT_SELECTION.md +10 -1
- package/INTEGRATION.md +47 -0
- package/README.md +34 -1
- package/dist/_shared/accordion-Df1XrCDv.cjs +2 -0
- package/dist/_shared/accordion-Df1XrCDv.cjs.map +1 -0
- package/dist/_shared/accordion-Rzi9wEl6.js +130 -0
- package/dist/_shared/accordion-Rzi9wEl6.js.map +1 -0
- package/dist/_shared/action-menu-CrOJ63Q9.js +96 -0
- package/dist/_shared/action-menu-CrOJ63Q9.js.map +1 -0
- package/dist/_shared/action-menu-D9OowHKx.cjs +2 -0
- package/dist/_shared/action-menu-D9OowHKx.cjs.map +1 -0
- package/dist/_shared/ai-artifact-D4EjKoq6.cjs +3 -0
- package/dist/_shared/ai-artifact-D4EjKoq6.cjs.map +1 -0
- package/dist/_shared/ai-artifact-nlOrSeqT.js +1099 -0
- package/dist/_shared/ai-artifact-nlOrSeqT.js.map +1 -0
- package/dist/_shared/auth-C5HawWvp.cjs +2 -0
- package/dist/_shared/auth-C5HawWvp.cjs.map +1 -0
- package/dist/_shared/auth-DnMEJXP9.js +643 -0
- package/dist/_shared/auth-DnMEJXP9.js.map +1 -0
- package/dist/_shared/badge-6WYAMJwA.js +108 -0
- package/dist/_shared/badge-6WYAMJwA.js.map +1 -0
- package/dist/_shared/badge-CBof1rbF.cjs +2 -0
- package/dist/_shared/badge-CBof1rbF.cjs.map +1 -0
- package/dist/_shared/button-BGKY8UY0.js +173 -0
- package/dist/_shared/button-BGKY8UY0.js.map +1 -0
- package/dist/_shared/button-BI347RlM.cjs +2 -0
- package/dist/_shared/button-BI347RlM.cjs.map +1 -0
- package/dist/_shared/button-DEFoa7-c.cjs +2 -0
- package/dist/_shared/button-DEFoa7-c.cjs.map +1 -0
- package/dist/_shared/button-DlqryxqA.js +46 -0
- package/dist/_shared/button-DlqryxqA.js.map +1 -0
- package/dist/_shared/buttons-PL-TGJ32.js +143 -0
- package/dist/_shared/buttons-PL-TGJ32.js.map +1 -0
- package/dist/_shared/buttons-kVvSD_oI.cjs +2 -0
- package/dist/_shared/buttons-kVvSD_oI.cjs.map +1 -0
- package/dist/_shared/combobox-B4KmDZK0.cjs +2 -0
- package/dist/_shared/combobox-B4KmDZK0.cjs.map +1 -0
- package/dist/_shared/combobox-YUGi3xSc.js +810 -0
- package/dist/_shared/combobox-YUGi3xSc.js.map +1 -0
- package/dist/_shared/comments-GzXdwpq4.js +952 -0
- package/dist/_shared/comments-GzXdwpq4.js.map +1 -0
- package/dist/_shared/comments-Zj_foV1V.cjs +2 -0
- package/dist/_shared/comments-Zj_foV1V.cjs.map +1 -0
- package/dist/_shared/date-picker-Dl91BM3D.js +1361 -0
- package/dist/_shared/date-picker-Dl91BM3D.js.map +1 -0
- package/dist/_shared/date-picker-zFOqtmAS.cjs +2 -0
- package/dist/_shared/date-picker-zFOqtmAS.cjs.map +1 -0
- package/dist/_shared/date-pickers-BBydcIjN.cjs +2 -0
- package/dist/_shared/date-pickers-BBydcIjN.cjs.map +1 -0
- package/dist/_shared/date-pickers-D2OsgV4V.js +330 -0
- package/dist/_shared/date-pickers-D2OsgV4V.js.map +1 -0
- package/dist/_shared/dialog-CCN4tjU9.js +101 -0
- package/dist/_shared/dialog-CCN4tjU9.js.map +1 -0
- package/dist/_shared/dialog-Dd0ENSrU.cjs +2 -0
- package/dist/_shared/dialog-Dd0ENSrU.cjs.map +1 -0
- package/dist/_shared/display-Dhy5ogxC.cjs +2 -0
- package/dist/_shared/display-Dhy5ogxC.cjs.map +1 -0
- package/dist/_shared/display-NBtWdAMl.js +1154 -0
- package/dist/_shared/display-NBtWdAMl.js.map +1 -0
- package/dist/_shared/forms-BweX9Lm8.cjs +2 -0
- package/dist/_shared/forms-BweX9Lm8.cjs.map +1 -0
- package/dist/_shared/forms-L1hyNKpZ.js +3430 -0
- package/dist/_shared/forms-L1hyNKpZ.js.map +1 -0
- package/dist/_shared/header-BSBPtGn4.cjs +2 -0
- package/dist/_shared/header-BSBPtGn4.cjs.map +1 -0
- package/dist/_shared/header-No6GSp4R.js +360 -0
- package/dist/_shared/header-No6GSp4R.js.map +1 -0
- package/dist/_shared/hooks-BkXvZ4py.js +118 -0
- package/dist/_shared/hooks-BkXvZ4py.js.map +1 -0
- package/dist/_shared/hooks-D3SbLBRk.cjs +2 -0
- package/dist/_shared/hooks-D3SbLBRk.cjs.map +1 -0
- package/dist/_shared/mentions-CA1Ka_Bv.cjs +2 -0
- package/dist/_shared/mentions-CA1Ka_Bv.cjs.map +1 -0
- package/dist/_shared/mentions-CdvvLGQG.js +506 -0
- package/dist/_shared/mentions-CdvvLGQG.js.map +1 -0
- package/dist/_shared/metadata-Ckcmar8d.js +235 -0
- package/dist/_shared/metadata-Ckcmar8d.js.map +1 -0
- package/dist/_shared/metadata-DamdYVZL.cjs +2 -0
- package/dist/_shared/metadata-DamdYVZL.cjs.map +1 -0
- package/dist/_shared/navigation-BemwPPC8.cjs +2 -0
- package/dist/_shared/navigation-BemwPPC8.cjs.map +1 -0
- package/dist/_shared/navigation-DY540HB0.js +419 -0
- package/dist/_shared/navigation-DY540HB0.js.map +1 -0
- package/dist/_shared/overlays-CJs_syAu.js +648 -0
- package/dist/_shared/overlays-CJs_syAu.js.map +1 -0
- package/dist/_shared/overlays-DWFEaAog.cjs +2 -0
- package/dist/_shared/overlays-DWFEaAog.cjs.map +1 -0
- package/dist/_shared/page-Cg_gNpyK.js +262 -0
- package/dist/_shared/page-Cg_gNpyK.js.map +1 -0
- package/dist/_shared/page-CpFWQuWU.cjs +2 -0
- package/dist/_shared/page-CpFWQuWU.cjs.map +1 -0
- package/dist/_shared/rich-text-editor-B2VqNi6j.js +620 -0
- package/dist/_shared/rich-text-editor-B2VqNi6j.js.map +1 -0
- package/dist/_shared/rich-text-editor-ChE-pI3N.cjs +2 -0
- package/dist/_shared/rich-text-editor-ChE-pI3N.cjs.map +1 -0
- package/dist/_shared/sheet-BOgUA4fC.cjs +2 -0
- package/dist/_shared/sheet-BOgUA4fC.cjs.map +1 -0
- package/dist/_shared/sheet-DWQuyRRz.js +100 -0
- package/dist/_shared/sheet-DWQuyRRz.js.map +1 -0
- package/dist/_shared/sidebar-BGpi9K_Q.js +389 -0
- package/dist/_shared/sidebar-BGpi9K_Q.js.map +1 -0
- package/dist/_shared/sidebar-BTFfxmNG.cjs +2 -0
- package/dist/_shared/sidebar-BTFfxmNG.cjs.map +1 -0
- package/dist/_shared/sidebar-CC3lcvNX.cjs +2 -0
- package/dist/_shared/sidebar-CC3lcvNX.cjs.map +1 -0
- package/dist/_shared/sidebar-wmztVpnO.js +538 -0
- package/dist/_shared/sidebar-wmztVpnO.js.map +1 -0
- package/dist/_shared/smart-card-B6m7tmt0.cjs +2 -0
- package/dist/_shared/smart-card-B6m7tmt0.cjs.map +1 -0
- package/dist/_shared/smart-card-thLb85Ih.js +361 -0
- package/dist/_shared/smart-card-thLb85Ih.js.map +1 -0
- package/dist/_shared/table-BItnJ8lG.cjs +2 -0
- package/dist/_shared/table-BItnJ8lG.cjs.map +1 -0
- package/dist/_shared/table-D3349b-v.js +1189 -0
- package/dist/_shared/table-D3349b-v.js.map +1 -0
- package/dist/_shared/workspace-BGVeTeJy.js +357 -0
- package/dist/_shared/workspace-BGVeTeJy.js.map +1 -0
- package/dist/_shared/workspace-CWyzTUmE.cjs +2 -0
- package/dist/_shared/workspace-CWyzTUmE.cjs.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/carousel/index.cjs +1 -1
- package/dist/components/base/carousel/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/date-pickers/index.cjs +1 -1
- package/dist/components/base/date-pickers/index.js +2 -2
- package/dist/components/base/display/alert.d.ts +1 -1
- package/dist/components/base/display/index.cjs +1 -1
- package/dist/components/base/display/index.js +6 -6
- package/dist/components/base/display/metadata/index.cjs +1 -1
- package/dist/components/base/display/metadata/index.js +1 -1
- package/dist/components/base/event-calendar/index.cjs +1 -1
- package/dist/components/base/event-calendar/index.js +41 -41
- package/dist/components/base/forms/index.cjs +1 -1
- package/dist/components/base/forms/index.js +1 -1
- package/dist/components/base/map/index.cjs +1 -1
- package/dist/components/base/map/index.js +31 -31
- package/dist/components/base/navigation/index.cjs +1 -1
- package/dist/components/base/navigation/index.js +2 -2
- 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/table/index.cjs +1 -1
- package/dist/components/base/table/index.js +1 -1
- package/dist/components/composed/admin/index.cjs +1 -1
- package/dist/components/composed/admin/index.js +47 -47
- package/dist/components/composed/ai/index.cjs +1 -1
- package/dist/components/composed/ai/index.js +105 -105
- package/dist/components/composed/analytics/index.cjs +1 -1
- package/dist/components/composed/analytics/index.js +89 -89
- package/dist/components/composed/cards/index.cjs +1 -1
- package/dist/components/composed/cards/index.js +116 -116
- package/dist/components/composed/commerce/index.cjs +1 -1
- package/dist/components/composed/commerce/index.js +127 -127
- package/dist/components/composed/dark-surfaces/index.cjs +1 -1
- package/dist/components/composed/dark-surfaces/index.js +37 -37
- package/dist/components/composed/data-display/index.cjs +1 -1
- package/dist/components/composed/data-display/index.js +3 -3
- package/dist/components/composed/navigation/index.cjs +1 -1
- package/dist/components/composed/navigation/index.js +55 -55
- package/dist/components/composed/onboarding/index.cjs +1 -1
- package/dist/components/composed/onboarding/index.js +1 -1
- 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 +56 -56
- package/dist/components/features/ai-chat/index.cjs +2 -2
- package/dist/components/features/ai-chat/index.js +53 -53
- package/dist/components/features/card/index.cjs +1 -1
- package/dist/components/features/card/index.js +21 -21
- 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 +143 -143
- package/dist/components/features/global-search/index.cjs +1 -1
- package/dist/components/features/global-search/index.js +57 -57
- package/dist/components/features/kanban/index.cjs +1 -1
- package/dist/components/features/kanban/index.js +14 -14
- package/dist/components/features/media-library/index.cjs +1 -1
- package/dist/components/features/media-library/index.js +178 -178
- package/dist/components/features/mentions/index.cjs +1 -1
- package/dist/components/features/mentions/index.js +1 -1
- package/dist/components/features/overlays/alert-dialog.d.ts +1 -1
- package/dist/components/features/overlays/alert-dialog.d.ts.map +1 -1
- package/dist/components/features/overlays/drawer.d.ts +1 -1
- package/dist/components/features/overlays/drawer.d.ts.map +1 -1
- package/dist/components/features/overlays/index.cjs +1 -1
- package/dist/components/features/overlays/index.js +1 -1
- package/dist/components/features/overlays/overlays.types.d.ts +1 -0
- package/dist/components/features/overlays/overlays.types.d.ts.map +1 -1
- package/dist/components/features/products/index.cjs +1 -1
- package/dist/components/features/products/index.js +124 -124
- 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/schema-form/index.cjs +1 -1
- package/dist/components/features/schema-form/index.js +26 -26
- package/dist/components/features/suggestions/index.cjs +1 -1
- package/dist/components/features/suggestions/index.js +1 -1
- package/dist/components/layout/auth/index.cjs +1 -1
- package/dist/components/layout/auth/index.js +1 -1
- 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/layout/workspace/index.cjs +1 -1
- package/dist/components/layout/workspace/index.js +1 -1
- package/dist/components/ui/alert.d.ts +1 -1
- package/dist/components/ui/badge.d.ts +1 -1
- package/dist/components/ui/button.d.ts +1 -1
- package/dist/services/actions/action-overlay-outlet.d.ts +4 -0
- package/dist/services/actions/action-overlay-outlet.d.ts.map +1 -0
- package/dist/services/actions/action-provider.d.ts +8 -0
- package/dist/services/actions/action-provider.d.ts.map +1 -0
- package/dist/services/actions/action-scope.d.ts +4 -0
- package/dist/services/actions/action-scope.d.ts.map +1 -0
- package/dist/services/actions/action-store.d.ts +44 -0
- package/dist/services/actions/action-store.d.ts.map +1 -0
- package/dist/services/actions/actions.strings.d.ts +3 -0
- package/dist/services/actions/actions.strings.d.ts.map +1 -0
- package/dist/services/actions/actions.types.d.ts +248 -0
- package/dist/services/actions/actions.types.d.ts.map +1 -0
- package/dist/services/actions/hooks.d.ts +8 -0
- package/dist/services/actions/hooks.d.ts.map +1 -0
- package/dist/services/actions/index.cjs +2 -0
- package/dist/services/actions/index.cjs.map +1 -0
- package/dist/services/actions/index.d.ts +8 -0
- package/dist/services/actions/index.d.ts.map +1 -0
- package/dist/services/actions/index.js +562 -0
- package/dist/services/actions/index.js.map +1 -0
- package/dist/showcase/assets/AreaChart-BYEewdc_.js +6 -0
- package/dist/showcase/assets/CompositeItem-Duekeg4m.js +1 -0
- package/dist/showcase/assets/CompositeRoot-BgNU3T7R.js +1 -0
- package/dist/showcase/assets/DialogTrigger-9xWmoeF5.js +1 -0
- package/dist/showcase/assets/LabelableContext-B3W_70Qk.js +1 -0
- package/dist/showcase/assets/PreviewLayout-nADJqRlP.js +1 -0
- package/dist/showcase/assets/RadioGroup-Bp1VCzxr.js +1 -0
- package/dist/showcase/assets/Separator-9PWX3shz.js +1 -0
- package/dist/showcase/assets/ToolbarRootContext-DwELw9xS.js +1 -0
- package/dist/showcase/assets/accordion-CfqHO9_z.js +171 -0
- package/dist/showcase/assets/accordion-variants-pkPHxkLW.js +1 -0
- package/dist/showcase/assets/action-menu-DFzSuDjI.js +1 -0
- package/dist/showcase/assets/activities-Bo97b2-I.js +501 -0
- package/dist/showcase/assets/activities-feed-card-D77gf27B.js +1 -0
- package/dist/showcase/assets/activity-BUlCWLI8.js +1 -0
- package/dist/showcase/assets/admin-CxTV4kZX.js +80 -0
- package/dist/showcase/assets/ai-Bym5H8bn.js +41 -0
- package/dist/showcase/assets/ai-artifact-DZVl1WmK.js +2 -0
- package/dist/showcase/assets/ai-chat-M3X5-PgT.js +568 -0
- package/dist/showcase/assets/ai-elements-DjppcMBD.js +387 -0
- package/dist/showcase/assets/ai-new-CXnrIi5S.js +167 -0
- package/dist/showcase/assets/ai-tool-call-DyMI8DqD.js +1 -0
- package/dist/showcase/assets/alert-D6Pygy2s.js +62 -0
- package/dist/showcase/assets/alert-DCrWLbEx.js +93 -0
- package/dist/showcase/assets/alert-qTNM0vld.js +1 -0
- package/dist/showcase/assets/api-key-list-CCpuHYHc.js +73 -0
- package/dist/showcase/assets/app-sidebar-CxTRNC5L.js +1 -0
- package/dist/showcase/assets/arrow-down--phuskCV.js +1 -0
- package/dist/showcase/assets/arrow-left-B__WWqyA.js +1 -0
- package/dist/showcase/assets/arrow-right-1-EvXxjB.js +1 -0
- package/dist/showcase/assets/arrow-up-lWotnmo7.js +1 -0
- package/dist/showcase/assets/arrow-up-right-IyQ3oeq0.js +1 -0
- package/dist/showcase/assets/avatar-gugtNx4D.js +57 -0
- package/dist/showcase/assets/avatar-n1nywTlx.js +1 -0
- package/dist/showcase/assets/badge-TuE-u3Hv.js +28 -0
- package/dist/showcase/assets/badge-check-CPDvpVzK.js +1 -0
- package/dist/showcase/assets/bell-DeCVddCA.js +1 -0
- package/dist/showcase/assets/bot-B_vzJEJH.js +1 -0
- package/dist/showcase/assets/box-z4O8t_K5.js +1 -0
- package/dist/showcase/assets/brain-DdKBE4Bh.js +1 -0
- package/dist/showcase/assets/brand-CfW7mgTY.js +36 -0
- package/dist/showcase/assets/breadcrumb-B4TBbKv3.js +52 -0
- package/dist/showcase/assets/breadcrumb-bF_sFVBL.js +1 -0
- package/dist/showcase/assets/breadcrumbs-CBv3EaMX.js +1 -0
- package/dist/showcase/assets/briefcase-ClqzeNt3.js +1 -0
- package/dist/showcase/assets/building-2-BQuWgjZj.js +1 -0
- package/dist/showcase/assets/button-CWKNCI82.js +44 -0
- package/dist/showcase/assets/button-group-BYhxtFwV.js +1 -0
- package/dist/showcase/assets/buttons-mBRyBw3Q.js +270 -0
- package/dist/showcase/assets/calendar-BgloJjlW.js +1 -0
- package/dist/showcase/assets/calendar-CJDWspzi.js +1 -0
- package/dist/showcase/assets/calendar-CgML2kJt.js +16 -0
- package/dist/showcase/assets/calendar-days-C0gTLVnY.js +1 -0
- package/dist/showcase/assets/camera-nIlaz4Sn.js +1 -0
- package/dist/showcase/assets/card-1ncRnRvq.js +1 -0
- package/dist/showcase/assets/card-CcgWzFB-.js +188 -0
- package/dist/showcase/assets/card-primitives-By4-RTuP.js +1 -0
- package/dist/showcase/assets/card-radio-group-DeX3qsRg.js +1 -0
- package/dist/showcase/assets/cards-DdqQr8rY.js +328 -0
- package/dist/showcase/assets/carousel-CV8ltDl8.js +449 -0
- package/dist/showcase/assets/chart-BNzHjskC.js +358 -0
- package/dist/showcase/assets/chart-column-CpTxRLEH.js +1 -0
- package/dist/showcase/assets/checkbox-CZTTm4Dv.js +1 -0
- package/dist/showcase/assets/chevron-down-LWBNHe9S.js +1 -0
- package/dist/showcase/assets/chevron-left-BsshO7nf.js +1 -0
- package/dist/showcase/assets/chevron-right-t68um2_G.js +1 -0
- package/dist/showcase/assets/chevron-up-DjhlESJB.js +1 -0
- package/dist/showcase/assets/chevrons-up-down-ZUo0Do59.js +1 -0
- package/dist/showcase/assets/circle-BL52dLr9.js +1 -0
- package/dist/showcase/assets/circle-alert-CXCt6zxc.js +1 -0
- package/dist/showcase/assets/circle-check-CbiRRw7s.js +1 -0
- package/dist/showcase/assets/circle-check-big-BSgn7lyt.js +1 -0
- package/dist/showcase/assets/circle-dot-WEOpGGJf.js +1 -0
- package/dist/showcase/assets/circle-question-mark-C9hLlsD7.js +1 -0
- package/dist/showcase/assets/circle-x-BT9TJbJC.js +1 -0
- package/dist/showcase/assets/clock-3-CfRK8ckc.js +1 -0
- package/dist/showcase/assets/clock-D-3zf0c1.js +1 -0
- package/dist/showcase/assets/code-xml-CQYKKuBU.js +1 -0
- package/dist/showcase/assets/collapsible-BC0hQvat.js +27 -0
- package/dist/showcase/assets/collapsible-CRVtVDCF.js +1 -0
- package/dist/showcase/assets/combobox-D4VYvYCT.js +696 -0
- package/dist/showcase/assets/command-CxeHT4lL.js +1 -0
- package/dist/showcase/assets/command-Do_t_Zou.js +1 -0
- package/dist/showcase/assets/comment-composer-DoFwvVlq.js +1 -0
- package/dist/showcase/assets/comment-item-CT8UbVeg.js +1 -0
- package/dist/showcase/assets/comments-CqdXrjUn.js +357 -0
- package/dist/showcase/assets/commerce-B9V2Wo_q.js +79 -0
- package/dist/showcase/assets/commerce-extras-CNT3QmAT.js +189 -0
- package/dist/showcase/assets/composite-BXLXcagx.js +1 -0
- package/dist/showcase/assets/contact-card-BLcAXepj.js +65 -0
- package/dist/showcase/assets/content-container-DJVD3ZmI.js +1 -0
- package/dist/showcase/assets/copyable-od17NrMu.js +96 -0
- package/dist/showcase/assets/course-card-CdZQr5yy.js +77 -0
- package/dist/showcase/assets/cpu-B8kRNR1R.js +1 -0
- package/dist/showcase/assets/credit-card-BYMQj03s.js +1 -0
- package/dist/showcase/assets/currency-Cxv3Cp6B.js +149 -0
- package/dist/showcase/assets/dark-surfaces-Cfp58iFb.js +90 -0
- package/dist/showcase/assets/database-DuUABvxU.js +1 -0
- package/dist/showcase/assets/date-block-E9qfY7W7.js +1 -0
- package/dist/showcase/assets/date-picker-I8BdaiiU.js +1 -0
- package/dist/showcase/assets/date-pickers-BLJaqhcS.js +73 -0
- package/dist/showcase/assets/dense-info-Bk1K_7Ww.js +106 -0
- package/dist/showcase/assets/dialog-BuatDnQ9.js +1 -0
- package/dist/showcase/assets/dialog-DCx-LydW.js +1 -0
- package/dist/showcase/assets/display-Bt7busw5.js +403 -0
- package/dist/showcase/assets/dist-BPyBHOXU.js +45 -0
- package/dist/showcase/assets/dollar-sign-qXQSS6Gh.js +1 -0
- package/dist/showcase/assets/download-B2JAmHmJ.js +1 -0
- package/dist/showcase/assets/dropdown-menu-DXT3BZLa.js +1 -0
- package/dist/showcase/assets/dropzone-BKIxDJNy.js +1 -0
- package/dist/showcase/assets/earth-7-Z3Gv2v.js +1 -0
- package/dist/showcase/assets/ellipsis-6Krb3RRW.js +1 -0
- package/dist/showcase/assets/ellipsis-vertical-DeOMIw1J.js +1 -0
- package/dist/showcase/assets/empty-BSYKaeXQ.js +1 -0
- package/dist/showcase/assets/empty-item-YElgv25f.js +49 -0
- package/dist/showcase/assets/empty-state-D-LrvnKF.js +1 -0
- package/dist/showcase/assets/empty-state-dNh1GtVU.js +188 -0
- package/dist/showcase/assets/enhanced-activities-Bw99ItYl.js +361 -0
- package/dist/showcase/assets/enhanced-combobox-CqLZmU3K.js +1 -0
- package/dist/showcase/assets/event-calendar-CcSi7g5A.js +138 -0
- package/dist/showcase/assets/event-log-2uq-eYxh.js +330 -0
- package/dist/showcase/assets/example-CTJ8AdNR.js +1 -0
- package/dist/showcase/assets/external-link-D0gqSa1q.js +1 -0
- package/dist/showcase/assets/eye-CDMCDLei.js +1 -0
- package/dist/showcase/assets/feature-announcement-BlyNck35.js +34 -0
- package/dist/showcase/assets/file-Y5EbzufX.js +1 -0
- package/dist/showcase/assets/file-text-DH1mBuPi.js +1 -0
- package/dist/showcase/assets/filters-BtHF4GSM.js +78 -0
- package/dist/showcase/assets/flag-CJ08LwLY.js +1 -0
- package/dist/showcase/assets/folder-open-DODo2pjy.js +1 -0
- package/dist/showcase/assets/form-field-CHY7jh1q.js +1 -0
- package/dist/showcase/assets/format-DYJqAuDM.js +1 -0
- package/dist/showcase/assets/forms-DgvQQXHO.js +862 -0
- package/dist/showcase/assets/frame-CdKicP4A.js +167 -0
- package/dist/showcase/assets/getPseudoElementBounds-D9-Hr3mO.js +1 -0
- package/dist/showcase/assets/gift-DD8O7cld.js +1 -0
- package/dist/showcase/assets/giftcard-cards-Dp9eYodY.js +85 -0
- package/dist/showcase/assets/git-branch-DZq1Vo2G.js +1 -0
- package/dist/showcase/assets/global-search-BqDotXql.js +215 -0
- package/dist/showcase/assets/global-search-PH6LXqZw.js +1 -0
- package/dist/showcase/assets/globe-mRTwrUxM.js +1 -0
- package/dist/showcase/assets/gradient-card-CaL88YKv.js +58 -0
- package/dist/showcase/assets/hash-DuqvHQHv.js +1 -0
- package/dist/showcase/assets/header-CiNgDop3.js +1 -0
- package/dist/showcase/assets/header-notifications-B9XMBsK_.js +1 -0
- package/dist/showcase/assets/heart-DsGJfnDx.js +1 -0
- package/dist/showcase/assets/house-B504aFIP.js +1 -0
- package/dist/showcase/assets/icon-badge-DMNu8xb5.js +1 -0
- package/dist/showcase/assets/image-C3DaMxmn.js +1 -0
- package/dist/showcase/assets/inbox-BWKQMLMx.js +1 -0
- package/dist/showcase/assets/index-DaYVSqKu.js +10 -0
- package/dist/showcase/assets/inertValue-DrtTkMGx.js +1 -0
- package/dist/showcase/assets/info-_FrGoCay.js +1 -0
- package/dist/showcase/assets/inline-stat-BYu-tiUU.js +1 -0
- package/dist/showcase/assets/input-C96HMHWR.js +1 -0
- package/dist/showcase/assets/input-fMPi7XxI.js +1 -0
- package/dist/showcase/assets/input-group-BZnSgFCn.js +47 -0
- package/dist/showcase/assets/input-group-CVONNP3T.js +1 -0
- package/dist/showcase/assets/inputs-Blh0LJ8-.js +155 -0
- package/dist/showcase/assets/invoice-header-Bpo4iwX3.js +36 -0
- package/dist/showcase/assets/invoice-items-OVIrbG0k.js +36 -0
- package/dist/showcase/assets/invoice-mini-CaOMTiUO.js +14 -0
- package/dist/showcase/assets/invoice-table-BXd_HhUg.js +30 -0
- package/dist/showcase/assets/isSameDay-NBVO9AKF.js +1 -0
- package/dist/showcase/assets/isToday-Bk5HMXWn.js +1 -0
- package/dist/showcase/assets/italic-BOv5bW4H.js +1 -0
- package/dist/showcase/assets/item-B4rdcVVp.js +134 -0
- package/dist/showcase/assets/item-BVt0zZ12.js +1 -0
- package/dist/showcase/assets/item-C4Xk3DC1.js +1 -0
- package/dist/showcase/assets/kanban-BXbelelR.js +186 -0
- package/dist/showcase/assets/label-Cv6wotdv.js +1 -0
- package/dist/showcase/assets/languages-BofyvcCF.js +1 -0
- package/dist/showcase/assets/layers-DJK0t5px.js +1 -0
- package/dist/showcase/assets/layout-app-shell-D_yMonSl.js +608 -0
- package/dist/showcase/assets/layout-auth-BTvSTwUz.js +754 -0
- package/dist/showcase/assets/layout-containers-PMuo__2O.js +101 -0
- package/dist/showcase/assets/layout-header-DQ3zeCHz.js +170 -0
- package/dist/showcase/assets/layout-page-CbvWdHrK.js +122 -0
- package/dist/showcase/assets/layout-primitives-6nsFFIdE.js +34 -0
- package/dist/showcase/assets/layout-sidebar-CKqeVCSY.js +224 -0
- package/dist/showcase/assets/layout-users-Cypq-42s.js +117 -0
- package/dist/showcase/assets/layout-workspace-DiRR8vDv.js +183 -0
- package/dist/showcase/assets/lock-DXmvLEEx.js +1 -0
- package/dist/showcase/assets/lock-keyhole-Cu6M-jjE.js +1 -0
- package/dist/showcase/assets/mail-CXVFHkzh.js +1 -0
- package/dist/showcase/assets/mail-check-BNEu3j2a.js +1 -0
- package/dist/showcase/assets/map-DnE1pFCQ.js +124 -0
- package/dist/showcase/assets/map-pin-CpOVa8IH.js +1 -0
- package/dist/showcase/assets/media-library-C-KfEvm4.js +695 -0
- package/dist/showcase/assets/mention-inline-suggestions-DlmslsfR.js +1 -0
- package/dist/showcase/assets/mentions-C8ZdNFuC.js +138 -0
- package/dist/showcase/assets/menus-B8yUL75K.js +165 -0
- package/dist/showcase/assets/message-square-DNOTaOFs.js +1 -0
- package/dist/showcase/assets/metadata-list-BQAanxM-.js +1 -0
- package/dist/showcase/assets/metadata-list-DL9qgDAp.js +288 -0
- package/dist/showcase/assets/metric-CYi09Ltx.js +1 -0
- package/dist/showcase/assets/metric-bar-CQH1z8T3.js +1 -0
- package/dist/showcase/assets/metric-grid-H1ixqMCI.js +1 -0
- package/dist/showcase/assets/metric-trend-chip-BBzWzFZ-.js +1 -0
- package/dist/showcase/assets/metrics-analytics-bar-C7Z2ITl4.js +44 -0
- package/dist/showcase/assets/metrics-analytics-cards-CZZSWiMn.js +50 -0
- package/dist/showcase/assets/metrics-comparison-BPqz8k30.js +76 -0
- package/dist/showcase/assets/metrics-heatmap-C3NYZAfx.js +27 -0
- package/dist/showcase/assets/metrics-inline-badge-RjHfm7um.js +17 -0
- package/dist/showcase/assets/metrics-kpi-row-DnBjyDH4.js +31 -0
- package/dist/showcase/assets/metrics-micro-grid-CKn405qb.js +42 -0
- package/dist/showcase/assets/metrics-overview-D8YGtdrh.js +192 -0
- package/dist/showcase/assets/metrics-stat-cards-Dxh6cAha.js +54 -0
- package/dist/showcase/assets/minus-20OTSSxf.js +1 -0
- package/dist/showcase/assets/money-display-BoiAMxH8.js +1 -0
- package/dist/showcase/assets/month-year-picker-Bl59Ygq9.js +1 -0
- package/dist/showcase/assets/navigation-B8d2CDU6.js +90 -0
- package/dist/showcase/assets/navigation-D16JX3kL.js +230 -0
- package/dist/showcase/assets/navigation-extras-Dm83uT6i.js +43 -0
- package/dist/showcase/assets/onboarding-checklist-DznDpP9M.js +119 -0
- package/dist/showcase/assets/overlays-CzlSqbFz.js +408 -0
- package/dist/showcase/assets/overlays-DUFqbkb9.js +159 -0
- package/dist/showcase/assets/package-BCXIwEPz.js +1 -0
- package/dist/showcase/assets/package-check-Ol-Cw3j-.js +1 -0
- package/dist/showcase/assets/page-action-button-DpzdSYvw.js +1 -0
- package/dist/showcase/assets/page-header-B_b7SqW8.js +1 -0
- package/dist/showcase/assets/pagination-BPDQo9Dl.js +1 -0
- package/dist/showcase/assets/pagination-PvkEX0qs.js +42 -0
- package/dist/showcase/assets/paperclip-CznEsmLN.js +1 -0
- package/dist/showcase/assets/password-input-CWMY5q3b.js +1 -0
- package/dist/showcase/assets/pencil-Cl9qi90g.js +1 -0
- package/dist/showcase/assets/phone-DbvK_QQJ.js +1 -0
- package/dist/showcase/assets/plus-CO8t66Yo.js +1 -0
- package/dist/showcase/assets/popover-3QIVx9lU.js +1 -0
- package/dist/showcase/assets/popover-Cyg9oYIU.js +1 -0
- package/dist/showcase/assets/popover-menu-DJPHeIL1.js +1 -0
- package/dist/showcase/assets/products-WsU-qdMz.js +407 -0
- package/dist/showcase/assets/progress-C61sf-qt.js +1 -0
- package/dist/showcase/assets/progress-PvTl8Fgf.js +18 -0
- package/dist/showcase/assets/props-table-C8la6vcG.js +1 -0
- package/dist/showcase/assets/props.generated-vFrhDrth.json +38618 -0
- package/dist/showcase/assets/quote-N1_lRDnX.js +1 -0
- package/dist/showcase/assets/receipt-C6a_WyLu.js +1 -0
- package/dist/showcase/assets/receipt-text-CDOh8FAv.js +1 -0
- package/dist/showcase/assets/refresh-cw-D4-ECZ1x.js +1 -0
- package/dist/showcase/assets/resolveValueLabel-DqAP3zJd.js +1 -0
- package/dist/showcase/assets/rich-text-editor-CU0IZpwV.js +143 -0
- package/dist/showcase/assets/rich-text-editor-DCU7mMoO.js +124 -0
- package/dist/showcase/assets/rotate-ccw-Dd5zEmr7.js +1 -0
- package/dist/showcase/assets/save-DDmFSQli.js +1 -0
- package/dist/showcase/assets/schema-form-B7naqMvv.js +325 -0
- package/dist/showcase/assets/scroll-area-CdaYm4UK.js +32 -0
- package/dist/showcase/assets/scroll-area-DwWSHYHB.js +1 -0
- package/dist/showcase/assets/select-CNzpb5ug.js +1 -0
- package/dist/showcase/assets/select-DBXZ_Wzf.js +1 -0
- package/dist/showcase/assets/send-eDm7YMmA.js +1 -0
- package/dist/showcase/assets/separator-4IC9ED7s.js +1 -0
- package/dist/showcase/assets/separator-DPGDsZpG.js +28 -0
- package/dist/showcase/assets/settings-IANZGo2i.js +1 -0
- package/dist/showcase/assets/sheet-2oCce5ae.js +1 -0
- package/dist/showcase/assets/shield-CDZhhvFW.js +1 -0
- package/dist/showcase/assets/shield-alert-5hL3sdf3.js +1 -0
- package/dist/showcase/assets/shield-check-CaO2dhVS.js +1 -0
- package/dist/showcase/assets/shopping-bag-Bt3iK-Bv.js +1 -0
- package/dist/showcase/assets/sidebar-Cds60-PS.js +1 -0
- package/dist/showcase/assets/sidebar.context-CdH_DH9M.js +1 -0
- package/dist/showcase/assets/skeleton-2HajJKO4.js +29 -0
- package/dist/showcase/assets/skeleton-CGEJwPdD.js +1 -0
- package/dist/showcase/assets/slider-BjQViBR0.js +1 -0
- package/dist/showcase/assets/sliders-horizontal-C3JH5WQu.js +1 -0
- package/dist/showcase/assets/smart-card-CHouYi8U.js +1 -0
- package/dist/showcase/assets/sonner-Cog559j7.js +22 -0
- package/dist/showcase/assets/sortable.esm-hUEKsxpQ.js +5 -0
- package/dist/showcase/assets/sparkles-B18eTHVN.js +1 -0
- package/dist/showcase/assets/spinner-BSI97i4D.js +1 -0
- package/dist/showcase/assets/spinner-D0WhVyye.js +30 -0
- package/dist/showcase/assets/spinner-DQmJ7k9y.js +49 -0
- package/dist/showcase/assets/square-pen-CLyDWdhj.js +1 -0
- package/dist/showcase/assets/stacked-avatars-ECnU27uV.js +1 -0
- package/dist/showcase/assets/star-C3mhkpSK.js +1 -0
- package/dist/showcase/assets/startOfDay-ECIxhJGC.js +1 -0
- package/dist/showcase/assets/styles-CDD7mDye.js +1 -0
- package/dist/showcase/assets/suggestions-DOW6NBJp.js +126 -0
- package/dist/showcase/assets/switch-D59YKmf6.js +1 -0
- package/dist/showcase/assets/switch-NICmdoPn.js +1 -0
- package/dist/showcase/assets/sync-B8nBZXQ9.js +107 -0
- package/dist/showcase/assets/table-CckompuR.js +382 -0
- package/dist/showcase/assets/table-DtA4-Q0p.js +1 -0
- package/dist/showcase/assets/table-actions-DdoPJTMy.js +1 -0
- package/dist/showcase/assets/tabs-BrC_HxL_.js +1 -0
- package/dist/showcase/assets/tabs-UVxr80vY.js +19 -0
- package/dist/showcase/assets/tags-input-iDfvhzZD.js +1 -0
- package/dist/showcase/assets/text-button-DHFCLCoc.js +1 -0
- package/dist/showcase/assets/text-link-nCLLDcS_.js +1 -0
- package/dist/showcase/assets/textarea-DsSuQHQY.js +1 -0
- package/dist/showcase/assets/textarea-DyGI3Kcn.js +1 -0
- package/dist/showcase/assets/timelines-JmMcH657.js +200 -0
- package/dist/showcase/assets/toggle-group-BZKzMmC8.js +1 -0
- package/dist/showcase/assets/toggles-BSJvy4Tw.js +71 -0
- package/dist/showcase/assets/toggles-group-Bsc6eaWw.js +32 -0
- package/dist/showcase/assets/trash-2-C9AC7Pcv.js +1 -0
- package/dist/showcase/assets/trending-up-CGaDZj0S.js +1 -0
- package/dist/showcase/assets/truck-Dq6heokm.js +1 -0
- package/dist/showcase/assets/typography-ByvwR6Kg.js +223 -0
- package/dist/showcase/assets/ui-badge-BYgJSE_w.js +28 -0
- package/dist/showcase/assets/ui-card-BdueUfow.js +30 -0
- package/dist/showcase/assets/ui-table-CxtCQUsg.js +42 -0
- package/dist/showcase/assets/upload-tray-DKJ8nFZp.js +138 -0
- package/dist/showcase/assets/use-layout-link-CGBQHZon.js +1 -0
- package/dist/showcase/assets/useAnchoredPopupScrollLock-CywAbxVB.js +1 -0
- package/dist/showcase/assets/useAriaLabelledBy-B2bZzE7D.js +1 -0
- package/dist/showcase/assets/useCollapsiblePanel-SLdY_s6S.js +1 -0
- package/dist/showcase/assets/useCompositeItem-g6aCBp84.js +1 -0
- package/dist/showcase/assets/useCompositeListItem-DK0Tpege.js +1 -0
- package/dist/showcase/assets/useLabelableId-hdKzFCp2.js +1 -0
- package/dist/showcase/assets/useOpenInteractionType-CnhifZ1E.js +1 -0
- package/dist/showcase/assets/useRender-QhawWhpb.js +1 -0
- package/dist/showcase/assets/useTriggerFocusGuards-Cht7Sa7e.js +1 -0
- package/dist/showcase/assets/useValueChanged-DURO1kfZ.js +1 -0
- package/dist/showcase/assets/user-plus-DbOuTfr7.js +1 -0
- package/dist/showcase/assets/user-u65Fo7k7.js +1 -0
- package/dist/showcase/assets/users-BUb7CmVp.js +1 -0
- package/dist/showcase/assets/vendor-profile-wfI3PBuO.js +37 -0
- package/dist/showcase/assets/video-e4hDbTQ2.js +1 -0
- package/dist/showcase/assets/wrench-CBUvtxdr.js +1 -0
- package/dist/showcase/assets/x-oVTJnCJn.js +1 -0
- package/dist/showcase/assets/zap-CzABYL3c.js +1 -0
- package/dist/showcase/index.html +1 -1
- package/package.json +11 -3
- package/scripts/README.md +24 -0
- package/scripts/metadata.json +325 -0
- package/dist/_shared/accordion-BWU7zxlO.cjs +0 -2
- package/dist/_shared/accordion-BWU7zxlO.cjs.map +0 -1
- package/dist/_shared/accordion-DTYKGqWD.js +0 -130
- package/dist/_shared/accordion-DTYKGqWD.js.map +0 -1
- package/dist/_shared/action-menu-BoQnI2UF.cjs +0 -2
- package/dist/_shared/action-menu-BoQnI2UF.cjs.map +0 -1
- package/dist/_shared/action-menu-uyg1Phsn.js +0 -96
- package/dist/_shared/action-menu-uyg1Phsn.js.map +0 -1
- package/dist/_shared/ai-artifact-CY1Jf9gM.cjs +0 -3
- package/dist/_shared/ai-artifact-CY1Jf9gM.cjs.map +0 -1
- package/dist/_shared/ai-artifact-DdlK_l56.js +0 -1099
- package/dist/_shared/ai-artifact-DdlK_l56.js.map +0 -1
- package/dist/_shared/auth-CDjZFJxy.cjs +0 -2
- package/dist/_shared/auth-CDjZFJxy.cjs.map +0 -1
- package/dist/_shared/auth-_udUdWtn.js +0 -643
- package/dist/_shared/auth-_udUdWtn.js.map +0 -1
- package/dist/_shared/badge--o9wFHB_.cjs +0 -2
- package/dist/_shared/badge--o9wFHB_.cjs.map +0 -1
- package/dist/_shared/badge-yGlx9trX.js +0 -108
- package/dist/_shared/badge-yGlx9trX.js.map +0 -1
- package/dist/_shared/button-683R5quQ.js +0 -46
- package/dist/_shared/button-683R5quQ.js.map +0 -1
- package/dist/_shared/button-C1qc97U1.cjs +0 -2
- package/dist/_shared/button-C1qc97U1.cjs.map +0 -1
- package/dist/_shared/button-CjZrRLzR.cjs +0 -2
- package/dist/_shared/button-CjZrRLzR.cjs.map +0 -1
- package/dist/_shared/button-SuocMQFT.js +0 -173
- package/dist/_shared/button-SuocMQFT.js.map +0 -1
- package/dist/_shared/buttons-9YBwevkP.cjs +0 -2
- package/dist/_shared/buttons-9YBwevkP.cjs.map +0 -1
- package/dist/_shared/buttons-BR4BGVYf.js +0 -143
- package/dist/_shared/buttons-BR4BGVYf.js.map +0 -1
- package/dist/_shared/combobox-CpSmiPV8.cjs +0 -2
- package/dist/_shared/combobox-CpSmiPV8.cjs.map +0 -1
- package/dist/_shared/combobox-D01JwyFZ.js +0 -810
- package/dist/_shared/combobox-D01JwyFZ.js.map +0 -1
- package/dist/_shared/comments-D9velZAW.js +0 -952
- package/dist/_shared/comments-D9velZAW.js.map +0 -1
- package/dist/_shared/comments-DyUAKSQu.cjs +0 -2
- package/dist/_shared/comments-DyUAKSQu.cjs.map +0 -1
- package/dist/_shared/date-picker-BnsvBFOZ.cjs +0 -2
- package/dist/_shared/date-picker-BnsvBFOZ.cjs.map +0 -1
- package/dist/_shared/date-picker-TMcjGO26.js +0 -1361
- package/dist/_shared/date-picker-TMcjGO26.js.map +0 -1
- package/dist/_shared/date-pickers-BI4xLjHR.js +0 -330
- package/dist/_shared/date-pickers-BI4xLjHR.js.map +0 -1
- package/dist/_shared/date-pickers-BhaUK5S2.cjs +0 -2
- package/dist/_shared/date-pickers-BhaUK5S2.cjs.map +0 -1
- package/dist/_shared/dialog-A95-614f.js +0 -101
- package/dist/_shared/dialog-A95-614f.js.map +0 -1
- package/dist/_shared/dialog-ivDByBmO.cjs +0 -2
- package/dist/_shared/dialog-ivDByBmO.cjs.map +0 -1
- package/dist/_shared/display-C4n0uuxl.js +0 -1154
- package/dist/_shared/display-C4n0uuxl.js.map +0 -1
- package/dist/_shared/display-oDW0O9yB.cjs +0 -2
- package/dist/_shared/display-oDW0O9yB.cjs.map +0 -1
- package/dist/_shared/forms-CwJci54_.js +0 -3430
- package/dist/_shared/forms-CwJci54_.js.map +0 -1
- package/dist/_shared/forms-E3JkTgcC.cjs +0 -2
- package/dist/_shared/forms-E3JkTgcC.cjs.map +0 -1
- package/dist/_shared/header-CyBTcM-L.js +0 -360
- package/dist/_shared/header-CyBTcM-L.js.map +0 -1
- package/dist/_shared/header-kwvkesfq.cjs +0 -2
- package/dist/_shared/header-kwvkesfq.cjs.map +0 -1
- package/dist/_shared/hooks-MW0UTO3q.cjs +0 -2
- package/dist/_shared/hooks-MW0UTO3q.cjs.map +0 -1
- package/dist/_shared/hooks-ZiPIvs0_.js +0 -118
- package/dist/_shared/hooks-ZiPIvs0_.js.map +0 -1
- package/dist/_shared/mentions-Br-EP9tq.js +0 -506
- package/dist/_shared/mentions-Br-EP9tq.js.map +0 -1
- package/dist/_shared/mentions-DNTsRHJl.cjs +0 -2
- package/dist/_shared/mentions-DNTsRHJl.cjs.map +0 -1
- package/dist/_shared/metadata-CPSQGPJh.cjs +0 -2
- package/dist/_shared/metadata-CPSQGPJh.cjs.map +0 -1
- package/dist/_shared/metadata-qTNAOM7E.js +0 -235
- package/dist/_shared/metadata-qTNAOM7E.js.map +0 -1
- package/dist/_shared/navigation-HnnA6uSV.js +0 -419
- package/dist/_shared/navigation-HnnA6uSV.js.map +0 -1
- package/dist/_shared/navigation-J2g0Tw9D.cjs +0 -2
- package/dist/_shared/navigation-J2g0Tw9D.cjs.map +0 -1
- package/dist/_shared/overlays-CIeniDjj.js +0 -639
- package/dist/_shared/overlays-CIeniDjj.js.map +0 -1
- package/dist/_shared/overlays-Xc_F_Y-E.cjs +0 -2
- package/dist/_shared/overlays-Xc_F_Y-E.cjs.map +0 -1
- package/dist/_shared/page-BFV-KE8H.js +0 -262
- package/dist/_shared/page-BFV-KE8H.js.map +0 -1
- package/dist/_shared/page-UJfWfw2R.cjs +0 -2
- package/dist/_shared/page-UJfWfw2R.cjs.map +0 -1
- package/dist/_shared/rich-text-editor-B6WKHUKC.js +0 -620
- package/dist/_shared/rich-text-editor-B6WKHUKC.js.map +0 -1
- package/dist/_shared/rich-text-editor-Dm-6r_xe.cjs +0 -2
- package/dist/_shared/rich-text-editor-Dm-6r_xe.cjs.map +0 -1
- package/dist/_shared/sheet-BKEfwhCn.js +0 -100
- package/dist/_shared/sheet-BKEfwhCn.js.map +0 -1
- package/dist/_shared/sheet-D4yWgkwC.cjs +0 -2
- package/dist/_shared/sheet-D4yWgkwC.cjs.map +0 -1
- package/dist/_shared/sidebar-B_L_dnAe.cjs +0 -2
- package/dist/_shared/sidebar-B_L_dnAe.cjs.map +0 -1
- package/dist/_shared/sidebar-C5DApiDy.js +0 -389
- package/dist/_shared/sidebar-C5DApiDy.js.map +0 -1
- package/dist/_shared/sidebar-CIlGkVbF.js +0 -538
- package/dist/_shared/sidebar-CIlGkVbF.js.map +0 -1
- package/dist/_shared/sidebar-D3sK9otF.cjs +0 -2
- package/dist/_shared/sidebar-D3sK9otF.cjs.map +0 -1
- package/dist/_shared/smart-card-DYZGY_Su.js +0 -361
- package/dist/_shared/smart-card-DYZGY_Su.js.map +0 -1
- package/dist/_shared/smart-card-Df80VF8x.cjs +0 -2
- package/dist/_shared/smart-card-Df80VF8x.cjs.map +0 -1
- package/dist/_shared/table-CBKDA7ZE.js +0 -1189
- package/dist/_shared/table-CBKDA7ZE.js.map +0 -1
- package/dist/_shared/table-CJoxRCWy.cjs +0 -2
- package/dist/_shared/table-CJoxRCWy.cjs.map +0 -1
- package/dist/_shared/workspace-CTjIGCE0.cjs +0 -2
- package/dist/_shared/workspace-CTjIGCE0.cjs.map +0 -1
- package/dist/_shared/workspace-WgJgiSUA.js +0 -357
- package/dist/_shared/workspace-WgJgiSUA.js.map +0 -1
- package/dist/showcase/assets/AreaChart-BkAbL-UV.js +0 -6
- package/dist/showcase/assets/CompositeItem-Dzu0MfUC.js +0 -1
- package/dist/showcase/assets/CompositeRoot-CQvQ_uj2.js +0 -1
- package/dist/showcase/assets/DialogTrigger-BxVhSw4D.js +0 -1
- package/dist/showcase/assets/LabelableContext-DapqaNeY.js +0 -1
- package/dist/showcase/assets/PreviewLayout-CGEkbS-i.js +0 -1
- package/dist/showcase/assets/RadioGroup-DBA3iBQw.js +0 -1
- package/dist/showcase/assets/Separator-BEMr82IS.js +0 -1
- package/dist/showcase/assets/ToolbarRootContext-xN-ruoGR.js +0 -1
- package/dist/showcase/assets/accordion-B-Iy0jKu.js +0 -171
- package/dist/showcase/assets/accordion-variants-B9GD0oBE.js +0 -1
- package/dist/showcase/assets/action-menu-CMUF6gPp.js +0 -1
- package/dist/showcase/assets/activities-C1P9bsJm.js +0 -501
- package/dist/showcase/assets/activities-feed-card-WZUuGHmT.js +0 -1
- package/dist/showcase/assets/activity-BVP5C805.js +0 -1
- package/dist/showcase/assets/admin-DWOK4sj4.js +0 -80
- package/dist/showcase/assets/ai-Dteb3y6G.js +0 -41
- package/dist/showcase/assets/ai-artifact-B0d7GveY.js +0 -2
- package/dist/showcase/assets/ai-chat-IJ0b2FOw.js +0 -568
- package/dist/showcase/assets/ai-elements-Cr8GgtEV.js +0 -387
- package/dist/showcase/assets/ai-new-BJN9wNvX.js +0 -167
- package/dist/showcase/assets/ai-tool-call-BqlQuR1P.js +0 -1
- package/dist/showcase/assets/alert-2_0J7Vv6.js +0 -1
- package/dist/showcase/assets/alert-7wEOpEor.js +0 -93
- package/dist/showcase/assets/alert-C_FOBilU.js +0 -62
- package/dist/showcase/assets/api-key-list-CGV1k52v.js +0 -73
- package/dist/showcase/assets/app-sidebar-S6oUYO4h.js +0 -1
- package/dist/showcase/assets/arrow-down-VNr82bS3.js +0 -1
- package/dist/showcase/assets/arrow-left-BSVeKWNq.js +0 -1
- package/dist/showcase/assets/arrow-right-D6hTB0Bd.js +0 -1
- package/dist/showcase/assets/arrow-up-p9oA4cIz.js +0 -1
- package/dist/showcase/assets/arrow-up-right-BtlQ62bc.js +0 -1
- package/dist/showcase/assets/avatar-BxcQUuh0.js +0 -57
- package/dist/showcase/assets/avatar-LGWm52rv.js +0 -1
- package/dist/showcase/assets/badge-COn5psy3.js +0 -28
- package/dist/showcase/assets/badge-check-D2C2BPUT.js +0 -1
- package/dist/showcase/assets/bell-C80n9VRl.js +0 -1
- package/dist/showcase/assets/bot-C83bUUi9.js +0 -1
- package/dist/showcase/assets/box-rZ0pA-02.js +0 -1
- package/dist/showcase/assets/brain-BJtktdVu.js +0 -1
- package/dist/showcase/assets/brand-CxdIBpyJ.js +0 -36
- package/dist/showcase/assets/breadcrumb-BZsr_A8k.js +0 -1
- package/dist/showcase/assets/breadcrumb-CSU8FvWB.js +0 -52
- package/dist/showcase/assets/breadcrumbs-BUm4gHzL.js +0 -1
- package/dist/showcase/assets/briefcase-0WhUdLn5.js +0 -1
- package/dist/showcase/assets/building-2-1D6zVdCI.js +0 -1
- package/dist/showcase/assets/button-C22Gs6y0.js +0 -44
- package/dist/showcase/assets/button-group-C0Ts4-x3.js +0 -1
- package/dist/showcase/assets/buttons-Dfn6hmwe.js +0 -270
- package/dist/showcase/assets/calendar-7a4yQlzJ.js +0 -1
- package/dist/showcase/assets/calendar-Bo17POsN.js +0 -1
- package/dist/showcase/assets/calendar-D6XNDRVQ.js +0 -16
- package/dist/showcase/assets/calendar-days-C4mG2tOe.js +0 -1
- package/dist/showcase/assets/camera-C16z6v0m.js +0 -1
- package/dist/showcase/assets/card-BjqRQxxz.js +0 -1
- package/dist/showcase/assets/card-IzYmUTpI.js +0 -188
- package/dist/showcase/assets/card-primitives-BDj4DtS8.js +0 -1
- package/dist/showcase/assets/card-radio-group-7GU9AtWs.js +0 -1
- package/dist/showcase/assets/cards-DAqpr8CM.js +0 -328
- package/dist/showcase/assets/carousel-D1n4Kkoo.js +0 -449
- package/dist/showcase/assets/chart-D2EGeI3b.js +0 -358
- package/dist/showcase/assets/chart-column-DKcP77Dx.js +0 -1
- package/dist/showcase/assets/checkbox-BI3gcjED.js +0 -1
- package/dist/showcase/assets/chevron-down-ByPPEdNm.js +0 -1
- package/dist/showcase/assets/chevron-left-BNByuq3g.js +0 -1
- package/dist/showcase/assets/chevron-right-D4pIMCh9.js +0 -1
- package/dist/showcase/assets/chevron-up-Cha879Nz.js +0 -1
- package/dist/showcase/assets/chevrons-up-down-eAgHau5X.js +0 -1
- package/dist/showcase/assets/circle-V5hdlsIn.js +0 -1
- package/dist/showcase/assets/circle-alert-BW-Btwgh.js +0 -1
- package/dist/showcase/assets/circle-check-1MSds3Vu.js +0 -1
- package/dist/showcase/assets/circle-check-big-vBWkmhCZ.js +0 -1
- package/dist/showcase/assets/circle-dot-CsD5uXwH.js +0 -1
- package/dist/showcase/assets/circle-question-mark-xYn9p1nL.js +0 -1
- package/dist/showcase/assets/circle-x-VSqZOeGt.js +0 -1
- package/dist/showcase/assets/clock-3-CP_t59kW.js +0 -1
- package/dist/showcase/assets/clock-9xbB7EnW.js +0 -1
- package/dist/showcase/assets/code-xml-CeGA85eB.js +0 -1
- package/dist/showcase/assets/collapsible-C2W51-wl.js +0 -27
- package/dist/showcase/assets/collapsible-C4eof15p.js +0 -1
- package/dist/showcase/assets/combobox-i8o4u6Q0.js +0 -696
- package/dist/showcase/assets/command-C4F78Ppy.js +0 -1
- package/dist/showcase/assets/command-wjOXUieO.js +0 -1
- package/dist/showcase/assets/comment-composer-DeURrlgL.js +0 -1
- package/dist/showcase/assets/comment-item-D07Qk-Nt.js +0 -1
- package/dist/showcase/assets/comments-Bo-lZU18.js +0 -357
- package/dist/showcase/assets/commerce-extras-Cio3xn_B.js +0 -189
- package/dist/showcase/assets/commerce-jqA58sCZ.js +0 -79
- package/dist/showcase/assets/composite-BQFpnmS9.js +0 -1
- package/dist/showcase/assets/contact-card-4ajPhcd_.js +0 -65
- package/dist/showcase/assets/content-container-B83BnjFb.js +0 -1
- package/dist/showcase/assets/copyable-DKkroGJ3.js +0 -96
- package/dist/showcase/assets/course-card-DShYl03k.js +0 -77
- package/dist/showcase/assets/cpu-BZTsuaUu.js +0 -1
- package/dist/showcase/assets/credit-card-CAI3F3HB.js +0 -1
- package/dist/showcase/assets/currency-PXgbngHk.js +0 -149
- package/dist/showcase/assets/dark-surfaces-pSCicdm4.js +0 -90
- package/dist/showcase/assets/database-oHsxHUj-.js +0 -1
- package/dist/showcase/assets/date-block-CvCdJr8d.js +0 -1
- package/dist/showcase/assets/date-picker-Cd5vsEEd.js +0 -1
- package/dist/showcase/assets/date-pickers-CBK-zvSB.js +0 -73
- package/dist/showcase/assets/dense-info-zOdJpez6.js +0 -106
- package/dist/showcase/assets/dialog-D9-MRCRg.js +0 -1
- package/dist/showcase/assets/dialog-EDw9DvZs.js +0 -1
- package/dist/showcase/assets/display-CE9JWinr.js +0 -403
- package/dist/showcase/assets/dist-CjZ6RM9v.js +0 -45
- package/dist/showcase/assets/dollar-sign-BXD_x2mP.js +0 -1
- package/dist/showcase/assets/download-D0ur_d_N.js +0 -1
- package/dist/showcase/assets/dropdown-menu-Cto8-yDW.js +0 -1
- package/dist/showcase/assets/dropzone-9Gb4mR4x.js +0 -1
- package/dist/showcase/assets/earth-BN1w3w7h.js +0 -1
- package/dist/showcase/assets/ellipsis-DsrebD1Y.js +0 -1
- package/dist/showcase/assets/ellipsis-vertical-CAiMV7G2.js +0 -1
- package/dist/showcase/assets/empty-DoJF3uif.js +0 -1
- package/dist/showcase/assets/empty-item-zZ85qI6s.js +0 -49
- package/dist/showcase/assets/empty-state-CGfB7sOE.js +0 -1
- package/dist/showcase/assets/empty-state-Y_4qnNWt.js +0 -188
- package/dist/showcase/assets/enhanced-activities-B41hAxhb.js +0 -361
- package/dist/showcase/assets/enhanced-combobox-BOimEW-1.js +0 -1
- package/dist/showcase/assets/event-calendar-BjcfC6fM.js +0 -138
- package/dist/showcase/assets/event-log-BhoMXcix.js +0 -330
- package/dist/showcase/assets/example-Cz_880po.js +0 -1
- package/dist/showcase/assets/external-link-Cy1-PP8k.js +0 -1
- package/dist/showcase/assets/eye-C85PNNdH.js +0 -1
- package/dist/showcase/assets/feature-announcement-_tpahla3.js +0 -34
- package/dist/showcase/assets/file-C8PCBEtY.js +0 -1
- package/dist/showcase/assets/file-text-DwqbUujq.js +0 -1
- package/dist/showcase/assets/filters-ChqGg_1z.js +0 -78
- package/dist/showcase/assets/flag-csHQcBml.js +0 -1
- package/dist/showcase/assets/folder-open-BThTng3d.js +0 -1
- package/dist/showcase/assets/form-field-B5g_5Zjm.js +0 -1
- package/dist/showcase/assets/format-DrTwpH65.js +0 -1
- package/dist/showcase/assets/forms-BukyUSKs.js +0 -862
- package/dist/showcase/assets/frame-BNKhZVlb.js +0 -167
- package/dist/showcase/assets/getPseudoElementBounds-DwyQgIj-.js +0 -1
- package/dist/showcase/assets/gift-CtM--bDo.js +0 -1
- package/dist/showcase/assets/giftcard-cards-imm4Br0H.js +0 -85
- package/dist/showcase/assets/git-branch-Dl3AzbqP.js +0 -1
- package/dist/showcase/assets/global-search-Bhl7z_vN.js +0 -1
- package/dist/showcase/assets/global-search-C4yaPFSW.js +0 -215
- package/dist/showcase/assets/globe-BCikLfKc.js +0 -1
- package/dist/showcase/assets/gradient-card-Dh_5ZYv0.js +0 -58
- package/dist/showcase/assets/hash-C8m0EECO.js +0 -1
- package/dist/showcase/assets/header-BXjw7Lm_.js +0 -1
- package/dist/showcase/assets/header-notifications-CShSQ8kR.js +0 -1
- package/dist/showcase/assets/heart-BJVBFZ-j.js +0 -1
- package/dist/showcase/assets/house-C3fXPhlL.js +0 -1
- package/dist/showcase/assets/icon-badge-dwVx3Hxf.js +0 -1
- package/dist/showcase/assets/image-gc4qX_7C.js +0 -1
- package/dist/showcase/assets/inbox-C0GJ1KEC.js +0 -1
- package/dist/showcase/assets/index-BQIv1ffM.js +0 -10
- package/dist/showcase/assets/inertValue-DeVQ2cCe.js +0 -1
- package/dist/showcase/assets/info-BimmreJ-.js +0 -1
- package/dist/showcase/assets/inline-stat-DcNP6bcO.js +0 -1
- package/dist/showcase/assets/input-DJAWOJEx.js +0 -1
- package/dist/showcase/assets/input-NIgvB9CZ.js +0 -1
- package/dist/showcase/assets/input-group-BmqJ20bA.js +0 -1
- package/dist/showcase/assets/input-group-gOUubhee.js +0 -47
- package/dist/showcase/assets/inputs-Dk8YOVkI.js +0 -155
- package/dist/showcase/assets/invoice-header-BnNpWej2.js +0 -36
- package/dist/showcase/assets/invoice-items-BdPmW10L.js +0 -36
- package/dist/showcase/assets/invoice-mini-CbSYyHIb.js +0 -14
- package/dist/showcase/assets/invoice-table-DjnWG3KF.js +0 -30
- package/dist/showcase/assets/isSameDay-B2KDl_YX.js +0 -1
- package/dist/showcase/assets/isToday-CXNS7ELW.js +0 -1
- package/dist/showcase/assets/italic-BRS-PpYL.js +0 -1
- package/dist/showcase/assets/item--6Hx9AXZ.js +0 -1
- package/dist/showcase/assets/item-BszVRzXj.js +0 -134
- package/dist/showcase/assets/item-YF6wMI9W.js +0 -1
- package/dist/showcase/assets/kanban-BWBbWLVe.js +0 -186
- package/dist/showcase/assets/label-BgpcD3V6.js +0 -1
- package/dist/showcase/assets/languages-DDgmIDFe.js +0 -1
- package/dist/showcase/assets/layers-nkkXRmvA.js +0 -1
- package/dist/showcase/assets/layout-app-shell-D3MbPoGC.js +0 -608
- package/dist/showcase/assets/layout-auth-DIeRtG0B.js +0 -754
- package/dist/showcase/assets/layout-containers-Dc3-IAgV.js +0 -101
- package/dist/showcase/assets/layout-header-Cg6GfMST.js +0 -170
- package/dist/showcase/assets/layout-page-DojPq8S6.js +0 -122
- package/dist/showcase/assets/layout-primitives-JBSQS72B.js +0 -34
- package/dist/showcase/assets/layout-sidebar-C6jUJRhx.js +0 -224
- package/dist/showcase/assets/layout-users-uzPscfo7.js +0 -117
- package/dist/showcase/assets/layout-workspace-B3leaOKl.js +0 -183
- package/dist/showcase/assets/lock-DLIcOBUd.js +0 -1
- package/dist/showcase/assets/lock-keyhole-DY6aV7Mq.js +0 -1
- package/dist/showcase/assets/mail-AES_tOd2.js +0 -1
- package/dist/showcase/assets/mail-check-dJTzg2bD.js +0 -1
- package/dist/showcase/assets/map-CZ2l0iGH.js +0 -124
- package/dist/showcase/assets/map-pin-0O7GD5Dz.js +0 -1
- package/dist/showcase/assets/media-library-CRllxSGQ.js +0 -695
- package/dist/showcase/assets/mention-inline-suggestions-Dx2Z1GHF.js +0 -1
- package/dist/showcase/assets/mentions-CDqqGCE4.js +0 -138
- package/dist/showcase/assets/menus-CDgE79I5.js +0 -165
- package/dist/showcase/assets/message-square-CBNI_sf8.js +0 -1
- package/dist/showcase/assets/metadata-list-BoEVt7cX.js +0 -1
- package/dist/showcase/assets/metadata-list-NtWuY9W8.js +0 -288
- package/dist/showcase/assets/metric-Bx_LWobe.js +0 -1
- package/dist/showcase/assets/metric-bar-BldYHNLQ.js +0 -1
- package/dist/showcase/assets/metric-grid-BDw7w7d2.js +0 -1
- package/dist/showcase/assets/metric-trend-chip-lSjDkUEo.js +0 -1
- package/dist/showcase/assets/metrics-analytics-bar-CCFhTmQZ.js +0 -44
- package/dist/showcase/assets/metrics-analytics-cards-C1AjZqJU.js +0 -50
- package/dist/showcase/assets/metrics-comparison-vEE6BtuW.js +0 -76
- package/dist/showcase/assets/metrics-heatmap-DKkz8ibX.js +0 -27
- package/dist/showcase/assets/metrics-inline-badge-CZmVnReB.js +0 -17
- package/dist/showcase/assets/metrics-kpi-row-s2FYIYB1.js +0 -31
- package/dist/showcase/assets/metrics-micro-grid-DDlCl9Ep.js +0 -42
- package/dist/showcase/assets/metrics-overview-BgliK2L1.js +0 -192
- package/dist/showcase/assets/metrics-stat-cards-Cn5sRZsB.js +0 -54
- package/dist/showcase/assets/minus-DByvcC8K.js +0 -1
- package/dist/showcase/assets/money-display-DG4IaEaA.js +0 -1
- package/dist/showcase/assets/month-year-picker-CVurc9L7.js +0 -1
- package/dist/showcase/assets/navigation-CHYgQTsY.js +0 -90
- package/dist/showcase/assets/navigation-C_6gS4FA.js +0 -230
- package/dist/showcase/assets/navigation-extras-CflOar2P.js +0 -43
- package/dist/showcase/assets/onboarding-checklist-CYiciKwv.js +0 -119
- package/dist/showcase/assets/overlays-HrH2wdTK.js +0 -408
- package/dist/showcase/assets/overlays-cp7VMq3b.js +0 -159
- package/dist/showcase/assets/package-CjcwDJKu.js +0 -1
- package/dist/showcase/assets/package-check-CCH3ax-x.js +0 -1
- package/dist/showcase/assets/page-action-button-Cn5j2_EP.js +0 -1
- package/dist/showcase/assets/page-header-CkvCF1MQ.js +0 -1
- package/dist/showcase/assets/pagination-DM5QGPo2.js +0 -42
- package/dist/showcase/assets/pagination-DUzHnhJ6.js +0 -1
- package/dist/showcase/assets/paperclip-DoqDQQVa.js +0 -1
- package/dist/showcase/assets/password-input-CfS4sfCl.js +0 -1
- package/dist/showcase/assets/pencil-C2OfFQMj.js +0 -1
- package/dist/showcase/assets/phone-CLvml_XI.js +0 -1
- package/dist/showcase/assets/plus-D5swsZCz.js +0 -1
- package/dist/showcase/assets/popover-menu-Bu9q96nE.js +0 -1
- package/dist/showcase/assets/popover-nCGXR4Yd.js +0 -1
- package/dist/showcase/assets/popover-xC8qczvP.js +0 -1
- package/dist/showcase/assets/products-BbSzEFvw.js +0 -407
- package/dist/showcase/assets/progress-DYfoy7pk.js +0 -1
- package/dist/showcase/assets/progress-ENNwjW3X.js +0 -18
- package/dist/showcase/assets/props-table-2pIZzGC-.js +0 -1
- package/dist/showcase/assets/props.generated-DggzG-JL.json +0 -38611
- package/dist/showcase/assets/quote-BO1bufuX.js +0 -1
- package/dist/showcase/assets/receipt-kIVP3kxJ.js +0 -1
- package/dist/showcase/assets/receipt-text-BDQIvI4l.js +0 -1
- package/dist/showcase/assets/refresh-cw-UdL93poQ.js +0 -1
- package/dist/showcase/assets/resolveValueLabel-DfiI3G4i.js +0 -1
- package/dist/showcase/assets/rich-text-editor-CNtfwLC2.js +0 -143
- package/dist/showcase/assets/rich-text-editor-DB4QWptQ.js +0 -124
- package/dist/showcase/assets/rotate-ccw-DQPoMfMY.js +0 -1
- package/dist/showcase/assets/save-Cd0ZM40i.js +0 -1
- package/dist/showcase/assets/schema-form-Cyc6vCVO.js +0 -325
- package/dist/showcase/assets/scroll-area-B5NZsDdi.js +0 -32
- package/dist/showcase/assets/scroll-area-BvTq99pz.js +0 -1
- package/dist/showcase/assets/select-BRbyPtx8.js +0 -1
- package/dist/showcase/assets/select-Dymyvyh6.js +0 -1
- package/dist/showcase/assets/send-BWzI7mwi.js +0 -1
- package/dist/showcase/assets/separator-BsYPzBlF.js +0 -1
- package/dist/showcase/assets/separator-Osp0OJ78.js +0 -28
- package/dist/showcase/assets/settings-DRmWJILI.js +0 -1
- package/dist/showcase/assets/sheet-BKsjMYMo.js +0 -1
- package/dist/showcase/assets/shield-D1EaWJMG.js +0 -1
- package/dist/showcase/assets/shield-alert-DWsbR2jn.js +0 -1
- package/dist/showcase/assets/shield-check-DUTAPADm.js +0 -1
- package/dist/showcase/assets/shopping-bag-XmeqUqk9.js +0 -1
- package/dist/showcase/assets/sidebar-B5uO9sUB.js +0 -1
- package/dist/showcase/assets/sidebar.context-CRjgeYJL.js +0 -1
- package/dist/showcase/assets/skeleton-BtiPkfxB.js +0 -1
- package/dist/showcase/assets/skeleton-DbybIpkV.js +0 -29
- package/dist/showcase/assets/slider-vuwVVBby.js +0 -1
- package/dist/showcase/assets/sliders-horizontal-BE_cwUn0.js +0 -1
- package/dist/showcase/assets/smart-card-Dhu_1A_u.js +0 -1
- package/dist/showcase/assets/sonner-DZB-G4q5.js +0 -22
- package/dist/showcase/assets/sortable.esm-YOwRw8Hr.js +0 -5
- package/dist/showcase/assets/sparkles-N8rqKQez.js +0 -1
- package/dist/showcase/assets/spinner-B5zKCNXu.js +0 -30
- package/dist/showcase/assets/spinner-BOjRziLu.js +0 -1
- package/dist/showcase/assets/spinner-PIr8y8av.js +0 -49
- package/dist/showcase/assets/square-pen-ImRrVwT8.js +0 -1
- package/dist/showcase/assets/stacked-avatars-DnIAc098.js +0 -1
- package/dist/showcase/assets/star-BaV-UTPq.js +0 -1
- package/dist/showcase/assets/startOfDay-CtTeiGV0.js +0 -1
- package/dist/showcase/assets/styles-Bv0pDLVi.js +0 -1
- package/dist/showcase/assets/suggestions-QnLPdgnG.js +0 -126
- package/dist/showcase/assets/switch-DwAS_TXx.js +0 -1
- package/dist/showcase/assets/switch-xzxCDtyg.js +0 -1
- package/dist/showcase/assets/sync-LeYxWAap.js +0 -107
- package/dist/showcase/assets/table-BbEFanNu.js +0 -1
- package/dist/showcase/assets/table-CVVHBty6.js +0 -382
- package/dist/showcase/assets/table-actions-DvI9U67L.js +0 -1
- package/dist/showcase/assets/tabs-CLcyGwLd.js +0 -1
- package/dist/showcase/assets/tabs-ck8y1Bjr.js +0 -19
- package/dist/showcase/assets/tags-input-DmBY2CKI.js +0 -1
- package/dist/showcase/assets/text-button-C54O1rZM.js +0 -1
- package/dist/showcase/assets/text-link-9_mZpq_f.js +0 -1
- package/dist/showcase/assets/textarea-CHvnWHWH.js +0 -1
- package/dist/showcase/assets/textarea-jexcMklP.js +0 -1
- package/dist/showcase/assets/timelines-uvFVjEQv.js +0 -200
- package/dist/showcase/assets/toggle-group-B3fORi8i.js +0 -1
- package/dist/showcase/assets/toggles-Cox6Yk2k.js +0 -71
- package/dist/showcase/assets/toggles-group-CSvSPqCB.js +0 -32
- package/dist/showcase/assets/trash-2-CE9bDw49.js +0 -1
- package/dist/showcase/assets/trending-up-0iJl0XvC.js +0 -1
- package/dist/showcase/assets/truck-DlhOPoCD.js +0 -1
- package/dist/showcase/assets/typography-BotOITw4.js +0 -223
- package/dist/showcase/assets/ui-badge-hfmO1K3-.js +0 -28
- package/dist/showcase/assets/ui-card-Aigzxhn3.js +0 -30
- package/dist/showcase/assets/ui-table-CKif9sNO.js +0 -42
- package/dist/showcase/assets/upload-tray-BnKDNrw9.js +0 -138
- package/dist/showcase/assets/use-layout-link-BQ6Y9z__.js +0 -1
- package/dist/showcase/assets/useAnchoredPopupScrollLock-CP1vkwD7.js +0 -1
- package/dist/showcase/assets/useAriaLabelledBy-J_Rvjwx3.js +0 -1
- package/dist/showcase/assets/useCollapsiblePanel-BwUOowW2.js +0 -1
- package/dist/showcase/assets/useCompositeItem-D3XOIML-.js +0 -1
- package/dist/showcase/assets/useCompositeListItem-BWfShNPP.js +0 -1
- package/dist/showcase/assets/useLabelableId-DxorZ3YW.js +0 -1
- package/dist/showcase/assets/useOpenInteractionType-DLUX6CcH.js +0 -1
- package/dist/showcase/assets/useRender-B9zzqKA1.js +0 -1
- package/dist/showcase/assets/useTriggerFocusGuards-BSvL8pKg.js +0 -1
- package/dist/showcase/assets/useValueChanged-DSoTBFAJ.js +0 -1
- package/dist/showcase/assets/user-BZog6aIh.js +0 -1
- package/dist/showcase/assets/user-plus-CPxlPoxf.js +0 -1
- package/dist/showcase/assets/users-BgXAp2UO.js +0 -1
- package/dist/showcase/assets/vendor-profile-BLYiDIrO.js +0 -37
- package/dist/showcase/assets/video-YBnCbmIb.js +0 -1
- package/dist/showcase/assets/wrench-BFTavxzg.js +0 -1
- package/dist/showcase/assets/x-D8UN9pOu.js +0 -1
- package/dist/showcase/assets/zap-DIJUAJEb.js +0 -1
|
@@ -0,0 +1,506 @@
|
|
|
1
|
+
import { useStrings as e } from "../lib/strings.js";
|
|
2
|
+
import { cn as t } from "../lib/utils.js";
|
|
3
|
+
import { t as n } from "./button-BGKY8UY0.js";
|
|
4
|
+
import { n as r } from "./heading-HeP06nXG.js";
|
|
5
|
+
import { t as i } from "./badge-6WYAMJwA.js";
|
|
6
|
+
import { t as a } from "./popover-L37RqoRO.js";
|
|
7
|
+
import { i as o } from "./command-CAI-BCSR.js";
|
|
8
|
+
import { a as s, i as c, n as l, r as u, t as d } from "./command-DwRnPIGs.js";
|
|
9
|
+
import { Fragment as f, useCallback as p, useEffect as m, useMemo as h, useRef as g, useState as _ } from "react";
|
|
10
|
+
import { Fragment as v, jsx as y, jsxs as b } from "react/jsx-runtime";
|
|
11
|
+
import { Loader2 as x } from "lucide-react";
|
|
12
|
+
//#region src/components/features/mentions/hooks/use-mentions-search.ts
|
|
13
|
+
function S(e = {}) {
|
|
14
|
+
let { resources: t, onResourceSearch: n, initialMentions: r, debounceMs: i = 200 } = e, a = h(() => t ? Object.keys(t) : [], [t]), [o, s] = _(() => a[0] ?? null), [c, l] = _(!1), [u, d] = _(""), [f, v] = _({}), [y, b] = _(!1), [x, S] = _(() => r ? [...r] : []), C = g(0), w = g(null);
|
|
15
|
+
m(() => {
|
|
16
|
+
if (a.length === 0) {
|
|
17
|
+
s(null);
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
(!o || !a.includes(o)) && s(a[0]);
|
|
21
|
+
}, [o, a]);
|
|
22
|
+
let T = h(() => o && t ? t[o] ?? null : null, [o, t]), E = p(async (e, r) => {
|
|
23
|
+
let i = t?.[e];
|
|
24
|
+
if (i?.search) return (await i.search(r)).map((t) => ({
|
|
25
|
+
...t,
|
|
26
|
+
kind: e
|
|
27
|
+
}));
|
|
28
|
+
if (i?.suggestions) {
|
|
29
|
+
let t = i.suggestions;
|
|
30
|
+
return (r.trim().length === 0 ? t : t.filter((e) => e.label.toLowerCase().includes(r.toLowerCase()))).map((t) => ({
|
|
31
|
+
...t,
|
|
32
|
+
kind: e
|
|
33
|
+
}));
|
|
34
|
+
}
|
|
35
|
+
return n ? (await n(r, e)).map((t) => ({
|
|
36
|
+
...t,
|
|
37
|
+
kind: e
|
|
38
|
+
})) : [];
|
|
39
|
+
}, [t, n]);
|
|
40
|
+
m(() => {
|
|
41
|
+
if (w.current && clearTimeout(w.current), a.length === 0) {
|
|
42
|
+
v({});
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
let e = ++C.current, t = async () => {
|
|
46
|
+
b(!0);
|
|
47
|
+
try {
|
|
48
|
+
let t = await Promise.all(a.map(async (e) => {
|
|
49
|
+
try {
|
|
50
|
+
return [e, await E(e, u)];
|
|
51
|
+
} catch {
|
|
52
|
+
return [e, []];
|
|
53
|
+
}
|
|
54
|
+
}));
|
|
55
|
+
if (e !== C.current) return;
|
|
56
|
+
let n = {};
|
|
57
|
+
for (let [e, r] of t) n[e] = r;
|
|
58
|
+
v(n);
|
|
59
|
+
} finally {
|
|
60
|
+
e === C.current && b(!1);
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
return w.current = setTimeout(() => {
|
|
64
|
+
t();
|
|
65
|
+
}, i), () => {
|
|
66
|
+
w.current && clearTimeout(w.current);
|
|
67
|
+
};
|
|
68
|
+
}, [
|
|
69
|
+
a,
|
|
70
|
+
u,
|
|
71
|
+
E,
|
|
72
|
+
i
|
|
73
|
+
]), m(() => {
|
|
74
|
+
if (c || !o || (f[o] ?? []).length > 0) return;
|
|
75
|
+
let e = a.find((e) => (f[e]?.length ?? 0) > 0);
|
|
76
|
+
e && e !== o && s(e);
|
|
77
|
+
}, [
|
|
78
|
+
o,
|
|
79
|
+
a,
|
|
80
|
+
c,
|
|
81
|
+
f
|
|
82
|
+
]);
|
|
83
|
+
let D = p((e) => {
|
|
84
|
+
s(e);
|
|
85
|
+
}, []), O = p((e) => {
|
|
86
|
+
d(e);
|
|
87
|
+
}, []), k = p((e) => {
|
|
88
|
+
S((t) => t.some((t) => t.id === e.id) ? t : [...t, e]);
|
|
89
|
+
}, []), A = p((e) => {
|
|
90
|
+
S((t) => t.filter((t) => t.id !== e));
|
|
91
|
+
}, []), j = p((e) => {
|
|
92
|
+
S([...e]);
|
|
93
|
+
}, []), M = p(() => {
|
|
94
|
+
S([]), d(""), l(!1), C.current++;
|
|
95
|
+
}, []), N = p((e) => {
|
|
96
|
+
let n = e.kind ?? o, r = `${n}:${e.id}`, i = t?.[n], a = e.href ?? i?.buildHref?.(e), s = {
|
|
97
|
+
id: r,
|
|
98
|
+
kind: n,
|
|
99
|
+
label: e.label,
|
|
100
|
+
href: a,
|
|
101
|
+
data: e.data
|
|
102
|
+
};
|
|
103
|
+
return k(s), s;
|
|
104
|
+
}, [
|
|
105
|
+
o,
|
|
106
|
+
k,
|
|
107
|
+
t
|
|
108
|
+
]);
|
|
109
|
+
return {
|
|
110
|
+
kinds: a,
|
|
111
|
+
activeKind: o,
|
|
112
|
+
setActiveKind: D,
|
|
113
|
+
activeResource: T,
|
|
114
|
+
query: u,
|
|
115
|
+
setQuery: O,
|
|
116
|
+
suggestions: h(() => o ? f[o] ?? [] : [], [o, f]),
|
|
117
|
+
suggestionsByKind: f,
|
|
118
|
+
isLoading: y,
|
|
119
|
+
mentions: x,
|
|
120
|
+
addMention: k,
|
|
121
|
+
removeMention: A,
|
|
122
|
+
setMentions: j,
|
|
123
|
+
reset: M,
|
|
124
|
+
selectSuggestion: N,
|
|
125
|
+
manualKindOverride: c,
|
|
126
|
+
setManualKindOverride: l
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
//#endregion
|
|
130
|
+
//#region src/components/features/mentions/utils/build-mention-html.ts
|
|
131
|
+
function C(e, t) {
|
|
132
|
+
let n = String(e.label ?? "").replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">"), r = String(e.id).replace(/"/g, """), i = String(e.kind).replace(/"/g, """), a = t?.tone ? String(t.tone).replace(/"/g, """) : "", o = t?.triggerChar ?? (e.kind === "user" ? "@" : "");
|
|
133
|
+
return `<span class="rsc-mention" data-ref-id="${r}" data-ref-kind="${i}"${a ? ` data-ref-tone="${a}"` : ""} contenteditable="false">${o}${n}</span> `;
|
|
134
|
+
}
|
|
135
|
+
//#endregion
|
|
136
|
+
//#region src/components/features/mentions/hooks/use-mentions.ts
|
|
137
|
+
function w(e = {}) {
|
|
138
|
+
let t = e.resources, n = e.onResourceSearch, r = S({
|
|
139
|
+
...e,
|
|
140
|
+
resources: t,
|
|
141
|
+
onResourceSearch: n
|
|
142
|
+
}), [i, a] = _(!1), [o, s] = _(!1), c = g(null), l = g(null), u = p((e) => {
|
|
143
|
+
a(e), e || (c.current = null, l.current = null, s(!1), r.setManualKindOverride(!1));
|
|
144
|
+
}, [r]), d = e.editorRef, f = p(() => {
|
|
145
|
+
if (!t) return;
|
|
146
|
+
let e = {};
|
|
147
|
+
for (let [n, r] of Object.entries(t)) {
|
|
148
|
+
let t = r?.trigger;
|
|
149
|
+
typeof t == "string" && t.length > 0 && (e[t] = n);
|
|
150
|
+
}
|
|
151
|
+
if (Object.keys(e).length === 0) return;
|
|
152
|
+
let n = d?.current?.getCaretContext();
|
|
153
|
+
if (!n) {
|
|
154
|
+
c.current && (c.current = null, u(!1));
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
let i = Object.keys(e).map((e) => e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")).join(""), o = RegExp(`(?:^|\\s)([${i}])([\\p{L}\\p{N}_-]*)$`, "u"), f = n.textBefore.match(o);
|
|
158
|
+
if (!f) {
|
|
159
|
+
c.current && (c.current = null, u(!1));
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
let p = f[1], m = f[2] ?? "", h = e[p];
|
|
163
|
+
c.current = {
|
|
164
|
+
kind: h,
|
|
165
|
+
triggerChar: p,
|
|
166
|
+
consumedLength: p.length + m.length
|
|
167
|
+
}, s(!0), l.current !== p && (r.activeKind !== h && r.setActiveKind(h), r.setManualKindOverride(!1), l.current = p), r.query !== m && r.setQuery(m), a(!0);
|
|
168
|
+
}, [
|
|
169
|
+
d,
|
|
170
|
+
t,
|
|
171
|
+
r,
|
|
172
|
+
u
|
|
173
|
+
]), m = p((e) => {
|
|
174
|
+
let n = r.selectSuggestion(e), i = c.current, a = t?.[n.kind]?.tone, o = C(n, {
|
|
175
|
+
triggerChar: i?.triggerChar,
|
|
176
|
+
tone: a
|
|
177
|
+
});
|
|
178
|
+
return i && i.consumedLength > 0 && d?.current ? (d.current.replaceBeforeCaret(i.consumedLength, o), c.current = null) : d?.current && d.current.insertHTML(o), u(!1), n;
|
|
179
|
+
}, [
|
|
180
|
+
d,
|
|
181
|
+
t,
|
|
182
|
+
r,
|
|
183
|
+
u
|
|
184
|
+
]);
|
|
185
|
+
return {
|
|
186
|
+
...r,
|
|
187
|
+
pickerOpen: i,
|
|
188
|
+
setPickerOpen: u,
|
|
189
|
+
triggerActive: o,
|
|
190
|
+
handleCaretChange: f,
|
|
191
|
+
pickSuggestion: m
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
//#endregion
|
|
195
|
+
//#region src/components/features/mentions/partials/mention-chip.tsx
|
|
196
|
+
var T = {
|
|
197
|
+
primary: "secondary",
|
|
198
|
+
success: "success",
|
|
199
|
+
warning: "warning",
|
|
200
|
+
destructive: "destructive",
|
|
201
|
+
info: "info",
|
|
202
|
+
secondary: "secondary"
|
|
203
|
+
}, E = ({ mention: e, resource: n, asLink: r = !0, onClick: a, trailing: o, className: s }) => {
|
|
204
|
+
if (n?.renderChip) return /* @__PURE__ */ y(v, { children: n.renderChip(e) });
|
|
205
|
+
let c = T[n?.tone ?? "secondary"] ?? T.secondary, l = n?.icon, u = /* @__PURE__ */ b(i, {
|
|
206
|
+
variant: c,
|
|
207
|
+
inline: !0,
|
|
208
|
+
"data-ref-id": e.id,
|
|
209
|
+
"data-ref-kind": e.kind,
|
|
210
|
+
className: t("mention-chip--component", "align-[-0.15em] cursor-default whitespace-nowrap", s),
|
|
211
|
+
children: [
|
|
212
|
+
l ? /* @__PURE__ */ y(l, {
|
|
213
|
+
className: "size-3 shrink-0",
|
|
214
|
+
"aria-hidden": !0
|
|
215
|
+
}) : null,
|
|
216
|
+
/* @__PURE__ */ y("span", {
|
|
217
|
+
className: "truncate max-w-[14rem]",
|
|
218
|
+
children: e.label
|
|
219
|
+
}),
|
|
220
|
+
o
|
|
221
|
+
]
|
|
222
|
+
});
|
|
223
|
+
return r && e.href ? /* @__PURE__ */ y("a", {
|
|
224
|
+
href: e.href,
|
|
225
|
+
target: "_blank",
|
|
226
|
+
rel: "noreferrer noopener",
|
|
227
|
+
onClick: a,
|
|
228
|
+
className: "inline align-baseline no-underline hover:opacity-90",
|
|
229
|
+
children: u
|
|
230
|
+
}) : a ? /* @__PURE__ */ y("span", {
|
|
231
|
+
onClick: a,
|
|
232
|
+
className: "inline align-baseline",
|
|
233
|
+
children: u
|
|
234
|
+
}) : u;
|
|
235
|
+
}, D = /<(span|a)\b([^>]*?)data-ref-id\s*=\s*"([^"]+)"([^>]*)>([\s\S]*?)<\/\1>/gi;
|
|
236
|
+
function O(e) {
|
|
237
|
+
if (!e) return [];
|
|
238
|
+
let t = [], n = 0, r;
|
|
239
|
+
for (D.lastIndex = 0; (r = D.exec(e)) !== null;) {
|
|
240
|
+
let [i, , , a] = r, o = e.slice(n, r.index);
|
|
241
|
+
o.length > 0 && t.push({
|
|
242
|
+
kind: "html",
|
|
243
|
+
value: o
|
|
244
|
+
}), t.push({
|
|
245
|
+
kind: "mention",
|
|
246
|
+
refId: a,
|
|
247
|
+
fallback: i
|
|
248
|
+
}), n = r.index + i.length;
|
|
249
|
+
}
|
|
250
|
+
let i = e.slice(n);
|
|
251
|
+
return i.length > 0 && t.push({
|
|
252
|
+
kind: "html",
|
|
253
|
+
value: i
|
|
254
|
+
}), t;
|
|
255
|
+
}
|
|
256
|
+
//#endregion
|
|
257
|
+
//#region src/components/features/mentions/partials/mention-content.tsx
|
|
258
|
+
var k = "prose prose-sm prose-p:my-0.5 prose-p:leading-relaxed prose-headings:my-1 prose-a:text-primary prose-a:no-underline hover:prose-a:underline prose-strong:font-semibold prose-ul:my-0.5 prose-ol:my-0.5 prose-li:my-0.5 max-w-none";
|
|
259
|
+
function A(e) {
|
|
260
|
+
let { html: n, mentions: r, resources: i, renderMention: a, sanitizer: o, className: s, prose: c = !0 } = e, l = i, u = o ? o(n ?? "") : n ?? "", d = /* @__PURE__ */ new Map();
|
|
261
|
+
for (let e of r ?? []) d.set(e.id, e);
|
|
262
|
+
let p = d.size > 0 ? O(u) : [{
|
|
263
|
+
kind: "html",
|
|
264
|
+
value: u
|
|
265
|
+
}], m = (e) => {
|
|
266
|
+
if (a) return a(e);
|
|
267
|
+
let t = l?.[e.kind];
|
|
268
|
+
return /* @__PURE__ */ y(E, {
|
|
269
|
+
mention: e,
|
|
270
|
+
resource: t
|
|
271
|
+
});
|
|
272
|
+
}, h = p.map((e, t) => {
|
|
273
|
+
if (e.kind === "mention") {
|
|
274
|
+
let n = d.get(e.refId);
|
|
275
|
+
return n ? /* @__PURE__ */ y(f, { children: m(n) }, `ref-${t}-${e.refId}`) : /* @__PURE__ */ y("span", { dangerouslySetInnerHTML: { __html: e.fallback } }, `fallback-${t}`);
|
|
276
|
+
}
|
|
277
|
+
return /* @__PURE__ */ y("span", { dangerouslySetInnerHTML: { __html: e.value } }, `html-${t}`);
|
|
278
|
+
});
|
|
279
|
+
return c ? /* @__PURE__ */ y("div", {
|
|
280
|
+
className: t("mention-content--component", k, s),
|
|
281
|
+
children: h
|
|
282
|
+
}) : /* @__PURE__ */ y(v, { children: h });
|
|
283
|
+
}
|
|
284
|
+
var j = (e) => /* @__PURE__ */ y(A, { ...e }), M = {
|
|
285
|
+
title: "Insert reference",
|
|
286
|
+
searchPlaceholder: "Search…",
|
|
287
|
+
empty: "No matches.",
|
|
288
|
+
loading: "Searching…"
|
|
289
|
+
}, N = {
|
|
290
|
+
title: "Insert reference",
|
|
291
|
+
empty: "No matches.",
|
|
292
|
+
loading: "Searching…"
|
|
293
|
+
};
|
|
294
|
+
//#endregion
|
|
295
|
+
//#region src/components/features/mentions/partials/mention-picker.tsx
|
|
296
|
+
function P({ open: i, activeKind: f, setActiveKind: p, kinds: m, resources: h, query: g, setQuery: _, suggestions: v, isLoading: S, onSelect: C, strings: w, className: T }) {
|
|
297
|
+
let E = e(M, w);
|
|
298
|
+
return i ? /* @__PURE__ */ b(a, {
|
|
299
|
+
align: "start",
|
|
300
|
+
className: t("mention-picker--component", "w-72 overflow-hidden p-0", T),
|
|
301
|
+
children: [/* @__PURE__ */ b("div", {
|
|
302
|
+
className: "border-b border-border/60 px-3 py-2",
|
|
303
|
+
children: [/* @__PURE__ */ y(r, {
|
|
304
|
+
size: "xxs",
|
|
305
|
+
type: "secondary",
|
|
306
|
+
weight: "medium",
|
|
307
|
+
className: "uppercase tracking-wide",
|
|
308
|
+
children: E.title
|
|
309
|
+
}), m.length > 1 && /* @__PURE__ */ y("div", {
|
|
310
|
+
className: "mt-2 flex flex-wrap gap-1",
|
|
311
|
+
children: m.map((e) => {
|
|
312
|
+
let r = h?.[e], i = r?.icon, a = e === f;
|
|
313
|
+
return /* @__PURE__ */ b(n, {
|
|
314
|
+
type: "button",
|
|
315
|
+
variant: a ? "primary" : "secondary",
|
|
316
|
+
buttonStyle: a ? "solid" : "ghost",
|
|
317
|
+
size: "xs",
|
|
318
|
+
onClick: () => p(e),
|
|
319
|
+
className: t("h-auto gap-1 rounded px-1.5 py-0.5 text-xxs font-medium ring-1 ring-inset transition-colors", a ? "bg-primary text-primary-foreground ring-primary" : "bg-muted text-muted-foreground ring-border/60 hover:bg-muted/80"),
|
|
320
|
+
children: [i ? /* @__PURE__ */ y(i, { className: "size-3" }) : null, /* @__PURE__ */ y("span", { children: r?.label ?? String(e) })]
|
|
321
|
+
}, e);
|
|
322
|
+
})
|
|
323
|
+
})]
|
|
324
|
+
}), /* @__PURE__ */ b(d, {
|
|
325
|
+
shouldFilter: !1,
|
|
326
|
+
children: [/* @__PURE__ */ y(o, {
|
|
327
|
+
placeholder: E.searchPlaceholder,
|
|
328
|
+
value: g,
|
|
329
|
+
onValueChange: _
|
|
330
|
+
}), /* @__PURE__ */ b(s, { children: [
|
|
331
|
+
S ? /* @__PURE__ */ b("div", {
|
|
332
|
+
className: "text-muted-foreground flex items-center justify-center gap-2 py-3",
|
|
333
|
+
children: [/* @__PURE__ */ y(x, {
|
|
334
|
+
className: "size-3.5 animate-spin",
|
|
335
|
+
"aria-hidden": !0
|
|
336
|
+
}), /* @__PURE__ */ y(r, {
|
|
337
|
+
tag: "span",
|
|
338
|
+
size: "xs",
|
|
339
|
+
type: "secondary",
|
|
340
|
+
children: E.loading
|
|
341
|
+
})]
|
|
342
|
+
}) : null,
|
|
343
|
+
/* @__PURE__ */ y(l, { children: E.empty }),
|
|
344
|
+
/* @__PURE__ */ y(u, { children: v.map((e) => {
|
|
345
|
+
let t = e.kind ?? f ?? "";
|
|
346
|
+
return /* @__PURE__ */ y(c, {
|
|
347
|
+
value: `${t}:${e.id}`,
|
|
348
|
+
onSelect: () => C(e),
|
|
349
|
+
children: /* @__PURE__ */ b("div", {
|
|
350
|
+
className: "flex min-w-0 flex-1 flex-col leading-tight",
|
|
351
|
+
children: [/* @__PURE__ */ y(r, {
|
|
352
|
+
tag: "span",
|
|
353
|
+
size: "xs",
|
|
354
|
+
weight: "medium",
|
|
355
|
+
className: "truncate",
|
|
356
|
+
children: e.label
|
|
357
|
+
}), e.description ? /* @__PURE__ */ y(r, {
|
|
358
|
+
tag: "span",
|
|
359
|
+
size: "xxs",
|
|
360
|
+
type: "secondary",
|
|
361
|
+
className: "mt-0.5 truncate",
|
|
362
|
+
children: e.description
|
|
363
|
+
}) : null]
|
|
364
|
+
})
|
|
365
|
+
}, `${t}:${e.id}`);
|
|
366
|
+
}) })
|
|
367
|
+
] })]
|
|
368
|
+
})]
|
|
369
|
+
}) : null;
|
|
370
|
+
}
|
|
371
|
+
//#endregion
|
|
372
|
+
//#region src/components/features/mentions/partials/mention-inline-suggestions.tsx
|
|
373
|
+
function F({ open: i, activeKind: a, setActiveKind: o, kinds: s, resources: c, suggestionsByKind: l, suggestions: u, isLoading: d, query: f, onManualKindChange: p, onSelect: m, strings: h, className: g }) {
|
|
374
|
+
let _ = e(N, h);
|
|
375
|
+
return i ? /* @__PURE__ */ b("div", {
|
|
376
|
+
onMouseDown: (e) => e.preventDefault(),
|
|
377
|
+
className: t("mention-inline-suggestions--component", "bg-popover text-popover-foreground absolute left-0 top-full z-40 mt-1 w-80 max-w-[min(theme(spacing.96),100%)]", "border-border/60 rounded-md border shadow-md ring-1 ring-foreground/[0.04]", "overflow-hidden", g),
|
|
378
|
+
children: [/* @__PURE__ */ b("div", {
|
|
379
|
+
className: "border-b border-border/60 px-3 py-2",
|
|
380
|
+
children: [/* @__PURE__ */ b("div", {
|
|
381
|
+
className: "flex items-baseline justify-between gap-2",
|
|
382
|
+
children: [/* @__PURE__ */ y(r, {
|
|
383
|
+
size: "xxs",
|
|
384
|
+
type: "secondary",
|
|
385
|
+
weight: "medium",
|
|
386
|
+
className: "uppercase tracking-wide",
|
|
387
|
+
children: _.title
|
|
388
|
+
}), f ? /* @__PURE__ */ b(r, {
|
|
389
|
+
tag: "span",
|
|
390
|
+
size: "xxs",
|
|
391
|
+
type: "secondary",
|
|
392
|
+
className: "truncate font-mono",
|
|
393
|
+
children: [
|
|
394
|
+
"“",
|
|
395
|
+
f,
|
|
396
|
+
"”"
|
|
397
|
+
]
|
|
398
|
+
}) : null]
|
|
399
|
+
}), s.length > 1 && /* @__PURE__ */ y("div", {
|
|
400
|
+
className: "mt-2 flex flex-wrap gap-1",
|
|
401
|
+
children: s.map((e) => {
|
|
402
|
+
let r = c?.[e], i = r?.icon, s = e === a, u = l?.[e]?.length ?? 0;
|
|
403
|
+
return /* @__PURE__ */ b(n, {
|
|
404
|
+
type: "button",
|
|
405
|
+
variant: s ? "primary" : "secondary",
|
|
406
|
+
buttonStyle: s ? "solid" : "ghost",
|
|
407
|
+
size: "xs",
|
|
408
|
+
onClick: () => {
|
|
409
|
+
o(e), p?.();
|
|
410
|
+
},
|
|
411
|
+
className: t("h-auto gap-1 rounded px-1.5 py-0.5 text-xxs font-medium ring-1 ring-inset transition-colors", s ? "bg-primary text-primary-foreground ring-primary" : u > 0 ? "bg-muted text-foreground ring-border/60 hover:bg-muted/80" : "bg-muted/40 text-muted-foreground ring-border/40 hover:bg-muted/60"),
|
|
412
|
+
children: [
|
|
413
|
+
i ? /* @__PURE__ */ y(i, { className: "size-3" }) : null,
|
|
414
|
+
/* @__PURE__ */ y("span", { children: r?.label ?? String(e) }),
|
|
415
|
+
u > 0 && /* @__PURE__ */ y("span", {
|
|
416
|
+
className: t("tabular-nums", s ? "opacity-90" : "opacity-70"),
|
|
417
|
+
children: u
|
|
418
|
+
})
|
|
419
|
+
]
|
|
420
|
+
}, e);
|
|
421
|
+
})
|
|
422
|
+
})]
|
|
423
|
+
}), /* @__PURE__ */ b("div", {
|
|
424
|
+
className: "max-h-72 overflow-y-auto py-1",
|
|
425
|
+
...u.length > 0 ? {
|
|
426
|
+
role: "listbox",
|
|
427
|
+
"aria-label": _.title
|
|
428
|
+
} : {},
|
|
429
|
+
children: [
|
|
430
|
+
d ? /* @__PURE__ */ b("div", {
|
|
431
|
+
className: "text-muted-foreground flex items-center justify-center gap-2 py-3",
|
|
432
|
+
children: [/* @__PURE__ */ y(x, {
|
|
433
|
+
className: "size-3.5 animate-spin",
|
|
434
|
+
"aria-hidden": !0
|
|
435
|
+
}), /* @__PURE__ */ y(r, {
|
|
436
|
+
tag: "span",
|
|
437
|
+
size: "xs",
|
|
438
|
+
type: "secondary",
|
|
439
|
+
children: _.loading
|
|
440
|
+
})]
|
|
441
|
+
}) : null,
|
|
442
|
+
!d && u.length === 0 ? /* @__PURE__ */ y("div", {
|
|
443
|
+
className: "px-3 py-3",
|
|
444
|
+
children: /* @__PURE__ */ y(r, {
|
|
445
|
+
size: "xs",
|
|
446
|
+
type: "secondary",
|
|
447
|
+
children: _.empty
|
|
448
|
+
})
|
|
449
|
+
}) : null,
|
|
450
|
+
u.map((e) => {
|
|
451
|
+
let i = e.kind ?? a ?? "";
|
|
452
|
+
return /* @__PURE__ */ y(n, {
|
|
453
|
+
type: "button",
|
|
454
|
+
variant: "secondary",
|
|
455
|
+
buttonStyle: "ghost",
|
|
456
|
+
size: "sm",
|
|
457
|
+
role: "option",
|
|
458
|
+
"data-ref-id": `${i}:${e.id}`,
|
|
459
|
+
onClick: () => m(e),
|
|
460
|
+
className: t("h-auto w-full min-w-0 justify-start gap-2 rounded-none px-3 py-1.5 text-left", "hover:bg-muted/60 focus-visible:bg-muted/60 transition-colors"),
|
|
461
|
+
children: /* @__PURE__ */ b("div", {
|
|
462
|
+
className: "flex min-w-0 flex-1 flex-col leading-tight",
|
|
463
|
+
children: [/* @__PURE__ */ y(r, {
|
|
464
|
+
tag: "span",
|
|
465
|
+
size: "xs",
|
|
466
|
+
weight: "medium",
|
|
467
|
+
className: "truncate",
|
|
468
|
+
children: e.label
|
|
469
|
+
}), e.description ? /* @__PURE__ */ y(r, {
|
|
470
|
+
tag: "span",
|
|
471
|
+
size: "xxs",
|
|
472
|
+
type: "secondary",
|
|
473
|
+
className: "mt-0.5 truncate",
|
|
474
|
+
children: e.description
|
|
475
|
+
}) : null]
|
|
476
|
+
})
|
|
477
|
+
}, `${i}:${e.id}`);
|
|
478
|
+
})
|
|
479
|
+
]
|
|
480
|
+
})]
|
|
481
|
+
}) : null;
|
|
482
|
+
}
|
|
483
|
+
//#endregion
|
|
484
|
+
//#region src/components/features/mentions/utils/parse-mentions-from-html.ts
|
|
485
|
+
var I = /<(?:span|a)\b[^>]*?data-ref-id\s*=\s*"([^"]+)"[^>]*?>([\s\S]*?)<\/(?:span|a)>/gi, L = /data-ref-kind\s*=\s*"([^"]+)"/i;
|
|
486
|
+
function R(e) {
|
|
487
|
+
let t = [];
|
|
488
|
+
if (!e) return t;
|
|
489
|
+
let n = /* @__PURE__ */ new Set(), r;
|
|
490
|
+
for (I.lastIndex = 0; (r = I.exec(e)) !== null;) {
|
|
491
|
+
let [e, i, a] = r;
|
|
492
|
+
if (n.has(i)) continue;
|
|
493
|
+
n.add(i);
|
|
494
|
+
let o = e.match(L)?.[1] ?? i.split(":")[0] ?? "", s = (a ?? "").replace(/<[^>]*>/g, "").replace(/ /g, " ").replace(/^[@#$&%!~]\s*/, "").trim();
|
|
495
|
+
t.push({
|
|
496
|
+
id: i,
|
|
497
|
+
kind: o,
|
|
498
|
+
label: s
|
|
499
|
+
});
|
|
500
|
+
}
|
|
501
|
+
return t;
|
|
502
|
+
}
|
|
503
|
+
//#endregion
|
|
504
|
+
export { M as a, O as c, C as d, S as f, N as i, E as l, F as n, A as o, P as r, j as s, R as t, w as u };
|
|
505
|
+
|
|
506
|
+
//# sourceMappingURL=mentions-CdvvLGQG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mentions-CdvvLGQG.js","names":[],"sources":["../../src/components/features/mentions/hooks/use-mentions-search.ts","../../src/components/features/mentions/utils/build-mention-html.ts","../../src/components/features/mentions/hooks/use-mentions.ts","../../src/components/features/mentions/partials/mention-chip.tsx","../../src/components/features/mentions/utils/split-html-by-mentions.ts","../../src/components/features/mentions/partials/mention-content.tsx","../../src/components/features/mentions/mentions.strings.ts","../../src/components/features/mentions/partials/mention-picker.tsx","../../src/components/features/mentions/partials/mention-inline-suggestions.tsx","../../src/components/features/mentions/utils/parse-mentions-from-html.ts"],"sourcesContent":["/**\n * useMentionsSearch — pure search state for the mention picker.\n *\n * Runs **all registered kinds in parallel** for the same needle so the\n * caller can render mixed results in tabs and the picker can auto-\n * switch when the active kind has zero matches but another does. The\n * caller still controls which kind is *active* (the one whose\n * suggestions render); manual switches are remembered and not\n * overridden by subsequent caret-driven re-detections.\n *\n * Suggestion lookup order per kind:\n * 1. `resources[kind].search(needle)` — per-kind callback\n * 2. `resources[kind].suggestions` — static catalogue\n * 3. global `onResourceSearch(needle, kind)` — fallback\n */\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport type {\n Mention,\n MentionResource,\n MentionSuggestion,\n MentionsResourceSearch,\n} from '../mentions.types';\n\nexport interface UseMentionsSearchOptions<TResource extends string = string> {\n resources?: Partial<Record<TResource, MentionResource<TResource>>>;\n onResourceSearch?: MentionsResourceSearch<TResource>;\n initialMentions?: ReadonlyArray<Mention<TResource>>;\n /** Debounce window for async search. Default: 200ms. */\n debounceMs?: number;\n}\n\nexport interface UseMentionsSearchReturn<TResource extends string = string> {\n kinds: ReadonlyArray<TResource>;\n activeKind: TResource | null;\n setActiveKind: (kind: TResource | null) => void;\n activeResource: MentionResource<TResource> | null;\n\n query: string;\n setQuery: (q: string) => void;\n\n /** Suggestions for the active kind (`suggestionsByKind[activeKind]`). */\n suggestions: ReadonlyArray<MentionSuggestion<TResource>>;\n /** Per-kind suggestion buckets — useful for cross-kind UIs. */\n suggestionsByKind: Readonly<Record<string, ReadonlyArray<MentionSuggestion<TResource>>>>;\n isLoading: boolean;\n\n mentions: ReadonlyArray<Mention<TResource>>;\n addMention: (mention: Mention<TResource>) => void;\n removeMention: (id: string) => void;\n setMentions: (next: ReadonlyArray<Mention<TResource>>) => void;\n reset: () => void;\n\n selectSuggestion: (\n suggestion: MentionSuggestion<TResource>,\n ) => Mention<TResource>;\n\n /** True if the consumer manually picked a tab. The trigger detector\n * checks this and refuses to override the active kind on next caret\n * change while it's true. Reset on `setManualKindOverride(false)` or\n * `reset()`. */\n manualKindOverride: boolean;\n setManualKindOverride: (override: boolean) => void;\n}\n\nexport function useMentionsSearch<TResource extends string = string>(\n options: UseMentionsSearchOptions<TResource> = {},\n): UseMentionsSearchReturn<TResource> {\n const { resources, onResourceSearch, initialMentions, debounceMs = 200 } = options;\n\n const kinds = useMemo<ReadonlyArray<TResource>>(\n () => (resources ? (Object.keys(resources) as TResource[]) : []),\n [resources],\n );\n\n const [activeKind, setActiveKindState] = useState<TResource | null>(\n () => kinds[0] ?? null,\n );\n const [manualKindOverride, setManualKindOverride] = useState(false);\n const [query, setQueryState] = useState('');\n const [suggestionsByKind, setSuggestionsByKind] = useState<\n Record<string, ReadonlyArray<MentionSuggestion<TResource>>>\n >({});\n const [isLoading, setIsLoading] = useState(false);\n const [mentions, setMentionsState] = useState<Mention<TResource>[]>(() =>\n initialMentions ? [...initialMentions] : [],\n );\n\n const requestIdRef = useRef(0);\n const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n if (kinds.length === 0) {\n setActiveKindState(null);\n return;\n }\n if (!activeKind || !kinds.includes(activeKind)) {\n setActiveKindState(kinds[0]);\n }\n }, [activeKind, kinds]);\n\n const activeResource = useMemo(\n () => (activeKind && resources ? resources[activeKind] ?? null : null),\n [activeKind, resources],\n );\n\n /**\n * Search a single kind. Per-kind `search` wins, then static\n * `suggestions`, then the global `onResourceSearch` fallback.\n */\n const searchOneKind = useCallback(\n async (\n kind: TResource,\n q: string,\n ): Promise<ReadonlyArray<MentionSuggestion<TResource>>> => {\n const config = resources?.[kind];\n if (config?.search) {\n const result = await config.search(q);\n return result.map((s) => ({ ...s, kind }));\n }\n if (config?.suggestions) {\n const stat = config.suggestions;\n const filtered =\n q.trim().length === 0\n ? stat\n : stat.filter((s) =>\n s.label.toLowerCase().includes(q.toLowerCase()),\n );\n return filtered.map((s) => ({ ...s, kind }));\n }\n if (onResourceSearch) {\n const result = await onResourceSearch(q, kind);\n return result.map((s) => ({ ...s, kind }));\n }\n return [];\n },\n [resources, onResourceSearch],\n );\n\n // Debounced cross-kind search runner. Populates `suggestionsByKind`\n // for every registered kind in parallel.\n useEffect(() => {\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n if (kinds.length === 0) {\n setSuggestionsByKind({});\n return;\n }\n\n const requestId = ++requestIdRef.current;\n const run = async () => {\n setIsLoading(true);\n try {\n const entries = await Promise.all(\n kinds.map(async (kind) => {\n try {\n const list = await searchOneKind(kind, query);\n return [kind, list] as const;\n } catch {\n return [kind, []] as const;\n }\n }),\n );\n if (requestId !== requestIdRef.current) return;\n const next: Record<string, ReadonlyArray<MentionSuggestion<TResource>>> = {};\n for (const [kind, list] of entries) {\n next[kind] = list;\n }\n setSuggestionsByKind(next);\n } finally {\n if (requestId === requestIdRef.current) {\n setIsLoading(false);\n }\n }\n };\n\n debounceRef.current = setTimeout(() => {\n void run();\n }, debounceMs);\n\n return () => {\n if (debounceRef.current) clearTimeout(debounceRef.current);\n };\n }, [kinds, query, searchOneKind, debounceMs]);\n\n /**\n * Auto-switch behaviour: when the active kind has zero results but\n * another kind has matches, jump to the first kind with results.\n * Skipped while `manualKindOverride` is true so the consumer's tab\n * choice sticks.\n */\n useEffect(() => {\n if (manualKindOverride) return;\n if (!activeKind) return;\n const activeList = suggestionsByKind[activeKind] ?? [];\n if (activeList.length > 0) return;\n const first = kinds.find((k) => (suggestionsByKind[k]?.length ?? 0) > 0);\n if (first && first !== activeKind) {\n setActiveKindState(first);\n }\n }, [activeKind, kinds, manualKindOverride, suggestionsByKind]);\n\n /**\n * Set the active kind. **Does not** toggle `manualKindOverride` —\n * the picker UI is responsible for calling\n * `setManualKindOverride(true)` when the user explicitly clicks a\n * tab so the auto-switch / auto-detect logic respects their choice.\n */\n const setActiveKind = useCallback((kind: TResource | null) => {\n setActiveKindState(kind);\n }, []);\n\n const setQuery = useCallback((q: string) => {\n setQueryState(q);\n }, []);\n\n const addMention = useCallback((mention: Mention<TResource>) => {\n setMentionsState((prev) => {\n if (prev.some((m) => m.id === mention.id)) return prev;\n return [...prev, mention];\n });\n }, []);\n\n const removeMention = useCallback((id: string) => {\n setMentionsState((prev) => prev.filter((m) => m.id !== id));\n }, []);\n\n const setMentions = useCallback(\n (next: ReadonlyArray<Mention<TResource>>) => {\n setMentionsState([...next]);\n },\n [],\n );\n\n const reset = useCallback(() => {\n setMentionsState([]);\n setQueryState('');\n setManualKindOverride(false);\n requestIdRef.current++;\n }, []);\n\n const selectSuggestion = useCallback(\n (suggestion: MentionSuggestion<TResource>) => {\n const kind = (suggestion.kind ?? activeKind) as TResource;\n const id = `${kind}:${suggestion.id}`;\n const cfg = resources?.[kind];\n const href = suggestion.href ?? cfg?.buildHref?.(suggestion);\n const mention: Mention<TResource> = {\n id,\n kind,\n label: suggestion.label,\n href,\n data: suggestion.data,\n };\n addMention(mention);\n return mention;\n },\n [activeKind, addMention, resources],\n );\n\n const suggestions = useMemo<ReadonlyArray<MentionSuggestion<TResource>>>(\n () => (activeKind ? suggestionsByKind[activeKind] ?? [] : []),\n [activeKind, suggestionsByKind],\n );\n\n return {\n kinds,\n activeKind,\n setActiveKind,\n activeResource,\n query,\n setQuery,\n suggestions,\n suggestionsByKind,\n isLoading,\n mentions,\n addMention,\n removeMention,\n setMentions,\n reset,\n selectSuggestion,\n manualKindOverride,\n setManualKindOverride,\n };\n}\n","import type { Mention, MentionTone } from '../mentions.types';\n\n/**\n * Serialize a `Mention` into the HTML span that gets inserted into a\n * rich-text body. The structure mirrors `<MentionChip>` so the editor\n * can style it via the `.rsc-mention` / `[data-ref-tone]` rules (see\n * mention-chip.css, co-located in this feature) and the read-time\n * renderer (`<MentionContent>`) can find it again.\n *\n * <span class=\"rsc-mention\" data-ref-id=\"kind:id\" data-ref-kind=\"kind\"\n * data-ref-tone=\"info\" contenteditable=\"false\">@Maria Petrova</span> \n *\n * `data-ref-tone` is what drives the badge colour in both the editor\n * (CSS-only, since contenteditable can't host React) and the read-time\n * renderer (which respects it as a hint when the resource registry\n * isn't available).\n *\n * `contenteditable=\"false\"` tells the browser to treat the chip as an\n * atomic glyph — backspace deletes the whole span, the cursor moves\n * past it, and the inner label can't be edited character-by-character.\n */\nexport function buildMentionHtml<TKind extends string = string>(\n mention: Mention<TKind>,\n options?: { triggerChar?: string; tone?: MentionTone },\n): string {\n const safeLabel = String(mention.label ?? '')\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n const id = String(mention.id).replace(/\"/g, '"');\n const kind = String(mention.kind).replace(/\"/g, '"');\n const tone = options?.tone ? String(options.tone).replace(/\"/g, '"') : '';\n const trigger =\n options?.triggerChar ?? (mention.kind === 'user' ? '@' : '');\n const toneAttr = tone ? ` data-ref-tone=\"${tone}\"` : '';\n return (\n `<span class=\"rsc-mention\" data-ref-id=\"${id}\" data-ref-kind=\"${kind}\"${toneAttr} contenteditable=\"false\">` +\n `${trigger}${safeLabel}` +\n `</span> `\n );\n}\n","/**\n * useMentions — picker state + caret-trigger detection bound to an editor.\n *\n * Composes `useMentionsSearch` (suggestion state) with caret-watch\n * logic. The editor it binds to must implement the minimal handle\n * surface in `MentionEditorHandle` — `<RichTextEditor>` from\n * `features/rich-text-editor` already does. Other editors (Slate,\n * Lexical, ProseMirror, plain contenteditable, …) can be plugged in by\n * implementing the same four methods on their imperative handle.\n *\n * Behaviour summary:\n * - On every editor `onCaretChange`, the hook reads `getCaretContext()`\n * and looks for a registered trigger char (`@`, `#`, …) preceded by\n * start-of-line / whitespace and followed by `\\p{L}\\p{N}_-` chars.\n * - On match, the picker opens, `activeKind` is seeded from the\n * trigger char (only on a *fresh* trigger session — manual tab\n * switches survive subsequent keystrokes), and `query` syncs from\n * the typed needle.\n * - All registered kinds are searched in parallel; the active kind\n * auto-switches to the first kind with results when the current\n * active is empty (skipped if `manualKindOverride` is true).\n * - `pickSuggestion` deletes the trigger range and inserts the chip\n * atomically via `replaceBeforeCaret` — selection-extension means\n * no manual text mutation, no race between delete + insert.\n * - When opened via the manual button (no trigger detected), the\n * selection runs `insertHTML` instead — caret stays where it was.\n *\n * Returned API:\n * pickerOpen, setPickerOpen, triggerActive,\n * kinds, activeKind, setActiveKind, manualKindOverride, setManualKindOverride,\n * query, setQuery, suggestions, suggestionsByKind, isLoading,\n * mentions, addMention, removeMention, setMentions, reset,\n * handleCaretChange() — wire to the editor's `onCaretChange`\n * pickSuggestion(s) — convert suggestion → Mention + insert chip\n *\n * @example\n * const editorRef = useRef<RichTextEditorHandle>(null);\n * const mentions = useMentions<'user' | 'order'>({ editorRef });\n *\n * <RichTextEditor ref={editorRef} onCaretChange={mentions.handleCaretChange} />\n * <MentionInlineSuggestions\n * open={mentions.triggerActive && mentions.pickerOpen}\n * activeKind={mentions.activeKind}\n * setActiveKind={mentions.setActiveKind}\n * onManualKindChange={() => mentions.setManualKindOverride(true)}\n * {...mentions}\n * onSelect={mentions.pickSuggestion}\n * />\n */\nimport { useCallback, useRef, useState } from 'react';\nimport type { RefObject } from 'react';\n\nimport type {\n Mention,\n MentionResource,\n MentionSuggestion,\n MentionsResourceSearch,\n} from '../mentions.types';\nimport { buildMentionHtml } from '../utils/build-mention-html';\nimport {\n useMentionsSearch,\n type UseMentionsSearchOptions,\n type UseMentionsSearchReturn,\n} from './use-mentions-search';\n\n/**\n * Minimal editor handle the trigger detector needs. Compatible with the\n * library's `<RichTextEditor>` handle — implement these on any custom\n * editor to plug in.\n */\nexport interface MentionEditorHandle {\n getCaretContext(): { textBefore: string } | null;\n insertHTML(html: string): void;\n replaceBeforeCaret(length: number, html: string): void;\n focus(): void;\n}\n\nexport interface UseMentionsOptions<TResource extends string = string>\n extends UseMentionsSearchOptions<TResource> {\n /** Ref to the editor surface the trigger detector reads from. */\n editorRef?: RefObject<MentionEditorHandle | null>;\n}\n\nexport interface UseMentionsReturn<TResource extends string = string>\n extends UseMentionsSearchReturn<TResource> {\n pickerOpen: boolean;\n setPickerOpen: (open: boolean) => void;\n /** True while the picker is open from an inline `@`/`#` trigger. */\n triggerActive: boolean;\n /** Wire to the editor's `onCaretChange` to enable inline triggers. */\n handleCaretChange: () => void;\n /**\n * Convert a suggestion into a Mention, register it, insert the chip\n * into the editor (replacing the trigger range when one is active),\n * and close the picker. Returns the Mention.\n */\n pickSuggestion: (\n suggestion: MentionSuggestion<TResource>,\n ) => Mention<TResource>;\n}\n\ninterface TriggerState {\n kind: string;\n triggerChar: string;\n consumedLength: number;\n}\n\nexport function useMentions<TResource extends string = string>(\n options: UseMentionsOptions<TResource> = {},\n): UseMentionsReturn<TResource> {\n const resources = options.resources;\n const onResourceSearch: MentionsResourceSearch<TResource> | undefined =\n options.onResourceSearch;\n\n const search = useMentionsSearch<TResource>({\n ...options,\n resources,\n onResourceSearch,\n });\n\n const [pickerOpen, setPickerOpenState] = useState(false);\n const [triggerActive, setTriggerActive] = useState(false);\n const triggerStateRef = useRef<TriggerState | null>(null);\n /** Tracks the trigger char from the most recent detection — lets us\n * set the initial active kind on a fresh trigger without overriding\n * the user's manual tab switch on every subsequent keystroke. */\n const lastTriggerCharRef = useRef<string | null>(null);\n\n const setPickerOpen = useCallback((open: boolean) => {\n setPickerOpenState(open);\n if (!open) {\n triggerStateRef.current = null;\n lastTriggerCharRef.current = null;\n setTriggerActive(false);\n search.setManualKindOverride(false);\n }\n }, [search]);\n\n const editorRef = options.editorRef;\n\n const handleCaretChange = useCallback(() => {\n if (!resources) return;\n const triggerMap: Record<string, string> = {};\n for (const [kind, cfg] of Object.entries(resources)) {\n const trig = (cfg as MentionResource | undefined)?.trigger;\n if (typeof trig === 'string' && trig.length > 0) {\n triggerMap[trig] = kind;\n }\n }\n if (Object.keys(triggerMap).length === 0) return;\n\n const ctx = editorRef?.current?.getCaretContext();\n if (!ctx) {\n if (triggerStateRef.current) {\n triggerStateRef.current = null;\n setPickerOpen(false);\n }\n return;\n }\n const triggers = Object.keys(triggerMap)\n .map((c) => c.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'))\n .join('');\n const re = new RegExp(`(?:^|\\\\s)([${triggers}])([\\\\p{L}\\\\p{N}_-]*)$`, 'u');\n const match = ctx.textBefore.match(re);\n if (!match) {\n if (triggerStateRef.current) {\n triggerStateRef.current = null;\n setPickerOpen(false);\n }\n return;\n }\n const triggerChar = match[1];\n const needle = match[2] ?? '';\n const kind = triggerMap[triggerChar];\n const consumedLength = triggerChar.length + needle.length;\n\n triggerStateRef.current = { kind, triggerChar, consumedLength };\n setTriggerActive(true);\n\n // Only seed the initial active kind on a *fresh* trigger session.\n // If the user has already picked a tab in the panel,\n // `manualKindOverride` is true and we skip — their choice sticks\n // even as they keep typing or deleting characters.\n const isNewTriggerSession = lastTriggerCharRef.current !== triggerChar;\n if (isNewTriggerSession) {\n if (search.activeKind !== kind) {\n search.setActiveKind(kind as TResource);\n }\n search.setManualKindOverride(false);\n lastTriggerCharRef.current = triggerChar;\n }\n\n if (search.query !== needle) {\n search.setQuery(needle);\n }\n setPickerOpenState(true);\n }, [editorRef, resources, search, setPickerOpen]);\n\n const pickSuggestion = useCallback(\n (suggestion: MentionSuggestion<TResource>) => {\n const mention = search.selectSuggestion(suggestion);\n const trigger = triggerStateRef.current;\n const tone = (resources?.[mention.kind] as MentionResource | undefined)?.tone;\n const html = buildMentionHtml(mention, {\n triggerChar: trigger?.triggerChar,\n tone,\n });\n\n if (trigger && trigger.consumedLength > 0 && editorRef?.current) {\n editorRef.current.replaceBeforeCaret(trigger.consumedLength, html);\n triggerStateRef.current = null;\n } else if (editorRef?.current) {\n editorRef.current.insertHTML(html);\n }\n setPickerOpen(false);\n return mention;\n },\n [editorRef, resources, search, setPickerOpen],\n );\n\n return {\n ...search,\n pickerOpen,\n setPickerOpen,\n triggerActive,\n handleCaretChange,\n pickSuggestion,\n };\n}\n","/**\n * MentionChip — default rendering for an inline mention/reference.\n *\n * Wraps the lib's `<Badge>` base component with the variant driven by\n * the resource registry's `tone` field. The mapping between the\n * mentions module's `MentionTone` and the badge's variant lives below\n * (`TONE_TO_VARIANT`) so consumers can rebrand by editing one table.\n *\n * Override paths:\n * - `renderMention` on `<MentionContent>` — full takeover\n * - `resources.<kind>.renderChip(mention)` — per-kind takeover\n * - `resources.<kind>.tone` — quickest \"just change the color\" override\n */\nimport type { FC, ReactNode } from 'react';\n\nimport { Badge, type ComposedBadgeVariant } from '@/components/base/badge';\nimport { cn } from '@/lib/utils';\n\nimport type {\n Mention,\n MentionResource,\n MentionTone,\n} from '../mentions.types';\n\nexport interface MentionChipProps {\n mention: Mention;\n resource?: MentionResource<string>;\n /** Force-disable the chip's link (useful inside the composer draft list). */\n asLink?: boolean;\n onClick?: () => void;\n /** Trailing slot — typically a remove button when shown in the composer. */\n trailing?: ReactNode;\n className?: string;\n}\n\n/**\n * Single source of truth for `MentionTone → Badge variant`. Edit here\n * to rebrand all chips library-wide; override per-kind via\n * `resources.<kind>.tone`.\n */\nconst TONE_TO_VARIANT: Record<MentionTone, ComposedBadgeVariant> = {\n primary: 'secondary', // calm primary — saturated `primary` overwhelms body copy\n success: 'success',\n warning: 'warning',\n destructive: 'destructive',\n info: 'info',\n secondary: 'secondary',\n};\n\nexport const MentionChip: FC<MentionChipProps> = ({\n mention,\n resource,\n asLink = true,\n onClick,\n trailing,\n className,\n}) => {\n if (resource?.renderChip) {\n return <>{resource.renderChip(mention)}</>;\n }\n\n const tone = resource?.tone ?? 'secondary';\n const variant = TONE_TO_VARIANT[tone] ?? TONE_TO_VARIANT.secondary;\n const Icon = resource?.icon;\n\n const inner = (\n <Badge\n variant={variant}\n inline\n data-ref-id={mention.id}\n data-ref-kind={mention.kind}\n className={cn(\n 'mention-chip--component',\n /* Inline-flow tweaks: align to the surrounding text baseline\n instead of the line's mid-point, which causes wobble next\n to text. Keep the badge as `inline-flex` (from `inline`),\n add a subtle vertical offset via translate so the icon\n sits on the cap-height. */\n 'align-[-0.15em] cursor-default whitespace-nowrap',\n className,\n )}\n >\n {Icon ? <Icon className=\"size-3 shrink-0\" aria-hidden /> : null}\n <span className=\"truncate max-w-[14rem]\">{mention.label}</span>\n {trailing}\n </Badge>\n );\n\n if (asLink && mention.href) {\n return (\n <a\n href={mention.href}\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n onClick={onClick}\n className=\"inline align-baseline no-underline hover:opacity-90\"\n >\n {inner}\n </a>\n );\n }\n\n if (onClick) {\n return (\n <span onClick={onClick} className=\"inline align-baseline\">\n {inner}\n </span>\n );\n }\n\n return inner;\n};\n","/**\n * Split an HTML string into a list of `html` chunks and `mention`\n * placeholders, keyed by the `data-ref-id` attribute the writer set.\n *\n * Used by `<MentionContent>` to render the body once with React chips\n * for the references and `dangerouslySetInnerHTML` for everything else.\n */\nexport type MentionHtmlSegment =\n | { kind: 'html'; value: string }\n | { kind: 'mention'; refId: string; fallback: string };\n\nconst MENTION_RE =\n /<(span|a)\\b([^>]*?)data-ref-id\\s*=\\s*\"([^\"]+)\"([^>]*)>([\\s\\S]*?)<\\/\\1>/gi;\n\nexport function splitHtmlByMentions(html: string): MentionHtmlSegment[] {\n if (!html) return [];\n\n const segments: MentionHtmlSegment[] = [];\n let lastIndex = 0;\n let match: RegExpExecArray | null;\n MENTION_RE.lastIndex = 0;\n\n while ((match = MENTION_RE.exec(html)) !== null) {\n const [full, , , refId] = match;\n const before = html.slice(lastIndex, match.index);\n if (before.length > 0) {\n segments.push({ kind: 'html', value: before });\n }\n segments.push({\n kind: 'mention',\n refId,\n fallback: full,\n });\n lastIndex = match.index + full.length;\n }\n\n const tail = html.slice(lastIndex);\n if (tail.length > 0) {\n segments.push({ kind: 'html', value: tail });\n }\n\n return segments;\n}\n","/**\n * MentionContent — render an HTML body that may contain inline mention\n * spans (`<span data-ref-id=\"kind:id\">…</span>`) by swapping each ref\n * for a React `<MentionChip>` while leaving the rest of the HTML\n * untouched.\n *\n * Used by:\n * - `features/comments` — comment bodies\n * - `features/event-log` — event descriptions\n * - any other surface that renders rich-text with embedded refs\n *\n * Consumer can override per-mention rendering via `renderMention`, or\n * per-kind via the resource registry's `renderChip`.\n */\nimport { Fragment } from 'react';\nimport type { FC, ReactNode } from 'react';\n\nimport { cn } from '@/lib/utils';\n\nimport type {\n Mention,\n MentionResource,\n MentionsConfig,\n} from '../mentions.types';\nimport { splitHtmlByMentions } from '../utils/split-html-by-mentions';\nimport { MentionChip } from './mention-chip';\n\nexport interface MentionContentProps<TResource extends string = string> {\n /** HTML body to render. */\n html: string;\n /** Mentions resolved on the data — keyed by `data-ref-id`. */\n mentions?: ReadonlyArray<Mention<TResource>>;\n /** Resource registry — pass at the call site. */\n resources?: MentionsConfig<TResource>['resources'];\n /** Custom per-mention renderer — overrides resource.renderChip. */\n renderMention?: (mention: Mention<TResource>) => ReactNode;\n /** Optional sanitizer applied to HTML before rendering. */\n sanitizer?: (html: string) => string;\n /** Outer wrapper class. Defaults to a tight prose surface. */\n className?: string;\n /**\n * Set to `false` to skip the default prose wrapper — useful when\n * embedding inside an existing typed surface (e.g. timeline rows).\n */\n prose?: boolean;\n}\n\nconst DEFAULT_PROSE_CLASS =\n 'prose prose-sm prose-p:my-0.5 prose-p:leading-relaxed prose-headings:my-1 prose-a:text-primary prose-a:no-underline hover:prose-a:underline prose-strong:font-semibold prose-ul:my-0.5 prose-ol:my-0.5 prose-li:my-0.5 max-w-none';\n\nexport function MentionContent<TResource extends string = string>(\n props: MentionContentProps<TResource>,\n): ReactNode {\n const {\n html,\n mentions,\n resources: resourcesProp,\n renderMention,\n sanitizer,\n className,\n prose = true,\n } = props;\n\n const resources = resourcesProp;\n\n const sanitized = sanitizer ? sanitizer(html ?? '') : (html ?? '');\n\n const mentionsById = new Map<string, Mention<TResource>>();\n for (const m of mentions ?? []) mentionsById.set(m.id, m);\n\n const hasMentions = mentionsById.size > 0;\n const segments = hasMentions\n ? splitHtmlByMentions(sanitized)\n : [{ kind: 'html' as const, value: sanitized }];\n\n const renderRef = (mention: Mention<TResource>): ReactNode => {\n if (renderMention) return renderMention(mention);\n const resource = resources?.[mention.kind] as\n | MentionResource<string>\n | undefined;\n return <MentionChip mention={mention} resource={resource} />;\n };\n\n const body = segments.map((segment, index) => {\n if (segment.kind === 'mention') {\n const mention = mentionsById.get(segment.refId);\n if (!mention) {\n return (\n <span\n key={`fallback-${index}`}\n dangerouslySetInnerHTML={{ __html: segment.fallback }}\n />\n );\n }\n return (\n <Fragment key={`ref-${index}-${segment.refId}`}>\n {renderRef(mention)}\n </Fragment>\n );\n }\n // Render the HTML segment directly. The lib's `Text asHTML` escapes\n // via a strict sanitiser — bypass it for trusted editor output.\n // Consumers must pass `sanitizer` for untrusted content.\n return (\n <span\n key={`html-${index}`}\n dangerouslySetInnerHTML={{ __html: segment.value }}\n />\n );\n });\n\n if (!prose) {\n return <>{body}</>;\n }\n\n return (\n <div className={cn('mention-content--component', DEFAULT_PROSE_CLASS, className)}>{body}</div>\n );\n}\n\n/** FC alias for callsites that prefer the `<MentionContent>` element form. */\nexport const MentionContentComponent: FC<MentionContentProps> = (props) => (\n <MentionContent {...props} />\n);\n","/**\n * Default user-facing strings for the `features/mentions` partials.\n *\n * Both `<MentionPicker>` and `<MentionInlineSuggestions>` consume their\n * respective slice; `<MentionInlineSuggestions>` is a strict subset.\n * Consumers wire backend i18n at the call site:\n *\n * <MentionPicker strings={{ empty: t('mentions.empty') }} … />\n */\n\nexport interface MentionPickerStrings {\n\ttitle: string;\n\tsearchPlaceholder: string;\n\tempty: string;\n\tloading: string;\n}\n\nexport const defaultMentionPickerStrings: MentionPickerStrings = {\n\ttitle: 'Insert reference',\n\tsearchPlaceholder: 'Search…',\n\tempty: 'No matches.',\n\tloading: 'Searching…',\n};\n\nexport interface MentionInlineSuggestionsStrings {\n\ttitle: string;\n\tempty: string;\n\tloading: string;\n}\n\nexport const defaultMentionInlineSuggestionsStrings: MentionInlineSuggestionsStrings = {\n\ttitle: 'Insert reference',\n\tempty: 'No matches.',\n\tloading: 'Searching…',\n};\n","/**\n * MentionPicker — popover content for the mention/reference picker.\n *\n * Pure UI: takes the state from `useMentions` (or any equivalent hook)\n * and renders kind tabs + a cmdk search list. Wrapped in `<Popover>` by\n * the consumer:\n *\n * <Popover open={mentions.pickerOpen} onOpenChange={mentions.setPickerOpen}>\n * <PopoverTrigger ... />\n * <MentionPicker ... />\n * </Popover>\n */\nimport { Loader2 } from 'lucide-react';\n\nimport {\n Command,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n} from '@/components/base/command';\nimport { Button } from '@/components/base/buttons';\nimport { PopoverContent } from '@/components/base/popover';\nimport { Text } from '@/components/typography';\nimport { useStrings, type StringsProp } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport {\n defaultMentionPickerStrings,\n type MentionPickerStrings,\n} from '../mentions.strings';\nimport type {\n MentionResource,\n MentionSuggestion,\n} from '../mentions.types';\n\nexport type { MentionPickerStrings };\n\nexport interface MentionPickerProps<TResource extends string = string> {\n open: boolean;\n activeKind: TResource | null;\n setActiveKind: (kind: TResource | null) => void;\n kinds: ReadonlyArray<TResource>;\n resources?: Partial<Record<TResource, MentionResource<TResource>>>;\n query: string;\n setQuery: (query: string) => void;\n suggestions: ReadonlyArray<MentionSuggestion<TResource>>;\n isLoading: boolean;\n onSelect: (suggestion: MentionSuggestion<TResource>) => void;\n strings?: StringsProp<MentionPickerStrings>;\n className?: string;\n}\n\nexport function MentionPicker<TResource extends string = string>({\n open,\n activeKind,\n setActiveKind,\n kinds,\n resources,\n query,\n setQuery,\n suggestions,\n isLoading,\n onSelect,\n strings: stringsProp,\n className,\n}: MentionPickerProps<TResource>) {\n const strings = useStrings(defaultMentionPickerStrings, stringsProp);\n if (!open) return null;\n\n return (\n <PopoverContent\n align=\"start\"\n className={cn('mention-picker--component', 'w-72 overflow-hidden p-0', className)}\n >\n <div className=\"border-b border-border/60 px-3 py-2\">\n <Text\n size=\"xxs\"\n type=\"secondary\"\n weight=\"medium\"\n className=\"uppercase tracking-wide\"\n >\n {strings.title}\n </Text>\n {kinds.length > 1 && (\n <div className=\"mt-2 flex flex-wrap gap-1\">\n {kinds.map((kind) => {\n const cfg = resources?.[kind];\n const Icon = cfg?.icon;\n const active = kind === activeKind;\n return (\n <Button\n key={kind}\n type=\"button\"\n variant={active ? 'primary' : 'secondary'}\n buttonStyle={active ? 'solid' : 'ghost'}\n size=\"xs\"\n onClick={() => setActiveKind(kind)}\n className={cn(\n 'h-auto gap-1 rounded px-1.5 py-0.5 text-xxs font-medium ring-1 ring-inset transition-colors',\n active\n ? 'bg-primary text-primary-foreground ring-primary'\n : 'bg-muted text-muted-foreground ring-border/60 hover:bg-muted/80',\n )}\n >\n {Icon ? <Icon className=\"size-3\" /> : null}\n <span>{cfg?.label ?? String(kind)}</span>\n </Button>\n );\n })}\n </div>\n )}\n </div>\n\n <Command shouldFilter={false}>\n <CommandInput\n placeholder={strings.searchPlaceholder}\n value={query}\n onValueChange={setQuery}\n />\n <CommandList>\n {isLoading ? (\n <div className=\"text-muted-foreground flex items-center justify-center gap-2 py-3\">\n <Loader2 className=\"size-3.5 animate-spin\" aria-hidden />\n <Text tag=\"span\" size=\"xs\" type=\"secondary\">\n {strings.loading}\n </Text>\n </div>\n ) : null}\n <CommandEmpty>{strings.empty}</CommandEmpty>\n <CommandGroup>\n {suggestions.map((suggestion) => {\n const kind = suggestion.kind ?? activeKind ?? '';\n return (\n <CommandItem\n key={`${kind}:${suggestion.id}`}\n value={`${kind}:${suggestion.id}`}\n onSelect={() => onSelect(suggestion)}\n >\n <div className=\"flex min-w-0 flex-1 flex-col leading-tight\">\n <Text tag=\"span\" size=\"xs\" weight=\"medium\" className=\"truncate\">\n {suggestion.label}\n </Text>\n {suggestion.description ? (\n <Text\n tag=\"span\"\n size=\"xxs\"\n type=\"secondary\"\n className=\"mt-0.5 truncate\"\n >\n {suggestion.description}\n </Text>\n ) : null}\n </div>\n </CommandItem>\n );\n })}\n </CommandGroup>\n </CommandList>\n </Command>\n </PopoverContent>\n );\n}\n","/**\n * MentionInlineSuggestions — non-focus-stealing suggestion list.\n *\n * Used in the *inline-trigger* flow (user typed `@` / `#` / …): the\n * editor stays focused while this panel renders below the surface and\n * updates live as the user keeps typing. No popover, no focus trap,\n * no CommandInput — the editor IS the input, we read the needle from\n * the caret context and stream results in.\n *\n * Position is \"anchored to a wrapping element\" — the consumer puts this\n * inside a `relative`-positioned wrapper around the editor and we\n * absolute-position ourselves below it.\n */\nimport { Loader2 } from 'lucide-react';\n\nimport { Button } from '@/components/base/buttons';\nimport { Text } from '@/components/typography';\nimport { useStrings, type StringsProp } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport {\n defaultMentionInlineSuggestionsStrings,\n type MentionInlineSuggestionsStrings,\n} from '../mentions.strings';\nimport type {\n MentionResource,\n MentionSuggestion,\n} from '../mentions.types';\n\nexport type { MentionInlineSuggestionsStrings };\n\nexport interface MentionInlineSuggestionsProps<TResource extends string = string> {\n open: boolean;\n activeKind: TResource | null;\n setActiveKind: (kind: TResource | null) => void;\n kinds: ReadonlyArray<TResource>;\n resources?: Partial<Record<TResource, MentionResource<TResource>>>;\n /** Per-kind suggestion buckets — used to render result counts on tabs. */\n suggestionsByKind?: Readonly<Record<string, ReadonlyArray<MentionSuggestion<TResource>>>>;\n suggestions: ReadonlyArray<MentionSuggestion<TResource>>;\n isLoading: boolean;\n /** Live query the panel echoes in the header; the consumer owns the editor input. */\n query?: string;\n /**\n * Notifies the consumer that the user manually picked a tab, so it\n * can flip the `manualKindOverride` flag on `useMentionsSearch`.\n */\n onManualKindChange?: () => void;\n onSelect: (suggestion: MentionSuggestion<TResource>) => void;\n strings?: StringsProp<MentionInlineSuggestionsStrings>;\n className?: string;\n}\n\nexport function MentionInlineSuggestions<TResource extends string = string>({\n open,\n activeKind,\n setActiveKind,\n kinds,\n resources,\n suggestionsByKind,\n suggestions,\n isLoading,\n query,\n onManualKindChange,\n onSelect,\n strings: stringsProp,\n className,\n}: MentionInlineSuggestionsProps<TResource>) {\n const strings = useStrings(defaultMentionInlineSuggestionsStrings, stringsProp);\n if (!open) return null;\n\n return (\n <div\n // `mousedown.preventDefault` keeps focus in the editor when\n // the user clicks inside the panel — clicks still bubble to\n // the underlying button so selection works normally.\n onMouseDown={(e) => e.preventDefault()}\n className={cn(\n 'mention-inline-suggestions--component',\n 'bg-popover text-popover-foreground absolute left-0 top-full z-40 mt-1 w-80 max-w-[min(theme(spacing.96),100%)]',\n 'border-border/60 rounded-md border shadow-md ring-1 ring-foreground/[0.04]',\n 'overflow-hidden',\n className,\n )}\n >\n <div className=\"border-b border-border/60 px-3 py-2\">\n <div className=\"flex items-baseline justify-between gap-2\">\n <Text\n size=\"xxs\"\n type=\"secondary\"\n weight=\"medium\"\n className=\"uppercase tracking-wide\"\n >\n {strings.title}\n </Text>\n {query ? (\n <Text\n tag=\"span\"\n size=\"xxs\"\n type=\"secondary\"\n className=\"truncate font-mono\"\n >\n “{query}”\n </Text>\n ) : null}\n </div>\n {kinds.length > 1 && (\n <div className=\"mt-2 flex flex-wrap gap-1\">\n {kinds.map((kind) => {\n const cfg = resources?.[kind];\n const Icon = cfg?.icon;\n const active = kind === activeKind;\n const count = suggestionsByKind?.[kind as string]?.length ?? 0;\n return (\n <Button\n key={kind}\n type=\"button\"\n variant={active ? 'primary' : 'secondary'}\n buttonStyle={active ? 'solid' : 'ghost'}\n size=\"xs\"\n onClick={() => {\n setActiveKind(kind);\n onManualKindChange?.();\n }}\n className={cn(\n 'h-auto gap-1 rounded px-1.5 py-0.5 text-xxs font-medium ring-1 ring-inset transition-colors',\n active\n ? 'bg-primary text-primary-foreground ring-primary'\n : count > 0\n ? 'bg-muted text-foreground ring-border/60 hover:bg-muted/80'\n : 'bg-muted/40 text-muted-foreground ring-border/40 hover:bg-muted/60',\n )}\n >\n {Icon ? <Icon className=\"size-3\" /> : null}\n <span>{cfg?.label ?? String(kind)}</span>\n {count > 0 && (\n <span\n className={cn(\n 'tabular-nums',\n active ? 'opacity-90' : 'opacity-70',\n )}\n >\n {count}\n </span>\n )}\n </Button>\n );\n })}\n </div>\n )}\n </div>\n\n <div\n className=\"max-h-72 overflow-y-auto py-1\"\n {...(suggestions.length > 0\n ? { role: 'listbox', 'aria-label': strings.title }\n : {})}\n >\n {isLoading ? (\n <div className=\"text-muted-foreground flex items-center justify-center gap-2 py-3\">\n <Loader2 className=\"size-3.5 animate-spin\" aria-hidden />\n <Text tag=\"span\" size=\"xs\" type=\"secondary\">\n {strings.loading}\n </Text>\n </div>\n ) : null}\n\n {!isLoading && suggestions.length === 0 ? (\n <div className=\"px-3 py-3\">\n <Text size=\"xs\" type=\"secondary\">\n {strings.empty}\n </Text>\n </div>\n ) : null}\n\n {suggestions.map((suggestion) => {\n const kind = suggestion.kind ?? activeKind ?? '';\n return (\n <Button\n key={`${kind}:${suggestion.id}`}\n type=\"button\"\n variant=\"secondary\"\n buttonStyle=\"ghost\"\n size=\"sm\"\n role=\"option\"\n data-ref-id={`${kind}:${suggestion.id}`}\n onClick={() => onSelect(suggestion)}\n className={cn(\n 'h-auto w-full min-w-0 justify-start gap-2 rounded-none px-3 py-1.5 text-left',\n 'hover:bg-muted/60 focus-visible:bg-muted/60 transition-colors',\n )}\n >\n <div className=\"flex min-w-0 flex-1 flex-col leading-tight\">\n <Text\n tag=\"span\"\n size=\"xs\"\n weight=\"medium\"\n className=\"truncate\"\n >\n {suggestion.label}\n </Text>\n {suggestion.description ? (\n <Text\n tag=\"span\"\n size=\"xxs\"\n type=\"secondary\"\n className=\"mt-0.5 truncate\"\n >\n {suggestion.description}\n </Text>\n ) : null}\n </div>\n </Button>\n );\n })}\n </div>\n </div>\n );\n}\n","/**\n * Walk an HTML string and extract `data-ref-id=\"kind:id\"` spans /\n * anchors as a list of `Mention` records. Used by the comment composer\n * to keep its `mentions` state in sync with what's actually present in\n * the editor — when the user backspaces a chip out of the body, the\n * draft's mentions list shrinks too.\n *\n * The output preserves first-occurrence order and deduplicates by id.\n * Caller can merge the resulting Mentions with previously known ones to\n * preserve `href` / `data` payloads that aren't expressible in HTML.\n */\nimport type { Mention } from '../mentions.types';\n\nconst REF_RE =\n /<(?:span|a)\\b[^>]*?data-ref-id\\s*=\\s*\"([^\"]+)\"[^>]*?>([\\s\\S]*?)<\\/(?:span|a)>/gi;\nconst KIND_ATTR_RE = /data-ref-kind\\s*=\\s*\"([^\"]+)\"/i;\n\nexport function parseMentionsFromHtml<TKind extends string = string>(\n html: string,\n): Array<Mention<TKind>> {\n const out: Mention<TKind>[] = [];\n if (!html) return out;\n\n const seen = new Set<string>();\n let match: RegExpExecArray | null;\n REF_RE.lastIndex = 0;\n\n while ((match = REF_RE.exec(html)) !== null) {\n const [tagText, id, inner] = match;\n if (seen.has(id)) continue;\n seen.add(id);\n\n const kindMatch = tagText.match(KIND_ATTR_RE);\n const kind = (kindMatch?.[1] ?? id.split(':')[0] ?? '') as TKind;\n const label = (inner ?? '')\n .replace(/<[^>]*>/g, '')\n .replace(/ /g, ' ')\n .replace(/^[@#$&%!~]\\s*/, '')\n .trim();\n\n out.push({ id, kind, label });\n }\n\n return out;\n}\n"],"mappings":"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"}
|