admin-ui-starter-kit 0.1.4 → 0.4.3
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 +276 -2
- package/.agents/skills/component-library-rules/SKILL.md +15 -9
- package/.agents/skills/component-library-rules/references/audit-followups.md +4 -4
- package/.agents/skills/component-library-rules/references/base-wrapper.md +24 -4
- package/.agents/skills/component-library-rules/references/components/INDEX.json +107 -93
- package/.agents/skills/component-library-rules/references/components/INDEX.md +21 -7
- package/.agents/skills/component-library-rules/references/components/base__accordion.md +78 -9
- package/.agents/skills/component-library-rules/references/components/base__alert.md +156 -0
- package/.agents/skills/component-library-rules/references/components/base__badge.md +8 -1
- package/.agents/skills/component-library-rules/references/components/base__buttons.md +121 -1
- package/.agents/skills/component-library-rules/references/components/base__cards.md +101 -4
- package/.agents/skills/component-library-rules/references/components/base__carousel.md +524 -0
- package/.agents/skills/component-library-rules/references/components/base__chart.md +391 -0
- package/.agents/skills/component-library-rules/references/components/base__combobox.md +212 -3
- package/.agents/skills/component-library-rules/references/components/base__copyable.md +49 -1
- package/.agents/skills/component-library-rules/references/components/base__currency.md +72 -1
- package/.agents/skills/component-library-rules/references/components/base__date-pickers.md +84 -50
- package/.agents/skills/component-library-rules/references/components/base__display.md +186 -39
- package/.agents/skills/component-library-rules/references/components/base__empty-state.md +67 -1
- package/.agents/skills/component-library-rules/references/components/base__event-calendar.md +56 -1
- package/.agents/skills/component-library-rules/references/components/base__forms.md +329 -2
- package/.agents/skills/component-library-rules/references/components/base__frame.md +235 -0
- package/.agents/skills/component-library-rules/references/components/base__item.md +47 -1
- package/.agents/skills/component-library-rules/references/components/base__map.md +37 -1
- package/.agents/skills/component-library-rules/references/components/base__metadata-list.md +99 -7
- package/.agents/skills/component-library-rules/references/components/base__navigation.md +71 -1
- package/.agents/skills/component-library-rules/references/components/base__spinner.md +44 -3
- package/.agents/skills/component-library-rules/references/components/base__table.md +108 -14
- package/.agents/skills/component-library-rules/references/components/base__typography.md +122 -1
- package/.agents/skills/component-library-rules/references/components/base__upload-tray.md +43 -1
- package/.agents/skills/component-library-rules/references/components/common__brand.md +21 -25
- package/.agents/skills/component-library-rules/references/components/composed__admin.md +8 -1
- package/.agents/skills/component-library-rules/references/components/composed__ai-elements.md +17 -2
- package/.agents/skills/component-library-rules/references/components/composed__ai-new.md +8 -1
- package/.agents/skills/component-library-rules/references/components/composed__ai.md +8 -1
- package/.agents/skills/component-library-rules/references/components/composed__api-key-list.md +8 -1
- package/.agents/skills/component-library-rules/references/components/composed__commerce-extras.md +87 -16
- package/.agents/skills/component-library-rules/references/components/composed__commerce.md +8 -1
- package/.agents/skills/component-library-rules/references/components/composed__contact-card.md +8 -1
- package/.agents/skills/component-library-rules/references/components/composed__course-card.md +90 -105
- package/.agents/skills/component-library-rules/references/components/composed__dark-surfaces.md +10 -3
- package/.agents/skills/component-library-rules/references/components/composed__dense-info.md +11 -4
- package/.agents/skills/component-library-rules/references/components/composed__feature-announcement.md +8 -1
- package/.agents/skills/component-library-rules/references/components/composed__giftcard-cards.md +8 -1
- package/.agents/skills/component-library-rules/references/components/composed__gradient-card.md +8 -1
- package/.agents/skills/component-library-rules/references/components/composed__invoice-header.md +8 -1
- package/.agents/skills/component-library-rules/references/components/composed__invoice-items.md +8 -1
- package/.agents/skills/component-library-rules/references/components/composed__invoice-mini.md +9 -2
- package/.agents/skills/component-library-rules/references/components/composed__invoice-table.md +8 -1
- package/.agents/skills/component-library-rules/references/components/composed__navigation-extras.md +8 -1
- package/.agents/skills/component-library-rules/references/components/composed__navigation.md +12 -5
- package/.agents/skills/component-library-rules/references/components/composed__onboarding-checklist.md +8 -1
- package/.agents/skills/component-library-rules/references/components/composed__timelines.md +8 -1
- package/.agents/skills/component-library-rules/references/components/composed__vendor-profile.md +8 -1
- package/.agents/skills/component-library-rules/references/components/features__activities.md +60 -19
- package/.agents/skills/component-library-rules/references/components/features__ai-chat.md +134 -1
- package/.agents/skills/component-library-rules/references/components/features__card.md +239 -0
- package/.agents/skills/component-library-rules/references/components/features__comments.md +36 -1
- package/.agents/skills/component-library-rules/references/components/features__enhanced-activities.md +19 -4
- package/.agents/skills/component-library-rules/references/components/features__event-log.md +8 -1
- package/.agents/skills/component-library-rules/references/components/features__filters.md +21 -1
- package/.agents/skills/component-library-rules/references/components/features__global-search.md +173 -2
- package/.agents/skills/component-library-rules/references/components/features__kanban.md +99 -81
- package/.agents/skills/component-library-rules/references/components/features__media-library.md +796 -0
- package/.agents/skills/component-library-rules/references/components/features__mentions.md +187 -0
- package/.agents/skills/component-library-rules/references/components/features__metrics-analytics-bar.md +8 -1
- package/.agents/skills/component-library-rules/references/components/features__metrics-analytics-cards.md +8 -1
- package/.agents/skills/component-library-rules/references/components/features__metrics-comparison.md +8 -1
- package/.agents/skills/component-library-rules/references/components/features__metrics-heatmap.md +10 -3
- package/.agents/skills/component-library-rules/references/components/features__metrics-inline-badge.md +8 -1
- package/.agents/skills/component-library-rules/references/components/features__metrics-kpi-row.md +8 -1
- package/.agents/skills/component-library-rules/references/components/features__metrics-micro-grid.md +8 -1
- package/.agents/skills/component-library-rules/references/components/features__metrics-overview.md +8 -1
- package/.agents/skills/component-library-rules/references/components/features__metrics-stat-cards.md +8 -1
- package/.agents/skills/component-library-rules/references/components/features__overlays.md +48 -16
- package/.agents/skills/component-library-rules/references/components/features__products.md +491 -0
- package/.agents/skills/component-library-rules/references/components/features__rich-text-editor.md +8 -1
- package/.agents/skills/component-library-rules/references/components/features__schema-form.md +375 -0
- package/.agents/skills/component-library-rules/references/components/features__suggestions.md +177 -0
- package/.agents/skills/component-library-rules/references/components/features__sync.md +155 -0
- package/.agents/skills/component-library-rules/references/components/layout__layout-app-shell.md +139 -24
- package/.agents/skills/component-library-rules/references/components/layout__layout-auth.md +826 -0
- package/.agents/skills/component-library-rules/references/components/layout__layout-containers.md +15 -3
- package/.agents/skills/component-library-rules/references/components/layout__layout-header.md +8 -1
- package/.agents/skills/component-library-rules/references/components/layout__layout-page.md +8 -1
- package/.agents/skills/component-library-rules/references/components/layout__layout-sidebar.md +9 -2
- package/.agents/skills/component-library-rules/references/components/layout__layout-users.md +51 -30
- package/.agents/skills/component-library-rules/references/components/layout__layout-workspace.md +234 -0
- package/.agents/skills/component-library-rules/references/components/ui__alert.md +6 -2
- package/.agents/skills/component-library-rules/references/components/ui__avatar.md +2 -2
- package/.agents/skills/component-library-rules/references/components/ui__breadcrumb.md +1 -1
- package/.agents/skills/component-library-rules/references/components/ui__button.md +1 -1
- package/.agents/skills/component-library-rules/references/components/ui__calendar.md +1 -1
- package/.agents/skills/component-library-rules/references/components/ui__collapsible.md +1 -1
- package/.agents/skills/component-library-rules/references/components/ui__empty-item.md +1 -1
- package/.agents/skills/component-library-rules/references/components/ui__input-group.md +1 -1
- package/.agents/skills/component-library-rules/references/components/ui__inputs.md +118 -19
- package/.agents/skills/component-library-rules/references/components/ui__layout-primitives.md +71 -0
- package/.agents/skills/component-library-rules/references/components/ui__menus.md +126 -44
- package/.agents/skills/component-library-rules/references/components/ui__overlays.md +118 -43
- package/.agents/skills/component-library-rules/references/components/ui__pagination.md +1 -1
- package/.agents/skills/component-library-rules/references/components/ui__progress.md +1 -1
- package/.agents/skills/component-library-rules/references/components/ui__scroll-area.md +1 -1
- package/.agents/skills/component-library-rules/references/components/ui__separator.md +1 -1
- package/.agents/skills/component-library-rules/references/components/ui__skeleton.md +1 -1
- package/.agents/skills/component-library-rules/references/components/ui__sonner.md +1 -1
- package/.agents/skills/component-library-rules/references/components/ui__spinner.md +2 -2
- package/.agents/skills/component-library-rules/references/components/ui__tabs.md +1 -1
- package/.agents/skills/component-library-rules/references/components/ui__toggles-group.md +1 -1
- package/.agents/skills/component-library-rules/references/components/ui__toggles.md +1 -1
- package/.agents/skills/component-library-rules/references/components/ui__ui-badge.md +1 -1
- package/.agents/skills/component-library-rules/references/components/ui__ui-card.md +1 -1
- package/.agents/skills/component-library-rules/references/components/ui__ui-table.md +1 -1
- package/.agents/skills/component-library-rules/references/visual-eval.md +1 -1
- package/.agents/skills/component-quality-pass/SKILL.md +47 -0
- package/.agents/skills/component-quality-pass/agents/openai.yaml +4 -0
- package/.agents/skills/component-quality-pass/references/audit-workflow.md +133 -0
- package/.agents/skills/component-quality-pass/scripts/list-preview-routes.mjs +71 -0
- package/.agents/skills/component-quality-pass/scripts/scan-quality-smells.mjs +213 -0
- package/AGENTS.md +7 -4
- package/COMPONENT_SELECTION.md +51 -5
- package/INTEGRATION.md +48 -2
- package/MIGRATION.md +17 -3
- package/PUBLISHING.md +4 -1
- package/README.md +84 -11
- package/dist/_shared/accordion-BWU7zxlO.cjs +2 -0
- package/dist/_shared/accordion-BWU7zxlO.cjs.map +1 -0
- package/dist/_shared/accordion-DTYKGqWD.js +130 -0
- package/dist/_shared/accordion-DTYKGqWD.js.map +1 -0
- package/dist/_shared/action-menu-BoQnI2UF.cjs +2 -0
- package/dist/_shared/action-menu-BoQnI2UF.cjs.map +1 -0
- package/dist/_shared/action-menu-uyg1Phsn.js +96 -0
- package/dist/_shared/action-menu-uyg1Phsn.js.map +1 -0
- package/dist/_shared/ai-artifact-CY1Jf9gM.cjs +3 -0
- package/dist/_shared/ai-artifact-CY1Jf9gM.cjs.map +1 -0
- package/dist/_shared/ai-artifact-DdlK_l56.js +1099 -0
- package/dist/_shared/ai-artifact-DdlK_l56.js.map +1 -0
- package/dist/_shared/alert-CuIIKJC-.cjs +2 -0
- package/dist/_shared/alert-CuIIKJC-.cjs.map +1 -0
- package/dist/_shared/alert-k60OnTtb.js +81 -0
- package/dist/_shared/alert-k60OnTtb.js.map +1 -0
- package/dist/_shared/app-shell-DqDnnKT4.cjs +2 -0
- package/dist/_shared/app-shell-DqDnnKT4.cjs.map +1 -0
- package/dist/_shared/app-shell-w5h0vEKg.js +69 -0
- package/dist/_shared/app-shell-w5h0vEKg.js.map +1 -0
- package/dist/_shared/auth-CDjZFJxy.cjs +2 -0
- package/dist/_shared/auth-CDjZFJxy.cjs.map +1 -0
- package/dist/_shared/auth-_udUdWtn.js +643 -0
- package/dist/_shared/auth-_udUdWtn.js.map +1 -0
- package/dist/_shared/badge--o9wFHB_.cjs +2 -0
- package/dist/_shared/badge--o9wFHB_.cjs.map +1 -0
- package/dist/_shared/badge-yGlx9trX.js +108 -0
- package/dist/_shared/badge-yGlx9trX.js.map +1 -0
- package/dist/_shared/button-C1qc97U1.cjs +2 -0
- package/dist/_shared/button-C1qc97U1.cjs.map +1 -0
- package/dist/_shared/button-SuocMQFT.js +173 -0
- package/dist/_shared/button-SuocMQFT.js.map +1 -0
- package/dist/_shared/buttons-9YBwevkP.cjs +2 -0
- package/dist/_shared/buttons-9YBwevkP.cjs.map +1 -0
- package/dist/_shared/buttons-BR4BGVYf.js +143 -0
- package/dist/_shared/buttons-BR4BGVYf.js.map +1 -0
- package/dist/_shared/card-radio-group-Bna2uZs1.cjs +2 -0
- package/dist/_shared/card-radio-group-Bna2uZs1.cjs.map +1 -0
- package/dist/_shared/card-radio-group-D_CY1HRy.js +158 -0
- package/dist/_shared/card-radio-group-D_CY1HRy.js.map +1 -0
- package/dist/_shared/checkbox-CTqqawIT.js +22 -0
- package/dist/_shared/checkbox-CTqqawIT.js.map +1 -0
- package/dist/_shared/checkbox-D1n-nfLP.cjs +2 -0
- package/dist/_shared/checkbox-D1n-nfLP.cjs.map +1 -0
- package/dist/_shared/combobox-CpSmiPV8.cjs +2 -0
- package/dist/_shared/combobox-CpSmiPV8.cjs.map +1 -0
- package/dist/_shared/combobox-D01JwyFZ.js +810 -0
- package/dist/_shared/combobox-D01JwyFZ.js.map +1 -0
- package/dist/_shared/comments-D9velZAW.js +952 -0
- package/dist/_shared/comments-D9velZAW.js.map +1 -0
- package/dist/_shared/comments-DyUAKSQu.cjs +2 -0
- package/dist/_shared/comments-DyUAKSQu.cjs.map +1 -0
- package/dist/_shared/copyable-Bx4J7fuT.cjs +2 -0
- package/dist/_shared/copyable-Bx4J7fuT.cjs.map +1 -0
- package/dist/_shared/copyable-cfF4gZoT.js +38 -0
- package/dist/_shared/copyable-cfF4gZoT.js.map +1 -0
- package/dist/_shared/date-picker-BnsvBFOZ.cjs +2 -0
- package/dist/_shared/date-picker-BnsvBFOZ.cjs.map +1 -0
- package/dist/_shared/date-picker-TMcjGO26.js +1361 -0
- package/dist/_shared/date-picker-TMcjGO26.js.map +1 -0
- package/dist/_shared/date-pickers-BI4xLjHR.js +330 -0
- package/dist/_shared/date-pickers-BI4xLjHR.js.map +1 -0
- package/dist/_shared/date-pickers-BhaUK5S2.cjs +2 -0
- package/dist/_shared/date-pickers-BhaUK5S2.cjs.map +1 -0
- package/dist/_shared/display-C4n0uuxl.js +1154 -0
- package/dist/_shared/display-C4n0uuxl.js.map +1 -0
- package/dist/_shared/display-oDW0O9yB.cjs +2 -0
- package/dist/_shared/display-oDW0O9yB.cjs.map +1 -0
- package/dist/_shared/form-field-B7taMVbC.js +329 -0
- package/dist/_shared/form-field-B7taMVbC.js.map +1 -0
- package/dist/_shared/form-field-rMGPvHFK.cjs +2 -0
- package/dist/_shared/form-field-rMGPvHFK.cjs.map +1 -0
- package/dist/_shared/form-sizing-D74IS9KG.js.map +1 -1
- package/dist/_shared/form-sizing-aVwVuF-w.cjs.map +1 -1
- package/dist/_shared/forms-CwJci54_.js +3430 -0
- package/dist/_shared/forms-CwJci54_.js.map +1 -0
- package/dist/_shared/forms-E3JkTgcC.cjs +2 -0
- package/dist/_shared/forms-E3JkTgcC.cjs.map +1 -0
- package/dist/_shared/header-CyBTcM-L.js +360 -0
- package/dist/_shared/header-CyBTcM-L.js.map +1 -0
- package/dist/_shared/header-kwvkesfq.cjs +2 -0
- package/dist/_shared/header-kwvkesfq.cjs.map +1 -0
- package/dist/_shared/heading-0DYCOrgC.cjs +2 -0
- package/dist/_shared/heading-0DYCOrgC.cjs.map +1 -0
- package/dist/_shared/heading-HeP06nXG.js +107 -0
- package/dist/_shared/heading-HeP06nXG.js.map +1 -0
- package/dist/_shared/hooks-MW0UTO3q.cjs +2 -0
- package/dist/_shared/hooks-MW0UTO3q.cjs.map +1 -0
- package/dist/_shared/hooks-ZiPIvs0_.js +118 -0
- package/dist/_shared/hooks-ZiPIvs0_.js.map +1 -0
- package/dist/_shared/input-C7t-RHYq.js +182 -0
- package/dist/_shared/input-C7t-RHYq.js.map +1 -0
- package/dist/_shared/input-COMcb1WY.cjs +2 -0
- package/dist/_shared/input-COMcb1WY.cjs.map +1 -0
- package/dist/_shared/item-DAjqQhhj.js +225 -0
- package/dist/_shared/item-DAjqQhhj.js.map +1 -0
- package/dist/_shared/item-DoXXYgPm.cjs +2 -0
- package/dist/_shared/item-DoXXYgPm.cjs.map +1 -0
- package/dist/_shared/mentions-Br-EP9tq.js +506 -0
- package/dist/_shared/mentions-Br-EP9tq.js.map +1 -0
- package/dist/_shared/mentions-DNTsRHJl.cjs +2 -0
- package/dist/_shared/mentions-DNTsRHJl.cjs.map +1 -0
- package/dist/_shared/metadata-CPSQGPJh.cjs +2 -0
- package/dist/_shared/metadata-CPSQGPJh.cjs.map +1 -0
- package/dist/_shared/metadata-qTNAOM7E.js +235 -0
- package/dist/_shared/metadata-qTNAOM7E.js.map +1 -0
- package/dist/_shared/money-display-CFSMUtxS.cjs +2 -0
- package/dist/_shared/money-display-CFSMUtxS.cjs.map +1 -0
- package/dist/_shared/money-display-D4Z3P3f_.js +198 -0
- package/dist/_shared/money-display-D4Z3P3f_.js.map +1 -0
- package/dist/_shared/navigation-HnnA6uSV.js +419 -0
- package/dist/_shared/navigation-HnnA6uSV.js.map +1 -0
- package/dist/_shared/navigation-J2g0Tw9D.cjs +2 -0
- package/dist/_shared/navigation-J2g0Tw9D.cjs.map +1 -0
- package/dist/_shared/overlays-CIeniDjj.js +639 -0
- package/dist/_shared/overlays-CIeniDjj.js.map +1 -0
- package/dist/_shared/overlays-Xc_F_Y-E.cjs +2 -0
- package/dist/_shared/overlays-Xc_F_Y-E.cjs.map +1 -0
- package/dist/_shared/page-BFV-KE8H.js +262 -0
- package/dist/_shared/page-BFV-KE8H.js.map +1 -0
- package/dist/_shared/page-UJfWfw2R.cjs +2 -0
- package/dist/_shared/page-UJfWfw2R.cjs.map +1 -0
- package/dist/_shared/popover-menu-Fz-bvWJF.cjs +2 -0
- package/dist/_shared/popover-menu-Fz-bvWJF.cjs.map +1 -0
- package/dist/_shared/popover-menu-bKQatoYF.js +93 -0
- package/dist/_shared/popover-menu-bKQatoYF.js.map +1 -0
- package/dist/_shared/rich-text-editor-B6WKHUKC.js +620 -0
- package/dist/_shared/rich-text-editor-B6WKHUKC.js.map +1 -0
- package/dist/_shared/rich-text-editor-Dm-6r_xe.cjs +2 -0
- package/dist/_shared/rich-text-editor-Dm-6r_xe.cjs.map +1 -0
- package/dist/_shared/sidebar-B_L_dnAe.cjs +2 -0
- package/dist/_shared/sidebar-B_L_dnAe.cjs.map +1 -0
- package/dist/_shared/sidebar-C5DApiDy.js +389 -0
- package/dist/_shared/sidebar-C5DApiDy.js.map +1 -0
- package/dist/_shared/sidebar-CIlGkVbF.js +538 -0
- package/dist/_shared/sidebar-CIlGkVbF.js.map +1 -0
- package/dist/_shared/sidebar-D3sK9otF.cjs +2 -0
- package/dist/_shared/sidebar-D3sK9otF.cjs.map +1 -0
- package/dist/_shared/smart-card-DYZGY_Su.js +361 -0
- package/dist/_shared/smart-card-DYZGY_Su.js.map +1 -0
- package/dist/_shared/smart-card-Df80VF8x.cjs +2 -0
- package/dist/_shared/smart-card-Df80VF8x.cjs.map +1 -0
- package/dist/_shared/spinner-BfAbXTQ7.js +67 -0
- package/dist/_shared/spinner-BfAbXTQ7.js.map +1 -0
- package/dist/_shared/spinner-DWn3x9Tl.cjs +2 -0
- package/dist/_shared/spinner-DWn3x9Tl.cjs.map +1 -0
- package/dist/_shared/table-CBKDA7ZE.js +1189 -0
- package/dist/_shared/table-CBKDA7ZE.js.map +1 -0
- package/dist/_shared/table-CJoxRCWy.cjs +2 -0
- package/dist/_shared/table-CJoxRCWy.cjs.map +1 -0
- package/dist/_shared/textarea-C4SOrh0z.cjs +2 -0
- package/dist/_shared/textarea-C4SOrh0z.cjs.map +1 -0
- package/dist/_shared/textarea-CsMkelmp.js +119 -0
- package/dist/_shared/textarea-CsMkelmp.js.map +1 -0
- package/dist/_shared/typography-Bzsl7aTu.cjs +2 -0
- package/dist/_shared/typography-Bzsl7aTu.cjs.map +1 -0
- package/dist/_shared/typography-CdxyWB1T.js +102 -0
- package/dist/_shared/typography-CdxyWB1T.js.map +1 -0
- package/dist/_shared/ui-provider-BF4m2cR0.cjs +2 -0
- package/dist/_shared/ui-provider-BF4m2cR0.cjs.map +1 -0
- package/dist/_shared/ui-provider-C8Ot88lS.js +85 -0
- package/dist/_shared/ui-provider-C8Ot88lS.js.map +1 -0
- package/dist/_shared/workspace-CTjIGCE0.cjs +2 -0
- package/dist/_shared/workspace-CTjIGCE0.cjs.map +1 -0
- package/dist/_shared/workspace-WgJgiSUA.js +357 -0
- package/dist/_shared/workspace-WgJgiSUA.js.map +1 -0
- package/dist/components/base/accordion/index.cjs +1 -1
- package/dist/components/base/accordion/index.js +1 -1
- package/dist/components/base/badge/index.cjs +1 -1
- package/dist/components/base/badge/index.js +1 -1
- package/dist/components/base/buttons/base-button.d.ts.map +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.d.ts +1 -1
- package/dist/components/base/cards/index.d.ts.map +1 -1
- package/dist/components/base/cards/index.js +1 -1
- package/dist/components/base/cards/smart-card.d.ts.map +1 -1
- package/dist/components/base/cards/smart-card.types.d.ts +2 -1
- package/dist/components/base/cards/smart-card.types.d.ts.map +1 -1
- package/dist/components/base/carousel/carousel.d.ts +66 -0
- package/dist/components/base/carousel/carousel.d.ts.map +1 -0
- package/dist/components/base/carousel/carousel.strings.d.ts +7 -0
- package/dist/components/base/carousel/carousel.strings.d.ts.map +1 -0
- package/dist/components/base/carousel/index.cjs +2 -0
- package/dist/components/base/carousel/index.cjs.map +1 -0
- package/dist/components/base/carousel/index.d.ts +3 -0
- package/dist/components/base/carousel/index.d.ts.map +1 -0
- package/dist/components/base/carousel/index.js +239 -0
- package/dist/components/base/carousel/index.js.map +1 -0
- package/dist/components/base/combobox/enhanced-combobox.d.ts +2 -2
- package/dist/components/base/combobox/enhanced-combobox.d.ts.map +1 -1
- package/dist/components/base/combobox/hooks/use-debounced-search.d.ts.map +1 -1
- package/dist/components/base/combobox/index.cjs +1 -1
- package/dist/components/base/combobox/index.js +1 -1
- package/dist/components/base/combobox/types.d.ts +4 -1
- package/dist/components/base/combobox/types.d.ts.map +1 -1
- package/dist/components/base/copyable/index.cjs +1 -1
- package/dist/components/base/copyable/index.js +1 -1
- package/dist/components/base/currency/index.cjs +1 -1
- package/dist/components/base/currency/index.js +1 -1
- package/dist/components/base/date-pickers/index.cjs +1 -1
- package/dist/components/base/date-pickers/index.js +2 -2
- package/dist/components/base/display/alert.d.ts +13 -1
- package/dist/components/base/display/alert.d.ts.map +1 -1
- package/dist/components/base/display/chart.cjs +8 -0
- package/dist/components/base/display/chart.cjs.map +1 -0
- package/dist/components/base/display/chart.d.ts +71 -1
- package/dist/components/base/display/chart.d.ts.map +1 -1
- package/dist/components/base/display/chart.js +144 -0
- package/dist/components/base/display/chart.js.map +1 -0
- package/dist/components/base/display/date-block.d.ts +1 -1
- package/dist/components/base/display/date-block.d.ts.map +1 -1
- package/dist/components/base/display/index.cjs +1 -1
- package/dist/components/base/display/index.d.ts +1 -2
- package/dist/components/base/display/index.d.ts.map +1 -1
- package/dist/components/base/display/index.js +10 -10
- package/dist/components/base/display/metadata/index.cjs +1 -1
- package/dist/components/base/display/metadata/index.js +1 -1
- package/dist/components/base/display/notification-banner.d.ts.map +1 -1
- package/dist/components/base/display/stacked-avatars.d.ts +6 -5
- package/dist/components/base/display/stacked-avatars.d.ts.map +1 -1
- package/dist/components/base/event-calendar/event-calendar-event-badge.d.ts.map +1 -1
- package/dist/components/base/event-calendar/event-calendar-event-card.d.ts.map +1 -1
- package/dist/components/base/event-calendar/event-calendar-header.d.ts.map +1 -1
- package/dist/components/base/event-calendar/event-calendar-legend.d.ts.map +1 -1
- package/dist/components/base/event-calendar/event-calendar.d.ts.map +1 -1
- package/dist/components/base/event-calendar/event-calendar.types.d.ts +3 -2
- package/dist/components/base/event-calendar/event-calendar.types.d.ts.map +1 -1
- package/dist/components/base/event-calendar/index.cjs +1 -1
- package/dist/components/base/event-calendar/index.cjs.map +1 -1
- package/dist/components/base/event-calendar/index.js +196 -205
- package/dist/components/base/event-calendar/index.js.map +1 -1
- package/dist/components/base/forms/fields/currency-input.d.ts.map +1 -1
- package/dist/components/base/forms/fields/decimal-input.d.ts.map +1 -1
- package/dist/components/base/forms/fields/index.d.ts +2 -0
- package/dist/components/base/forms/fields/index.d.ts.map +1 -1
- package/dist/components/base/forms/fields/password-input.d.ts +21 -0
- package/dist/components/base/forms/fields/password-input.d.ts.map +1 -0
- package/dist/components/base/forms/fields/select.d.ts +2 -0
- package/dist/components/base/forms/fields/select.d.ts.map +1 -1
- package/dist/components/base/forms/fields/slug-field.d.ts +16 -0
- package/dist/components/base/forms/fields/slug-field.d.ts.map +1 -0
- package/dist/components/base/forms/fields/switch-card.d.ts.map +1 -1
- package/dist/components/base/forms/index.cjs +1 -1
- package/dist/components/base/forms/index.js +8 -7
- package/dist/components/base/frame/frame.d.ts +24 -0
- package/dist/components/base/frame/frame.d.ts.map +1 -0
- package/dist/components/base/frame/index.cjs +2 -0
- package/dist/components/base/frame/index.cjs.map +1 -0
- package/dist/components/base/frame/index.d.ts +2 -0
- package/dist/components/base/frame/index.d.ts.map +1 -0
- package/dist/components/base/frame/index.js +164 -0
- package/dist/components/base/frame/index.js.map +1 -0
- package/dist/components/base/index.d.ts.map +1 -1
- package/dist/components/base/item/index.cjs +1 -1
- package/dist/components/base/item/index.js +1 -1
- package/dist/components/base/item/item.d.ts.map +1 -1
- package/dist/components/base/map/index.cjs +1 -1
- package/dist/components/base/map/index.cjs.map +1 -1
- package/dist/components/base/map/index.js +1 -1
- package/dist/components/base/navigation/index.cjs +1 -1
- package/dist/components/base/navigation/index.js +2 -2
- package/dist/components/base/popover-menu/index.cjs +1 -1
- package/dist/components/base/popover-menu/index.js +1 -1
- package/dist/components/base/popover-menu/popover-menu.d.ts +2 -1
- package/dist/components/base/popover-menu/popover-menu.d.ts.map +1 -1
- package/dist/components/base/sidebar/index.cjs +1 -1
- package/dist/components/base/sidebar/index.js +2 -2
- package/dist/components/base/sidebar/sidebar.d.ts +5 -3
- package/dist/components/base/sidebar/sidebar.d.ts.map +1 -1
- package/dist/components/base/spinner/index.cjs +1 -1
- package/dist/components/base/spinner/index.js +1 -1
- package/dist/components/base/table/data-table.d.ts.map +1 -1
- package/dist/components/base/table/index.cjs +1 -2
- package/dist/components/base/table/index.js +2 -1189
- package/dist/components/base/table/table-body.d.ts.map +1 -1
- package/dist/components/base/table/table-header.d.ts.map +1 -1
- package/dist/components/base/table/table-helpers.d.ts.map +1 -1
- package/dist/components/base/table/table.types.d.ts +6 -1
- package/dist/components/base/table/table.types.d.ts.map +1 -1
- package/dist/components/base/toaster/index.cjs +1 -1
- package/dist/components/base/toaster/index.js +1 -1
- package/dist/components/composed/admin/api-key-list/api-key-list.d.ts.map +1 -1
- package/dist/components/composed/admin/index.cjs +1 -1
- package/dist/components/composed/admin/index.cjs.map +1 -1
- package/dist/components/composed/admin/index.js +18 -13
- package/dist/components/composed/admin/index.js.map +1 -1
- package/dist/components/composed/admin/role-permission/role-permission.d.ts.map +1 -1
- package/dist/components/composed/ai/ai-attachment/ai-attachment.d.ts.map +1 -1
- package/dist/components/composed/ai/ai-citation/ai-citation.d.ts.map +1 -1
- package/dist/components/composed/ai/ai-code-block/ai-code-block.d.ts.map +1 -1
- package/dist/components/composed/ai/ai-file-tree/ai-file-tree.d.ts.map +1 -1
- package/dist/components/composed/ai/ai-inline-citation/ai-inline-citation.d.ts.map +1 -1
- package/dist/components/composed/ai/ai-prompt-suggestions/ai-prompt-suggestions.d.ts.map +1 -1
- package/dist/components/composed/ai/ai-reasoning/ai-reasoning.d.ts.map +1 -1
- package/dist/components/composed/ai/ai-sources/ai-sources.d.ts.map +1 -1
- package/dist/components/composed/ai/ai-task/ai-task.d.ts.map +1 -1
- package/dist/components/composed/ai/ai-task/types.d.ts +2 -0
- package/dist/components/composed/ai/ai-task/types.d.ts.map +1 -1
- package/dist/components/composed/ai/ai-tool-call/ai-tool-call.d.ts.map +1 -1
- package/dist/components/composed/ai/index.cjs +1 -1
- package/dist/components/composed/ai/index.cjs.map +1 -1
- package/dist/components/composed/ai/index.js +87 -83
- package/dist/components/composed/ai/index.js.map +1 -1
- package/dist/components/composed/analytics/chart-card/chart-card.d.ts +22 -0
- package/dist/components/composed/analytics/chart-card/chart-card.d.ts.map +1 -0
- package/dist/components/composed/analytics/chart-card/index.d.ts +2 -0
- package/dist/components/composed/analytics/chart-card/index.d.ts.map +1 -0
- package/dist/components/composed/analytics/format-metric-value.d.ts.map +1 -1
- package/dist/components/composed/analytics/index.cjs +1 -1
- package/dist/components/composed/analytics/index.cjs.map +1 -1
- package/dist/components/composed/analytics/index.d.ts +2 -0
- package/dist/components/composed/analytics/index.d.ts.map +1 -1
- package/dist/components/composed/analytics/index.js +369 -377
- package/dist/components/composed/analytics/index.js.map +1 -1
- package/dist/components/composed/analytics/metric-comparison/metric-comparison.d.ts +2 -1
- package/dist/components/composed/analytics/metric-comparison/metric-comparison.d.ts.map +1 -1
- package/dist/components/composed/analytics/metric-gradient/metric-gradient.d.ts.map +1 -1
- package/dist/components/composed/cards/contact-card/contact-card.d.ts.map +1 -1
- package/dist/components/composed/cards/course-card/course-card.d.ts.map +1 -1
- package/dist/components/composed/cards/giftcard-card/partials/giftcard-compact.d.ts.map +1 -1
- package/dist/components/composed/cards/giftcard-card/partials/giftcard-dark.d.ts.map +1 -1
- package/dist/components/composed/cards/giftcard-card/partials/giftcard-full.d.ts.map +1 -1
- package/dist/components/composed/cards/giftcard-card/partials/giftcard-illustrated.d.ts.map +1 -1
- package/dist/components/composed/cards/giftcard-card/partials/giftcard-minimal.d.ts.map +1 -1
- package/dist/components/composed/cards/index.cjs +1 -1
- package/dist/components/composed/cards/index.cjs.map +1 -1
- package/dist/components/composed/cards/index.js +586 -606
- package/dist/components/composed/cards/index.js.map +1 -1
- package/dist/components/composed/cards/vendor-profile/vendor-profile.d.ts.map +1 -1
- package/dist/components/composed/commerce/cart-summary/cart-summary.d.ts.map +1 -1
- package/dist/components/composed/commerce/cart-summary/types.d.ts +8 -1
- package/dist/components/composed/commerce/cart-summary/types.d.ts.map +1 -1
- package/dist/components/composed/commerce/coupon-input/coupon-input.d.ts.map +1 -1
- package/dist/components/composed/commerce/index.cjs +1 -1
- package/dist/components/composed/commerce/index.cjs.map +1 -1
- package/dist/components/composed/commerce/index.js +580 -486
- package/dist/components/composed/commerce/index.js.map +1 -1
- package/dist/components/composed/commerce/order-status/order-status.d.ts.map +1 -1
- package/dist/components/composed/commerce/order-status/types.d.ts +2 -0
- package/dist/components/composed/commerce/order-status/types.d.ts.map +1 -1
- package/dist/components/composed/commerce/payment-method/payment-method.d.ts.map +1 -1
- package/dist/components/composed/commerce/voucher-entry/types.d.ts +3 -0
- package/dist/components/composed/commerce/voucher-entry/types.d.ts.map +1 -1
- package/dist/components/composed/commerce/voucher-entry/voucher-entry.d.ts.map +1 -1
- package/dist/components/composed/dark-surfaces/booking-receipt/booking-receipt.d.ts.map +1 -1
- package/dist/components/composed/dark-surfaces/index.cjs +1 -1
- package/dist/components/composed/dark-surfaces/index.cjs.map +1 -1
- package/dist/components/composed/dark-surfaces/index.js +23 -16
- package/dist/components/composed/dark-surfaces/index.js.map +1 -1
- package/dist/components/composed/dark-surfaces/order-items/order-items.d.ts.map +1 -1
- package/dist/components/composed/dark-surfaces/order-items/types.d.ts +3 -1
- package/dist/components/composed/dark-surfaces/order-items/types.d.ts.map +1 -1
- package/dist/components/composed/data-display/index.cjs +1 -1
- package/dist/components/composed/data-display/index.cjs.map +1 -1
- package/dist/components/composed/data-display/index.js +18 -17
- package/dist/components/composed/data-display/index.js.map +1 -1
- package/dist/components/composed/data-display/invoice-mini/invoice-mini.d.ts.map +1 -1
- package/dist/components/composed/navigation/breadcrumb-progress/breadcrumb-progress.d.ts.map +1 -1
- package/dist/components/composed/navigation/index.cjs +1 -1
- package/dist/components/composed/navigation/index.cjs.map +1 -1
- package/dist/components/composed/navigation/index.js +90 -72
- package/dist/components/composed/navigation/index.js.map +1 -1
- package/dist/components/composed/navigation/kanban-board/kanban-board.d.ts.map +1 -1
- package/dist/components/composed/navigation/kanban-board/types.d.ts +5 -1
- package/dist/components/composed/navigation/kanban-board/types.d.ts.map +1 -1
- package/dist/components/composed/onboarding/index.cjs +1 -1
- package/dist/components/composed/onboarding/index.cjs.map +1 -1
- package/dist/components/composed/onboarding/index.js +3 -3
- package/dist/components/composed/timelines/index.cjs +1 -1
- package/dist/components/composed/timelines/index.cjs.map +1 -1
- package/dist/components/composed/timelines/index.js +6 -6
- package/dist/components/composed/timelines/index.js.map +1 -1
- package/dist/components/features/activities/activities-feed.d.ts.map +1 -1
- package/dist/components/features/activities/activities.types.d.ts +2 -1
- package/dist/components/features/activities/activities.types.d.ts.map +1 -1
- package/dist/components/features/activities/index.cjs +1 -1
- package/dist/components/features/activities/index.cjs.map +1 -1
- package/dist/components/features/activities/index.js +286 -301
- package/dist/components/features/activities/index.js.map +1 -1
- package/dist/components/features/activities/partials/activities-feed-card.d.ts.map +1 -1
- package/dist/components/features/activities/partials/activity-headline.d.ts.map +1 -1
- package/dist/components/features/activities/partials/activity-resource-tag.d.ts.map +1 -1
- package/dist/components/features/activities/partials/activity-row.d.ts.map +1 -1
- package/dist/components/features/ai-chat/ai-chat.d.ts +2 -1
- package/dist/components/features/ai-chat/ai-chat.d.ts.map +1 -1
- package/dist/components/features/ai-chat/index.cjs +2 -2
- package/dist/components/features/ai-chat/index.cjs.map +1 -1
- package/dist/components/features/ai-chat/index.js +16 -14
- package/dist/components/features/ai-chat/index.js.map +1 -1
- package/dist/components/features/ai-chat/partials/ai-chat-conversation.d.ts +2 -1
- package/dist/components/features/ai-chat/partials/ai-chat-conversation.d.ts.map +1 -1
- package/dist/components/features/ai-chat/partials/ai-chat-message.d.ts +2 -1
- package/dist/components/features/ai-chat/partials/ai-chat-message.d.ts.map +1 -1
- package/dist/components/features/ai-chat/partials/ai-chat-prompt-input.d.ts +2 -1
- package/dist/components/features/ai-chat/partials/ai-chat-prompt-input.d.ts.map +1 -1
- package/dist/components/features/ai-chat/partials/ai-chat-queue.d.ts +2 -1
- package/dist/components/features/ai-chat/partials/ai-chat-queue.d.ts.map +1 -1
- package/dist/components/features/ai-chat/partials/ai-chat-suggestions-row.d.ts +2 -1
- package/dist/components/features/ai-chat/partials/ai-chat-suggestions-row.d.ts.map +1 -1
- package/dist/components/features/card/card.types.d.ts +2 -0
- package/dist/components/features/card/card.types.d.ts.map +1 -1
- package/dist/components/features/card/index.cjs +1 -1
- package/dist/components/features/card/index.cjs.map +1 -1
- package/dist/components/features/card/index.js +37 -43
- package/dist/components/features/card/index.js.map +1 -1
- package/dist/components/features/card/partials/default-shared-resource-partials.d.ts +2 -1
- package/dist/components/features/card/partials/default-shared-resource-partials.d.ts.map +1 -1
- package/dist/components/features/card/shared-resource-card.d.ts.map +1 -1
- package/dist/components/features/comments/comments-provider.d.ts +2 -1
- package/dist/components/features/comments/comments-provider.d.ts.map +1 -1
- package/dist/components/features/comments/comments.types.d.ts +6 -5
- package/dist/components/features/comments/comments.types.d.ts.map +1 -1
- package/dist/components/features/comments/index.cjs +1 -1
- package/dist/components/features/comments/index.js +2 -2
- package/dist/components/features/comments/partials/comment-attachment-chip.d.ts +2 -1
- package/dist/components/features/comments/partials/comment-attachment-chip.d.ts.map +1 -1
- package/dist/components/features/comments/partials/comment-composer.d.ts.map +1 -1
- package/dist/components/features/comments/partials/comment-empty.d.ts +2 -1
- package/dist/components/features/comments/partials/comment-empty.d.ts.map +1 -1
- package/dist/components/features/comments/partials/comment-item.d.ts.map +1 -1
- package/dist/components/features/event-log/event-log.d.ts.map +1 -1
- package/dist/components/features/event-log/event-log.types.d.ts +2 -2
- package/dist/components/features/event-log/event-log.types.d.ts.map +1 -1
- package/dist/components/features/event-log/index.cjs +1 -1
- package/dist/components/features/event-log/index.cjs.map +1 -1
- package/dist/components/features/event-log/index.js +86 -86
- package/dist/components/features/event-log/index.js.map +1 -1
- package/dist/components/features/filters/facets/async-select-facet.d.ts +1 -1
- package/dist/components/features/filters/facets/async-select-facet.d.ts.map +1 -1
- package/dist/components/features/filters/filters.types.d.ts +7 -7
- package/dist/components/features/filters/filters.types.d.ts.map +1 -1
- package/dist/components/features/filters/hooks/use-async-options.d.ts.map +1 -1
- package/dist/components/features/filters/index.cjs +1 -1
- package/dist/components/features/filters/index.cjs.map +1 -1
- package/dist/components/features/filters/index.js +518 -495
- package/dist/components/features/filters/index.js.map +1 -1
- package/dist/components/features/filters/partials/async-filter-content.d.ts +1 -1
- package/dist/components/features/filters/partials/async-filter-content.d.ts.map +1 -1
- package/dist/components/features/filters/partials/filter-pill.d.ts.map +1 -1
- package/dist/components/features/filters/partials/filters-button.d.ts.map +1 -1
- package/dist/components/features/global-search/global-search.d.ts +2 -1
- package/dist/components/features/global-search/global-search.d.ts.map +1 -1
- package/dist/components/features/global-search/index.cjs +1 -1
- package/dist/components/features/global-search/index.cjs.map +1 -1
- package/dist/components/features/global-search/index.js +291 -271
- package/dist/components/features/global-search/index.js.map +1 -1
- package/dist/components/features/global-search/partials/global-search-idle-state.d.ts.map +1 -1
- package/dist/components/features/global-search/partials/global-search-input.d.ts.map +1 -1
- package/dist/components/features/global-search/partials/global-search-result-row.d.ts.map +1 -1
- package/dist/components/features/global-search/partials/global-search-tabs.d.ts.map +1 -1
- package/dist/components/features/index.d.ts.map +1 -1
- package/dist/components/features/kanban/index.cjs +1 -1
- package/dist/components/features/kanban/index.cjs.map +1 -1
- package/dist/components/features/kanban/index.js +133 -124
- package/dist/components/features/kanban/index.js.map +1 -1
- package/dist/components/features/kanban/kanban-context.d.ts +1 -0
- package/dist/components/features/kanban/kanban-context.d.ts.map +1 -1
- package/dist/components/features/kanban/kanban.d.ts.map +1 -1
- package/dist/components/features/media-library/hooks/index.d.ts +2 -0
- package/dist/components/features/media-library/hooks/index.d.ts.map +1 -0
- package/dist/components/features/media-library/hooks/use-media-library.d.ts +6 -0
- package/dist/components/features/media-library/hooks/use-media-library.d.ts.map +1 -0
- package/dist/components/features/media-library/index.cjs +2 -0
- package/dist/components/features/media-library/index.cjs.map +1 -0
- package/dist/components/features/media-library/index.d.ts +7 -0
- package/dist/components/features/media-library/index.d.ts.map +1 -0
- package/dist/components/features/media-library/index.js +1796 -0
- package/dist/components/features/media-library/index.js.map +1 -0
- package/dist/components/features/media-library/media-library.d.ts +4 -0
- package/dist/components/features/media-library/media-library.d.ts.map +1 -0
- package/dist/components/features/media-library/media-library.strings.d.ts +120 -0
- package/dist/components/features/media-library/media-library.strings.d.ts.map +1 -0
- package/dist/components/features/media-library/media-library.types.d.ts +340 -0
- package/dist/components/features/media-library/media-library.types.d.ts.map +1 -0
- package/dist/components/features/media-library/media-resource-gallery.d.ts +3 -0
- package/dist/components/features/media-library/media-resource-gallery.d.ts.map +1 -0
- package/dist/components/features/media-library/partials/index.d.ts +2 -0
- package/dist/components/features/media-library/partials/index.d.ts.map +1 -0
- package/dist/components/features/media-library/partials/media-library-partials.d.ts +11 -0
- package/dist/components/features/media-library/partials/media-library-partials.d.ts.map +1 -0
- package/dist/components/features/mentions/index.cjs +1 -1
- package/dist/components/features/mentions/index.js +1 -1
- package/dist/components/features/mentions/partials/mention-chip.d.ts.map +1 -1
- package/dist/components/features/mentions/partials/mention-inline-suggestions.d.ts.map +1 -1
- package/dist/components/features/mentions/partials/mention-picker.d.ts.map +1 -1
- package/dist/components/features/mentions/utils/build-mention-html.d.ts +3 -3
- package/dist/components/features/overlays/dialog.d.ts +1 -1
- package/dist/components/features/overlays/dialog.d.ts.map +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 +3 -1
- package/dist/components/features/overlays/overlays.types.d.ts.map +1 -1
- package/dist/components/features/products/components/index.d.ts +15 -0
- package/dist/components/features/products/components/index.d.ts.map +1 -0
- package/dist/components/features/products/components/product-contract-overview.d.ts +6 -0
- package/dist/components/features/products/components/product-contract-overview.d.ts.map +1 -0
- package/dist/components/features/products/components/product-details-card.d.ts +6 -0
- package/dist/components/features/products/components/product-details-card.d.ts.map +1 -0
- package/dist/components/features/products/components/product-operations-card.d.ts +6 -0
- package/dist/components/features/products/components/product-operations-card.d.ts.map +1 -0
- package/dist/components/features/products/components/product-option-action-menu.d.ts +6 -0
- package/dist/components/features/products/components/product-option-action-menu.d.ts.map +1 -0
- package/dist/components/features/products/components/product-options-summary.d.ts +6 -0
- package/dist/components/features/products/components/product-options-summary.d.ts.map +1 -0
- package/dist/components/features/products/components/product-overview.d.ts +6 -0
- package/dist/components/features/products/components/product-overview.d.ts.map +1 -0
- package/dist/components/features/products/components/product-policies-card.d.ts +6 -0
- package/dist/components/features/products/components/product-policies-card.d.ts.map +1 -0
- package/dist/components/features/products/components/product-quote-preview-card.d.ts +6 -0
- package/dist/components/features/products/components/product-quote-preview-card.d.ts.map +1 -0
- package/dist/components/features/products/components/product-readiness-card.d.ts +6 -0
- package/dist/components/features/products/components/product-readiness-card.d.ts.map +1 -0
- package/dist/components/features/products/components/product-structure-card.d.ts +6 -0
- package/dist/components/features/products/components/product-structure-card.d.ts.map +1 -0
- package/dist/components/features/products/components/product-variant-action-menu.d.ts +6 -0
- package/dist/components/features/products/components/product-variant-action-menu.d.ts.map +1 -0
- package/dist/components/features/products/components/product-variant-details.d.ts +6 -0
- package/dist/components/features/products/components/product-variant-details.d.ts.map +1 -0
- package/dist/components/features/products/components/product-variant-editor.d.ts +6 -0
- package/dist/components/features/products/components/product-variant-editor.d.ts.map +1 -0
- package/dist/components/features/products/components/product-variants-table.d.ts +6 -0
- package/dist/components/features/products/components/product-variants-table.d.ts.map +1 -0
- package/dist/components/features/products/index.cjs +2 -0
- package/dist/components/features/products/index.cjs.map +1 -0
- package/dist/components/features/products/index.d.ts +6 -0
- package/dist/components/features/products/index.d.ts.map +1 -0
- package/dist/components/features/products/index.js +1749 -0
- package/dist/components/features/products/index.js.map +1 -0
- package/dist/components/features/products/partials/index.d.ts +8 -0
- package/dist/components/features/products/partials/index.d.ts.map +1 -0
- package/dist/components/features/products/partials/product-actions.d.ts +8 -0
- package/dist/components/features/products/partials/product-actions.d.ts.map +1 -0
- package/dist/components/features/products/partials/product-empty-state.d.ts +8 -0
- package/dist/components/features/products/partials/product-empty-state.d.ts.map +1 -0
- package/dist/components/features/products/partials/product-metric-tile.d.ts +5 -0
- package/dist/components/features/products/partials/product-metric-tile.d.ts.map +1 -0
- package/dist/components/features/products/partials/product-rows.d.ts +25 -0
- package/dist/components/features/products/partials/product-rows.d.ts.map +1 -0
- package/dist/components/features/products/partials/product-tone.d.ts +9 -0
- package/dist/components/features/products/partials/product-tone.d.ts.map +1 -0
- package/dist/components/features/products/partials/product-values.d.ts +2 -0
- package/dist/components/features/products/partials/product-values.d.ts.map +1 -0
- package/dist/components/features/products/partials/product-variant-table-parts.d.ts +22 -0
- package/dist/components/features/products/partials/product-variant-table-parts.d.ts.map +1 -0
- package/dist/components/features/products/products.d.ts +7 -0
- package/dist/components/features/products/products.d.ts.map +1 -0
- package/dist/components/features/products/products.strings.d.ts +197 -0
- package/dist/components/features/products/products.strings.d.ts.map +1 -0
- package/dist/components/features/products/products.types.d.ts +372 -0
- package/dist/components/features/products/products.types.d.ts.map +1 -0
- 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/rich-text-editor/partials/rich-text-editor-fallback.d.ts.map +1 -1
- package/dist/components/features/rich-text-editor/partials/rich-text-editor-tiptap.d.ts.map +1 -1
- package/dist/components/features/schema-form/hooks/index.d.ts +2 -0
- package/dist/components/features/schema-form/hooks/index.d.ts.map +1 -0
- package/dist/components/features/schema-form/hooks/use-schema-form.d.ts +24 -0
- package/dist/components/features/schema-form/hooks/use-schema-form.d.ts.map +1 -0
- package/dist/components/features/schema-form/index.cjs +2 -0
- package/dist/components/features/schema-form/index.cjs.map +1 -0
- package/dist/components/features/schema-form/index.d.ts +6 -0
- package/dist/components/features/schema-form/index.d.ts.map +1 -0
- package/dist/components/features/schema-form/index.js +721 -0
- package/dist/components/features/schema-form/index.js.map +1 -0
- package/dist/components/features/schema-form/partials/index.d.ts +4 -0
- package/dist/components/features/schema-form/partials/index.d.ts.map +1 -0
- package/dist/components/features/schema-form/partials/schema-form-actions.d.ts +16 -0
- package/dist/components/features/schema-form/partials/schema-form-actions.d.ts.map +1 -0
- package/dist/components/features/schema-form/partials/schema-form-empty.d.ts +10 -0
- package/dist/components/features/schema-form/partials/schema-form-empty.d.ts.map +1 -0
- package/dist/components/features/schema-form/partials/schema-form-field.d.ts +11 -0
- package/dist/components/features/schema-form/partials/schema-form-field.d.ts.map +1 -0
- package/dist/components/features/schema-form/schema-form.d.ts +6 -0
- package/dist/components/features/schema-form/schema-form.d.ts.map +1 -0
- package/dist/components/features/schema-form/schema-form.strings.d.ts +12 -0
- package/dist/components/features/schema-form/schema-form.strings.d.ts.map +1 -0
- package/dist/components/features/schema-form/schema-form.types.d.ts +198 -0
- package/dist/components/features/schema-form/schema-form.types.d.ts.map +1 -0
- package/dist/components/features/schema-form/schema-form.utils.d.ts +19 -0
- package/dist/components/features/schema-form/schema-form.utils.d.ts.map +1 -0
- package/dist/components/features/suggestions/hooks/use-suggestions.d.ts.map +1 -1
- package/dist/components/features/suggestions/index.cjs +1 -1
- package/dist/components/features/suggestions/index.cjs.map +1 -1
- package/dist/components/features/suggestions/index.js +64 -64
- package/dist/components/features/suggestions/index.js.map +1 -1
- package/dist/components/features/suggestions/suggestions.d.ts.map +1 -1
- package/dist/components/features/suggestions/suggestions.types.d.ts +1 -0
- package/dist/components/features/suggestions/suggestions.types.d.ts.map +1 -1
- package/dist/components/features/sync/index.cjs +1 -1
- package/dist/components/features/sync/index.cjs.map +1 -1
- package/dist/components/features/sync/index.js +3 -3
- package/dist/components/layout/app-shell/app-shell.types.d.ts +1 -1
- package/dist/components/layout/app-shell/app-shell.types.d.ts.map +1 -1
- package/dist/components/layout/app-shell/index.cjs +1 -1
- package/dist/components/layout/app-shell/index.js +1 -1
- package/dist/components/layout/app-shell/topbar-sidebar-layout.d.ts.map +1 -1
- package/dist/components/layout/auth/auth-card.d.ts +3 -0
- package/dist/components/layout/auth/auth-card.d.ts.map +1 -0
- package/dist/components/layout/auth/auth-footer-links.d.ts +3 -0
- package/dist/components/layout/auth/auth-footer-links.d.ts.map +1 -0
- package/dist/components/layout/auth/auth-hooks.d.ts +5 -0
- package/dist/components/layout/auth/auth-hooks.d.ts.map +1 -0
- package/dist/components/layout/auth/auth-method-switch.d.ts +5 -0
- package/dist/components/layout/auth/auth-method-switch.d.ts.map +1 -0
- package/dist/components/layout/auth/auth-shell.d.ts +3 -0
- package/dist/components/layout/auth/auth-shell.d.ts.map +1 -0
- package/dist/components/layout/auth/auth-social-providers.d.ts +4 -0
- package/dist/components/layout/auth/auth-social-providers.d.ts.map +1 -0
- package/dist/components/layout/auth/auth-split-panel.d.ts +3 -0
- package/dist/components/layout/auth/auth-split-panel.d.ts.map +1 -0
- package/dist/components/layout/auth/auth.strings.d.ts +22 -0
- package/dist/components/layout/auth/auth.strings.d.ts.map +1 -0
- package/dist/components/layout/auth/auth.types.d.ts +187 -0
- package/dist/components/layout/auth/auth.types.d.ts.map +1 -0
- package/dist/components/layout/auth/index.cjs +1 -0
- package/dist/components/layout/auth/index.d.ts +10 -0
- package/dist/components/layout/auth/index.d.ts.map +1 -0
- package/dist/components/layout/auth/index.js +2 -0
- package/dist/components/layout/header/index.cjs +1 -1
- package/dist/components/layout/header/index.js +1 -1
- package/dist/components/layout/header/partials/header-notifications.d.ts.map +1 -1
- package/dist/components/layout/header/partials/header-search.d.ts.map +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.d.ts +2 -0
- package/dist/components/layout/index.d.ts.map +1 -1
- package/dist/components/layout/index.js +8 -6
- package/dist/components/layout/page/index.cjs +1 -1
- package/dist/components/layout/page/index.js +1 -1
- package/dist/components/layout/sidebar/components/sidebar-grouped-navigation.d.ts.map +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 -0
- package/dist/components/layout/workspace/index.d.ts +4 -0
- package/dist/components/layout/workspace/index.d.ts.map +1 -0
- package/dist/components/layout/workspace/index.js +2 -0
- package/dist/components/layout/workspace/workspace.d.ts +7 -0
- package/dist/components/layout/workspace/workspace.d.ts.map +1 -0
- package/dist/components/layout/workspace/workspace.strings.d.ts +19 -0
- package/dist/components/layout/workspace/workspace.strings.d.ts.map +1 -0
- package/dist/components/layout/workspace/workspace.types.d.ts +96 -0
- package/dist/components/layout/workspace/workspace.types.d.ts.map +1 -0
- package/dist/components/typography/heading.d.ts +2 -1
- package/dist/components/typography/heading.d.ts.map +1 -1
- package/dist/components/typography/index.cjs +1 -1
- package/dist/components/typography/index.js +2 -3
- package/dist/components/typography/text-link.d.ts.map +1 -1
- package/dist/components/typography/text.d.ts +2 -1
- package/dist/components/typography/text.d.ts.map +1 -1
- package/dist/components/ui/alert-dialog.d.ts +19 -0
- package/dist/components/ui/alert-dialog.d.ts.map +1 -0
- package/dist/components/ui/aspect-ratio.d.ts +5 -0
- package/dist/components/ui/aspect-ratio.d.ts.map +1 -0
- package/dist/components/ui/carousel.d.ts +29 -0
- package/dist/components/ui/carousel.d.ts.map +1 -0
- package/dist/components/ui/direction.d.ts +2 -0
- package/dist/components/ui/direction.d.ts.map +1 -0
- package/dist/components/ui/drawer.d.ts +14 -0
- package/dist/components/ui/drawer.d.ts.map +1 -0
- package/dist/components/ui/field.d.ts +25 -0
- package/dist/components/ui/field.d.ts.map +1 -0
- package/dist/components/ui/input-group.d.ts +1 -1
- package/dist/components/ui/input-otp.d.ts +12 -0
- package/dist/components/ui/input-otp.d.ts.map +1 -0
- package/dist/components/ui/kbd.d.ts +4 -0
- package/dist/components/ui/kbd.d.ts.map +1 -0
- package/dist/components/ui/label.d.ts +4 -0
- package/dist/components/ui/label.d.ts.map +1 -0
- package/dist/components/ui/menubar.d.ts +30 -0
- package/dist/components/ui/menubar.d.ts.map +1 -0
- package/dist/components/ui/native-select.d.ts +9 -0
- package/dist/components/ui/native-select.d.ts.map +1 -0
- package/dist/components/ui/navigation-menu.d.ts +12 -0
- package/dist/components/ui/navigation-menu.d.ts.map +1 -0
- package/dist/components/ui/resizable.d.ts +8 -0
- package/dist/components/ui/resizable.d.ts.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/lib/ui-provider/index.cjs +1 -1
- package/dist/lib/ui-provider/index.js +1 -1
- package/dist/lib/utils.cjs +1 -1
- package/dist/lib/utils.cjs.map +1 -1
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +19 -16
- package/dist/lib/utils.js.map +1 -1
- package/dist/showcase/assets/AreaChart-BkAbL-UV.js +6 -0
- package/dist/showcase/assets/CSPContext-B11tftuK.js +1 -0
- package/dist/showcase/assets/CompositeItem-Dzu0MfUC.js +1 -0
- package/dist/showcase/assets/CompositeRoot-CQvQ_uj2.js +1 -0
- package/dist/showcase/assets/DialogTrigger-BxVhSw4D.js +1 -0
- package/dist/showcase/assets/FieldItemContext-BSFHjS7g.js +1 -0
- package/dist/showcase/assets/LabelableContext-DapqaNeY.js +1 -0
- package/dist/showcase/assets/PreviewLayout-CGEkbS-i.js +1 -0
- package/dist/showcase/assets/RadioGroup-DBA3iBQw.js +1 -0
- package/dist/showcase/assets/Separator-BEMr82IS.js +1 -0
- package/dist/showcase/assets/ToolbarRootContext-xN-ruoGR.js +1 -0
- package/dist/showcase/assets/accordion-B-Iy0jKu.js +171 -0
- package/dist/showcase/assets/accordion-variants-B9GD0oBE.js +1 -0
- package/dist/showcase/assets/action-menu-CMUF6gPp.js +1 -0
- package/dist/showcase/assets/activities-C1P9bsJm.js +501 -0
- package/dist/showcase/assets/activities-feed-card-WZUuGHmT.js +1 -0
- package/dist/showcase/assets/activity-BVP5C805.js +1 -0
- package/dist/showcase/assets/admin-DWOK4sj4.js +80 -0
- package/dist/showcase/assets/ai-Dteb3y6G.js +41 -0
- package/dist/showcase/assets/ai-artifact-B0d7GveY.js +2 -0
- package/dist/showcase/assets/ai-chat-IJ0b2FOw.js +568 -0
- package/dist/showcase/assets/ai-elements-Cr8GgtEV.js +387 -0
- package/dist/showcase/assets/ai-new-BJN9wNvX.js +167 -0
- package/dist/showcase/assets/ai-tool-call-BqlQuR1P.js +1 -0
- package/dist/showcase/assets/alert-2_0J7Vv6.js +1 -0
- package/dist/showcase/assets/alert-7wEOpEor.js +93 -0
- package/dist/showcase/assets/alert-C_FOBilU.js +62 -0
- package/dist/showcase/assets/api-key-list-CGV1k52v.js +73 -0
- package/dist/showcase/assets/app-sidebar-S6oUYO4h.js +1 -0
- package/dist/showcase/assets/arrow-down-VNr82bS3.js +1 -0
- package/dist/showcase/assets/arrow-left-BSVeKWNq.js +1 -0
- package/dist/showcase/assets/arrow-right-D6hTB0Bd.js +1 -0
- package/dist/showcase/assets/arrow-up-p9oA4cIz.js +1 -0
- package/dist/showcase/assets/arrow-up-right-BtlQ62bc.js +1 -0
- package/dist/showcase/assets/avatar-BxcQUuh0.js +57 -0
- package/dist/showcase/assets/avatar-LGWm52rv.js +1 -0
- package/dist/showcase/assets/badge-COn5psy3.js +28 -0
- package/dist/showcase/assets/badge-check-D2C2BPUT.js +1 -0
- package/dist/showcase/assets/bell-C80n9VRl.js +1 -0
- package/dist/showcase/assets/bot-C83bUUi9.js +1 -0
- package/dist/showcase/assets/box-rZ0pA-02.js +1 -0
- package/dist/showcase/assets/brain-BJtktdVu.js +1 -0
- package/dist/showcase/assets/brand-CxdIBpyJ.js +36 -0
- package/dist/showcase/assets/breadcrumb-BZsr_A8k.js +1 -0
- package/dist/showcase/assets/breadcrumb-CSU8FvWB.js +52 -0
- package/dist/showcase/assets/breadcrumbs-BUm4gHzL.js +1 -0
- package/dist/showcase/assets/briefcase-0WhUdLn5.js +1 -0
- package/dist/showcase/assets/building-2-1D6zVdCI.js +1 -0
- package/dist/showcase/assets/button-C22Gs6y0.js +44 -0
- package/dist/showcase/assets/button-group-C0Ts4-x3.js +1 -0
- package/dist/showcase/assets/buttons-Dfn6hmwe.js +270 -0
- package/dist/showcase/assets/calendar-7a4yQlzJ.js +1 -0
- package/dist/showcase/assets/calendar-Bo17POsN.js +1 -0
- package/dist/showcase/assets/calendar-D6XNDRVQ.js +16 -0
- package/dist/showcase/assets/calendar-days-C4mG2tOe.js +1 -0
- package/dist/showcase/assets/camera-C16z6v0m.js +1 -0
- package/dist/showcase/assets/card-BjqRQxxz.js +1 -0
- package/dist/showcase/assets/card-IzYmUTpI.js +188 -0
- package/dist/showcase/assets/card-primitives-BDj4DtS8.js +1 -0
- package/dist/showcase/assets/card-radio-group-7GU9AtWs.js +1 -0
- package/dist/showcase/assets/cards-DAqpr8CM.js +328 -0
- package/dist/showcase/assets/carousel-D1n4Kkoo.js +449 -0
- package/dist/showcase/assets/chart-D2EGeI3b.js +358 -0
- package/dist/showcase/assets/chart-column-DKcP77Dx.js +1 -0
- package/dist/showcase/assets/checkbox-BI3gcjED.js +1 -0
- package/dist/showcase/assets/chevron-down-ByPPEdNm.js +1 -0
- package/dist/showcase/assets/chevron-left-BNByuq3g.js +1 -0
- package/dist/showcase/assets/chevron-right-D4pIMCh9.js +1 -0
- package/dist/showcase/assets/chevron-up-Cha879Nz.js +1 -0
- package/dist/showcase/assets/chevrons-up-down-eAgHau5X.js +1 -0
- package/dist/showcase/assets/circle-V5hdlsIn.js +1 -0
- package/dist/showcase/assets/circle-alert-BW-Btwgh.js +1 -0
- package/dist/showcase/assets/circle-check-1MSds3Vu.js +1 -0
- package/dist/showcase/assets/circle-check-big-vBWkmhCZ.js +1 -0
- package/dist/showcase/assets/circle-dot-CsD5uXwH.js +1 -0
- package/dist/showcase/assets/circle-question-mark-xYn9p1nL.js +1 -0
- package/dist/showcase/assets/circle-x-VSqZOeGt.js +1 -0
- package/dist/showcase/assets/clock-3-CP_t59kW.js +1 -0
- package/dist/showcase/assets/clock-9xbB7EnW.js +1 -0
- package/dist/showcase/assets/code-xml-CeGA85eB.js +1 -0
- package/dist/showcase/assets/collapsible-C2W51-wl.js +27 -0
- package/dist/showcase/assets/collapsible-C4eof15p.js +1 -0
- package/dist/showcase/assets/combobox-i8o4u6Q0.js +696 -0
- package/dist/showcase/assets/command-C4F78Ppy.js +1 -0
- package/dist/showcase/assets/command-wjOXUieO.js +1 -0
- package/dist/showcase/assets/comment-composer-DeURrlgL.js +1 -0
- package/dist/showcase/assets/comment-item-D07Qk-Nt.js +1 -0
- package/dist/showcase/assets/comments-Bo-lZU18.js +357 -0
- package/dist/showcase/assets/commerce-extras-Cio3xn_B.js +189 -0
- package/dist/showcase/assets/commerce-jqA58sCZ.js +79 -0
- package/dist/showcase/assets/composite-BQFpnmS9.js +1 -0
- package/dist/showcase/assets/contact-card-4ajPhcd_.js +65 -0
- package/dist/showcase/assets/content-container-B83BnjFb.js +1 -0
- package/dist/showcase/assets/copyable-DKkroGJ3.js +96 -0
- package/dist/showcase/assets/course-card-DShYl03k.js +77 -0
- package/dist/showcase/assets/cpu-BZTsuaUu.js +1 -0
- package/dist/showcase/assets/credit-card-CAI3F3HB.js +1 -0
- package/dist/showcase/assets/currency-PXgbngHk.js +149 -0
- package/dist/showcase/assets/dark-surfaces-pSCicdm4.js +90 -0
- package/dist/showcase/assets/database-oHsxHUj-.js +1 -0
- package/dist/showcase/assets/date-block-CvCdJr8d.js +1 -0
- package/dist/showcase/assets/date-picker-Cd5vsEEd.js +1 -0
- package/dist/showcase/assets/date-pickers-CBK-zvSB.js +73 -0
- package/dist/showcase/assets/dense-info-zOdJpez6.js +106 -0
- package/dist/showcase/assets/dialog-D9-MRCRg.js +1 -0
- package/dist/showcase/assets/dialog-EDw9DvZs.js +1 -0
- package/dist/showcase/assets/display-CE9JWinr.js +403 -0
- package/dist/showcase/assets/dist-CjZ6RM9v.js +45 -0
- package/dist/showcase/assets/dollar-sign-BXD_x2mP.js +1 -0
- package/dist/showcase/assets/download-D0ur_d_N.js +1 -0
- package/dist/showcase/assets/dropdown-menu-Cto8-yDW.js +1 -0
- package/dist/showcase/assets/dropzone-9Gb4mR4x.js +1 -0
- package/dist/showcase/assets/earth-BN1w3w7h.js +1 -0
- package/dist/showcase/assets/ellipsis-DsrebD1Y.js +1 -0
- package/dist/showcase/assets/ellipsis-vertical-CAiMV7G2.js +1 -0
- package/dist/showcase/assets/empty-DoJF3uif.js +1 -0
- package/dist/showcase/assets/empty-item-zZ85qI6s.js +49 -0
- package/dist/showcase/assets/empty-state-CGfB7sOE.js +1 -0
- package/dist/showcase/assets/empty-state-Y_4qnNWt.js +188 -0
- package/dist/showcase/assets/enhanced-activities-B41hAxhb.js +361 -0
- package/dist/showcase/assets/enhanced-combobox-BOimEW-1.js +1 -0
- package/dist/showcase/assets/event-calendar-BjcfC6fM.js +138 -0
- package/dist/showcase/assets/event-log-BhoMXcix.js +330 -0
- package/dist/showcase/assets/example-Cz_880po.js +1 -0
- package/dist/showcase/assets/external-link-Cy1-PP8k.js +1 -0
- package/dist/showcase/assets/eye-C85PNNdH.js +1 -0
- package/dist/showcase/assets/feature-announcement-_tpahla3.js +34 -0
- package/dist/showcase/assets/file-C8PCBEtY.js +1 -0
- package/dist/showcase/assets/file-text-DwqbUujq.js +1 -0
- package/dist/showcase/assets/filters-ChqGg_1z.js +78 -0
- package/dist/showcase/assets/flag-csHQcBml.js +1 -0
- package/dist/showcase/assets/folder-open-BThTng3d.js +1 -0
- package/dist/showcase/assets/form-field-B5g_5Zjm.js +1 -0
- package/dist/showcase/assets/form-sizing-DHUDpiPA.js +1 -0
- package/dist/showcase/assets/format-DrTwpH65.js +1 -0
- package/dist/showcase/assets/format-metric-value-BTsvOjZQ.js +1 -0
- package/dist/showcase/assets/forms-BukyUSKs.js +862 -0
- package/dist/showcase/assets/frame-BNKhZVlb.js +167 -0
- package/dist/showcase/assets/getPseudoElementBounds-DwyQgIj-.js +1 -0
- package/dist/showcase/assets/gift-CtM--bDo.js +1 -0
- package/dist/showcase/assets/giftcard-cards-imm4Br0H.js +85 -0
- package/dist/showcase/assets/git-branch-Dl3AzbqP.js +1 -0
- package/dist/showcase/assets/global-search-Bhl7z_vN.js +1 -0
- package/dist/showcase/assets/global-search-C4yaPFSW.js +215 -0
- package/dist/showcase/assets/globe-BCikLfKc.js +1 -0
- package/dist/showcase/assets/gradient-card-Dh_5ZYv0.js +58 -0
- package/dist/showcase/assets/hash-C8m0EECO.js +1 -0
- package/dist/showcase/assets/header-BXjw7Lm_.js +1 -0
- package/dist/showcase/assets/header-notifications-CShSQ8kR.js +1 -0
- package/dist/showcase/assets/heart-BJVBFZ-j.js +1 -0
- package/dist/showcase/assets/hero-CLDdwZDr.png +0 -0
- package/dist/showcase/assets/house-C3fXPhlL.js +1 -0
- package/dist/showcase/assets/icon-badge-dwVx3Hxf.js +1 -0
- package/dist/showcase/assets/image-gc4qX_7C.js +1 -0
- package/dist/showcase/assets/inbox-C0GJ1KEC.js +1 -0
- package/dist/showcase/assets/index-BQIv1ffM.js +10 -0
- package/dist/showcase/assets/index-DN3tqopz.css +2 -0
- package/dist/showcase/assets/index.esm-Ducg7a0P.js +1 -0
- package/dist/showcase/assets/inertValue-DeVQ2cCe.js +1 -0
- package/dist/showcase/assets/info-BimmreJ-.js +1 -0
- package/dist/showcase/assets/inline-stat-DcNP6bcO.js +1 -0
- package/dist/showcase/assets/input-DJAWOJEx.js +1 -0
- package/dist/showcase/assets/input-NIgvB9CZ.js +1 -0
- package/dist/showcase/assets/input-group-BmqJ20bA.js +1 -0
- package/dist/showcase/assets/input-group-gOUubhee.js +47 -0
- package/dist/showcase/assets/inputs-Dk8YOVkI.js +155 -0
- package/dist/showcase/assets/invoice-header-BnNpWej2.js +36 -0
- package/dist/showcase/assets/invoice-items-BdPmW10L.js +36 -0
- package/dist/showcase/assets/invoice-mini-CbSYyHIb.js +14 -0
- package/dist/showcase/assets/invoice-table-DjnWG3KF.js +30 -0
- package/dist/showcase/assets/isSameDay-B2KDl_YX.js +1 -0
- package/dist/showcase/assets/isToday-CXNS7ELW.js +1 -0
- package/dist/showcase/assets/italic-BRS-PpYL.js +1 -0
- package/dist/showcase/assets/item--6Hx9AXZ.js +1 -0
- package/dist/showcase/assets/item-BszVRzXj.js +134 -0
- package/dist/showcase/assets/item-YF6wMI9W.js +1 -0
- package/dist/showcase/assets/kanban-BWBbWLVe.js +186 -0
- package/dist/showcase/assets/label-BgpcD3V6.js +1 -0
- package/dist/showcase/assets/languages-DDgmIDFe.js +1 -0
- package/dist/showcase/assets/layers-nkkXRmvA.js +1 -0
- package/dist/showcase/assets/layout-app-shell-D3MbPoGC.js +608 -0
- package/dist/showcase/assets/layout-auth-DIeRtG0B.js +754 -0
- package/dist/showcase/assets/layout-containers-Dc3-IAgV.js +101 -0
- package/dist/showcase/assets/layout-header-Cg6GfMST.js +170 -0
- package/dist/showcase/assets/layout-page-DojPq8S6.js +122 -0
- package/dist/showcase/assets/layout-primitives-JBSQS72B.js +34 -0
- package/dist/showcase/assets/layout-sidebar-C6jUJRhx.js +224 -0
- package/dist/showcase/assets/layout-users-uzPscfo7.js +117 -0
- package/dist/showcase/assets/layout-workspace-B3leaOKl.js +183 -0
- package/dist/showcase/assets/lock-DLIcOBUd.js +1 -0
- package/dist/showcase/assets/lock-keyhole-DY6aV7Mq.js +1 -0
- package/dist/showcase/assets/mail-AES_tOd2.js +1 -0
- package/dist/showcase/assets/mail-check-dJTzg2bD.js +1 -0
- package/dist/showcase/assets/map-CZ2l0iGH.js +124 -0
- package/dist/showcase/assets/map-pin-0O7GD5Dz.js +1 -0
- package/dist/showcase/assets/media-library-CRllxSGQ.js +695 -0
- package/dist/showcase/assets/mention-inline-suggestions-Dx2Z1GHF.js +1 -0
- package/dist/showcase/assets/mentions-CDqqGCE4.js +138 -0
- package/dist/showcase/assets/menus-CDgE79I5.js +165 -0
- package/dist/showcase/assets/message-square-CBNI_sf8.js +1 -0
- package/dist/showcase/assets/metadata-list-BoEVt7cX.js +1 -0
- package/dist/showcase/assets/metadata-list-NtWuY9W8.js +288 -0
- package/dist/showcase/assets/metric-Bx_LWobe.js +1 -0
- package/dist/showcase/assets/metric-bar-BldYHNLQ.js +1 -0
- package/dist/showcase/assets/metric-grid-BDw7w7d2.js +1 -0
- package/dist/showcase/assets/metric-trend-chip-lSjDkUEo.js +1 -0
- package/dist/showcase/assets/metrics-analytics-bar-CCFhTmQZ.js +44 -0
- package/dist/showcase/assets/metrics-analytics-cards-C1AjZqJU.js +50 -0
- package/dist/showcase/assets/metrics-comparison-vEE6BtuW.js +76 -0
- package/dist/showcase/assets/metrics-heatmap-DKkz8ibX.js +27 -0
- package/dist/showcase/assets/metrics-inline-badge-CZmVnReB.js +17 -0
- package/dist/showcase/assets/metrics-kpi-row-s2FYIYB1.js +31 -0
- package/dist/showcase/assets/metrics-micro-grid-DDlCl9Ep.js +42 -0
- package/dist/showcase/assets/metrics-overview-BgliK2L1.js +192 -0
- package/dist/showcase/assets/metrics-stat-cards-Cn5sRZsB.js +54 -0
- package/dist/showcase/assets/minus-DByvcC8K.js +1 -0
- package/dist/showcase/assets/money-display-DG4IaEaA.js +1 -0
- package/dist/showcase/assets/month-year-picker-CVurc9L7.js +1 -0
- package/dist/showcase/assets/navigation-CHYgQTsY.js +90 -0
- package/dist/showcase/assets/navigation-C_6gS4FA.js +230 -0
- package/dist/showcase/assets/navigation-extras-CflOar2P.js +43 -0
- package/dist/showcase/assets/onboarding-checklist-CYiciKwv.js +119 -0
- package/dist/showcase/assets/overlays-HrH2wdTK.js +408 -0
- package/dist/showcase/assets/overlays-cp7VMq3b.js +159 -0
- package/dist/showcase/assets/package-CjcwDJKu.js +1 -0
- package/dist/showcase/assets/package-check-CCH3ax-x.js +1 -0
- package/dist/showcase/assets/page-action-button-Cn5j2_EP.js +1 -0
- package/dist/showcase/assets/page-header-CkvCF1MQ.js +1 -0
- package/dist/showcase/assets/pagination-DM5QGPo2.js +42 -0
- package/dist/showcase/assets/pagination-DUzHnhJ6.js +1 -0
- package/dist/showcase/assets/paperclip-DoqDQQVa.js +1 -0
- package/dist/showcase/assets/password-input-CfS4sfCl.js +1 -0
- package/dist/showcase/assets/pencil-C2OfFQMj.js +1 -0
- package/dist/showcase/assets/phone-CLvml_XI.js +1 -0
- package/dist/showcase/assets/plus-D5swsZCz.js +1 -0
- package/dist/showcase/assets/popover-menu-Bu9q96nE.js +1 -0
- package/dist/showcase/assets/popover-nCGXR4Yd.js +1 -0
- package/dist/showcase/assets/popover-xC8qczvP.js +1 -0
- package/dist/showcase/assets/products-BbSzEFvw.js +407 -0
- package/dist/showcase/assets/progress-DYfoy7pk.js +1 -0
- package/dist/showcase/assets/progress-ENNwjW3X.js +18 -0
- package/dist/showcase/assets/props-table-2pIZzGC-.js +1 -0
- package/dist/showcase/assets/props.generated-DggzG-JL.json +38611 -0
- package/dist/showcase/assets/quote-BO1bufuX.js +1 -0
- package/dist/showcase/assets/receipt-kIVP3kxJ.js +1 -0
- package/dist/showcase/assets/receipt-text-BDQIvI4l.js +1 -0
- package/dist/showcase/assets/refresh-cw-UdL93poQ.js +1 -0
- package/dist/showcase/assets/resolveAriaLabelledBy-iFo8AzEr.js +1 -0
- package/dist/showcase/assets/resolveValueLabel-DfiI3G4i.js +1 -0
- package/dist/showcase/assets/rich-text-editor-CNtfwLC2.js +143 -0
- package/dist/showcase/assets/rich-text-editor-DB4QWptQ.js +124 -0
- package/dist/showcase/assets/rotate-ccw-DQPoMfMY.js +1 -0
- package/dist/showcase/assets/save-Cd0ZM40i.js +1 -0
- package/dist/showcase/assets/schema-form-Cyc6vCVO.js +325 -0
- package/dist/showcase/assets/scroll-area-B5NZsDdi.js +32 -0
- package/dist/showcase/assets/scroll-area-BvTq99pz.js +1 -0
- package/dist/showcase/assets/select-BRbyPtx8.js +1 -0
- package/dist/showcase/assets/select-Dymyvyh6.js +1 -0
- package/dist/showcase/assets/send-BWzI7mwi.js +1 -0
- package/dist/showcase/assets/separator-BsYPzBlF.js +1 -0
- package/dist/showcase/assets/separator-Osp0OJ78.js +28 -0
- package/dist/showcase/assets/serializeValue-B_EucO5O.js +1 -0
- package/dist/showcase/assets/settings-DRmWJILI.js +1 -0
- package/dist/showcase/assets/sheet-BKsjMYMo.js +1 -0
- package/dist/showcase/assets/shield-D1EaWJMG.js +1 -0
- package/dist/showcase/assets/shield-alert-DWsbR2jn.js +1 -0
- package/dist/showcase/assets/shield-check-DUTAPADm.js +1 -0
- package/dist/showcase/assets/shopping-bag-XmeqUqk9.js +1 -0
- package/dist/showcase/assets/sidebar-B5uO9sUB.js +1 -0
- package/dist/showcase/assets/sidebar.context-CRjgeYJL.js +1 -0
- package/dist/showcase/assets/skeleton-BtiPkfxB.js +1 -0
- package/dist/showcase/assets/skeleton-DbybIpkV.js +29 -0
- package/dist/showcase/assets/slider-vuwVVBby.js +1 -0
- package/dist/showcase/assets/sliders-horizontal-BE_cwUn0.js +1 -0
- package/dist/showcase/assets/smart-card-Dhu_1A_u.js +1 -0
- package/dist/showcase/assets/sonner-DZB-G4q5.js +22 -0
- package/dist/showcase/assets/sortable.esm-YOwRw8Hr.js +5 -0
- package/dist/showcase/assets/sparkles-N8rqKQez.js +1 -0
- package/dist/showcase/assets/spinner-B5zKCNXu.js +30 -0
- package/dist/showcase/assets/spinner-BOjRziLu.js +1 -0
- package/dist/showcase/assets/spinner-PIr8y8av.js +49 -0
- package/dist/showcase/assets/square-pen-ImRrVwT8.js +1 -0
- package/dist/showcase/assets/stacked-avatars-DnIAc098.js +1 -0
- package/dist/showcase/assets/star-BaV-UTPq.js +1 -0
- package/dist/showcase/assets/startOfDay-CtTeiGV0.js +1 -0
- package/dist/showcase/assets/stringifyLocale-CkHjdQTJ.js +1 -0
- package/dist/showcase/assets/styles-Bv0pDLVi.js +1 -0
- package/dist/showcase/assets/suggestions-QnLPdgnG.js +126 -0
- package/dist/showcase/assets/switch-DwAS_TXx.js +1 -0
- package/dist/showcase/assets/switch-xzxCDtyg.js +1 -0
- package/dist/showcase/assets/sync-LeYxWAap.js +107 -0
- package/dist/showcase/assets/table-BbEFanNu.js +1 -0
- package/dist/showcase/assets/table-CVVHBty6.js +382 -0
- package/dist/showcase/assets/table-actions-DvI9U67L.js +1 -0
- package/dist/showcase/assets/tabs-CLcyGwLd.js +1 -0
- package/dist/showcase/assets/tabs-ck8y1Bjr.js +19 -0
- package/dist/showcase/assets/tags-input-DmBY2CKI.js +1 -0
- package/dist/showcase/assets/text-button-C54O1rZM.js +1 -0
- package/dist/showcase/assets/text-link-9_mZpq_f.js +1 -0
- package/dist/showcase/assets/textarea-CHvnWHWH.js +1 -0
- package/dist/showcase/assets/textarea-jexcMklP.js +1 -0
- package/dist/showcase/assets/timelines-uvFVjEQv.js +200 -0
- package/dist/showcase/assets/toggle-group-B3fORi8i.js +1 -0
- package/dist/showcase/assets/toggles-Cox6Yk2k.js +71 -0
- package/dist/showcase/assets/toggles-group-CSvSPqCB.js +32 -0
- package/dist/showcase/assets/trash-2-CE9bDw49.js +1 -0
- package/dist/showcase/assets/trending-up-0iJl0XvC.js +1 -0
- package/dist/showcase/assets/truck-DlhOPoCD.js +1 -0
- package/dist/showcase/assets/typography-BotOITw4.js +223 -0
- package/dist/showcase/assets/ui-badge-hfmO1K3-.js +28 -0
- package/dist/showcase/assets/ui-card-Aigzxhn3.js +30 -0
- package/dist/showcase/assets/ui-table-CKif9sNO.js +42 -0
- package/dist/showcase/assets/upload-tray-BnKDNrw9.js +138 -0
- package/dist/showcase/assets/use-form-field-state-Sbo6tfr9.js +1 -0
- package/dist/showcase/assets/use-layout-link-BQ6Y9z__.js +1 -0
- package/dist/showcase/assets/useAnchoredPopupScrollLock-CP1vkwD7.js +1 -0
- package/dist/showcase/assets/useAriaLabelledBy-J_Rvjwx3.js +1 -0
- package/dist/showcase/assets/useCollapsiblePanel-BwUOowW2.js +1 -0
- package/dist/showcase/assets/useCompositeItem-D3XOIML-.js +1 -0
- package/dist/showcase/assets/useCompositeListItem-BWfShNPP.js +1 -0
- package/dist/showcase/assets/useControlled-BF8maje6.js +1 -0
- package/dist/showcase/assets/useLabelableId-DxorZ3YW.js +1 -0
- package/dist/showcase/assets/useOpenInteractionType-DLUX6CcH.js +1 -0
- package/dist/showcase/assets/useRender-B9zzqKA1.js +1 -0
- package/dist/showcase/assets/useTriggerFocusGuards-BSvL8pKg.js +1 -0
- package/dist/showcase/assets/useValueChanged-DSoTBFAJ.js +1 -0
- package/dist/showcase/assets/user-BZog6aIh.js +1 -0
- package/dist/showcase/assets/user-plus-CPxlPoxf.js +1 -0
- package/dist/showcase/assets/users-BgXAp2UO.js +1 -0
- package/dist/showcase/assets/valueToPercent-gleKSaFe.js +1 -0
- package/dist/showcase/assets/vendor-profile-BLYiDIrO.js +37 -0
- package/dist/showcase/assets/video-YBnCbmIb.js +1 -0
- package/dist/showcase/assets/wrench-BFTavxzg.js +1 -0
- package/dist/showcase/assets/x-D8UN9pOu.js +1 -0
- package/dist/showcase/assets/zap-DIJUAJEb.js +1 -0
- package/dist/showcase/index.html +2 -2
- package/dist/style.css +1 -1
- package/package.json +63 -3
- package/scripts/install-skill.mjs +5 -1
- package/src/App.css +9 -388
- package/dist/_shared/accordion-BnxO7Is4.js +0 -130
- package/dist/_shared/accordion-BnxO7Is4.js.map +0 -1
- package/dist/_shared/accordion-RIN0MjPz.cjs +0 -2
- package/dist/_shared/accordion-RIN0MjPz.cjs.map +0 -1
- package/dist/_shared/action-menu-IIO9KtJ2.js +0 -96
- package/dist/_shared/action-menu-IIO9KtJ2.js.map +0 -1
- package/dist/_shared/action-menu-RAyg3cvM.cjs +0 -2
- package/dist/_shared/action-menu-RAyg3cvM.cjs.map +0 -1
- package/dist/_shared/ai-artifact--MqIfP-8.js +0 -1068
- package/dist/_shared/ai-artifact--MqIfP-8.js.map +0 -1
- package/dist/_shared/ai-artifact-D1dBeEz1.cjs +0 -3
- package/dist/_shared/ai-artifact-D1dBeEz1.cjs.map +0 -1
- package/dist/_shared/alert-D3gRd7RK.cjs +0 -2
- package/dist/_shared/alert-D3gRd7RK.cjs.map +0 -1
- package/dist/_shared/alert-DQ-tV8b-.js +0 -48
- package/dist/_shared/alert-DQ-tV8b-.js.map +0 -1
- package/dist/_shared/app-shell-C4d7kCCd.cjs +0 -2
- package/dist/_shared/app-shell-C4d7kCCd.cjs.map +0 -1
- package/dist/_shared/app-shell-CKxcpPTc.js +0 -94
- package/dist/_shared/app-shell-CKxcpPTc.js.map +0 -1
- package/dist/_shared/badge-BK5VvEgg.js +0 -108
- package/dist/_shared/badge-BK5VvEgg.js.map +0 -1
- package/dist/_shared/badge-kS_XtN-z.cjs +0 -2
- package/dist/_shared/badge-kS_XtN-z.cjs.map +0 -1
- package/dist/_shared/button-LZWDn-aU.cjs +0 -2
- package/dist/_shared/button-LZWDn-aU.cjs.map +0 -1
- package/dist/_shared/button-cnkCF8q8.js +0 -177
- package/dist/_shared/button-cnkCF8q8.js.map +0 -1
- package/dist/_shared/buttons-DHV2eZAf.cjs +0 -2
- package/dist/_shared/buttons-DHV2eZAf.cjs.map +0 -1
- package/dist/_shared/buttons-ehfMSkwP.js +0 -143
- package/dist/_shared/buttons-ehfMSkwP.js.map +0 -1
- package/dist/_shared/card-radio-group-Bf03M6c5.js +0 -158
- package/dist/_shared/card-radio-group-Bf03M6c5.js.map +0 -1
- package/dist/_shared/card-radio-group-SqPUL0Je.cjs +0 -2
- package/dist/_shared/card-radio-group-SqPUL0Je.cjs.map +0 -1
- package/dist/_shared/combobox-Cvs70ic4.js +0 -808
- package/dist/_shared/combobox-Cvs70ic4.js.map +0 -1
- package/dist/_shared/combobox-Dos9YWjk.cjs +0 -2
- package/dist/_shared/combobox-Dos9YWjk.cjs.map +0 -1
- package/dist/_shared/comments-DD2aeZVz.js +0 -946
- package/dist/_shared/comments-DD2aeZVz.js.map +0 -1
- package/dist/_shared/comments-DzwU4sNE.cjs +0 -2
- package/dist/_shared/comments-DzwU4sNE.cjs.map +0 -1
- package/dist/_shared/copyable-D7WhgEzJ.js +0 -38
- package/dist/_shared/copyable-D7WhgEzJ.js.map +0 -1
- package/dist/_shared/copyable-DDjT505-.cjs +0 -2
- package/dist/_shared/copyable-DDjT505-.cjs.map +0 -1
- package/dist/_shared/date-picker-3G3C-sIq.cjs +0 -2
- package/dist/_shared/date-picker-3G3C-sIq.cjs.map +0 -1
- package/dist/_shared/date-picker-7yuMHPYs.js +0 -1362
- package/dist/_shared/date-picker-7yuMHPYs.js.map +0 -1
- package/dist/_shared/date-pickers-B_VUgjvY.cjs +0 -2
- package/dist/_shared/date-pickers-B_VUgjvY.cjs.map +0 -1
- package/dist/_shared/date-pickers-DZXi0di0.js +0 -330
- package/dist/_shared/date-pickers-DZXi0di0.js.map +0 -1
- package/dist/_shared/display-Cuj4td-V.js +0 -1237
- package/dist/_shared/display-Cuj4td-V.js.map +0 -1
- package/dist/_shared/display-D2q93jiS.cjs +0 -8
- package/dist/_shared/display-D2q93jiS.cjs.map +0 -1
- package/dist/_shared/form-field-BNuCBym1.js +0 -319
- package/dist/_shared/form-field-BNuCBym1.js.map +0 -1
- package/dist/_shared/form-field-C4fQYsqv.cjs +0 -2
- package/dist/_shared/form-field-C4fQYsqv.cjs.map +0 -1
- package/dist/_shared/forms-BV4fHeRx.cjs +0 -2
- package/dist/_shared/forms-BV4fHeRx.cjs.map +0 -1
- package/dist/_shared/forms-DjAdYxme.js +0 -3378
- package/dist/_shared/forms-DjAdYxme.js.map +0 -1
- package/dist/_shared/header-D4Oz-mCv.cjs +0 -2
- package/dist/_shared/header-D4Oz-mCv.cjs.map +0 -1
- package/dist/_shared/header-X5DZ8vmO.js +0 -360
- package/dist/_shared/header-X5DZ8vmO.js.map +0 -1
- package/dist/_shared/heading-C7mNh03X.cjs +0 -2
- package/dist/_shared/heading-C7mNh03X.cjs.map +0 -1
- package/dist/_shared/heading-CrNpYcUr.js +0 -39
- package/dist/_shared/heading-CrNpYcUr.js.map +0 -1
- package/dist/_shared/hooks-CKXPg30g.js +0 -118
- package/dist/_shared/hooks-CKXPg30g.js.map +0 -1
- package/dist/_shared/hooks-CTiEImZp.cjs +0 -2
- package/dist/_shared/hooks-CTiEImZp.cjs.map +0 -1
- package/dist/_shared/input-Cw2uICc1.cjs +0 -2
- package/dist/_shared/input-Cw2uICc1.cjs.map +0 -1
- package/dist/_shared/input-DJo8d1Rr.js +0 -182
- package/dist/_shared/input-DJo8d1Rr.js.map +0 -1
- package/dist/_shared/item-BxlP5TO3.js +0 -224
- package/dist/_shared/item-BxlP5TO3.js.map +0 -1
- package/dist/_shared/item-X18HIqR7.cjs +0 -2
- package/dist/_shared/item-X18HIqR7.cjs.map +0 -1
- package/dist/_shared/mentions-DE9aDOMu.cjs +0 -2
- package/dist/_shared/mentions-DE9aDOMu.cjs.map +0 -1
- package/dist/_shared/mentions-DjjYmMLc.js +0 -493
- package/dist/_shared/mentions-DjjYmMLc.js.map +0 -1
- package/dist/_shared/metadata-C5MSNo7y.js +0 -236
- package/dist/_shared/metadata-C5MSNo7y.js.map +0 -1
- package/dist/_shared/metadata-Cw3Kj2Ug.cjs +0 -2
- package/dist/_shared/metadata-Cw3Kj2Ug.cjs.map +0 -1
- package/dist/_shared/money-display-B7AKxxNt.js +0 -198
- package/dist/_shared/money-display-B7AKxxNt.js.map +0 -1
- package/dist/_shared/money-display-E22wbM21.cjs +0 -2
- package/dist/_shared/money-display-E22wbM21.cjs.map +0 -1
- package/dist/_shared/navigation-B9VAXqLL.cjs +0 -2
- package/dist/_shared/navigation-B9VAXqLL.cjs.map +0 -1
- package/dist/_shared/navigation-CxoJVgfo.js +0 -420
- package/dist/_shared/navigation-CxoJVgfo.js.map +0 -1
- package/dist/_shared/overlays-C-T8RnJz.cjs +0 -2
- package/dist/_shared/overlays-C-T8RnJz.cjs.map +0 -1
- package/dist/_shared/overlays-DfRsQzD3.js +0 -633
- package/dist/_shared/overlays-DfRsQzD3.js.map +0 -1
- package/dist/_shared/page-C4jEULwi.js +0 -263
- package/dist/_shared/page-C4jEULwi.js.map +0 -1
- package/dist/_shared/page-DX3pA_tJ.cjs +0 -2
- package/dist/_shared/page-DX3pA_tJ.cjs.map +0 -1
- package/dist/_shared/popover-menu-CVAr985u.js +0 -95
- package/dist/_shared/popover-menu-CVAr985u.js.map +0 -1
- package/dist/_shared/popover-menu-Cq-LnAMh.cjs +0 -2
- package/dist/_shared/popover-menu-Cq-LnAMh.cjs.map +0 -1
- package/dist/_shared/rich-text-editor-C3gVBm-v.cjs +0 -2
- package/dist/_shared/rich-text-editor-C3gVBm-v.cjs.map +0 -1
- package/dist/_shared/rich-text-editor-Cylb-lkv.js +0 -616
- package/dist/_shared/rich-text-editor-Cylb-lkv.js.map +0 -1
- package/dist/_shared/sidebar-BeWLjIRR.js +0 -537
- package/dist/_shared/sidebar-BeWLjIRR.js.map +0 -1
- package/dist/_shared/sidebar-Bl_KRk-S.cjs +0 -2
- package/dist/_shared/sidebar-Bl_KRk-S.cjs.map +0 -1
- package/dist/_shared/sidebar-DzzdJ2xk.cjs +0 -2
- package/dist/_shared/sidebar-DzzdJ2xk.cjs.map +0 -1
- package/dist/_shared/sidebar-ux-yk-Ph.js +0 -382
- package/dist/_shared/sidebar-ux-yk-Ph.js.map +0 -1
- package/dist/_shared/smart-card-DL7esK_y.cjs +0 -2
- package/dist/_shared/smart-card-DL7esK_y.cjs.map +0 -1
- package/dist/_shared/smart-card-eBfUvQ9r.js +0 -360
- package/dist/_shared/smart-card-eBfUvQ9r.js.map +0 -1
- package/dist/_shared/spinner-Bvjs1ybK.cjs +0 -2
- package/dist/_shared/spinner-Bvjs1ybK.cjs.map +0 -1
- package/dist/_shared/spinner-XcfVYbbp.js +0 -67
- package/dist/_shared/spinner-XcfVYbbp.js.map +0 -1
- package/dist/_shared/text-DzKt9cyb.cjs +0 -2
- package/dist/_shared/text-DzKt9cyb.cjs.map +0 -1
- package/dist/_shared/text-qsEg5GdP.js +0 -74
- package/dist/_shared/text-qsEg5GdP.js.map +0 -1
- package/dist/_shared/textarea-BAKapsLQ.cjs +0 -2
- package/dist/_shared/textarea-BAKapsLQ.cjs.map +0 -1
- package/dist/_shared/textarea-Bfv1KxBm.js +0 -119
- package/dist/_shared/textarea-Bfv1KxBm.js.map +0 -1
- package/dist/_shared/typography-4CSyoCj9.js +0 -102
- package/dist/_shared/typography-4CSyoCj9.js.map +0 -1
- package/dist/_shared/typography-DKn7P4wX.cjs +0 -2
- package/dist/_shared/typography-DKn7P4wX.cjs.map +0 -1
- package/dist/_shared/ui-provider-CQJ1glwN.js +0 -85
- package/dist/_shared/ui-provider-CQJ1glwN.js.map +0 -1
- package/dist/_shared/ui-provider-RIYE7O_V.cjs +0 -2
- package/dist/_shared/ui-provider-RIYE7O_V.cjs.map +0 -1
- package/dist/components/base/table/index.cjs.map +0 -1
- package/dist/components/base/table/index.js.map +0 -1
- package/dist/showcase/assets/AreaChart-CzBEYPbz.js +0 -6
- package/dist/showcase/assets/CSPContext-ImKusJJ_.js +0 -1
- package/dist/showcase/assets/CompositeItem-C-DIOBdJ.js +0 -1
- package/dist/showcase/assets/CompositeRoot-Ce4ORgG2.js +0 -1
- package/dist/showcase/assets/DialogTrigger-DWvMs7dp.js +0 -1
- package/dist/showcase/assets/FormContext-BeC1MJpT.js +0 -1
- package/dist/showcase/assets/PreviewLayout-N1PTTyZK.js +0 -1
- package/dist/showcase/assets/RadioGroup-DAWaa26D.js +0 -1
- package/dist/showcase/assets/Separator-guDkmky0.js +0 -1
- package/dist/showcase/assets/ToolbarRootContext-BJ7hWga8.js +0 -1
- package/dist/showcase/assets/accordion-CiM9WhkT.js +0 -172
- package/dist/showcase/assets/accordion-variants-C_sHrQ7C.js +0 -1
- package/dist/showcase/assets/action-menu-mlWlGE5P.js +0 -1
- package/dist/showcase/assets/activities-YWR4wh4f.js +0 -501
- package/dist/showcase/assets/activities-feed-card-Cglnf5as.js +0 -1
- package/dist/showcase/assets/admin-BtOtzPd4.js +0 -80
- package/dist/showcase/assets/ai-8iNe0R1M.js +0 -41
- package/dist/showcase/assets/ai-artifact-CQL5krnJ.js +0 -2
- package/dist/showcase/assets/ai-chat-BzCdOOc6.js +0 -568
- package/dist/showcase/assets/ai-elements-CBHy2xWU.js +0 -379
- package/dist/showcase/assets/ai-new-CgL5NeVs.js +0 -167
- package/dist/showcase/assets/ai-tool-call-D9AsaWJF.js +0 -1
- package/dist/showcase/assets/alert-B2BuF4vZ.js +0 -59
- package/dist/showcase/assets/alert-BkVaTONJ.js +0 -1
- package/dist/showcase/assets/api-key-list-C-_59dli.js +0 -73
- package/dist/showcase/assets/app-sidebar-BdOu5rVn.js +0 -1
- package/dist/showcase/assets/arrow-down-BpVaq9-H.js +0 -1
- package/dist/showcase/assets/arrow-left-C40rxfqj.js +0 -1
- package/dist/showcase/assets/arrow-right-BclouSfP.js +0 -1
- package/dist/showcase/assets/arrow-up-BpWEnkdX.js +0 -1
- package/dist/showcase/assets/arrow-up-right-Z5sMa1HH.js +0 -1
- package/dist/showcase/assets/avatar-CDNhh3rv.js +0 -57
- package/dist/showcase/assets/avatar-QBwg3fvR.js +0 -1
- package/dist/showcase/assets/badge-check-DXDQ3SaL.js +0 -1
- package/dist/showcase/assets/badge-tAdYt--9.js +0 -28
- package/dist/showcase/assets/bell-CVEeEWw4.js +0 -1
- package/dist/showcase/assets/bot-Bcx5mNAQ.js +0 -1
- package/dist/showcase/assets/box-Dgy2Xc70.js +0 -1
- package/dist/showcase/assets/brain-DsoOsd7m.js +0 -1
- package/dist/showcase/assets/brand-DAyuXNUz.js +0 -40
- package/dist/showcase/assets/breadcrumb-CC4Z8eMY.js +0 -1
- package/dist/showcase/assets/breadcrumb-DCbAzeMs.js +0 -52
- package/dist/showcase/assets/breadcrumbs-DGZMpIoQ.js +0 -1
- package/dist/showcase/assets/briefcase-2uLXCvAZ.js +0 -1
- package/dist/showcase/assets/button-DhQ6rMPU.js +0 -44
- package/dist/showcase/assets/button-group-Ce9vnZ1H.js +0 -1
- package/dist/showcase/assets/buttons-CHja0LUL.js +0 -270
- package/dist/showcase/assets/calendar-BbiK8AMZ.js +0 -16
- package/dist/showcase/assets/calendar-BhZpIjCo.js +0 -1
- package/dist/showcase/assets/calendar-oKaDsUIy.js +0 -1
- package/dist/showcase/assets/card-DoU1VD79.js +0 -1
- package/dist/showcase/assets/cards-3OgH8m3F.js +0 -328
- package/dist/showcase/assets/chart-column-6Tn3WAT9.js +0 -1
- package/dist/showcase/assets/chevron-down-x7TQsvYY.js +0 -1
- package/dist/showcase/assets/chevron-left-CglzJgA2.js +0 -1
- package/dist/showcase/assets/chevron-right-CDDMIkYP.js +0 -1
- package/dist/showcase/assets/chevron-up-Dc3aAaGH.js +0 -1
- package/dist/showcase/assets/chevrons-up-down-DJNnSBAj.js +0 -1
- package/dist/showcase/assets/circle-BBmNFtO8.js +0 -1
- package/dist/showcase/assets/circle-alert-DJevf3tT.js +0 -1
- package/dist/showcase/assets/circle-check-BCxORlAM.js +0 -1
- package/dist/showcase/assets/circle-check-big-tiuK2w0-.js +0 -1
- package/dist/showcase/assets/circle-dot-BEVVQjgN.js +0 -1
- package/dist/showcase/assets/circle-question-mark-BQrUUiKD.js +0 -1
- package/dist/showcase/assets/circle-x-CoV_AUtZ.js +0 -1
- package/dist/showcase/assets/clock-Bn2R4aDX.js +0 -1
- package/dist/showcase/assets/code-xml-BVYp_JDX.js +0 -1
- package/dist/showcase/assets/collapsible-Co2Y739_.js +0 -27
- package/dist/showcase/assets/collapsible-DPbftgrO.js +0 -1
- package/dist/showcase/assets/combobox-Cm4__LnJ.js +0 -622
- package/dist/showcase/assets/command-DQFIxPN9.js +0 -45
- package/dist/showcase/assets/command-KNncGgZW.js +0 -1
- package/dist/showcase/assets/comment-composer-DTJtqYGP.js +0 -1
- package/dist/showcase/assets/comment-item-DIEYMmV_.js +0 -1
- package/dist/showcase/assets/comments-B0BbDp-3.js +0 -357
- package/dist/showcase/assets/commerce-BOWBCLA-.js +0 -79
- package/dist/showcase/assets/commerce-extras-C6CWYfpC.js +0 -173
- package/dist/showcase/assets/composite-YicTVAO0.js +0 -1
- package/dist/showcase/assets/contact-card-DQPRIlnJ.js +0 -65
- package/dist/showcase/assets/content-container-CHXwWViz.js +0 -1
- package/dist/showcase/assets/copyable-CjTwco9O.js +0 -96
- package/dist/showcase/assets/course-card-CTQScd2C.js +0 -113
- package/dist/showcase/assets/cpu-D52NjUWq.js +0 -1
- package/dist/showcase/assets/credit-card-BoDfW0R8.js +0 -1
- package/dist/showcase/assets/currency-BPREbpDA.js +0 -149
- package/dist/showcase/assets/dark-surfaces-BCG45K2m.js +0 -90
- package/dist/showcase/assets/database-DeGR0hed.js +0 -1
- package/dist/showcase/assets/date-block-Bl1kXJrM.js +0 -1
- package/dist/showcase/assets/date-picker-BHbZa4ML.js +0 -1
- package/dist/showcase/assets/date-pickers-DumwUEXE.js +0 -110
- package/dist/showcase/assets/dense-info-DxfgBw9Z.js +0 -106
- package/dist/showcase/assets/dialog-BYHZvlL8.js +0 -1
- package/dist/showcase/assets/display-BXMGOjL3.js +0 -392
- package/dist/showcase/assets/dollar-sign-BipUTVXC.js +0 -1
- package/dist/showcase/assets/download-CxspQgIc.js +0 -1
- package/dist/showcase/assets/dropdown-menu-Q1BV3wPP.js +0 -1
- package/dist/showcase/assets/dropzone-OivkuTPF.js +0 -1
- package/dist/showcase/assets/ellipsis-Bn-XgoA7.js +0 -1
- package/dist/showcase/assets/ellipsis-vertical-Bcl9HX9k.js +0 -1
- package/dist/showcase/assets/empty-CcafLcw-.js +0 -1
- package/dist/showcase/assets/empty-item-CiJeS8ZV.js +0 -49
- package/dist/showcase/assets/empty-state-B1RYYjUP.js +0 -188
- package/dist/showcase/assets/enhanced-activities-IB811DS6.js +0 -361
- package/dist/showcase/assets/event-calendar-C2VCfcUz.js +0 -138
- package/dist/showcase/assets/event-log-ckmsCPmG.js +0 -330
- package/dist/showcase/assets/example-C6-_Sy6B.js +0 -1
- package/dist/showcase/assets/external-link-Bg-_8Uq7.js +0 -1
- package/dist/showcase/assets/eye-JVsUA85G.js +0 -1
- package/dist/showcase/assets/feature-announcement-C4aRXesF.js +0 -34
- package/dist/showcase/assets/file-4pOq58jl.js +0 -1
- package/dist/showcase/assets/file-text-BIi71mZ1.js +0 -1
- package/dist/showcase/assets/filters-CxrcnmLU.js +0 -78
- package/dist/showcase/assets/flag-DeiJmomk.js +0 -1
- package/dist/showcase/assets/folder-open-zMXBpVNs.js +0 -1
- package/dist/showcase/assets/form-sizing-B8jbL5tL.js +0 -1
- package/dist/showcase/assets/format-BG4laCmp.js +0 -1
- package/dist/showcase/assets/format-metric-value-B94EDo8X.js +0 -1
- package/dist/showcase/assets/forms-PsN5zTLx.js +0 -793
- package/dist/showcase/assets/getPseudoElementBounds-B7wr19E1.js +0 -1
- package/dist/showcase/assets/gift-CKFIh1Wh.js +0 -1
- package/dist/showcase/assets/giftcard-cards-BfOlIHmA.js +0 -85
- package/dist/showcase/assets/git-branch-BO9i8XkJ.js +0 -1
- package/dist/showcase/assets/global-search-CNmUraNa.js +0 -90
- package/dist/showcase/assets/global-search-DkJkQ0Vs.js +0 -1
- package/dist/showcase/assets/globe-47T22W56.js +0 -1
- package/dist/showcase/assets/gradient-card-CXSY29TZ.js +0 -58
- package/dist/showcase/assets/header-eZHN-s6P.js +0 -1
- package/dist/showcase/assets/header-notifications-Caa9i87J.js +0 -1
- package/dist/showcase/assets/heart-DjKkkUsX.js +0 -1
- package/dist/showcase/assets/house-DKxCiHyB.js +0 -1
- package/dist/showcase/assets/icon-badge-Bcm8TlJi.js +0 -1
- package/dist/showcase/assets/image-r-gMI33G.js +0 -1
- package/dist/showcase/assets/inbox-ZxSy1pgX.js +0 -1
- package/dist/showcase/assets/index-B8DVXCmf.js +0 -10
- package/dist/showcase/assets/index-DbLs6mcj.css +0 -2
- package/dist/showcase/assets/inertValue-i0cAMG-0.js +0 -1
- package/dist/showcase/assets/info-B1KV2DkO.js +0 -1
- package/dist/showcase/assets/inline-stat-D0sE-A4C.js +0 -1
- package/dist/showcase/assets/input-25epjsiD.js +0 -1
- package/dist/showcase/assets/input-CnwMt9Sr.js +0 -1
- package/dist/showcase/assets/input-group-DSKyV7we.js +0 -47
- package/dist/showcase/assets/input-group-x5eWeAZg.js +0 -1
- package/dist/showcase/assets/inputs-B2Maxr14.js +0 -49
- package/dist/showcase/assets/invoice-header-Gxl--yFu.js +0 -36
- package/dist/showcase/assets/invoice-items-BtoaGNjE.js +0 -36
- package/dist/showcase/assets/invoice-mini-DHFSZegy.js +0 -14
- package/dist/showcase/assets/invoice-table-6dmU_KrL.js +0 -30
- package/dist/showcase/assets/isSameDay-BrDHfKHm.js +0 -1
- package/dist/showcase/assets/isToday-VtoSc1IH.js +0 -1
- package/dist/showcase/assets/italic-CXkAsf6H.js +0 -1
- package/dist/showcase/assets/item-CGOThKAx.js +0 -1
- package/dist/showcase/assets/item-CMRbW6s-.js +0 -1
- package/dist/showcase/assets/item-sw6fAZcn.js +0 -117
- package/dist/showcase/assets/kanban-CKGYTXji.js +0 -175
- package/dist/showcase/assets/label-BmKD22pm.js +0 -1
- package/dist/showcase/assets/layout-app-shell-CeMHzVNn.js +0 -501
- package/dist/showcase/assets/layout-containers-8Drow5f9.js +0 -96
- package/dist/showcase/assets/layout-header-BlBw4JAV.js +0 -170
- package/dist/showcase/assets/layout-page-BQfgHFau.js +0 -122
- package/dist/showcase/assets/layout-sidebar-DZer5Uuh.js +0 -224
- package/dist/showcase/assets/layout-users-nuioUkeu.js +0 -104
- package/dist/showcase/assets/lock-DQcZ9cEj.js +0 -1
- package/dist/showcase/assets/mail-yNXDtmNr.js +0 -1
- package/dist/showcase/assets/map-JMM1F9VR.js +0 -124
- package/dist/showcase/assets/map-pin-2WS7oVo3.js +0 -1
- package/dist/showcase/assets/menus-mK-FeNki.js +0 -89
- package/dist/showcase/assets/message-square-DGTAjNJG.js +0 -1
- package/dist/showcase/assets/metadata-list-CBxuQjVO.js +0 -278
- package/dist/showcase/assets/metric-BWGrmyD6.js +0 -1
- package/dist/showcase/assets/metric-grid-CewIJQvo.js +0 -1
- package/dist/showcase/assets/metric-trend-chip-kLBN8u5z.js +0 -1
- package/dist/showcase/assets/metrics-analytics-bar-COnc7VN9.js +0 -44
- package/dist/showcase/assets/metrics-analytics-cards-BR83UVqi.js +0 -77
- package/dist/showcase/assets/metrics-comparison-C0SUjdMg.js +0 -76
- package/dist/showcase/assets/metrics-heatmap-Orq1hLk-.js +0 -27
- package/dist/showcase/assets/metrics-inline-badge-C924q2Xx.js +0 -17
- package/dist/showcase/assets/metrics-kpi-row-Cwi05ruK.js +0 -31
- package/dist/showcase/assets/metrics-micro-grid-D97nkrge.js +0 -42
- package/dist/showcase/assets/metrics-overview-BOc8y3QX.js +0 -192
- package/dist/showcase/assets/metrics-stat-cards-Cilh-A5D.js +0 -54
- package/dist/showcase/assets/minus-DvrDGcTv.js +0 -1
- package/dist/showcase/assets/money-display-0egZ_O76.js +0 -1
- package/dist/showcase/assets/month-year-picker-2cWfwnmP.js +0 -1
- package/dist/showcase/assets/navigation-BnYme-Wj.js +0 -90
- package/dist/showcase/assets/navigation-CLQWl32A.js +0 -230
- package/dist/showcase/assets/navigation-extras-BPDoAdXF.js +0 -43
- package/dist/showcase/assets/onboarding-checklist-26XVWgDF.js +0 -119
- package/dist/showcase/assets/overlays-2sVGhanu.js +0 -88
- package/dist/showcase/assets/overlays-BaR6HDwB.js +0 -394
- package/dist/showcase/assets/package-CUNvdlBi.js +0 -1
- package/dist/showcase/assets/page-action-button-DgvZVtzx.js +0 -1
- package/dist/showcase/assets/page-header-4F_iaFPW.js +0 -1
- package/dist/showcase/assets/pagination-CDjZ6jiZ.js +0 -42
- package/dist/showcase/assets/pagination-g1NQaN42.js +0 -1
- package/dist/showcase/assets/paperclip-CDxdf8Os.js +0 -1
- package/dist/showcase/assets/pencil-Ddc5JwBe.js +0 -1
- package/dist/showcase/assets/phone-NIZ5SwgK.js +0 -1
- package/dist/showcase/assets/plus-C9kwz7rW.js +0 -1
- package/dist/showcase/assets/popover-DtnuOBgr.js +0 -1
- package/dist/showcase/assets/popover-T85aV4zW.js +0 -1
- package/dist/showcase/assets/popover-menu-BRGSZe4f.js +0 -1
- package/dist/showcase/assets/progress-CcZjuzK3.js +0 -1
- package/dist/showcase/assets/progress-DbouniUl.js +0 -18
- package/dist/showcase/assets/props-table-CM_1cocj.js +0 -1
- package/dist/showcase/assets/props.generated-Bg627Jai.json +0 -32829
- package/dist/showcase/assets/quote-vjygm2-7.js +0 -1
- package/dist/showcase/assets/receipt-CfMgwFPl.js +0 -1
- package/dist/showcase/assets/refresh-cw-Tu5E_cGA.js +0 -1
- package/dist/showcase/assets/resolveAriaLabelledBy-B6CR9UP2.js +0 -1
- package/dist/showcase/assets/resolveValueLabel-CipUZh6i.js +0 -1
- package/dist/showcase/assets/rich-text-editor-BMZUyuQX.js +0 -143
- package/dist/showcase/assets/rich-text-editor-HwYIeWYW.js +0 -124
- package/dist/showcase/assets/rotate-ccw-B4Wi4ws7.js +0 -1
- package/dist/showcase/assets/scroll-area-CuB_woqF.js +0 -1
- package/dist/showcase/assets/scroll-area-I4mSIpRq.js +0 -32
- package/dist/showcase/assets/select-CF3cKjCo.js +0 -1
- package/dist/showcase/assets/send-Blu_n6xl.js +0 -1
- package/dist/showcase/assets/separator-9mrRf_DZ.js +0 -28
- package/dist/showcase/assets/separator-DUKleOvU.js +0 -1
- package/dist/showcase/assets/settings-DlKX-bZT.js +0 -1
- package/dist/showcase/assets/sheet-CwcLVoF3.js +0 -1
- package/dist/showcase/assets/shield-BD0Y8Jj3.js +0 -1
- package/dist/showcase/assets/shield-alert-DNOTmkwG.js +0 -1
- package/dist/showcase/assets/shield-check-Sbul0dUK.js +0 -1
- package/dist/showcase/assets/shopping-bag-EDVpxI9n.js +0 -1
- package/dist/showcase/assets/sidebar-JWZ88xw5.js +0 -1
- package/dist/showcase/assets/sidebar.context-D3P7qppn.js +0 -1
- package/dist/showcase/assets/skeleton-CIS1Kaas.js +0 -1
- package/dist/showcase/assets/skeleton-CJCJDQFt.js +0 -29
- package/dist/showcase/assets/smart-card-7szg_qSt.js +0 -1
- package/dist/showcase/assets/sonner-DMHXr9Ce.js +0 -22
- package/dist/showcase/assets/sortable.esm-DVuzVA1U.js +0 -5
- package/dist/showcase/assets/sparkles-BEa1AgNq.js +0 -1
- package/dist/showcase/assets/spinner-Bi-T9etI.js +0 -30
- package/dist/showcase/assets/spinner-C77XIUVf.js +0 -1
- package/dist/showcase/assets/spinner-DK9BAT6K.js +0 -49
- package/dist/showcase/assets/square-pen-N0mq-vPu.js +0 -1
- package/dist/showcase/assets/stacked-avatars-DORVEni2.js +0 -1
- package/dist/showcase/assets/star-Dbtxr60S.js +0 -1
- package/dist/showcase/assets/startOfDay-BJgxz4yq.js +0 -1
- package/dist/showcase/assets/styles-CwW4IBUg.js +0 -1
- package/dist/showcase/assets/switch-B4iRxZFU.js +0 -1
- package/dist/showcase/assets/switch-B_rnbXwy.js +0 -1
- package/dist/showcase/assets/table-BJ9HSK6H.js +0 -1
- package/dist/showcase/assets/table-IB0MEYf4.js +0 -389
- package/dist/showcase/assets/tabs-D02JL-Fa.js +0 -1
- package/dist/showcase/assets/tabs-XpsVS3ff.js +0 -19
- package/dist/showcase/assets/text-button-BWCgXGnr.js +0 -1
- package/dist/showcase/assets/text-link-TzuDnSCF.js +0 -1
- package/dist/showcase/assets/textarea-B7DUIiH_.js +0 -1
- package/dist/showcase/assets/textarea-CV5gNzXf.js +0 -1
- package/dist/showcase/assets/timelines-CF0UYhwm.js +0 -200
- package/dist/showcase/assets/toggle-group-CK8mBx6E.js +0 -1
- package/dist/showcase/assets/toggles-CqJSApnF.js +0 -71
- package/dist/showcase/assets/toggles-group-v0JijMzG.js +0 -32
- package/dist/showcase/assets/trash-2-_xF5j-Ya.js +0 -1
- package/dist/showcase/assets/trending-up-BCzmjYzm.js +0 -1
- package/dist/showcase/assets/truck-CryH-5dx.js +0 -1
- package/dist/showcase/assets/typography-D3PFbRpb.js +0 -215
- package/dist/showcase/assets/ui-badge-ByyFPLOB.js +0 -28
- package/dist/showcase/assets/ui-card-DYLLiD89.js +0 -30
- package/dist/showcase/assets/ui-table-DW4QIwxK.js +0 -42
- package/dist/showcase/assets/upload-tray-ZdL_dzc0.js +0 -138
- package/dist/showcase/assets/useAnchoredPopupScrollLock-AFPLx3SZ.js +0 -1
- package/dist/showcase/assets/useCollapsiblePanel-CeHRY8U2.js +0 -1
- package/dist/showcase/assets/useCompositeItem-C-1zP8zD.js +0 -1
- package/dist/showcase/assets/useCompositeListItem-D4ugfKLB.js +0 -1
- package/dist/showcase/assets/useControlled-Cpg8gDqb.js +0 -1
- package/dist/showcase/assets/useLabelableId-CSxAHpU-.js +0 -1
- package/dist/showcase/assets/useOpenInteractionType-BLV8Pa2n.js +0 -1
- package/dist/showcase/assets/useRender-DparzvOu.js +0 -1
- package/dist/showcase/assets/useTriggerFocusGuards-CrYLO2g5.js +0 -1
- package/dist/showcase/assets/useValueChanged-DwgbaueK.js +0 -1
- package/dist/showcase/assets/user-CGcV8Ppb.js +0 -1
- package/dist/showcase/assets/user-plus-iOsntM6P.js +0 -1
- package/dist/showcase/assets/users-DzgXeZbf.js +0 -1
- package/dist/showcase/assets/valueToPercent-B5BHWU68.js +0 -1
- package/dist/showcase/assets/vendor-profile-DbFPkGn9.js +0 -37
- package/dist/showcase/assets/wrench-1Ra9xb3d.js +0 -1
- package/dist/showcase/assets/x-CE8oevyh.js +0 -1
- package/dist/showcase/assets/zap-se3n2YVD.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/features/global-search/global-search.strings.ts","../../../../src/components/features/global-search/hooks/use-global-search.ts","../../../../src/components/features/global-search/partials/global-search-empty-state.tsx","../../../../src/components/features/global-search/partials/global-search-footer.tsx","../../../../src/components/features/global-search/partials/global-search-idle-state.tsx","../../../../src/components/features/global-search/partials/global-search-input.tsx","../../../../src/components/features/global-search/partials/tone-palettes.ts","../../../../src/components/features/global-search/partials/global-search-result-row.tsx","../../../../src/components/ui/tabs.tsx","../../../../src/components/features/global-search/partials/global-search-tabs.tsx","../../../../src/components/features/global-search/global-search.tsx"],"sourcesContent":["/**\n * Strings for `GlobalSearch` and its partials. Consumers override via the\n * `strings` prop on `<GlobalSearch />`; values are deep-merged over these\n * defaults so partial overrides are safe.\n */\nexport interface GlobalSearchStrings {\n /** Placeholder copy for the search input. */\n placeholder: string;\n /** aria-label for the clear-search icon button. */\n clear: string;\n /** Loading-state copy. */\n loading: string;\n /** Empty-state title — uses {{query}} as a placeholder. */\n emptyTitle: string;\n /** Empty-state body copy. */\n emptyHint: string;\n /** Idle-state heading for \"Recent\" suggestions. */\n idleRecent: string;\n /** Idle-state heading for curated \"Suggestions\". */\n idleSuggestions: string;\n /** Tab label for the \"All\" tab. */\n tabAll: string;\n /** Footer \"navigate\" hint. */\n footerNavigate: string;\n /** Footer \"open\" hint. */\n footerOpen: string;\n /** Footer \"close\" hint. */\n footerClose: string;\n /** Trailing N results count. */\n resultsCount: string;\n /** \"See all\" group action — jumps to that tab. */\n seeAll: string;\n}\n\nexport const defaultGlobalSearchStrings: GlobalSearchStrings = {\n placeholder: 'Search…',\n clear: 'Clear search',\n loading: 'Searching…',\n emptyTitle: 'No results for \"{{query}}\"',\n emptyHint: 'Try a shorter keyword or check the spelling.',\n idleRecent: 'Recent',\n idleSuggestions: 'Suggestions',\n tabAll: 'All',\n footerNavigate: 'navigate',\n footerOpen: 'open',\n footerClose: 'close',\n resultsCount: '{{count}} results',\n seeAll: 'See all',\n};\n\n/** Replace `{{key}}` tokens with values from `params`. */\nexport function interpolateString(\n template: string,\n params: Record<string, string | number>,\n): string {\n return template.replace(/\\{\\{\\s*(\\w+)\\s*\\}\\}/g, (match, key) => {\n const v = params[key];\n return v === undefined ? match : String(v);\n });\n}\n","/**\n * useGlobalSearch — headless state machine for `<GlobalSearch />`.\n *\n * Owns the active-row index, active tab, and the keyboard-navigation\n * handler. Returns the derived flat list (results filtered by tab) so\n * consumers can render entirely custom UIs against the same state.\n *\n * Usage:\n * const search = useGlobalSearch({ results, query });\n * <input onKeyDown={search.onKeyDown} />\n * {search.flat.map((r, i) => <Row active={i === search.activeIdx} … />)}\n */\nimport { useEffect, useMemo, useRef, useState } from 'react';\n\nimport type { GlobalSearchResult } from '../global-search.types';\n\nexport interface UseGlobalSearchOptions<TGroup extends string = string> {\n results: ReadonlyArray<GlobalSearchResult<TGroup>>;\n query: string;\n /** Fires when the user activates a row (Enter or click). */\n onResultSelect?: (result: GlobalSearchResult<TGroup>) => void;\n /** Fires when the user presses Escape. */\n onClose?: () => void;\n}\n\nexport interface UseGlobalSearchReturn<TGroup extends string = string> {\n /** Results bucketed by group, in insertion order. */\n grouped: Record<string, GlobalSearchResult<TGroup>[]>;\n /** Result count per tab (`all` plus each group key). */\n tabCounts: Record<string, number>;\n /** Currently-selected tab. */\n activeTab: 'all' | TGroup;\n /** Set the active tab — also resets the active index. */\n setActiveTab: (tab: 'all' | TGroup) => void;\n /** Filtered grouped map respecting the active tab. */\n visibleGrouped: Record<string, GlobalSearchResult<TGroup>[]>;\n /** Flat ordered list matching what is currently rendered. */\n flat: GlobalSearchResult<TGroup>[];\n /** Index into `flat` of the currently-highlighted row. */\n activeIdx: number;\n setActiveIdx: (i: number) => void;\n /** Programmatically activate a result by id. */\n setActiveById: (id: string) => void;\n /** Bind to the search input's `onKeyDown` for arrow / enter / escape support. */\n onKeyDown: (e: React.KeyboardEvent) => void;\n /** Activate the row at `activeIdx`. */\n selectActive: () => void;\n}\n\nexport function useGlobalSearch<TGroup extends string = string>({\n results,\n query,\n onResultSelect,\n onClose,\n}: UseGlobalSearchOptions<TGroup>): UseGlobalSearchReturn<TGroup> {\n const [activeTab, setActiveTabState] =\n useState<'all' | TGroup>('all');\n const [activeIdx, setActiveIdx] = useState(0);\n\n // Reset both the active row and the active tab when the query changes\n // (so a fresh query never inherits a stale highlight or filter).\n useEffect(() => {\n setActiveTabState('all');\n setActiveIdx(0);\n }, [query]);\n\n const grouped = useMemo(() => {\n const buckets: Record<string, GlobalSearchResult<TGroup>[]> = {};\n for (const r of results) {\n (buckets[r.group] ??= []).push(r);\n }\n return buckets;\n }, [results]);\n\n const tabCounts = useMemo(() => {\n const counts: Record<string, number> = { all: results.length };\n for (const [k, v] of Object.entries(grouped)) counts[k] = v.length;\n return counts;\n }, [results.length, grouped]);\n\n const visibleGrouped = useMemo(() => {\n if (activeTab === 'all') return grouped;\n const sub = grouped[activeTab as string];\n return sub ? ({ [activeTab as string]: sub } as Record<string, GlobalSearchResult<TGroup>[]>) : {};\n }, [grouped, activeTab]);\n\n const flat = useMemo(() => {\n if (activeTab === 'all') return results.slice();\n return grouped[activeTab as string] ?? [];\n }, [activeTab, grouped, results]);\n\n const activeIdxRef = useRef(activeIdx);\n activeIdxRef.current = activeIdx;\n const flatRef = useRef(flat);\n flatRef.current = flat;\n\n const setActiveTab = (tab: 'all' | TGroup) => {\n setActiveTabState(tab);\n setActiveIdx(0);\n };\n\n const setActiveById = (id: string) => {\n const idx = flatRef.current.findIndex((r) => r.id === id);\n if (idx >= 0) setActiveIdx(idx);\n };\n\n const selectActive = () => {\n const item = flatRef.current[activeIdxRef.current];\n if (item) onResultSelect?.(item);\n };\n\n const onKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n setActiveIdx((i) => Math.min(i + 1, flatRef.current.length - 1));\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n setActiveIdx((i) => Math.max(i - 1, 0));\n } else if (e.key === 'Enter') {\n const item = flatRef.current[activeIdxRef.current];\n if (item) {\n e.preventDefault();\n onResultSelect?.(item);\n }\n } else if (e.key === 'Escape') {\n onClose?.();\n }\n };\n\n return {\n grouped,\n tabCounts,\n activeTab,\n setActiveTab,\n visibleGrouped,\n flat,\n activeIdx,\n setActiveIdx,\n setActiveById,\n onKeyDown,\n selectActive,\n };\n}\n","/**\n * Default empty-state body — shown when the query yields no results.\n * Override entirely via `slots.empty`.\n */\nimport { Search } from 'lucide-react';\n\nimport { Text } from '@/components/typography';\n\nexport interface GlobalSearchEmptyStateProps {\n title: string;\n hint: string;\n}\n\nexport function GlobalSearchEmptyState({ title, hint }: GlobalSearchEmptyStateProps) {\n return (\n <div className=\"px-6 py-12 text-center\">\n <div className=\"mx-auto mb-3 inline-flex size-10 items-center justify-center rounded-full bg-muted/60\">\n <Search className=\"size-4 text-muted-foreground\" aria-hidden=\"true\" />\n </div>\n <Text weight=\"medium\">\n {title}\n </Text>\n <Text size=\"xs\" type=\"secondary\" className=\"mt-1\">\n {hint}\n </Text>\n </div>\n );\n}\n","/**\n * GlobalSearchFooter — keyboard-hint strip below the result list.\n * Override entirely via `slots.footer`.\n */\nimport { Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nconst KBD_CLASS =\n 'rounded border border-border bg-muted/40 px-1.5 py-0.5 font-mono text-xs leading-none text-muted-foreground';\n\nexport interface GlobalSearchFooterProps {\n navigateLabel: string;\n openLabel: string;\n closeLabel: string;\n /** Trailing right-aligned content (e.g. \"3 results\"). */\n trailing?: React.ReactNode;\n className?: string;\n}\n\nexport function GlobalSearchFooter({\n navigateLabel,\n openLabel,\n closeLabel,\n trailing,\n className,\n}: GlobalSearchFooterProps) {\n return (\n <div\n className={cn(\n 'flex items-center justify-between border-t border-border/60 px-4 py-2',\n className,\n )}\n >\n <span className=\"flex items-center gap-2\">\n <kbd className={KBD_CLASS}>↑↓</kbd>\n <Text tag=\"span\" size=\"xxs\" type=\"secondary\">\n {navigateLabel}\n </Text>\n <kbd className={KBD_CLASS}>↵</kbd>\n <Text tag=\"span\" size=\"xxs\" type=\"secondary\">\n {openLabel}\n </Text>\n <kbd className={KBD_CLASS}>esc</kbd>\n <Text tag=\"span\" size=\"xxs\" type=\"secondary\">\n {closeLabel}\n </Text>\n </span>\n {trailing}\n </div>\n );\n}\n","/**\n * Default idle-state body — shown when the query is too short.\n * Renders consumer-supplied \"Recent\" + \"Suggestions\" sections.\n */\nimport { Clock, Search, Sparkles } from 'lucide-react';\nimport * as React from 'react';\n\nimport { Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nimport type { GlobalSearchIdleSection } from '../global-search.types';\n\nexport interface GlobalSearchIdleStateProps {\n sections: ReadonlyArray<GlobalSearchIdleSection>;\n /** Optional override for the heading icon when missing on a section. */\n fallbackIcons?: { recent?: React.ElementType; suggestions?: React.ElementType };\n}\n\nexport function GlobalSearchIdleState({\n sections,\n fallbackIcons,\n}: GlobalSearchIdleStateProps) {\n return (\n <div className=\"space-y-4 px-2 py-3\">\n {sections.map((section, idx) => {\n const HeadingIcon =\n section.icon ??\n (idx === 0\n ? fallbackIcons?.recent ?? Clock\n : fallbackIcons?.suggestions ?? Sparkles);\n return (\n <div key={section.id}>\n <div className=\"flex items-center gap-2 px-3 pb-1.5\">\n <HeadingIcon\n className=\"size-3.5 text-muted-foreground\"\n aria-hidden=\"true\"\n />\n <Text\n size=\"xxs\"\n type=\"secondary\"\n weight=\"medium\"\n className=\"uppercase tracking-wider\"\n >\n {section.label}\n </Text>\n </div>\n <ul className=\"space-y-0.5\">\n {section.items.map((item) => {\n const ItemIcon = item.icon ?? Search;\n return (\n <li key={item.id}>\n <button\n type=\"button\"\n onClick={item.onSelect}\n className={cn(\n 'flex w-full items-center gap-3 rounded-md px-3 py-1.5 text-left transition-colors',\n 'hover:bg-muted/50 focus-visible:bg-muted/50 focus-visible:outline-none',\n )}\n >\n <ItemIcon\n className=\"size-3.5 text-muted-foreground\"\n aria-hidden=\"true\"\n />\n <Text className=\"flex-1 truncate\">\n {item.label}\n </Text>\n </button>\n </li>\n );\n })}\n </ul>\n </div>\n );\n })}\n </div>\n );\n}\n","/**\n * GlobalSearchInput — search row at the top of the popover.\n *\n * Just the input + clear button + optional loading spinner. Keyboard\n * navigation is handled by the consumer wiring `useGlobalSearch`'s\n * `onKeyDown` handler.\n */\nimport { Loader2, Search, X } from 'lucide-react';\nimport * as React from 'react';\n\nexport interface GlobalSearchInputProps {\n value: string;\n onChange: (value: string) => void;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n placeholder?: string;\n clearLabel?: string;\n loading?: boolean;\n autoFocus?: boolean;\n}\n\nexport const GlobalSearchInput = React.forwardRef<HTMLInputElement, GlobalSearchInputProps>(\n function GlobalSearchInput(\n {\n value,\n onChange,\n onKeyDown,\n placeholder,\n clearLabel = 'Clear search',\n loading = false,\n autoFocus = false,\n },\n ref,\n ) {\n const innerRef = React.useRef<HTMLInputElement | null>(null);\n React.useImperativeHandle(ref, () => innerRef.current as HTMLInputElement);\n\n React.useEffect(() => {\n if (autoFocus) innerRef.current?.focus();\n }, [autoFocus]);\n\n return (\n <div className=\"flex items-center gap-3 border-b border-border px-4 py-3\">\n <Search className=\"size-4 shrink-0 text-muted-foreground\" aria-hidden=\"true\" />\n <input\n ref={innerRef}\n type=\"text\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={onKeyDown}\n placeholder={placeholder}\n aria-label={placeholder}\n autoComplete=\"off\"\n spellCheck={false}\n className=\"flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground\"\n />\n {loading && (\n <Loader2\n className=\"size-4 shrink-0 animate-spin text-muted-foreground\"\n aria-hidden=\"true\"\n />\n )}\n {!loading && !!value && (\n <button\n type=\"button\"\n onClick={() => onChange('')}\n aria-label={clearLabel}\n className=\"inline-flex size-6 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <X className=\"size-3.5\" />\n </button>\n )}\n </div>\n );\n },\n);\n","/**\n * Default tone palettes for thumbnails and avatars.\n *\n * Consumers can override per-call via `slots.toneBg` / `slots.toneAvatar`.\n */\nimport type { GlobalSearchTone } from '../global-search.types';\n\nexport const DEFAULT_TONE_BG: Record<GlobalSearchTone, string> = {\n primary: 'bg-primary/10 text-primary',\n success: 'bg-success/15 text-success',\n warning: 'bg-warning/20 text-warning-foreground',\n info: 'bg-info/15 text-info',\n destructive: 'bg-destructive/15 text-destructive',\n default: 'bg-muted text-muted-foreground',\n};\n\nexport const DEFAULT_TONE_AVATAR: Record<GlobalSearchTone, string> = {\n primary: 'bg-primary/15 text-primary',\n success: 'bg-success/15 text-success',\n warning: 'bg-warning/20 text-warning-foreground',\n info: 'bg-info/15 text-info',\n destructive: 'bg-destructive/15 text-destructive',\n default: 'bg-muted text-muted-foreground',\n};\n","/**\n * GlobalSearchResultRow — single rich result card.\n *\n * Layout: [thumbnail] [title + status pill / muted secondary line / meta] [right-value column] [chevron].\n *\n * Exported as a partial so consumers can:\n * 1. Override an individual row via `slots.renderResult` and reuse this component for the others.\n * 2. Use it standalone in custom search UIs that don't need the full GlobalSearch shell.\n */\nimport { ArrowRight } from 'lucide-react';\nimport * as React from 'react';\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/base/display/avatar';\nimport { Badge } from '@/components/base/badge';\nimport { Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nimport type {\n GlobalSearchResult,\n GlobalSearchTone,\n} from '../global-search.types';\nimport {\n DEFAULT_TONE_AVATAR,\n DEFAULT_TONE_BG,\n} from './tone-palettes';\n\nexport interface GlobalSearchResultRowProps<TGroup extends string = string> {\n result: GlobalSearchResult<TGroup>;\n /** Highlighted via keyboard nav. */\n isActive?: boolean;\n query?: string;\n onSelect?: () => void;\n onMouseEnter?: () => void;\n /** Override tone palette. Keys not provided fall back to defaults. */\n toneBg?: Partial<Record<GlobalSearchTone, string>>;\n toneAvatar?: Partial<Record<GlobalSearchTone, string>>;\n className?: string;\n}\n\nfunction highlightMatch(text: string, query: string | undefined): React.ReactNode {\n const q = (query ?? '').trim();\n if (!q) return text;\n const lower = text.toLowerCase();\n const ql = q.toLowerCase();\n const i = lower.indexOf(ql);\n if (i < 0) return text;\n return (\n <>\n {text.slice(0, i)}\n <mark className=\"rounded-sm bg-warning/40 px-0.5 text-foreground\">\n {text.slice(i, i + q.length)}\n </mark>\n {text.slice(i + q.length)}\n </>\n );\n}\n\nexport function GlobalSearchResultRow<TGroup extends string = string>({\n result,\n isActive = false,\n query = '',\n onSelect,\n onMouseEnter,\n toneBg,\n toneAvatar,\n className,\n}: GlobalSearchResultRowProps<TGroup>) {\n const ThumbIcon = result.thumbnail?.icon;\n const bg = { ...DEFAULT_TONE_BG, ...toneBg };\n const av = { ...DEFAULT_TONE_AVATAR, ...toneAvatar };\n\n return (\n <button\n type=\"button\"\n onMouseEnter={onMouseEnter}\n onClick={onSelect}\n className={cn(\n 'group/row relative flex w-full items-center gap-3 rounded-lg px-3 py-(--row-py) text-left transition-colors',\n 'focus-visible:outline-none',\n isActive ? 'bg-muted/60' : 'hover:bg-muted/40',\n className,\n )}\n >\n {/* Thumbnail / Avatar */}\n <div className=\"flex shrink-0 items-center\">\n {result.avatar ? (\n <Avatar className={cn('size-8', av[result.avatar.tone ?? 'default'])}>\n {result.avatar.src && (\n <AvatarImage src={result.avatar.src} alt={result.title} />\n )}\n <AvatarFallback\n className={cn('text-xs font-semibold', av[result.avatar.tone ?? 'default'])}\n >\n {result.avatar.initials}\n </AvatarFallback>\n </Avatar>\n ) : ThumbIcon ? (\n <span\n className={cn(\n 'inline-flex size-8 items-center justify-center rounded-md',\n bg[result.thumbnail?.tone ?? 'default'],\n )}\n >\n <ThumbIcon className=\"size-4\" aria-hidden=\"true\" />\n </span>\n ) : null}\n </div>\n\n {/* Body */}\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2 leading-tight\">\n <Text tag=\"span\" weight=\"semibold\" className=\"truncate\">\n {highlightMatch(result.title, query)}\n </Text>\n {!!result.badge && (\n <Badge\n variant={\n result.badge.tone === 'destructive'\n ? 'error'\n : result.badge.tone\n }\n >\n {result.badge.label}\n </Badge>\n )}\n </div>\n {(() => {\n const pieces: Array<{ key: string; node: React.ReactNode }> = [];\n if (result.subtitle)\n pieces.push({\n key: 'subtitle',\n node: <span>{highlightMatch(result.subtitle, query)}</span>,\n });\n result.meta?.forEach((m, i) => {\n const Icon = m.icon;\n pieces.push({\n key: `m-${i}`,\n node: (\n <span\n className={cn(\n 'inline-flex items-center gap-1',\n m.mono && 'font-mono tabular-nums',\n )}\n >\n {!!Icon && <Icon className=\"size-3 shrink-0\" aria-hidden=\"true\" />}\n {m.label}\n </span>\n ),\n });\n });\n if (result.timestamp)\n pieces.push({\n key: 'ts',\n node: <span className=\"tabular-nums\">{result.timestamp}</span>,\n });\n result.tags?.forEach((tag) =>\n pieces.push({ key: `t-${tag}`, node: <span>{tag}</span> }),\n );\n if (result.rightValue) {\n pieces.push({\n key: 'rv',\n node: (\n <span className=\"font-medium tabular-nums text-foreground\">\n {result.rightValue}\n {!!result.rightLabel && (\n <span className=\"ml-1 font-normal text-muted-foreground\">\n {result.rightLabel.toLowerCase()}\n </span>\n )}\n </span>\n ),\n });\n }\n if (pieces.length === 0) return null;\n return (\n <Text size=\"xs\" type=\"secondary\" className=\"mt-0.5 truncate\">\n {pieces.map((p, i) => (\n <span key={p.key}>\n {i > 0 && (\n <span\n aria-hidden=\"true\"\n className=\"mx-1.5 text-muted-foreground/60\"\n >\n ·\n </span>\n )}\n {p.node}\n </span>\n ))}\n </Text>\n );\n })()}\n </div>\n\n {/* Right value column — only when value/label set */}\n {!!(result.rightValue || result.rightLabel) && (\n <div className=\"hidden shrink-0 items-center self-stretch border-l border-border/60 pl-3 md:flex\">\n <div className=\"flex flex-col items-end gap-0 text-right leading-tight\">\n {!!result.rightValue && (\n <Text\n tag=\"span\"\n weight=\"semibold\"\n className=\"whitespace-nowrap tabular-nums\"\n >\n {result.rightValue}\n </Text>\n )}\n {!!result.rightLabel && (\n <Text\n tag=\"span\"\n size=\"xxs\"\n type=\"secondary\"\n className=\"mt-0.5 whitespace-nowrap\"\n >\n {result.rightLabel}\n </Text>\n )}\n </div>\n </div>\n )}\n\n {/* Trailing chevron */}\n <span\n aria-hidden=\"true\"\n className={cn(\n 'inline-flex size-7 shrink-0 items-center justify-center rounded-md transition-all',\n isActive\n ? 'bg-foreground text-background opacity-100'\n : 'text-muted-foreground opacity-0 group-hover/row:opacity-100',\n )}\n >\n <ArrowRight className=\"size-3.5\" />\n </span>\n </button>\n );\n}\n","import { Tabs as TabsPrimitive } from \"@base-ui/react/tabs\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Tabs({\n className,\n orientation = \"horizontal\",\n ...props\n}: TabsPrimitive.Root.Props) {\n return (\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n data-orientation={orientation}\n className={cn(\n \"gap-2 group/tabs flex data-[orientation=horizontal]:flex-col\",\n className\n )}\n {...props}\n />\n )\n}\n\nconst tabsListVariants = cva(\n \"rounded-lg p-[3px] group-data-horizontal/tabs:h-9 data-[variant=line]:rounded-none group/tabs-list text-muted-foreground inline-flex w-fit items-center justify-center group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col\",\n {\n variants: {\n variant: {\n default: \"bg-muted\",\n line: \"gap-1 bg-transparent\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction TabsList({\n className,\n variant = \"default\",\n ...props\n}: TabsPrimitive.List.Props & VariantProps<typeof tabsListVariants>) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n data-variant={variant}\n className={cn(tabsListVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nfunction TabsTrigger({ className, ...props }: TabsPrimitive.Tab.Props) {\n return (\n <TabsPrimitive.Tab\n data-slot=\"tabs-trigger\"\n className={cn(\n \"gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium group-data-[variant=default]/tabs-list:data-active:shadow-sm group-data-[variant=line]/tabs-list:data-active:shadow-none [&_svg:not([class*='size-'])]:size-4 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring text-foreground/60 hover:text-foreground relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center whitespace-nowrap transition-all group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n \"group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent dark:group-data-[variant=line]/tabs-list:data-active:border-transparent dark:group-data-[variant=line]/tabs-list:data-active:bg-transparent\",\n \"data-active:bg-background data-active:text-foreground\",\n \"after:bg-foreground after:absolute after:opacity-0 after:transition-opacity group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] group-data-[orientation=horizontal]/tabs:after:h-0.5 group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=vertical]/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TabsContent({ className, ...props }: TabsPrimitive.Panel.Props) {\n return (\n <TabsPrimitive.Panel\n data-slot=\"tabs-content\"\n className={cn(\"text-sm flex-1 outline-none\", className)}\n {...props}\n />\n )\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent, tabsListVariants }\n","/**\n * GlobalSearchTabs — segmented filter strip above the result list.\n *\n * Wraps `base/navigation/tabs` for app-consistent styling and adds a\n * subtle count pill next to each label.\n */\nimport { Tabs, TabsList, TabsTrigger } from '@/components/base/navigation/tabs';\nimport { Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nexport interface GlobalSearchTabsProps<TGroup extends string = string> {\n /** Currently-selected tab. */\n value: 'all' | TGroup;\n onValueChange: (value: 'all' | TGroup) => void;\n tabs: ReadonlyArray<{ value: 'all' | TGroup; label: string }>;\n counts: Record<string, number>;\n}\n\nexport function GlobalSearchTabs<TGroup extends string = string>({\n value,\n onValueChange,\n tabs,\n counts,\n}: GlobalSearchTabsProps<TGroup>) {\n return (\n <div className=\"border-b border-border/60 px-3 py-2\">\n <Tabs\n value={value as string}\n onValueChange={(v) => onValueChange(v as 'all' | TGroup)}\n >\n <TabsList className=\"h-8 w-fit\">\n {tabs.map((tab) => {\n const isActive = value === tab.value;\n const count = counts[tab.value as string] ?? 0;\n return (\n <TabsTrigger\n key={tab.value as string}\n value={tab.value as string}\n className=\"gap-1.5 px-2.5 text-xs\"\n >\n <span>{tab.label}</span>\n <Text\n tag=\"span\"\n size=\"xxs\"\n weight=\"medium\"\n className={cn(\n 'rounded px-1 py-0 tabular-nums',\n isActive\n ? 'bg-muted text-muted-foreground'\n : 'bg-transparent text-muted-foreground/70',\n )}\n >\n {count}\n </Text>\n </TabsTrigger>\n );\n })}\n </TabsList>\n </Tabs>\n </div>\n );\n}\n","/**\n * GlobalSearch — framework-agnostic spotlight overlay for app-wide search.\n *\n * Composition seams:\n * - `strings` — deep-partial override of the default copy\n * - `slots` — replace any region (input, tabs, idle, empty, loading, footer)\n * - `slots.renderResult` — full per-row override\n * - `slots.toneBg / toneAvatar` — replace tone palettes\n *\n * Headless usage:\n * - Call `useGlobalSearch({ results, query })` directly to drive a\n * completely custom UI against the same selection state machine.\n *\n * Framework-agnostic:\n * - No router import, no i18n SDK import. Routing is up to the consumer\n * via `onResultSelect`. Strings live in the `strings` prop.\n * - The library no longer ships `adapters/$framework/`. Consumers map\n * their router (Inertia, Tanstack Router, RR7, Next, …) to\n * `onResultSelect(result)` directly at the call site.\n */\nimport * as React from 'react';\n\nimport { Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nimport {\n defaultGlobalSearchStrings,\n interpolateString,\n type GlobalSearchStrings,\n} from './global-search.strings';\nimport type {\n GlobalSearchIdleSection,\n GlobalSearchResult,\n GlobalSearchSlots,\n GlobalSearchTab,\n} from './global-search.types';\nimport { useGlobalSearch } from './hooks/use-global-search';\nimport {\n GlobalSearchEmptyState,\n GlobalSearchFooter,\n GlobalSearchIdleState,\n GlobalSearchInput,\n GlobalSearchResultRow,\n GlobalSearchTabs,\n} from './partials';\n\nexport interface GlobalSearchProps<TGroup extends string = string> {\n /** Result list. The component renders these grouped by `result.group`. */\n results?: ReadonlyArray<GlobalSearchResult<TGroup>>;\n /** Current query value (controlled). */\n query: string;\n /** Query change callback. */\n onQueryChange: (q: string) => void;\n /** Activation callback — fires on row click or Enter. */\n onResultSelect?: (result: GlobalSearchResult<TGroup>) => void;\n /** Escape-key callback. */\n onClose?: () => void;\n /** Loading flag — switches the input spinner and renders the loading slot. */\n loading?: boolean;\n /** Idle-state sections (Recent / Suggestions / …). */\n idleSections?: ReadonlyArray<GlobalSearchIdleSection>;\n /** Override default group labels in the tab strip. */\n groupLabels?: Partial<Record<TGroup, string>>;\n /** Auto-focus the input on mount. */\n autoFocus?: boolean;\n /** Replace any portion of the default copy. */\n strings?: Partial<GlobalSearchStrings>;\n /** Replace any portion of the layout. */\n slots?: GlobalSearchSlots<TGroup>;\n /** Custom tab list — overrides the auto-generated `All + groups`. */\n tabs?: ReadonlyArray<GlobalSearchTab<TGroup>>;\n /** Wrapper className. */\n className?: string;\n}\n\nexport function GlobalSearch<TGroup extends string = string>({\n results = [],\n query,\n onQueryChange,\n onResultSelect,\n onClose,\n loading = false,\n idleSections,\n groupLabels,\n autoFocus = false,\n strings: stringsProp,\n slots,\n tabs,\n className,\n}: GlobalSearchProps<TGroup>) {\n const strings: GlobalSearchStrings = {\n ...defaultGlobalSearchStrings,\n ...stringsProp,\n };\n\n const search = useGlobalSearch<TGroup>({\n results,\n query,\n onResultSelect,\n onClose,\n });\n\n const isEmpty =\n !loading && query.trim().length > 1 && results.length === 0;\n const isIdle = !loading && query.trim().length <= 1;\n\n const resolvedTabs = React.useMemo<\n ReadonlyArray<GlobalSearchTab<TGroup>>\n >(() => {\n if (tabs) return tabs;\n const groupKeys = Object.keys(search.grouped) as TGroup[];\n return [\n { value: 'all', label: strings.tabAll },\n ...groupKeys.map((key) => ({\n value: key,\n label: groupLabels?.[key] ?? key,\n })),\n ];\n }, [tabs, search.grouped, strings.tabAll, groupLabels]);\n\n return (\n <div\n className={cn('global-search--component', \n 'overflow-hidden rounded-xl border border-border bg-card shadow-2xl',\n className,\n )}\n >\n {slots?.input ?? (\n <GlobalSearchInput\n value={query}\n onChange={onQueryChange}\n onKeyDown={search.onKeyDown}\n placeholder={strings.placeholder}\n clearLabel={strings.clear}\n loading={loading}\n autoFocus={autoFocus}\n />\n )}\n\n {!loading && results.length > 0 && (\n slots?.tabs ?? (\n <GlobalSearchTabs<TGroup>\n value={search.activeTab}\n onValueChange={search.setActiveTab}\n tabs={resolvedTabs}\n counts={search.tabCounts}\n />\n )\n )}\n\n <div className=\"max-h-[520px] overflow-y-auto\">\n {!!isIdle && (slots?.idle ?? (\n idleSections && idleSections.length > 0 ? (\n <GlobalSearchIdleState sections={idleSections} />\n ) : null\n ))}\n\n {!!loading && (slots?.loading ?? (\n <div className=\"flex items-center justify-center px-6 py-12\">\n <Text type=\"secondary\">\n {strings.loading}\n </Text>\n </div>\n ))}\n\n {!!isEmpty && (slots?.empty ?? (\n <GlobalSearchEmptyState\n title={interpolateString(strings.emptyTitle, { query })}\n hint={strings.emptyHint}\n />\n ))}\n\n {!loading && results.length > 0 && (\n <div className=\"px-2 py-2\">\n {Object.entries(search.visibleGrouped).map(\n ([groupKey, items], gi) => (\n <div\n key={groupKey}\n className={cn(\n 'pb-2 last:pb-0',\n gi > 0 && 'mt-3 pt-2',\n )}\n >\n <div className=\"flex items-center justify-between px-3 pb-1\">\n <Text size=\"xs\" type=\"secondary\" weight=\"medium\">\n {groupLabels?.[groupKey as TGroup] ?? groupKey}\n </Text>\n {search.activeTab === 'all' && items.length > 0 && (\n <button\n type=\"button\"\n onClick={() =>\n search.setActiveTab(groupKey as TGroup)\n }\n className=\"rounded text-primary transition-colors hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <Text\n tag=\"span\"\n size=\"xxs\"\n weight=\"medium\"\n className=\"text-primary\"\n >\n {strings.seeAll}\n </Text>\n </button>\n )}\n </div>\n <ul className=\"space-y-0.5\">\n {items.map((item) => {\n const isActive =\n search.flat[search.activeIdx]?.id === item.id;\n const ctx = {\n isActive,\n query,\n onSelect: () => onResultSelect?.(item),\n };\n const node = slots?.renderResult ? (\n slots.renderResult(item, ctx)\n ) : (\n <GlobalSearchResultRow<TGroup>\n result={item}\n isActive={isActive}\n query={query}\n onSelect={ctx.onSelect}\n onMouseEnter={() =>\n search.setActiveById(item.id)\n }\n toneBg={slots?.toneBg}\n toneAvatar={slots?.toneAvatar}\n />\n );\n return <li key={item.id}>{node}</li>;\n })}\n </ul>\n </div>\n ),\n )}\n </div>\n )}\n </div>\n\n {slots?.footer ?? (\n <GlobalSearchFooter\n navigateLabel={strings.footerNavigate}\n openLabel={strings.footerOpen}\n closeLabel={strings.footerClose}\n trailing={\n !isIdle && !isEmpty && results.length > 0 ? (\n <Text\n tag=\"span\"\n size=\"xxs\"\n type=\"secondary\"\n className=\"tabular-nums\"\n >\n {interpolateString(strings.resultsCount, {\n count: results.length,\n })}\n </Text>\n ) : undefined\n }\n />\n )}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/features/global-search/global-search.strings.ts","../../../../src/components/features/global-search/hooks/use-global-search.ts","../../../../src/components/features/global-search/partials/global-search-empty-state.tsx","../../../../src/components/features/global-search/partials/global-search-footer.tsx","../../../../src/components/features/global-search/partials/global-search-idle-state.tsx","../../../../src/components/features/global-search/partials/global-search-input.tsx","../../../../src/components/features/global-search/partials/tone-palettes.ts","../../../../src/components/features/global-search/partials/global-search-result-row.tsx","../../../../src/components/ui/tabs.tsx","../../../../src/components/features/global-search/partials/global-search-tabs.tsx","../../../../src/components/features/global-search/global-search.tsx"],"sourcesContent":["/**\n * Strings for `GlobalSearch` and its partials. Consumers override via the\n * `strings` prop on `<GlobalSearch />`; values are deep-merged over these\n * defaults so partial overrides are safe.\n */\nexport interface GlobalSearchStrings {\n /** Placeholder copy for the search input. */\n placeholder: string;\n /** aria-label for the clear-search icon button. */\n clear: string;\n /** Loading-state copy. */\n loading: string;\n /** Empty-state title — uses {{query}} as a placeholder. */\n emptyTitle: string;\n /** Empty-state body copy. */\n emptyHint: string;\n /** Idle-state heading for \"Recent\" suggestions. */\n idleRecent: string;\n /** Idle-state heading for curated \"Suggestions\". */\n idleSuggestions: string;\n /** Tab label for the \"All\" tab. */\n tabAll: string;\n /** Footer \"navigate\" hint. */\n footerNavigate: string;\n /** Footer \"open\" hint. */\n footerOpen: string;\n /** Footer \"close\" hint. */\n footerClose: string;\n /** Trailing N results count. */\n resultsCount: string;\n /** \"See all\" group action — jumps to that tab. */\n seeAll: string;\n}\n\nexport const defaultGlobalSearchStrings: GlobalSearchStrings = {\n placeholder: 'Search…',\n clear: 'Clear search',\n loading: 'Searching…',\n emptyTitle: 'No results for \"{{query}}\"',\n emptyHint: 'Try a shorter keyword or check the spelling.',\n idleRecent: 'Recent',\n idleSuggestions: 'Suggestions',\n tabAll: 'All',\n footerNavigate: 'navigate',\n footerOpen: 'open',\n footerClose: 'close',\n resultsCount: '{{count}} results',\n seeAll: 'See all',\n};\n\n/** Replace `{{key}}` tokens with values from `params`. */\nexport function interpolateString(\n template: string,\n params: Record<string, string | number>,\n): string {\n return template.replace(/\\{\\{\\s*(\\w+)\\s*\\}\\}/g, (match, key) => {\n const v = params[key];\n return v === undefined ? match : String(v);\n });\n}\n","/**\n * useGlobalSearch — headless state machine for `<GlobalSearch />`.\n *\n * Owns the active-row index, active tab, and the keyboard-navigation\n * handler. Returns the derived flat list (results filtered by tab) so\n * consumers can render entirely custom UIs against the same state.\n *\n * Usage:\n * const search = useGlobalSearch({ results, query });\n * <input onKeyDown={search.onKeyDown} />\n * {search.flat.map((r, i) => <Row active={i === search.activeIdx} … />)}\n */\nimport { useEffect, useMemo, useRef, useState } from 'react';\n\nimport type { GlobalSearchResult } from '../global-search.types';\n\nexport interface UseGlobalSearchOptions<TGroup extends string = string> {\n results: ReadonlyArray<GlobalSearchResult<TGroup>>;\n query: string;\n /** Fires when the user activates a row (Enter or click). */\n onResultSelect?: (result: GlobalSearchResult<TGroup>) => void;\n /** Fires when the user presses Escape. */\n onClose?: () => void;\n}\n\nexport interface UseGlobalSearchReturn<TGroup extends string = string> {\n /** Results bucketed by group, in insertion order. */\n grouped: Record<string, GlobalSearchResult<TGroup>[]>;\n /** Result count per tab (`all` plus each group key). */\n tabCounts: Record<string, number>;\n /** Currently-selected tab. */\n activeTab: 'all' | TGroup;\n /** Set the active tab — also resets the active index. */\n setActiveTab: (tab: 'all' | TGroup) => void;\n /** Filtered grouped map respecting the active tab. */\n visibleGrouped: Record<string, GlobalSearchResult<TGroup>[]>;\n /** Flat ordered list matching what is currently rendered. */\n flat: GlobalSearchResult<TGroup>[];\n /** Index into `flat` of the currently-highlighted row. */\n activeIdx: number;\n setActiveIdx: (i: number) => void;\n /** Programmatically activate a result by id. */\n setActiveById: (id: string) => void;\n /** Bind to the search input's `onKeyDown` for arrow / enter / escape support. */\n onKeyDown: (e: React.KeyboardEvent) => void;\n /** Activate the row at `activeIdx`. */\n selectActive: () => void;\n}\n\nexport function useGlobalSearch<TGroup extends string = string>({\n results,\n query,\n onResultSelect,\n onClose,\n}: UseGlobalSearchOptions<TGroup>): UseGlobalSearchReturn<TGroup> {\n const [activeTab, setActiveTabState] =\n useState<'all' | TGroup>('all');\n const [activeIdx, setActiveIdx] = useState(0);\n\n // Reset both the active row and the active tab when the query changes\n // (so a fresh query never inherits a stale highlight or filter).\n useEffect(() => {\n setActiveTabState('all');\n setActiveIdx(0);\n }, [query]);\n\n const grouped = useMemo(() => {\n const buckets: Record<string, GlobalSearchResult<TGroup>[]> = {};\n for (const r of results) {\n (buckets[r.group] ??= []).push(r);\n }\n return buckets;\n }, [results]);\n\n const tabCounts = useMemo(() => {\n const counts: Record<string, number> = { all: results.length };\n for (const [k, v] of Object.entries(grouped)) counts[k] = v.length;\n return counts;\n }, [results.length, grouped]);\n\n const visibleGrouped = useMemo(() => {\n if (activeTab === 'all') return grouped;\n const sub = grouped[activeTab as string];\n return sub ? ({ [activeTab as string]: sub } as Record<string, GlobalSearchResult<TGroup>[]>) : {};\n }, [grouped, activeTab]);\n\n const flat = useMemo(() => {\n if (activeTab === 'all') return results.slice();\n return grouped[activeTab as string] ?? [];\n }, [activeTab, grouped, results]);\n\n const activeIdxRef = useRef(activeIdx);\n activeIdxRef.current = activeIdx;\n const flatRef = useRef(flat);\n flatRef.current = flat;\n\n const setActiveTab = (tab: 'all' | TGroup) => {\n setActiveTabState(tab);\n setActiveIdx(0);\n };\n\n const setActiveById = (id: string) => {\n const idx = flatRef.current.findIndex((r) => r.id === id);\n if (idx >= 0) setActiveIdx(idx);\n };\n\n const selectActive = () => {\n const item = flatRef.current[activeIdxRef.current];\n if (item) onResultSelect?.(item);\n };\n\n const onKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n setActiveIdx((i) => Math.min(i + 1, flatRef.current.length - 1));\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n setActiveIdx((i) => Math.max(i - 1, 0));\n } else if (e.key === 'Enter') {\n const item = flatRef.current[activeIdxRef.current];\n if (item) {\n e.preventDefault();\n onResultSelect?.(item);\n }\n } else if (e.key === 'Escape') {\n onClose?.();\n }\n };\n\n return {\n grouped,\n tabCounts,\n activeTab,\n setActiveTab,\n visibleGrouped,\n flat,\n activeIdx,\n setActiveIdx,\n setActiveById,\n onKeyDown,\n selectActive,\n };\n}\n","/**\n * Default empty-state body — shown when the query yields no results.\n * Override entirely via `slots.empty`.\n */\nimport { Search } from 'lucide-react';\n\nimport { Text } from '@/components/typography';\n\nexport interface GlobalSearchEmptyStateProps {\n title: string;\n hint: string;\n}\n\nexport function GlobalSearchEmptyState({ title, hint }: GlobalSearchEmptyStateProps) {\n return (\n <div className=\"px-6 py-12 text-center\">\n <div className=\"mx-auto mb-3 inline-flex size-10 items-center justify-center rounded-full bg-muted/60\">\n <Search className=\"size-4 text-muted-foreground\" aria-hidden=\"true\" />\n </div>\n <Text weight=\"medium\">\n {title}\n </Text>\n <Text size=\"xs\" type=\"secondary\" className=\"mt-1\">\n {hint}\n </Text>\n </div>\n );\n}\n","/**\n * GlobalSearchFooter — keyboard-hint strip below the result list.\n * Override entirely via `slots.footer`.\n */\nimport { Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nconst KBD_CLASS =\n 'rounded border border-border bg-muted/40 px-1.5 py-0.5 font-mono text-xs leading-none text-muted-foreground';\n\nexport interface GlobalSearchFooterProps {\n navigateLabel: string;\n openLabel: string;\n closeLabel: string;\n /** Trailing right-aligned content (e.g. \"3 results\"). */\n trailing?: React.ReactNode;\n className?: string;\n}\n\nexport function GlobalSearchFooter({\n navigateLabel,\n openLabel,\n closeLabel,\n trailing,\n className,\n}: GlobalSearchFooterProps) {\n return (\n <div\n className={cn(\n 'flex items-center justify-between border-t border-border/60 px-4 py-2',\n className,\n )}\n >\n <span className=\"flex items-center gap-2\">\n <kbd className={KBD_CLASS}>↑↓</kbd>\n <Text tag=\"span\" size=\"xxs\" type=\"secondary\">\n {navigateLabel}\n </Text>\n <kbd className={KBD_CLASS}>↵</kbd>\n <Text tag=\"span\" size=\"xxs\" type=\"secondary\">\n {openLabel}\n </Text>\n <kbd className={KBD_CLASS}>esc</kbd>\n <Text tag=\"span\" size=\"xxs\" type=\"secondary\">\n {closeLabel}\n </Text>\n </span>\n {trailing}\n </div>\n );\n}\n","/**\n * Default idle-state body — shown when the query is too short.\n * Renders consumer-supplied \"Recent\" + \"Suggestions\" sections.\n */\nimport { Clock, Search, Sparkles } from 'lucide-react';\nimport * as React from 'react';\n\nimport { Button } from '@/components/base/buttons';\nimport { Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nimport type { GlobalSearchIdleSection } from '../global-search.types';\n\nexport interface GlobalSearchIdleStateProps {\n sections: ReadonlyArray<GlobalSearchIdleSection>;\n /** Optional override for the heading icon when missing on a section. */\n fallbackIcons?: { recent?: React.ElementType; suggestions?: React.ElementType };\n}\n\nexport function GlobalSearchIdleState({\n sections,\n fallbackIcons,\n}: GlobalSearchIdleStateProps) {\n return (\n <div className=\"space-y-4 px-2 py-3\">\n {sections.map((section, idx) => {\n const HeadingIcon =\n section.icon ??\n (idx === 0\n ? fallbackIcons?.recent ?? Clock\n : fallbackIcons?.suggestions ?? Sparkles);\n return (\n <div key={section.id}>\n <div className=\"flex items-center gap-2 px-3 pb-1.5\">\n <HeadingIcon\n className=\"size-3.5 text-muted-foreground\"\n aria-hidden=\"true\"\n />\n <Text\n size=\"xxs\"\n type=\"secondary\"\n weight=\"medium\"\n className=\"uppercase tracking-wider\"\n >\n {section.label}\n </Text>\n </div>\n <ul className=\"m-0 list-none space-y-0.5 p-0\">\n {section.items.map((item) => {\n const ItemIcon = item.icon ?? Search;\n return (\n <li key={item.id}>\n <Button\n type=\"button\"\n variant=\"secondary\"\n buttonStyle=\"ghost\"\n size=\"sm\"\n onClick={item.onSelect}\n className={cn(\n 'h-auto w-full justify-start gap-3 rounded-md px-3 py-1.5 text-left transition-colors',\n 'hover:bg-muted/50 focus-visible:bg-muted/50',\n )}\n >\n <ItemIcon\n className=\"size-3.5 text-muted-foreground\"\n aria-hidden=\"true\"\n />\n <Text className=\"flex-1 truncate\">\n {item.label}\n </Text>\n </Button>\n </li>\n );\n })}\n </ul>\n </div>\n );\n })}\n </div>\n );\n}\n","/**\n * GlobalSearchInput — search row at the top of the popover.\n *\n * Just the input + clear button + optional loading spinner. Keyboard\n * navigation is handled by the consumer wiring `useGlobalSearch`'s\n * `onKeyDown` handler.\n */\nimport { Loader2, Search, X } from 'lucide-react';\nimport * as React from 'react';\n\nimport { Button } from '@/components/base/buttons';\nimport { Input } from '@/components/base/forms/fields';\n\nexport interface GlobalSearchInputProps {\n value: string;\n onChange: (value: string) => void;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n placeholder?: string;\n clearLabel?: string;\n loading?: boolean;\n autoFocus?: boolean;\n}\n\nexport const GlobalSearchInput = React.forwardRef<HTMLInputElement, GlobalSearchInputProps>(\n function GlobalSearchInput(\n {\n value,\n onChange,\n onKeyDown,\n placeholder,\n clearLabel = 'Clear search',\n loading = false,\n autoFocus = false,\n },\n ref,\n ) {\n const innerRef = React.useRef<HTMLInputElement | null>(null);\n React.useImperativeHandle(ref, () => innerRef.current as HTMLInputElement);\n\n React.useEffect(() => {\n if (autoFocus) innerRef.current?.focus();\n }, [autoFocus]);\n\n return (\n <div className=\"flex items-center gap-3 border-b border-border px-4 py-3\">\n <Search className=\"size-4 shrink-0 text-muted-foreground\" aria-hidden=\"true\" />\n <div className=\"min-w-0 flex-1\">\n <Input\n ref={innerRef}\n type=\"text\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={onKeyDown}\n placeholder={placeholder}\n aria-label={placeholder}\n autoComplete=\"off\"\n spellCheck={false}\n size=\"sm\"\n className=\"h-auto border-0 bg-transparent px-0 py-0 text-sm shadow-none focus-visible:border-transparent focus-visible:ring-0\"\n />\n </div>\n {loading && (\n <Loader2\n className=\"size-4 shrink-0 animate-spin text-muted-foreground\"\n aria-hidden=\"true\"\n />\n )}\n {!loading && !!value && (\n <Button\n type=\"button\"\n variant=\"secondary\"\n buttonStyle=\"ghost\"\n size=\"icon-xs\"\n onClick={() => onChange('')}\n aria-label={clearLabel}\n className=\"size-6 rounded text-muted-foreground hover:bg-muted hover:text-foreground\"\n >\n <X className=\"size-3.5\" />\n </Button>\n )}\n </div>\n );\n },\n);\n","/**\n * Default tone palettes for thumbnails and avatars.\n *\n * Consumers can override per-call via `slots.toneBg` / `slots.toneAvatar`.\n */\nimport type { GlobalSearchTone } from '../global-search.types';\n\nexport const DEFAULT_TONE_BG: Record<GlobalSearchTone, string> = {\n primary: 'bg-primary/5 text-primary',\n success: 'bg-success/10 text-success',\n warning: 'bg-warning/20 text-warning-foreground',\n info: 'bg-info/10 text-info',\n destructive: 'bg-destructive/10 text-destructive',\n default: 'bg-muted text-muted-foreground',\n};\n\nexport const DEFAULT_TONE_AVATAR: Record<GlobalSearchTone, string> = {\n primary: 'bg-primary/10 text-primary',\n success: 'bg-success/10 text-success',\n warning: 'bg-warning/20 text-warning-foreground',\n info: 'bg-info/10 text-info',\n destructive: 'bg-destructive/10 text-destructive',\n default: 'bg-muted text-muted-foreground',\n};\n","/**\n * GlobalSearchResultRow — single rich result card.\n *\n * Layout: [thumbnail] [title + status pill / muted secondary line / meta] [right-value column] [chevron].\n *\n * Exported as a partial so consumers can:\n * 1. Override an individual row via `slots.renderResult` and reuse this component for the others.\n * 2. Use it standalone in custom search UIs that don't need the full GlobalSearch shell.\n */\nimport { ArrowRight } from 'lucide-react';\nimport * as React from 'react';\n\nimport { Button } from '@/components/base/buttons';\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/base/display/avatar';\nimport { Badge } from '@/components/base/badge';\nimport { Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nimport type {\n GlobalSearchResult,\n GlobalSearchTone,\n} from '../global-search.types';\nimport {\n DEFAULT_TONE_AVATAR,\n DEFAULT_TONE_BG,\n} from './tone-palettes';\n\nexport interface GlobalSearchResultRowProps<TGroup extends string = string> {\n result: GlobalSearchResult<TGroup>;\n /** Highlighted via keyboard nav. */\n isActive?: boolean;\n query?: string;\n onSelect?: () => void;\n onMouseEnter?: () => void;\n /** Override tone palette. Keys not provided fall back to defaults. */\n toneBg?: Partial<Record<GlobalSearchTone, string>>;\n toneAvatar?: Partial<Record<GlobalSearchTone, string>>;\n className?: string;\n}\n\nfunction highlightMatch(text: string, query: string | undefined): React.ReactNode {\n const q = (query ?? '').trim();\n if (!q) return text;\n const lower = text.toLowerCase();\n const ql = q.toLowerCase();\n const i = lower.indexOf(ql);\n if (i < 0) return text;\n return (\n <>\n {text.slice(0, i)}\n <mark className=\"rounded-sm bg-warning/40 px-0.5 text-foreground\">\n {text.slice(i, i + q.length)}\n </mark>\n {text.slice(i + q.length)}\n </>\n );\n}\n\nexport function GlobalSearchResultRow<TGroup extends string = string>({\n result,\n isActive = false,\n query = '',\n onSelect,\n onMouseEnter,\n toneBg,\n toneAvatar,\n className,\n}: GlobalSearchResultRowProps<TGroup>) {\n const ThumbIcon = result.thumbnail?.icon;\n const bg = { ...DEFAULT_TONE_BG, ...toneBg };\n const av = { ...DEFAULT_TONE_AVATAR, ...toneAvatar };\n\n return (\n <Button\n type=\"button\"\n variant=\"secondary\"\n buttonStyle=\"ghost\"\n size=\"sm\"\n onMouseEnter={onMouseEnter}\n onClick={onSelect}\n className={cn(\n 'group/row relative h-auto w-full justify-start gap-3 rounded-lg px-3 py-(--row-py) text-left transition-colors',\n isActive ? 'bg-muted/60' : 'hover:bg-muted/40',\n className,\n )}\n >\n {/* Thumbnail / Avatar */}\n <div className=\"flex shrink-0 items-center\">\n {result.avatar ? (\n <Avatar className={cn('size-8', av[result.avatar.tone ?? 'default'])}>\n {result.avatar.src && (\n <AvatarImage src={result.avatar.src} alt={result.title} />\n )}\n <AvatarFallback\n className={cn('text-xs font-semibold', av[result.avatar.tone ?? 'default'])}\n >\n {result.avatar.initials}\n </AvatarFallback>\n </Avatar>\n ) : ThumbIcon ? (\n <span\n className={cn(\n 'inline-flex size-8 items-center justify-center rounded-md',\n bg[result.thumbnail?.tone ?? 'default'],\n )}\n >\n <ThumbIcon className=\"size-4\" aria-hidden=\"true\" />\n </span>\n ) : null}\n </div>\n\n {/* Body */}\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center gap-2 leading-tight\">\n <Text tag=\"span\" weight=\"semibold\" className=\"truncate\">\n {highlightMatch(result.title, query)}\n </Text>\n {!!result.badge && (\n <Badge\n variant={\n result.badge.tone === 'destructive'\n ? 'error'\n : result.badge.tone\n }\n >\n {result.badge.label}\n </Badge>\n )}\n </div>\n {(() => {\n const pieces: Array<{ key: string; node: React.ReactNode }> = [];\n if (result.subtitle)\n pieces.push({\n key: 'subtitle',\n node: <span>{highlightMatch(result.subtitle, query)}</span>,\n });\n result.meta?.forEach((m, i) => {\n const Icon = m.icon;\n pieces.push({\n key: `m-${i}`,\n node: (\n <span\n className={cn(\n 'inline-flex items-center gap-1',\n m.mono && 'font-mono tabular-nums',\n )}\n >\n {!!Icon && <Icon className=\"size-3 shrink-0\" aria-hidden=\"true\" />}\n {m.label}\n </span>\n ),\n });\n });\n if (result.timestamp)\n pieces.push({\n key: 'ts',\n node: <span className=\"tabular-nums\">{result.timestamp}</span>,\n });\n result.tags?.forEach((tag) =>\n pieces.push({ key: `t-${tag}`, node: <span>{tag}</span> }),\n );\n if (result.rightValue) {\n pieces.push({\n key: 'rv',\n node: (\n <span className=\"font-medium tabular-nums text-foreground\">\n {result.rightValue}\n {!!result.rightLabel && (\n <span className=\"ml-1 font-normal text-muted-foreground\">\n {result.rightLabel.toLowerCase()}\n </span>\n )}\n </span>\n ),\n });\n }\n if (pieces.length === 0) return null;\n return (\n <Text size=\"xs\" type=\"secondary\" className=\"mt-0.5 truncate\">\n {pieces.map((p, i) => (\n <span key={p.key}>\n {i > 0 && (\n <span\n aria-hidden=\"true\"\n className=\"mx-1.5 text-muted-foreground/60\"\n >\n ·\n </span>\n )}\n {p.node}\n </span>\n ))}\n </Text>\n );\n })()}\n </div>\n\n {/* Right value column — only when value/label set */}\n {!!(result.rightValue || result.rightLabel) && (\n <div className=\"hidden shrink-0 items-center self-stretch border-l border-border/60 pl-3 md:flex\">\n <div className=\"flex flex-col items-end gap-0 text-right leading-tight\">\n {!!result.rightValue && (\n <Text\n tag=\"span\"\n weight=\"semibold\"\n className=\"whitespace-nowrap tabular-nums\"\n >\n {result.rightValue}\n </Text>\n )}\n {!!result.rightLabel && (\n <Text\n tag=\"span\"\n size=\"xxs\"\n type=\"secondary\"\n className=\"mt-0.5 whitespace-nowrap\"\n >\n {result.rightLabel}\n </Text>\n )}\n </div>\n </div>\n )}\n\n {/* Trailing chevron */}\n <span\n aria-hidden=\"true\"\n className={cn(\n 'inline-flex size-7 shrink-0 items-center justify-center rounded-md transition-all',\n isActive\n ? 'bg-foreground text-background opacity-100'\n : 'text-muted-foreground opacity-0 group-hover/row:opacity-100',\n )}\n >\n <ArrowRight className=\"size-3.5\" />\n </span>\n </Button>\n );\n}\n","import { Tabs as TabsPrimitive } from \"@base-ui/react/tabs\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Tabs({\n className,\n orientation = \"horizontal\",\n ...props\n}: TabsPrimitive.Root.Props) {\n return (\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n data-orientation={orientation}\n className={cn(\n \"gap-2 group/tabs flex data-[orientation=horizontal]:flex-col\",\n className\n )}\n {...props}\n />\n )\n}\n\nconst tabsListVariants = cva(\n \"rounded-lg p-[3px] group-data-horizontal/tabs:h-9 data-[variant=line]:rounded-none group/tabs-list text-muted-foreground inline-flex w-fit items-center justify-center group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col\",\n {\n variants: {\n variant: {\n default: \"bg-muted\",\n line: \"gap-1 bg-transparent\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n)\n\nfunction TabsList({\n className,\n variant = \"default\",\n ...props\n}: TabsPrimitive.List.Props & VariantProps<typeof tabsListVariants>) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n data-variant={variant}\n className={cn(tabsListVariants({ variant }), className)}\n {...props}\n />\n )\n}\n\nfunction TabsTrigger({ className, ...props }: TabsPrimitive.Tab.Props) {\n return (\n <TabsPrimitive.Tab\n data-slot=\"tabs-trigger\"\n className={cn(\n \"gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium group-data-[variant=default]/tabs-list:data-active:shadow-sm group-data-[variant=line]/tabs-list:data-active:shadow-none [&_svg:not([class*='size-'])]:size-4 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring text-foreground/60 hover:text-foreground relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center whitespace-nowrap transition-all group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n \"group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent dark:group-data-[variant=line]/tabs-list:data-active:border-transparent dark:group-data-[variant=line]/tabs-list:data-active:bg-transparent\",\n \"data-active:bg-background data-active:text-foreground\",\n \"after:bg-foreground after:absolute after:opacity-0 after:transition-opacity group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] group-data-[orientation=horizontal]/tabs:after:h-0.5 group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=vertical]/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction TabsContent({ className, ...props }: TabsPrimitive.Panel.Props) {\n return (\n <TabsPrimitive.Panel\n data-slot=\"tabs-content\"\n className={cn(\"text-sm flex-1 outline-none\", className)}\n {...props}\n />\n )\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent, tabsListVariants }\n","/**\n * GlobalSearchTabs — segmented filter strip above the result list.\n *\n * Wraps `base/navigation/tabs` for app-consistent styling and adds a\n * subtle count pill next to each label.\n */\nimport { Tabs, TabsList, TabsTrigger } from '@/components/base/navigation/tabs';\nimport { Text } from '@/components/typography';\nimport { cn } from '@/lib/utils';\n\nexport interface GlobalSearchTabsProps<TGroup extends string = string> {\n /** Currently-selected tab. */\n value: 'all' | TGroup;\n onValueChange: (value: 'all' | TGroup) => void;\n tabs: ReadonlyArray<{ value: 'all' | TGroup; label: string }>;\n counts: Record<string, number>;\n}\n\nexport function GlobalSearchTabs<TGroup extends string = string>({\n value,\n onValueChange,\n tabs,\n counts,\n}: GlobalSearchTabsProps<TGroup>) {\n return (\n <div className=\"global-search-tabs--component border-b border-border/60 px-3 py-2\">\n <div className=\"global-search-tabs--scroller -mx-1 overflow-x-auto px-1 [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\">\n <Tabs\n value={value as string}\n onValueChange={(v) => onValueChange(v as 'all' | TGroup)}\n className=\"min-w-max\"\n >\n <TabsList className=\"global-search-tabs--list h-8 w-max min-w-max\">\n {tabs.map((tab) => {\n const isActive = value === tab.value;\n const count = counts[tab.value as string] ?? 0;\n return (\n <TabsTrigger\n key={tab.value as string}\n value={tab.value as string}\n className=\"global-search-tabs--trigger shrink-0 gap-1.5 px-2.5 text-xs\"\n >\n <span>{tab.label}</span>\n <Text\n tag=\"span\"\n size=\"xxs\"\n weight=\"medium\"\n className={cn(\n 'global-search-tabs--count rounded px-1 py-0 tabular-nums',\n isActive\n ? 'bg-muted text-muted-foreground'\n : 'bg-transparent text-muted-foreground/70',\n )}\n >\n {count}\n </Text>\n </TabsTrigger>\n );\n })}\n </TabsList>\n </Tabs>\n </div>\n </div>\n );\n}\n","/**\n * GlobalSearch — framework-agnostic spotlight overlay for app-wide search.\n *\n * Composition seams:\n * - `strings` — deep-partial override of the default copy\n * - `slots` — replace any region (input, tabs, idle, empty, loading, footer)\n * - `slots.renderResult` — full per-row override\n * - `slots.toneBg / toneAvatar` — replace tone palettes\n *\n * Headless usage:\n * - Call `useGlobalSearch({ results, query })` directly to drive a\n * completely custom UI against the same selection state machine.\n *\n * Framework-agnostic:\n * - No router import, no i18n SDK import. Routing is up to the consumer\n * via `onResultSelect`. Strings live in the `strings` prop.\n * - The library no longer ships `adapters/$framework/`. Consumers map\n * their router (Inertia, Tanstack Router, RR7, Next, …) to\n * `onResultSelect(result)` directly at the call site.\n */\nimport * as React from '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 defaultGlobalSearchStrings,\n interpolateString,\n type GlobalSearchStrings,\n} from './global-search.strings';\nimport type {\n GlobalSearchIdleSection,\n GlobalSearchResult,\n GlobalSearchSlots,\n GlobalSearchTab,\n} from './global-search.types';\nimport { useGlobalSearch } from './hooks/use-global-search';\nimport {\n GlobalSearchEmptyState,\n GlobalSearchFooter,\n GlobalSearchIdleState,\n GlobalSearchInput,\n GlobalSearchResultRow,\n GlobalSearchTabs,\n} from './partials';\n\nexport interface GlobalSearchProps<TGroup extends string = string> {\n /** Result list. The component renders these grouped by `result.group`. */\n results?: ReadonlyArray<GlobalSearchResult<TGroup>>;\n /** Current query value (controlled). */\n query: string;\n /** Query change callback. */\n onQueryChange: (q: string) => void;\n /** Activation callback — fires on row click or Enter. */\n onResultSelect?: (result: GlobalSearchResult<TGroup>) => void;\n /** Escape-key callback. */\n onClose?: () => void;\n /** Loading flag — switches the input spinner and renders the loading slot. */\n loading?: boolean;\n /** Idle-state sections (Recent / Suggestions / …). */\n idleSections?: ReadonlyArray<GlobalSearchIdleSection>;\n /** Override default group labels in the tab strip. */\n groupLabels?: Partial<Record<TGroup, string>>;\n /** Auto-focus the input on mount. */\n autoFocus?: boolean;\n /** Replace any portion of the default copy. */\n strings?: StringsProp<GlobalSearchStrings>;\n /** Replace any portion of the layout. */\n slots?: GlobalSearchSlots<TGroup>;\n /** Custom tab list — overrides the auto-generated `All + groups`. */\n tabs?: ReadonlyArray<GlobalSearchTab<TGroup>>;\n /** Wrapper className. */\n className?: string;\n}\n\nexport function GlobalSearch<TGroup extends string = string>({\n results = [],\n query,\n onQueryChange,\n onResultSelect,\n onClose,\n loading = false,\n idleSections,\n groupLabels,\n autoFocus = false,\n strings: stringsProp,\n slots,\n tabs,\n className,\n}: GlobalSearchProps<TGroup>) {\n const strings = useStrings(defaultGlobalSearchStrings, stringsProp);\n\n const search = useGlobalSearch<TGroup>({\n results,\n query,\n onResultSelect,\n onClose,\n });\n\n const isEmpty =\n !loading && query.trim().length > 1 && results.length === 0;\n const isIdle = !loading && query.trim().length <= 1;\n\n const resolvedTabs = React.useMemo<\n ReadonlyArray<GlobalSearchTab<TGroup>>\n >(() => {\n if (tabs) return tabs;\n const groupKeys = Object.keys(search.grouped) as TGroup[];\n return [\n { value: 'all', label: strings.tabAll },\n ...groupKeys.map((key) => ({\n value: key,\n label: groupLabels?.[key] ?? key,\n })),\n ];\n }, [tabs, search.grouped, strings.tabAll, groupLabels]);\n\n return (\n <div\n className={cn('global-search--component', \n 'overflow-hidden rounded-xl border border-border bg-card shadow-2xl',\n className,\n )}\n >\n {slots?.input ?? (\n <GlobalSearchInput\n value={query}\n onChange={onQueryChange}\n onKeyDown={search.onKeyDown}\n placeholder={strings.placeholder}\n clearLabel={strings.clear}\n loading={loading}\n autoFocus={autoFocus}\n />\n )}\n\n {!loading && results.length > 0 && (\n slots?.tabs ?? (\n <GlobalSearchTabs<TGroup>\n value={search.activeTab}\n onValueChange={search.setActiveTab}\n tabs={resolvedTabs}\n counts={search.tabCounts}\n />\n )\n )}\n\n <div className=\"max-h-[520px] overflow-y-auto\">\n {!!isIdle && (slots?.idle ?? (\n idleSections && idleSections.length > 0 ? (\n <GlobalSearchIdleState sections={idleSections} />\n ) : null\n ))}\n\n {!!loading && (slots?.loading ?? (\n <div className=\"flex items-center justify-center px-6 py-12\">\n <Text type=\"secondary\">\n {strings.loading}\n </Text>\n </div>\n ))}\n\n {!!isEmpty && (slots?.empty ?? (\n <GlobalSearchEmptyState\n title={interpolateString(strings.emptyTitle, { query })}\n hint={strings.emptyHint}\n />\n ))}\n\n {!loading && results.length > 0 && (\n <div className=\"px-2 py-2\">\n {Object.entries(search.visibleGrouped).map(\n ([groupKey, items], gi) => (\n <div\n key={groupKey}\n className={cn(\n 'pb-2 last:pb-0',\n gi > 0 && 'mt-3 pt-2',\n )}\n >\n <div className=\"flex items-center justify-between px-3 pb-1\">\n <Text size=\"xs\" type=\"secondary\" weight=\"medium\">\n {groupLabels?.[groupKey as TGroup] ?? groupKey}\n </Text>\n {search.activeTab === 'all' && items.length > 0 && (\n <Button\n type=\"button\"\n variant=\"secondary\"\n buttonStyle=\"ghost\"\n size=\"xs\"\n onClick={() =>\n search.setActiveTab(groupKey as TGroup)\n }\n className=\"h-auto rounded px-1 py-0 text-primary transition-colors hover:underline\"\n >\n <Text\n tag=\"span\"\n size=\"xxs\"\n weight=\"medium\"\n className=\"text-primary\"\n >\n {strings.seeAll}\n </Text>\n </Button>\n )}\n </div>\n <ul className=\"m-0 list-none space-y-0.5 p-0\">\n {items.map((item) => {\n const isActive =\n search.flat[search.activeIdx]?.id === item.id;\n const ctx = {\n isActive,\n query,\n onSelect: () => onResultSelect?.(item),\n };\n const node = slots?.renderResult ? (\n slots.renderResult(item, ctx)\n ) : (\n <GlobalSearchResultRow<TGroup>\n result={item}\n isActive={isActive}\n query={query}\n onSelect={ctx.onSelect}\n onMouseEnter={() =>\n search.setActiveById(item.id)\n }\n toneBg={slots?.toneBg}\n toneAvatar={slots?.toneAvatar}\n />\n );\n return <li key={item.id}>{node}</li>;\n })}\n </ul>\n </div>\n ),\n )}\n </div>\n )}\n </div>\n\n {slots?.footer ?? (\n <GlobalSearchFooter\n navigateLabel={strings.footerNavigate}\n openLabel={strings.footerOpen}\n closeLabel={strings.footerClose}\n trailing={\n !isIdle && !isEmpty && results.length > 0 ? (\n <Text\n tag=\"span\"\n size=\"xxs\"\n type=\"secondary\"\n className=\"tabular-nums\"\n >\n {interpolateString(strings.resultsCount, {\n count: results.length,\n })}\n </Text>\n ) : undefined\n }\n />\n )}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global-search-idle-state.d.ts","sourceRoot":"","sources":["../../../../../src/components/features/global-search/partials/global-search-idle-state.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"global-search-idle-state.d.ts","sourceRoot":"","sources":["../../../../../src/components/features/global-search/partials/global-search-idle-state.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEtE,MAAM,WAAW,0BAA0B;IACvC,QAAQ,EAAE,aAAa,CAAC,uBAAuB,CAAC,CAAC;IACjD,wEAAwE;IACxE,aAAa,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC;QAAC,WAAW,CAAC,EAAE,KAAK,CAAC,WAAW,CAAA;KAAE,CAAC;CACnF;AAED,wBAAgB,qBAAqB,CAAC,EAClC,QAAQ,EACR,aAAa,GAChB,EAAE,0BAA0B,qBA0D5B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global-search-input.d.ts","sourceRoot":"","sources":["../../../../../src/components/features/global-search/partials/global-search-input.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"global-search-input.d.ts","sourceRoot":"","sources":["../../../../../src/components/features/global-search/partials/global-search-input.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,sBAAsB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,KAAK,IAAI,CAAC;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,eAAO,MAAM,iBAAiB,iGA4D7B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global-search-result-row.d.ts","sourceRoot":"","sources":["../../../../../src/components/features/global-search/partials/global-search-result-row.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"global-search-result-row.d.ts","sourceRoot":"","sources":["../../../../../src/components/features/global-search/partials/global-search-result-row.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,OAAO,KAAK,EACR,kBAAkB,EAClB,gBAAgB,EACnB,MAAM,wBAAwB,CAAC;AAMhC,MAAM,WAAW,0BAA0B,CAAC,MAAM,SAAS,MAAM,GAAG,MAAM;IACtE,MAAM,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACnC,oCAAoC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,sEAAsE;IACtE,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAoBD,wBAAgB,qBAAqB,CAAC,MAAM,SAAS,MAAM,GAAG,MAAM,EAAE,EAClE,MAAM,EACN,QAAgB,EAChB,KAAU,EACV,QAAQ,EACR,YAAY,EACZ,MAAM,EACN,UAAU,EACV,SAAS,GACZ,EAAE,0BAA0B,CAAC,MAAM,CAAC,qBA2KpC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global-search-tabs.d.ts","sourceRoot":"","sources":["../../../../../src/components/features/global-search/partials/global-search-tabs.tsx"],"names":[],"mappings":"AAUA,MAAM,WAAW,qBAAqB,CAAC,MAAM,SAAS,MAAM,GAAG,MAAM;IACjE,8BAA8B;IAC9B,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC;IACtB,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,KAAK,IAAI,CAAC;IAC/C,IAAI,EAAE,aAAa,CAAC;QAAE,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9D,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,wBAAgB,gBAAgB,CAAC,MAAM,SAAS,MAAM,GAAG,MAAM,EAAE,EAC7D,KAAK,EACL,aAAa,EACb,IAAI,EACJ,MAAM,GACT,EAAE,qBAAqB,CAAC,MAAM,CAAC,+
|
|
1
|
+
{"version":3,"file":"global-search-tabs.d.ts","sourceRoot":"","sources":["../../../../../src/components/features/global-search/partials/global-search-tabs.tsx"],"names":[],"mappings":"AAUA,MAAM,WAAW,qBAAqB,CAAC,MAAM,SAAS,MAAM,GAAG,MAAM;IACjE,8BAA8B;IAC9B,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC;IACtB,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,KAAK,IAAI,CAAC;IAC/C,IAAI,EAAE,aAAa,CAAC;QAAE,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9D,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,wBAAgB,gBAAgB,CAAC,MAAM,SAAS,MAAM,GAAG,MAAM,EAAE,EAC7D,KAAK,EACL,aAAa,EACb,IAAI,EACJ,MAAM,GACT,EAAE,qBAAqB,CAAC,MAAM,CAAC,+BAyC/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/features/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,MAAM,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,KAAK,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,QAAQ,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,YAAY,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,cAAc,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,WAAW,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/features/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,MAAM,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,KAAK,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,QAAQ,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,YAAY,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,YAAY,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,cAAc,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,UAAU,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,WAAW,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../lib/strings.cjs"),t=require("../../../lib/utils.cjs"),n=require("../../../_shared/
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../lib/strings.cjs"),t=require("../../../lib/utils.cjs"),n=require("../../../_shared/heading-0DYCOrgC.cjs"),r=require("../../../_shared/button-C1qc97U1.cjs"),i=require("../../../_shared/popover-menu-Fz-bvWJF.cjs");let a=require("react"),o=require("react/jsx-runtime"),s=require("lucide-react"),c=require("@dnd-kit/core"),l=require("@dnd-kit/sortable"),u=require("@dnd-kit/utilities");function d({value:e,onValueChange:t,getItemValue:n,onItemMove:r}){let i=(0,a.useCallback)(t=>{for(let[r,i]of Object.entries(e)){let e=i.findIndex(e=>n(e)===t);if(e>=0)return{columnId:r,index:e,item:i[e]}}},[e,n]),o=(0,a.useCallback)(({itemId:n,toColumnId:a,toIndex:o})=>{let s=i(n);if(!s||!Object.prototype.hasOwnProperty.call(e,a))return;let{columnId:c,index:l,item:u}=s,d=e[a],f=o===void 0?d.length:Math.max(0,Math.min(o,d.length));if(c===a&&l===f)return;let p={...e},m=[...p[c]];m.splice(l,1),p[c]=m;let h=[...c===a?m:p[a]],g=f;c===a&&l<f&&(g=Math.max(0,f-1)),h.splice(g,0,u),p[a]=h,t(p),r?.({item:u,itemId:n,from:{columnId:c,index:l},to:{columnId:a,index:g}})},[e,i,t,r]);return(0,a.useMemo)(()=>({findItem:i,move:o}),[i,o])}var f=(0,a.createContext)(null),p=f.Provider;function m(){let e=(0,a.useContext)(f);if(!e)throw Error(`Kanban subcomponents must be rendered inside a <Kanban> root.`);return e}var h=(0,a.createContext)(null),g=h.Provider;function _(){let e=(0,a.useContext)(h);if(!e)throw Error(`<KanbanItemHandle> / <KanbanItemActions> must be rendered inside a <KanbanItem>.`);return e}var v={announceDragStart:`Picked up item {name}.`,announceDragMove:`Moving {name} from {from} to {to}.`,announceDragEnd:`Dropped {name} into {to}.`,announceDragCancel:`Cancelled drag of {name}.`,dragHandleAria:`Drag handle`,boardAria:`Kanban board`,itemActionsAria:`Item actions`};function y(e,t){return Object.entries(t).reduce((e,[t,n])=>e.replace(RegExp(`\\{${t}\\}`,`g`),n),e)}function b({value:n,onValueChange:r,getItemValue:i,onItemMove:s,itemActions:l,onItemClick:u,strings:f,className:m,children:h}){let g=e.useStrings(v,f),{findItem:_,move:y}=d({value:n,onValueChange:r,getItemValue:i,onItemMove:s}),[b,x]=(0,a.useState)(null),S=(0,c.useSensors)((0,c.useSensor)(c.PointerSensor,{activationConstraint:{distance:6}})),C=(0,a.useMemo)(()=>b?_(b)?.item??null:null,[b,_]),w=(0,a.useCallback)(e=>{x(String(e.active.id))},[]),T=(0,a.useCallback)(e=>{x(null);let{active:t,over:r}=e;if(!r)return;t.data.current;let i=r.data.current,a=String(r.id),o=i?.columnId??(Object.prototype.hasOwnProperty.call(n,a)?a:void 0);if(!o)return;let s=i?.columnId===void 0?n[o].length:i.index;y({itemId:String(t.id),toColumnId:o,toIndex:s})},[y,n]);return(0,o.jsx)(p,{value:(0,a.useMemo)(()=>({value:n,onValueChange:r,getItemValue:i,activeId:b,activeItem:C,findItem:_,itemActions:l,onItemClick:u}),[n,r,i,b,C,_,l,u]),children:(0,o.jsx)(c.DndContext,{sensors:S,onDragStart:w,onDragEnd:T,onDragCancel:()=>x(null),accessibility:{announcements:{onDragStart({active:e}){return g.announceDragStart.replace(`{name}`,String(e.id))},onDragOver({active:e,over:t}){if(t)return g.announceDragMove.replace(`{name}`,String(e.id)).replace(`{from}`,``).replace(`{to}`,String(t.id))},onDragEnd({active:e,over:t}){return g.announceDragEnd.replace(`{name}`,String(e.id)).replace(`{to}`,t?String(t.id):``)},onDragCancel({active:e}){return g.announceDragCancel.replace(`{name}`,String(e.id))}}},children:(0,o.jsx)(`div`,{role:`application`,"aria-label":g.boardAria,className:t.cn(`kanban--component`,`w-full`,m),children:h})})})}b.displayName=`Kanban`;function x({className:e,style:n,children:r}){return(0,o.jsx)(`div`,{className:t.cn(`grid w-full gap-3`,e),style:n,children:r})}x.displayName=`KanbanBoard`;function S({value:e,className:n,children:r}){let{setNodeRef:i,isOver:a}=(0,c.useDroppable)({id:e});return(0,o.jsx)(`div`,{ref:i,"data-slot":`kanban-column`,"data-column-id":e,"data-over":a?`true`:void 0,className:t.cn(`flex min-w-0 flex-col`,n),children:r})}S.displayName=`KanbanColumn`;function C({value:e,className:n,children:r}){let i=m();return(0,o.jsx)(l.SortableContext,{items:(i.value[e]??[]).map(e=>i.getItemValue(e)),strategy:l.verticalListSortingStrategy,children:(0,o.jsx)(`div`,{"data-slot":`kanban-column-content`,className:t.cn(`flex flex-col gap-2`,n),children:r})})}C.displayName=`KanbanColumnContent`;function w({value:e,className:n,disabled:r=!1,onClick:i,children:s}){let c=m(),d=c.findItem(e),{attributes:f,listeners:p,setNodeRef:h,setActivatorNodeRef:_,transform:v,transition:y,isDragging:b}=(0,l.useSortable)({id:e,disabled:r,data:{columnId:d?.columnId,index:d?.index}}),x={transform:u.CSS.Transform.toString(v),transition:y,opacity:b?.4:void 0},[S,C]=(0,a.useState)(0),w=S>0,T=(0,a.useCallback)(()=>(C(e=>e+1),()=>C(e=>Math.max(0,e-1))),[]),E=(0,a.useMemo)(()=>({listeners:p,attributes:f,setActivatorNodeRef:_,registerHandle:T,itemId:e,item:d?.item??null}),[p,f,_,T,e,d?.item]),D=c.onItemClick,O=(0,a.useCallback)(e=>{if(!e.target?.closest(`[data-stop-item-click]`)){if(i){i();return}D&&d?.item!==void 0&&D(d.item)}},[i,D,d?.item]),k=!!(i||D);return(0,o.jsx)(g,{value:E,children:(0,o.jsx)(`div`,{ref:h,style:x,"data-slot":`kanban-item`,"data-dragging":b?`true`:void 0,className:t.cn(`touch-none select-none`,k&&`cursor-pointer`,n),onClick:k?O:void 0,...w?{}:f,...w?{}:p,children:s})})}w.displayName=`KanbanItem`;var T=(0,a.forwardRef)(function({className:e,children:n},i){let{setActivatorNodeRef:s,listeners:c,attributes:l,registerHandle:u}=_();return(0,a.useEffect)(()=>u(),[u]),(0,o.jsx)(r.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`icon-xs`,ref:(0,a.useCallback)(e=>{s(e),typeof i==`function`?i(e):i&&(i.current=e)},[s,i]),"data-slot":`kanban-item-handle`,"data-stop-item-click":!0,onClick:e=>e.stopPropagation(),className:t.cn(`cursor-grab rounded-sm shadow-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/50 active:cursor-grabbing`,e),...l,...c,children:n})});T.displayName=`KanbanItemHandle`;function E({className:c,icon:l,ariaLabel:u}){let[d,f]=(0,a.useState)(!1),p=m(),h=_(),g=e.useStrings(v,void 0),y=h.item,b=p.itemActions,x=(0,a.useMemo)(()=>!b||y==null?[]:(typeof b==`function`?b(y):b).filter(e=>e.isVisible?e.isVisible(y):!0),[b,y]);return x.length===0?null:(0,o.jsx)(i.t,{open:d,onOpenChange:f,search:!1,contentClassName:`w-44`,trigger:(0,o.jsx)(r.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`icon-sm`,"data-slot":`kanban-item-actions-trigger`,"data-stop-item-click":!0,"aria-label":u??g.itemActionsAria,onClick:e=>e.stopPropagation(),onPointerDown:e=>e.stopPropagation(),className:t.cn(`size-7 rounded-md p-0`,`text-muted-foreground/70 hover:bg-muted hover:text-foreground`,`transition-colors`,c),children:l??(0,o.jsx)(s.MoreHorizontal,{className:`size-4`,"aria-hidden":`true`})}),items:x.map(e=>({value:e.id,label:e.label,icon:e.icon,disabled:e.isDisabled?.(y)??!1,data:e})),renderItem:e=>{let r=e.data,i=r.variant===`destructive`;return(0,o.jsxs)(o.Fragment,{children:[!!r.icon&&(0,o.jsx)(`span`,{className:t.cn(`shrink-0`,i?`text-destructive`:`text-muted-foreground`),children:r.icon}),(0,o.jsx)(n.n,{tag:`span`,size:`xs`,className:t.cn(`truncate`,i&&`text-destructive`),children:r.label})]})},onSelect:e=>{e.data?.onSelect(y),f(!1)}})}E.displayName=`KanbanItemActions`;function D({className:e,render:r}){let{activeItem:i,activeId:a,findItem:s}=m();return(0,o.jsx)(c.DragOverlay,{children:a?r?r({item:i,columnId:s(a)?.columnId??null}):(0,o.jsx)(`div`,{className:t.cn(`pointer-events-none rounded-md border-2 border-dashed border-primary/40 bg-primary/5 p-3 shadow-lg`,e),children:(0,o.jsx)(n.n,{tag:`span`,size:`xs`,weight:`medium`,className:`text-primary/80`,children:a})}):null})}D.displayName=`KanbanOverlay`,exports.Kanban=b,exports.KanbanBoard=x,exports.KanbanColumn=S,exports.KanbanColumnContent=C,exports.KanbanItem=w,exports.KanbanItemActions=E,exports.KanbanItemHandle=T,exports.KanbanOverlay=D,exports.defaultKanbanStrings=v,exports.interpolateKanbanString=y,exports.useKanban=d;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":[],"sources":["../../../../src/components/features/kanban/hooks/use-kanban.ts","../../../../src/components/features/kanban/kanban-context.tsx","../../../../src/components/features/kanban/kanban.strings.ts","../../../../src/components/features/kanban/kanban.tsx"],"sourcesContent":["import { useCallback, useMemo } from 'react';\n\nimport type { KanbanItemMoveEvent, KanbanValue } from '../kanban.types';\n\n/**\n * Headless hook — exposes the same state machine `<Kanban>` uses\n * internally so consumers can build a fully custom UI against it.\n *\n * const { findItem, move } = useKanban({ value, onValueChange,\n * getItemValue });\n * move({ itemId: 'card-1', toColumnId: 'shipped', toIndex: 0 });\n */\nexport interface UseKanbanOptions<T> {\n\tvalue: KanbanValue<T>;\n\tonValueChange: (next: KanbanValue<T>) => void;\n\tgetItemValue: (item: T) => string;\n\tonItemMove?: (event: KanbanItemMoveEvent<T>) => void;\n}\n\nexport interface UseKanbanResult<T> {\n\tfindItem: (id: string) => { columnId: string; index: number; item: T } | undefined;\n\t/**\n\t * Move an item between columns / within the same column. Idempotent:\n\t * a no-op move is safe.\n\t */\n\tmove: (input: { itemId: string; toColumnId: string; toIndex?: number }) => void;\n}\n\nexport function useKanban<T>({\n\tvalue,\n\tonValueChange,\n\tgetItemValue,\n\tonItemMove,\n}: UseKanbanOptions<T>): UseKanbanResult<T> {\n\tconst findItem = useCallback(\n\t\t(id: string) => {\n\t\t\tfor (const [columnId, items] of Object.entries(value)) {\n\t\t\t\tconst index = items.findIndex((item) => getItemValue(item) === id);\n\t\t\t\tif (index >= 0) return { columnId, index, item: items[index] };\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\t\t[value, getItemValue],\n\t);\n\n\tconst move = useCallback(\n\t\t({ itemId, toColumnId, toIndex }: { itemId: string; toColumnId: string; toIndex?: number }) => {\n\t\t\tconst found = findItem(itemId);\n\t\t\tif (!found) return;\n\t\t\tif (!Object.prototype.hasOwnProperty.call(value, toColumnId)) return;\n\n\t\t\tconst { columnId: fromColumnId, index: fromIndex, item } = found;\n\n\t\t\t// Same column, same slot — nothing to do.\n\t\t\tconst targetItems = value[toColumnId];\n\t\t\tconst resolvedToIndex =\n\t\t\t\ttoIndex === undefined\n\t\t\t\t\t? targetItems.length\n\t\t\t\t\t: Math.max(0, Math.min(toIndex, targetItems.length));\n\n\t\t\tif (fromColumnId === toColumnId && fromIndex === resolvedToIndex) return;\n\n\t\t\tconst next: KanbanValue<T> = { ...value };\n\t\t\tconst sourceCopy = [...next[fromColumnId]];\n\t\t\tsourceCopy.splice(fromIndex, 1);\n\t\t\tnext[fromColumnId] = sourceCopy;\n\n\t\t\tconst targetCopy = [...(fromColumnId === toColumnId ? sourceCopy : next[toColumnId])];\n\t\t\t// When moving within the same column to a later index, the splice\n\t\t\t// above shifted everything left — re-resolve the destination.\n\t\t\tlet landingIndex = resolvedToIndex;\n\t\t\tif (fromColumnId === toColumnId && fromIndex < resolvedToIndex) {\n\t\t\t\tlandingIndex = Math.max(0, resolvedToIndex - 1);\n\t\t\t}\n\t\t\ttargetCopy.splice(landingIndex, 0, item);\n\t\t\tnext[toColumnId] = targetCopy;\n\n\t\t\tonValueChange(next);\n\t\t\tonItemMove?.({\n\t\t\t\titem,\n\t\t\t\titemId,\n\t\t\t\tfrom: { columnId: fromColumnId, index: fromIndex },\n\t\t\t\tto: { columnId: toColumnId, index: landingIndex },\n\t\t\t});\n\t\t},\n\t\t[value, findItem, onValueChange, onItemMove],\n\t);\n\n\treturn useMemo(() => ({ findItem, move }), [findItem, move]);\n}\n","import { createContext, useContext } from 'react';\n\nimport type { KanbanContextShape } from './kanban.types';\n\n/**\n * Internal context for the Kanban — the parts use this to read\n * shared state (current value, getItemValue, active drag id).\n */\nconst KanbanContext = createContext<KanbanContextShape | null>(null);\n\nexport const KanbanContextProvider = KanbanContext.Provider;\n\nexport function useKanbanContext<T = unknown>(): KanbanContextShape<T> {\n\tconst ctx = useContext(KanbanContext);\n\tif (!ctx) {\n\t\tthrow new Error(\n\t\t\t'Kanban subcomponents must be rendered inside a <Kanban> root.',\n\t\t);\n\t}\n\treturn ctx as unknown as KanbanContextShape<T>;\n}\n\n/**\n * Internal context exposed by `<KanbanItem>` so the optional\n * `<KanbanItemHandle>` knows which listeners + accessibility props to\n * wire to the dedicated drag handle. Also carries the resolved\n * domain item so `<KanbanItemActions>` (and any other item-aware\n * subcomponent) can render per-item content without prop drilling.\n *\n * The dnd-kit shapes are widened to `unknown` so consumers can spread\n * them onto any HTMLElement.\n */\ninterface KanbanItemContextShape {\n\tlisteners: unknown;\n\tattributes: unknown;\n\tsetActivatorNodeRef: (node: HTMLElement | null) => void;\n\t/** Stable id (the value returned by `getItemValue`). */\n\titemId: string;\n\t/** The domain item itself — null if it can't be resolved. */\n\titem: unknown;\n}\n\nconst KanbanItemContext = createContext<KanbanItemContextShape | null>(null);\n\nexport const KanbanItemContextProvider = KanbanItemContext.Provider;\n\nexport function useKanbanItemContext(): KanbanItemContextShape {\n\tconst ctx = useContext(KanbanItemContext);\n\tif (!ctx) {\n\t\tthrow new Error(\n\t\t\t'<KanbanItemHandle> / <KanbanItemActions> must be rendered inside a <KanbanItem>.',\n\t\t);\n\t}\n\treturn ctx;\n}\n","/**\n * Strings for the Kanban — drag-and-drop screen-reader announcements\n * + accessibility labels. The library never renders user-visible copy\n * that the consumer hasn't already supplied via column headers / item\n * children, so the strings here are exclusively for assistive tech.\n */\nexport interface KanbanStrings {\n\t/** Read by screen readers when a drag begins. `{name}` = item id. */\n\tannounceDragStart: string;\n\t/** Read when an item moves over a column. `{from}` / `{to}` are column ids. */\n\tannounceDragMove: string;\n\t/** Read when an item is dropped into a column. */\n\tannounceDragEnd: string;\n\t/** Read when the user cancels a drag with Escape. */\n\tannounceDragCancel: string;\n\t/** Aria label on the drag handle. */\n\tdragHandleAria: string;\n\t/** Aria label on the board landmark. */\n\tboardAria: string;\n\t/** Aria label on the per-item actions trigger (`⋮`). */\n\titemActionsAria: string;\n}\n\nexport const defaultKanbanStrings: KanbanStrings = {\n\tannounceDragStart: 'Picked up item {name}.',\n\tannounceDragMove: 'Moving {name} from {from} to {to}.',\n\tannounceDragEnd: 'Dropped {name} into {to}.',\n\tannounceDragCancel: 'Cancelled drag of {name}.',\n\tdragHandleAria: 'Drag handle',\n\tboardAria: 'Kanban board',\n\titemActionsAria: 'Item actions',\n};\n\nexport function interpolateKanbanString(\n\ttemplate: string,\n\tparams: Record<string, string>,\n): string {\n\treturn Object.entries(params).reduce(\n\t\t(acc, [key, value]) => acc.replace(new RegExp(`\\\\{${key}\\\\}`, 'g'), value),\n\t\ttemplate,\n\t);\n}\n","/**\n * Kanban — drag-and-drop board with multi-column item sorting and\n * cross-column moves. Headless behavior comes from `@dnd-kit/core` +\n * `@dnd-kit/sortable`; the library wires it into a callback-driven,\n * generic-T API:\n *\n * <Kanban\n * value={columns}\n * onValueChange={setColumns}\n * getItemValue={(c) => c.id}\n * onItemMove={(e) => api.persistMove(e)}\n * >\n * <KanbanBoard className=\"grid grid-cols-3 gap-3\">\n * {Object.entries(columns).map(([colId, items]) => (\n * <KanbanColumn key={colId} value={colId}>\n * <header>{COLUMNS[colId].title}</header>\n * <KanbanColumnContent value={colId}>\n * {items.map((card) => (\n * <KanbanItem key={card.id} value={card.id}>\n * …card body…\n * </KanbanItem>\n * ))}\n * </KanbanColumnContent>\n * </KanbanColumn>\n * ))}\n * </KanbanBoard>\n * <KanbanOverlay />\n * </Kanban>\n *\n * The library never reaches into a router, never persists state — your\n * `onValueChange` is the source of truth. Use `onItemMove` for\n * analytics / optimistic-update plumbing.\n */\nimport {\n\tDndContext,\n\tDragOverlay,\n\tPointerSensor,\n\tuseDroppable,\n\tuseSensor,\n\tuseSensors,\n\ttype DragEndEvent,\n\ttype DragStartEvent,\n} from '@dnd-kit/core';\nimport {\n\tSortableContext,\n\tuseSortable,\n\tverticalListSortingStrategy,\n} from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { MoreHorizontal } from 'lucide-react';\nimport { forwardRef, useCallback, useMemo, useState, type MouseEvent } from 'react';\n\nimport { PopoverMenu } from '@/components/base/popover-menu';\nimport { Text } from '@/components/typography';\nimport { useStrings } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport { useKanban } from './hooks/use-kanban';\nimport {\n\tKanbanContextProvider,\n\tKanbanItemContextProvider,\n\tuseKanbanContext,\n\tuseKanbanItemContext,\n} from './kanban-context';\nimport { defaultKanbanStrings } from './kanban.strings';\nimport type {\n\tKanbanBoardProps,\n\tKanbanColumnContentProps,\n\tKanbanColumnProps,\n\tKanbanItemAction,\n\tKanbanItemActionsConfig,\n\tKanbanItemActionsProps,\n\tKanbanItemHandleProps,\n\tKanbanItemProps,\n\tKanbanOverlayProps,\n\tKanbanProps,\n} from './kanban.types';\n\nexport function Kanban<T>({\n\tvalue,\n\tonValueChange,\n\tgetItemValue,\n\tonItemMove,\n\titemActions,\n\tonItemClick,\n\tstrings: stringsProp,\n\tclassName,\n\tchildren,\n}: KanbanProps<T>) {\n\tconst strings = useStrings(defaultKanbanStrings, stringsProp);\n\tconst { findItem, move } = useKanban({\n\t\tvalue,\n\t\tonValueChange,\n\t\tgetItemValue,\n\t\tonItemMove,\n\t});\n\tconst [activeId, setActiveId] = useState<string | null>(null);\n\n\tconst sensors = useSensors(\n\t\tuseSensor(PointerSensor, { activationConstraint: { distance: 6 } }),\n\t);\n\n\tconst activeItem = useMemo(\n\t\t() => (activeId ? findItem(activeId)?.item ?? null : null),\n\t\t[activeId, findItem],\n\t);\n\n\tconst handleDragStart = useCallback(\n\t\t(event: DragStartEvent) => {\n\t\t\tsetActiveId(String(event.active.id));\n\t\t},\n\t\t[],\n\t);\n\n\tconst handleDragEnd = useCallback(\n\t\t(event: DragEndEvent) => {\n\t\t\tsetActiveId(null);\n\t\t\tconst { active, over } = event;\n\t\t\tif (!over) return;\n\t\t\tconst activeData = active.data.current as\n\t\t\t\t| { columnId?: string; index?: number }\n\t\t\t\t| undefined;\n\t\t\tconst overData = over.data.current as\n\t\t\t\t| { columnId?: string; index?: number }\n\t\t\t\t| undefined;\n\t\t\tconst overId = String(over.id);\n\n\t\t\t// Dropping on a column container (not a sortable item) → append.\n\t\t\tconst targetColumnId =\n\t\t\t\toverData?.columnId ?? (Object.prototype.hasOwnProperty.call(value, overId) ? overId : undefined);\n\t\t\tif (!targetColumnId) return;\n\n\t\t\tconst toIndex =\n\t\t\t\toverData?.columnId !== undefined ? overData.index : value[targetColumnId].length;\n\n\t\t\tmove({\n\t\t\t\titemId: String(active.id),\n\t\t\t\ttoColumnId: targetColumnId,\n\t\t\t\ttoIndex,\n\t\t\t});\n\t\t\tvoid activeData;\n\t\t},\n\t\t[move, value],\n\t);\n\n\tconst ctxValue = useMemo(\n\t\t() => ({\n\t\t\tvalue: value as Record<string, unknown[]>,\n\t\t\tonValueChange: onValueChange as (next: Record<string, unknown[]>) => void,\n\t\t\tgetItemValue: getItemValue as (item: unknown) => string,\n\t\t\tactiveId,\n\t\t\tactiveItem: activeItem as unknown,\n\t\t\tfindItem: findItem as (id: string) => { columnId: string; index: number; item: unknown } | undefined,\n\t\t\titemActions: itemActions as KanbanItemActionsConfig<unknown> | undefined,\n\t\t\tonItemClick: onItemClick as ((item: unknown) => void) | undefined,\n\t\t}),\n\t\t[value, onValueChange, getItemValue, activeId, activeItem, findItem, itemActions, onItemClick],\n\t);\n\n\treturn (\n\t\t<KanbanContextProvider value={ctxValue}>\n\t\t\t<DndContext\n\t\t\t\tsensors={sensors}\n\t\t\t\tonDragStart={handleDragStart}\n\t\t\t\tonDragEnd={handleDragEnd}\n\t\t\t\tonDragCancel={() => setActiveId(null)}\n\t\t\t\taccessibility={{\n\t\t\t\t\tannouncements: {\n\t\t\t\t\t\tonDragStart({ active }) {\n\t\t\t\t\t\t\treturn strings.announceDragStart.replace('{name}', String(active.id));\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonDragOver({ active, over }) {\n\t\t\t\t\t\t\tif (!over) return undefined;\n\t\t\t\t\t\t\treturn strings.announceDragMove\n\t\t\t\t\t\t\t\t.replace('{name}', String(active.id))\n\t\t\t\t\t\t\t\t.replace('{from}', '')\n\t\t\t\t\t\t\t\t.replace('{to}', String(over.id));\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonDragEnd({ active, over }) {\n\t\t\t\t\t\t\treturn strings.announceDragEnd\n\t\t\t\t\t\t\t\t.replace('{name}', String(active.id))\n\t\t\t\t\t\t\t\t.replace('{to}', over ? String(over.id) : '');\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonDragCancel({ active }) {\n\t\t\t\t\t\t\treturn strings.announceDragCancel.replace('{name}', String(active.id));\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\trole=\"application\"\n\t\t\t\t\taria-label={strings.boardAria}\n\t\t\t\t\tclassName={cn('kanban--component', 'w-full', className)}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</DndContext>\n\t\t</KanbanContextProvider>\n\t);\n}\n\nKanban.displayName = 'Kanban';\n\nexport function KanbanBoard({ className, style, children }: KanbanBoardProps) {\n\treturn (\n\t\t<div className={cn('grid w-full gap-3', className)} style={style}>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n\nKanbanBoard.displayName = 'KanbanBoard';\n\nexport function KanbanColumn({ value, className, children }: KanbanColumnProps) {\n\tconst { setNodeRef, isOver } = useDroppable({ id: value });\n\treturn (\n\t\t<div\n\t\t\tref={setNodeRef}\n\t\t\tdata-slot=\"kanban-column\"\n\t\t\tdata-column-id={value}\n\t\t\tdata-over={isOver ? 'true' : undefined}\n\t\t\tclassName={cn('flex min-w-0 flex-col', className)}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n\nKanbanColumn.displayName = 'KanbanColumn';\n\nexport function KanbanColumnContent({\n\tvalue,\n\tclassName,\n\tchildren,\n}: KanbanColumnContentProps) {\n\tconst ctx = useKanbanContext();\n\tconst items = ctx.value[value] ?? [];\n\tconst ids = items.map((item) => ctx.getItemValue(item));\n\treturn (\n\t\t<SortableContext items={ids} strategy={verticalListSortingStrategy}>\n\t\t\t<div\n\t\t\t\tdata-slot=\"kanban-column-content\"\n\t\t\t\tclassName={cn('flex flex-col gap-2', className)}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</SortableContext>\n\t);\n}\n\nKanbanColumnContent.displayName = 'KanbanColumnContent';\n\nexport function KanbanItem({\n\tvalue,\n\tclassName,\n\tdisabled = false,\n\tonClick,\n\tchildren,\n}: KanbanItemProps) {\n\tconst ctx = useKanbanContext();\n\tconst found = ctx.findItem(value);\n\tconst {\n\t\tattributes,\n\t\tlisteners,\n\t\tsetNodeRef,\n\t\tsetActivatorNodeRef,\n\t\ttransform,\n\t\ttransition,\n\t\tisDragging,\n\t} = useSortable({\n\t\tid: value,\n\t\tdisabled,\n\t\tdata: { columnId: found?.columnId, index: found?.index },\n\t});\n\n\tconst style = {\n\t\ttransform: CSS.Transform.toString(transform),\n\t\ttransition,\n\t\topacity: isDragging ? 0.4 : undefined,\n\t};\n\n\tconst itemCtx = useMemo(\n\t\t() => ({\n\t\t\tlisteners,\n\t\t\tattributes,\n\t\t\tsetActivatorNodeRef,\n\t\t\titemId: value,\n\t\t\titem: found?.item ?? null,\n\t\t}),\n\t\t[listeners, attributes, setActivatorNodeRef, value, found?.item],\n\t);\n\n\tconst rootClick = ctx.onItemClick;\n\tconst handleClick = useCallback(\n\t\t(event: MouseEvent<HTMLDivElement>) => {\n\t\t\t// `<KanbanItemHandle>` and `<KanbanItemActions>` mark themselves\n\t\t\t// with `data-stop-item-click` so a click on the drag handle or\n\t\t\t// the actions menu doesn't bubble up as a card click.\n\t\t\tconst target = event.target as HTMLElement | null;\n\t\t\tif (target?.closest('[data-stop-item-click]')) return;\n\t\t\tif (onClick) {\n\t\t\t\tonClick();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (rootClick && found?.item !== undefined) {\n\t\t\t\trootClick(found.item);\n\t\t\t}\n\t\t},\n\t\t[onClick, rootClick, found?.item],\n\t);\n\n\tconst isClickable = Boolean(onClick || rootClick);\n\n\t// When no <KanbanItemHandle> is used, the whole row is the activator.\n\t// We attach listeners + attributes here as the default — KanbanItemHandle\n\t// can then override by wiring them to a more specific element.\n\treturn (\n\t\t<KanbanItemContextProvider value={itemCtx}>\n\t\t\t<div\n\t\t\t\tref={setNodeRef}\n\t\t\t\tstyle={style}\n\t\t\t\tdata-slot=\"kanban-item\"\n\t\t\t\tdata-dragging={isDragging ? 'true' : undefined}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'touch-none select-none',\n\t\t\t\t\tisClickable && 'cursor-pointer',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tonClick={isClickable ? handleClick : undefined}\n\t\t\t\t{...attributes}\n\t\t\t\t{...listeners}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</KanbanItemContextProvider>\n\t);\n}\n\nKanbanItem.displayName = 'KanbanItem';\n\nexport const KanbanItemHandle = forwardRef<HTMLButtonElement, KanbanItemHandleProps>(function KanbanItemHandle({ className, children }, forwardedRef) {\n\tconst { setActivatorNodeRef, listeners, attributes } = useKanbanItemContext();\n\t// Merge dnd-kit's activator ref with the consumer's forwarded ref so a\n\t// `<Tooltip><KanbanItemHandle ref={…}/></Tooltip>` wiring still gets a\n\t// real ref to the button element.\n\tconst setMergedRef = useCallback(\n\t\t(node: HTMLButtonElement | null) => {\n\t\t\tsetActivatorNodeRef(node);\n\t\t\tif (typeof forwardedRef === 'function') {\n\t\t\t\tforwardedRef(node);\n\t\t\t} else if (forwardedRef) {\n\t\t\t\tforwardedRef.current = node;\n\t\t\t}\n\t\t},\n\t\t[setActivatorNodeRef, forwardedRef],\n\t);\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tref={setMergedRef}\n\t\t\tdata-slot=\"kanban-item-handle\"\n\t\t\tdata-stop-item-click\n\t\t\tonClick={(event) => event.stopPropagation()}\n\t\t\tclassName={cn(\n\t\t\t\t'inline-flex cursor-grab items-center justify-center rounded-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/50 active:cursor-grabbing',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...(attributes as Record<string, unknown>)}\n\t\t\t{...(listeners as Record<string, unknown>)}\n\t\t>\n\t\t\t{children}\n\t\t</button>\n\t);\n});\n\nKanbanItemHandle.displayName = 'KanbanItemHandle';\n\n/**\n * Per-item actions menu (`⋮` trigger → popover with the actions\n * registered at the `<Kanban itemActions>` root). Place inside any\n * `<KanbanItem>` — typically in the card's top-right corner.\n *\n * The trigger marks itself with `data-stop-item-click` so opening the\n * menu doesn't fire the parent `onItemClick` callback.\n */\nexport function KanbanItemActions({\n\tclassName,\n\ticon,\n\tariaLabel,\n}: KanbanItemActionsProps) {\n\tconst [open, setOpen] = useState(false);\n\tconst ctx = useKanbanContext();\n\tconst itemCtx = useKanbanItemContext();\n\tconst strings = useStrings(defaultKanbanStrings, undefined);\n\n\tconst item = itemCtx.item;\n\tconst rawActions = ctx.itemActions;\n\tconst actions = useMemo(() => {\n\t\tif (!rawActions || item === null || item === undefined) return [] as ReadonlyArray<KanbanItemAction<unknown>>;\n\t\tconst list = typeof rawActions === 'function' ? rawActions(item) : rawActions;\n\t\treturn list.filter((action) =>\n\t\t\taction.isVisible ? action.isVisible(item) : true,\n\t\t);\n\t}, [rawActions, item]);\n\n\tif (actions.length === 0) return null;\n\n\treturn (\n\t\t<PopoverMenu\n\t\t\topen={open}\n\t\t\tonOpenChange={setOpen}\n\t\t\tsearch={false}\n\t\t\tcontentClassName=\"w-44\"\n\t\t\ttrigger={\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tdata-slot=\"kanban-item-actions-trigger\"\n\t\t\t\t\tdata-stop-item-click\n\t\t\t\t\taria-label={ariaLabel ?? strings.itemActionsAria}\n\t\t\t\t\tonClick={(event) => event.stopPropagation()}\n\t\t\t\t\tonPointerDown={(event) => event.stopPropagation()}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'inline-flex size-7 items-center justify-center rounded-md',\n\t\t\t\t\t\t'text-muted-foreground/70 hover:bg-muted hover:text-foreground',\n\t\t\t\t\t\t'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/50',\n\t\t\t\t\t\t'transition-colors',\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{icon ?? <MoreHorizontal className=\"size-4\" aria-hidden=\"true\" />}\n\t\t\t\t</button>\n\t\t\t}\n\t\t\titems={actions.map((action) => ({\n\t\t\t\tvalue: action.id,\n\t\t\t\tlabel: action.label,\n\t\t\t\ticon: action.icon,\n\t\t\t\tdisabled: action.isDisabled?.(item) ?? false,\n\t\t\t\tdata: action,\n\t\t\t}))}\n\t\t\trenderItem={(menuItem) => {\n\t\t\t\tconst action = menuItem.data as KanbanItemAction<unknown>;\n\t\t\t\tconst isDestructive = action.variant === 'destructive';\n\t\t\t\treturn (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{!!action.icon && (\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'shrink-0',\n\t\t\t\t\t\t\t\t\tisDestructive ? 'text-destructive' : 'text-muted-foreground',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{action.icon}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'truncate',\n\t\t\t\t\t\t\t\tisDestructive && 'text-destructive',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{action.label}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</>\n\t\t\t\t);\n\t\t\t}}\n\t\t\tonSelect={(menuItem) => {\n\t\t\t\tconst action = menuItem.data as KanbanItemAction<unknown> | undefined;\n\t\t\t\taction?.onSelect(item);\n\t\t\t\tsetOpen(false);\n\t\t\t}}\n\t\t/>\n\t);\n}\n\nKanbanItemActions.displayName = 'KanbanItemActions';\n\nexport function KanbanOverlay({ className, render }: KanbanOverlayProps) {\n\tconst { activeItem, activeId, findItem } = useKanbanContext();\n\treturn (\n\t\t<DragOverlay>\n\t\t\t{activeId\n\t\t\t\t? render\n\t\t\t\t\t? render({\n\t\t\t\t\t\t\titem: activeItem,\n\t\t\t\t\t\t\tcolumnId: findItem(activeId)?.columnId ?? null,\n\t\t\t\t\t\t})\n\t\t\t\t\t: (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'pointer-events-none rounded-md border-2 border-dashed border-primary/40 bg-primary/5 p-3 shadow-lg',\n\t\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" weight=\"medium\" className=\"text-primary/80\">{activeId}</Text>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)\n\t\t\t\t: null}\n\t\t</DragOverlay>\n\t);\n}\n\nKanbanOverlay.displayName = 'KanbanOverlay';\n"],"mappings":"qaA4BA,SAAgB,EAAa,CAC5B,QACA,gBACA,eACA,cAC2C,CAC3C,IAAM,GAAA,EAAA,EAAA,aACJ,GAAe,CACf,IAAK,GAAM,CAAC,EAAU,KAAU,OAAO,QAAQ,CAAK,EAAG,CACtD,IAAM,EAAQ,EAAM,UAAW,GAAS,EAAa,CAAI,IAAM,CAAE,EACjE,GAAI,GAAS,EAAG,MAAO,CAAE,WAAU,QAAO,KAAM,EAAM,EAAO,CAC9D,CAED,EACA,CAAC,EAAO,CAAY,CACrB,EAEM,GAAA,EAAA,EAAA,cACJ,CAAE,SAAQ,aAAY,aAAwE,CAC9F,IAAM,EAAQ,EAAS,CAAM,EAE7B,GADI,CAAC,GACD,CAAC,OAAO,UAAU,eAAe,KAAK,EAAO,CAAU,EAAG,OAE9D,GAAM,CAAE,SAAU,EAAc,MAAO,EAAW,QAAS,EAGrD,EAAc,EAAM,GACpB,EACL,IAAY,IAAA,GACT,EAAY,OACZ,KAAK,IAAI,EAAG,KAAK,IAAI,EAAS,EAAY,MAAM,CAAC,EAErD,GAAI,IAAiB,GAAc,IAAc,EAAiB,OAElE,IAAM,EAAuB,CAAE,GAAG,CAAM,EAClC,EAAa,CAAC,GAAG,EAAK,EAAa,EACzC,EAAW,OAAO,EAAW,CAAC,EAC9B,EAAK,GAAgB,EAErB,IAAM,EAAa,CAAC,GAAI,IAAiB,EAAa,EAAa,EAAK,EAAY,EAGhF,EAAe,EACf,IAAiB,GAAc,EAAY,IAC9C,EAAe,KAAK,IAAI,EAAG,EAAkB,CAAC,GAE/C,EAAW,OAAO,EAAc,EAAG,CAAI,EACvC,EAAK,GAAc,EAEnB,EAAc,CAAI,EAClB,IAAa,CACZ,OACA,SACA,KAAM,CAAE,SAAU,EAAc,MAAO,CAAU,EACjD,GAAI,CAAE,SAAU,EAAY,MAAO,CAAa,CACjD,CAAC,CACF,EACA,CAAC,EAAO,EAAU,EAAe,CAAU,CAC5C,EAEA,OAAA,EAAA,EAAA,cAAsB,CAAE,WAAU,MAAK,GAAI,CAAC,EAAU,CAAI,CAAC,CAC5D,CCjFA,IAAM,GAAA,EAAA,EAAA,eAAyD,IAAI,EAEtD,EAAwB,EAAc,SAEnD,SAAgB,GAAuD,CACtE,IAAM,GAAA,EAAA,EAAA,YAAiB,CAAa,EACpC,GAAI,CAAC,EACJ,MAAU,MACT,+DACD,EAED,OAAO,CACR,CAsBA,IAAM,GAAA,EAAA,EAAA,eAAiE,IAAI,EAE9D,EAA4B,EAAkB,SAE3D,SAAgB,GAA+C,CAC9D,IAAM,GAAA,EAAA,EAAA,YAAiB,CAAiB,EACxC,GAAI,CAAC,EACJ,MAAU,MACT,kFACD,EAED,OAAO,CACR,CC/BA,IAAa,EAAsC,CAClD,kBAAmB,yBACnB,iBAAkB,qCAClB,gBAAiB,4BACjB,mBAAoB,4BACpB,eAAgB,cAChB,UAAW,eACX,gBAAiB,cAClB,EAEA,SAAgB,EACf,EACA,EACS,CACT,OAAO,OAAO,QAAQ,CAAM,EAAE,QAC5B,EAAK,CAAC,EAAK,KAAW,EAAI,QAAY,OAAO,MAAM,EAAI,KAAM,GAAG,EAAG,CAAK,EACzE,CACD,CACD,CCqCA,SAAgB,EAAU,CACzB,QACA,gBACA,eACA,aACA,cACA,cACA,QAAS,EACT,YACA,YACkB,CAClB,IAAM,EAAU,EAAA,WAAW,EAAsB,CAAW,EACtD,CAAE,WAAU,QAAS,EAAU,CACpC,QACA,gBACA,eACA,YACD,CAAC,EACK,CAAC,EAAU,IAAA,EAAA,EAAA,UAAuC,IAAI,EAEtD,GAAA,EAAA,EAAA,aAAA,EAAA,EAAA,WACK,EAAA,cAAe,CAAE,qBAAsB,CAAE,SAAU,CAAE,CAAE,CAAC,CACnE,EAEM,GAAA,EAAA,EAAA,aACE,EAAW,EAAS,CAAQ,GAAG,MAAQ,KAAO,KACrD,CAAC,EAAU,CAAQ,CACpB,EAEM,GAAA,EAAA,EAAA,aACJ,GAA0B,CAC1B,EAAY,OAAO,EAAM,OAAO,EAAE,CAAC,CACpC,EACA,CAAC,CACF,EAEM,GAAA,EAAA,EAAA,aACJ,GAAwB,CACxB,EAAY,IAAI,EAChB,GAAM,CAAE,SAAQ,QAAS,EACzB,GAAI,CAAC,EAAM,OACQ,EAAO,KAAK,QAG/B,IAAM,EAAW,EAAK,KAAK,QAGrB,EAAS,OAAO,EAAK,EAAE,EAGvB,EACL,GAAU,WAAa,OAAO,UAAU,eAAe,KAAK,EAAO,CAAM,EAAI,EAAS,IAAA,IACvF,GAAI,CAAC,EAAgB,OAErB,IAAM,EACL,GAAU,WAAa,IAAA,GAA6B,EAAM,GAAgB,OAAvC,EAAS,MAE7C,EAAK,CACJ,OAAQ,OAAO,EAAO,EAAE,EACxB,WAAY,EACZ,SACD,CAAC,CAEF,EACA,CAAC,EAAM,CAAK,CACb,EAgBA,OACC,EAAA,EAAA,KAAC,EAAD,CAAuB,OAAA,EAAA,EAAA,cAdhB,CACC,QACQ,gBACD,eACd,WACY,aACF,WACG,cACA,aACd,GACA,CAAC,EAAO,EAAe,EAAc,EAAU,EAAY,EAAU,EAAa,CAAW,CAI/D,YAC7B,EAAA,EAAA,KAAC,EAAA,WAAD,CACU,UACT,YAAa,EACb,UAAW,EACX,iBAAoB,EAAY,IAAI,EACpC,cAAe,CACd,cAAe,CACd,YAAY,CAAE,UAAU,CACvB,OAAO,EAAQ,kBAAkB,QAAQ,SAAU,OAAO,EAAO,EAAE,CAAC,CACrE,EACA,WAAW,CAAE,SAAQ,QAAQ,CACvB,KACL,OAAO,EAAQ,iBACb,QAAQ,SAAU,OAAO,EAAO,EAAE,CAAC,EACnC,QAAQ,SAAU,EAAE,EACpB,QAAQ,OAAQ,OAAO,EAAK,EAAE,CAAC,CAClC,EACA,UAAU,CAAE,SAAQ,QAAQ,CAC3B,OAAO,EAAQ,gBACb,QAAQ,SAAU,OAAO,EAAO,EAAE,CAAC,EACnC,QAAQ,OAAQ,EAAO,OAAO,EAAK,EAAE,EAAI,EAAE,CAC9C,EACA,aAAa,CAAE,UAAU,CACxB,OAAO,EAAQ,mBAAmB,QAAQ,SAAU,OAAO,EAAO,EAAE,CAAC,CACtE,CACD,CACD,YAEA,EAAA,EAAA,KAAC,MAAD,CACC,KAAK,cACL,aAAY,EAAQ,UACpB,UAAW,EAAA,GAAG,oBAAqB,SAAU,CAAS,EAErD,UACG,CAAA,CACM,CAAA,CACU,CAAA,CAEzB,CAEA,EAAO,YAAc,SAErB,SAAgB,EAAY,CAAE,YAAW,QAAO,YAA8B,CAC7E,OACC,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,EAAA,GAAG,oBAAqB,CAAS,EAAU,QACzD,UACG,CAAA,CAEP,CAEA,EAAY,YAAc,cAE1B,SAAgB,EAAa,CAAE,QAAO,YAAW,YAA+B,CAC/E,GAAM,CAAE,aAAY,WAAA,EAAA,EAAA,cAAwB,CAAE,GAAI,CAAM,CAAC,EACzD,OACC,EAAA,EAAA,KAAC,MAAD,CACC,IAAK,EACL,YAAU,gBACV,iBAAgB,EAChB,YAAW,EAAS,OAAS,IAAA,GAC7B,UAAW,EAAA,GAAG,wBAAyB,CAAS,EAE/C,UACG,CAAA,CAEP,CAEA,EAAa,YAAc,eAE3B,SAAgB,EAAoB,CACnC,QACA,YACA,YAC4B,CAC5B,IAAM,EAAM,EAAiB,EAG7B,OACC,EAAA,EAAA,KAAC,EAAA,gBAAD,CAAiB,OAHJ,EAAI,MAAM,IAAU,CAAC,GACjB,IAAK,GAAS,EAAI,aAAa,CAAI,CAE5B,EAAK,SAAU,EAAA,sCACtC,EAAA,EAAA,KAAC,MAAD,CACC,YAAU,wBACV,UAAW,EAAA,GAAG,sBAAuB,CAAS,EAE7C,UACG,CAAA,CACW,CAAA,CAEnB,CAEA,EAAoB,YAAc,sBAElC,SAAgB,EAAW,CAC1B,QACA,YACA,WAAW,GACX,UACA,YACmB,CACnB,IAAM,EAAM,EAAiB,EACvB,EAAQ,EAAI,SAAS,CAAK,EAC1B,CACL,aACA,YACA,aACA,sBACA,YACA,aACA,eAAA,EAAA,EAAA,aACe,CACf,GAAI,EACJ,WACA,KAAM,CAAE,SAAU,GAAO,SAAU,MAAO,GAAO,KAAM,CACxD,CAAC,EAEK,EAAQ,CACb,UAAW,EAAA,IAAI,UAAU,SAAS,CAAS,EAC3C,aACA,QAAS,EAAa,GAAM,IAAA,EAC7B,EAEM,GAAA,EAAA,EAAA,cACE,CACN,YACA,aACA,sBACA,OAAQ,EACR,KAAM,GAAO,MAAQ,IACtB,GACA,CAAC,EAAW,EAAY,EAAqB,EAAO,GAAO,IAAI,CAChE,EAEM,EAAY,EAAI,YAChB,GAAA,EAAA,EAAA,aACJ,GAAsC,CAIvB,MAAM,QACT,QAAQ,wBAAwB,EAC5C,IAAI,EAAS,CACZ,EAAQ,EACR,MACD,CACI,GAAa,GAAO,OAAS,IAAA,IAChC,EAAU,EAAM,IAAI,CAFrB,CAID,EACA,CAAC,EAAS,EAAW,GAAO,IAAI,CACjC,EAEM,EAAc,GAAQ,GAAW,GAKvC,OACC,EAAA,EAAA,KAAC,EAAD,CAA2B,MAAO,YACjC,EAAA,EAAA,KAAC,MAAD,CACC,IAAK,EACE,QACP,YAAU,cACV,gBAAe,EAAa,OAAS,IAAA,GACrC,UAAW,EAAA,GACV,yBACA,GAAe,iBACf,CACD,EACA,QAAS,EAAc,EAAc,IAAA,GACrC,GAAI,EACJ,GAAI,EAEH,UACG,CAAA,CACqB,CAAA,CAE7B,CAEA,EAAW,YAAc,aAEzB,IAAa,GAAA,EAAA,EAAA,YAAwE,SAA0B,CAAE,YAAW,YAAY,EAAc,CACrJ,GAAM,CAAE,sBAAqB,YAAW,cAAe,EAAqB,EAe5E,OACC,EAAA,EAAA,KAAC,SAAD,CACC,KAAK,SACL,KAAA,EAAA,EAAA,aAbA,GAAmC,CACnC,EAAoB,CAAI,EACpB,OAAO,GAAiB,WAC3B,EAAa,CAAI,EACP,IACV,EAAa,QAAU,EAEzB,EACA,CAAC,EAAqB,CAAY,CAK5B,EACL,YAAU,qBACV,uBAAA,GACA,QAAU,GAAU,EAAM,gBAAgB,EAC1C,UAAW,EAAA,GACV,mKACA,CACD,EACA,GAAK,EACL,GAAK,EAEJ,UACM,CAAA,CAEV,CAAC,EAED,EAAiB,YAAc,mBAU/B,SAAgB,EAAkB,CACjC,YACA,OACA,aAC0B,CAC1B,GAAM,CAAC,EAAM,IAAA,EAAA,EAAA,UAAoB,EAAK,EAChC,EAAM,EAAiB,EACvB,EAAU,EAAqB,EAC/B,EAAU,EAAA,WAAW,EAAsB,IAAA,EAAS,EAEpD,EAAO,EAAQ,KACf,EAAa,EAAI,YACjB,GAAA,EAAA,EAAA,aACD,CAAC,GAAc,GAAS,KAAmC,CAAC,GACnD,OAAO,GAAe,WAAa,EAAW,CAAI,EAAI,GACvD,OAAQ,GACnB,EAAO,UAAY,EAAO,UAAU,CAAI,EAAI,EAC7C,EACE,CAAC,EAAY,CAAI,CAAC,EAIrB,OAFI,EAAQ,SAAW,EAAU,MAGhC,EAAA,EAAA,KAAC,EAAA,EAAD,CACO,OACN,aAAc,EACd,OAAQ,GACR,iBAAiB,OACjB,SACC,EAAA,EAAA,KAAC,SAAD,CACC,KAAK,SACL,YAAU,8BACV,uBAAA,GACA,aAAY,GAAa,EAAQ,gBACjC,QAAU,GAAU,EAAM,gBAAgB,EAC1C,cAAgB,GAAU,EAAM,gBAAgB,EAChD,UAAW,EAAA,GACV,4DACA,gEACA,6EACA,oBACA,CACD,WAEC,IAAQ,EAAA,EAAA,KAAC,EAAA,eAAD,CAAgB,UAAU,SAAS,cAAY,MAAQ,CAAA,CACzD,CAAA,EAET,MAAO,EAAQ,IAAK,IAAY,CAC/B,MAAO,EAAO,GACd,MAAO,EAAO,MACd,KAAM,EAAO,KACb,SAAU,EAAO,aAAa,CAAI,GAAK,GACvC,KAAM,CACP,EAAE,EACF,WAAa,GAAa,CACzB,IAAM,EAAS,EAAS,KAClB,EAAgB,EAAO,UAAY,cACzC,OACC,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,CACE,CAAC,CAAC,EAAO,OACT,EAAA,EAAA,KAAC,OAAD,CACC,UAAW,EAAA,GACV,WACA,EAAgB,mBAAqB,uBACtC,WAEC,EAAO,IACH,CAAA,GAEP,EAAA,EAAA,KAAC,EAAA,EAAD,CACC,IAAI,OACJ,KAAK,KACL,UAAW,EAAA,GACV,WACA,GAAiB,kBAClB,WAEC,EAAO,KACH,CAAA,CACL,CAAA,CAAA,CAEJ,EACA,SAAW,GAAa,CAEvB,EADwB,MAChB,SAAS,CAAI,EACrB,EAAQ,EAAK,CACd,CACA,CAAA,CAEH,CAEA,EAAkB,YAAc,oBAEhC,SAAgB,EAAc,CAAE,YAAW,UAA8B,CACxE,GAAM,CAAE,aAAY,WAAU,YAAa,EAAiB,EAC5D,OACC,EAAA,EAAA,KAAC,EAAA,YAAD,CAAA,SACE,EACE,EACC,EAAO,CACP,KAAM,EACN,SAAU,EAAS,CAAQ,GAAG,UAAY,IAC3C,CAAC,GAED,EAAA,EAAA,KAAC,MAAD,CACC,UAAW,EAAA,GACV,qGACA,CACD,YAEA,EAAA,EAAA,KAAC,EAAA,EAAD,CAAM,IAAI,OAAO,KAAK,KAAK,OAAO,SAAS,UAAU,2BAAmB,CAAe,CAAA,CACnF,CAAA,EAEL,IACS,CAAA,CAEf,CAEA,EAAc,YAAc"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../../../../src/components/features/kanban/hooks/use-kanban.ts","../../../../src/components/features/kanban/kanban-context.tsx","../../../../src/components/features/kanban/kanban.strings.ts","../../../../src/components/features/kanban/kanban.tsx"],"sourcesContent":["import { useCallback, useMemo } from 'react';\n\nimport type { KanbanItemMoveEvent, KanbanValue } from '../kanban.types';\n\n/**\n * Headless hook — exposes the same state machine `<Kanban>` uses\n * internally so consumers can build a fully custom UI against it.\n *\n * const { findItem, move } = useKanban({ value, onValueChange,\n * getItemValue });\n * move({ itemId: 'card-1', toColumnId: 'shipped', toIndex: 0 });\n */\nexport interface UseKanbanOptions<T> {\n\tvalue: KanbanValue<T>;\n\tonValueChange: (next: KanbanValue<T>) => void;\n\tgetItemValue: (item: T) => string;\n\tonItemMove?: (event: KanbanItemMoveEvent<T>) => void;\n}\n\nexport interface UseKanbanResult<T> {\n\tfindItem: (id: string) => { columnId: string; index: number; item: T } | undefined;\n\t/**\n\t * Move an item between columns / within the same column. Idempotent:\n\t * a no-op move is safe.\n\t */\n\tmove: (input: { itemId: string; toColumnId: string; toIndex?: number }) => void;\n}\n\nexport function useKanban<T>({\n\tvalue,\n\tonValueChange,\n\tgetItemValue,\n\tonItemMove,\n}: UseKanbanOptions<T>): UseKanbanResult<T> {\n\tconst findItem = useCallback(\n\t\t(id: string) => {\n\t\t\tfor (const [columnId, items] of Object.entries(value)) {\n\t\t\t\tconst index = items.findIndex((item) => getItemValue(item) === id);\n\t\t\t\tif (index >= 0) return { columnId, index, item: items[index] };\n\t\t\t}\n\t\t\treturn undefined;\n\t\t},\n\t\t[value, getItemValue],\n\t);\n\n\tconst move = useCallback(\n\t\t({ itemId, toColumnId, toIndex }: { itemId: string; toColumnId: string; toIndex?: number }) => {\n\t\t\tconst found = findItem(itemId);\n\t\t\tif (!found) return;\n\t\t\tif (!Object.prototype.hasOwnProperty.call(value, toColumnId)) return;\n\n\t\t\tconst { columnId: fromColumnId, index: fromIndex, item } = found;\n\n\t\t\t// Same column, same slot — nothing to do.\n\t\t\tconst targetItems = value[toColumnId];\n\t\t\tconst resolvedToIndex =\n\t\t\t\ttoIndex === undefined\n\t\t\t\t\t? targetItems.length\n\t\t\t\t\t: Math.max(0, Math.min(toIndex, targetItems.length));\n\n\t\t\tif (fromColumnId === toColumnId && fromIndex === resolvedToIndex) return;\n\n\t\t\tconst next: KanbanValue<T> = { ...value };\n\t\t\tconst sourceCopy = [...next[fromColumnId]];\n\t\t\tsourceCopy.splice(fromIndex, 1);\n\t\t\tnext[fromColumnId] = sourceCopy;\n\n\t\t\tconst targetCopy = [...(fromColumnId === toColumnId ? sourceCopy : next[toColumnId])];\n\t\t\t// When moving within the same column to a later index, the splice\n\t\t\t// above shifted everything left — re-resolve the destination.\n\t\t\tlet landingIndex = resolvedToIndex;\n\t\t\tif (fromColumnId === toColumnId && fromIndex < resolvedToIndex) {\n\t\t\t\tlandingIndex = Math.max(0, resolvedToIndex - 1);\n\t\t\t}\n\t\t\ttargetCopy.splice(landingIndex, 0, item);\n\t\t\tnext[toColumnId] = targetCopy;\n\n\t\t\tonValueChange(next);\n\t\t\tonItemMove?.({\n\t\t\t\titem,\n\t\t\t\titemId,\n\t\t\t\tfrom: { columnId: fromColumnId, index: fromIndex },\n\t\t\t\tto: { columnId: toColumnId, index: landingIndex },\n\t\t\t});\n\t\t},\n\t\t[value, findItem, onValueChange, onItemMove],\n\t);\n\n\treturn useMemo(() => ({ findItem, move }), [findItem, move]);\n}\n","import { createContext, useContext } from 'react';\n\nimport type { KanbanContextShape } from './kanban.types';\n\n/**\n * Internal context for the Kanban — the parts use this to read\n * shared state (current value, getItemValue, active drag id).\n */\nconst KanbanContext = createContext<KanbanContextShape | null>(null);\n\nexport const KanbanContextProvider = KanbanContext.Provider;\n\nexport function useKanbanContext<T = unknown>(): KanbanContextShape<T> {\n\tconst ctx = useContext(KanbanContext);\n\tif (!ctx) {\n\t\tthrow new Error(\n\t\t\t'Kanban subcomponents must be rendered inside a <Kanban> root.',\n\t\t);\n\t}\n\treturn ctx as unknown as KanbanContextShape<T>;\n}\n\n/**\n * Internal context exposed by `<KanbanItem>` so the optional\n * `<KanbanItemHandle>` knows which listeners + accessibility props to\n * wire to the dedicated drag handle. Also carries the resolved\n * domain item so `<KanbanItemActions>` (and any other item-aware\n * subcomponent) can render per-item content without prop drilling.\n *\n * The dnd-kit shapes are widened to `unknown` so consumers can spread\n * them onto any HTMLElement.\n */\ninterface KanbanItemContextShape {\n\tlisteners: unknown;\n\tattributes: unknown;\n\tsetActivatorNodeRef: (node: HTMLElement | null) => void;\n\tregisterHandle: () => () => void;\n\t/** Stable id (the value returned by `getItemValue`). */\n\titemId: string;\n\t/** The domain item itself — null if it can't be resolved. */\n\titem: unknown;\n}\n\nconst KanbanItemContext = createContext<KanbanItemContextShape | null>(null);\n\nexport const KanbanItemContextProvider = KanbanItemContext.Provider;\n\nexport function useKanbanItemContext(): KanbanItemContextShape {\n\tconst ctx = useContext(KanbanItemContext);\n\tif (!ctx) {\n\t\tthrow new Error(\n\t\t\t'<KanbanItemHandle> / <KanbanItemActions> must be rendered inside a <KanbanItem>.',\n\t\t);\n\t}\n\treturn ctx;\n}\n","/**\n * Strings for the Kanban — drag-and-drop screen-reader announcements\n * + accessibility labels. The library never renders user-visible copy\n * that the consumer hasn't already supplied via column headers / item\n * children, so the strings here are exclusively for assistive tech.\n */\nexport interface KanbanStrings {\n\t/** Read by screen readers when a drag begins. `{name}` = item id. */\n\tannounceDragStart: string;\n\t/** Read when an item moves over a column. `{from}` / `{to}` are column ids. */\n\tannounceDragMove: string;\n\t/** Read when an item is dropped into a column. */\n\tannounceDragEnd: string;\n\t/** Read when the user cancels a drag with Escape. */\n\tannounceDragCancel: string;\n\t/** Aria label on the drag handle. */\n\tdragHandleAria: string;\n\t/** Aria label on the board landmark. */\n\tboardAria: string;\n\t/** Aria label on the per-item actions trigger (`⋮`). */\n\titemActionsAria: string;\n}\n\nexport const defaultKanbanStrings: KanbanStrings = {\n\tannounceDragStart: 'Picked up item {name}.',\n\tannounceDragMove: 'Moving {name} from {from} to {to}.',\n\tannounceDragEnd: 'Dropped {name} into {to}.',\n\tannounceDragCancel: 'Cancelled drag of {name}.',\n\tdragHandleAria: 'Drag handle',\n\tboardAria: 'Kanban board',\n\titemActionsAria: 'Item actions',\n};\n\nexport function interpolateKanbanString(\n\ttemplate: string,\n\tparams: Record<string, string>,\n): string {\n\treturn Object.entries(params).reduce(\n\t\t(acc, [key, value]) => acc.replace(new RegExp(`\\\\{${key}\\\\}`, 'g'), value),\n\t\ttemplate,\n\t);\n}\n","/**\n * Kanban — drag-and-drop board with multi-column item sorting and\n * cross-column moves. Headless behavior comes from `@dnd-kit/core` +\n * `@dnd-kit/sortable`; the library wires it into a callback-driven,\n * generic-T API:\n *\n * <Kanban\n * value={columns}\n * onValueChange={setColumns}\n * getItemValue={(c) => c.id}\n * onItemMove={(e) => api.persistMove(e)}\n * >\n * <KanbanBoard className=\"grid grid-cols-3 gap-3\">\n * {Object.entries(columns).map(([colId, items]) => (\n * <KanbanColumn key={colId} value={colId}>\n * <header>{COLUMNS[colId].title}</header>\n * <KanbanColumnContent value={colId}>\n * {items.map((card) => (\n * <KanbanItem key={card.id} value={card.id}>\n * …card body…\n * </KanbanItem>\n * ))}\n * </KanbanColumnContent>\n * </KanbanColumn>\n * ))}\n * </KanbanBoard>\n * <KanbanOverlay />\n * </Kanban>\n *\n * The library never reaches into a router, never persists state — your\n * `onValueChange` is the source of truth. Use `onItemMove` for\n * analytics / optimistic-update plumbing.\n */\nimport {\n\tDndContext,\n\tDragOverlay,\n\tPointerSensor,\n\tuseDroppable,\n\tuseSensor,\n\tuseSensors,\n\ttype DragEndEvent,\n\ttype DragStartEvent,\n} from '@dnd-kit/core';\nimport {\n\tSortableContext,\n\tuseSortable,\n\tverticalListSortingStrategy,\n} from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { MoreHorizontal } from 'lucide-react';\nimport { forwardRef, useCallback, useEffect, useMemo, useState, type MouseEvent } from 'react';\n\nimport { Button } from '@/components/base/buttons';\nimport { PopoverMenu } from '@/components/base/popover-menu';\nimport { Text } from '@/components/typography';\nimport { useStrings } from '@/lib/strings';\nimport { cn } from '@/lib/utils';\n\nimport { useKanban } from './hooks/use-kanban';\nimport {\n\tKanbanContextProvider,\n\tKanbanItemContextProvider,\n\tuseKanbanContext,\n\tuseKanbanItemContext,\n} from './kanban-context';\nimport { defaultKanbanStrings } from './kanban.strings';\nimport type {\n\tKanbanBoardProps,\n\tKanbanColumnContentProps,\n\tKanbanColumnProps,\n\tKanbanItemAction,\n\tKanbanItemActionsConfig,\n\tKanbanItemActionsProps,\n\tKanbanItemHandleProps,\n\tKanbanItemProps,\n\tKanbanOverlayProps,\n\tKanbanProps,\n} from './kanban.types';\n\nexport function Kanban<T>({\n\tvalue,\n\tonValueChange,\n\tgetItemValue,\n\tonItemMove,\n\titemActions,\n\tonItemClick,\n\tstrings: stringsProp,\n\tclassName,\n\tchildren,\n}: KanbanProps<T>) {\n\tconst strings = useStrings(defaultKanbanStrings, stringsProp);\n\tconst { findItem, move } = useKanban({\n\t\tvalue,\n\t\tonValueChange,\n\t\tgetItemValue,\n\t\tonItemMove,\n\t});\n\tconst [activeId, setActiveId] = useState<string | null>(null);\n\n\tconst sensors = useSensors(\n\t\tuseSensor(PointerSensor, { activationConstraint: { distance: 6 } }),\n\t);\n\n\tconst activeItem = useMemo(\n\t\t() => (activeId ? findItem(activeId)?.item ?? null : null),\n\t\t[activeId, findItem],\n\t);\n\n\tconst handleDragStart = useCallback(\n\t\t(event: DragStartEvent) => {\n\t\t\tsetActiveId(String(event.active.id));\n\t\t},\n\t\t[],\n\t);\n\n\tconst handleDragEnd = useCallback(\n\t\t(event: DragEndEvent) => {\n\t\t\tsetActiveId(null);\n\t\t\tconst { active, over } = event;\n\t\t\tif (!over) return;\n\t\t\tconst activeData = active.data.current as\n\t\t\t\t| { columnId?: string; index?: number }\n\t\t\t\t| undefined;\n\t\t\tconst overData = over.data.current as\n\t\t\t\t| { columnId?: string; index?: number }\n\t\t\t\t| undefined;\n\t\t\tconst overId = String(over.id);\n\n\t\t\t// Dropping on a column container (not a sortable item) → append.\n\t\t\tconst targetColumnId =\n\t\t\t\toverData?.columnId ?? (Object.prototype.hasOwnProperty.call(value, overId) ? overId : undefined);\n\t\t\tif (!targetColumnId) return;\n\n\t\t\tconst toIndex =\n\t\t\t\toverData?.columnId !== undefined ? overData.index : value[targetColumnId].length;\n\n\t\t\tmove({\n\t\t\t\titemId: String(active.id),\n\t\t\t\ttoColumnId: targetColumnId,\n\t\t\t\ttoIndex,\n\t\t\t});\n\t\t\tvoid activeData;\n\t\t},\n\t\t[move, value],\n\t);\n\n\tconst ctxValue = useMemo(\n\t\t() => ({\n\t\t\tvalue: value as Record<string, unknown[]>,\n\t\t\tonValueChange: onValueChange as (next: Record<string, unknown[]>) => void,\n\t\t\tgetItemValue: getItemValue as (item: unknown) => string,\n\t\t\tactiveId,\n\t\t\tactiveItem: activeItem as unknown,\n\t\t\tfindItem: findItem as (id: string) => { columnId: string; index: number; item: unknown } | undefined,\n\t\t\titemActions: itemActions as KanbanItemActionsConfig<unknown> | undefined,\n\t\t\tonItemClick: onItemClick as ((item: unknown) => void) | undefined,\n\t\t}),\n\t\t[value, onValueChange, getItemValue, activeId, activeItem, findItem, itemActions, onItemClick],\n\t);\n\n\treturn (\n\t\t<KanbanContextProvider value={ctxValue}>\n\t\t\t<DndContext\n\t\t\t\tsensors={sensors}\n\t\t\t\tonDragStart={handleDragStart}\n\t\t\t\tonDragEnd={handleDragEnd}\n\t\t\t\tonDragCancel={() => setActiveId(null)}\n\t\t\t\taccessibility={{\n\t\t\t\t\tannouncements: {\n\t\t\t\t\t\tonDragStart({ active }) {\n\t\t\t\t\t\t\treturn strings.announceDragStart.replace('{name}', String(active.id));\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonDragOver({ active, over }) {\n\t\t\t\t\t\t\tif (!over) return undefined;\n\t\t\t\t\t\t\treturn strings.announceDragMove\n\t\t\t\t\t\t\t\t.replace('{name}', String(active.id))\n\t\t\t\t\t\t\t\t.replace('{from}', '')\n\t\t\t\t\t\t\t\t.replace('{to}', String(over.id));\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonDragEnd({ active, over }) {\n\t\t\t\t\t\t\treturn strings.announceDragEnd\n\t\t\t\t\t\t\t\t.replace('{name}', String(active.id))\n\t\t\t\t\t\t\t\t.replace('{to}', over ? String(over.id) : '');\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonDragCancel({ active }) {\n\t\t\t\t\t\t\treturn strings.announceDragCancel.replace('{name}', String(active.id));\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\trole=\"application\"\n\t\t\t\t\taria-label={strings.boardAria}\n\t\t\t\t\tclassName={cn('kanban--component', 'w-full', className)}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</DndContext>\n\t\t</KanbanContextProvider>\n\t);\n}\n\nKanban.displayName = 'Kanban';\n\nexport function KanbanBoard({ className, style, children }: KanbanBoardProps) {\n\treturn (\n\t\t<div className={cn('grid w-full gap-3', className)} style={style}>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n\nKanbanBoard.displayName = 'KanbanBoard';\n\nexport function KanbanColumn({ value, className, children }: KanbanColumnProps) {\n\tconst { setNodeRef, isOver } = useDroppable({ id: value });\n\treturn (\n\t\t<div\n\t\t\tref={setNodeRef}\n\t\t\tdata-slot=\"kanban-column\"\n\t\t\tdata-column-id={value}\n\t\t\tdata-over={isOver ? 'true' : undefined}\n\t\t\tclassName={cn('flex min-w-0 flex-col', className)}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t);\n}\n\nKanbanColumn.displayName = 'KanbanColumn';\n\nexport function KanbanColumnContent({\n\tvalue,\n\tclassName,\n\tchildren,\n}: KanbanColumnContentProps) {\n\tconst ctx = useKanbanContext();\n\tconst items = ctx.value[value] ?? [];\n\tconst ids = items.map((item) => ctx.getItemValue(item));\n\treturn (\n\t\t<SortableContext items={ids} strategy={verticalListSortingStrategy}>\n\t\t\t<div\n\t\t\t\tdata-slot=\"kanban-column-content\"\n\t\t\t\tclassName={cn('flex flex-col gap-2', className)}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</SortableContext>\n\t);\n}\n\nKanbanColumnContent.displayName = 'KanbanColumnContent';\n\nexport function KanbanItem({\n\tvalue,\n\tclassName,\n\tdisabled = false,\n\tonClick,\n\tchildren,\n}: KanbanItemProps) {\n\tconst ctx = useKanbanContext();\n\tconst found = ctx.findItem(value);\n\tconst {\n\t\tattributes,\n\t\tlisteners,\n\t\tsetNodeRef,\n\t\tsetActivatorNodeRef,\n\t\ttransform,\n\t\ttransition,\n\t\tisDragging,\n\t} = useSortable({\n\t\tid: value,\n\t\tdisabled,\n\t\tdata: { columnId: found?.columnId, index: found?.index },\n\t});\n\n\tconst style = {\n\t\ttransform: CSS.Transform.toString(transform),\n\t\ttransition,\n\t\topacity: isDragging ? 0.4 : undefined,\n\t};\n\tconst [handleCount, setHandleCount] = useState(0);\n\tconst hasHandle = handleCount > 0;\n\tconst registerHandle = useCallback(() => {\n\t\tsetHandleCount((count) => count + 1);\n\t\treturn () => setHandleCount((count) => Math.max(0, count - 1));\n\t}, []);\n\n\tconst itemCtx = useMemo(\n\t\t() => ({\n\t\t\tlisteners,\n\t\t\tattributes,\n\t\t\tsetActivatorNodeRef,\n\t\t\tregisterHandle,\n\t\t\titemId: value,\n\t\t\titem: found?.item ?? null,\n\t\t}),\n\t\t[listeners, attributes, setActivatorNodeRef, registerHandle, value, found?.item],\n\t);\n\n\tconst rootClick = ctx.onItemClick;\n\tconst handleClick = useCallback(\n\t\t(event: MouseEvent<HTMLDivElement>) => {\n\t\t\t// `<KanbanItemHandle>` and `<KanbanItemActions>` mark themselves\n\t\t\t// with `data-stop-item-click` so a click on the drag handle or\n\t\t\t// the actions menu doesn't bubble up as a card click.\n\t\t\tconst target = event.target as HTMLElement | null;\n\t\t\tif (target?.closest('[data-stop-item-click]')) return;\n\t\t\tif (onClick) {\n\t\t\t\tonClick();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (rootClick && found?.item !== undefined) {\n\t\t\t\trootClick(found.item);\n\t\t\t}\n\t\t},\n\t\t[onClick, rootClick, found?.item],\n\t);\n\n\tconst isClickable = Boolean(onClick || rootClick);\n\n\t// When no <KanbanItemHandle> is used, the whole row is the activator.\n\t// We attach listeners + attributes here as the default — KanbanItemHandle\n\t// can then override by wiring them to a more specific element.\n\treturn (\n\t\t<KanbanItemContextProvider value={itemCtx}>\n\t\t\t<div\n\t\t\t\tref={setNodeRef}\n\t\t\t\tstyle={style}\n\t\t\t\tdata-slot=\"kanban-item\"\n\t\t\t\tdata-dragging={isDragging ? 'true' : undefined}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'touch-none select-none',\n\t\t\t\t\tisClickable && 'cursor-pointer',\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\tonClick={isClickable ? handleClick : undefined}\n\t\t\t\t{...(!hasHandle ? attributes : {})}\n\t\t\t\t{...(!hasHandle ? listeners : {})}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</div>\n\t\t</KanbanItemContextProvider>\n\t);\n}\n\nKanbanItem.displayName = 'KanbanItem';\n\nexport const KanbanItemHandle = forwardRef<HTMLButtonElement, KanbanItemHandleProps>(function KanbanItemHandle({ className, children }, forwardedRef) {\n\tconst { setActivatorNodeRef, listeners, attributes, registerHandle } = useKanbanItemContext();\n\tuseEffect(() => registerHandle(), [registerHandle]);\n\t// Merge dnd-kit's activator ref with the consumer's forwarded ref so a\n\t// `<Tooltip><KanbanItemHandle ref={…}/></Tooltip>` wiring still gets a\n\t// real ref to the button element.\n\tconst setMergedRef = useCallback(\n\t\t(node: HTMLButtonElement | null) => {\n\t\t\tsetActivatorNodeRef(node);\n\t\t\tif (typeof forwardedRef === 'function') {\n\t\t\t\tforwardedRef(node);\n\t\t\t} else if (forwardedRef) {\n\t\t\t\tforwardedRef.current = node;\n\t\t\t}\n\t\t},\n\t\t[setActivatorNodeRef, forwardedRef],\n\t);\n\treturn (\n\t\t<Button\n\t\t\ttype=\"button\"\n\t\t\tvariant=\"secondary\"\n\t\t\tbuttonStyle=\"ghost\"\n\t\t\tsize=\"icon-xs\"\n\t\t\tref={setMergedRef}\n\t\t\tdata-slot=\"kanban-item-handle\"\n\t\t\tdata-stop-item-click\n\t\t\tonClick={(event) => event.stopPropagation()}\n\t\t\tclassName={cn(\n\t\t\t\t'cursor-grab rounded-sm shadow-none focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/50 active:cursor-grabbing',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...(attributes as Record<string, unknown>)}\n\t\t\t{...(listeners as Record<string, unknown>)}\n\t\t>\n\t\t\t{children}\n\t\t</Button>\n\t);\n});\n\nKanbanItemHandle.displayName = 'KanbanItemHandle';\n\n/**\n * Per-item actions menu (`⋮` trigger → popover with the actions\n * registered at the `<Kanban itemActions>` root). Place inside any\n * `<KanbanItem>` — typically in the card's top-right corner.\n *\n * The trigger marks itself with `data-stop-item-click` so opening the\n * menu doesn't fire the parent `onItemClick` callback.\n */\nexport function KanbanItemActions({\n\tclassName,\n\ticon,\n\tariaLabel,\n}: KanbanItemActionsProps) {\n\tconst [open, setOpen] = useState(false);\n\tconst ctx = useKanbanContext();\n\tconst itemCtx = useKanbanItemContext();\n\tconst strings = useStrings(defaultKanbanStrings, undefined);\n\n\tconst item = itemCtx.item;\n\tconst rawActions = ctx.itemActions;\n\tconst actions = useMemo(() => {\n\t\tif (!rawActions || item === null || item === undefined) return [] as ReadonlyArray<KanbanItemAction<unknown>>;\n\t\tconst list = typeof rawActions === 'function' ? rawActions(item) : rawActions;\n\t\treturn list.filter((action) =>\n\t\t\taction.isVisible ? action.isVisible(item) : true,\n\t\t);\n\t}, [rawActions, item]);\n\n\tif (actions.length === 0) return null;\n\n\treturn (\n\t\t<PopoverMenu\n\t\t\topen={open}\n\t\t\tonOpenChange={setOpen}\n\t\t\tsearch={false}\n\t\t\tcontentClassName=\"w-44\"\n\t\t\ttrigger={\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\tbuttonStyle=\"ghost\"\n\t\t\t\t\tsize=\"icon-sm\"\n\t\t\t\t\tdata-slot=\"kanban-item-actions-trigger\"\n\t\t\t\t\tdata-stop-item-click\n\t\t\t\t\taria-label={ariaLabel ?? strings.itemActionsAria}\n\t\t\t\t\tonClick={(event) => event.stopPropagation()}\n\t\t\t\t\tonPointerDown={(event) => event.stopPropagation()}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'size-7 rounded-md p-0',\n\t\t\t\t\t\t'text-muted-foreground/70 hover:bg-muted hover:text-foreground',\n\t\t\t\t\t\t'transition-colors',\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{icon ?? <MoreHorizontal className=\"size-4\" aria-hidden=\"true\" />}\n\t\t\t\t</Button>\n\t\t\t}\n\t\t\titems={actions.map((action) => ({\n\t\t\t\tvalue: action.id,\n\t\t\t\tlabel: action.label,\n\t\t\t\ticon: action.icon,\n\t\t\t\tdisabled: action.isDisabled?.(item) ?? false,\n\t\t\t\tdata: action,\n\t\t\t}))}\n\t\t\trenderItem={(menuItem) => {\n\t\t\t\tconst action = menuItem.data as KanbanItemAction<unknown>;\n\t\t\t\tconst isDestructive = action.variant === 'destructive';\n\t\t\t\treturn (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{!!action.icon && (\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t'shrink-0',\n\t\t\t\t\t\t\t\t\tisDestructive ? 'text-destructive' : 'text-muted-foreground',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{action.icon}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\ttag=\"span\"\n\t\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'truncate',\n\t\t\t\t\t\t\t\tisDestructive && 'text-destructive',\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{action.label}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</>\n\t\t\t\t);\n\t\t\t}}\n\t\t\tonSelect={(menuItem) => {\n\t\t\t\tconst action = menuItem.data as KanbanItemAction<unknown> | undefined;\n\t\t\t\taction?.onSelect(item);\n\t\t\t\tsetOpen(false);\n\t\t\t}}\n\t\t/>\n\t);\n}\n\nKanbanItemActions.displayName = 'KanbanItemActions';\n\nexport function KanbanOverlay({ className, render }: KanbanOverlayProps) {\n\tconst { activeItem, activeId, findItem } = useKanbanContext();\n\treturn (\n\t\t<DragOverlay>\n\t\t\t{activeId\n\t\t\t\t? render\n\t\t\t\t\t? render({\n\t\t\t\t\t\t\titem: activeItem,\n\t\t\t\t\t\t\tcolumnId: findItem(activeId)?.columnId ?? null,\n\t\t\t\t\t\t})\n\t\t\t\t\t: (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t'pointer-events-none rounded-md border-2 border-dashed border-primary/40 bg-primary/5 p-3 shadow-lg',\n\t\t\t\t\t\t\t\tclassName,\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Text tag=\"span\" size=\"xs\" weight=\"medium\" className=\"text-primary/80\">{activeId}</Text>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)\n\t\t\t\t: null}\n\t\t</DragOverlay>\n\t);\n}\n\nKanbanOverlay.displayName = 'KanbanOverlay';\n"],"mappings":"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"}
|