admin-ui-starter-kit 0.6.5 → 0.6.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/component-library-rules/references/components/base__cards.md +7 -8
- package/.agents/skills/component-library-rules/references/components/base__carousel.md +4 -4
- package/.agents/skills/component-library-rules/references/components/base__combobox.md +1 -1
- package/.agents/skills/component-library-rules/references/components/base__css-variables.md +2 -1
- package/.agents/skills/component-library-rules/references/components/base__event-calendar.md +1 -1
- package/.agents/skills/component-library-rules/references/components/base__table.md +32 -11
- package/.agents/skills/component-library-rules/references/components/base__typography.md +1 -1
- package/.agents/skills/component-library-rules/references/components/composed__metadata-list.md +3 -3
- package/.agents/skills/component-library-rules/references/components/features__activities.md +1 -1
- package/.agents/skills/component-library-rules/references/components/features__enhanced-activities.md +6 -6
- package/.agents/skills/component-library-rules/references/components/features__metrics-overview.md +3 -3
- package/.agents/skills/component-library-rules/references/components/features__overlays.md +2 -2
- package/.agents/skills/component-library-rules/references/components/features__products.md +1 -1
- package/.agents/skills/component-library-rules/references/components/layout__layout-app-shell.md +1 -1
- package/.agents/skills/component-library-rules/references/components/layout__layout-containers.md +3 -3
- package/.agents/skills/component-library-rules/references/components/layout__layout-sidebar.md +2 -2
- package/dist/_shared/accordion-CxjH2WZG.js +135 -0
- package/dist/_shared/accordion-CxjH2WZG.js.map +1 -0
- package/dist/_shared/accordion-mTdJmy23.cjs +2 -0
- package/dist/_shared/accordion-mTdJmy23.cjs.map +1 -0
- package/dist/_shared/action-menu-BrHF4nss.cjs +2 -0
- package/dist/_shared/action-menu-BrHF4nss.cjs.map +1 -0
- package/dist/_shared/action-menu-Crn22LKo.js +96 -0
- package/dist/_shared/action-menu-Crn22LKo.js.map +1 -0
- package/dist/_shared/ai-artifact-CS2Pv-bu.js +1099 -0
- package/dist/_shared/ai-artifact-CS2Pv-bu.js.map +1 -0
- package/dist/_shared/ai-artifact-R4bxz5Iq.cjs +3 -0
- package/dist/_shared/ai-artifact-R4bxz5Iq.cjs.map +1 -0
- package/dist/_shared/alert-BisCSsOE.cjs +2 -0
- package/dist/_shared/alert-BisCSsOE.cjs.map +1 -0
- package/dist/_shared/alert-D23Q7I0W.js +81 -0
- package/dist/_shared/alert-D23Q7I0W.js.map +1 -0
- package/dist/_shared/app-shell-BZQJfTkf.cjs +2 -0
- package/dist/_shared/app-shell-BZQJfTkf.cjs.map +1 -0
- package/dist/_shared/app-shell-Da6GHxTZ.js +69 -0
- package/dist/_shared/app-shell-Da6GHxTZ.js.map +1 -0
- package/dist/_shared/auth-BV9Daibu.cjs +2 -0
- package/dist/_shared/auth-BV9Daibu.cjs.map +1 -0
- package/dist/_shared/auth-DACpcTnL.js +643 -0
- package/dist/_shared/auth-DACpcTnL.js.map +1 -0
- package/dist/_shared/badge-B4oBB5BJ.js +110 -0
- package/dist/_shared/badge-B4oBB5BJ.js.map +1 -0
- package/dist/_shared/badge-DvUA9Pr2.cjs +2 -0
- package/dist/_shared/badge-DvUA9Pr2.cjs.map +1 -0
- package/dist/_shared/breadcrumbs-CuT0YIfo.js +105 -0
- package/dist/_shared/breadcrumbs-CuT0YIfo.js.map +1 -0
- package/dist/_shared/breadcrumbs-jNzlYqS9.cjs +2 -0
- package/dist/_shared/breadcrumbs-jNzlYqS9.cjs.map +1 -0
- package/dist/_shared/button-BMiPFJIb.cjs +2 -0
- package/dist/_shared/button-BMiPFJIb.cjs.map +1 -0
- package/dist/_shared/button-vv59_uS_.js +189 -0
- package/dist/_shared/button-vv59_uS_.js.map +1 -0
- package/dist/_shared/buttons-CvqIMv3I.js +137 -0
- package/dist/_shared/buttons-CvqIMv3I.js.map +1 -0
- package/dist/_shared/buttons-tCkWktN3.cjs +2 -0
- package/dist/_shared/buttons-tCkWktN3.cjs.map +1 -0
- package/dist/_shared/card-radio-group-BL--IyPB.js +150 -0
- package/dist/_shared/card-radio-group-BL--IyPB.js.map +1 -0
- package/dist/_shared/card-radio-group-Cl5ptR1d.cjs +2 -0
- package/dist/_shared/card-radio-group-Cl5ptR1d.cjs.map +1 -0
- package/dist/_shared/cards-CMNXFo3Y.js +354 -0
- package/dist/_shared/cards-CMNXFo3Y.js.map +1 -0
- package/dist/_shared/cards-DQN9fcwo.cjs +2 -0
- package/dist/_shared/cards-DQN9fcwo.cjs.map +1 -0
- package/dist/_shared/combobox-D0avSXIB.cjs +2 -0
- package/dist/_shared/combobox-D0avSXIB.cjs.map +1 -0
- package/dist/_shared/combobox-Df0srISK.js +954 -0
- package/dist/_shared/combobox-Df0srISK.js.map +1 -0
- package/dist/_shared/command-B5BpMgBT.js +39 -0
- package/dist/_shared/command-B5BpMgBT.js.map +1 -0
- package/dist/_shared/command-en62SpQ7.cjs +2 -0
- package/dist/_shared/command-en62SpQ7.cjs.map +1 -0
- package/dist/_shared/comments-CfkortDW.js +952 -0
- package/dist/_shared/comments-CfkortDW.js.map +1 -0
- package/dist/_shared/comments-yVd7QMOu.cjs +2 -0
- package/dist/_shared/comments-yVd7QMOu.cjs.map +1 -0
- package/dist/_shared/copyable-Cn7tRGL5.js +38 -0
- package/dist/_shared/copyable-Cn7tRGL5.js.map +1 -0
- package/dist/_shared/copyable-CoKTxMSP.cjs +2 -0
- package/dist/_shared/copyable-CoKTxMSP.cjs.map +1 -0
- package/dist/_shared/data-display-BG7CD164.js +1873 -0
- package/dist/_shared/data-display-BG7CD164.js.map +1 -0
- package/dist/_shared/data-display-CXVoX3la.cjs +2 -0
- package/dist/_shared/data-display-CXVoX3la.cjs.map +1 -0
- package/dist/_shared/date-picker-Bf-nnyi-.js +1361 -0
- package/dist/_shared/date-picker-Bf-nnyi-.js.map +1 -0
- package/dist/_shared/date-picker-Cox4PAUt.cjs +2 -0
- package/dist/_shared/date-picker-Cox4PAUt.cjs.map +1 -0
- package/dist/_shared/date-pickers-DbN4q0dn.cjs +2 -0
- package/dist/_shared/date-pickers-DbN4q0dn.cjs.map +1 -0
- package/dist/_shared/date-pickers-DvrOCP-s.js +329 -0
- package/dist/_shared/date-pickers-DvrOCP-s.js.map +1 -0
- package/dist/_shared/display-BQijMo37.js +986 -0
- package/dist/_shared/display-BQijMo37.js.map +1 -0
- package/dist/_shared/display-C0ut-Lew.cjs +2 -0
- package/dist/_shared/display-C0ut-Lew.cjs.map +1 -0
- package/dist/_shared/form-sizing-DJus3nK3.cjs +2 -0
- package/dist/_shared/form-sizing-DJus3nK3.cjs.map +1 -0
- package/dist/_shared/form-sizing-DWjJsQSR.js +42 -0
- package/dist/_shared/form-sizing-DWjJsQSR.js.map +1 -0
- package/dist/_shared/forms-BjG7QIb1.cjs +2 -0
- package/dist/_shared/forms-BjG7QIb1.cjs.map +1 -0
- package/dist/_shared/forms-DljDdyXR.js +3533 -0
- package/dist/_shared/forms-DljDdyXR.js.map +1 -0
- package/dist/_shared/header-BpFJRINR.cjs +2 -0
- package/dist/_shared/header-BpFJRINR.cjs.map +1 -0
- package/dist/_shared/header-CKqQF4_r.js +447 -0
- package/dist/_shared/header-CKqQF4_r.js.map +1 -0
- package/dist/_shared/hooks-DcCkbP1F.js +95 -0
- package/dist/_shared/hooks-DcCkbP1F.js.map +1 -0
- package/dist/_shared/hooks-RkLytuGj.cjs +2 -0
- package/dist/_shared/hooks-RkLytuGj.cjs.map +1 -0
- package/dist/_shared/input-Cin0qpjj.js +182 -0
- package/dist/_shared/input-Cin0qpjj.js.map +1 -0
- package/dist/_shared/input-uuWeiagN.cjs +2 -0
- package/dist/_shared/input-uuWeiagN.cjs.map +1 -0
- package/dist/_shared/item-CIlSaQg8.js +226 -0
- package/dist/_shared/item-CIlSaQg8.js.map +1 -0
- package/dist/_shared/item-CSk9Y2qB.cjs +2 -0
- package/dist/_shared/item-CSk9Y2qB.cjs.map +1 -0
- package/dist/_shared/layout-Cun0HPL4.cjs +2 -0
- package/dist/_shared/layout-Cun0HPL4.cjs.map +1 -0
- package/dist/_shared/layout-HrU5gwH3.js +261 -0
- package/dist/_shared/layout-HrU5gwH3.js.map +1 -0
- package/dist/_shared/mentions-BqN82Fon.cjs +2 -0
- package/dist/_shared/mentions-BqN82Fon.cjs.map +1 -0
- package/dist/_shared/mentions-DV0FT1Th.js +506 -0
- package/dist/_shared/mentions-DV0FT1Th.js.map +1 -0
- package/dist/_shared/money-display-D5FCRhzB.cjs +2 -0
- package/dist/_shared/money-display-D5FCRhzB.cjs.map +1 -0
- package/dist/_shared/money-display-FcCAQDCz.js +198 -0
- package/dist/_shared/money-display-FcCAQDCz.js.map +1 -0
- package/dist/_shared/navigation-CI_Dd8jM.js +436 -0
- package/dist/_shared/navigation-CI_Dd8jM.js.map +1 -0
- package/dist/_shared/navigation-DUGhCPzJ.cjs +2 -0
- package/dist/_shared/navigation-DUGhCPzJ.cjs.map +1 -0
- package/dist/_shared/overlays-BRLemLSn.cjs +2 -0
- package/dist/_shared/overlays-BRLemLSn.cjs.map +1 -0
- package/dist/_shared/overlays-Bef7VNYY.js +735 -0
- package/dist/_shared/overlays-Bef7VNYY.js.map +1 -0
- package/dist/_shared/popover-menu-CAjhhTfX.js +93 -0
- package/dist/_shared/popover-menu-CAjhhTfX.js.map +1 -0
- package/dist/_shared/popover-menu-DlkRgOkR.cjs +2 -0
- package/dist/_shared/popover-menu-DlkRgOkR.cjs.map +1 -0
- package/dist/_shared/rich-text-editor-Bpt3r3J3.js +620 -0
- package/dist/_shared/rich-text-editor-Bpt3r3J3.js.map +1 -0
- package/dist/_shared/rich-text-editor-DUTX7kBa.cjs +2 -0
- package/dist/_shared/rich-text-editor-DUTX7kBa.cjs.map +1 -0
- package/dist/_shared/settings-CNT4-6u8.cjs +2 -0
- package/dist/_shared/settings-CNT4-6u8.cjs.map +1 -0
- package/dist/_shared/settings-CRP6409J.js +143 -0
- package/dist/_shared/settings-CRP6409J.js.map +1 -0
- package/dist/_shared/sidebar-B0LcBrfI.cjs +2 -0
- package/dist/_shared/sidebar-B0LcBrfI.cjs.map +1 -0
- package/dist/_shared/sidebar-Bc6JsOTD.js +548 -0
- package/dist/_shared/sidebar-Bc6JsOTD.js.map +1 -0
- package/dist/_shared/spinner-CVG62sGs.js +67 -0
- package/dist/_shared/spinner-CVG62sGs.js.map +1 -0
- package/dist/_shared/spinner-VjdonFU2.cjs +2 -0
- package/dist/_shared/spinner-VjdonFU2.cjs.map +1 -0
- package/dist/_shared/table-_yujELN3.js +1377 -0
- package/dist/_shared/table-_yujELN3.js.map +1 -0
- package/dist/_shared/table-iV8H1AE0.cjs +2 -0
- package/dist/_shared/table-iV8H1AE0.cjs.map +1 -0
- package/dist/_shared/textarea-B4zbbqff.cjs +2 -0
- package/dist/_shared/textarea-B4zbbqff.cjs.map +1 -0
- package/dist/_shared/textarea-Dp0RU-rc.js +118 -0
- package/dist/_shared/textarea-Dp0RU-rc.js.map +1 -0
- package/dist/_shared/typography-DXvCmE8w.js +201 -0
- package/dist/_shared/typography-DXvCmE8w.js.map +1 -0
- package/dist/_shared/typography-pzCKaFOc.cjs +2 -0
- package/dist/_shared/typography-pzCKaFOc.cjs.map +1 -0
- package/dist/_shared/workspace-C3U57t2a.cjs +2 -0
- package/dist/_shared/workspace-C3U57t2a.cjs.map +1 -0
- package/dist/_shared/workspace-Db--ow3r.js +357 -0
- package/dist/_shared/workspace-Db--ow3r.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/badge.d.ts.map +1 -1
- package/dist/components/base/badge/index.cjs +1 -1
- package/dist/components/base/badge/index.js +1 -1
- package/dist/components/base/buttons/index.cjs +1 -1
- package/dist/components/base/buttons/index.js +2 -2
- package/dist/components/base/cards/index.cjs +1 -1
- package/dist/components/base/cards/index.js +1 -1
- package/dist/components/base/cards/smart-card.types.d.ts +3 -3
- package/dist/components/base/carousel/index.cjs +1 -1
- package/dist/components/base/carousel/index.js +1 -1
- package/dist/components/base/combobox/index.cjs +1 -1
- package/dist/components/base/combobox/index.js +1 -1
- package/dist/components/base/command/index.cjs +1 -1
- package/dist/components/base/command/index.js +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/chart.cjs +1 -1
- package/dist/components/base/display/chart.js +1 -1
- package/dist/components/base/display/index.cjs +1 -1
- package/dist/components/base/display/index.js +3 -3
- 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 +6 -6
- package/dist/components/base/event-calendar/index.js.map +1 -1
- package/dist/components/base/forms/index.cjs +1 -1
- package/dist/components/base/forms/index.js +5 -5
- package/dist/components/base/item/index.cjs +1 -1
- package/dist/components/base/item/index.js +1 -1
- package/dist/components/base/map/index.cjs +1 -1
- package/dist/components/base/map/index.js +2 -2
- package/dist/components/base/navigation/index.cjs +1 -1
- package/dist/components/base/navigation/index.js +3 -3
- package/dist/components/base/popover-menu/index.cjs +1 -1
- package/dist/components/base/popover-menu/index.js +1 -1
- package/dist/components/base/spinner/index.cjs +1 -1
- package/dist/components/base/spinner/index.js +1 -1
- package/dist/components/base/table/data-table.d.ts.map +1 -1
- package/dist/components/base/table/index.cjs +1 -1
- package/dist/components/base/table/index.js +1 -1
- package/dist/components/base/table/table-header.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 +13 -13
- package/dist/components/composed/admin/index.js.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 +25 -25
- package/dist/components/composed/ai/index.js.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.js +26 -26
- package/dist/components/composed/analytics/index.js.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 +15 -15
- package/dist/components/composed/cards/index.js.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 +28 -28
- package/dist/components/composed/commerce/index.js.map +1 -1
- package/dist/components/composed/dark-surfaces/index.cjs +1 -1
- package/dist/components/composed/dark-surfaces/index.js +4 -4
- package/dist/components/composed/data-display/index.cjs +1 -1
- package/dist/components/composed/data-display/index.js +1 -1
- package/dist/components/composed/data-display/metadata/metadata-list.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 +15 -15
- package/dist/components/composed/navigation/index.js.map +1 -1
- package/dist/components/composed/onboarding/index.cjs +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 +10 -10
- package/dist/components/composed/timelines/index.js.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 +9 -9
- package/dist/components/features/activities/index.js.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 +8 -8
- package/dist/components/features/ai-chat/index.js.map +1 -1
- package/dist/components/features/card/index.cjs +1 -1
- package/dist/components/features/card/index.js +4 -4
- package/dist/components/features/comments/index.cjs +1 -1
- package/dist/components/features/comments/index.js +2 -2
- package/dist/components/features/data-view/index.cjs +1 -1
- package/dist/components/features/data-view/index.cjs.map +1 -1
- package/dist/components/features/data-view/index.js +3 -3
- package/dist/components/features/data-view/index.js.map +1 -1
- package/dist/components/features/event-log/index.cjs +1 -1
- package/dist/components/features/event-log/index.js +4 -4
- 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 +11 -11
- package/dist/components/features/filters/index.js.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 +14 -14
- package/dist/components/features/global-search/index.js.map +1 -1
- package/dist/components/features/kanban/index.cjs +1 -1
- package/dist/components/features/kanban/index.js +3 -3
- package/dist/components/features/media-library/index.cjs +1 -1
- package/dist/components/features/media-library/index.cjs.map +1 -1
- package/dist/components/features/media-library/index.js +23 -23
- package/dist/components/features/media-library/index.js.map +1 -1
- package/dist/components/features/mentions/index.cjs +1 -1
- package/dist/components/features/mentions/index.js +1 -1
- package/dist/components/features/overlays/index.cjs +1 -1
- package/dist/components/features/overlays/index.js +1 -1
- package/dist/components/features/products/index.cjs +1 -1
- package/dist/components/features/products/index.cjs.map +1 -1
- package/dist/components/features/products/index.js +14 -14
- package/dist/components/features/products/index.js.map +1 -1
- package/dist/components/features/resource/index.cjs +1 -1
- package/dist/components/features/resource/index.cjs.map +1 -1
- package/dist/components/features/resource/index.js +5 -5
- package/dist/components/features/resource/index.js.map +1 -1
- package/dist/components/features/rich-text-editor/index.cjs +1 -1
- package/dist/components/features/rich-text-editor/index.js +1 -1
- package/dist/components/features/schema-form/index.cjs +1 -1
- package/dist/components/features/schema-form/index.js +8 -8
- package/dist/components/features/suggestions/index.cjs +1 -1
- package/dist/components/features/suggestions/index.js +1 -1
- package/dist/components/features/sync/index.cjs +1 -1
- package/dist/components/features/sync/index.js +2 -2
- package/dist/components/layout/app-shell/index.cjs +1 -1
- package/dist/components/layout/app-shell/index.js +1 -1
- package/dist/components/layout/auth/index.cjs +1 -1
- package/dist/components/layout/auth/index.js +1 -1
- package/dist/components/layout/header/index.cjs +1 -1
- package/dist/components/layout/header/index.js +1 -1
- package/dist/components/layout/hooks/index.cjs +1 -1
- package/dist/components/layout/hooks/index.js +1 -1
- package/dist/components/layout/index.cjs +1 -1
- package/dist/components/layout/index.js +8 -8
- package/dist/components/layout/page/index.cjs +1 -1
- package/dist/components/layout/page/index.js +1 -1
- package/dist/components/layout/settings/index.cjs +1 -1
- package/dist/components/layout/settings/index.js +1 -1
- package/dist/components/layout/sidebar/index.cjs +1 -1
- package/dist/components/layout/sidebar/index.js +2 -2
- package/dist/components/layout/workspace/index.cjs +1 -1
- package/dist/components/layout/workspace/index.js +1 -1
- package/dist/components/typography/index.cjs +1 -1
- package/dist/components/typography/index.js +1 -1
- package/dist/services/actions/index.cjs +1 -1
- package/dist/services/actions/index.js +1 -1
- package/dist/showcase/assets/AreaChart-DtVzijR8.js +6 -0
- package/dist/showcase/assets/CompositeItem-SL6R0H3r.js +1 -0
- package/dist/showcase/assets/CompositeRoot-CTygKc2d.js +1 -0
- package/dist/showcase/assets/DialogTrigger-m2m9VdXk.js +1 -0
- package/dist/showcase/assets/LabelableContext-D6DcOg5I.js +1 -0
- package/dist/showcase/assets/PreviewLayout-CHW8F5uE.js +1 -0
- package/dist/showcase/assets/RadioGroup-BAOoU1eO.js +1 -0
- package/dist/showcase/assets/ScrollAreaCorner-CrCCP65t.js +1 -0
- package/dist/showcase/assets/Separator-DMs71Vib.js +1 -0
- package/dist/showcase/assets/ToolbarRootContext-DWKxsCxT.js +1 -0
- package/dist/showcase/assets/accordion-Clw5XNXP.js +171 -0
- package/dist/showcase/assets/accordion-variants-jiwKaPjE.js +1 -0
- package/dist/showcase/assets/action-menu-CW8zR6Ne.js +1 -0
- package/dist/showcase/assets/actions-Cf7vl3u0.js +310 -0
- package/dist/showcase/assets/activities-CyI5sJuS.js +500 -0
- package/dist/showcase/assets/activities-feed-card-Gv-Y4BBq.js +1 -0
- package/dist/showcase/assets/admin-CQVbTxGD.js +140 -0
- package/dist/showcase/assets/ai-Bkp2BY_z.js +207 -0
- package/dist/showcase/assets/ai-artifact-Cf1vEdVD.js +2 -0
- package/dist/showcase/assets/ai-chat-Bs3x6cK3.js +568 -0
- package/dist/showcase/assets/ai-elements-VbMUV2-i.js +387 -0
- package/dist/showcase/assets/ai-tool-call-BQYg4QB_.js +1 -0
- package/dist/showcase/assets/alert-BUmpNcXV.js +1 -0
- package/dist/showcase/assets/alert-CWPNW7eb.js +93 -0
- package/dist/showcase/assets/alert-nUwhk3AB.js +62 -0
- package/dist/showcase/assets/api-key-list-B1qVywOP.js +73 -0
- package/dist/showcase/assets/api-key-list-BI2FGbzV.js +1 -0
- package/dist/showcase/assets/app-sidebar-B35a8HWK.js +1 -0
- package/dist/showcase/assets/arrow-down-C1w0M8tE.js +1 -0
- package/dist/showcase/assets/arrow-left-DtILDtAv.js +1 -0
- package/dist/showcase/assets/arrow-right-TnZMfDbP.js +1 -0
- package/dist/showcase/assets/arrow-up-BX-KDIDB.js +1 -0
- package/dist/showcase/assets/arrow-up-right-CrnWqXwJ.js +1 -0
- package/dist/showcase/assets/avatar-C5YI0roK.js +67 -0
- package/dist/showcase/assets/avatar-DsnH-Xmz.js +1 -0
- package/dist/showcase/assets/avatar-S4vMi7Be.js +57 -0
- package/dist/showcase/assets/avatar-q4wqX6yD.js +1 -0
- package/dist/showcase/assets/badge-DJacF8-J.js +31 -0
- package/dist/showcase/assets/badge-check-DDJtQHcD.js +1 -0
- package/dist/showcase/assets/bell-DiXXE8YI.js +1 -0
- package/dist/showcase/assets/bot-bONqc_7j.js +1 -0
- package/dist/showcase/assets/box-lhUq3Chj.js +1 -0
- package/dist/showcase/assets/braces-IKXiJgb3.js +1 -0
- package/dist/showcase/assets/brain-DcXlhbJZ.js +1 -0
- package/dist/showcase/assets/brand-CramZg2-.js +36 -0
- package/dist/showcase/assets/breadcrumb-BL7UjlLh.js +1 -0
- package/dist/showcase/assets/breadcrumb-CZRbcf09.js +52 -0
- package/dist/showcase/assets/breadcrumbs-DJzvSt_Z.js +1 -0
- package/dist/showcase/assets/briefcase-CQQ0m97G.js +1 -0
- package/dist/showcase/assets/building-2-BkQcv8WR.js +1 -0
- package/dist/showcase/assets/button-K7M0irWq.js +44 -0
- package/dist/showcase/assets/button-group-KCGa38c8.js +1 -0
- package/dist/showcase/assets/buttons-CvyBMRD6.js +272 -0
- package/dist/showcase/assets/calendar-BJHjhWQX.js +1 -0
- package/dist/showcase/assets/calendar-ChMVRsNC.js +16 -0
- package/dist/showcase/assets/calendar-days-BgkRJVxQ.js +1 -0
- package/dist/showcase/assets/calendar-xpHhfGnq.js +1 -0
- package/dist/showcase/assets/camera-C67freYi.js +1 -0
- package/dist/showcase/assets/card-CfOqXMVz.js +188 -0
- package/dist/showcase/assets/card-bLjedjT5.js +1 -0
- package/dist/showcase/assets/card-primitives-FUPmQCsu.js +1 -0
- package/dist/showcase/assets/card-radio-group-D_QNJ2Hm.js +1 -0
- package/dist/showcase/assets/cards-yHZa0kEf.js +353 -0
- package/dist/showcase/assets/carousel-DG1cKry4.js +449 -0
- package/dist/showcase/assets/cell-renderers-qfJ-7alN.js +1 -0
- package/dist/showcase/assets/chart-B_yVfbWJ.js +358 -0
- package/dist/showcase/assets/chart-column-CYrVWmMk.js +1 -0
- package/dist/showcase/assets/checkbox-NW6EcvtD.js +1 -0
- package/dist/showcase/assets/checkbox-pA_L1P-f.js +1 -0
- package/dist/showcase/assets/chevron-down-DLrHjdQ6.js +1 -0
- package/dist/showcase/assets/chevron-left-B_NQOEWI.js +1 -0
- package/dist/showcase/assets/chevron-up-6hst2jwR.js +1 -0
- package/dist/showcase/assets/chevrons-up-down-C_pj9oOa.js +1 -0
- package/dist/showcase/assets/circle-Cw9qV72m.js +1 -0
- package/dist/showcase/assets/circle-alert-D3Vcma6L.js +1 -0
- package/dist/showcase/assets/circle-check-DdjJpGc9.js +1 -0
- package/dist/showcase/assets/circle-check-big-Dnq-jwtv.js +1 -0
- package/dist/showcase/assets/circle-dot-DN8DFgIP.js +1 -0
- package/dist/showcase/assets/circle-question-mark-Dzgiv4oS.js +1 -0
- package/dist/showcase/assets/circle-x-BzTSkndC.js +1 -0
- package/dist/showcase/assets/clock-3-CVwHXCmo.js +1 -0
- package/dist/showcase/assets/clock-BIJ9p953.js +1 -0
- package/dist/showcase/assets/code-xml-DrU5ziCA.js +1 -0
- package/dist/showcase/assets/collapsible-7rdCo71k.js +27 -0
- package/dist/showcase/assets/collapsible-DCcTSlEH.js +1 -0
- package/dist/showcase/assets/combobox-mx8o5sV1.js +685 -0
- package/dist/showcase/assets/command-CKJDGdA9.js +1 -0
- package/dist/showcase/assets/command-CzGLPzoO.js +1 -0
- package/dist/showcase/assets/comment-composer-CSoEIapl.js +1 -0
- package/dist/showcase/assets/comment-item-pjaH53iB.js +1 -0
- package/dist/showcase/assets/comments-_ccotzWA.js +357 -0
- package/dist/showcase/assets/commerce-BuiQiRsf.js +267 -0
- package/dist/showcase/assets/composite-Bghohd0p.js +1 -0
- package/dist/showcase/assets/contact-card-CqM2uz_w.js +65 -0
- package/dist/showcase/assets/content-container-fC4z98GI.js +1 -0
- package/dist/showcase/assets/copyable-BMQK8sID.js +1 -0
- package/dist/showcase/assets/copyable-DVR2FAa0.js +96 -0
- package/dist/showcase/assets/course-card-Cku2z18g.js +77 -0
- package/dist/showcase/assets/cpu-A072t3kq.js +1 -0
- package/dist/showcase/assets/credit-card-BGwhx9Zo.js +1 -0
- package/dist/showcase/assets/css-variables-BAW_VrGk.js +1205 -0
- package/dist/showcase/assets/currency-Da3C0Uzb.js +149 -0
- package/dist/showcase/assets/dark-surfaces-BHYLEj80.js +90 -0
- package/dist/showcase/assets/data-view--EAYihh0.js +124 -0
- package/dist/showcase/assets/data-view-BAMwKzZO.js +4 -0
- package/dist/showcase/assets/database-C489WIbr.js +1 -0
- package/dist/showcase/assets/date-block-DuNaPSBU.js +1 -0
- package/dist/showcase/assets/date-picker-Dq-9L64y.js +1 -0
- package/dist/showcase/assets/date-pickers-D0ReMKc9.js +73 -0
- package/dist/showcase/assets/dense-info-CXwjqQB1.js +106 -0
- package/dist/showcase/assets/design-system-consistency-CGoKv0Vf.js +264 -0
- package/dist/showcase/assets/dialog-DIrJcAzq.js +1 -0
- package/dist/showcase/assets/dialog-O45UwQJs.js +1 -0
- package/dist/showcase/assets/display-utilities-VKOARJyC.js +267 -0
- package/dist/showcase/assets/dist-BavkTE-I.js +1 -0
- package/dist/showcase/assets/dist-DPxPKIgU.js +45 -0
- package/dist/showcase/assets/dollar-sign-CH2fcyek.js +1 -0
- package/dist/showcase/assets/download-whAw79X4.js +1 -0
- package/dist/showcase/assets/dropdown-menu-PVKwhWds.js +1 -0
- package/dist/showcase/assets/dropzone-B9sc8Mwa.js +1 -0
- package/dist/showcase/assets/earth-BpkE9LMh.js +1 -0
- package/dist/showcase/assets/ellipsis-CEVdIbhD.js +1 -0
- package/dist/showcase/assets/ellipsis-vertical-CBIvtUVz.js +1 -0
- package/dist/showcase/assets/empty-Dp1eCMIl.js +1 -0
- package/dist/showcase/assets/empty-item--dZz4VlJ.js +49 -0
- package/dist/showcase/assets/empty-state-ZOiE-hWY.js +190 -0
- package/dist/showcase/assets/empty-state-dsivN4CA.js +1 -0
- package/dist/showcase/assets/enhanced-activities-BpzUxaof.js +357 -0
- package/dist/showcase/assets/enhanced-combobox-D71BOuiX.js +1 -0
- package/dist/showcase/assets/esm-DT-TXPCJ.js +2 -0
- package/dist/showcase/assets/event-calendar-aVpAFZFq.js +138 -0
- package/dist/showcase/assets/event-log-DVcvyQ-P.js +330 -0
- package/dist/showcase/assets/example-CzbL5xoH.js +1 -0
- package/dist/showcase/assets/external-link-BaLE1QE5.js +1 -0
- package/dist/showcase/assets/eye-Dq0mLKrs.js +1 -0
- package/dist/showcase/assets/feature-announcement-sWKBC2fs.js +34 -0
- package/dist/showcase/assets/file-CgW3NvCL.js +1 -0
- package/dist/showcase/assets/file-text-JGaJQ8Wd.js +1 -0
- package/dist/showcase/assets/filter-layout-jfahl8aJ.js +1 -0
- package/dist/showcase/assets/filters-D7zegZVD.js +139 -0
- package/dist/showcase/assets/flag-H6U1f4wd.js +1 -0
- package/dist/showcase/assets/folder-open-sT96wRxJ.js +1 -0
- package/dist/showcase/assets/form-field-CQuSWnj8.js +1 -0
- package/dist/showcase/assets/form-sizing-Dltt6Fj-.js +1 -0
- package/dist/showcase/assets/format-DGPJ5dDq.js +1 -0
- package/dist/showcase/assets/forms-CdDJkAFt.js +915 -0
- package/dist/showcase/assets/funnel-Bh56GDO0.js +1 -0
- package/dist/showcase/assets/generic-CqSABKHr.js +1 -0
- package/dist/showcase/assets/getPseudoElementBounds-Cgw3-xUB.js +1 -0
- package/dist/showcase/assets/gift-ChVS2ovQ.js +1 -0
- package/dist/showcase/assets/giftcard-cards-CuaGn8-J.js +85 -0
- package/dist/showcase/assets/git-branch-86jQZnz4.js +1 -0
- package/dist/showcase/assets/global-search-C92CjOf8.js +215 -0
- package/dist/showcase/assets/global-search-DpVIWyO9.js +1 -0
- package/dist/showcase/assets/globe-DmGzYOlq.js +1 -0
- package/dist/showcase/assets/gradient-card-BUZzXFdZ.js +58 -0
- package/dist/showcase/assets/hash-pc6IIDge.js +1 -0
- package/dist/showcase/assets/header-DbM4l1Z6.js +1 -0
- package/dist/showcase/assets/header-notifications-CaymUd4n.js +1 -0
- package/dist/showcase/assets/heart-DtfPBlXq.js +1 -0
- package/dist/showcase/assets/hooks-JiLlGOJ-.js +220 -0
- package/dist/showcase/assets/house-CzNWewi5.js +1 -0
- package/dist/showcase/assets/icon-badge-G9Fp891n.js +1 -0
- package/dist/showcase/assets/icon-badge-e8N5BSYf.js +37 -0
- package/dist/showcase/assets/image-9IQW7agU.js +1 -0
- package/dist/showcase/assets/inbox-DU4YaGtc.js +1 -0
- package/dist/showcase/assets/index-CuXjv2p6.css +2 -0
- package/dist/showcase/assets/index-DN09-Vts.js +10 -0
- package/dist/showcase/assets/inertValue-kRQb7jwi.js +1 -0
- package/dist/showcase/assets/info-B9AXwUDF.js +1 -0
- package/dist/showcase/assets/inline-stat-BkLIKCvD.js +1 -0
- package/dist/showcase/assets/inline-stat-XqGHDQrK.js +15 -0
- package/dist/showcase/assets/input-BXHv6p9P.js +1 -0
- package/dist/showcase/assets/input-D_T9s_tn.js +1 -0
- package/dist/showcase/assets/input-group-Bs8dmhR6.js +47 -0
- package/dist/showcase/assets/input-group-CqkASeoV.js +1 -0
- package/dist/showcase/assets/inputs-DY7w_ssI.js +155 -0
- package/dist/showcase/assets/installation-Dg3FdGJ1.js +134 -0
- package/dist/showcase/assets/invoice-header-Ba-Y55Ag.js +36 -0
- package/dist/showcase/assets/invoice-items-CIJ8EfPg.js +36 -0
- package/dist/showcase/assets/invoice-mini-BISFvM7J.js +14 -0
- package/dist/showcase/assets/invoice-table-DcyVZTvl.js +30 -0
- package/dist/showcase/assets/isSameDay-av07hGac.js +1 -0
- package/dist/showcase/assets/isToday-GY5FlPL9.js +1 -0
- package/dist/showcase/assets/italic-Du0n76Xk.js +1 -0
- package/dist/showcase/assets/item-D8Lp4R-T.js +139 -0
- package/dist/showcase/assets/item-DTsZnSJG.js +1 -0
- package/dist/showcase/assets/item-Di7HZF5G.js +1 -0
- package/dist/showcase/assets/kanban-Dcminjsa.js +188 -0
- package/dist/showcase/assets/key-round-BBue3xKx.js +1 -0
- package/dist/showcase/assets/label-dkUEHYaz.js +1 -0
- package/dist/showcase/assets/languages-XxP8Uu82.js +1 -0
- package/dist/showcase/assets/layers-Bi_-RuHS.js +1 -0
- package/dist/showcase/assets/layout-app-shell-Cr6Ep0Zz.js +608 -0
- package/dist/showcase/assets/layout-auth-DffIslnp.js +790 -0
- package/dist/showcase/assets/layout-containers-BuSg6L6o.js +101 -0
- package/dist/showcase/assets/layout-header-DAxSUI18.js +203 -0
- package/dist/showcase/assets/layout-page-CVgVJHf1.js +314 -0
- package/dist/showcase/assets/layout-primitives-q8NXbEld.js +34 -0
- package/dist/showcase/assets/layout-sidebar-bB6AJaGs.js +224 -0
- package/dist/showcase/assets/layout-users-DG5u517t.js +117 -0
- package/dist/showcase/assets/layout-workspace-CKMDUM2b.js +191 -0
- package/dist/showcase/assets/lib-CaQvPpSJ.js +1 -0
- package/dist/showcase/assets/list-checks-Dhr60VvL.js +1 -0
- package/dist/showcase/assets/lock-CYVbyBpM.js +1 -0
- package/dist/showcase/assets/lock-keyhole-TUVID45I.js +1 -0
- package/dist/showcase/assets/mail-DfkwmVKE.js +1 -0
- package/dist/showcase/assets/mail-check-CnBhgH_h.js +1 -0
- package/dist/showcase/assets/map-Ck14_o-F.js +124 -0
- package/dist/showcase/assets/map-pin-Di7TUhai.js +1 -0
- package/dist/showcase/assets/media-library-CzM_to29.js +699 -0
- package/dist/showcase/assets/mention-inline-suggestions-B1RHUfnH.js +1 -0
- package/dist/showcase/assets/mentions-CdaPXOLl.js +138 -0
- package/dist/showcase/assets/menus-DuqcLdg1.js +171 -0
- package/dist/showcase/assets/message-square-DuW3PrFI.js +1 -0
- package/dist/showcase/assets/metadata-list-CCRGSPaS.js +286 -0
- package/dist/showcase/assets/metadata-list-Drvz5mwy.js +1 -0
- package/dist/showcase/assets/metric-BSaXa3Z_.js +1 -0
- package/dist/showcase/assets/metric-bar-CM1Rmk8y.js +1 -0
- package/dist/showcase/assets/metric-grid-BBGxdYNJ.js +1 -0
- package/dist/showcase/assets/metric-trend-chip-C_LrbPyT.js +1 -0
- package/dist/showcase/assets/metrics-analytics-bar-ByvVltQV.js +44 -0
- package/dist/showcase/assets/metrics-analytics-cards-CNGiVG1A.js +50 -0
- package/dist/showcase/assets/metrics-comparison-BLUvtt5N.js +76 -0
- package/dist/showcase/assets/metrics-heatmap-CZWhn4_i.js +27 -0
- package/dist/showcase/assets/metrics-inline-badge-CcPm2_ON.js +17 -0
- package/dist/showcase/assets/metrics-kpi-row-CitG5Aea.js +31 -0
- package/dist/showcase/assets/metrics-micro-grid-CAsplRVI.js +42 -0
- package/dist/showcase/assets/metrics-overview-DSRwW-3j.js +192 -0
- package/dist/showcase/assets/metrics-stat-cards-BTdSpUV_.js +54 -0
- package/dist/showcase/assets/minus-BaXg6nPb.js +1 -0
- package/dist/showcase/assets/money-display-HegN6NVU.js +1 -0
- package/dist/showcase/assets/month-year-picker-DGSalGea.js +1 -0
- package/dist/showcase/assets/navigation-B9kcgNmJ.js +90 -0
- package/dist/showcase/assets/navigation-D4OJbw4T.js +231 -0
- package/dist/showcase/assets/navigation-extras-xm_wzPZr.js +43 -0
- package/dist/showcase/assets/onboarding-checklist-CWuCJKDd.js +119 -0
- package/dist/showcase/assets/overflow-tab-bar-Dq-I4MUu.js +1 -0
- package/dist/showcase/assets/overlays-BHf9SZOh.js +159 -0
- package/dist/showcase/assets/overlays-DziL3nVU.js +408 -0
- package/dist/showcase/assets/overview-Cc69up8i.js +184 -0
- package/dist/showcase/assets/package-Bc-NuFnd.js +1 -0
- package/dist/showcase/assets/package-check-5LQwCfGh.js +1 -0
- package/dist/showcase/assets/page-B2o5HSfY.js +1 -0
- package/dist/showcase/assets/page-action-button-CfS6vsyC.js +1 -0
- package/dist/showcase/assets/page-header-W6quU5pO.js +1 -0
- package/dist/showcase/assets/pagination-Bfs7Zszm.js +1 -0
- package/dist/showcase/assets/pagination-DHs104ji.js +42 -0
- package/dist/showcase/assets/paperclip-CXeiMywc.js +1 -0
- package/dist/showcase/assets/password-input-C61t743N.js +1 -0
- package/dist/showcase/assets/pencil-C1TXsTfP.js +1 -0
- package/dist/showcase/assets/phone-Bh-68R_E.js +1 -0
- package/dist/showcase/assets/plus-CKBaO4jG.js +1 -0
- package/dist/showcase/assets/popover-C_7qLizt.js +1 -0
- package/dist/showcase/assets/popover-hgtHqd0h.js +1 -0
- package/dist/showcase/assets/popover-menu-DmYSBsji.js +1 -0
- package/dist/showcase/assets/products-DSvcQz-Q.js +423 -0
- package/dist/showcase/assets/progress-Chxeo8g4.js +18 -0
- package/dist/showcase/assets/progress-fYPoCyf-.js +1 -0
- package/dist/showcase/assets/props-table-izArO1Pv.js +1 -0
- package/dist/showcase/assets/quote-wvfNu9t7.js +1 -0
- package/dist/showcase/assets/receipt-BlXBX4ZJ.js +1 -0
- package/dist/showcase/assets/receipt-text-stSsUTV5.js +1 -0
- package/dist/showcase/assets/refinement-guide-Bri81J9N.js +189 -0
- package/dist/showcase/assets/refresh-cw-tZzNDEGO.js +1 -0
- package/dist/showcase/assets/resolveValueLabel-Cti97iX8.js +1 -0
- package/dist/showcase/assets/resource-B727CTVi.js +139 -0
- package/dist/showcase/assets/resource-DytT_quB.js +1 -0
- package/dist/showcase/assets/resource-selector-card-wNuW382N.js +43 -0
- package/dist/showcase/assets/rich-text-editor-DdK5YD0y.js +143 -0
- package/dist/showcase/assets/rich-text-editor-DqY2H6e0.js +124 -0
- package/dist/showcase/assets/rotate-ccw-Bp4aMDrI.js +1 -0
- package/dist/showcase/assets/route-D2owHMka.js +1 -0
- package/dist/showcase/assets/save-DjC_iy0t.js +1 -0
- package/dist/showcase/assets/schema-form-CQtLwGC1.js +327 -0
- package/dist/showcase/assets/scroll-area-BQlHFfkG.js +32 -0
- package/dist/showcase/assets/scroll-area-D3Rrt85s.js +1 -0
- package/dist/showcase/assets/section-DYfGx1Q5.js +1 -0
- package/dist/showcase/assets/select-BCJGhRpc.js +1 -0
- package/dist/showcase/assets/select-Cf5EigqA.js +1 -0
- package/dist/showcase/assets/send-86Vr11Ys.js +1 -0
- package/dist/showcase/assets/separator-BHjNVb5O.js +1 -0
- package/dist/showcase/assets/separator-BejjbTbO.js +28 -0
- package/dist/showcase/assets/settings-2-DNNVOsjP.js +1 -0
- package/dist/showcase/assets/settings-Bsi5BLx5.js +1 -0
- package/dist/showcase/assets/sheet-BazhMvfb.js +1 -0
- package/dist/showcase/assets/shield-alert-D-Jbocfj.js +1 -0
- package/dist/showcase/assets/shield-check-D9eDVcJ1.js +1 -0
- package/dist/showcase/assets/shield-xI2P9G5d.js +1 -0
- package/dist/showcase/assets/shopping-bag-DOGs3sez.js +1 -0
- package/dist/showcase/assets/showcase-s-5CuLAJ.js +132 -0
- package/dist/showcase/assets/sidebar-Rz44gw_a.js +1 -0
- package/dist/showcase/assets/sidebar.context-Bbcdo3o8.js +1 -0
- package/dist/showcase/assets/skeleton-CY8ieqD-.js +1 -0
- package/dist/showcase/assets/skeleton-CgoH6CPT.js +29 -0
- package/dist/showcase/assets/slider-okW2bgkG.js +1 -0
- package/dist/showcase/assets/smart-card-CVwEPwfI.js +1 -0
- package/dist/showcase/assets/sonner-CixCpxj2.js +22 -0
- package/dist/showcase/assets/sortable.esm-DKcVtGTb.js +5 -0
- package/dist/showcase/assets/sparkles-DDEVdtmy.js +1 -0
- package/dist/showcase/assets/spinner-BVGPoAEv.js +49 -0
- package/dist/showcase/assets/spinner-FURXSp1Q.js +1 -0
- package/dist/showcase/assets/spinner-u6TwJ3Ii.js +30 -0
- package/dist/showcase/assets/square-pen-DVXVT0cQ.js +1 -0
- package/dist/showcase/assets/stacked-avatars-CKOQhAx4.js +1 -0
- package/dist/showcase/assets/star-B3ZPfxuz.js +1 -0
- package/dist/showcase/assets/startOfDay-LwMBRUSU.js +1 -0
- package/dist/showcase/assets/styles-UIKkojWJ.js +1 -0
- package/dist/showcase/assets/suggestions-DbrzKjbi.js +126 -0
- package/dist/showcase/assets/switch-CAw84QpS.js +1 -0
- package/dist/showcase/assets/switch-Cjt2MCgr.js +1 -0
- package/dist/showcase/assets/sync-DWbqfpBH.js +124 -0
- package/dist/showcase/assets/table-Bx5lo5FP.js +686 -0
- package/dist/showcase/assets/table-C2RQulDb.js +1 -0
- package/dist/showcase/assets/table-actions-Clo3WEfM.js +1 -0
- package/dist/showcase/assets/tabs-DRtlcg6b.js +19 -0
- package/dist/showcase/assets/tabs-wMPtvuT5.js +1 -0
- package/dist/showcase/assets/tags-input-D5FpWOWF.js +1 -0
- package/dist/showcase/assets/text-button-Cwh6D6qG.js +1 -0
- package/dist/showcase/assets/text-link-DI1uXdGl.js +1 -0
- package/dist/showcase/assets/textarea-CGbt4gBZ.js +1 -0
- package/dist/showcase/assets/textarea-JPgPLhyk.js +1 -0
- package/dist/showcase/assets/timelines-CkHN08n6.js +200 -0
- package/dist/showcase/assets/toggle-group-BpXkR9uD.js +1 -0
- package/dist/showcase/assets/toggles-DK9iCbki.js +71 -0
- package/dist/showcase/assets/toggles-group-DwzRj0f7.js +32 -0
- package/dist/showcase/assets/tooltip-PtP1suag.js +31 -0
- package/dist/showcase/assets/trash-2-BE4XUI2g.js +1 -0
- package/dist/showcase/assets/trending-up-ByxOf-nR.js +1 -0
- package/dist/showcase/assets/truck-RTOdcRV0.js +1 -0
- package/dist/showcase/assets/typography-BKLgHDxU.js +223 -0
- package/dist/showcase/assets/ui-badge-DIh_3Wmo.js +28 -0
- package/dist/showcase/assets/ui-card-BOdHnZwv.js +30 -0
- package/dist/showcase/assets/ui-table-BW4FCClv.js +42 -0
- package/dist/showcase/assets/upload-tray-CV9_5Lpa.js +138 -0
- package/dist/showcase/assets/use-layout-link-MyeE-CDj.js +1 -0
- package/dist/showcase/assets/useAnchoredPopupScrollLock-DSaog2w5.js +1 -0
- package/dist/showcase/assets/useAriaLabelledBy-DSpPzrxG.js +1 -0
- package/dist/showcase/assets/useCollapsiblePanel-DsuJtES0.js +1 -0
- package/dist/showcase/assets/useCompositeItem-lbAimLrR.js +1 -0
- package/dist/showcase/assets/useCompositeListItem-pRXWGj4x.js +1 -0
- package/dist/showcase/assets/useLabelableId-IRM1zB5m.js +1 -0
- package/dist/showcase/assets/useOpenInteractionType-CHDcTj9f.js +1 -0
- package/dist/showcase/assets/useRender-Ogz5zjeJ.js +1 -0
- package/dist/showcase/assets/useTriggerFocusGuards-Du6btFNB.js +1 -0
- package/dist/showcase/assets/useValueChanged-CXpsR4fl.js +1 -0
- package/dist/showcase/assets/user-plus-CLj8AZe1.js +1 -0
- package/dist/showcase/assets/user-ymdT26JK.js +1 -0
- package/dist/showcase/assets/users-BGba2Xwv.js +1 -0
- package/dist/showcase/assets/vendor-profile-Ci6c9mFC.js +37 -0
- package/dist/showcase/assets/video-BcKa36-p.js +1 -0
- package/dist/showcase/assets/wrench-Cj2hRrih.js +1 -0
- package/dist/showcase/assets/x-iCqjAC2D.js +1 -0
- package/dist/showcase/assets/zap-H4bc_OhS.js +1 -0
- package/dist/showcase/index.html +2 -2
- package/dist/style.css +1 -1
- package/package.json +1 -1
- package/src/css/themes/shadcn.default.css +6 -6
- package/src/css/tokens/foundation.css +23 -9
- package/dist/_shared/accordion-B9EjlZLY.js +0 -135
- package/dist/_shared/accordion-B9EjlZLY.js.map +0 -1
- package/dist/_shared/accordion-IFDIc0E7.cjs +0 -2
- package/dist/_shared/accordion-IFDIc0E7.cjs.map +0 -1
- package/dist/_shared/action-menu-B6yFRDz1.cjs +0 -2
- package/dist/_shared/action-menu-B6yFRDz1.cjs.map +0 -1
- package/dist/_shared/action-menu-CNS-fwQr.js +0 -96
- package/dist/_shared/action-menu-CNS-fwQr.js.map +0 -1
- package/dist/_shared/ai-artifact-B3qhuiKC.js +0 -1099
- package/dist/_shared/ai-artifact-B3qhuiKC.js.map +0 -1
- package/dist/_shared/ai-artifact-Dtr0bnVq.cjs +0 -3
- package/dist/_shared/ai-artifact-Dtr0bnVq.cjs.map +0 -1
- package/dist/_shared/alert-V0V36Sny.cjs +0 -2
- package/dist/_shared/alert-V0V36Sny.cjs.map +0 -1
- package/dist/_shared/alert-m-4s0Hqq.js +0 -81
- package/dist/_shared/alert-m-4s0Hqq.js.map +0 -1
- package/dist/_shared/app-shell-D3eGUtL-.js +0 -69
- package/dist/_shared/app-shell-D3eGUtL-.js.map +0 -1
- package/dist/_shared/app-shell-QJHARDMB.cjs +0 -2
- package/dist/_shared/app-shell-QJHARDMB.cjs.map +0 -1
- package/dist/_shared/auth-BZY91F5_.cjs +0 -2
- package/dist/_shared/auth-BZY91F5_.cjs.map +0 -1
- package/dist/_shared/auth-DcotjEbY.js +0 -643
- package/dist/_shared/auth-DcotjEbY.js.map +0 -1
- package/dist/_shared/badge-BeSKxX1u.cjs +0 -2
- package/dist/_shared/badge-BeSKxX1u.cjs.map +0 -1
- package/dist/_shared/badge-a2Z3K5aQ.js +0 -110
- package/dist/_shared/badge-a2Z3K5aQ.js.map +0 -1
- package/dist/_shared/breadcrumbs-AyLzxCJZ.cjs +0 -2
- package/dist/_shared/breadcrumbs-AyLzxCJZ.cjs.map +0 -1
- package/dist/_shared/breadcrumbs-B57Unsoe.js +0 -105
- package/dist/_shared/breadcrumbs-B57Unsoe.js.map +0 -1
- package/dist/_shared/button-Bd5bEIiB.cjs +0 -2
- package/dist/_shared/button-Bd5bEIiB.cjs.map +0 -1
- package/dist/_shared/button-DHksjMvc.js +0 -189
- package/dist/_shared/button-DHksjMvc.js.map +0 -1
- package/dist/_shared/buttons-Bek9F7qK.cjs +0 -2
- package/dist/_shared/buttons-Bek9F7qK.cjs.map +0 -1
- package/dist/_shared/buttons-DcynMPnE.js +0 -137
- package/dist/_shared/buttons-DcynMPnE.js.map +0 -1
- package/dist/_shared/card-radio-group-C2p_iBal.cjs +0 -2
- package/dist/_shared/card-radio-group-C2p_iBal.cjs.map +0 -1
- package/dist/_shared/card-radio-group-Fdi1Cz1j.js +0 -150
- package/dist/_shared/card-radio-group-Fdi1Cz1j.js.map +0 -1
- package/dist/_shared/cards-C1ythc0Q.js +0 -354
- package/dist/_shared/cards-C1ythc0Q.js.map +0 -1
- package/dist/_shared/cards-GSYfJ-oX.cjs +0 -2
- package/dist/_shared/cards-GSYfJ-oX.cjs.map +0 -1
- package/dist/_shared/combobox-BIe72dV3.js +0 -954
- package/dist/_shared/combobox-BIe72dV3.js.map +0 -1
- package/dist/_shared/combobox-CJiFDoTi.cjs +0 -2
- package/dist/_shared/combobox-CJiFDoTi.cjs.map +0 -1
- package/dist/_shared/command-ByedBajF.js +0 -39
- package/dist/_shared/command-ByedBajF.js.map +0 -1
- package/dist/_shared/command-EGR0nhGc.cjs +0 -2
- package/dist/_shared/command-EGR0nhGc.cjs.map +0 -1
- package/dist/_shared/comments-CmljtbAW.js +0 -952
- package/dist/_shared/comments-CmljtbAW.js.map +0 -1
- package/dist/_shared/comments-ColUq7eh.cjs +0 -2
- package/dist/_shared/comments-ColUq7eh.cjs.map +0 -1
- package/dist/_shared/copyable-Dopk9pEJ.js +0 -38
- package/dist/_shared/copyable-Dopk9pEJ.js.map +0 -1
- package/dist/_shared/copyable-rQwxsTJ3.cjs +0 -2
- package/dist/_shared/copyable-rQwxsTJ3.cjs.map +0 -1
- package/dist/_shared/data-display-BTsCY7A5.js +0 -1873
- package/dist/_shared/data-display-BTsCY7A5.js.map +0 -1
- package/dist/_shared/data-display-BdGQMXit.cjs +0 -2
- package/dist/_shared/data-display-BdGQMXit.cjs.map +0 -1
- package/dist/_shared/date-picker-BiUgIkjP.cjs +0 -2
- package/dist/_shared/date-picker-BiUgIkjP.cjs.map +0 -1
- package/dist/_shared/date-picker-DFkLiveH.js +0 -1361
- package/dist/_shared/date-picker-DFkLiveH.js.map +0 -1
- package/dist/_shared/date-pickers-C86tVD8e.cjs +0 -2
- package/dist/_shared/date-pickers-C86tVD8e.cjs.map +0 -1
- package/dist/_shared/date-pickers-D4oxOOHE.js +0 -329
- package/dist/_shared/date-pickers-D4oxOOHE.js.map +0 -1
- package/dist/_shared/display-B0wLVN8t.js +0 -986
- package/dist/_shared/display-B0wLVN8t.js.map +0 -1
- package/dist/_shared/display-Bin2vVex.cjs +0 -2
- package/dist/_shared/display-Bin2vVex.cjs.map +0 -1
- package/dist/_shared/form-sizing-C51oI3Di.js +0 -42
- package/dist/_shared/form-sizing-C51oI3Di.js.map +0 -1
- package/dist/_shared/form-sizing-Co53Drri.cjs +0 -2
- package/dist/_shared/form-sizing-Co53Drri.cjs.map +0 -1
- package/dist/_shared/forms-CEE1te78.cjs +0 -2
- package/dist/_shared/forms-CEE1te78.cjs.map +0 -1
- package/dist/_shared/forms-CQoGvG7q.js +0 -3533
- package/dist/_shared/forms-CQoGvG7q.js.map +0 -1
- package/dist/_shared/header-B9IPDQRW.js +0 -447
- package/dist/_shared/header-B9IPDQRW.js.map +0 -1
- package/dist/_shared/header-C_1x4-rd.cjs +0 -2
- package/dist/_shared/header-C_1x4-rd.cjs.map +0 -1
- package/dist/_shared/hooks---vunGQ6.js +0 -95
- package/dist/_shared/hooks---vunGQ6.js.map +0 -1
- package/dist/_shared/hooks-CjVzmgvY.cjs +0 -2
- package/dist/_shared/hooks-CjVzmgvY.cjs.map +0 -1
- package/dist/_shared/input-CB6hxh-5.cjs +0 -2
- package/dist/_shared/input-CB6hxh-5.cjs.map +0 -1
- package/dist/_shared/input-CfnHBT--.js +0 -182
- package/dist/_shared/input-CfnHBT--.js.map +0 -1
- package/dist/_shared/item-Xs-fgzaT.js +0 -226
- package/dist/_shared/item-Xs-fgzaT.js.map +0 -1
- package/dist/_shared/item-eUP9Rtmg.cjs +0 -2
- package/dist/_shared/item-eUP9Rtmg.cjs.map +0 -1
- package/dist/_shared/layout-BXrQqUKq.js +0 -262
- package/dist/_shared/layout-BXrQqUKq.js.map +0 -1
- package/dist/_shared/layout-DWicdsPI.cjs +0 -2
- package/dist/_shared/layout-DWicdsPI.cjs.map +0 -1
- package/dist/_shared/mentions-BahbwDwU.js +0 -506
- package/dist/_shared/mentions-BahbwDwU.js.map +0 -1
- package/dist/_shared/mentions-aHalksbt.cjs +0 -2
- package/dist/_shared/mentions-aHalksbt.cjs.map +0 -1
- package/dist/_shared/money-display-BLPNMmiT.cjs +0 -2
- package/dist/_shared/money-display-BLPNMmiT.cjs.map +0 -1
- package/dist/_shared/money-display-D_-Cb8-9.js +0 -198
- package/dist/_shared/money-display-D_-Cb8-9.js.map +0 -1
- package/dist/_shared/navigation-BcYAwgzo.js +0 -436
- package/dist/_shared/navigation-BcYAwgzo.js.map +0 -1
- package/dist/_shared/navigation-DAB7uuBj.cjs +0 -2
- package/dist/_shared/navigation-DAB7uuBj.cjs.map +0 -1
- package/dist/_shared/overlays-DW8OIK5R.js +0 -735
- package/dist/_shared/overlays-DW8OIK5R.js.map +0 -1
- package/dist/_shared/overlays-Du65iCkx.cjs +0 -2
- package/dist/_shared/overlays-Du65iCkx.cjs.map +0 -1
- package/dist/_shared/popover-menu-qxBZlTck.js +0 -93
- package/dist/_shared/popover-menu-qxBZlTck.js.map +0 -1
- package/dist/_shared/popover-menu-z9QTjl4o.cjs +0 -2
- package/dist/_shared/popover-menu-z9QTjl4o.cjs.map +0 -1
- package/dist/_shared/rich-text-editor-DeIiIDn7.cjs +0 -2
- package/dist/_shared/rich-text-editor-DeIiIDn7.cjs.map +0 -1
- package/dist/_shared/rich-text-editor-VIBlL0x3.js +0 -620
- package/dist/_shared/rich-text-editor-VIBlL0x3.js.map +0 -1
- package/dist/_shared/settings-Bfr6PgSi.cjs +0 -2
- package/dist/_shared/settings-Bfr6PgSi.cjs.map +0 -1
- package/dist/_shared/settings-CrPaYr4A.js +0 -143
- package/dist/_shared/settings-CrPaYr4A.js.map +0 -1
- package/dist/_shared/sidebar-CDOLD8fN.js +0 -548
- package/dist/_shared/sidebar-CDOLD8fN.js.map +0 -1
- package/dist/_shared/sidebar-DcsxeNml.cjs +0 -2
- package/dist/_shared/sidebar-DcsxeNml.cjs.map +0 -1
- package/dist/_shared/spinner-D35zNriU.cjs +0 -2
- package/dist/_shared/spinner-D35zNriU.cjs.map +0 -1
- package/dist/_shared/spinner-DMC2IIml.js +0 -67
- package/dist/_shared/spinner-DMC2IIml.js.map +0 -1
- package/dist/_shared/table-B_pqCQxC.js +0 -1377
- package/dist/_shared/table-B_pqCQxC.js.map +0 -1
- package/dist/_shared/table-CGVOXtdv.cjs +0 -2
- package/dist/_shared/table-CGVOXtdv.cjs.map +0 -1
- package/dist/_shared/textarea-B24qgdmd.cjs +0 -2
- package/dist/_shared/textarea-B24qgdmd.cjs.map +0 -1
- package/dist/_shared/textarea-ChLRmmVU.js +0 -118
- package/dist/_shared/textarea-ChLRmmVU.js.map +0 -1
- package/dist/_shared/typography-CO9uwZhF.cjs +0 -2
- package/dist/_shared/typography-CO9uwZhF.cjs.map +0 -1
- package/dist/_shared/typography-DE0NGEIE.js +0 -201
- package/dist/_shared/typography-DE0NGEIE.js.map +0 -1
- package/dist/_shared/workspace-C1twu23r.cjs +0 -2
- package/dist/_shared/workspace-C1twu23r.cjs.map +0 -1
- package/dist/_shared/workspace-CkOZLdcN.js +0 -357
- package/dist/_shared/workspace-CkOZLdcN.js.map +0 -1
- package/dist/showcase/assets/AreaChart-WJREayr9.js +0 -6
- package/dist/showcase/assets/CompositeItem-CY3XmFuI.js +0 -1
- package/dist/showcase/assets/CompositeRoot-BPMF0t1F.js +0 -1
- package/dist/showcase/assets/DialogTrigger-BzaF3YN8.js +0 -1
- package/dist/showcase/assets/LabelableContext-LKvvFFnV.js +0 -1
- package/dist/showcase/assets/PreviewLayout-B0n7l00P.js +0 -1
- package/dist/showcase/assets/RadioGroup-VBtGFETg.js +0 -1
- package/dist/showcase/assets/ScrollAreaCorner-BimGwdGs.js +0 -1
- package/dist/showcase/assets/Separator-BfKe0YiY.js +0 -1
- package/dist/showcase/assets/ToolbarRootContext-Cscyv1PN.js +0 -1
- package/dist/showcase/assets/accordion-BEN0VkL4.js +0 -171
- package/dist/showcase/assets/accordion-variants-QFG3H38z.js +0 -1
- package/dist/showcase/assets/action-menu-Bfw1tFqM.js +0 -1
- package/dist/showcase/assets/actions-CFpHs5IC.js +0 -310
- package/dist/showcase/assets/activities-CDxlaghU.js +0 -500
- package/dist/showcase/assets/activities-feed-card-BO1kcjRK.js +0 -1
- package/dist/showcase/assets/admin-DFpHXeuv.js +0 -140
- package/dist/showcase/assets/ai-DyO6VqQP.js +0 -207
- package/dist/showcase/assets/ai-artifact-MVA3ikv6.js +0 -2
- package/dist/showcase/assets/ai-chat-D-xcp6Jf.js +0 -568
- package/dist/showcase/assets/ai-elements-DlFqIOYp.js +0 -387
- package/dist/showcase/assets/ai-tool-call-DedG9TdK.js +0 -1
- package/dist/showcase/assets/alert-CmRK2lOe.js +0 -1
- package/dist/showcase/assets/alert-DCIVryEp.js +0 -62
- package/dist/showcase/assets/alert-DDP3Ktic.js +0 -93
- package/dist/showcase/assets/api-key-list-CWa997YX.js +0 -1
- package/dist/showcase/assets/api-key-list-mTPebHF3.js +0 -73
- package/dist/showcase/assets/app-sidebar-Cnfk9z5K.js +0 -1
- package/dist/showcase/assets/arrow-down-CCYWFimd.js +0 -1
- package/dist/showcase/assets/arrow-left-CrYjfZJ0.js +0 -1
- package/dist/showcase/assets/arrow-right-eLxbBrdm.js +0 -1
- package/dist/showcase/assets/arrow-up-kA33fcPv.js +0 -1
- package/dist/showcase/assets/arrow-up-right-BSWGQVDB.js +0 -1
- package/dist/showcase/assets/avatar-BDGhB3aA.js +0 -57
- package/dist/showcase/assets/avatar-CLBQvnYG.js +0 -1
- package/dist/showcase/assets/avatar-WUMW3Qjo.js +0 -1
- package/dist/showcase/assets/avatar-cKSNuTzf.js +0 -67
- package/dist/showcase/assets/badge--mqVg8Ry.js +0 -31
- package/dist/showcase/assets/badge-check-D7YjWqnm.js +0 -1
- package/dist/showcase/assets/bell-6YyocFK6.js +0 -1
- package/dist/showcase/assets/bot-BC4pGAB3.js +0 -1
- package/dist/showcase/assets/box-CPGIu4Nv.js +0 -1
- package/dist/showcase/assets/braces-9jywZtTA.js +0 -1
- package/dist/showcase/assets/brain-wf_S427C.js +0 -1
- package/dist/showcase/assets/brand-78lhbKSW.js +0 -36
- package/dist/showcase/assets/breadcrumb-6XHObtqO.js +0 -1
- package/dist/showcase/assets/breadcrumb-BVrrS53_.js +0 -52
- package/dist/showcase/assets/breadcrumbs-BwC3Iaae.js +0 -1
- package/dist/showcase/assets/briefcase-BViWYew9.js +0 -1
- package/dist/showcase/assets/building-2-CwR3gV1I.js +0 -1
- package/dist/showcase/assets/button-BWwsy37B.js +0 -44
- package/dist/showcase/assets/button-group-BTiMRQIO.js +0 -1
- package/dist/showcase/assets/buttons-D9pH8hPs.js +0 -272
- package/dist/showcase/assets/calendar-Bzl2i1lu.js +0 -1
- package/dist/showcase/assets/calendar-CNMlC7Fn.js +0 -16
- package/dist/showcase/assets/calendar-D5NdEmaD.js +0 -1
- package/dist/showcase/assets/calendar-days-j8QDBUc5.js +0 -1
- package/dist/showcase/assets/camera-Cwb84N8a.js +0 -1
- package/dist/showcase/assets/card-CX3vQ2Te.js +0 -1
- package/dist/showcase/assets/card-FLJkfdKP.js +0 -188
- package/dist/showcase/assets/card-primitives-C2s13Uvp.js +0 -1
- package/dist/showcase/assets/card-radio-group-BP27dErL.js +0 -1
- package/dist/showcase/assets/cards-DcdxRM9W.js +0 -354
- package/dist/showcase/assets/carousel-CTKyiHD2.js +0 -449
- package/dist/showcase/assets/cell-renderers-ouSypXTE.js +0 -1
- package/dist/showcase/assets/chart-CMsMyCah.js +0 -358
- package/dist/showcase/assets/chart-column-BrwpEFzy.js +0 -1
- package/dist/showcase/assets/checkbox-4qgEfnjv.js +0 -1
- package/dist/showcase/assets/checkbox-ratLYBAF.js +0 -1
- package/dist/showcase/assets/chevron-down-BInaIfd1.js +0 -1
- package/dist/showcase/assets/chevron-left-Bjy3FJ_M.js +0 -1
- package/dist/showcase/assets/chevron-up-Ufl6UEyV.js +0 -1
- package/dist/showcase/assets/chevrons-up-down-CrOH-P5z.js +0 -1
- package/dist/showcase/assets/circle-G0dEx2Ay.js +0 -1
- package/dist/showcase/assets/circle-alert-CiibDCe8.js +0 -1
- package/dist/showcase/assets/circle-check-Bqm54c03.js +0 -1
- package/dist/showcase/assets/circle-check-big-BfiY_qy_.js +0 -1
- package/dist/showcase/assets/circle-dot-VNm7CEgH.js +0 -1
- package/dist/showcase/assets/circle-question-mark-mM7PKy4G.js +0 -1
- package/dist/showcase/assets/circle-x-2tzzp_vB.js +0 -1
- package/dist/showcase/assets/clock-3-CfdZnMP2.js +0 -1
- package/dist/showcase/assets/clock-ByB7C11p.js +0 -1
- package/dist/showcase/assets/code-xml-D2fN-BaU.js +0 -1
- package/dist/showcase/assets/collapsible-B2lI_uVI.js +0 -1
- package/dist/showcase/assets/collapsible-Bs5YFx-M.js +0 -27
- package/dist/showcase/assets/combobox-BqNSwFaM.js +0 -685
- package/dist/showcase/assets/command-Dcbh_YP-.js +0 -1
- package/dist/showcase/assets/command-Mb30xkwq.js +0 -1
- package/dist/showcase/assets/comment-composer-DqTw0zIM.js +0 -1
- package/dist/showcase/assets/comment-item-DbQAZ3yP.js +0 -1
- package/dist/showcase/assets/comments-CGMOOi7k.js +0 -357
- package/dist/showcase/assets/commerce-bVpLHwpS.js +0 -267
- package/dist/showcase/assets/composite-CTpmYme_.js +0 -1
- package/dist/showcase/assets/contact-card-nuS10UKK.js +0 -65
- package/dist/showcase/assets/content-container-NexBp0FV.js +0 -1
- package/dist/showcase/assets/copyable-CNltkC2A.js +0 -1
- package/dist/showcase/assets/copyable-qr6--oJx.js +0 -96
- package/dist/showcase/assets/course-card-0kkl37FX.js +0 -77
- package/dist/showcase/assets/cpu-DSD9h0l5.js +0 -1
- package/dist/showcase/assets/credit-card-CN0E6FU8.js +0 -1
- package/dist/showcase/assets/css-variables-CzmmLWxt.js +0 -1190
- package/dist/showcase/assets/currency-BtofP745.js +0 -149
- package/dist/showcase/assets/dark-surfaces-BU7kfTIi.js +0 -90
- package/dist/showcase/assets/data-view-3W7_KBli.js +0 -124
- package/dist/showcase/assets/data-view-snL5QtHe.js +0 -4
- package/dist/showcase/assets/database-BarEYzaF.js +0 -1
- package/dist/showcase/assets/date-block-dTt9Rcfd.js +0 -1
- package/dist/showcase/assets/date-picker-BKzZeQGc.js +0 -1
- package/dist/showcase/assets/date-pickers-CYERVYRo.js +0 -73
- package/dist/showcase/assets/dense-info-hnKZfRnQ.js +0 -106
- package/dist/showcase/assets/design-system-consistency-D6qngflS.js +0 -264
- package/dist/showcase/assets/dialog-mO0FpHmT.js +0 -1
- package/dist/showcase/assets/dialog-xbuhPXmf.js +0 -1
- package/dist/showcase/assets/display-utilities-C4IflxoK.js +0 -267
- package/dist/showcase/assets/dist-BFChHTWK.js +0 -45
- package/dist/showcase/assets/dist-BkVfs5PY.js +0 -1
- package/dist/showcase/assets/dollar-sign-BES-Y4q8.js +0 -1
- package/dist/showcase/assets/download-CuEg-4DT.js +0 -1
- package/dist/showcase/assets/dropdown-menu-C4Fcfk9z.js +0 -1
- package/dist/showcase/assets/dropzone-CrJ_k9fJ.js +0 -1
- package/dist/showcase/assets/earth-Cmx-Axig.js +0 -1
- package/dist/showcase/assets/ellipsis-Co7iTzp_.js +0 -1
- package/dist/showcase/assets/ellipsis-vertical-DMYJFiqQ.js +0 -1
- package/dist/showcase/assets/empty-Dw4ozyll.js +0 -1
- package/dist/showcase/assets/empty-item-DQwAsl0J.js +0 -49
- package/dist/showcase/assets/empty-state-BKvbnAy1.js +0 -1
- package/dist/showcase/assets/empty-state-Dv6f2fmP.js +0 -190
- package/dist/showcase/assets/enhanced-activities-Ctmivg46.js +0 -357
- package/dist/showcase/assets/enhanced-combobox-D0AsPZ-b.js +0 -1
- package/dist/showcase/assets/esm-oZ6qcNoa.js +0 -2
- package/dist/showcase/assets/event-calendar-ChXdeehr.js +0 -138
- package/dist/showcase/assets/event-log-DeOCb2tT.js +0 -330
- package/dist/showcase/assets/example-CDvNeHNP.js +0 -1
- package/dist/showcase/assets/external-link-BaiCqIx3.js +0 -1
- package/dist/showcase/assets/eye-zG-fqYfd.js +0 -1
- package/dist/showcase/assets/feature-announcement-C2XGWNgI.js +0 -34
- package/dist/showcase/assets/file-sAbDfDuO.js +0 -1
- package/dist/showcase/assets/file-text-Boa9IOND.js +0 -1
- package/dist/showcase/assets/filter-layout-tZmZz-2B.js +0 -1
- package/dist/showcase/assets/filters-D8gEkDAE.js +0 -139
- package/dist/showcase/assets/flag-Cu20rcE4.js +0 -1
- package/dist/showcase/assets/folder-open-Cuk6KKLi.js +0 -1
- package/dist/showcase/assets/form-field-D8sL8tat.js +0 -1
- package/dist/showcase/assets/form-sizing-C3UG5WKC.js +0 -1
- package/dist/showcase/assets/format-CaRklI--.js +0 -1
- package/dist/showcase/assets/forms-CNk2oX65.js +0 -915
- package/dist/showcase/assets/funnel-B2kBprKZ.js +0 -1
- package/dist/showcase/assets/generic-oWYKMvId.js +0 -1
- package/dist/showcase/assets/getPseudoElementBounds-GjucWEcD.js +0 -1
- package/dist/showcase/assets/gift-C_D_-5GL.js +0 -1
- package/dist/showcase/assets/giftcard-cards-B4DDGzdi.js +0 -85
- package/dist/showcase/assets/git-branch-DlTTLnjW.js +0 -1
- package/dist/showcase/assets/global-search-BjHAfaqS.js +0 -215
- package/dist/showcase/assets/global-search-hKQWHfrf.js +0 -1
- package/dist/showcase/assets/globe-D-gH7XQ2.js +0 -1
- package/dist/showcase/assets/gradient-card-jVxEisUP.js +0 -58
- package/dist/showcase/assets/hash-DySqEhph.js +0 -1
- package/dist/showcase/assets/header-B8hHkAVl.js +0 -1
- package/dist/showcase/assets/header-notifications-s180jNb1.js +0 -1
- package/dist/showcase/assets/heart-DDFCk8Tb.js +0 -1
- package/dist/showcase/assets/hooks-0A_FzYrt.js +0 -220
- package/dist/showcase/assets/house-BqE1X-Wf.js +0 -1
- package/dist/showcase/assets/icon-badge-CyiMjD7j.js +0 -37
- package/dist/showcase/assets/icon-badge-fJVhEHym.js +0 -1
- package/dist/showcase/assets/image-DCtwKHqe.js +0 -1
- package/dist/showcase/assets/inbox-DZA-pAGB.js +0 -1
- package/dist/showcase/assets/index-B37z19z3.js +0 -10
- package/dist/showcase/assets/index-CIsKgiSF.css +0 -2
- package/dist/showcase/assets/inertValue-SPYMBsOM.js +0 -1
- package/dist/showcase/assets/info-DrfDr3GT.js +0 -1
- package/dist/showcase/assets/inline-stat-BVJNx4xR.js +0 -1
- package/dist/showcase/assets/inline-stat-C3cWbSUK.js +0 -15
- package/dist/showcase/assets/input-CKTTGrnR.js +0 -1
- package/dist/showcase/assets/input-UHuWYPMF.js +0 -1
- package/dist/showcase/assets/input-group-BR_lU__a.js +0 -1
- package/dist/showcase/assets/input-group-iZaLbsTP.js +0 -47
- package/dist/showcase/assets/inputs-C7j8Xivm.js +0 -155
- package/dist/showcase/assets/installation-DYnTwaPR.js +0 -134
- package/dist/showcase/assets/invoice-header-D_0KvXQe.js +0 -36
- package/dist/showcase/assets/invoice-items-jcNb-sST.js +0 -36
- package/dist/showcase/assets/invoice-mini-DrZAbjPq.js +0 -14
- package/dist/showcase/assets/invoice-table-DlAw0U4U.js +0 -30
- package/dist/showcase/assets/isSameDay-Cl6v_syG.js +0 -1
- package/dist/showcase/assets/isToday-BBoFjSnJ.js +0 -1
- package/dist/showcase/assets/italic-j2U8krYa.js +0 -1
- package/dist/showcase/assets/item-B2WoC1SD.js +0 -139
- package/dist/showcase/assets/item-BMJ5hfT5.js +0 -1
- package/dist/showcase/assets/item-C_5-EHNK.js +0 -1
- package/dist/showcase/assets/kanban-Cv64Szxq.js +0 -188
- package/dist/showcase/assets/key-round-CORDYqE2.js +0 -1
- package/dist/showcase/assets/label-B0UjYqfw.js +0 -1
- package/dist/showcase/assets/languages-Njdo5y8i.js +0 -1
- package/dist/showcase/assets/layers-Dyew-8IP.js +0 -1
- package/dist/showcase/assets/layout-app-shell-DEZt0d84.js +0 -608
- package/dist/showcase/assets/layout-auth-BT84haSd.js +0 -790
- package/dist/showcase/assets/layout-containers-D6SP4vRB.js +0 -101
- package/dist/showcase/assets/layout-header-kLYjJnHz.js +0 -203
- package/dist/showcase/assets/layout-page-CmS4d8jw.js +0 -314
- package/dist/showcase/assets/layout-primitives-BW858Ymj.js +0 -34
- package/dist/showcase/assets/layout-sidebar-eIDEoyzV.js +0 -224
- package/dist/showcase/assets/layout-users-HyZHQIov.js +0 -117
- package/dist/showcase/assets/layout-workspace-BrDwVUvn.js +0 -191
- package/dist/showcase/assets/lib-Dhty05ZR.js +0 -1
- package/dist/showcase/assets/list-checks-CcWjdDq8.js +0 -1
- package/dist/showcase/assets/lock-CwH3bXx5.js +0 -1
- package/dist/showcase/assets/lock-keyhole-BdBxeIkW.js +0 -1
- package/dist/showcase/assets/mail-Cn94c8yp.js +0 -1
- package/dist/showcase/assets/mail-check-D-q_vPxD.js +0 -1
- package/dist/showcase/assets/map-BfUZMScw.js +0 -124
- package/dist/showcase/assets/map-pin-BZB9GUXP.js +0 -1
- package/dist/showcase/assets/media-library-DguE2q94.js +0 -699
- package/dist/showcase/assets/mention-inline-suggestions-CyGplHOl.js +0 -1
- package/dist/showcase/assets/mentions-lmr_XmfN.js +0 -138
- package/dist/showcase/assets/menus-D0qYbzKk.js +0 -171
- package/dist/showcase/assets/message-square-7VpiUwcS.js +0 -1
- package/dist/showcase/assets/metadata-list-B8O2ljIS.js +0 -1
- package/dist/showcase/assets/metadata-list-BcYg9Ru3.js +0 -286
- package/dist/showcase/assets/metric-HzQnjCpO.js +0 -1
- package/dist/showcase/assets/metric-bar-Fr1TDnSu.js +0 -1
- package/dist/showcase/assets/metric-grid-CM-P894v.js +0 -1
- package/dist/showcase/assets/metric-trend-chip-DqYH_U8e.js +0 -1
- package/dist/showcase/assets/metrics-analytics-bar-DKRLzyXq.js +0 -44
- package/dist/showcase/assets/metrics-analytics-cards-qMbAYBbk.js +0 -50
- package/dist/showcase/assets/metrics-comparison-GSWVebL_.js +0 -76
- package/dist/showcase/assets/metrics-heatmap-Fj5QZoO3.js +0 -27
- package/dist/showcase/assets/metrics-inline-badge-BuyhiYDl.js +0 -17
- package/dist/showcase/assets/metrics-kpi-row-xNn4bjZc.js +0 -31
- package/dist/showcase/assets/metrics-micro-grid-W_ZYCffp.js +0 -42
- package/dist/showcase/assets/metrics-overview-D-km110k.js +0 -192
- package/dist/showcase/assets/metrics-stat-cards-odVtufFY.js +0 -54
- package/dist/showcase/assets/minus-DZsXg5PW.js +0 -1
- package/dist/showcase/assets/money-display-C7Hp2pT3.js +0 -1
- package/dist/showcase/assets/month-year-picker-Dnr4J0mO.js +0 -1
- package/dist/showcase/assets/navigation-0nrtBP5O.js +0 -90
- package/dist/showcase/assets/navigation-BaWNq9oa.js +0 -231
- package/dist/showcase/assets/navigation-extras-B22W1Vkk.js +0 -43
- package/dist/showcase/assets/onboarding-checklist-BFj7rmdZ.js +0 -119
- package/dist/showcase/assets/overflow-tab-bar-D_rltswa.js +0 -1
- package/dist/showcase/assets/overlays-CNfiB-zF.js +0 -408
- package/dist/showcase/assets/overlays-CuxuFGC8.js +0 -159
- package/dist/showcase/assets/overview-CBmdAWO6.js +0 -184
- package/dist/showcase/assets/package-BwwfLMWb.js +0 -1
- package/dist/showcase/assets/package-check-BepTKJLy.js +0 -1
- package/dist/showcase/assets/page-_JDFUWqe.js +0 -1
- package/dist/showcase/assets/page-action-button-Cf34I-B2.js +0 -1
- package/dist/showcase/assets/page-header-pdHFvyTo.js +0 -1
- package/dist/showcase/assets/pagination-Db1WJvjK.js +0 -42
- package/dist/showcase/assets/pagination-s8_MGk9D.js +0 -1
- package/dist/showcase/assets/paperclip-B9HQ47_2.js +0 -1
- package/dist/showcase/assets/password-input-D-eZWMGX.js +0 -1
- package/dist/showcase/assets/pencil-Dm53P6Db.js +0 -1
- package/dist/showcase/assets/phone-a4Ja9xAp.js +0 -1
- package/dist/showcase/assets/plus-DbOlx2x0.js +0 -1
- package/dist/showcase/assets/popover-B8qrRgt3.js +0 -1
- package/dist/showcase/assets/popover-Bm5wETUP.js +0 -1
- package/dist/showcase/assets/popover-menu-EH4P-BuI.js +0 -1
- package/dist/showcase/assets/products-n6VBSMDh.js +0 -423
- package/dist/showcase/assets/progress-D9r6PSCF.js +0 -1
- package/dist/showcase/assets/progress-DVnMcpeq.js +0 -18
- package/dist/showcase/assets/props-table-udnF7Z46.js +0 -1
- package/dist/showcase/assets/quote-qVQF4JC7.js +0 -1
- package/dist/showcase/assets/receipt-DaC4l-Mr.js +0 -1
- package/dist/showcase/assets/receipt-text-BnwhWHdU.js +0 -1
- package/dist/showcase/assets/refinement-guide-zBbAE-vw.js +0 -189
- package/dist/showcase/assets/refresh-cw-CX6ghqEe.js +0 -1
- package/dist/showcase/assets/resolveValueLabel-Cjbd_80A.js +0 -1
- package/dist/showcase/assets/resource-D1fXD_Pt.js +0 -139
- package/dist/showcase/assets/resource-i2YV9aHL.js +0 -1
- package/dist/showcase/assets/resource-selector-card-CdQEPr9U.js +0 -43
- package/dist/showcase/assets/rich-text-editor-DJ2i03XV.js +0 -143
- package/dist/showcase/assets/rich-text-editor-Wh8r117d.js +0 -124
- package/dist/showcase/assets/rotate-ccw-2_FhUcdG.js +0 -1
- package/dist/showcase/assets/route-EGSdKgEp.js +0 -1
- package/dist/showcase/assets/save-nXKvyYEx.js +0 -1
- package/dist/showcase/assets/schema-form-D_9UkVBe.js +0 -327
- package/dist/showcase/assets/scroll-area-CB7X4JqZ.js +0 -1
- package/dist/showcase/assets/scroll-area-DCHN9iYj.js +0 -32
- package/dist/showcase/assets/section-C2ovQgbv.js +0 -1
- package/dist/showcase/assets/select-BTOraQSw.js +0 -1
- package/dist/showcase/assets/select-CE0BbUs7.js +0 -1
- package/dist/showcase/assets/send-CI0r12bX.js +0 -1
- package/dist/showcase/assets/separator-CmGfh7lI.js +0 -1
- package/dist/showcase/assets/separator-PhQTNRIB.js +0 -28
- package/dist/showcase/assets/settings-2-qkVb0lyz.js +0 -1
- package/dist/showcase/assets/settings-YXjlZ9zs.js +0 -1
- package/dist/showcase/assets/sheet-CFDUB2H1.js +0 -1
- package/dist/showcase/assets/shield-Dr_UeG6H.js +0 -1
- package/dist/showcase/assets/shield-alert-7rAVXg-K.js +0 -1
- package/dist/showcase/assets/shield-check-BbzHL-nM.js +0 -1
- package/dist/showcase/assets/shopping-bag-DeprN0fB.js +0 -1
- package/dist/showcase/assets/showcase-BU6Fvpg_.js +0 -132
- package/dist/showcase/assets/sidebar-CudnhnWN.js +0 -1
- package/dist/showcase/assets/sidebar.context-CZaDhRhh.js +0 -1
- package/dist/showcase/assets/skeleton-DD6VPVrv.js +0 -1
- package/dist/showcase/assets/skeleton-Dc5LvW7E.js +0 -29
- package/dist/showcase/assets/slider-BxvP9nxk.js +0 -1
- package/dist/showcase/assets/smart-card-B0Llbpiy.js +0 -1
- package/dist/showcase/assets/sonner-mszFoDWT.js +0 -22
- package/dist/showcase/assets/sortable.esm-J5bJPtH9.js +0 -5
- package/dist/showcase/assets/sparkles-CQSdl3Gw.js +0 -1
- package/dist/showcase/assets/spinner-BSxBn2qs.js +0 -49
- package/dist/showcase/assets/spinner-DJxoGJtq.js +0 -30
- package/dist/showcase/assets/spinner-DihTCcve.js +0 -1
- package/dist/showcase/assets/square-pen-CGMSA_p6.js +0 -1
- package/dist/showcase/assets/stacked-avatars-Ct8B4doW.js +0 -1
- package/dist/showcase/assets/star-DFlmmJdh.js +0 -1
- package/dist/showcase/assets/startOfDay-BedffeNt.js +0 -1
- package/dist/showcase/assets/styles-jR6uS97D.js +0 -1
- package/dist/showcase/assets/suggestions-DnjJ-U9n.js +0 -126
- package/dist/showcase/assets/switch-Dkojf4Yd.js +0 -1
- package/dist/showcase/assets/switch-bTb6CSLr.js +0 -1
- package/dist/showcase/assets/sync-rk8eFwoJ.js +0 -124
- package/dist/showcase/assets/table-4qIerTVI.js +0 -686
- package/dist/showcase/assets/table-BjMmmYd7.js +0 -1
- package/dist/showcase/assets/table-actions-DqofOI1V.js +0 -1
- package/dist/showcase/assets/tabs-BV6mMsfk.js +0 -19
- package/dist/showcase/assets/tabs-u2fkHRw8.js +0 -1
- package/dist/showcase/assets/tags-input-Cu_UwlwT.js +0 -1
- package/dist/showcase/assets/text-button-Fyy21evq.js +0 -1
- package/dist/showcase/assets/text-link-WRyY3ZZo.js +0 -1
- package/dist/showcase/assets/textarea-BbCxWNzV.js +0 -1
- package/dist/showcase/assets/textarea-CtD7JQsv.js +0 -1
- package/dist/showcase/assets/timelines-BBPQpCFX.js +0 -200
- package/dist/showcase/assets/toggle-group-B8mQ6wer.js +0 -1
- package/dist/showcase/assets/toggles-CCClWVXZ.js +0 -71
- package/dist/showcase/assets/toggles-group-DgCilPMo.js +0 -32
- package/dist/showcase/assets/tooltip-ClJCWWTI.js +0 -31
- package/dist/showcase/assets/trash-2-Cs7y4-K-.js +0 -1
- package/dist/showcase/assets/trending-up-spYhMxs6.js +0 -1
- package/dist/showcase/assets/truck-DENWgqxK.js +0 -1
- package/dist/showcase/assets/typography-DMmYNFQj.js +0 -223
- package/dist/showcase/assets/ui-badge-BJEtsa7X.js +0 -28
- package/dist/showcase/assets/ui-card-CrPKoi3P.js +0 -30
- package/dist/showcase/assets/ui-table-2HhDwPcu.js +0 -42
- package/dist/showcase/assets/upload-tray-CUZAErkI.js +0 -138
- package/dist/showcase/assets/use-layout-link-Co3GiFmb.js +0 -1
- package/dist/showcase/assets/useAnchoredPopupScrollLock-DgIA0IXg.js +0 -1
- package/dist/showcase/assets/useAriaLabelledBy-CDdoyQgg.js +0 -1
- package/dist/showcase/assets/useCollapsiblePanel-BT0RSjGM.js +0 -1
- package/dist/showcase/assets/useCompositeItem-DFghnuRZ.js +0 -1
- package/dist/showcase/assets/useCompositeListItem-vXyRoJ2x.js +0 -1
- package/dist/showcase/assets/useLabelableId-D__l5sQX.js +0 -1
- package/dist/showcase/assets/useOpenInteractionType-bZIaLWfE.js +0 -1
- package/dist/showcase/assets/useRender-BV0akLbc.js +0 -1
- package/dist/showcase/assets/useTriggerFocusGuards-dYriJrQP.js +0 -1
- package/dist/showcase/assets/useValueChanged-Dg0AWST0.js +0 -1
- package/dist/showcase/assets/user-B9eCi5Vl.js +0 -1
- package/dist/showcase/assets/user-plus-Uo4IAY7e.js +0 -1
- package/dist/showcase/assets/users-DLep-WjV.js +0 -1
- package/dist/showcase/assets/vendor-profile-BbcE51Pa.js +0 -37
- package/dist/showcase/assets/video-BasdlaQE.js +0 -1
- package/dist/showcase/assets/wrench-BYUVe1-z.js +0 -1
- package/dist/showcase/assets/x-Bx9ayVXr.js +0 -1
- package/dist/showcase/assets/zap-Mgu5HEtF.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 { 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=\"default\"\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\n data-component=\"global-search-input\"\n data-slot=\"global-search-input\"\n className=\"global-search-input--component flex items-center gap-space-md border-b border-border px-control py-row-y\"\n >\n <Search className=\"size-icon 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=\"small\"\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-icon 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-small\"\n onClick={() => onChange('')}\n aria-label={clearLabel}\n className=\"size-control-sm rounded text-muted-foreground hover:bg-muted hover:text-foreground\"\n >\n <X className=\"size-icon-sm\" />\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 data-component=\"global-search-result-row\"\n data-slot=\"global-search-result-row\"\n variant=\"secondary\"\n buttonStyle=\"ghost\"\n size=\"small\"\n onMouseEnter={onMouseEnter}\n onClick={onSelect}\n className={cn(\n 'group/row relative h-auto w-full justify-start gap-space-lg rounded-md px-row-x py-row-y text-left transition-colors',\n 'global-search-result-row--component',\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-avatar-sm', 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-xxs 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-avatar-sm items-center justify-center rounded-md',\n bg[result.thumbnail?.tone ?? 'default'],\n )}\n >\n <ThumbIcon className=\"size-icon\" 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-space-sm leading-tight\">\n <Text tag=\"span\" size=\"inherit\" 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=\"inherit\" type=\"secondary\" className=\"mt-space-2xs truncate text-xxs\">\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-row-x 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 size=\"inherit\"\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-control-sm 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 data-component=\"global-search\"\n data-slot=\"global-search\"\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-space-md py-space-xs\">\n {Object.entries(search.visibleGrouped).map(\n ([groupKey, items], gi) => (\n <div\n key={groupKey}\n className={cn(\n 'pb-space-xs last:pb-0',\n gi > 0 && 'mt-space-md pt-space-xs',\n )}\n >\n <div className=\"flex items-center justify-between px-row-x pb-space-2xs\">\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=\"small\"\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":";;;;;;;;;;;;;;AAkCA,IAAa,IAAkD;CAC3D,aAAa;CACb,OAAO;CACP,SAAS;CACT,YAAY;CACZ,WAAW;CACX,YAAY;CACZ,iBAAiB;CACjB,QAAQ;CACR,gBAAgB;CAChB,YAAY;CACZ,aAAa;CACb,cAAc;CACd,QAAQ;AACZ;AAGA,SAAgB,EACZ,GACA,GACM;CACN,OAAO,EAAS,QAAQ,yBAAyB,GAAO,MAAQ;EAC5D,IAAM,IAAI,EAAO;EACjB,OAAO,MAAM,KAAA,IAAY,IAAQ,OAAO,CAAC;CAC7C,CAAC;AACL;;;ACVA,SAAgB,EAAgD,EAC5D,YACA,UACA,mBACA,cAC8D;CAC9D,IAAM,CAAC,GAAW,KACd,EAAyB,KAAK,GAC5B,CAAC,GAAW,KAAgB,EAAS,CAAC;CAI5C,QAAgB;EAEZ,AADA,EAAkB,KAAK,GACvB,EAAa,CAAC;CAClB,GAAG,CAAC,CAAK,CAAC;CAEV,IAAM,IAAU,QAAc;EAC1B,IAAM,IAAwD,CAAC;EAC/D,KAAK,IAAM,KAAK,GACZ,CAAC,EAAQ,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC;EAEpC,OAAO;CACX,GAAG,CAAC,CAAO,CAAC,GAEN,IAAY,QAAc;EAC5B,IAAM,IAAiC,EAAE,KAAK,EAAQ,OAAO;EAC7D,KAAK,IAAM,CAAC,GAAG,MAAM,OAAO,QAAQ,CAAO,GAAG,EAAO,KAAK,EAAE;EAC5D,OAAO;CACX,GAAG,CAAC,EAAQ,QAAQ,CAAO,CAAC,GAEtB,IAAiB,QAAc;EACjC,IAAI,MAAc,OAAO,OAAO;EAChC,IAAM,IAAM,EAAQ;EACpB,OAAO,IAAO,GAAG,IAAsB,EAAI,IAAqD,CAAC;CACrG,GAAG,CAAC,GAAS,CAAS,CAAC,GAEjB,IAAO,QACL,MAAc,QAAc,EAAQ,MAAM,IACvC,EAAQ,MAAwB,CAAC,GACzC;EAAC;EAAW;EAAS;CAAO,CAAC,GAE1B,IAAe,EAAO,CAAS;CACrC,EAAa,UAAU;CACvB,IAAM,IAAU,EAAO,CAAI;CAoC3B,OAnCA,EAAQ,UAAU,GAmCX;EACH;EACA;EACA;EACA,eArCkB,MAAwB;GAE1C,AADA,EAAkB,CAAG,GACrB,EAAa,CAAC;EAClB;EAmCI;EACA;EACA;EACA;EACA,gBArCmB,MAAe;GAClC,IAAM,IAAM,EAAQ,QAAQ,WAAW,MAAM,EAAE,OAAO,CAAE;GACxD,AAAI,KAAO,KAAG,EAAa,CAAG;EAClC;EAmCI,YA5Be,MAA2B;GAC1C,IAAI,EAAE,QAAQ,aAEV,AADA,EAAE,eAAe,GACjB,GAAc,MAAM,KAAK,IAAI,IAAI,GAAG,EAAQ,QAAQ,SAAS,CAAC,CAAC;QAC5D,IAAI,EAAE,QAAQ,WAEjB,AADA,EAAE,eAAe,GACjB,GAAc,MAAM,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC;QACnC,IAAI,EAAE,QAAQ,SAAS;IAC1B,IAAM,IAAO,EAAQ,QAAQ,EAAa;IAC1C,AAAI,MACA,EAAE,eAAe,GACjB,IAAiB,CAAI;GAE7B,OAAO,AAAI,EAAE,QAAQ,YACjB,IAAU;EAElB;EAaI,oBAlCuB;GACvB,IAAM,IAAO,EAAQ,QAAQ,EAAa;GAC1C,AAAI,KAAM,IAAiB,CAAI;EACnC;CAgCA;AACJ;;;ACjIA,SAAgB,EAAuB,EAAE,UAAO,WAAqC;CACjF,OACI,kBAAC,OAAD;EAAK,WAAU;YAAf;GACI,kBAAC,OAAD;IAAK,WAAU;cACX,kBAAC,GAAD;KAAQ,WAAU;KAA+B,eAAY;IAAQ,CAAA;GACpE,CAAA;GACL,kBAAC,GAAD;IAAM,QAAO;cACR;GACC,CAAA;GACN,kBAAC,GAAD;IAAM,MAAK;IAAK,MAAK;IAAY,WAAU;cACtC;GACC,CAAA;EACL;;AAEb;;;ACpBA,IAAM,IACF;AAWJ,SAAgB,EAAmB,EAC/B,kBACA,cACA,eACA,aACA,gBACwB;CACxB,OACI,kBAAC,OAAD;EACI,WAAW,EACP,yEACA,CACJ;YAJJ,CAMI,kBAAC,QAAD;GAAM,WAAU;aAAhB;IACI,kBAAC,OAAD;KAAK,WAAW;eAAW;IAAO,CAAA;IAClC,kBAAC,GAAD;KAAM,KAAI;KAAO,MAAK;KAAM,MAAK;eAC5B;IACC,CAAA;IACN,kBAAC,OAAD;KAAK,WAAW;eAAW;IAAM,CAAA;IACjC,kBAAC,GAAD;KAAM,KAAI;KAAO,MAAK;KAAM,MAAK;eAC5B;IACC,CAAA;IACN,kBAAC,OAAD;KAAK,WAAW;eAAW;IAAQ,CAAA;IACnC,kBAAC,GAAD;KAAM,KAAI;KAAO,MAAK;KAAM,MAAK;eAC5B;IACC,CAAA;GACJ;MACL,CACA;;AAEb;;;AC/BA,SAAgB,EAAsB,EAClC,aACA,oBAC2B;CAC3B,OACI,kBAAC,OAAD;EAAK,WAAU;YACV,EAAS,KAAK,GAAS,MAOhB,kBAAC,OAAD,EAAA,UAAA,CACI,kBAAC,OAAD;GAAK,WAAU;aAAf,CACI,kBAPR,EAAQ,SACP,MAAQ,IACH,GAAe,UAAU,IACzB,GAAe,eAAe,IAI5B;IACI,WAAU;IACV,eAAY;GACf,CAAA,GACD,kBAAC,GAAD;IACI,MAAK;IACL,MAAK;IACL,QAAO;IACP,WAAU;cAET,EAAQ;GACP,CAAA,CACL;MACL,kBAAC,MAAD;GAAI,WAAU;aACT,EAAQ,MAAM,KAAK,MAAS;IACzB,IAAM,IAAW,EAAK,QAAQ;IAC9B,OACI,kBAAC,MAAD,EAAA,UACI,kBAAC,GAAD;KACI,MAAK;KACL,SAAQ;KACR,aAAY;KACZ,MAAK;KACL,SAAS,EAAK;KACd,WAAW,EACP,wFACA,6CACJ;eATJ,CAWI,kBAAC,GAAD;MACI,WAAU;MACV,eAAY;KACf,CAAA,GACD,kBAAC,GAAD;MAAM,WAAU;gBACX,EAAK;KACJ,CAAA,CACF;OACR,GApBK,EAAK,EAoBV;GAEZ,CAAC;EACD,CAAA,CACH,EAAA,GA3CK,EAAQ,EA2Cb,CAEZ;CACA,CAAA;AAEb;;;ACzDA,IAAa,IAAoB,EAAM,WACnC,SACI,EACI,UACA,aACA,cACA,gBACA,gBAAa,gBACb,aAAU,IACV,eAAY,MAEhB,GACF;CACE,IAAM,IAAW,EAAM,OAAgC,IAAI;CAO3D,OANA,EAAM,oBAAoB,SAAW,EAAS,OAA2B,GAEzE,EAAM,gBAAgB;EAClB,AAAI,KAAW,EAAS,SAAS,MAAM;CAC3C,GAAG,CAAC,CAAS,CAAC,GAGV,kBAAC,OAAD;EACI,kBAAe;EACf,aAAU;EACV,WAAU;YAHd;GAKI,kBAAC,GAAD;IAAQ,WAAU;IAA2C,eAAY;GAAQ,CAAA;GACjF,kBAAC,OAAD;IAAK,WAAU;cACX,kBAAC,GAAD;KACI,KAAK;KACL,MAAK;KACE;KACP,WAAW,MAAM,EAAS,EAAE,OAAO,KAAK;KAC7B;KACE;KACb,cAAY;KACZ,cAAa;KACb,YAAY;KACZ,MAAK;KACL,WAAU;IACb,CAAA;GACA,CAAA;GACJ,KACG,kBAAC,GAAD;IACI,WAAU;IACV,eAAY;GACf,CAAA;GAEJ,CAAC,KAAW,CAAC,CAAC,KACX,kBAAC,GAAD;IACI,MAAK;IACL,SAAQ;IACR,aAAY;IACZ,MAAK;IACL,eAAe,EAAS,EAAE;IAC1B,cAAY;IACZ,WAAU;cAEV,kBAAC,GAAD,EAAG,WAAU,eAAgB,CAAA;GACzB,CAAA;EAEX;;AAEb,CACJ,GChFa,IAAoD;CAC7D,SAAS;CACT,SAAS;CACT,SAAS;CACT,MAAM;CACN,aAAa;CACb,SAAS;AACb,GAEa,IAAwD;CACjE,SAAS;CACT,SAAS;CACT,SAAS;CACT,MAAM;CACN,aAAa;CACb,SAAS;AACb;;;ACiBA,SAAS,EAAe,GAAc,GAA4C;CAC9E,IAAM,KAAK,KAAS,IAAI,KAAK;CAC7B,IAAI,CAAC,GAAG,OAAO;CACf,IAAM,IAAQ,EAAK,YAAY,GACzB,IAAK,EAAE,YAAY,GACnB,IAAI,EAAM,QAAQ,CAAE;CAE1B,OADI,IAAI,IAAU,IAEd,kBAAA,GAAA,EAAA,UAAA;EACK,EAAK,MAAM,GAAG,CAAC;EAChB,kBAAC,QAAD;GAAM,WAAU;aACX,EAAK,MAAM,GAAG,IAAI,EAAE,MAAM;EACzB,CAAA;EACL,EAAK,MAAM,IAAI,EAAE,MAAM;CAC1B,EAAA,CAAA;AAEV;AAEA,SAAgB,EAAsD,EAClE,WACA,cAAW,IACX,WAAQ,IACR,aACA,iBACA,WACA,eACA,gBACmC;CACnC,IAAM,IAAY,EAAO,WAAW,MAC9B,IAAK;EAAE,GAAG;EAAiB,GAAG;CAAO,GACrC,IAAK;EAAE,GAAG;EAAqB,GAAG;CAAW;CAEnD,OACI,kBAAC,GAAD;EACI,MAAK;EACL,kBAAe;EACf,aAAU;EACV,SAAQ;EACR,aAAY;EACZ,MAAK;EACS;EACd,SAAS;EACT,WAAW,EACP,wHACA,uCACA,IAAW,gBAAgB,qBAC3B,CACJ;YAdJ;GAiBI,kBAAC,OAAD;IAAK,WAAU;cACV,EAAO,SACJ,kBAAC,GAAD;KAAQ,WAAW,EAAG,kBAAkB,EAAG,EAAO,OAAO,QAAQ,UAAU;eAA3E,CACK,EAAO,OAAO,OACX,kBAAC,GAAD;MAAa,KAAK,EAAO,OAAO;MAAK,KAAK,EAAO;KAAQ,CAAA,GAE7D,kBAAC,GAAD;MACI,WAAW,EAAG,0BAA0B,EAAG,EAAO,OAAO,QAAQ,UAAU;gBAE1E,EAAO,OAAO;KACH,CAAA,CACZ;SACR,IACA,kBAAC,QAAD;KACI,WAAW,EACP,qEACA,EAAG,EAAO,WAAW,QAAQ,UACjC;eAEA,kBAAC,GAAD;MAAW,WAAU;MAAY,eAAY;KAAQ,CAAA;IACnD,CAAA,IACN;GACH,CAAA;GAGL,kBAAC,OAAD;IAAK,WAAU;cAAf,CACI,kBAAC,OAAD;KAAK,WAAU;eAAf,CACI,kBAAC,GAAD;MAAM,KAAI;MAAO,MAAK;MAAU,QAAO;MAAW,WAAU;gBACvD,EAAe,EAAO,OAAO,CAAK;KACjC,CAAA,GACL,CAAC,CAAC,EAAO,SACN,kBAAC,GAAD;MACI,SACI,EAAO,MAAM,SAAS,gBAChB,UACA,EAAO,MAAM;gBAGtB,EAAO,MAAM;KACX,CAAA,CAEV;eACG;KACJ,IAAM,IAAwD,CAAC;KA+C/D,OA9CI,EAAO,YACP,EAAO,KAAK;MACR,KAAK;MACL,MAAM,kBAAC,QAAD,EAAA,UAAO,EAAe,EAAO,UAAU,CAAK,EAAQ,CAAA;KAC9D,CAAC,GACL,EAAO,MAAM,SAAS,GAAG,MAAM;MAC3B,IAAM,IAAO,EAAE;MACf,EAAO,KAAK;OACR,KAAK,KAAK;OACV,MACI,kBAAC,QAAD;QACI,WAAW,EACP,kCACA,EAAE,QAAQ,wBACd;kBAJJ,CAMK,CAAC,CAAC,KAAQ,kBAAC,GAAD;SAAM,WAAU;SAAkB,eAAY;QAAQ,CAAA,GAChE,EAAE,KACD;;MAEd,CAAC;KACL,CAAC,GACG,EAAO,aACP,EAAO,KAAK;MACR,KAAK;MACL,MAAM,kBAAC,QAAD;OAAM,WAAU;iBAAgB,EAAO;MAAgB,CAAA;KACjE,CAAC,GACL,EAAO,MAAM,SAAS,MAClB,EAAO,KAAK;MAAE,KAAK,KAAK;MAAO,MAAM,kBAAC,QAAD,EAAA,UAAO,EAAU,CAAA;KAAE,CAAC,CAC7D,GACI,EAAO,cACP,EAAO,KAAK;MACR,KAAK;MACL,MACI,kBAAC,QAAD;OAAM,WAAU;iBAAhB,CACK,EAAO,YACP,CAAC,CAAC,EAAO,cACN,kBAAC,QAAD;QAAM,WAAU;kBACX,EAAO,WAAW,YAAY;OAC7B,CAAA,CAER;;KAEd,CAAC,GAED,EAAO,WAAW,IAAU,OAE5B,kBAAC,GAAD;MAAM,MAAK;MAAU,MAAK;MAAY,WAAU;gBAC3C,EAAO,KAAK,GAAG,MACZ,kBAAC,QAAD,EAAA,UAAA,CACK,IAAI,KACD,kBAAC,QAAD;OACI,eAAY;OACZ,WAAU;iBACb;MAEK,CAAA,GAET,EAAE,IACD,EAAA,GAVK,EAAE,GAUP,CACT;KACC,CAAA;IAEd,GAAG,CACF;;GAGJ,CAAC,EAAE,EAAO,cAAc,EAAO,eAC5B,kBAAC,OAAD;IAAK,WAAU;cACX,kBAAC,OAAD;KAAK,WAAU;eAAf,CACK,CAAC,CAAC,EAAO,cACN,kBAAC,GAAD;MACI,KAAI;MACJ,MAAK;MACL,QAAO;MACP,WAAU;gBAET,EAAO;KACN,CAAA,GAET,CAAC,CAAC,EAAO,cACN,kBAAC,GAAD;MACI,KAAI;MACJ,MAAK;MACL,MAAK;MACL,WAAU;gBAET,EAAO;KACN,CAAA,CAET;;GACJ,CAAA;GAIT,kBAAC,QAAD;IACI,eAAY;IACZ,WAAW,EACP,8FACA,IACM,8CACA,6DACV;cAEA,kBAAC,GAAD,EAAY,WAAU,WAAY,CAAA;GAChC,CAAA;EACF;;AAEhB;;;AC7OA,SAAS,EAAK,EACZ,cACA,iBAAc,cACd,GAAG,KACwB;CAC3B,OACE,kBAAC,EAAc,MAAf;EACE,aAAU;EACV,oBAAkB;EAClB,WAAW,EACT,gEACA,CACF;EACA,GAAI;CACL,CAAA;AAEL;AAEA,IAAM,IAAmB,EACvB,uQACA;CACE,UAAU,EACR,SAAS;EACP,SAAS;EACT,MAAM;CACR,EACF;CACA,iBAAiB,EACf,SAAS,UACX;AACF,CACF;AAEA,SAAS,EAAS,EAChB,cACA,aAAU,WACV,GAAG,KACgE;CACnE,OACE,kBAAC,EAAc,MAAf;EACE,aAAU;EACV,gBAAc;EACd,WAAW,EAAG,EAAiB,EAAE,WAAQ,CAAC,GAAG,CAAS;EACtD,GAAI;CACL,CAAA;AAEL;AAEA,SAAS,EAAY,EAAE,cAAW,GAAG,KAAkC;CACrE,OACE,kBAAC,EAAc,KAAf;EACE,aAAU;EACV,WAAW,EACT,8vBACA,iQACA,yDACA,4dACA,CACF;EACA,GAAI;CACL,CAAA;AAEL;;;ACjDA,SAAgB,EAAiD,EAC7D,UACA,kBACA,SACA,aAC8B;CAC9B,OACI,kBAAC,OAAD;EAAK,WAAU;YACX,kBAAC,OAAD;GAAK,WAAU;aACX,kBAAC,GAAD;IACW;IACP,gBAAgB,MAAM,EAAc,CAAmB;IACvD,WAAU;cAEV,kBAAC,GAAD;KAAU,WAAU;eACf,EAAK,KAAK,MAAQ;MACf,IAAM,IAAW,MAAU,EAAI,OACzB,IAAQ,EAAO,EAAI,UAAoB;MAC7C,OACI,kBAAC,GAAD;OAEI,OAAO,EAAI;OACX,WAAU;iBAHd,CAKI,kBAAC,QAAD,EAAA,UAAO,EAAI,MAAY,CAAA,GACvB,kBAAC,GAAD;QACI,KAAI;QACJ,MAAK;QACL,QAAO;QACP,WAAW,EACP,4DACA,IACM,mCACA,yCACV;kBAEC;OACC,CAAA,CACG;SAlBJ,EAAI,KAkBA;KAErB,CAAC;IACK,CAAA;GACR,CAAA;EACL,CAAA;CACJ,CAAA;AAEb;;;ACaA,SAAgB,EAA6C,EACzD,aAAU,CAAC,GACX,UACA,kBACA,mBACA,YACA,aAAU,IACV,iBACA,gBACA,eAAY,IACZ,SAAS,GACT,UACA,SACA,gBAC0B;CAC1B,IAAM,IAAU,EAAW,GAA4B,CAAW,GAE5D,IAAS,EAAwB;EACnC;EACA;EACA;EACA;CACJ,CAAC,GAEK,IACF,CAAC,KAAW,EAAM,KAAK,EAAE,SAAS,KAAK,EAAQ,WAAW,GACxD,IAAS,CAAC,KAAW,EAAM,KAAK,EAAE,UAAU,GAE5C,IAAe,EAAM,cAEnB;EACJ,IAAI,GAAM,OAAO;EACjB,IAAM,IAAY,OAAO,KAAK,EAAO,OAAO;EAC5C,OAAO,CACH;GAAE,OAAO;GAAO,OAAO,EAAQ;EAAO,GACtC,GAAG,EAAU,KAAK,OAAS;GACvB,OAAO;GACP,OAAO,IAAc,MAAQ;EACjC,EAAE,CACN;CACJ,GAAG;EAAC;EAAM,EAAO;EAAS,EAAQ;EAAQ;CAAW,CAAC;CAEtD,OACI,kBAAC,OAAD;EACI,kBAAe;EACf,aAAU;EACV,WAAW,EAAG,4BACV,sEACA,CACJ;YANJ;GAQK,GAAO,SACJ,kBAAC,GAAD;IACI,OAAO;IACP,UAAU;IACV,WAAW,EAAO;IAClB,aAAa,EAAQ;IACrB,YAAY,EAAQ;IACX;IACE;GACd,CAAA;GAGJ,CAAC,KAAW,EAAQ,SAAS,MAC1B,GAAO,QACH,kBAAC,GAAD;IACI,OAAO,EAAO;IACd,eAAe,EAAO;IACtB,MAAM;IACN,QAAQ,EAAO;GAClB,CAAA;GAIT,kBAAC,OAAD;IAAK,WAAU;cAAf;KACK,CAAC,CAAC,MAAW,GAAO,SACjB,KAAgB,EAAa,SAAS,IAClC,kBAAC,GAAD,EAAuB,UAAU,EAAe,CAAA,IAChD;KAGP,CAAC,CAAC,MAAY,GAAO,WAClB,kBAAC,OAAD;MAAK,WAAU;gBACX,kBAAC,GAAD;OAAM,MAAK;iBACN,EAAQ;MACP,CAAA;KACL,CAAA;KAGR,CAAC,CAAC,MAAY,GAAO,SAClB,kBAAC,GAAD;MACI,OAAO,EAAkB,EAAQ,YAAY,EAAE,SAAM,CAAC;MACtD,MAAM,EAAQ;KACjB,CAAA;KAGJ,CAAC,KAAW,EAAQ,SAAS,KAC1B,kBAAC,OAAD;MAAK,WAAU;gBACV,OAAO,QAAQ,EAAO,cAAc,EAAE,KAClC,CAAC,GAAU,IAAQ,MAChB,kBAAC,OAAD;OAEI,WAAW,EACP,yBACA,IAAK,KAAK,yBACd;iBALJ,CAOI,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACI,kBAAC,GAAD;SAAM,MAAK;SAAK,MAAK;SAAY,QAAO;mBACnC,IAAc,MAAuB;QACpC,CAAA,GACL,EAAO,cAAc,SAAS,EAAM,SAAS,KAC1C,kBAAC,GAAD;SACI,MAAK;SACL,SAAQ;SACR,aAAY;SACZ,MAAK;SACL,eACI,EAAO,aAAa,CAAkB;SAE1C,WAAU;mBAEV,kBAAC,GAAD;UACI,KAAI;UACJ,MAAK;UACL,QAAO;UACP,WAAU;oBAET,EAAQ;SACP,CAAA;QACF,CAAA,CAEX;WACL,kBAAC,MAAD;QAAI,WAAU;kBACT,EAAM,KAAK,MAAS;SACjB,IAAM,IACF,EAAO,KAAK,EAAO,YAAY,OAAO,EAAK,IACzC,IAAM;UACR;UACA;UACA,gBAAgB,IAAiB,CAAI;SACzC;SAgBA,OAAO,kBAAC,MAAD,EAAA,UAfM,GAAO,eAChB,EAAM,aAAa,GAAM,CAAG,IAE5B,kBAAC,GAAD;UACI,QAAQ;UACE;UACH;UACP,UAAU,EAAI;UACd,oBACI,EAAO,cAAc,EAAK,EAAE;UAEhC,QAAQ,GAAO;UACf,YAAY,GAAO;SACtB,CAAA,EAE8B,GAAnB,EAAK,EAAc;QACvC,CAAC;OACD,CAAA,CACH;SA3DI,CA2DJ,CAEb;KACC,CAAA;IAER;;GAEJ,GAAO,UACJ,kBAAC,GAAD;IACI,eAAe,EAAQ;IACvB,WAAW,EAAQ;IACnB,YAAY,EAAQ;IACpB,UACI,CAAC,KAAU,CAAC,KAAW,EAAQ,SAAS,IACpC,kBAAC,GAAD;KACI,KAAI;KACJ,MAAK;KACL,MAAK;KACL,WAAU;eAET,EAAkB,EAAQ,cAAc,EACrC,OAAO,EAAQ,OACnB,CAAC;IACC,CAAA,IACN,KAAA;GAEX,CAAA;EAEJ;;AAEb"}
|
|
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=\"xs\" type=\"secondary\">\n {navigateLabel}\n </Text>\n <kbd className={KBD_CLASS}>↵</kbd>\n <Text tag=\"span\" size=\"xs\" type=\"secondary\">\n {openLabel}\n </Text>\n <kbd className={KBD_CLASS}>esc</kbd>\n <Text tag=\"span\" size=\"xs\" 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=\"xs\"\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=\"default\"\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\n data-component=\"global-search-input\"\n data-slot=\"global-search-input\"\n className=\"global-search-input--component flex items-center gap-space-md border-b border-border px-control py-row-y\"\n >\n <Search className=\"size-icon 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=\"small\"\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-icon 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-small\"\n onClick={() => onChange('')}\n aria-label={clearLabel}\n className=\"size-control-sm rounded text-muted-foreground hover:bg-muted hover:text-foreground\"\n >\n <X className=\"size-icon-sm\" />\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 data-component=\"global-search-result-row\"\n data-slot=\"global-search-result-row\"\n variant=\"secondary\"\n buttonStyle=\"ghost\"\n size=\"small\"\n onMouseEnter={onMouseEnter}\n onClick={onSelect}\n className={cn(\n 'group/row relative h-auto w-full justify-start gap-space-lg rounded-md px-row-x py-row-y text-left transition-colors',\n 'global-search-result-row--component',\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-avatar-sm', 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-avatar-sm items-center justify-center rounded-md',\n bg[result.thumbnail?.tone ?? 'default'],\n )}\n >\n <ThumbIcon className=\"size-icon\" 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-space-sm leading-tight\">\n <Text tag=\"span\" size=\"inherit\" 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=\"inherit\" type=\"secondary\" className=\"mt-space-2xs truncate text-xs\">\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-row-x 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 size=\"inherit\"\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=\"xs\"\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-control-sm 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=\"xs\"\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 data-component=\"global-search\"\n data-slot=\"global-search\"\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-space-md py-space-xs\">\n {Object.entries(search.visibleGrouped).map(\n ([groupKey, items], gi) => (\n <div\n key={groupKey}\n className={cn(\n 'pb-space-xs last:pb-0',\n gi > 0 && 'mt-space-md pt-space-xs',\n )}\n >\n <div className=\"flex items-center justify-between px-row-x pb-space-2xs\">\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=\"small\"\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=\"xs\"\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=\"xs\"\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,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/button-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../lib/strings.cjs"),t=require("../../../lib/utils.cjs"),n=require("../../../_shared/button-BMiPFJIb.cjs"),r=require("../../../_shared/typography-pzCKaFOc.cjs"),i=require("../../../_shared/popover-menu-DlkRgOkR.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:r},i){let{setActivatorNodeRef:s,listeners:c,attributes:l,registerHandle:u}=_();return(0,a.useEffect)(()=>u(),[u]),(0,o.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`icon-small`,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:r})});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)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`icon-small`,"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 n=e.data,i=n.variant===`destructive`;return(0,o.jsxs)(o.Fragment,{children:[!!n.icon&&(0,o.jsx)(`span`,{className:t.cn(`shrink-0`,i?`text-destructive`:`text-muted-foreground`),children:n.icon}),(0,o.jsx)(r.s,{tag:`span`,size:`xs`,className:t.cn(`truncate`,i&&`text-destructive`),children:n.label})]})},onSelect:e=>{e.data?.onSelect(y),f(!1)}})}E.displayName=`KanbanItemActions`;function D({className:e,render:n}){let{activeItem:i,activeId:a,findItem:s}=m();return(0,o.jsx)(c.DragOverlay,{children:a?n?n({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)(r.s,{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,8 +1,8 @@
|
|
|
1
1
|
import { useStrings as e } from "../../../lib/strings.js";
|
|
2
2
|
import { cn as t } from "../../../lib/utils.js";
|
|
3
|
-
import { t as n } from "../../../_shared/button-
|
|
4
|
-
import { s as r } from "../../../_shared/typography-
|
|
5
|
-
import { t as i } from "../../../_shared/popover-menu-
|
|
3
|
+
import { t as n } from "../../../_shared/button-vv59_uS_.js";
|
|
4
|
+
import { s as r } from "../../../_shared/typography-DXvCmE8w.js";
|
|
5
|
+
import { t as i } from "../../../_shared/popover-menu-CAjhhTfX.js";
|
|
6
6
|
import { createContext as a, forwardRef as o, useCallback as s, useContext as c, useEffect as l, useMemo as u, useState as d } from "react";
|
|
7
7
|
import { Fragment as f, jsx as p, jsxs as m } from "react/jsx-runtime";
|
|
8
8
|
import { MoreHorizontal as h } from "lucide-react";
|
|
@@ -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/button-Bd5bEIiB.cjs"),r=require("../../../_shared/typography-CO9uwZhF.cjs"),i=require("../../../_shared/overlays-Du65iCkx.cjs"),a=require("../../../_shared/badge-BeSKxX1u.cjs"),o=require("../../../_shared/alert-V0V36Sny.cjs"),s=require("../../../_shared/input-CB6hxh-5.cjs"),c=require("../../../_shared/forms-CEE1te78.cjs"),l=require("../../../_shared/display-Bin2vVex.cjs");let u=require("react"),d=require("react/jsx-runtime"),f=require("lucide-react"),p=require("react-dom");var m={title:`Add media`,description:`Pick from the library, or upload new files.`,close:`Close media library`,tabs:{library:`Library`,upload:`Upload`},searchPlaceholder:`Search by name or tag...`,clearSearch:`Clear search`,typeFilterLabel:`Type`,collectionFilterLabel:`Collection`,sortLabel:`Sort`,viewLabel:`View`,allTypes:`All`,images:`Images`,videos:`Videos`,files:`Files`,allCollections:`All collections`,sortNewest:`Newest`,sortName:`Name`,sortSize:`Size`,sortUsage:`Most used`,gridView:`Grid view`,tableView:`Table view`,countAll:`{count} items`,countFiltered:`{count} of {total} items`,emptyLibraryTitle:`Library is empty`,emptyLibraryDescription:`Upload images or videos to start building the library.`,emptyFilteredTitle:`No media matches`,emptyFilteredDescription:`Try a different search term, or clear the filters.`,clearFilters:`Clear filters`,uploadMedia:`Upload media`,loading:`Loading media...`,errorTitle:`Media could not load`,errorDescription:`Try again or adjust your filters.`,cardDetails:`Details for {name}`,privateLabel:`Private`,publicLabel:`Public`,typeImage:`Image`,typeVideo:`Video`,typeFile:`File`,unknownSize:`Unknown`,notUsed:`Not used yet`,usedIn:`{count} {count, plural, one {place} other {places}}`,table:{name:`Name`,type:`Type`,size:`Size`,collection:`Collection`,used:`Used`},detail:{title:`Details`,altText:`Alt text`,altPlaceholder:`Describe this media for screen readers`,collection:`Collection`,tags:`Tags`,tagsPlaceholder:`Comma-separated`,public:`Public`,publicHint:`Served from the public CDN`,privateHint:`Only visible in the admin`,type:`Type`,size:`Size`,dimensions:`Dimensions`,uploaded:`Uploaded`,usedIn:`Used in`,replace:`Replace file`,delete:`Delete`,close:`Close details`},upload:{dropTitle:`Drag files here or click to browse`,dropHint:`JPG, PNG, WebP, SVG and MP4 up to 50 MB per file`,dragOver:`Release to stage files`,collection:`Collection`,tags:`Tags`,tagsPlaceholder:`Comma-separated`,public:`Public`,publicHint:`Serve from the public CDN`,noFiles:`No files staged`,stagedCount:`{count} {count, plural, one {file} other {files}}`,removeFile:`Remove {name}`,uploading:`Uploading`,done:`Done`},footer:{pickOne:`Pick one item`,pickMany:`Pick one or more items`,selectedCount:`{count} selected`,clear:`Clear`,cancel:`Cancel`,confirmEmpty:`Add to product`,confirmOne:`Add 1 item`,confirmMany:`Add {count} items`,noFiles:`No files staged`,stagedSummary:`{count} {count, plural, one {file} other {files}} · {size}`,upload:`Upload`,uploadMany:`Upload {count} files`,uploading:`Uploading...`},gallery:{emptyTitle:`No media attached`,emptyDescription:`Add images, video, or files to this resource.`,add:`Add media`,addMore:`Add more`,addTile:`Add another media item`,cover:`Cover`,primary:`Primary`,setPrimary:`Set primary`,remove:`Remove`,movePrevious:`Move previous`,moveNext:`Move next`,itemPosition:`{index} of {total}`,maxReached:`Maximum reached`}};function h(e,t){return e.replace(/\{(\w+), plural, one \{([^}]*)\} other \{([^}]*)\}\}/g,(e,n,r,i)=>Number(t[n])===1?r:i).replace(/\{(\w+)\}/g,(e,n)=>String(t[n]??``))}var g={collection:void 0,tags:[],public:!0},_=[],v={getId:e=>e.id,getName:e=>e.name,getType:e=>e.type,getSrc:e=>e.src,getAlt:e=>e.alt,getSize:e=>e.size,getWidth:e=>e.width,getHeight:e=>e.height,getDuration:e=>e.duration,getCollection:e=>e.collection,getTags:e=>e.tags??[],getPublic:e=>e.public,getUploadedAt:e=>e.uploadedAt,getUsageCount:e=>e.usageCount,getTint:e=>e.tint,getMimeType:e=>e.mimeType};function y(e){return{...v,...e??{}}}function b(e){return!e||e<=0?``:e>=1048576?`${(e/1048576).toFixed(1)} MB`:`${Math.max(1,Math.round(e/1024))} KB`}function x(e,t){let n=t.getWidth(e),r=t.getHeight(e);return!n||!r?``:`${n} x ${r}`}function S(e,t){let n=t.getUploadedAt(e);if(!n)return 0;let r=(n instanceof Date?n:new Date(n)).getTime();return Number.isFinite(r)?r:0}function C(e){return e.type.startsWith(`image/`)?`image`:e.type.startsWith(`video/`)?`video`:`file`}function w(e){if(e.type.startsWith(`image/`)&&!(typeof URL>`u`||typeof URL.createObjectURL!=`function`))return URL.createObjectURL(e)}function T(e){!e||typeof URL>`u`||typeof URL.revokeObjectURL!=`function`||URL.revokeObjectURL(e)}function E(e){return Array.isArray(e)?{items:e,total:e.length}:e}function ee(e,t){return t&&typeof e==`object`&&e?{...e,...t}:e}function te(e,t,n,r,i){let a=n.trim().toLowerCase();return e.filter(e=>r!==`all`&&t.getType(e)!==r||i!==`all`&&t.getCollection(e)!==i?!1:a?[t.getName(e),t.getAlt(e),t.getCollection(e),...t.getTags(e)].filter(Boolean).join(` `).toLowerCase().includes(a):!0)}function ne(e,t,n){let r=e.slice();return n===`name`?r.sort((e,n)=>t.getName(e).localeCompare(t.getName(n))):n===`size`?r.sort((e,n)=>(t.getSize(n)??0)-(t.getSize(e)??0)):n===`usage`?r.sort((e,n)=>(t.getUsageCount(n)??0)-(t.getUsageCount(e)??0)):r.sort((e,n)=>S(n,t)-S(e,t)),r}function D({items:e=_,fetcher:t,accessors:n,selectionMode:r=`multiple`,value:i,defaultValue:a=[],onValueChange:o,onItemUpdate:s,onItemDelete:c,onUpload:l,onError:d,initialTab:f=`library`,defaultView:p=`grid`,defaultQuery:m=``,defaultType:h=`all`,defaultCollection:v=`all`,defaultSort:b=`newest`,defaultUploadOptions:x}={}){let S=(0,u.useMemo)(()=>y(n),[n]),[D,O]=(0,u.useState)(f),[k,A]=(0,u.useState)(p),[j,M]=(0,u.useState)(m),[N,P]=(0,u.useState)(h),[F,I]=(0,u.useState)(v),[L,re]=(0,u.useState)(b),[ie,ae]=(0,u.useState)(null),[R,oe]=(0,u.useState)(()=>[...a]),[se,ce]=(0,u.useState)([]),[le,ue]=(0,u.useState)(),[de,fe]=(0,u.useState)(!1),[pe,z]=(0,u.useState)(null),[me,he]=(0,u.useState)([]),[ge,_e]=(0,u.useState)(()=>new Set),[ve,B]=(0,u.useState)({}),[V,H]=(0,u.useState)([]),[U,W]=(0,u.useState)(!1),[G,ye]=(0,u.useState)({...g,...x,tags:x?.tags??g.tags}),K=i!==void 0,q=(0,u.useMemo)(()=>K?[...i??[]]:R,[R,K,i]),J=(0,u.useMemo)(()=>new Set(q),[q]),Y=(0,u.useRef)(new Set);(0,u.useEffect)(()=>{if(!t)return;let e=new AbortController;return fe(!0),z(null),t({query:j,type:N,collection:F===`all`?void 0:F,sort:L,signal:e.signal}).then(t=>{if(e.signal.aborted)return;let n=E(t);ce(n.items),ue(n.total)}).catch(t=>{e.signal.aborted||(z(t),d?.(t))}).finally(()=>{e.signal.aborted||fe(!1)}),()=>e.abort()},[F,t,d,j,L,N]),(0,u.useEffect)(()=>{let e=Y.current;return()=>{for(let t of e)T(t);e.clear()}},[]);let X=(0,u.useMemo)(()=>t?se:[...me,...e],[me,se,t,e]),Z=(0,u.useMemo)(()=>X.filter(e=>!ge.has(S.getId(e))).map(e=>ee(e,ve[S.getId(e)])),[S,ve,ge,X]),Q=(0,u.useMemo)(()=>{let e=t?Z:te(Z,S,j,N,F);return t?e:ne(e,S,L)},[S,F,t,Z,j,L,N]),be=le??Z.length,xe=Q.length,Se=(0,u.useMemo)(()=>Z.filter(e=>J.has(S.getId(e))),[S,Z,J]),Ce=!!j.trim()||N!==`all`||F!==`all`,$=(0,u.useCallback)(e=>{K||oe(e);let t=new Set(e),n=Z.filter(e=>t.has(S.getId(e)));o?.(e,n)},[S,K,o,Z]),we=(0,u.useCallback)(e=>{let t=new Set(r===`single`?[]:J);J.has(e)&&r!==`single`?t.delete(e):t.add(e),$(Array.from(t))},[$,J,r]),Te=(0,u.useCallback)(()=>$([]),[$]),Ee=(0,u.useCallback)(()=>{M(``),P(`all`),I(`all`)},[]),De=(0,u.useCallback)(e=>{H(t=>[...t,...e.map((e,t)=>{let n=w(e);return n&&Y.current.add(n),{id:`staged-${Date.now()}-${t}`,file:e,name:e.name,size:e.size,type:C(e),src:n,progress:0,status:`staged`}})])},[]),Oe=(0,u.useCallback)(e=>{H(t=>{let n=t.find(t=>t.id===e);return n?.src&&(T(n.src),Y.current.delete(n.src)),t.filter(t=>t.id!==e)})},[]),ke=(0,u.useCallback)(()=>{H(e=>{for(let t of e)t.src&&(T(t.src),Y.current.delete(t.src));return[]})},[]),Ae=(0,u.useCallback)(e=>{ye(t=>({...t,...e}))},[]),je=(0,u.useCallback)((e,t)=>{H(n=>n.map(n=>n.id===e?{...n,...t}:n))},[]);return{tab:D,setTab:O,view:k,setView:A,query:j,setQuery:M,type:N,setType:P,collection:F,setCollection:I,sort:L,setSort:re,detailId:ie,setDetailId:ae,items:Z,visibleItems:Q,selectedIds:q,selectedItems:Se,selectedSet:J,toggleSelection:we,clearSelection:Te,clearFilters:Ee,loading:de,error:pe,hasFilters:Ce,totalCount:be,filteredCount:xe,stagedFiles:V,addFiles:De,removeStagedFile:Oe,clearStagedFiles:ke,updateUploadOptions:Ae,uploadOptions:G,uploading:U,startUpload:(0,u.useCallback)(async()=>{if(U||V.length===0)return;W(!0),H(e=>e.map(e=>({...e,status:`uploading`,progress:0})));let e={setProgress:(e,t)=>{je(e,{progress:Math.max(0,Math.min(100,t))})},setFileStatus:(e,t,n)=>je(e,{status:t,error:n})};try{let t=V.map(e=>e.file),n=await l?.(t,G,e);if(H(e=>e.map(e=>({...e,status:`done`,progress:100}))),n?.length){he(e=>[...n,...e]);let e=n.map(e=>S.getId(e));$(r===`single`?e.slice(0,1):Array.from(new Set([...e,...q])))}ke(),O(`library`)}catch(e){z(e),H(e=>e.map(e=>e.status===`uploading`?{...e,status:`error`,error:`Upload failed`}:e)),d?.(e)}finally{W(!1)}},[S,$,ke,d,l,q,r,je,V,G,U]),updateItem:(0,u.useCallback)((e,t)=>{let n=S.getId(e);B(e=>({...e,[n]:{...e[n],...t}})),s?.(e,t)},[S,s]),removeItem:(0,u.useCallback)(e=>{let t=S.getId(e);_e(e=>new Set(e).add(t)),J.has(t)&&$(q.filter(e=>e!==t)),c?.(e)},[S,$,c,q,J]),accessors:S}}function O(e,t){return e===`image`?(0,d.jsx)(f.ImageIcon,{className:t??`size-4`}):e===`video`?(0,d.jsx)(f.Video,{className:t??`size-4`}):(0,d.jsx)(f.File,{className:t??`size-4`})}function k(e,t){return e===`image`?t.typeImage:e===`video`?t.typeVideo:t.typeFile}function A(e,t){return e?h(t.usedIn,{count:e}):t.notUsed}function j({children:e,tint:n,className:r}){return(0,d.jsx)(`div`,{className:t.cn(`media-library-preview relative overflow-hidden bg-muted`,r),style:n?{background:n}:void 0,children:e})}function M({src:e,alt:t,type:n,className:r,loading:i=`lazy`}){let[a,o]=(0,u.useState)(!1);return(0,u.useEffect)(()=>{o(!1)},[e]),!e||a?(0,d.jsx)(`div`,{className:`media-library-preview--fallback flex size-full items-center justify-center text-muted-foreground`,children:O(n,`size-6`)}):(0,d.jsx)(`img`,{src:e,alt:t,loading:i,className:r,onError:()=>o(!0)})}function N({icon:e,title:n,description:i,action:a,className:o}){return(0,d.jsxs)(`div`,{className:t.cn(`media-library-empty-state--component flex min-h-64 flex-col items-center justify-center rounded-lg border border-dashed border-border bg-muted/20 px-6 py-10 text-center`,o),children:[(0,d.jsx)(`div`,{className:`mb-3 inline-flex size-10 items-center justify-center rounded-full bg-muted text-muted-foreground`,children:e??(0,d.jsx)(f.ImageIcon,{className:`size-5`})}),(0,d.jsx)(r.s,{tag:`div`,weight:`semibold`,children:n}),!!i&&(0,d.jsx)(r.s,{type:`secondary`,size:`xs`,className:`mt-1 max-w-sm`,children:i}),!!a&&(0,d.jsx)(`div`,{className:`mt-4`,children:a})]})}function P({query:e,type:r,typeFilters:i,collection:a,sort:o,view:l,collections:u=[],strings:p,onQueryChange:m,onTypeChange:h,onCollectionChange:g,onSortChange:_,onViewChange:v,onClearFilters:y,toolbarEnd:b}){let x=[{value:`all`,label:p.allTypes,icon:null},{value:`image`,label:p.images,icon:f.ImageIcon},{value:`video`,label:p.videos,icon:f.Video},{value:`file`,label:p.files,icon:f.File}].filter(e=>(i??[`all`,`image`,`video`]).includes(e.value)),S=[{value:`all`,label:p.allCollections},...u.map(e=>({value:e.value,label:String(e.label)}))],C=[{value:`newest`,label:p.sortNewest},{value:`name`,label:p.sortName},{value:`size`,label:p.sortSize},{value:`usage`,label:p.sortUsage}];return(0,d.jsxs)(`div`,{className:`media-library-toolbar--component flex flex-wrap items-center gap-2`,children:[(0,d.jsx)(`div`,{className:`min-w-52 flex-1`,children:(0,d.jsx)(s.t,{value:e,onChange:e=>m(e.target.value),placeholder:p.searchPlaceholder,startIcon:f.Search,clearable:!0,onClear:()=>m(``),strings:{clear:p.clearSearch},className:`rounded-full bg-muted/20`})}),(0,d.jsx)(`div`,{className:`media-library-toolbar--type-toggle flex h-9 items-center rounded-md bg-muted p-0.5`,role:`tablist`,"aria-label":p.typeFilterLabel,children:x.map(e=>{let i=e.icon,a=r===e.value;return(0,d.jsxs)(n.t,{type:`button`,role:`tab`,"aria-selected":a,variant:`secondary`,buttonStyle:`ghost`,className:t.cn(`h-8 rounded-sm px-3 text-xs shadow-none`,a?`bg-background text-foreground shadow-xs hover:bg-background`:`text-muted-foreground hover:bg-transparent hover:text-foreground`),onClick:()=>h(e.value),children:[i&&(0,d.jsx)(i,{className:`size-3.5`}),e.label]},e.value)})}),(0,d.jsx)(`div`,{className:`min-w-40`,children:(0,d.jsx)(c.Y,{value:a,options:S,onChange:e=>g(e??`all`),placeholder:p.collectionFilterLabel,"aria-label":p.collectionFilterLabel,className:`bg-background`})}),(0,d.jsx)(`div`,{className:`min-w-32`,children:(0,d.jsx)(c.Y,{value:o,options:C,onChange:e=>_(e??`newest`),placeholder:p.sortLabel,"aria-label":p.sortLabel,className:`bg-background`})}),(0,d.jsxs)(`div`,{className:`media-library-toolbar--view-toggle ml-auto flex h-9 items-center rounded-md bg-muted p-0.5`,children:[(0,d.jsx)(n.t,{type:`button`,variant:l===`grid`?`dark`:`secondary`,buttonStyle:l===`grid`?`solid`:`ghost`,size:`icon-small`,className:t.cn(l===`grid`&&`bg-background text-foreground shadow-xs hover:bg-background`),"aria-label":p.gridView,onClick:()=>v(`grid`),children:(0,d.jsx)(f.Grid2X2,{className:`size-3.5`})}),(0,d.jsx)(n.t,{type:`button`,variant:l===`table`?`dark`:`secondary`,buttonStyle:l===`table`?`solid`:`ghost`,size:`icon-small`,className:t.cn(l===`table`&&`bg-background text-foreground shadow-xs hover:bg-background`),"aria-label":p.tableView,onClick:()=>v(`table`),children:(0,d.jsx)(f.LayoutList,{className:`size-3.5`})})]}),!!e&&(0,d.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,onClick:y,children:p.clearFilters}),b]})}function F({item:e,selected:i=!1,density:o=`comfortable`,showMeta:s=!0,accessors:c,strings:l,onToggle:u,onDetails:p,className:m}){let g=c.getType(e),_=c.getName(e),v=c.getSrc(e),y=c.getAlt(e)||_,x=c.getSize(e),S=c.getUsageCount(e),C=c.getPublic(e)===!1,w=c.getDuration(e);return(0,d.jsxs)(`div`,{"data-selected":i||void 0,"data-density":o,className:t.cn(`media-library-card--component group/card overflow-hidden rounded-xl border border-border/70 bg-card text-left shadow-xs transition-all`,`hover:border-primary/30 hover:shadow-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2`,i&&`media-library-card--selected border-primary ring-1 ring-primary`,m),onClick:u,children:[(0,d.jsxs)(j,{tint:c.getTint(e),className:t.cn(o===`compact`?`aspect-square`:`aspect-[4/3]`),children:[(0,d.jsx)(M,{src:v,alt:y,type:g,className:`size-full object-cover`}),(0,d.jsx)(`span`,{className:t.cn(`media-library-card--check absolute left-2 top-2 inline-flex size-5 items-center justify-center rounded-md border border-border bg-background/95 text-transparent opacity-0 shadow-xs backdrop-blur transition-opacity group-hover/card:opacity-100 group-focus-visible/card:opacity-100`,i&&`bg-primary text-primary-foreground opacity-100`),"aria-hidden":`true`,children:(0,d.jsx)(f.Check,{className:`size-3`})}),!!p&&(0,d.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`solid`,size:`icon-small`,className:`media-library-card--details absolute right-2 top-2 opacity-0 shadow-sm transition-opacity group-hover/card:opacity-100 group-focus-within/card:opacity-100`,"aria-label":h(l.cardDetails,{name:_}),onClick:e=>{e.stopPropagation(),p()},children:(0,d.jsx)(f.Info,{className:`size-3.5`})}),g===`video`&&!!w&&(0,d.jsxs)(a.t,{variant:`secondary`,className:`media-library-card--duration absolute bottom-2 left-2 bg-foreground text-background`,children:[(0,d.jsx)(f.Play,{className:`size-3 fill-current`}),w]}),C&&(0,d.jsx)(a.t,{variant:`secondary`,className:`media-library-card--private absolute bottom-2 right-2 bg-background/90`,children:(0,d.jsx)(f.Lock,{className:`size-3`})})]}),(0,d.jsxs)(`div`,{className:`media-library-card--body grid gap-1 px-3 py-2.5`,children:[(0,d.jsx)(r.s,{tag:`div`,weight:`semibold`,size:`xs`,className:`truncate`,children:_}),s&&(0,d.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,d.jsx)(r.s,{size:`xxs`,type:`secondary`,className:`truncate`,children:b(x)||l.unknownSize}),!!S&&(0,d.jsxs)(r.s,{tag:`span`,size:`xxs`,type:`secondary`,className:`ml-auto inline-flex items-center gap-1`,children:[(0,d.jsx)(f.Layers3,{className:`size-3`}),S]})]})]})]})}function I({items:e,selectedSet:i,accessors:o,strings:s,onToggle:c,onDetails:l}){return(0,d.jsxs)(`div`,{className:`media-library-table--component min-w-180`,children:[(0,d.jsxs)(`div`,{className:`sticky top-0 z-10 grid grid-cols-[32px_42px_minmax(0,1fr)_86px_88px_120px_72px_34px] items-center gap-3 border-b border-border bg-background px-3 py-2`,children:[(0,d.jsx)(`span`,{}),(0,d.jsx)(`span`,{}),(0,d.jsx)(r.s,{size:`xxs`,type:`secondary`,weight:`semibold`,children:s.table.name}),(0,d.jsx)(r.s,{size:`xxs`,type:`secondary`,weight:`semibold`,children:s.table.type}),(0,d.jsx)(r.s,{size:`xxs`,type:`secondary`,weight:`semibold`,children:s.table.size}),(0,d.jsx)(r.s,{size:`xxs`,type:`secondary`,weight:`semibold`,children:s.table.collection}),(0,d.jsx)(r.s,{size:`xxs`,type:`secondary`,weight:`semibold`,children:s.table.used}),(0,d.jsx)(`span`,{})]}),e.map(e=>{let u=o.getId(e),p=i.has(u),m=o.getType(e),g=o.getName(e),_=o.getSrc(e),v=o.getPublic(e)===!1;return(0,d.jsxs)(`div`,{"data-selected":p||void 0,className:t.cn(`media-library-table--row grid grid-cols-[32px_42px_minmax(0,1fr)_86px_88px_120px_72px_34px] items-center gap-3 border-b border-border/60 px-3 py-2 last:border-b-0`,`cursor-pointer rounded-lg transition-colors hover:bg-muted/40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-inset`,p&&`bg-primary/10`),onClick:()=>c(u),children:[(0,d.jsx)(`span`,{className:t.cn(`inline-flex size-5 items-center justify-center rounded-md border border-border text-transparent`,p&&`border-primary bg-primary text-primary-foreground`),"aria-hidden":`true`,children:(0,d.jsx)(f.Check,{className:`size-3`})}),(0,d.jsx)(j,{tint:o.getTint(e),className:`size-9 rounded-md`,children:_?(0,d.jsx)(`img`,{src:_,alt:``,loading:`lazy`,className:`size-full object-cover`}):(0,d.jsx)(`div`,{className:`flex size-full items-center justify-center text-muted-foreground`,children:O(m,`size-4`)})}),(0,d.jsxs)(r.s,{tag:`div`,weight:`semibold`,size:`xs`,className:`flex min-w-0 items-center gap-1 truncate`,children:[(0,d.jsx)(`span`,{className:`truncate`,children:g}),v&&(0,d.jsx)(f.Lock,{className:`size-3 shrink-0 text-muted-foreground`})]}),(0,d.jsx)(a.t,{variant:`secondary`,children:k(m,s)}),(0,d.jsx)(r.s,{size:`xs`,type:`secondary`,children:b(o.getSize(e))||s.unknownSize}),(0,d.jsx)(r.s,{size:`xs`,type:`secondary`,className:`truncate`,children:o.getCollection(e)||`-`}),(0,d.jsx)(r.s,{size:`xs`,type:`secondary`,children:o.getUsageCount(e)?o.getUsageCount(e):`-`}),(0,d.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`icon-small`,"aria-label":h(s.cardDetails,{name:g}),onClick:e=>{e.stopPropagation(),l(u)},children:(0,d.jsx)(f.Info,{className:`size-3.5`})})]},u)})]})}function L({item:e,collections:t=[],accessors:i,strings:o,onClose:u,onUpdate:p,onRemove:m,renderDetail:h}){if(!e)return null;let g=i.getName(e),_=i.getType(e),v=i.getSrc(e),y=i.getCollection(e)??t[0]?.value??``,S=i.getTags(e),C=i.getPublic(e)??!0,w=h?.(e,{accessors:i,update:p,remove:m,close:u});return w?(0,d.jsx)(d.Fragment,{children:w}):(0,d.jsxs)(`aside`,{className:`media-library-detail-panel--component flex min-h-0 w-full flex-col border-l border-border bg-background lg:w-72`,children:[(0,d.jsxs)(`div`,{className:`media-library-detail-panel--header flex items-center gap-2 border-b border-border px-3 py-2.5`,children:[(0,d.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`icon-small`,"aria-label":o.detail.close,onClick:u,children:(0,d.jsx)(f.ArrowLeft,{className:`size-3.5`})}),(0,d.jsx)(r.s,{weight:`semibold`,children:o.detail.title})]}),(0,d.jsxs)(`div`,{className:`media-library-detail-panel--body grid min-h-0 gap-4 overflow-y-auto p-4`,children:[(0,d.jsxs)(j,{tint:i.getTint(e),className:`aspect-[4/3] rounded-lg border border-border`,children:[(0,d.jsx)(M,{src:v,alt:i.getAlt(e)||g,type:_,className:`size-full object-cover`}),_===`video`&&!!i.getDuration(e)&&(0,d.jsxs)(a.t,{className:`absolute bottom-2 right-2 bg-foreground text-background`,children:[(0,d.jsx)(f.Play,{className:`size-3 fill-current`}),i.getDuration(e)]})]}),(0,d.jsx)(r.s,{tag:`div`,weight:`semibold`,className:`break-words`,children:g}),(0,d.jsx)(`dl`,{className:`media-library-detail-panel--facts grid gap-2`,children:[[o.detail.type,k(_,o)],[o.detail.size,b(i.getSize(e))||o.unknownSize],[o.detail.dimensions,x(e,i)||`-`],[o.detail.uploaded,String(i.getUploadedAt(e)??`-`)],[o.detail.usedIn,A(i.getUsageCount(e),o)]].map(([e,t])=>(0,d.jsxs)(`div`,{className:`flex justify-between gap-4`,children:[(0,d.jsx)(`dt`,{children:(0,d.jsx)(r.s,{tag:`span`,size:`xs`,type:`secondary`,children:e})}),(0,d.jsx)(`dd`,{className:`m-0 text-right`,children:(0,d.jsx)(r.s,{tag:`span`,size:`xs`,weight:`medium`,children:t})})]},e))}),(0,d.jsx)(l.D,{label:o.detail.altText,children:(0,d.jsx)(s.t,{value:i.getAlt(e)??``,placeholder:o.detail.altPlaceholder,onChange:e=>p({alt:e.target.value})})}),(0,d.jsx)(l.D,{label:o.detail.collection,children:(0,d.jsx)(c.Y,{value:y,options:t.map(e=>({value:e.value,label:String(e.label)})),"aria-label":o.detail.collection,onChange:e=>p({collection:e})})}),(0,d.jsx)(l.D,{label:o.detail.tags,children:(0,d.jsx)(s.t,{value:S.join(`, `),placeholder:o.detail.tagsPlaceholder,onChange:e=>p({tags:e.target.value.split(`,`).map(e=>e.trim()).filter(Boolean)})})}),(0,d.jsxs)(`div`,{className:`media-library-detail-panel--public flex items-center justify-between gap-4 rounded-lg border border-border bg-muted/20 p-3`,children:[(0,d.jsxs)(`div`,{children:[(0,d.jsx)(r.s,{weight:`semibold`,size:`xs`,children:o.detail.public}),(0,d.jsx)(r.s,{size:`xxs`,type:`secondary`,children:C?o.detail.publicHint:o.detail.privateHint})]}),(0,d.jsx)(c.J,{checked:C,onCheckedChange:e=>p({public:e})})]}),(0,d.jsxs)(`div`,{className:`media-library-detail-panel--actions flex flex-wrap gap-2`,children:[(0,d.jsxs)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`outline`,children:[(0,d.jsx)(f.UploadCloud,{className:`size-3.5`}),o.detail.replace]}),(0,d.jsxs)(n.t,{type:`button`,variant:`error`,buttonStyle:`ghost`,onClick:m,children:[(0,d.jsx)(f.Trash2,{className:`size-3.5`}),o.detail.delete]})]})]})]})}function re({stagedFiles:e,uploadOptions:t,collections:i=[],uploading:o=!1,strings:u,onFiles:p,onRemoveFile:m,onOptionsChange:g,empty:_}){return(0,d.jsxs)(`div`,{className:`media-library-upload-panel--component grid gap-4 p-4`,children:[(0,d.jsx)(c.T,{onDrop:p,accept:`image/*,video/*`,multiple:!0,size:`default`,strings:{instruction:u.upload.dropTitle,helper:u.upload.dropHint,dragOver:u.upload.dragOver}}),e.length>0?(0,d.jsx)(`div`,{className:`media-library-upload-panel--staged grid gap-2`,children:e.map(e=>(0,d.jsxs)(`div`,{className:`media-library-upload-panel--staged-file flex items-center gap-3 rounded-lg border border-border bg-card p-2`,children:[(0,d.jsx)(j,{className:`size-10 rounded-md`,children:e.src?(0,d.jsx)(`img`,{src:e.src,alt:e.name,className:`size-full object-cover`}):(0,d.jsx)(`div`,{className:`flex size-full items-center justify-center text-muted-foreground`,children:O(e.type,`size-4`)})}),(0,d.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,d.jsxs)(`div`,{className:`flex items-baseline gap-3`,children:[(0,d.jsx)(r.s,{weight:`semibold`,size:`xs`,className:`truncate`,children:e.name}),(0,d.jsx)(r.s,{size:`xxs`,type:`secondary`,className:`ml-auto shrink-0`,children:b(e.size)})]}),(e.status===`uploading`||e.status===`done`)&&(0,d.jsx)(`div`,{className:`mt-2 h-1 overflow-hidden rounded-full bg-muted`,children:(0,d.jsx)(`div`,{className:`h-full rounded-full bg-primary transition-[width]`,style:{width:`${e.progress}%`}})}),e.status===`error`&&(0,d.jsx)(r.s,{size:`xxs`,type:`error`,children:e.error})]}),e.status===`done`?(0,d.jsx)(a.t,{variant:`success`,children:u.upload.done}):e.status===`uploading`?(0,d.jsxs)(r.s,{size:`xxs`,type:`secondary`,className:`tabular-nums`,children:[Math.round(e.progress),`%`]}):(0,d.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`icon-small`,disabled:o,"aria-label":h(u.upload.removeFile,{name:e.name}),onClick:()=>m(e.id),children:(0,d.jsx)(f.X,{className:`size-3.5`})})]},e.id))}):_,(0,d.jsxs)(`div`,{className:`media-library-upload-panel--options grid gap-3 rounded-lg border border-border bg-muted/20 p-3 md:grid-cols-[minmax(0,1fr)_minmax(0,1fr)_auto]`,children:[(0,d.jsx)(l.D,{label:u.upload.collection,children:(0,d.jsx)(c.Y,{value:t.collection??i[0]?.value,options:i.map(e=>({value:e.value,label:String(e.label)})),"aria-label":u.upload.collection,onChange:e=>g({collection:e})})}),(0,d.jsx)(l.D,{label:u.upload.tags,children:(0,d.jsx)(s.t,{value:t.tags.join(`, `),placeholder:u.upload.tagsPlaceholder,onChange:e=>g({tags:e.target.value.split(`,`).map(e=>e.trim()).filter(Boolean)})})}),(0,d.jsxs)(`div`,{className:`flex items-center justify-between gap-4 md:self-end`,children:[(0,d.jsxs)(`div`,{children:[(0,d.jsx)(r.s,{weight:`semibold`,size:`xs`,children:u.upload.public}),(0,d.jsx)(r.s,{size:`xxs`,type:`secondary`,children:u.upload.publicHint})]}),(0,d.jsx)(c.J,{checked:t.public,onCheckedChange:e=>g({public:e})})]})]})]})}function ie({tab:e,selectedIds:i,selectionMode:a,stagedFiles:o,strings:s,onClearSelection:c,className:l}){let u=i.length,f=o.reduce((e,t)=>e+t.size,0),p=o.length,m=t.cn(`media-library-footer-summary--component flex min-w-0 items-center gap-3`,l);return e===`upload`?(0,d.jsx)(`div`,{className:m,"aria-live":`polite`,children:(0,d.jsx)(r.s,{size:`xs`,type:`secondary`,className:`truncate`,children:p===0?s.footer.noFiles:h(s.footer.stagedSummary,{count:p,size:b(f)})})}):(0,d.jsx)(`div`,{className:m,"aria-live":`polite`,children:u>0?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(r.s,{weight:`semibold`,size:`xs`,className:`whitespace-nowrap`,children:h(s.footer.selectedCount,{count:u})}),(0,d.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`small`,onClick:c,children:s.footer.clear})]}):(0,d.jsx)(r.s,{size:`xs`,type:`secondary`,className:`truncate`,children:a===`single`?s.footer.pickOne:s.footer.pickMany})})}function ae({tab:e,selectedItems:r,selectedIds:i,stagedFiles:a,uploading:o=!1,strings:s,confirmLabel:c,cancelLabel:l,onCancel:u,onConfirm:f,onUpload:p,onCancelUpload:m,className:g}){let _=i.length,v=a.length;return e===`upload`?(0,d.jsxs)(`div`,{className:t.cn(`media-library-footer-actions--component flex flex-col-reverse gap-2 sm:flex-row sm:justify-end`,g),children:[(0,d.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,disabled:o,onClick:m,children:l??s.footer.cancel}),(0,d.jsx)(n.t,{type:`button`,disabled:v===0||o,onClick:p,loading:o,loadingLabels:{loading:s.footer.uploading},children:v<=1?s.footer.upload:h(s.footer.uploadMany,{count:v})})]}):(0,d.jsxs)(`div`,{className:t.cn(`media-library-footer-actions--component flex flex-col-reverse gap-2 sm:flex-row sm:justify-end`,g),children:[(0,d.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,onClick:u,children:l??s.footer.cancel}),(0,d.jsx)(n.t,{type:`button`,disabled:_===0,onClick:f,children:c??(_===0?s.footer.confirmEmpty:r.length===1?s.footer.confirmOne:h(s.footer.confirmMany,{count:_}))})]})}function R({tab:e,selectedItems:n,selectedIds:r,selectionMode:i,stagedFiles:a,uploading:o=!1,strings:s,confirmLabel:c,cancelLabel:l,onCancel:u,onConfirm:f,onClearSelection:p,onUpload:m,onCancelUpload:h,chrome:g=`section`,className:_}){return(0,d.jsxs)(`footer`,{className:t.cn(`media-library-footer--component flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between`,g===`section`&&`border-t border-border bg-background px-4 py-3`,_),children:[(0,d.jsx)(ie,{tab:e,selectedIds:r,selectionMode:i,stagedFiles:a,strings:s,onClearSelection:p}),(0,d.jsx)(ae,{tab:e,selectedItems:n,selectedIds:r,stagedFiles:a,uploading:o,strings:s,confirmLabel:c,cancelLabel:l,onCancel:u,onConfirm:f,onUpload:m,onCancelUpload:h})]})}var oe=(0,u.createContext)(null);function se(e,t,n){return(0,u.useMemo)(()=>{if(e)return e;let r=new Set;for(let e of t){let t=n(e);t&&r.add(t)}return Array.from(r).map(e=>({value:e,label:e}))},[e,n,t])}function ce({title:i,description:a,confirmLabel:s,cancelLabel:c,selectionMode:l=`multiple`,density:g=`comfortable`,showMeta:_=!0,allowUpload:v=!0,typeFilters:y,confirmOnSelect:b=!1,onConfirm:x,onCancel:S,onClose:C,strings:w,slots:T,heightClassName:E,className:ee,items:te,fetcher:ne,accessors:O,collections:k,value:A,defaultValue:j,onValueChange:M,onItemUpdate:ce,onItemDelete:le,onUpload:ue,onError:de,initialTab:fe,defaultView:pe,defaultQuery:z,defaultType:me,defaultCollection:he,defaultSort:ge,defaultUploadOptions:_e,...ve}){let B=e.useStrings(m,w),V=D({items:te,fetcher:ne,accessors:O,collections:k,selectionMode:l,value:A,defaultValue:j,onValueChange:M,onItemUpdate:ce,onItemDelete:le,onUpload:ue,onError:de,initialTab:fe,defaultView:pe,defaultQuery:z,defaultType:me,defaultCollection:he,defaultSort:ge,defaultUploadOptions:_e}),H=se(k,V.items,V.accessors.getCollection),U=v?V.tab:`library`,W=V.detailId?V.items.find(e=>V.accessors.getId(e)===V.detailId)??null:null,G=(0,u.useContext)(oe),ye=!T?.footer,K=G&&ye?(0,d.jsx)(ie,{tab:U,selectedIds:V.selectedIds,selectionMode:l,stagedFiles:V.stagedFiles,strings:B,onClearSelection:V.clearSelection,className:`media-library-dialog--selection-summary shrink-0 justify-end`}):null,q=!!(i||a||T?.headerStart),J=!!(v||T?.headerEnd||K),Y=q||J,X=()=>{x?.(V.selectedItems,V.selectedIds),C?.()},Z=()=>{S?.(),C?.()},Q=e=>{let t=V.accessors.getId(e);V.toggleSelection(t),b&&(x?.([e],[t]),C?.())},be=V.filteredCount===V.totalCount?h(B.countAll,{count:V.totalCount}):h(B.countFiltered,{count:V.filteredCount,total:V.totalCount}),xe=T?.footer??(G?(0,d.jsx)(ae,{tab:U,selectedItems:V.selectedItems,selectedIds:V.selectedIds,stagedFiles:V.stagedFiles,uploading:V.uploading,strings:B,confirmLabel:s,cancelLabel:c,onCancel:Z,onConfirm:X,onUpload:V.startUpload,onCancelUpload:()=>{V.clearStagedFiles(),V.setTab(`library`)},className:`ml-auto`}):(0,d.jsx)(R,{tab:U,selectedItems:V.selectedItems,selectedIds:V.selectedIds,selectionMode:l,stagedFiles:V.stagedFiles,uploading:V.uploading,strings:B,confirmLabel:s,cancelLabel:c,onCancel:Z,onConfirm:X,onClearSelection:V.clearSelection,onUpload:V.startUpload,onCancelUpload:()=>{V.clearStagedFiles(),V.setTab(`library`)}}));return(0,d.jsxs)(`section`,{className:t.cn(`media-library--component flex min-h-0 flex-col overflow-hidden rounded-lg border border-border bg-background`,E??`h-190 max-h-[calc(100vh-7rem)]`,ee),...ve,children:[Y&&(0,d.jsxs)(`header`,{className:`media-library--header flex flex-col gap-3 border-b border-border px-4 py-3 lg:flex-row lg:items-center lg:justify-between`,children:[q&&(0,d.jsxs)(`div`,{className:`flex min-w-0 items-start gap-3`,children:[T?.headerStart,(i||a)&&(0,d.jsxs)(`div`,{className:`min-w-0`,children:[!!i&&(0,d.jsx)(r.s,{tag:`div`,weight:`semibold`,children:i}),!!a&&(0,d.jsx)(r.s,{size:`xs`,type:`secondary`,className:`mt-0.5`,children:a})]})]}),J&&(0,d.jsxs)(`div`,{className:t.cn(`flex min-w-0 flex-wrap items-center gap-2`,K?`flex-1 justify-between`:`lg:justify-end`),children:[(0,d.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-2`,children:[v&&(0,d.jsxs)(`div`,{className:`media-library--tabs flex items-center rounded-md bg-muted p-0.5`,role:`tablist`,children:[(0,d.jsxs)(n.t,{type:`button`,role:`tab`,"aria-selected":U===`library`,variant:`secondary`,buttonStyle:`ghost`,className:t.cn(`h-8 rounded-sm px-3 shadow-none`,U===`library`?`bg-background text-foreground shadow-xs hover:bg-background`:`text-muted-foreground hover:bg-transparent hover:text-foreground`),onClick:()=>V.setTab(`library`),children:[(0,d.jsx)(f.ImageIcon,{className:`size-3.5`}),B.tabs.library]}),(0,d.jsxs)(n.t,{type:`button`,role:`tab`,"aria-selected":U===`upload`,variant:`secondary`,buttonStyle:`ghost`,className:t.cn(`h-8 rounded-sm px-3 shadow-none`,U===`upload`?`bg-background text-foreground shadow-xs hover:bg-background`:`text-muted-foreground hover:bg-transparent hover:text-foreground`),onClick:()=>V.setTab(`upload`),children:[(0,d.jsx)(f.UploadCloud,{className:`size-3.5`}),B.tabs.upload,V.stagedFiles.length>0&&(0,d.jsx)(`span`,{className:`rounded-full bg-background/20 px-1.5 text-xxs tabular-nums`,children:V.stagedFiles.length})]})]}),T?.headerEnd]}),K]})]}),(0,d.jsxs)(`div`,{className:`media-library--body flex min-h-0 flex-1`,children:[U===`upload`?(0,d.jsx)(`div`,{className:`min-w-0 flex-1 overflow-y-auto`,children:(0,d.jsx)(re,{stagedFiles:V.stagedFiles,uploadOptions:V.uploadOptions,collections:H,uploading:V.uploading,strings:B,onFiles:V.addFiles,onRemoveFile:V.removeStagedFile,onOptionsChange:V.updateUploadOptions,empty:T?.uploadEmpty})}):(0,d.jsxs)(`div`,{className:t.cn(`media-library--library min-w-0 flex-1 flex-col`,W?`hidden lg:flex`:`flex`),children:[(0,d.jsxs)(`div`,{className:`media-library--toolbar border-b border-border/70 px-4 py-3`,children:[(0,d.jsx)(P,{query:V.query,type:V.type,typeFilters:y,collection:V.collection,sort:V.sort,view:V.view,collections:H,strings:B,onQueryChange:V.setQuery,onTypeChange:V.setType,onCollectionChange:V.setCollection,onSortChange:V.setSort,onViewChange:V.setView,onClearFilters:V.clearFilters,toolbarEnd:T?.toolbarEnd}),(0,d.jsx)(r.s,{size:`xs`,type:`secondary`,className:`mt-2`,"aria-live":`polite`,children:be})]}),(0,d.jsx)(`div`,{className:`media-library--results min-h-0 flex-1 overflow-y-auto p-4`,children:V.loading?T?.loading??(0,d.jsx)(`div`,{className:`flex min-h-64 items-center justify-center`,children:(0,d.jsx)(r.s,{type:`secondary`,children:B.loading})}):V.error?T?.error??(0,d.jsxs)(o.t,{variant:`destructive`,children:[(0,d.jsx)(o.i,{children:B.errorTitle}),(0,d.jsx)(o.r,{children:B.errorDescription})]}):V.visibleItems.length===0?T?.empty??(0,d.jsx)(N,{title:V.hasFilters?B.emptyFilteredTitle:B.emptyLibraryTitle,description:V.hasFilters?B.emptyFilteredDescription:B.emptyLibraryDescription,action:V.hasFilters?(0,d.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`outline`,onClick:V.clearFilters,children:B.clearFilters}):v?(0,d.jsxs)(n.t,{type:`button`,onClick:()=>V.setTab(`upload`),children:[(0,d.jsx)(f.UploadCloud,{className:`size-3.5`}),B.uploadMedia]}):void 0}):V.view===`table`?(0,d.jsx)(`div`,{className:`overflow-x-auto`,children:(0,d.jsx)(I,{items:V.visibleItems,selectedSet:V.selectedSet,selectionMode:l,accessors:V.accessors,strings:B,onToggle:e=>{let t=V.items.find(t=>V.accessors.getId(t)===e);t&&Q(t)},onDetails:V.setDetailId})}):(0,d.jsx)(`div`,{className:t.cn(`media-library--grid grid gap-3`,g===`compact`?`grid-cols-[repeat(auto-fill,minmax(136px,1fr))]`:`grid-cols-[repeat(auto-fill,minmax(168px,1fr))]`),children:V.visibleItems.map(e=>{let t=V.accessors.getId(e),n={id:t,selected:V.selectedSet.has(t),selectionMode:l,accessors:V.accessors,toggle:()=>Q(e),openDetails:()=>V.setDetailId(t)},r=T?.renderItem?.(e,n);return r?(0,d.jsx)(`div`,{children:r},t):(0,d.jsx)(F,{item:e,selected:n.selected,density:g,showMeta:_,selectionMode:l,accessors:V.accessors,strings:B,onToggle:n.toggle,onDetails:n.openDetails},t)})})})]}),U===`library`&&(0,d.jsx)(L,{item:W,collections:H,accessors:V.accessors,strings:B,onClose:()=>V.setDetailId(null),onUpdate:e=>W&&V.updateItem(W,e),onRemove:()=>{W&&(V.removeItem(W),V.setDetailId(null))},renderDetail:T?.renderDetail})]}),G?G.element?(0,p.createPortal)(xe,G.element):null:xe]})}function le({open:n,onOpenChange:r,trigger:a,dialogTitle:o,dialogDescription:s,onClose:c,className:l,dialogClassName:f,contentClassName:p,closeOnEscape:h=!0,closeOnBackdropClick:g=!0,..._}){let v=e.useStrings(m,_.strings),[y,b]=(0,u.useState)(!1),[x,S]=(0,u.useState)(null),C=n!==void 0,w=C?n:y,T=e=>{C||b(e),r?.(e)},E=()=>{T(!1),c?.()};return(0,d.jsx)(oe.Provider,{value:{element:x},children:(0,d.jsx)(i.r,{open:w,onOpenChange:T,onClose:c,trigger:a,title:o??v.title,description:s??v.description,size:`full`,showCancel:!1,showConfirm:!1,footer:(0,d.jsx)(`div`,{ref:S,className:`media-library-dialog--footer`}),className:t.cn(`media-library-dialog--component max-h-[calc(100vh-2rem)] max-w-[min(1060px,calc(100vw-2rem))]`,f),contentClassName:t.cn(`media-library-dialog--body flex min-h-0 flex-col overflow-hidden p-0`,p),closeOnBackdropClick:g,closeOnEscape:h,children:(0,d.jsx)(ce,{..._,onClose:E,className:t.cn(`media-library-dialog--library rounded-none border-0`,l),heightClassName:_.heightClassName??`min-h-0 flex-1`,strings:_.strings})})})}function ue(e,t,n){let r=e.slice(),[i]=r.splice(t,1);return i===void 0||r.splice(n,0,i),r}function de({items:i,accessors:o,title:s,description:c,primaryId:l,onPrimaryChange:u,onRemove:p,onReorder:g,onAdd:_,maxItems:v,layout:x=`field`,density:S=`comfortable`,readOnly:C=!1,empty:w,action:T,renderItem:E,strings:ee,className:te,...ne}){let D=e.useStrings(m,ee),O=y(o),k=i.length,A=l??(k>0?O.getId(i[0]):void 0),j=!C&&!!_&&(v===void 0||k<v),M=j&&(x===`field`||k>0)?(0,d.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`outline`,icon:f.Plus,onClick:_,children:D.gallery.add}):v!==void 0&&k>=v?(0,d.jsx)(a.t,{variant:`secondary`,children:D.gallery.maxReached}):null,P=(e,t)=>{if(t<0||t>=k||e===t)return;let n=ue(i,e,t);g?.(n.map(e=>O.getId(e)),n)},F=!!(s||c||T||M),I=k===0&&x!==`field`,L=()=>!j||x!==`field`?null:(0,d.jsxs)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,className:t.cn(`media-resource-gallery--add-tile h-auto min-h-24 w-full flex-col rounded-lg border border-dashed border-border bg-background text-muted-foreground shadow-none`,`aspect-square hover:border-primary/50 hover:bg-primary/5 hover:text-primary focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2`),"aria-label":D.gallery.addTile,onClick:_,children:[(0,d.jsx)(f.Plus,{className:`size-4`}),(0,d.jsx)(`span`,{className:`sr-only`,children:D.gallery.addTile})]});return(0,d.jsxs)(`section`,{className:t.cn(`media-resource-gallery--component rounded-lg border border-border bg-card shadow-xs`,te),"data-layout":x,"data-density":S,...ne,children:[F&&(0,d.jsxs)(`header`,{className:`media-resource-gallery--header flex flex-col gap-3 px-4 py-3 sm:flex-row sm:items-start sm:justify-between`,children:[(0,d.jsxs)(`div`,{className:`min-w-0`,children:[!!s&&(0,d.jsx)(r.s,{tag:`div`,weight:`semibold`,children:s}),!!c&&(0,d.jsx)(r.s,{size:`xs`,type:`secondary`,className:`mt-0.5`,children:c})]}),(0,d.jsx)(`div`,{className:`media-resource-gallery--actions flex flex-wrap items-center gap-2`,children:T??M})]}),I?(0,d.jsx)(`div`,{className:`media-resource-gallery--empty p-4 pt-0`,children:w??(0,d.jsx)(N,{title:D.gallery.emptyTitle,description:D.gallery.emptyDescription,action:j?(0,d.jsx)(n.t,{type:`button`,icon:f.ImagePlus,onClick:_,children:D.gallery.add}):void 0})}):(0,d.jsxs)(`div`,{className:t.cn(`media-resource-gallery--items p-4`,F&&`pt-0`,x===`list`?`grid gap-2`:x===`field`?`grid grid-cols-[repeat(auto-fill,minmax(96px,1fr))] gap-3 sm:grid-cols-[repeat(auto-fill,minmax(108px,1fr))]`:S===`compact`?`grid grid-cols-[repeat(auto-fill,minmax(132px,1fr))] gap-3`:`grid grid-cols-[repeat(auto-fill,minmax(164px,1fr))] gap-3`),children:[i.map((e,i)=>{let o=O.getId(e),s=O.getName(e),c=O.getType(e),l=O.getSrc(e),m=O.getAlt(e)||s,g=o===A,_=O.getPublic(e)===!1,v=O.getDuration(e),y=i>0,S=i<k-1,w=E?.(e,{id:o,index:i,total:k,primary:g,accessors:O,canMovePrevious:y,canMoveNext:S,setPrimary:()=>u?.(o,e),remove:()=>p?.(o,e),movePrevious:()=>P(i,i-1),moveNext:()=>P(i,i+1)});return w?(0,d.jsx)(`div`,{children:w},o):x===`field`?(0,d.jsxs)(`div`,{className:t.cn(`media-resource-gallery--item group/gallery relative aspect-square overflow-hidden rounded-lg border border-border bg-background shadow-xs`,`transition-colors hover:border-primary/40 focus-within:border-primary/50`,g&&`col-span-2 row-span-2 min-h-52`),"data-primary":g||void 0,children:[l?(0,d.jsx)(`img`,{src:l,alt:m,loading:`lazy`,className:`size-full object-cover`}):(0,d.jsx)(`div`,{className:`flex size-full items-center justify-center bg-muted text-muted-foreground`,children:(0,d.jsx)(f.File,{className:g?`size-7`:`size-5`})}),g&&(0,d.jsx)(a.t,{variant:`secondary`,className:`absolute left-2 top-2 bg-background/90 shadow-xs`,children:D.gallery.cover}),c===`video`&&!!v&&(0,d.jsxs)(a.t,{variant:`secondary`,className:`absolute bottom-2 left-2 bg-foreground text-background`,children:[(0,d.jsx)(f.Play,{className:`size-3 fill-current`}),v]}),_&&(0,d.jsx)(`span`,{className:`absolute bottom-2 right-2 inline-flex size-6 items-center justify-center rounded-full border border-border bg-background/90 text-muted-foreground shadow-xs`,children:(0,d.jsx)(f.Lock,{className:`size-3`})}),!C&&(0,d.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`solid`,size:`icon-small`,className:`absolute right-2 top-2 opacity-0 shadow-sm transition-opacity group-hover/gallery:opacity-100 group-focus-within/gallery:opacity-100`,"aria-label":D.gallery.remove,onClick:()=>p?.(o,e),children:(0,d.jsx)(f.X,{className:`size-3.5`})})]},o):x===`list`?(0,d.jsxs)(`div`,{className:`media-resource-gallery--item flex min-w-0 items-center gap-3 rounded-lg border border-border bg-background p-2`,"data-primary":g||void 0,children:[(0,d.jsx)(`div`,{className:`relative size-12 shrink-0 overflow-hidden rounded-md bg-muted`,children:l?(0,d.jsx)(`img`,{src:l,alt:m,loading:`lazy`,className:`size-full object-cover`}):(0,d.jsx)(`div`,{className:`flex size-full items-center justify-center text-muted-foreground`,children:(0,d.jsx)(f.File,{className:`size-4`})})}),(0,d.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,d.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,d.jsx)(r.s,{tag:`div`,weight:`semibold`,size:`xs`,className:`truncate`,children:s}),g&&(0,d.jsx)(a.t,{variant:`info`,children:D.gallery.primary})]}),(0,d.jsxs)(r.s,{size:`xxs`,type:`secondary`,children:[h(D.gallery.itemPosition,{index:i+1,total:k}),` · `,b(O.getSize(e))||D.unknownSize]})]}),!C&&(0,d.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1`,children:[(0,d.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`icon-small`,disabled:g,"aria-label":D.gallery.setPrimary,onClick:()=>u?.(o,e),children:(0,d.jsx)(f.Star,{className:`size-3.5`})}),(0,d.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`icon-small`,disabled:!y,"aria-label":D.gallery.movePrevious,onClick:()=>P(i,i-1),children:(0,d.jsx)(f.ArrowLeft,{className:`size-3.5`})}),(0,d.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`icon-small`,disabled:!S,"aria-label":D.gallery.moveNext,onClick:()=>P(i,i+1),children:(0,d.jsx)(f.ArrowRight,{className:`size-3.5`})}),(0,d.jsx)(n.t,{type:`button`,variant:`error`,buttonStyle:`ghost`,size:`icon-small`,"aria-label":D.gallery.remove,onClick:()=>p?.(o,e),children:(0,d.jsx)(f.Trash2,{className:`size-3.5`})})]})]},o):(0,d.jsxs)(`div`,{className:`media-resource-gallery--item group/gallery overflow-hidden rounded-lg border border-border bg-background shadow-xs transition-colors hover:border-primary/40`,"data-primary":g||void 0,children:[(0,d.jsxs)(`div`,{className:`relative aspect-[4/3] bg-muted`,children:[l?(0,d.jsx)(`img`,{src:l,alt:m,loading:`lazy`,className:`size-full object-cover`}):(0,d.jsx)(`div`,{className:`flex size-full items-center justify-center text-muted-foreground`,children:(0,d.jsx)(f.File,{className:`size-6`})}),(0,d.jsxs)(`div`,{className:`absolute left-2 top-2 flex flex-wrap gap-1`,children:[g&&(0,d.jsx)(a.t,{variant:`info`,children:D.gallery.primary}),(0,d.jsx)(a.t,{variant:`secondary`,children:h(D.gallery.itemPosition,{index:i+1,total:k})})]})]}),(0,d.jsxs)(`div`,{className:`media-resource-gallery--item-body grid gap-2 p-3`,children:[(0,d.jsxs)(`div`,{className:`min-w-0`,children:[(0,d.jsx)(r.s,{tag:`div`,weight:`semibold`,size:`xs`,className:`truncate`,children:s}),(0,d.jsx)(r.s,{size:`xxs`,type:`secondary`,children:b(O.getSize(e))||D.unknownSize})]}),!C&&(0,d.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,d.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`icon-small`,disabled:g,"aria-label":D.gallery.setPrimary,onClick:()=>u?.(o,e),children:(0,d.jsx)(f.Star,{className:`size-3.5`})}),(0,d.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`icon-small`,disabled:!y,"aria-label":D.gallery.movePrevious,onClick:()=>P(i,i-1),children:(0,d.jsx)(f.ArrowLeft,{className:`size-3.5`})}),(0,d.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`icon-small`,disabled:!S,"aria-label":D.gallery.moveNext,onClick:()=>P(i,i+1),children:(0,d.jsx)(f.ArrowRight,{className:`size-3.5`})}),(0,d.jsx)(n.t,{type:`button`,variant:`error`,buttonStyle:`ghost`,size:`icon-small`,className:`ml-auto`,"aria-label":D.gallery.remove,onClick:()=>p?.(o,e),children:(0,d.jsx)(f.Trash2,{className:`size-3.5`})})]})]})]},o)}),L()]})]})}exports.MediaLibrary=ce,exports.MediaLibraryCard=F,exports.MediaLibraryDetailPanel=L,exports.MediaLibraryDialog=le,exports.MediaLibraryEmptyState=N,exports.MediaLibraryFooter=R,exports.MediaLibraryTable=I,exports.MediaLibraryToolbar=P,exports.MediaLibraryUploadPanel=re,exports.MediaResourceGallery=de,exports.defaultMediaLibraryStrings=m,exports.formatMediaLibrarySize=b,exports.formatMediaLibraryString=h,exports.getMediaLibraryDimensions=x,exports.resolveMediaLibraryAccessors=y,exports.useMediaLibrary=D;
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../../../lib/strings.cjs"),t=require("../../../lib/utils.cjs"),n=require("../../../_shared/button-BMiPFJIb.cjs"),r=require("../../../_shared/typography-pzCKaFOc.cjs"),i=require("../../../_shared/overlays-BRLemLSn.cjs"),a=require("../../../_shared/badge-DvUA9Pr2.cjs"),o=require("../../../_shared/alert-BisCSsOE.cjs"),s=require("../../../_shared/input-uuWeiagN.cjs"),c=require("../../../_shared/forms-BjG7QIb1.cjs"),l=require("../../../_shared/display-C0ut-Lew.cjs");let u=require("react"),d=require("react/jsx-runtime"),f=require("lucide-react"),p=require("react-dom");var m={title:`Add media`,description:`Pick from the library, or upload new files.`,close:`Close media library`,tabs:{library:`Library`,upload:`Upload`},searchPlaceholder:`Search by name or tag...`,clearSearch:`Clear search`,typeFilterLabel:`Type`,collectionFilterLabel:`Collection`,sortLabel:`Sort`,viewLabel:`View`,allTypes:`All`,images:`Images`,videos:`Videos`,files:`Files`,allCollections:`All collections`,sortNewest:`Newest`,sortName:`Name`,sortSize:`Size`,sortUsage:`Most used`,gridView:`Grid view`,tableView:`Table view`,countAll:`{count} items`,countFiltered:`{count} of {total} items`,emptyLibraryTitle:`Library is empty`,emptyLibraryDescription:`Upload images or videos to start building the library.`,emptyFilteredTitle:`No media matches`,emptyFilteredDescription:`Try a different search term, or clear the filters.`,clearFilters:`Clear filters`,uploadMedia:`Upload media`,loading:`Loading media...`,errorTitle:`Media could not load`,errorDescription:`Try again or adjust your filters.`,cardDetails:`Details for {name}`,privateLabel:`Private`,publicLabel:`Public`,typeImage:`Image`,typeVideo:`Video`,typeFile:`File`,unknownSize:`Unknown`,notUsed:`Not used yet`,usedIn:`{count} {count, plural, one {place} other {places}}`,table:{name:`Name`,type:`Type`,size:`Size`,collection:`Collection`,used:`Used`},detail:{title:`Details`,altText:`Alt text`,altPlaceholder:`Describe this media for screen readers`,collection:`Collection`,tags:`Tags`,tagsPlaceholder:`Comma-separated`,public:`Public`,publicHint:`Served from the public CDN`,privateHint:`Only visible in the admin`,type:`Type`,size:`Size`,dimensions:`Dimensions`,uploaded:`Uploaded`,usedIn:`Used in`,replace:`Replace file`,delete:`Delete`,close:`Close details`},upload:{dropTitle:`Drag files here or click to browse`,dropHint:`JPG, PNG, WebP, SVG and MP4 up to 50 MB per file`,dragOver:`Release to stage files`,collection:`Collection`,tags:`Tags`,tagsPlaceholder:`Comma-separated`,public:`Public`,publicHint:`Serve from the public CDN`,noFiles:`No files staged`,stagedCount:`{count} {count, plural, one {file} other {files}}`,removeFile:`Remove {name}`,uploading:`Uploading`,done:`Done`},footer:{pickOne:`Pick one item`,pickMany:`Pick one or more items`,selectedCount:`{count} selected`,clear:`Clear`,cancel:`Cancel`,confirmEmpty:`Add to product`,confirmOne:`Add 1 item`,confirmMany:`Add {count} items`,noFiles:`No files staged`,stagedSummary:`{count} {count, plural, one {file} other {files}} · {size}`,upload:`Upload`,uploadMany:`Upload {count} files`,uploading:`Uploading...`},gallery:{emptyTitle:`No media attached`,emptyDescription:`Add images, video, or files to this resource.`,add:`Add media`,addMore:`Add more`,addTile:`Add another media item`,cover:`Cover`,primary:`Primary`,setPrimary:`Set primary`,remove:`Remove`,movePrevious:`Move previous`,moveNext:`Move next`,itemPosition:`{index} of {total}`,maxReached:`Maximum reached`}};function h(e,t){return e.replace(/\{(\w+), plural, one \{([^}]*)\} other \{([^}]*)\}\}/g,(e,n,r,i)=>Number(t[n])===1?r:i).replace(/\{(\w+)\}/g,(e,n)=>String(t[n]??``))}var g={collection:void 0,tags:[],public:!0},_=[],v={getId:e=>e.id,getName:e=>e.name,getType:e=>e.type,getSrc:e=>e.src,getAlt:e=>e.alt,getSize:e=>e.size,getWidth:e=>e.width,getHeight:e=>e.height,getDuration:e=>e.duration,getCollection:e=>e.collection,getTags:e=>e.tags??[],getPublic:e=>e.public,getUploadedAt:e=>e.uploadedAt,getUsageCount:e=>e.usageCount,getTint:e=>e.tint,getMimeType:e=>e.mimeType};function y(e){return{...v,...e??{}}}function b(e){return!e||e<=0?``:e>=1048576?`${(e/1048576).toFixed(1)} MB`:`${Math.max(1,Math.round(e/1024))} KB`}function x(e,t){let n=t.getWidth(e),r=t.getHeight(e);return!n||!r?``:`${n} x ${r}`}function S(e,t){let n=t.getUploadedAt(e);if(!n)return 0;let r=(n instanceof Date?n:new Date(n)).getTime();return Number.isFinite(r)?r:0}function C(e){return e.type.startsWith(`image/`)?`image`:e.type.startsWith(`video/`)?`video`:`file`}function w(e){if(e.type.startsWith(`image/`)&&!(typeof URL>`u`||typeof URL.createObjectURL!=`function`))return URL.createObjectURL(e)}function T(e){!e||typeof URL>`u`||typeof URL.revokeObjectURL!=`function`||URL.revokeObjectURL(e)}function E(e){return Array.isArray(e)?{items:e,total:e.length}:e}function ee(e,t){return t&&typeof e==`object`&&e?{...e,...t}:e}function te(e,t,n,r,i){let a=n.trim().toLowerCase();return e.filter(e=>r!==`all`&&t.getType(e)!==r||i!==`all`&&t.getCollection(e)!==i?!1:a?[t.getName(e),t.getAlt(e),t.getCollection(e),...t.getTags(e)].filter(Boolean).join(` `).toLowerCase().includes(a):!0)}function ne(e,t,n){let r=e.slice();return n===`name`?r.sort((e,n)=>t.getName(e).localeCompare(t.getName(n))):n===`size`?r.sort((e,n)=>(t.getSize(n)??0)-(t.getSize(e)??0)):n===`usage`?r.sort((e,n)=>(t.getUsageCount(n)??0)-(t.getUsageCount(e)??0)):r.sort((e,n)=>S(n,t)-S(e,t)),r}function D({items:e=_,fetcher:t,accessors:n,selectionMode:r=`multiple`,value:i,defaultValue:a=[],onValueChange:o,onItemUpdate:s,onItemDelete:c,onUpload:l,onError:d,initialTab:f=`library`,defaultView:p=`grid`,defaultQuery:m=``,defaultType:h=`all`,defaultCollection:v=`all`,defaultSort:b=`newest`,defaultUploadOptions:x}={}){let S=(0,u.useMemo)(()=>y(n),[n]),[D,O]=(0,u.useState)(f),[k,A]=(0,u.useState)(p),[j,M]=(0,u.useState)(m),[N,P]=(0,u.useState)(h),[F,I]=(0,u.useState)(v),[L,re]=(0,u.useState)(b),[ie,ae]=(0,u.useState)(null),[R,oe]=(0,u.useState)(()=>[...a]),[se,ce]=(0,u.useState)([]),[le,ue]=(0,u.useState)(),[de,fe]=(0,u.useState)(!1),[pe,z]=(0,u.useState)(null),[me,he]=(0,u.useState)([]),[ge,_e]=(0,u.useState)(()=>new Set),[ve,B]=(0,u.useState)({}),[V,H]=(0,u.useState)([]),[U,W]=(0,u.useState)(!1),[G,ye]=(0,u.useState)({...g,...x,tags:x?.tags??g.tags}),K=i!==void 0,q=(0,u.useMemo)(()=>K?[...i??[]]:R,[R,K,i]),J=(0,u.useMemo)(()=>new Set(q),[q]),Y=(0,u.useRef)(new Set);(0,u.useEffect)(()=>{if(!t)return;let e=new AbortController;return fe(!0),z(null),t({query:j,type:N,collection:F===`all`?void 0:F,sort:L,signal:e.signal}).then(t=>{if(e.signal.aborted)return;let n=E(t);ce(n.items),ue(n.total)}).catch(t=>{e.signal.aborted||(z(t),d?.(t))}).finally(()=>{e.signal.aborted||fe(!1)}),()=>e.abort()},[F,t,d,j,L,N]),(0,u.useEffect)(()=>{let e=Y.current;return()=>{for(let t of e)T(t);e.clear()}},[]);let X=(0,u.useMemo)(()=>t?se:[...me,...e],[me,se,t,e]),Z=(0,u.useMemo)(()=>X.filter(e=>!ge.has(S.getId(e))).map(e=>ee(e,ve[S.getId(e)])),[S,ve,ge,X]),Q=(0,u.useMemo)(()=>{let e=t?Z:te(Z,S,j,N,F);return t?e:ne(e,S,L)},[S,F,t,Z,j,L,N]),be=le??Z.length,xe=Q.length,Se=(0,u.useMemo)(()=>Z.filter(e=>J.has(S.getId(e))),[S,Z,J]),Ce=!!j.trim()||N!==`all`||F!==`all`,$=(0,u.useCallback)(e=>{K||oe(e);let t=new Set(e),n=Z.filter(e=>t.has(S.getId(e)));o?.(e,n)},[S,K,o,Z]),we=(0,u.useCallback)(e=>{let t=new Set(r===`single`?[]:J);J.has(e)&&r!==`single`?t.delete(e):t.add(e),$(Array.from(t))},[$,J,r]),Te=(0,u.useCallback)(()=>$([]),[$]),Ee=(0,u.useCallback)(()=>{M(``),P(`all`),I(`all`)},[]),De=(0,u.useCallback)(e=>{H(t=>[...t,...e.map((e,t)=>{let n=w(e);return n&&Y.current.add(n),{id:`staged-${Date.now()}-${t}`,file:e,name:e.name,size:e.size,type:C(e),src:n,progress:0,status:`staged`}})])},[]),Oe=(0,u.useCallback)(e=>{H(t=>{let n=t.find(t=>t.id===e);return n?.src&&(T(n.src),Y.current.delete(n.src)),t.filter(t=>t.id!==e)})},[]),ke=(0,u.useCallback)(()=>{H(e=>{for(let t of e)t.src&&(T(t.src),Y.current.delete(t.src));return[]})},[]),Ae=(0,u.useCallback)(e=>{ye(t=>({...t,...e}))},[]),je=(0,u.useCallback)((e,t)=>{H(n=>n.map(n=>n.id===e?{...n,...t}:n))},[]);return{tab:D,setTab:O,view:k,setView:A,query:j,setQuery:M,type:N,setType:P,collection:F,setCollection:I,sort:L,setSort:re,detailId:ie,setDetailId:ae,items:Z,visibleItems:Q,selectedIds:q,selectedItems:Se,selectedSet:J,toggleSelection:we,clearSelection:Te,clearFilters:Ee,loading:de,error:pe,hasFilters:Ce,totalCount:be,filteredCount:xe,stagedFiles:V,addFiles:De,removeStagedFile:Oe,clearStagedFiles:ke,updateUploadOptions:Ae,uploadOptions:G,uploading:U,startUpload:(0,u.useCallback)(async()=>{if(U||V.length===0)return;W(!0),H(e=>e.map(e=>({...e,status:`uploading`,progress:0})));let e={setProgress:(e,t)=>{je(e,{progress:Math.max(0,Math.min(100,t))})},setFileStatus:(e,t,n)=>je(e,{status:t,error:n})};try{let t=V.map(e=>e.file),n=await l?.(t,G,e);if(H(e=>e.map(e=>({...e,status:`done`,progress:100}))),n?.length){he(e=>[...n,...e]);let e=n.map(e=>S.getId(e));$(r===`single`?e.slice(0,1):Array.from(new Set([...e,...q])))}ke(),O(`library`)}catch(e){z(e),H(e=>e.map(e=>e.status===`uploading`?{...e,status:`error`,error:`Upload failed`}:e)),d?.(e)}finally{W(!1)}},[S,$,ke,d,l,q,r,je,V,G,U]),updateItem:(0,u.useCallback)((e,t)=>{let n=S.getId(e);B(e=>({...e,[n]:{...e[n],...t}})),s?.(e,t)},[S,s]),removeItem:(0,u.useCallback)(e=>{let t=S.getId(e);_e(e=>new Set(e).add(t)),J.has(t)&&$(q.filter(e=>e!==t)),c?.(e)},[S,$,c,q,J]),accessors:S}}function O(e,t){return e===`image`?(0,d.jsx)(f.ImageIcon,{className:t??`size-4`}):e===`video`?(0,d.jsx)(f.Video,{className:t??`size-4`}):(0,d.jsx)(f.File,{className:t??`size-4`})}function k(e,t){return e===`image`?t.typeImage:e===`video`?t.typeVideo:t.typeFile}function A(e,t){return e?h(t.usedIn,{count:e}):t.notUsed}function j({children:e,tint:n,className:r}){return(0,d.jsx)(`div`,{className:t.cn(`media-library-preview relative overflow-hidden bg-muted`,r),style:n?{background:n}:void 0,children:e})}function M({src:e,alt:t,type:n,className:r,loading:i=`lazy`}){let[a,o]=(0,u.useState)(!1);return(0,u.useEffect)(()=>{o(!1)},[e]),!e||a?(0,d.jsx)(`div`,{className:`media-library-preview--fallback flex size-full items-center justify-center text-muted-foreground`,children:O(n,`size-6`)}):(0,d.jsx)(`img`,{src:e,alt:t,loading:i,className:r,onError:()=>o(!0)})}function N({icon:e,title:n,description:i,action:a,className:o}){return(0,d.jsxs)(`div`,{className:t.cn(`media-library-empty-state--component flex min-h-64 flex-col items-center justify-center rounded-lg border border-dashed border-border bg-muted/20 px-6 py-10 text-center`,o),children:[(0,d.jsx)(`div`,{className:`mb-3 inline-flex size-10 items-center justify-center rounded-full bg-muted text-muted-foreground`,children:e??(0,d.jsx)(f.ImageIcon,{className:`size-5`})}),(0,d.jsx)(r.s,{tag:`div`,weight:`semibold`,children:n}),!!i&&(0,d.jsx)(r.s,{type:`secondary`,size:`xs`,className:`mt-1 max-w-sm`,children:i}),!!a&&(0,d.jsx)(`div`,{className:`mt-4`,children:a})]})}function P({query:e,type:r,typeFilters:i,collection:a,sort:o,view:l,collections:u=[],strings:p,onQueryChange:m,onTypeChange:h,onCollectionChange:g,onSortChange:_,onViewChange:v,onClearFilters:y,toolbarEnd:b}){let x=[{value:`all`,label:p.allTypes,icon:null},{value:`image`,label:p.images,icon:f.ImageIcon},{value:`video`,label:p.videos,icon:f.Video},{value:`file`,label:p.files,icon:f.File}].filter(e=>(i??[`all`,`image`,`video`]).includes(e.value)),S=[{value:`all`,label:p.allCollections},...u.map(e=>({value:e.value,label:String(e.label)}))],C=[{value:`newest`,label:p.sortNewest},{value:`name`,label:p.sortName},{value:`size`,label:p.sortSize},{value:`usage`,label:p.sortUsage}];return(0,d.jsxs)(`div`,{className:`media-library-toolbar--component flex flex-wrap items-center gap-2`,children:[(0,d.jsx)(`div`,{className:`min-w-52 flex-1`,children:(0,d.jsx)(s.t,{value:e,onChange:e=>m(e.target.value),placeholder:p.searchPlaceholder,startIcon:f.Search,clearable:!0,onClear:()=>m(``),strings:{clear:p.clearSearch},className:`rounded-full bg-muted/20`})}),(0,d.jsx)(`div`,{className:`media-library-toolbar--type-toggle flex h-9 items-center rounded-md bg-muted p-0.5`,role:`tablist`,"aria-label":p.typeFilterLabel,children:x.map(e=>{let i=e.icon,a=r===e.value;return(0,d.jsxs)(n.t,{type:`button`,role:`tab`,"aria-selected":a,variant:`secondary`,buttonStyle:`ghost`,className:t.cn(`h-8 rounded-sm px-3 text-xs shadow-none`,a?`bg-background text-foreground shadow-xs hover:bg-background`:`text-muted-foreground hover:bg-transparent hover:text-foreground`),onClick:()=>h(e.value),children:[i&&(0,d.jsx)(i,{className:`size-3.5`}),e.label]},e.value)})}),(0,d.jsx)(`div`,{className:`min-w-40`,children:(0,d.jsx)(c.Y,{value:a,options:S,onChange:e=>g(e??`all`),placeholder:p.collectionFilterLabel,"aria-label":p.collectionFilterLabel,className:`bg-background`})}),(0,d.jsx)(`div`,{className:`min-w-32`,children:(0,d.jsx)(c.Y,{value:o,options:C,onChange:e=>_(e??`newest`),placeholder:p.sortLabel,"aria-label":p.sortLabel,className:`bg-background`})}),(0,d.jsxs)(`div`,{className:`media-library-toolbar--view-toggle ml-auto flex h-9 items-center rounded-md bg-muted p-0.5`,children:[(0,d.jsx)(n.t,{type:`button`,variant:l===`grid`?`dark`:`secondary`,buttonStyle:l===`grid`?`solid`:`ghost`,size:`icon-small`,className:t.cn(l===`grid`&&`bg-background text-foreground shadow-xs hover:bg-background`),"aria-label":p.gridView,onClick:()=>v(`grid`),children:(0,d.jsx)(f.Grid2X2,{className:`size-3.5`})}),(0,d.jsx)(n.t,{type:`button`,variant:l===`table`?`dark`:`secondary`,buttonStyle:l===`table`?`solid`:`ghost`,size:`icon-small`,className:t.cn(l===`table`&&`bg-background text-foreground shadow-xs hover:bg-background`),"aria-label":p.tableView,onClick:()=>v(`table`),children:(0,d.jsx)(f.LayoutList,{className:`size-3.5`})})]}),!!e&&(0,d.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,onClick:y,children:p.clearFilters}),b]})}function F({item:e,selected:i=!1,density:o=`comfortable`,showMeta:s=!0,accessors:c,strings:l,onToggle:u,onDetails:p,className:m}){let g=c.getType(e),_=c.getName(e),v=c.getSrc(e),y=c.getAlt(e)||_,x=c.getSize(e),S=c.getUsageCount(e),C=c.getPublic(e)===!1,w=c.getDuration(e);return(0,d.jsxs)(`div`,{"data-selected":i||void 0,"data-density":o,className:t.cn(`media-library-card--component group/card overflow-hidden rounded-xl border border-border/70 bg-card text-left shadow-xs transition-all`,`hover:border-primary/30 hover:shadow-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2`,i&&`media-library-card--selected border-primary ring-1 ring-primary`,m),onClick:u,children:[(0,d.jsxs)(j,{tint:c.getTint(e),className:t.cn(o===`compact`?`aspect-square`:`aspect-[4/3]`),children:[(0,d.jsx)(M,{src:v,alt:y,type:g,className:`size-full object-cover`}),(0,d.jsx)(`span`,{className:t.cn(`media-library-card--check absolute left-2 top-2 inline-flex size-5 items-center justify-center rounded-md border border-border bg-background/95 text-transparent opacity-0 shadow-xs backdrop-blur transition-opacity group-hover/card:opacity-100 group-focus-visible/card:opacity-100`,i&&`bg-primary text-primary-foreground opacity-100`),"aria-hidden":`true`,children:(0,d.jsx)(f.Check,{className:`size-3`})}),!!p&&(0,d.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`solid`,size:`icon-small`,className:`media-library-card--details absolute right-2 top-2 opacity-0 shadow-sm transition-opacity group-hover/card:opacity-100 group-focus-within/card:opacity-100`,"aria-label":h(l.cardDetails,{name:_}),onClick:e=>{e.stopPropagation(),p()},children:(0,d.jsx)(f.Info,{className:`size-3.5`})}),g===`video`&&!!w&&(0,d.jsxs)(a.t,{variant:`secondary`,className:`media-library-card--duration absolute bottom-2 left-2 bg-foreground text-background`,children:[(0,d.jsx)(f.Play,{className:`size-3 fill-current`}),w]}),C&&(0,d.jsx)(a.t,{variant:`secondary`,className:`media-library-card--private absolute bottom-2 right-2 bg-background/90`,children:(0,d.jsx)(f.Lock,{className:`size-3`})})]}),(0,d.jsxs)(`div`,{className:`media-library-card--body grid gap-1 px-3 py-2.5`,children:[(0,d.jsx)(r.s,{tag:`div`,weight:`semibold`,size:`xs`,className:`truncate`,children:_}),s&&(0,d.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,d.jsx)(r.s,{size:`xs`,type:`secondary`,className:`truncate`,children:b(x)||l.unknownSize}),!!S&&(0,d.jsxs)(r.s,{tag:`span`,size:`xs`,type:`secondary`,className:`ml-auto inline-flex items-center gap-1`,children:[(0,d.jsx)(f.Layers3,{className:`size-3`}),S]})]})]})]})}function I({items:e,selectedSet:i,accessors:o,strings:s,onToggle:c,onDetails:l}){return(0,d.jsxs)(`div`,{className:`media-library-table--component min-w-180`,children:[(0,d.jsxs)(`div`,{className:`sticky top-0 z-10 grid grid-cols-[32px_42px_minmax(0,1fr)_86px_88px_120px_72px_34px] items-center gap-3 border-b border-border bg-background px-3 py-2`,children:[(0,d.jsx)(`span`,{}),(0,d.jsx)(`span`,{}),(0,d.jsx)(r.s,{size:`xs`,type:`secondary`,weight:`semibold`,children:s.table.name}),(0,d.jsx)(r.s,{size:`xs`,type:`secondary`,weight:`semibold`,children:s.table.type}),(0,d.jsx)(r.s,{size:`xs`,type:`secondary`,weight:`semibold`,children:s.table.size}),(0,d.jsx)(r.s,{size:`xs`,type:`secondary`,weight:`semibold`,children:s.table.collection}),(0,d.jsx)(r.s,{size:`xs`,type:`secondary`,weight:`semibold`,children:s.table.used}),(0,d.jsx)(`span`,{})]}),e.map(e=>{let u=o.getId(e),p=i.has(u),m=o.getType(e),g=o.getName(e),_=o.getSrc(e),v=o.getPublic(e)===!1;return(0,d.jsxs)(`div`,{"data-selected":p||void 0,className:t.cn(`media-library-table--row grid grid-cols-[32px_42px_minmax(0,1fr)_86px_88px_120px_72px_34px] items-center gap-3 border-b border-border/60 px-3 py-2 last:border-b-0`,`cursor-pointer rounded-lg transition-colors hover:bg-muted/40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-inset`,p&&`bg-primary/10`),onClick:()=>c(u),children:[(0,d.jsx)(`span`,{className:t.cn(`inline-flex size-5 items-center justify-center rounded-md border border-border text-transparent`,p&&`border-primary bg-primary text-primary-foreground`),"aria-hidden":`true`,children:(0,d.jsx)(f.Check,{className:`size-3`})}),(0,d.jsx)(j,{tint:o.getTint(e),className:`size-9 rounded-md`,children:_?(0,d.jsx)(`img`,{src:_,alt:``,loading:`lazy`,className:`size-full object-cover`}):(0,d.jsx)(`div`,{className:`flex size-full items-center justify-center text-muted-foreground`,children:O(m,`size-4`)})}),(0,d.jsxs)(r.s,{tag:`div`,weight:`semibold`,size:`xs`,className:`flex min-w-0 items-center gap-1 truncate`,children:[(0,d.jsx)(`span`,{className:`truncate`,children:g}),v&&(0,d.jsx)(f.Lock,{className:`size-3 shrink-0 text-muted-foreground`})]}),(0,d.jsx)(a.t,{variant:`secondary`,children:k(m,s)}),(0,d.jsx)(r.s,{size:`xs`,type:`secondary`,children:b(o.getSize(e))||s.unknownSize}),(0,d.jsx)(r.s,{size:`xs`,type:`secondary`,className:`truncate`,children:o.getCollection(e)||`-`}),(0,d.jsx)(r.s,{size:`xs`,type:`secondary`,children:o.getUsageCount(e)?o.getUsageCount(e):`-`}),(0,d.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`icon-small`,"aria-label":h(s.cardDetails,{name:g}),onClick:e=>{e.stopPropagation(),l(u)},children:(0,d.jsx)(f.Info,{className:`size-3.5`})})]},u)})]})}function L({item:e,collections:t=[],accessors:i,strings:o,onClose:u,onUpdate:p,onRemove:m,renderDetail:h}){if(!e)return null;let g=i.getName(e),_=i.getType(e),v=i.getSrc(e),y=i.getCollection(e)??t[0]?.value??``,S=i.getTags(e),C=i.getPublic(e)??!0,w=h?.(e,{accessors:i,update:p,remove:m,close:u});return w?(0,d.jsx)(d.Fragment,{children:w}):(0,d.jsxs)(`aside`,{className:`media-library-detail-panel--component flex min-h-0 w-full flex-col border-l border-border bg-background lg:w-72`,children:[(0,d.jsxs)(`div`,{className:`media-library-detail-panel--header flex items-center gap-2 border-b border-border px-3 py-2.5`,children:[(0,d.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`icon-small`,"aria-label":o.detail.close,onClick:u,children:(0,d.jsx)(f.ArrowLeft,{className:`size-3.5`})}),(0,d.jsx)(r.s,{weight:`semibold`,children:o.detail.title})]}),(0,d.jsxs)(`div`,{className:`media-library-detail-panel--body grid min-h-0 gap-4 overflow-y-auto p-4`,children:[(0,d.jsxs)(j,{tint:i.getTint(e),className:`aspect-[4/3] rounded-lg border border-border`,children:[(0,d.jsx)(M,{src:v,alt:i.getAlt(e)||g,type:_,className:`size-full object-cover`}),_===`video`&&!!i.getDuration(e)&&(0,d.jsxs)(a.t,{className:`absolute bottom-2 right-2 bg-foreground text-background`,children:[(0,d.jsx)(f.Play,{className:`size-3 fill-current`}),i.getDuration(e)]})]}),(0,d.jsx)(r.s,{tag:`div`,weight:`semibold`,className:`break-words`,children:g}),(0,d.jsx)(`dl`,{className:`media-library-detail-panel--facts grid gap-2`,children:[[o.detail.type,k(_,o)],[o.detail.size,b(i.getSize(e))||o.unknownSize],[o.detail.dimensions,x(e,i)||`-`],[o.detail.uploaded,String(i.getUploadedAt(e)??`-`)],[o.detail.usedIn,A(i.getUsageCount(e),o)]].map(([e,t])=>(0,d.jsxs)(`div`,{className:`flex justify-between gap-4`,children:[(0,d.jsx)(`dt`,{children:(0,d.jsx)(r.s,{tag:`span`,size:`xs`,type:`secondary`,children:e})}),(0,d.jsx)(`dd`,{className:`m-0 text-right`,children:(0,d.jsx)(r.s,{tag:`span`,size:`xs`,weight:`medium`,children:t})})]},e))}),(0,d.jsx)(l.D,{label:o.detail.altText,children:(0,d.jsx)(s.t,{value:i.getAlt(e)??``,placeholder:o.detail.altPlaceholder,onChange:e=>p({alt:e.target.value})})}),(0,d.jsx)(l.D,{label:o.detail.collection,children:(0,d.jsx)(c.Y,{value:y,options:t.map(e=>({value:e.value,label:String(e.label)})),"aria-label":o.detail.collection,onChange:e=>p({collection:e})})}),(0,d.jsx)(l.D,{label:o.detail.tags,children:(0,d.jsx)(s.t,{value:S.join(`, `),placeholder:o.detail.tagsPlaceholder,onChange:e=>p({tags:e.target.value.split(`,`).map(e=>e.trim()).filter(Boolean)})})}),(0,d.jsxs)(`div`,{className:`media-library-detail-panel--public flex items-center justify-between gap-4 rounded-lg border border-border bg-muted/20 p-3`,children:[(0,d.jsxs)(`div`,{children:[(0,d.jsx)(r.s,{weight:`semibold`,size:`xs`,children:o.detail.public}),(0,d.jsx)(r.s,{size:`xs`,type:`secondary`,children:C?o.detail.publicHint:o.detail.privateHint})]}),(0,d.jsx)(c.J,{checked:C,onCheckedChange:e=>p({public:e})})]}),(0,d.jsxs)(`div`,{className:`media-library-detail-panel--actions flex flex-wrap gap-2`,children:[(0,d.jsxs)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`outline`,children:[(0,d.jsx)(f.UploadCloud,{className:`size-3.5`}),o.detail.replace]}),(0,d.jsxs)(n.t,{type:`button`,variant:`error`,buttonStyle:`ghost`,onClick:m,children:[(0,d.jsx)(f.Trash2,{className:`size-3.5`}),o.detail.delete]})]})]})]})}function re({stagedFiles:e,uploadOptions:t,collections:i=[],uploading:o=!1,strings:u,onFiles:p,onRemoveFile:m,onOptionsChange:g,empty:_}){return(0,d.jsxs)(`div`,{className:`media-library-upload-panel--component grid gap-4 p-4`,children:[(0,d.jsx)(c.T,{onDrop:p,accept:`image/*,video/*`,multiple:!0,size:`default`,strings:{instruction:u.upload.dropTitle,helper:u.upload.dropHint,dragOver:u.upload.dragOver}}),e.length>0?(0,d.jsx)(`div`,{className:`media-library-upload-panel--staged grid gap-2`,children:e.map(e=>(0,d.jsxs)(`div`,{className:`media-library-upload-panel--staged-file flex items-center gap-3 rounded-lg border border-border bg-card p-2`,children:[(0,d.jsx)(j,{className:`size-10 rounded-md`,children:e.src?(0,d.jsx)(`img`,{src:e.src,alt:e.name,className:`size-full object-cover`}):(0,d.jsx)(`div`,{className:`flex size-full items-center justify-center text-muted-foreground`,children:O(e.type,`size-4`)})}),(0,d.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,d.jsxs)(`div`,{className:`flex items-baseline gap-3`,children:[(0,d.jsx)(r.s,{weight:`semibold`,size:`xs`,className:`truncate`,children:e.name}),(0,d.jsx)(r.s,{size:`xs`,type:`secondary`,className:`ml-auto shrink-0`,children:b(e.size)})]}),(e.status===`uploading`||e.status===`done`)&&(0,d.jsx)(`div`,{className:`mt-2 h-1 overflow-hidden rounded-full bg-muted`,children:(0,d.jsx)(`div`,{className:`h-full rounded-full bg-primary transition-[width]`,style:{width:`${e.progress}%`}})}),e.status===`error`&&(0,d.jsx)(r.s,{size:`xs`,type:`error`,children:e.error})]}),e.status===`done`?(0,d.jsx)(a.t,{variant:`success`,children:u.upload.done}):e.status===`uploading`?(0,d.jsxs)(r.s,{size:`xs`,type:`secondary`,className:`tabular-nums`,children:[Math.round(e.progress),`%`]}):(0,d.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`icon-small`,disabled:o,"aria-label":h(u.upload.removeFile,{name:e.name}),onClick:()=>m(e.id),children:(0,d.jsx)(f.X,{className:`size-3.5`})})]},e.id))}):_,(0,d.jsxs)(`div`,{className:`media-library-upload-panel--options grid gap-3 rounded-lg border border-border bg-muted/20 p-3 md:grid-cols-[minmax(0,1fr)_minmax(0,1fr)_auto]`,children:[(0,d.jsx)(l.D,{label:u.upload.collection,children:(0,d.jsx)(c.Y,{value:t.collection??i[0]?.value,options:i.map(e=>({value:e.value,label:String(e.label)})),"aria-label":u.upload.collection,onChange:e=>g({collection:e})})}),(0,d.jsx)(l.D,{label:u.upload.tags,children:(0,d.jsx)(s.t,{value:t.tags.join(`, `),placeholder:u.upload.tagsPlaceholder,onChange:e=>g({tags:e.target.value.split(`,`).map(e=>e.trim()).filter(Boolean)})})}),(0,d.jsxs)(`div`,{className:`flex items-center justify-between gap-4 md:self-end`,children:[(0,d.jsxs)(`div`,{children:[(0,d.jsx)(r.s,{weight:`semibold`,size:`xs`,children:u.upload.public}),(0,d.jsx)(r.s,{size:`xs`,type:`secondary`,children:u.upload.publicHint})]}),(0,d.jsx)(c.J,{checked:t.public,onCheckedChange:e=>g({public:e})})]})]})]})}function ie({tab:e,selectedIds:i,selectionMode:a,stagedFiles:o,strings:s,onClearSelection:c,className:l}){let u=i.length,f=o.reduce((e,t)=>e+t.size,0),p=o.length,m=t.cn(`media-library-footer-summary--component flex min-w-0 items-center gap-3`,l);return e===`upload`?(0,d.jsx)(`div`,{className:m,"aria-live":`polite`,children:(0,d.jsx)(r.s,{size:`xs`,type:`secondary`,className:`truncate`,children:p===0?s.footer.noFiles:h(s.footer.stagedSummary,{count:p,size:b(f)})})}):(0,d.jsx)(`div`,{className:m,"aria-live":`polite`,children:u>0?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(r.s,{weight:`semibold`,size:`xs`,className:`whitespace-nowrap`,children:h(s.footer.selectedCount,{count:u})}),(0,d.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`small`,onClick:c,children:s.footer.clear})]}):(0,d.jsx)(r.s,{size:`xs`,type:`secondary`,className:`truncate`,children:a===`single`?s.footer.pickOne:s.footer.pickMany})})}function ae({tab:e,selectedItems:r,selectedIds:i,stagedFiles:a,uploading:o=!1,strings:s,confirmLabel:c,cancelLabel:l,onCancel:u,onConfirm:f,onUpload:p,onCancelUpload:m,className:g}){let _=i.length,v=a.length;return e===`upload`?(0,d.jsxs)(`div`,{className:t.cn(`media-library-footer-actions--component flex flex-col-reverse gap-2 sm:flex-row sm:justify-end`,g),children:[(0,d.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,disabled:o,onClick:m,children:l??s.footer.cancel}),(0,d.jsx)(n.t,{type:`button`,disabled:v===0||o,onClick:p,loading:o,loadingLabels:{loading:s.footer.uploading},children:v<=1?s.footer.upload:h(s.footer.uploadMany,{count:v})})]}):(0,d.jsxs)(`div`,{className:t.cn(`media-library-footer-actions--component flex flex-col-reverse gap-2 sm:flex-row sm:justify-end`,g),children:[(0,d.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,onClick:u,children:l??s.footer.cancel}),(0,d.jsx)(n.t,{type:`button`,disabled:_===0,onClick:f,children:c??(_===0?s.footer.confirmEmpty:r.length===1?s.footer.confirmOne:h(s.footer.confirmMany,{count:_}))})]})}function R({tab:e,selectedItems:n,selectedIds:r,selectionMode:i,stagedFiles:a,uploading:o=!1,strings:s,confirmLabel:c,cancelLabel:l,onCancel:u,onConfirm:f,onClearSelection:p,onUpload:m,onCancelUpload:h,chrome:g=`section`,className:_}){return(0,d.jsxs)(`footer`,{className:t.cn(`media-library-footer--component flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between`,g===`section`&&`border-t border-border bg-background px-4 py-3`,_),children:[(0,d.jsx)(ie,{tab:e,selectedIds:r,selectionMode:i,stagedFiles:a,strings:s,onClearSelection:p}),(0,d.jsx)(ae,{tab:e,selectedItems:n,selectedIds:r,stagedFiles:a,uploading:o,strings:s,confirmLabel:c,cancelLabel:l,onCancel:u,onConfirm:f,onUpload:m,onCancelUpload:h})]})}var oe=(0,u.createContext)(null);function se(e,t,n){return(0,u.useMemo)(()=>{if(e)return e;let r=new Set;for(let e of t){let t=n(e);t&&r.add(t)}return Array.from(r).map(e=>({value:e,label:e}))},[e,n,t])}function ce({title:i,description:a,confirmLabel:s,cancelLabel:c,selectionMode:l=`multiple`,density:g=`comfortable`,showMeta:_=!0,allowUpload:v=!0,typeFilters:y,confirmOnSelect:b=!1,onConfirm:x,onCancel:S,onClose:C,strings:w,slots:T,heightClassName:E,className:ee,items:te,fetcher:ne,accessors:O,collections:k,value:A,defaultValue:j,onValueChange:M,onItemUpdate:ce,onItemDelete:le,onUpload:ue,onError:de,initialTab:fe,defaultView:pe,defaultQuery:z,defaultType:me,defaultCollection:he,defaultSort:ge,defaultUploadOptions:_e,...ve}){let B=e.useStrings(m,w),V=D({items:te,fetcher:ne,accessors:O,collections:k,selectionMode:l,value:A,defaultValue:j,onValueChange:M,onItemUpdate:ce,onItemDelete:le,onUpload:ue,onError:de,initialTab:fe,defaultView:pe,defaultQuery:z,defaultType:me,defaultCollection:he,defaultSort:ge,defaultUploadOptions:_e}),H=se(k,V.items,V.accessors.getCollection),U=v?V.tab:`library`,W=V.detailId?V.items.find(e=>V.accessors.getId(e)===V.detailId)??null:null,G=(0,u.useContext)(oe),ye=!T?.footer,K=G&&ye?(0,d.jsx)(ie,{tab:U,selectedIds:V.selectedIds,selectionMode:l,stagedFiles:V.stagedFiles,strings:B,onClearSelection:V.clearSelection,className:`media-library-dialog--selection-summary shrink-0 justify-end`}):null,q=!!(i||a||T?.headerStart),J=!!(v||T?.headerEnd||K),Y=q||J,X=()=>{x?.(V.selectedItems,V.selectedIds),C?.()},Z=()=>{S?.(),C?.()},Q=e=>{let t=V.accessors.getId(e);V.toggleSelection(t),b&&(x?.([e],[t]),C?.())},be=V.filteredCount===V.totalCount?h(B.countAll,{count:V.totalCount}):h(B.countFiltered,{count:V.filteredCount,total:V.totalCount}),xe=T?.footer??(G?(0,d.jsx)(ae,{tab:U,selectedItems:V.selectedItems,selectedIds:V.selectedIds,stagedFiles:V.stagedFiles,uploading:V.uploading,strings:B,confirmLabel:s,cancelLabel:c,onCancel:Z,onConfirm:X,onUpload:V.startUpload,onCancelUpload:()=>{V.clearStagedFiles(),V.setTab(`library`)},className:`ml-auto`}):(0,d.jsx)(R,{tab:U,selectedItems:V.selectedItems,selectedIds:V.selectedIds,selectionMode:l,stagedFiles:V.stagedFiles,uploading:V.uploading,strings:B,confirmLabel:s,cancelLabel:c,onCancel:Z,onConfirm:X,onClearSelection:V.clearSelection,onUpload:V.startUpload,onCancelUpload:()=>{V.clearStagedFiles(),V.setTab(`library`)}}));return(0,d.jsxs)(`section`,{className:t.cn(`media-library--component flex min-h-0 flex-col overflow-hidden rounded-lg border border-border bg-background`,E??`h-190 max-h-[calc(100vh-7rem)]`,ee),...ve,children:[Y&&(0,d.jsxs)(`header`,{className:`media-library--header flex flex-col gap-3 border-b border-border px-4 py-3 lg:flex-row lg:items-center lg:justify-between`,children:[q&&(0,d.jsxs)(`div`,{className:`flex min-w-0 items-start gap-3`,children:[T?.headerStart,(i||a)&&(0,d.jsxs)(`div`,{className:`min-w-0`,children:[!!i&&(0,d.jsx)(r.s,{tag:`div`,weight:`semibold`,children:i}),!!a&&(0,d.jsx)(r.s,{size:`xs`,type:`secondary`,className:`mt-0.5`,children:a})]})]}),J&&(0,d.jsxs)(`div`,{className:t.cn(`flex min-w-0 flex-wrap items-center gap-2`,K?`flex-1 justify-between`:`lg:justify-end`),children:[(0,d.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-2`,children:[v&&(0,d.jsxs)(`div`,{className:`media-library--tabs flex items-center rounded-md bg-muted p-0.5`,role:`tablist`,children:[(0,d.jsxs)(n.t,{type:`button`,role:`tab`,"aria-selected":U===`library`,variant:`secondary`,buttonStyle:`ghost`,className:t.cn(`h-8 rounded-sm px-3 shadow-none`,U===`library`?`bg-background text-foreground shadow-xs hover:bg-background`:`text-muted-foreground hover:bg-transparent hover:text-foreground`),onClick:()=>V.setTab(`library`),children:[(0,d.jsx)(f.ImageIcon,{className:`size-3.5`}),B.tabs.library]}),(0,d.jsxs)(n.t,{type:`button`,role:`tab`,"aria-selected":U===`upload`,variant:`secondary`,buttonStyle:`ghost`,className:t.cn(`h-8 rounded-sm px-3 shadow-none`,U===`upload`?`bg-background text-foreground shadow-xs hover:bg-background`:`text-muted-foreground hover:bg-transparent hover:text-foreground`),onClick:()=>V.setTab(`upload`),children:[(0,d.jsx)(f.UploadCloud,{className:`size-3.5`}),B.tabs.upload,V.stagedFiles.length>0&&(0,d.jsx)(`span`,{className:`rounded-full bg-background/20 px-1.5 text-xs tabular-nums`,children:V.stagedFiles.length})]})]}),T?.headerEnd]}),K]})]}),(0,d.jsxs)(`div`,{className:`media-library--body flex min-h-0 flex-1`,children:[U===`upload`?(0,d.jsx)(`div`,{className:`min-w-0 flex-1 overflow-y-auto`,children:(0,d.jsx)(re,{stagedFiles:V.stagedFiles,uploadOptions:V.uploadOptions,collections:H,uploading:V.uploading,strings:B,onFiles:V.addFiles,onRemoveFile:V.removeStagedFile,onOptionsChange:V.updateUploadOptions,empty:T?.uploadEmpty})}):(0,d.jsxs)(`div`,{className:t.cn(`media-library--library min-w-0 flex-1 flex-col`,W?`hidden lg:flex`:`flex`),children:[(0,d.jsxs)(`div`,{className:`media-library--toolbar border-b border-border/70 px-4 py-3`,children:[(0,d.jsx)(P,{query:V.query,type:V.type,typeFilters:y,collection:V.collection,sort:V.sort,view:V.view,collections:H,strings:B,onQueryChange:V.setQuery,onTypeChange:V.setType,onCollectionChange:V.setCollection,onSortChange:V.setSort,onViewChange:V.setView,onClearFilters:V.clearFilters,toolbarEnd:T?.toolbarEnd}),(0,d.jsx)(r.s,{size:`xs`,type:`secondary`,className:`mt-2`,"aria-live":`polite`,children:be})]}),(0,d.jsx)(`div`,{className:`media-library--results min-h-0 flex-1 overflow-y-auto p-4`,children:V.loading?T?.loading??(0,d.jsx)(`div`,{className:`flex min-h-64 items-center justify-center`,children:(0,d.jsx)(r.s,{type:`secondary`,children:B.loading})}):V.error?T?.error??(0,d.jsxs)(o.t,{variant:`destructive`,children:[(0,d.jsx)(o.i,{children:B.errorTitle}),(0,d.jsx)(o.r,{children:B.errorDescription})]}):V.visibleItems.length===0?T?.empty??(0,d.jsx)(N,{title:V.hasFilters?B.emptyFilteredTitle:B.emptyLibraryTitle,description:V.hasFilters?B.emptyFilteredDescription:B.emptyLibraryDescription,action:V.hasFilters?(0,d.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`outline`,onClick:V.clearFilters,children:B.clearFilters}):v?(0,d.jsxs)(n.t,{type:`button`,onClick:()=>V.setTab(`upload`),children:[(0,d.jsx)(f.UploadCloud,{className:`size-3.5`}),B.uploadMedia]}):void 0}):V.view===`table`?(0,d.jsx)(`div`,{className:`overflow-x-auto`,children:(0,d.jsx)(I,{items:V.visibleItems,selectedSet:V.selectedSet,selectionMode:l,accessors:V.accessors,strings:B,onToggle:e=>{let t=V.items.find(t=>V.accessors.getId(t)===e);t&&Q(t)},onDetails:V.setDetailId})}):(0,d.jsx)(`div`,{className:t.cn(`media-library--grid grid gap-3`,g===`compact`?`grid-cols-[repeat(auto-fill,minmax(136px,1fr))]`:`grid-cols-[repeat(auto-fill,minmax(168px,1fr))]`),children:V.visibleItems.map(e=>{let t=V.accessors.getId(e),n={id:t,selected:V.selectedSet.has(t),selectionMode:l,accessors:V.accessors,toggle:()=>Q(e),openDetails:()=>V.setDetailId(t)},r=T?.renderItem?.(e,n);return r?(0,d.jsx)(`div`,{children:r},t):(0,d.jsx)(F,{item:e,selected:n.selected,density:g,showMeta:_,selectionMode:l,accessors:V.accessors,strings:B,onToggle:n.toggle,onDetails:n.openDetails},t)})})})]}),U===`library`&&(0,d.jsx)(L,{item:W,collections:H,accessors:V.accessors,strings:B,onClose:()=>V.setDetailId(null),onUpdate:e=>W&&V.updateItem(W,e),onRemove:()=>{W&&(V.removeItem(W),V.setDetailId(null))},renderDetail:T?.renderDetail})]}),G?G.element?(0,p.createPortal)(xe,G.element):null:xe]})}function le({open:n,onOpenChange:r,trigger:a,dialogTitle:o,dialogDescription:s,onClose:c,className:l,dialogClassName:f,contentClassName:p,closeOnEscape:h=!0,closeOnBackdropClick:g=!0,..._}){let v=e.useStrings(m,_.strings),[y,b]=(0,u.useState)(!1),[x,S]=(0,u.useState)(null),C=n!==void 0,w=C?n:y,T=e=>{C||b(e),r?.(e)},E=()=>{T(!1),c?.()};return(0,d.jsx)(oe.Provider,{value:{element:x},children:(0,d.jsx)(i.r,{open:w,onOpenChange:T,onClose:c,trigger:a,title:o??v.title,description:s??v.description,size:`full`,showCancel:!1,showConfirm:!1,footer:(0,d.jsx)(`div`,{ref:S,className:`media-library-dialog--footer`}),className:t.cn(`media-library-dialog--component max-h-[calc(100vh-2rem)] max-w-[min(1060px,calc(100vw-2rem))]`,f),contentClassName:t.cn(`media-library-dialog--body flex min-h-0 flex-col overflow-hidden p-0`,p),closeOnBackdropClick:g,closeOnEscape:h,children:(0,d.jsx)(ce,{..._,onClose:E,className:t.cn(`media-library-dialog--library rounded-none border-0`,l),heightClassName:_.heightClassName??`min-h-0 flex-1`,strings:_.strings})})})}function ue(e,t,n){let r=e.slice(),[i]=r.splice(t,1);return i===void 0||r.splice(n,0,i),r}function de({items:i,accessors:o,title:s,description:c,primaryId:l,onPrimaryChange:u,onRemove:p,onReorder:g,onAdd:_,maxItems:v,layout:x=`field`,density:S=`comfortable`,readOnly:C=!1,empty:w,action:T,renderItem:E,strings:ee,className:te,...ne}){let D=e.useStrings(m,ee),O=y(o),k=i.length,A=l??(k>0?O.getId(i[0]):void 0),j=!C&&!!_&&(v===void 0||k<v),M=j&&(x===`field`||k>0)?(0,d.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`outline`,icon:f.Plus,onClick:_,children:D.gallery.add}):v!==void 0&&k>=v?(0,d.jsx)(a.t,{variant:`secondary`,children:D.gallery.maxReached}):null,P=(e,t)=>{if(t<0||t>=k||e===t)return;let n=ue(i,e,t);g?.(n.map(e=>O.getId(e)),n)},F=!!(s||c||T||M),I=k===0&&x!==`field`,L=()=>!j||x!==`field`?null:(0,d.jsxs)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,className:t.cn(`media-resource-gallery--add-tile h-auto min-h-24 w-full flex-col rounded-lg border border-dashed border-border bg-background text-muted-foreground shadow-none`,`aspect-square hover:border-primary/50 hover:bg-primary/5 hover:text-primary focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2`),"aria-label":D.gallery.addTile,onClick:_,children:[(0,d.jsx)(f.Plus,{className:`size-4`}),(0,d.jsx)(`span`,{className:`sr-only`,children:D.gallery.addTile})]});return(0,d.jsxs)(`section`,{className:t.cn(`media-resource-gallery--component rounded-lg border border-border bg-card shadow-xs`,te),"data-layout":x,"data-density":S,...ne,children:[F&&(0,d.jsxs)(`header`,{className:`media-resource-gallery--header flex flex-col gap-3 px-4 py-3 sm:flex-row sm:items-start sm:justify-between`,children:[(0,d.jsxs)(`div`,{className:`min-w-0`,children:[!!s&&(0,d.jsx)(r.s,{tag:`div`,weight:`semibold`,children:s}),!!c&&(0,d.jsx)(r.s,{size:`xs`,type:`secondary`,className:`mt-0.5`,children:c})]}),(0,d.jsx)(`div`,{className:`media-resource-gallery--actions flex flex-wrap items-center gap-2`,children:T??M})]}),I?(0,d.jsx)(`div`,{className:`media-resource-gallery--empty p-4 pt-0`,children:w??(0,d.jsx)(N,{title:D.gallery.emptyTitle,description:D.gallery.emptyDescription,action:j?(0,d.jsx)(n.t,{type:`button`,icon:f.ImagePlus,onClick:_,children:D.gallery.add}):void 0})}):(0,d.jsxs)(`div`,{className:t.cn(`media-resource-gallery--items p-4`,F&&`pt-0`,x===`list`?`grid gap-2`:x===`field`?`grid grid-cols-[repeat(auto-fill,minmax(96px,1fr))] gap-3 sm:grid-cols-[repeat(auto-fill,minmax(108px,1fr))]`:S===`compact`?`grid grid-cols-[repeat(auto-fill,minmax(132px,1fr))] gap-3`:`grid grid-cols-[repeat(auto-fill,minmax(164px,1fr))] gap-3`),children:[i.map((e,i)=>{let o=O.getId(e),s=O.getName(e),c=O.getType(e),l=O.getSrc(e),m=O.getAlt(e)||s,g=o===A,_=O.getPublic(e)===!1,v=O.getDuration(e),y=i>0,S=i<k-1,w=E?.(e,{id:o,index:i,total:k,primary:g,accessors:O,canMovePrevious:y,canMoveNext:S,setPrimary:()=>u?.(o,e),remove:()=>p?.(o,e),movePrevious:()=>P(i,i-1),moveNext:()=>P(i,i+1)});return w?(0,d.jsx)(`div`,{children:w},o):x===`field`?(0,d.jsxs)(`div`,{className:t.cn(`media-resource-gallery--item group/gallery relative aspect-square overflow-hidden rounded-lg border border-border bg-background shadow-xs`,`transition-colors hover:border-primary/40 focus-within:border-primary/50`,g&&`col-span-2 row-span-2 min-h-52`),"data-primary":g||void 0,children:[l?(0,d.jsx)(`img`,{src:l,alt:m,loading:`lazy`,className:`size-full object-cover`}):(0,d.jsx)(`div`,{className:`flex size-full items-center justify-center bg-muted text-muted-foreground`,children:(0,d.jsx)(f.File,{className:g?`size-7`:`size-5`})}),g&&(0,d.jsx)(a.t,{variant:`secondary`,className:`absolute left-2 top-2 bg-background/90 shadow-xs`,children:D.gallery.cover}),c===`video`&&!!v&&(0,d.jsxs)(a.t,{variant:`secondary`,className:`absolute bottom-2 left-2 bg-foreground text-background`,children:[(0,d.jsx)(f.Play,{className:`size-3 fill-current`}),v]}),_&&(0,d.jsx)(`span`,{className:`absolute bottom-2 right-2 inline-flex size-6 items-center justify-center rounded-full border border-border bg-background/90 text-muted-foreground shadow-xs`,children:(0,d.jsx)(f.Lock,{className:`size-3`})}),!C&&(0,d.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`solid`,size:`icon-small`,className:`absolute right-2 top-2 opacity-0 shadow-sm transition-opacity group-hover/gallery:opacity-100 group-focus-within/gallery:opacity-100`,"aria-label":D.gallery.remove,onClick:()=>p?.(o,e),children:(0,d.jsx)(f.X,{className:`size-3.5`})})]},o):x===`list`?(0,d.jsxs)(`div`,{className:`media-resource-gallery--item flex min-w-0 items-center gap-3 rounded-lg border border-border bg-background p-2`,"data-primary":g||void 0,children:[(0,d.jsx)(`div`,{className:`relative size-12 shrink-0 overflow-hidden rounded-md bg-muted`,children:l?(0,d.jsx)(`img`,{src:l,alt:m,loading:`lazy`,className:`size-full object-cover`}):(0,d.jsx)(`div`,{className:`flex size-full items-center justify-center text-muted-foreground`,children:(0,d.jsx)(f.File,{className:`size-4`})})}),(0,d.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,d.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2`,children:[(0,d.jsx)(r.s,{tag:`div`,weight:`semibold`,size:`xs`,className:`truncate`,children:s}),g&&(0,d.jsx)(a.t,{variant:`info`,children:D.gallery.primary})]}),(0,d.jsxs)(r.s,{size:`xs`,type:`secondary`,children:[h(D.gallery.itemPosition,{index:i+1,total:k}),` · `,b(O.getSize(e))||D.unknownSize]})]}),!C&&(0,d.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1`,children:[(0,d.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`icon-small`,disabled:g,"aria-label":D.gallery.setPrimary,onClick:()=>u?.(o,e),children:(0,d.jsx)(f.Star,{className:`size-3.5`})}),(0,d.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`icon-small`,disabled:!y,"aria-label":D.gallery.movePrevious,onClick:()=>P(i,i-1),children:(0,d.jsx)(f.ArrowLeft,{className:`size-3.5`})}),(0,d.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`icon-small`,disabled:!S,"aria-label":D.gallery.moveNext,onClick:()=>P(i,i+1),children:(0,d.jsx)(f.ArrowRight,{className:`size-3.5`})}),(0,d.jsx)(n.t,{type:`button`,variant:`error`,buttonStyle:`ghost`,size:`icon-small`,"aria-label":D.gallery.remove,onClick:()=>p?.(o,e),children:(0,d.jsx)(f.Trash2,{className:`size-3.5`})})]})]},o):(0,d.jsxs)(`div`,{className:`media-resource-gallery--item group/gallery overflow-hidden rounded-lg border border-border bg-background shadow-xs transition-colors hover:border-primary/40`,"data-primary":g||void 0,children:[(0,d.jsxs)(`div`,{className:`relative aspect-[4/3] bg-muted`,children:[l?(0,d.jsx)(`img`,{src:l,alt:m,loading:`lazy`,className:`size-full object-cover`}):(0,d.jsx)(`div`,{className:`flex size-full items-center justify-center text-muted-foreground`,children:(0,d.jsx)(f.File,{className:`size-6`})}),(0,d.jsxs)(`div`,{className:`absolute left-2 top-2 flex flex-wrap gap-1`,children:[g&&(0,d.jsx)(a.t,{variant:`info`,children:D.gallery.primary}),(0,d.jsx)(a.t,{variant:`secondary`,children:h(D.gallery.itemPosition,{index:i+1,total:k})})]})]}),(0,d.jsxs)(`div`,{className:`media-resource-gallery--item-body grid gap-2 p-3`,children:[(0,d.jsxs)(`div`,{className:`min-w-0`,children:[(0,d.jsx)(r.s,{tag:`div`,weight:`semibold`,size:`xs`,className:`truncate`,children:s}),(0,d.jsx)(r.s,{size:`xs`,type:`secondary`,children:b(O.getSize(e))||D.unknownSize})]}),!C&&(0,d.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,d.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`icon-small`,disabled:g,"aria-label":D.gallery.setPrimary,onClick:()=>u?.(o,e),children:(0,d.jsx)(f.Star,{className:`size-3.5`})}),(0,d.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`icon-small`,disabled:!y,"aria-label":D.gallery.movePrevious,onClick:()=>P(i,i-1),children:(0,d.jsx)(f.ArrowLeft,{className:`size-3.5`})}),(0,d.jsx)(n.t,{type:`button`,variant:`secondary`,buttonStyle:`ghost`,size:`icon-small`,disabled:!S,"aria-label":D.gallery.moveNext,onClick:()=>P(i,i+1),children:(0,d.jsx)(f.ArrowRight,{className:`size-3.5`})}),(0,d.jsx)(n.t,{type:`button`,variant:`error`,buttonStyle:`ghost`,size:`icon-small`,className:`ml-auto`,"aria-label":D.gallery.remove,onClick:()=>p?.(o,e),children:(0,d.jsx)(f.Trash2,{className:`size-3.5`})})]})]})]},o)}),L()]})]})}exports.MediaLibrary=ce,exports.MediaLibraryCard=F,exports.MediaLibraryDetailPanel=L,exports.MediaLibraryDialog=le,exports.MediaLibraryEmptyState=N,exports.MediaLibraryFooter=R,exports.MediaLibraryTable=I,exports.MediaLibraryToolbar=P,exports.MediaLibraryUploadPanel=re,exports.MediaResourceGallery=de,exports.defaultMediaLibraryStrings=m,exports.formatMediaLibrarySize=b,exports.formatMediaLibraryString=h,exports.getMediaLibraryDimensions=x,exports.resolveMediaLibraryAccessors=y,exports.useMediaLibrary=D;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|