themelia-react-ui 2.0.5 → 2.0.6
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/CHANGELOG.md +76 -0
- package/MIGRATION.md +119 -0
- package/README.md +13 -6
- package/dist/{accordion-B9MHG0cT.js → accordion-0tQUZ20r.js} +7 -7
- package/dist/accordion-0tQUZ20r.js.map +1 -0
- package/dist/{action-menu-Dr8K-ghE.js → action-menu-C0gjzLyE.js} +7 -7
- package/dist/{action-menu-Dr8K-ghE.js.map → action-menu-C0gjzLyE.js.map} +1 -1
- package/dist/{ai-artifact-C58tQcBy.js → ai-artifact-CGGpQryR.js} +172 -157
- package/dist/ai-artifact-CGGpQryR.js.map +1 -0
- package/dist/{app-shell-B_IuNWOo.js → app-shell-EHuuRDGy.js} +5 -5
- package/dist/{app-shell-B_IuNWOo.js.map → app-shell-EHuuRDGy.js.map} +1 -1
- package/dist/{attachment-Dg_69lPS.js → attachment-BCpA4e7i.js} +8 -8
- package/dist/{attachment-Dg_69lPS.js.map → attachment-BCpA4e7i.js.map} +1 -1
- package/dist/{auth-DTkkshS8.js → auth-B0girIk_.js} +15 -15
- package/dist/auth-B0girIk_.js.map +1 -0
- package/dist/{avatar-CeZaFmNH.js → avatar-B9Jnp-T-.js} +3 -3
- package/dist/{avatar-CeZaFmNH.js.map → avatar-B9Jnp-T-.js.map} +1 -1
- package/dist/{badge-xIiV_E7f.js → badge-wWauMgAt.js} +3 -3
- package/dist/{badge-xIiV_E7f.js.map → badge-wWauMgAt.js.map} +1 -1
- package/dist/base/accordion.js +1 -1
- package/dist/base/action-menu.js +1 -1
- package/dist/base/attachment.js +1 -1
- package/dist/base/avatar.js +1 -1
- package/dist/base/badge.js +1 -1
- package/dist/base/batch-action-bar.js +1 -1
- package/dist/base/buttons.js +1 -1
- package/dist/base/cards.js +2 -2
- package/dist/base/carousel.js +3 -3
- package/dist/base/cascader.js +1 -1
- package/dist/base/chart.js +1 -1
- package/dist/base/choice-inputs.js +2 -2
- package/dist/base/code-block.js +1 -1
- package/dist/base/combobox.js +1 -1
- package/dist/base/command.js +1 -1
- package/dist/base/copyable.js +1 -1
- package/dist/base/date-pickers.js +2 -2
- package/dist/base/display.js +6 -6
- package/dist/base/feedback.js +4 -4
- package/dist/base/forms-numeric.js +1 -1
- package/dist/base/forms.js +2 -2
- package/dist/base/inline-edit.js +8 -8
- package/dist/base/item.js +1 -1
- package/dist/base/media-gallery.js +1 -1
- package/dist/base/metadata-list.js +1 -1
- package/dist/base/navigation.js +6 -6
- package/dist/base/popover-menu.js +1 -1
- package/dist/base/popover.js +1 -1
- package/dist/base/qr-code.js +1 -1
- package/dist/base/repeaters.js +195 -188
- package/dist/base/repeaters.js.map +1 -1
- package/dist/base/sheet.js +1 -1
- package/dist/base/sidebar.js +2 -2
- package/dist/base/signature-pad.js +7 -7
- package/dist/base/skeleton.js +1 -1
- package/dist/base/spinner.js +5 -5
- package/dist/base/spinner.js.map +1 -1
- package/dist/base/structure.js +1 -1
- package/dist/base/table.js +1 -1
- package/dist/base/text-inputs.js +2 -2
- package/dist/base/toaster.js +1 -1
- package/dist/base/tree.js +1 -1
- package/dist/base/upload-queue.js +1 -1
- package/dist/base/upload.js +3 -3
- package/dist/base/value-inputs.js +1 -1
- package/dist/{batch-action-bar-Cb8cuvyy.js → batch-action-bar-BoqWIIpV.js} +5 -5
- package/dist/{batch-action-bar-Cb8cuvyy.js.map → batch-action-bar-BoqWIIpV.js.map} +1 -1
- package/dist/blocks/admin.js +17 -17
- package/dist/blocks/ai.js +227 -221
- package/dist/blocks/ai.js.map +1 -1
- package/dist/blocks/analytics/usage-card.js +1 -1
- package/dist/blocks/analytics.js +424 -449
- package/dist/blocks/analytics.js.map +1 -1
- package/dist/blocks/collaboration.js +1 -1
- package/dist/blocks/commerce/receipt.js +1 -1
- package/dist/blocks/commerce.js +225 -220
- package/dist/blocks/commerce.js.map +1 -1
- package/dist/blocks/data-display.js +2 -2
- package/dist/blocks/onboarding.js +5 -5
- package/dist/blocks/planning.js +11 -11
- package/dist/blocks/timelines.js +1 -1
- package/dist/{breadcrumbs-J-K2kl4c.js → breadcrumbs-Bp9Ke7kd.js} +4 -4
- package/dist/breadcrumbs-Bp9Ke7kd.js.map +1 -0
- package/dist/{button-S2Cubiiz.js → button-ChBovTx0.js} +2 -2
- package/dist/{button-S2Cubiiz.js.map → button-ChBovTx0.js.map} +1 -1
- package/dist/{buttons-BedGfygC.js → buttons-DeW0bQeK.js} +6 -6
- package/dist/{buttons-BedGfygC.js.map → buttons-DeW0bQeK.js.map} +1 -1
- package/dist/{cards-rNX1M4Xn.js → cards-CNXnmvV5.js} +8 -8
- package/dist/{cards-rNX1M4Xn.js.map → cards-CNXnmvV5.js.map} +1 -1
- package/dist/{cascader-B1MiqkBq.js → cascader-CrAl9zD5.js} +15 -15
- package/dist/{cascader-B1MiqkBq.js.map → cascader-CrAl9zD5.js.map} +1 -1
- package/dist/{chart-Darg_0Kv.js → chart-I7ROnsl8.js} +5 -5
- package/dist/{chart-Darg_0Kv.js.map → chart-I7ROnsl8.js.map} +1 -1
- package/dist/{checkbox-fflqmODR.js → checkbox-MoyHIAPs.js} +3 -3
- package/dist/{checkbox-fflqmODR.js.map → checkbox-MoyHIAPs.js.map} +1 -1
- package/dist/{choice-inputs-zUgBZfE4.js → choice-inputs-DHGtx0QV.js} +122 -110
- package/dist/choice-inputs-DHGtx0QV.js.map +1 -0
- package/dist/{code-block-BzmM9Eig.js → code-block-BSJyq9e-.js} +7 -7
- package/dist/{code-block-BzmM9Eig.js.map → code-block-BSJyq9e-.js.map} +1 -1
- package/dist/{collapsible-BkAI_XD4.js → collapsible-BzJ91LUG.js} +3 -3
- package/dist/{collapsible-BkAI_XD4.js.map → collapsible-BzJ91LUG.js.map} +1 -1
- package/dist/{collection-content-gDh1v6O4.js → collection-content-CSnwtOTH.js} +3 -3
- package/dist/{collection-content-gDh1v6O4.js.map → collection-content-CSnwtOTH.js.map} +1 -1
- package/dist/{combobox-BEx0vJgF.js → combobox-Bcvu5J8O.js} +11 -10
- package/dist/{combobox-BEx0vJgF.js.map → combobox-Bcvu5J8O.js.map} +1 -1
- package/dist/combobox-C2JiSQPc.js +915 -0
- package/dist/combobox-C2JiSQPc.js.map +1 -0
- package/dist/{command-CrlPIL6m.js → command-9e52NPgK.js} +6 -6
- package/dist/{command-CrlPIL6m.js.map → command-9e52NPgK.js.map} +1 -1
- package/dist/{comments-Dmpp0YIc.js → comments-BsgErEqd.js} +33 -28
- package/dist/comments-BsgErEqd.js.map +1 -0
- package/dist/components/base/choice-inputs/choice-types.d.ts +4 -0
- package/dist/components/base/choice-inputs/pill-radio-group.d.ts +7 -6
- package/dist/components/base/combobox/combobox-field.d.ts +2 -2
- package/dist/components/base/date-pickers/date-picker-internals.d.ts +3 -1
- package/dist/components/base/date-pickers/datepicker.types.d.ts +10 -4
- package/dist/components/base/date-pickers/time-picker.d.ts +17 -3
- package/dist/components/base/feedback/state-display.d.ts +5 -1
- package/dist/components/base/feedback/state-display.strings.d.ts +9 -0
- package/dist/components/base/forms/form-field.d.ts +7 -2
- package/dist/components/base/forms-numeric/coordinates-input.d.ts +4 -1
- package/dist/components/base/forms-numeric/decimal-input.d.ts +2 -2
- package/dist/components/base/forms-numeric/dimensions-input.d.ts +4 -1
- package/dist/components/base/forms-numeric/numeric-composite-field.d.ts +12 -0
- package/dist/components/base/forms-numeric/weight-input.d.ts +6 -1
- package/dist/components/base/navigation/language-switcher.d.ts +12 -4
- package/dist/components/base/repeaters/key-value-editor.d.ts +2 -1
- package/dist/components/base/sidebar/sidebar.d.ts +2 -0
- package/dist/components/base/upload/avatar-upload.d.ts +2 -1
- package/dist/components/base/upload/image-upload.d.ts +2 -1
- package/dist/components/blocks/ai/ai-citation/types.d.ts +2 -0
- package/dist/components/blocks/ai/ai-reasoning/types.d.ts +2 -0
- package/dist/components/blocks/ai/ai-sources/types.d.ts +2 -0
- package/dist/components/blocks/ai/ai-tool-call/types.d.ts +2 -0
- package/dist/components/blocks/analytics/metric/metric.d.ts +4 -0
- package/dist/components/blocks/analytics/metric-comparison/metric-comparison.d.ts +2 -0
- package/dist/components/blocks/analytics/metric-grid/metric-grid.d.ts +4 -5
- package/dist/components/blocks/analytics/types.d.ts +2 -2
- package/dist/components/blocks/commerce/order-status/types.d.ts +4 -0
- package/dist/components/blocks/data-display/empty-state/empty-state.types.d.ts +4 -3
- package/dist/components/features/activities/activities.types.d.ts +18 -11
- package/dist/components/features/activities/hooks/use-activity-resources.d.ts +2 -1
- package/dist/components/features/ai-chat/hooks/use-ai-chat-scroll.d.ts +1 -1
- package/dist/components/features/appointment-calendar/appointment-calendar.d.ts +1 -1
- package/dist/components/features/appointment-calendar/appointment-calendar.types.d.ts +4 -2
- package/dist/components/features/combobox/async-resource-combobox.d.ts +2 -2
- package/dist/components/features/combobox/combobox.d.ts +2 -2
- package/dist/components/features/combobox/hooks/use-combobox-core.d.ts +2 -1
- package/dist/components/features/combobox/hooks/use-combobox-state.d.ts +1 -0
- package/dist/components/features/combobox/hooks/use-load-more.d.ts +1 -0
- package/dist/components/features/combobox/types.d.ts +37 -8
- package/dist/components/features/email-composer/types.d.ts +3 -1
- package/dist/components/features/filters/facets/date-facet.d.ts +4 -2
- package/dist/components/features/filters/facets/range-facet.d.ts +12 -0
- package/dist/components/features/filters/filters.types.d.ts +3 -3
- package/dist/components/features/filters/partials/date-filter-content.d.ts +3 -2
- package/dist/components/features/filters/partials/filter-popover-content.d.ts +4 -2
- package/dist/components/features/filters/partials/range-filter-content.d.ts +12 -0
- package/dist/components/features/filters/utils/filter-utils.d.ts +5 -1
- package/dist/components/features/media-library/hooks/use-media-library.d.ts +1 -1
- package/dist/components/features/media-library/media-library.d.ts +1 -1
- package/dist/components/features/media-library/media-library.strings.d.ts +6 -0
- package/dist/components/features/media-library/media-library.types.d.ts +36 -8
- package/dist/components/features/media-library/partials/media-library-partials.d.ts +3 -3
- package/dist/components/features/mentions/hooks/use-mentions.d.ts +16 -1
- package/dist/components/features/mentions/partials/mention-inline-suggestions.d.ts +5 -1
- package/dist/components/features/mentions/utils/split-html-by-mentions.d.ts +1 -7
- package/dist/components/features/overlays/hooks/use-overlay-visibility.d.ts +2 -2
- package/dist/components/features/products/products.types.d.ts +2 -2
- package/dist/components/features/questionnaire/questionnaire.types.d.ts +3 -0
- package/dist/components/features/resource/resource.d.ts +1 -1
- package/dist/components/features/resource/resource.types.d.ts +2 -0
- package/dist/components/features/rich-text-editor/form-rich-text-editor.d.ts +1 -1
- package/dist/components/features/rich-text-editor/partials/caret-helpers.d.ts +1 -1
- package/dist/components/features/rich-text-editor/partials/editor-field-aria.d.ts +14 -0
- package/dist/components/features/rich-text-editor/partials/rich-text-editor-toolbar.d.ts +3 -1
- package/dist/components/features/rich-text-editor/rich-text-editor.recipes.d.ts +1 -1
- package/dist/components/features/rich-text-editor/rich-text-editor.types.d.ts +17 -3
- package/dist/components/features/schema-form/hooks/use-schema-form.d.ts +5 -1
- package/dist/components/features/schema-form/partials/schema-form-field.d.ts +3 -1
- package/dist/components/features/schema-form/schema-form.utils.d.ts +1 -1
- package/dist/components/features/suggestions/suggestions.types.d.ts +1 -1
- package/dist/components/features/table/data-table.d.ts +1 -1
- package/dist/components/features/table/index.d.ts +1 -0
- package/dist/components/features/table/table-body.d.ts +1 -1
- package/dist/components/features/table/table-helpers.d.ts +6 -3
- package/dist/components/features/table/table.strings.d.ts +3 -0
- package/dist/components/features/table/table.types.d.ts +17 -1
- package/dist/components/layout/header/header.types.d.ts +3 -2
- package/dist/components/layout/layout.types.d.ts +5 -3
- package/dist/components/layout/navigation/side-nav.d.ts +3 -2
- package/dist/components/layout/normalize-layout-path.d.ts +1 -0
- package/dist/components/layout/settings/settings.d.ts +1 -1
- package/dist/components/layout/sidebar/app-sidebar.d.ts +1 -1
- package/dist/components/layout/sidebar/sidebar-navigation-rail.d.ts +3 -1
- package/dist/components/layout/sidebar/sidebar.context.d.ts +1 -0
- package/dist/components/layout/sidebar/sidebar.types.d.ts +2 -0
- package/dist/components/primitives/link.d.ts +3 -2
- package/dist/components/primitives/money.d.ts +1 -1
- package/dist/components/primitives/number.d.ts +1 -1
- package/dist/components/typography/rich-text/rich-text-tree.d.ts +7 -5
- package/dist/{containers-CIxwbZt5.js → containers-CSdc32h9.js} +2 -2
- package/dist/{containers-CIxwbZt5.js.map → containers-CSdc32h9.js.map} +1 -1
- package/dist/{copyable-DIznBqiT.js → copyable-3fdHfMR3.js} +4 -4
- package/dist/{copyable-DIznBqiT.js.map → copyable-3fdHfMR3.js.map} +1 -1
- package/dist/{data-display-BdgCAw8T.js → data-display-Cmj-xZYl.js} +16 -15
- package/dist/data-display-Cmj-xZYl.js.map +1 -0
- package/dist/{date-Cq8ioE4o.js → date-Br0FicVv.js} +4 -4
- package/dist/{date-Cq8ioE4o.js.map → date-Br0FicVv.js.map} +1 -1
- package/dist/date-picker-CyQlFYsP.js +1617 -0
- package/dist/date-picker-CyQlFYsP.js.map +1 -0
- package/dist/date-pickers-tj2MXmXd.js +185 -0
- package/dist/date-pickers-tj2MXmXd.js.map +1 -0
- package/dist/{display-KsZLw9Ov.js → display-CT_N2a3w.js} +7 -7
- package/dist/{display-KsZLw9Ov.js.map → display-CT_N2a3w.js.map} +1 -1
- package/dist/{dropdown-menu-CLs8Lihj.js → dropdown-menu-C08iIugv.js} +6 -6
- package/dist/{dropdown-menu-CLs8Lihj.js.map → dropdown-menu-C08iIugv.js.map} +1 -1
- package/dist/features/activities.js +283 -270
- package/dist/features/activities.js.map +1 -1
- package/dist/features/ai-chat.js +40 -27
- package/dist/features/ai-chat.js.map +1 -1
- package/dist/features/appointment-calendar.js +126 -126
- package/dist/features/appointment-calendar.js.map +1 -1
- package/dist/features/async-preview.js +9 -9
- package/dist/features/combobox.js +1 -1
- package/dist/features/comments.js +1 -1
- package/dist/features/data-view.js +10 -10
- package/dist/features/email-composer.js +24 -19
- package/dist/features/email-composer.js.map +1 -1
- package/dist/features/event-calendar.js +129 -125
- package/dist/features/event-calendar.js.map +1 -1
- package/dist/features/filters.js +2 -2
- package/dist/features/global-search.js +16 -20
- package/dist/features/global-search.js.map +1 -1
- package/dist/features/kanban.js +18 -28
- package/dist/features/kanban.js.map +1 -1
- package/dist/features/map/style.css +15 -0
- package/dist/features/map.js +331 -314
- package/dist/features/map.js.map +1 -1
- package/dist/features/media-library.js +1044 -866
- package/dist/features/media-library.js.map +1 -1
- package/dist/features/mentions.js +2 -2
- package/dist/features/overlays.js +1 -1
- package/dist/features/products.js +978 -964
- package/dist/features/products.js.map +1 -1
- package/dist/features/questionnaire.js +159 -152
- package/dist/features/questionnaire.js.map +1 -1
- package/dist/features/resource-assignment.js +8 -8
- package/dist/features/resource.js +74 -71
- package/dist/features/resource.js.map +1 -1
- package/dist/features/rich-text-editor.js +28 -19
- package/dist/features/rich-text-editor.js.map +1 -1
- package/dist/features/schema-form.js +297 -256
- package/dist/features/schema-form.js.map +1 -1
- package/dist/features/suggestions.js +57 -50
- package/dist/features/suggestions.js.map +1 -1
- package/dist/features/sync.js +3 -3
- package/dist/features/table.js +1 -1
- package/dist/features/theme-tweaker.js +400 -399
- package/dist/features/theme-tweaker.js.map +1 -1
- package/dist/feedback-Dzo1xtAU.js +246 -0
- package/dist/feedback-Dzo1xtAU.js.map +1 -0
- package/dist/{field-affordance-recipes-DWcNcOjh.js → field-affordance-recipes-D6H7tVJi.js} +2 -2
- package/dist/{field-affordance-recipes-DWcNcOjh.js.map → field-affordance-recipes-D6H7tVJi.js.map} +1 -1
- package/dist/field-control-attributes-B6i335wr.js +18 -0
- package/dist/field-control-attributes-B6i335wr.js.map +1 -0
- package/dist/{field-state-recipes-BVA2CWHo.js → field-state-recipes-7sza8QbC.js} +4 -2
- package/dist/{field-state-recipes-BVA2CWHo.js.map → field-state-recipes-7sza8QbC.js.map} +1 -1
- package/dist/{filters-DzgSJpMK.js → filters-Dl80yYtN.js} +763 -605
- package/dist/filters-Dl80yYtN.js.map +1 -0
- package/dist/form-field-CAPdwdnZ.js +74 -0
- package/dist/form-field-CAPdwdnZ.js.map +1 -0
- package/dist/{form-sizing-Bs2qFUeE.js → form-sizing-CgcrUbLU.js} +2 -2
- package/dist/{form-sizing-Bs2qFUeE.js.map → form-sizing-CgcrUbLU.js.map} +1 -1
- package/dist/{forms-C0RGnJTe.js → forms-B3W8CH7-.js} +8 -8
- package/dist/{forms-C0RGnJTe.js.map → forms-B3W8CH7-.js.map} +1 -1
- package/dist/forms-numeric-CwjQJe-O.js +991 -0
- package/dist/forms-numeric-CwjQJe-O.js.map +1 -0
- package/dist/{header-DMMxG__r.js → header-ZIIsRKxP.js} +113 -113
- package/dist/header-ZIIsRKxP.js.map +1 -0
- package/dist/hooks/use-files.d.ts +2 -0
- package/dist/{hooks-DB6CJ4MR.js → hooks-BitHSh-Y.js} +3 -3
- package/dist/{hooks-DB6CJ4MR.js.map → hooks-BitHSh-Y.js.map} +1 -1
- package/dist/{icon-badge-DZF-YjQp.js → icon-badge-npxF1SLX.js} +2 -2
- package/dist/{icon-badge-DZF-YjQp.js.map → icon-badge-npxF1SLX.js.map} +1 -1
- package/dist/index.js +1 -1
- package/dist/{input-CvyDQlY7.js → input-7KAc7XQL.js} +6 -6
- package/dist/{input-CvyDQlY7.js.map → input-7KAc7XQL.js.map} +1 -1
- package/dist/{input-DMBwAZmr.js → input-DIREVYHs.js} +3 -3
- package/dist/{input-DMBwAZmr.js.map → input-DIREVYHs.js.map} +1 -1
- package/dist/{interaction-recipes-XR9ZpVYL.js → interaction-recipes-4wZ2tvfb.js} +2 -2
- package/dist/{interaction-recipes-XR9ZpVYL.js.map → interaction-recipes-4wZ2tvfb.js.map} +1 -1
- package/dist/{item-DjCcM18E.js → item-FfWnaYST.js} +99 -98
- package/dist/item-FfWnaYST.js.map +1 -0
- package/dist/layout/app-shell.js +1 -1
- package/dist/layout/auth.js +1 -1
- package/dist/layout/containers.js +1 -1
- package/dist/layout/header.js +1 -1
- package/dist/layout/hooks.js +1 -1
- package/dist/layout/navigation.js +1 -1
- package/dist/layout/page.js +1 -1
- package/dist/layout/settings.js +1 -1
- package/dist/layout/sidebar.js +2 -2
- package/dist/layout/workspace.js +1 -1
- package/dist/layout.js +11 -11
- package/dist/layout.types-E_GAApzO.js +30 -0
- package/dist/layout.types-E_GAApzO.js.map +1 -0
- package/dist/lib/field-control-attributes.d.ts +11 -0
- package/dist/lib/field-state-recipes.d.ts +2 -0
- package/dist/lib/format.d.ts +1 -0
- package/dist/lib/surface-recipes.d.ts +1 -1
- package/dist/lib/token-merge.generated.d.ts +6 -6
- package/dist/lib/utils.js +1 -1
- package/dist/{media-gallery-C-vChPmE.js → media-gallery-C81DAnKI.js} +6 -6
- package/dist/{media-gallery-C-vChPmE.js.map → media-gallery-C81DAnKI.js.map} +1 -1
- package/dist/{mentions-0_4nWuI-.js → mentions-qOnedSt4.js} +236 -167
- package/dist/mentions-qOnedSt4.js.map +1 -0
- package/dist/message-BJHnn43M.js +135 -0
- package/dist/message-BJHnn43M.js.map +1 -0
- package/dist/{metadata-list-C3MkU-Om.js → metadata-list-XkqZ_UXH.js} +11 -11
- package/dist/{metadata-list-C3MkU-Om.js.map → metadata-list-XkqZ_UXH.js.map} +1 -1
- package/dist/{navigation-DaRjthVk.js → navigation-BgtPJAhi.js} +119 -119
- package/dist/navigation-BgtPJAhi.js.map +1 -0
- package/dist/{navigation-C90-oQFq.js → navigation-Bt-v7rWP.js} +52 -46
- package/dist/navigation-Bt-v7rWP.js.map +1 -0
- package/dist/normalize-layout-path-BmEgg6fu.js +14 -0
- package/dist/normalize-layout-path-BmEgg6fu.js.map +1 -0
- package/dist/{number-CRU3kGuk.js → number-CYqBcrSj.js} +78 -86
- package/dist/number-CYqBcrSj.js.map +1 -0
- package/dist/{overflow-tab-bar-IVFVQFV6.js → overflow-tab-bar-BQCA2Zn2.js} +7 -7
- package/dist/{overflow-tab-bar-IVFVQFV6.js.map → overflow-tab-bar-BQCA2Zn2.js.map} +1 -1
- package/dist/{overlays-BSgCtM2v.js → overlays-CC8zI3Du.js} +264 -260
- package/dist/overlays-CC8zI3Du.js.map +1 -0
- package/dist/{page-DUUKDAjo.js → page-BoQ1VaFJ.js} +13 -13
- package/dist/{page-DUUKDAjo.js.map → page-BoQ1VaFJ.js.map} +1 -1
- package/dist/{page-header-commands-7P3sfE9u.js → page-header-commands-DIKspJfx.js} +4 -4
- package/dist/{page-header-commands-7P3sfE9u.js.map → page-header-commands-DIKspJfx.js.map} +1 -1
- package/dist/{pagination-CgCjElfu.js → pagination-Br8TdV9A.js} +4 -4
- package/dist/{pagination-CgCjElfu.js.map → pagination-Br8TdV9A.js.map} +1 -1
- package/dist/{popover-B85RenIl.js → popover-k8TdUcAt.js} +10 -10
- package/dist/popover-k8TdUcAt.js.map +1 -0
- package/dist/{popover-menu-DlnQ2zlR.js → popover-menu-yn-o0kyA.js} +7 -7
- package/dist/{popover-menu-DlnQ2zlR.js.map → popover-menu-yn-o0kyA.js.map} +1 -1
- package/dist/{popover.recipes-DdiEp0rd.js → popover.recipes-DJ0AkUan.js} +2 -2
- package/dist/{popover.recipes-DdiEp0rd.js.map → popover.recipes-DJ0AkUan.js.map} +1 -1
- package/dist/{portal-recipes-BpsV_iRw.js → portal-recipes-DyUXqUtD.js} +2 -2
- package/dist/{portal-recipes-BpsV_iRw.js.map → portal-recipes-DyUXqUtD.js.map} +1 -1
- package/dist/{primitives-ByWgGUgt.js → primitives-BkkQjYl7.js} +22 -17
- package/dist/primitives-BkkQjYl7.js.map +1 -0
- package/dist/primitives.js +4 -4
- package/dist/{progress-BJhQP9WX.js → progress-DZFXXzPs.js} +4 -4
- package/dist/{progress-BJhQP9WX.js.map → progress-DZFXXzPs.js.map} +1 -1
- package/dist/{receipt-tOc7B3hw.js → receipt-C7LhOg7Q.js} +6 -6
- package/dist/{receipt-tOc7B3hw.js.map → receipt-C7LhOg7Q.js.map} +1 -1
- package/dist/rich-text-BnTzZjIo.js +45 -0
- package/dist/rich-text-BnTzZjIo.js.map +1 -0
- package/dist/rich-text-editor-CAurDwT5.js +1273 -0
- package/dist/rich-text-editor-CAurDwT5.js.map +1 -0
- package/dist/{rich-text-editor-toolbar-laT3tpBT.js → rich-text-editor-toolbar-DbXig7Jk.js} +36 -35
- package/dist/rich-text-editor-toolbar-DbXig7Jk.js.map +1 -0
- package/dist/rich-text-tree-BqyQ_7-R.js +66 -0
- package/dist/rich-text-tree-BqyQ_7-R.js.map +1 -0
- package/dist/{sanitize-html-DsQmI48u.js → sanitize-html-BWkH4dLM.js} +29 -16
- package/dist/sanitize-html-BWkH4dLM.js.map +1 -0
- package/dist/{scroll-area-B0dB2cBi.js → scroll-area-Bj6CRUif.js} +2 -2
- package/dist/{scroll-area-B0dB2cBi.js.map → scroll-area-Bj6CRUif.js.map} +1 -1
- package/dist/{separator-Bb17I4pu.js → separator-B9ewiCGO.js} +2 -2
- package/dist/{separator-Bb17I4pu.js.map → separator-B9ewiCGO.js.map} +1 -1
- package/dist/{separator-Ct_WSWTJ.js → separator-DM6gs2vu.js} +3 -3
- package/dist/{separator-Ct_WSWTJ.js.map → separator-DM6gs2vu.js.map} +1 -1
- package/dist/services/actions.js +1 -1
- package/dist/settings-DZPHgpx4.js +155 -0
- package/dist/settings-DZPHgpx4.js.map +1 -0
- package/dist/{sheet-BGPERY55.js → sheet-C4DHsgLk.js} +6 -6
- package/dist/{sheet-BGPERY55.js.map → sheet-C4DHsgLk.js.map} +1 -1
- package/dist/sidebar-C8BnDwTH.js +709 -0
- package/dist/sidebar-C8BnDwTH.js.map +1 -0
- package/dist/{sidebar-f9gRWXIR.js → sidebar-CmD6a-HK.js} +16 -13
- package/dist/sidebar-CmD6a-HK.js.map +1 -0
- package/dist/{skeleton-BapcJd9C.js → skeleton-DDgdhmu9.js} +5 -5
- package/dist/{skeleton-BapcJd9C.js.map → skeleton-DDgdhmu9.js.map} +1 -1
- package/dist/{smart-card-CW0hjetE.js → smart-card-B6vLxqa_.js} +8 -8
- package/dist/{smart-card-CW0hjetE.js.map → smart-card-B6vLxqa_.js.map} +1 -1
- package/dist/{structure-DuxKl954.js → structure-DZJ2wbAU.js} +2 -2
- package/dist/{structure-DuxKl954.js.map → structure-DZJ2wbAU.js.map} +1 -1
- package/dist/style.css +1 -1
- package/dist/{surface-recipes-BKRVW8Os.js → surface-recipes-C8mNycaY.js} +2 -2
- package/dist/{surface-recipes-BKRVW8Os.js.map → surface-recipes-C8mNycaY.js.map} +1 -1
- package/dist/{table-CFOWY9pQ.js → table-CBonSdTp.js} +534 -486
- package/dist/table-CBonSdTp.js.map +1 -0
- package/dist/{table-B4TE7iOV.js → table-CXSPHH25.js} +75 -71
- package/dist/table-CXSPHH25.js.map +1 -0
- package/dist/{tabs-e7ko9S2o.js → tabs-C4Kr_hCr.js} +50 -49
- package/dist/tabs-C4Kr_hCr.js.map +1 -0
- package/dist/{text-inputs-B1culiSK.js → text-inputs-jdkS3ReG.js} +9 -9
- package/dist/{text-inputs-B1culiSK.js.map → text-inputs-jdkS3ReG.js.map} +1 -1
- package/dist/{timelines-D3Sl9ueq.js → timelines-CoPwdJP0.js} +10 -10
- package/dist/{timelines-D3Sl9ueq.js.map → timelines-CoPwdJP0.js.map} +1 -1
- package/dist/{tooltip-8wz5S_Zr.js → tooltip-31NwIpTo.js} +4 -4
- package/dist/{tooltip-8wz5S_Zr.js.map → tooltip-31NwIpTo.js.map} +1 -1
- package/dist/{tree-CzUJHnFs.js → tree-CeYVzdFE.js} +6 -6
- package/dist/{tree-CzUJHnFs.js.map → tree-CeYVzdFE.js.map} +1 -1
- package/dist/typography/rich-text.js +1 -1
- package/dist/{typography-BQnine1k.js → typography-C7-YMW1S.js} +2 -2
- package/dist/{typography-BQnine1k.js.map → typography-C7-YMW1S.js.map} +1 -1
- package/dist/typography.js +1 -1
- package/dist/{upload-BOW6U2tI.js → upload-Hdm5gObf.js} +303 -291
- package/dist/upload-Hdm5gObf.js.map +1 -0
- package/dist/{upload-queue-qUXn1ykN.js → upload-queue-D0sYPuqo.js} +8 -8
- package/dist/{upload-queue-qUXn1ykN.js.map → upload-queue-D0sYPuqo.js.map} +1 -1
- package/dist/{usage-card-BeSLY0i0.js → usage-card-9s8hLDfn.js} +9 -9
- package/dist/{usage-card-BeSLY0i0.js.map → usage-card-9s8hLDfn.js.map} +1 -1
- package/dist/{utils-B6kKb8jB.js → utils-DhuoqFy4.js} +31 -37
- package/dist/utils-DhuoqFy4.js.map +1 -0
- package/dist/{value-inputs-skdVB2zh.js → value-inputs-D3aPgq9H.js} +15 -15
- package/dist/{value-inputs-skdVB2zh.js.map → value-inputs-D3aPgq9H.js.map} +1 -1
- package/dist/{value-typography-uAmWUAL1.js → value-typography-uSzzG9Gf.js} +32 -26
- package/dist/value-typography-uSzzG9Gf.js.map +1 -0
- package/dist/{workspace-DHeHv0qw.js → workspace-CC8Vchiu.js} +12 -12
- package/dist/{workspace-DHeHv0qw.js.map → workspace-CC8Vchiu.js.map} +1 -1
- package/docs/consumer-skill/examples/edit.tsx +3 -3
- package/docs/consumer-skill/references/agents-md.md +19 -19
- package/docs/consumer-skill/references/analytics.md +15 -0
- package/docs/consumer-skill/references/component-contracts.json +14724 -13057
- package/docs/consumer-skill/references/composition.md +21 -4
- package/docs/consumer-skill/references/design-contract.md +1 -0
- package/docs/consumer-skill/references/installation.md +51 -8
- package/docs/consumer-skill/references/integration.md +24 -1
- package/docs/consumer-skill/references/public-api.json +172 -34
- package/docs/consumer-skill/references/review.md +51 -11
- package/docs/consumer-skill/references/rhf-workflows.md +72 -0
- package/docs/consumer-skill/references/theming.md +7 -2
- package/docs/consumer-skill/references/tokens.json +1 -1
- package/docs/consumer-skill/scripts/composition-policy.mjs +144 -30
- package/docs/consumer-skill/scripts/setup-skills.mjs +46 -9
- package/package.json +4 -2
- package/templates/admin-shell-template.tsx +1 -2
- package/templates/customers-template.tsx +18 -16
- package/dist/accordion-B9MHG0cT.js.map +0 -1
- package/dist/ai-artifact-C58tQcBy.js.map +0 -1
- package/dist/auth-DTkkshS8.js.map +0 -1
- package/dist/breadcrumbs-J-K2kl4c.js.map +0 -1
- package/dist/choice-inputs-zUgBZfE4.js.map +0 -1
- package/dist/combobox-BwzoXFSG.js +0 -884
- package/dist/combobox-BwzoXFSG.js.map +0 -1
- package/dist/comments-Dmpp0YIc.js.map +0 -1
- package/dist/data-display-BdgCAw8T.js.map +0 -1
- package/dist/date-picker-RlIzKom_.js +0 -1551
- package/dist/date-picker-RlIzKom_.js.map +0 -1
- package/dist/date-pickers-DY-CpXS1.js +0 -179
- package/dist/date-pickers-DY-CpXS1.js.map +0 -1
- package/dist/feedback-Dm4izqFn.js +0 -240
- package/dist/feedback-Dm4izqFn.js.map +0 -1
- package/dist/filters-DzgSJpMK.js.map +0 -1
- package/dist/form-field-BriWAXyg.js +0 -63
- package/dist/form-field-BriWAXyg.js.map +0 -1
- package/dist/forms-numeric-DIhghX1Q.js +0 -910
- package/dist/forms-numeric-DIhghX1Q.js.map +0 -1
- package/dist/header-DMMxG__r.js.map +0 -1
- package/dist/item-DjCcM18E.js.map +0 -1
- package/dist/layout.types-Cn7aUzJp.js +0 -20
- package/dist/layout.types-Cn7aUzJp.js.map +0 -1
- package/dist/mentions-0_4nWuI-.js.map +0 -1
- package/dist/message-g8p7eVtN.js +0 -128
- package/dist/message-g8p7eVtN.js.map +0 -1
- package/dist/navigation-C90-oQFq.js.map +0 -1
- package/dist/navigation-DaRjthVk.js.map +0 -1
- package/dist/number-CRU3kGuk.js.map +0 -1
- package/dist/overlays-BSgCtM2v.js.map +0 -1
- package/dist/popover-B85RenIl.js.map +0 -1
- package/dist/primitives-ByWgGUgt.js.map +0 -1
- package/dist/rich-text-Dth5E882.js +0 -78
- package/dist/rich-text-Dth5E882.js.map +0 -1
- package/dist/rich-text-editor-C1fOjBTd.js +0 -1195
- package/dist/rich-text-editor-C1fOjBTd.js.map +0 -1
- package/dist/rich-text-editor-toolbar-laT3tpBT.js.map +0 -1
- package/dist/safe-image-src-C6kQSMBZ.js +0 -17
- package/dist/safe-image-src-C6kQSMBZ.js.map +0 -1
- package/dist/sanitize-html-DsQmI48u.js.map +0 -1
- package/dist/settings-Bar5wiSo.js +0 -167
- package/dist/settings-Bar5wiSo.js.map +0 -1
- package/dist/sidebar-D-JYMMbY.js +0 -686
- package/dist/sidebar-D-JYMMbY.js.map +0 -1
- package/dist/sidebar-f9gRWXIR.js.map +0 -1
- package/dist/table-B4TE7iOV.js.map +0 -1
- package/dist/table-CFOWY9pQ.js.map +0 -1
- package/dist/tabs-e7ko9S2o.js.map +0 -1
- package/dist/upload-BOW6U2tI.js.map +0 -1
- package/dist/utils-B6kKb8jB.js.map +0 -1
- package/dist/value-typography-uAmWUAL1.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sidebar-C8BnDwTH.js","names":["BaseSidebar","PrimitiveSidebarProvider","React","_Fragment","_Fragment","React","_Fragment","_Fragment","React","_Fragment","_Fragment","Text","TooltipContent","TooltipProvider","Tooltip","Stack","DropdownMenuTrigger","DropdownMenuContent","DropdownMenu","ActionMenu","Skeleton","formatInitials","AvatarFallback","Avatar","AvatarImage","Input","CollapsibleContent","CollapsibleTrigger","Collapsible","ScrollArea","useBaseSidebarMenuDensity","useBaseSidebarContext","SidebarMenuSub","SidebarProvider","SidebarHeader","SidebarMenu","SidebarMenuAction","SidebarMenuItem","SidebarGroup","SidebarMenuButton","SidebarContent","SidebarGroupContent","SidebarFooter","SidebarGroupLabel","Sidebar","SidebarMenuSubButton","SidebarMenuSubItem","getCurrentNavigationHref","isPathMatch","toPath","useLayoutLinkRenderer","NavBadge","renderSidebarLink","getNavKey","DynamicIcon","getNavLabel","resolveNavBadge","React$1","Fragment$1","LayoutSidebar","props","cn","surfaceClassName","useLayoutSidebar","useDismissSidebarDrawerOnNavigate","openPanel","openMobile","panelId","previous","useRef","prior","enabled","navigationKey","setOpenMobile","LayoutSidebarProvider","className","defaultSidebarNavigationStrings","label","defaultSidebarWorkspaceDropdownStrings","filterNavigation","query","items","item","children","SidebarGroupedNavigation","stringsProp","inheritedMenuDensity","density","menuDensity","resolvedRenderLink","strings","useStrings","overrides","setOverrides","defaultExpandedItems","key","currentUrl","searchValue","isActive","href","hasActiveChild","isExpanded","expandedItems","allBranchKeys","index","groups","navigationByGroups","id","branchItems","group","currentHref","hasCurrentChild","findBranch","nested","setExpanded","keys","candidate","open","onExpandedItemsChange","renderNode","disabled","ancestorDisabled","branch","ancestor","active","expanded","badge","showBadges","liveBadges","renderChildren","child","depth","childIndex","context","renderItem","labelText","defaultContent","ChevronRight","content","renderItemContent","Row","Item","row","collapsed","target","details","setOpen","groupEntries","emptySlot","SidebarLogo","isCollapsed","collapsedLogo","logo","SidebarNavigationFooter","resolvedMenuDensity","labelNode","ExternalLink","SidebarWorkspaceDropdown","visibleLogo","actions","workspaceLinks","link","triggerElement","ChevronsUpDown","isMobile","contentClassName","linkProps","AppSidebar","navigationLabel","selectedSidebar","closeDrawerOnNavigate","localSearch","setLocalSearch","defaultSearchValue","isLoading","loading","navigationGroups","iconCollapsed","collapsible","searchRef","focusSearchAfterExpansion","input","hasWorkspaceLinks","hasHeaderStart","slots","hasHeaderEnd","branding","workspaceStrings","workspaceContentClassName","logoClassName","defaultHeader","headerContent","resolveSlot","searchInput","searchable","event","onSearchValueChange","Button","Search","header","headerClassName","defaultFooter","footerNavItems","footerLabel","footer","beforeNavigation","afterNavigation","AppSidebarSkeleton","slot","count","groupIdx","i","SidebarNavigationRail","ariaLabel","value","resolvedSide","side","surface","style","TooltipTrigger","onValueChange","NavLabel","SidebarNavigation","defaultSidebarNavigationUserStrings","SidebarNavigationUser","dropdownSide","initials","user","onProfile","User","onSettings","Settings","onLogout","LogOut","renderTrigger","contentClasses","customContent"],"sources":["../src/components/layout/sidebar/sidebar.tsx","../src/components/layout/sidebar/sidebar.context.tsx","../src/components/layout/sidebar/sidebar.types.ts","../src/components/layout/sidebar/components/sidebar-grouped-navigation.tsx","../src/components/layout/sidebar/components/sidebar-logo.tsx","../src/components/layout/sidebar/components/sidebar-navigation-footer.tsx","../src/components/layout/sidebar/components/sidebar-workspace-dropdown.tsx","../src/components/layout/sidebar/app-sidebar.tsx","../src/components/layout/sidebar/sidebar-navigation-rail.tsx","../src/components/layout/sidebar/components/sidebar-navigation.tsx","../src/components/layout/sidebar/components/sidebar-navigation-user.tsx"],"sourcesContent":["/** Sidebar — application-layout composition of the tokenized Base sidebar. */\nimport {\n\tSidebar as BaseSidebar,\n\ttype SidebarProps as BaseSidebarProps,\n} from '../../base/sidebar';\nimport { cn } from '../../../lib/utils';\n\nexport type LayoutSidebarProps = Omit<BaseSidebarProps, 'contained' | 'rootClassName'>;\n\n/**\n * Layout Sidebar keeps the shell inside its parent application frame while\n * delegating responsive behavior, strings, dimensions, and surface tokens to\n * the public Base compound primitive.\n */\nexport function LayoutSidebar({ className, surfaceClassName, ...props }: LayoutSidebarProps) {\n\treturn (\n\t\t<BaseSidebar\n\t\t\tcontained\n\t\t\trootClassName=\"layout-sidebar--component\"\n\t\t\tclassName={className}\n\t\t\tsurfaceClassName={cn('layout-sidebar--surface', surfaceClassName)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n"," \n/** SidebarProvider — layout-scoped wrapper around the shadcn sidebar context. */\nimport { useEffect, useRef } from 'react';\n\nimport { TooltipProvider } from '../../base/display/tooltip';\nimport {\n\tSidebarProvider as PrimitiveSidebarProvider,\n\tuseBaseSidebarContext,\n\ttype SidebarMenuDensity,\n\ttype SidebarProviderProps,\n} from '../../base/sidebar/sidebar';\nimport { cn } from '../../../lib/utils';\n\nexport const useLayoutSidebar = useBaseSidebarContext;\nexport type LayoutSidebarContext = ReturnType<typeof useBaseSidebarContext>;\n\nexport function useDismissSidebarDrawerOnNavigate(\n\t{ openMobile, panelId, setOpenMobile }: LayoutSidebarContext,\n\tnavigationKey: string | undefined,\n\tenabled: boolean,\n) {\n\tconst openPanel = openMobile ? panelId : null;\n\tconst previous = useRef({ navigationKey, openPanel });\n\tuseEffect(() => {\n\t\tconst prior = previous.current;\n\t\tprevious.current = { navigationKey, openPanel };\n\t\t// A route change may intentionally open another panel in the same commit.\n\t\tif (enabled && openPanel !== null && prior.openPanel === openPanel && prior.navigationKey !== navigationKey) {\n\t\t\tsetOpenMobile(false);\n\t\t}\n\t}, [enabled, navigationKey, openPanel, setOpenMobile]);\n}\n\nexport type LayoutSidebarProviderProps = SidebarProviderProps & {\n\t/** Parent-driven drawer adaptation for embedded shells; defaults to viewport. */\n\tadaptTo?: 'viewport' | 'container';\n\t/** Whether the surface starts open, for uncontrolled use. */\n\tdefaultOpen?: boolean;\n\t/** Default row and child-list rhythm. @default 'default' */\n\tmenuDensity?: SidebarMenuDensity;\n\t/** Whether the surface is showing. Controlled. */\n\topen?: boolean;\n\tonOpenChange?: (open: boolean) => void;\n};\n\nexport function LayoutSidebarProvider({\n\tdefaultOpen = true,\n\tmenuDensity = 'default',\n\topen,\n\tonOpenChange,\n\tclassName,\n\tstyle,\n\tchildren,\n\t...props\n}: LayoutSidebarProviderProps) {\n\treturn (\n\t\t<TooltipProvider delayDuration={0}>\n\t\t\t<PrimitiveSidebarProvider\n\t\t\t\tdefaultOpen={defaultOpen}\n\t\t\t\tmenuDensity={menuDensity}\n\t\t\t\topen={open}\n\t\t\t\tonOpenChange={onOpenChange}\n\t\t\t\tstyle={style}\n\t\t\t\tclassName={cn('layout-sidebar-provider--component min-h-svh', className)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</PrimitiveSidebarProvider>\n\t\t</TooltipProvider>\n\t);\n}\n","/**\n * Sidebar types — framework-neutral navigation tree, render contexts, slots,\n * strings, and composition props.\n */\nimport type { ComponentType, ReactNode } from 'react';\n\nimport type {\n\tLayoutIconSource,\n\tLayoutLinkRenderer,\n\tLayoutNavigationAdapter,\n} from '../layout.types';\nimport type { SidebarMenuDensity, SidebarPanelId, SidebarPresentation } from '../../base/sidebar';\nimport type { StringsProp } from '../../../lib/strings';\n\nexport interface SidebarNavItem {\n\t/** Stable identity for rendering, branch expansion and live badges; precedes handle and href. */\n\tid?: string;\n\t/** Display label. */\n\tlabel: ReactNode;\n\t/** Destination for the entry, when it navigates. */\n\thref?: string;\n\thandle?: string;\n\t/** Leading glyph. */\n\ticon?: LayoutIconSource;\n\t/** Disables this entry and every descendant, including branches exposed by search. */\n\tdisabled?: boolean;\n\t/** Chip rendered beside the label. */\n\tbadge?: string | number;\n\tchildren?: SidebarNavItem[];\n\tgroup?: string;\n\texternal?: boolean;\n}\n\nexport type SidebarFlatNavItem = Omit<SidebarNavItem, 'children' | 'group'>;\n\nexport interface SidebarNavigationGroup {\n\t/** Stable identity independent of the displayed group label. */\n\tid: string;\n\t/** Optional section heading. */\n\tlabel?: ReactNode;\n\titems: SidebarNavItem[];\n}\n\nexport type SidebarNavigationGroups = Record<string, SidebarNavItem[]> | readonly SidebarNavigationGroup[];\n\nexport interface SidebarRenderItemContext {\n\tdepth: number;\n\t/** Marks the control as currently engaged. */\n\tactive: boolean;\n\t/** This branch contains the current destination, independently of disclosure state. */\n\tancestor?: boolean;\n\texpanded: boolean;\n\t/** Effective disabled state, including any disabled ancestor. */\n\tdisabled?: boolean;\n\t/** Library-owned child list when this branch is expanded. Place it after the custom row. */\n\tchildren?: ReactNode;\n\t/** Available for custom branch renderers. */\n\tsetExpanded?: (expanded: boolean) => void;\n\t/** Chip rendered beside the label. */\n\tbadge?: string | number;\n\trenderLink: LayoutLinkRenderer;\n}\n\n/** Custom row content retains the library-owned link, disclosure and child list. */\nexport interface SidebarRenderItemContentContext extends Omit<SidebarRenderItemContext, 'children' | 'setExpanded'> {\n\tdefaultContent: ReactNode;\n}\n\nexport interface SidebarSlotContext {\n\tpanelId: SidebarPanelId;\n\tcollapsed: boolean;\n\tpresentation: SidebarPresentation;\n\tisMobile: boolean;\n\trenderLink: LayoutLinkRenderer;\n\t/** Standard content for this region, without its surrounding anatomy. */\n\tdefaultContent: ReactNode;\n}\n\nexport type SidebarSlot = ReactNode | ((context: SidebarSlotContext) => ReactNode);\n\nexport interface SidebarSlots {\n\t/** A node replaces the full header; a callback supplies content inside the padded header. */\n\theader?: SidebarSlot;\n\t/** Pinned content before the standard logo/workspace region, inside its padded header. */\n\theaderStart?: ReactNode;\n\t/** Pinned content after the standard logo/workspace region. Full header replacement wins. */\n\theaderEnd?: ReactNode;\n\tbeforeNavigation?: SidebarSlot;\n\tafterNavigation?: SidebarSlot;\n\t/** Content below the body. */\n\tfooter?: SidebarSlot;\n\tempty?: ReactNode;\n\t/** Shows the pending indicator. */\n\tloading?: ReactNode;\n}\n\nexport interface SidebarExpansionProps {\n\t/** Expanded branch keys from id, handle, href, or a plain-text label. Controlled. */\n\texpandedItems?: readonly string[];\n\t/** Initially expanded branches. Active ancestors also open automatically. */\n\tdefaultExpandedItems?: readonly string[];\n\t/** Called after a disclosure changes; navigation remains independent. */\n\tonExpandedItemsChange?: (keys: string[]) => void;\n}\n\nexport interface SidebarNavigationStrings {\n\tsearch: string;\n\tnoResults: string;\n\texpand: (label: string) => string;\n\tcollapse: (label: string) => string;\n}\nexport const defaultSidebarNavigationStrings: SidebarNavigationStrings = {\n\tsearch: 'Search navigation…',\n\tnoResults: 'No matching pages.',\n\texpand: label => `Expand ${label}`,\n\tcollapse: label => `Collapse ${label}`,\n};\n\nexport interface AppSidebarProps extends LayoutNavigationAdapter, SidebarExpansionProps {\n\t/** Accessible name for the navigation landmark. Defaults to the named panel's role. */\n\t'aria-label'?: string;\n\t/** Enables the library input and local navigation filtering. */\n\tsearchable?: boolean;\n\t/** Search text. Controlled; renderNode labels use their handle as searchable text. */\n\tsearchValue?: string;\n\tdefaultSearchValue?: string;\n\tonSearchValueChange?: (value: string) => void;\n\t/** Navigation search and disclosure copy. */\n\tstrings?: StringsProp<SidebarNavigationStrings>;\n\t/** Row and child-list rhythm. Inherits the sidebar provider. */\n\tmenuDensity?: SidebarMenuDensity;\n\t/** Navigation items grouped by section heading. */\n\tnavigationGroups?: SidebarNavigationGroups;\n\t/** Navigation items pinned to the sidebar footer. */\n\tfooterNavItems?: SidebarFlatNavItem[];\n\t/** Heading above the footer navigation. */\n\tfooterLabel?: ReactNode;\n\t/** Full product mark, shown when expanded. */\n\tlogo?: ReactNode;\n\t/** Compact mark, shown when the sidebar collapses to icons. */\n\tcollapsedLogo?: ReactNode;\n\t/** Links offered in the workspace switcher. */\n\tworkspaceLinks?: WorkspaceLink[];\n\t/** Copy overrides for the workspace switcher. */\n\tworkspaceStrings?: StringsProp<SidebarWorkspaceDropdownStrings>;\n\t/** Merged onto the workspace switcher content. */\n\tworkspaceContentClassName?: string;\n\t/** Merged onto the header region. */\n\theaderClassName?: string;\n\t/** Merged onto the logo. */\n\tlogoClassName?: string;\n\t/** Resolves an item's icon name to a component, keeping navigation data serialisable. */\n\ticonMap?: Record<string, ComponentType<{ className?: string }>>;\n\t/** URL of the active route, used to mark the current item. */\n\tcurrentUrl?: string;\n\t/** Close this already-open drawer when the app commits a new currentUrl. @default true */\n\tcloseDrawerOnNavigate?: boolean;\n\t/** Render item badges and live counts. @default true */\n\tshowBadges?: boolean;\n\t/** Live counts keyed by item id — unread totals and similar. */\n\tliveBadges?: Record<string, string | number>;\n\t/** Shows the pending indicator. */\n\tloading?: boolean;\n\t/** Desktop collapse: icon keeps a compact rail, offcanvas closes the panel, none stays expanded. */\n\tcollapsible?: 'offcanvas' | 'icon' | 'none';\n\t/** Named state owner; inherits the nearest shell region, then primary. */\n\tpanelId?: SidebarPanelId;\n\t/** Transparent docked surfaces share their shell canvas. Drawers remain opaque. */\n\tsurface?: 'default' | 'transparent';\n\t/** Shell treatment. */\n\tvariant?: 'sidebar' | 'floating' | 'inset';\n\t/** Which side of the trigger the surface opens on. */\n\tside?: 'left' | 'right';\n\tclassName?: string;\n\t/** Merged onto the sidebar surface. */\n\tsurfaceClassName?: string;\n\t/** Merged onto the content region. */\n\tcontentClassName?: string;\n\t/** Replaces individual regions of the shell. */\n\tslots?: SidebarSlots;\n\t/** Renders one item through the consumer's router. */\n\trenderItem?: (item: SidebarNavItem, context: SidebarRenderItemContext) => ReactNode;\n\t/** Replaces row content while retaining the link, disclosure, focus and descendants. */\n\trenderItemContent?: (item: SidebarNavItem, context: SidebarRenderItemContentContext) => ReactNode;\n}\n\nexport interface SidebarGroupedNavigationProps extends LayoutNavigationAdapter, SidebarExpansionProps {\n\t/** Optional local filter. Matching ancestors stay visible and open. */\n\tsearchValue?: string;\n\tstrings?: StringsProp<SidebarNavigationStrings>;\n\t/** Row and child-list rhythm. Inherits the sidebar provider. */\n\tmenuDensity?: SidebarMenuDensity;\n\t/** Navigation items grouped by section heading. */\n\tnavigationByGroups: SidebarNavigationGroups;\n\t/** URL of the active route, used to mark the current item. */\n\tcurrentUrl?: string;\n\t/** Resolves an item's icon name to a component, keeping navigation data serialisable. */\n\ticonMap?: Record<string, ComponentType<{ className?: string }>>;\n\t/** Render item badges and live counts. @default true */\n\tshowBadges?: boolean;\n\t/** Live counts keyed by item id — unread totals and similar. */\n\tliveBadges?: Record<string, string | number>;\n\t/** Shown when a group has no items. */\n\temptySlot?: ReactNode;\n\t/** Renders one item through the consumer's router. */\n\trenderItem?: (item: SidebarNavItem, context: SidebarRenderItemContext) => ReactNode;\n\t/** Replaces row content while retaining accessible navigation anatomy. */\n\trenderItemContent?: (item: SidebarNavItem, context: SidebarRenderItemContentContext) => ReactNode;\n\tclassName?: string;\n}\n\nexport interface SidebarFlatNavigationProps extends LayoutNavigationAdapter {\n\t/** Row and child-list rhythm. Inherits the sidebar provider. */\n\tmenuDensity?: SidebarMenuDensity;\n\t/** Entries to render, in order. */\n\titems: SidebarFlatNavItem[];\n\t/** Display label. */\n\tlabel?: ReactNode;\n\t/** URL of the active route, used to mark the current item. */\n\tcurrentUrl?: string;\n\t/** Resolves an item's icon name to a component, keeping navigation data serialisable. */\n\ticonMap?: Record<string, ComponentType<{ className?: string }>>;\n\t/** Render item badges and live counts. @default true */\n\tshowBadges?: boolean;\n\t/** Live counts keyed by item id — unread totals and similar. */\n\tliveBadges?: Record<string, string | number>;\n\t/** Renders one item through the consumer's router. */\n\trenderItem?: (item: SidebarFlatNavItem, context: SidebarRenderItemContext) => ReactNode;\n\t/** Replaces row content while retaining the accessible link and focus treatment. */\n\trenderItemContent?: (item: SidebarFlatNavItem, context: SidebarRenderItemContentContext) => ReactNode;\n\tclassName?: string;\n}\n\nexport interface WorkspaceLink {\n\t/** Display label. */\n\tlabel: ReactNode;\n\turl: string;\n\t/** Leading glyph. */\n\ticon?: ComponentType<{ className?: string }>;\n\texternal?: boolean;\n}\n\nexport interface SidebarWorkspaceDropdownStrings {\n\t/** Display label. */\n\tlabel: string;\n\tselect: string;\n}\n\nexport const defaultSidebarWorkspaceDropdownStrings: SidebarWorkspaceDropdownStrings = {\n\tlabel: 'Workspace',\n\tselect: 'Select workspace',\n};\n\nexport interface SidebarWorkspaceDropdownProps extends LayoutNavigationAdapter {\n\t/** Full product mark, shown when expanded. */\n\tlogo: ReactNode;\n\t/** Compact mark, shown when the sidebar collapses to icons. */\n\tcollapsedLogo?: ReactNode;\n\t/** Links offered in the workspace switcher. */\n\tworkspaceLinks: WorkspaceLink[];\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<SidebarWorkspaceDropdownStrings>;\n\t/** Merged onto the content region. */\n\tcontentClassName?: string;\n}\n\nexport type SidebarFooterNavigationItem = SidebarFlatNavItem;\n\nexport interface SidebarNavigationFooterProps extends LayoutNavigationAdapter {\n\t/** Row and child-list rhythm. Inherits the sidebar provider. */\n\tmenuDensity?: SidebarMenuDensity;\n\t/** Entries to render, in order. */\n\titems: SidebarFooterNavigationItem[];\n\t/** Display label. */\n\tlabel?: ReactNode;\n\t/** URL of the active route, used to mark the current item. */\n\tcurrentUrl?: string;\n\t/** Resolves an item's icon name to a component, keeping navigation data serialisable. */\n\ticonMap?: Record<string, ComponentType<{ className?: string }>>;\n\t/** Render item badges and live counts. @default true */\n\tshowBadges?: boolean;\n\t/** Live counts keyed by item id — unread totals and similar. */\n\tliveBadges?: Record<string, string | number>;\n\tclassName?: string;\n}\n","/** Grouped navigation uses public disclosure and sidebar anatomy; routing stays app-owned. */\nimport * as React from 'react';\nimport { ChevronRight } from 'lucide-react';\nimport { Collapsible, CollapsibleContent, CollapsibleTrigger } from '../../../base/display/collapsible';\nimport {\n\tSidebarGroup, SidebarGroupLabel, SidebarMenu, SidebarMenuAction,\n\tSidebarMenuButton, SidebarMenuItem, SidebarMenuSub, SidebarMenuSubButton,\n\tSidebarMenuSubItem,\n} from '../../../base/sidebar';\nimport { Text } from '../../../typography';\nimport { useBaseSidebarMenuDensity } from '../../../base/sidebar/sidebar';\nimport { cn } from '../../../../lib/utils';\nimport { useStrings } from '../../../../lib/strings';\nimport { useLayoutLinkRenderer } from '../../hooks';\nimport { useLayoutSidebar } from '../sidebar.context';\nimport { defaultSidebarNavigationStrings, type SidebarGroupedNavigationProps, type SidebarNavItem, type SidebarNavigationGroup, type SidebarRenderItemContext } from '../sidebar.types';\nimport { DynamicIcon, getCurrentNavigationHref, getNavKey, getNavLabel, isPathMatch, NavBadge, renderSidebarLink, resolveNavBadge, toPath } from '../sidebar.utils';\n\nfunction filterNavigation(items: SidebarNavItem[], query: string): SidebarNavItem[] {\n\tif (!query) return items;\n\treturn items.flatMap(item => {\n\t\tconst label = typeof item.label === 'string' || typeof item.label === 'number' ? String(item.label) : item.handle ?? '';\n\t\tif (`${label} ${item.handle ?? ''}`.toLocaleLowerCase().includes(query)) return [item];\n\t\tconst children = filterNavigation(item.children ?? [], query);\n\t\treturn children.length ? [{ ...item, children }] : [];\n\t});\n}\n\nexport function SidebarGroupedNavigation({\n\tnavigationByGroups, currentUrl = '/', iconMap = {}, liveBadges,\n\tshowBadges = true, renderLink, emptySlot, renderItem, renderItemContent, className, menuDensity,\n\texpandedItems, defaultExpandedItems = [], onExpandedItemsChange, searchValue = '', strings: stringsProp,\n}: SidebarGroupedNavigationProps) {\n\tconst inheritedMenuDensity = useBaseSidebarMenuDensity();\n\tconst { setOpen, collapsed } = useLayoutSidebar();\n\tconst density = menuDensity ?? inheritedMenuDensity ?? 'default';\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink });\n\tconst strings = useStrings(defaultSidebarNavigationStrings, stringsProp);\n\tconst [overrides, setOverrides] = React.useState<Record<string, { open: boolean; route: string }>>(() => Object.fromEntries(defaultExpandedItems.map(key => [key, { open: true, route: currentUrl }])));\n\tconst query = searchValue.trim().toLocaleLowerCase();\n\tconst isActive = (href?: string): boolean => !!href && isPathMatch(currentUrl, toPath(href));\n\tconst hasActiveChild = (items?: SidebarNavItem[]): boolean => !!items?.some(item => isActive(item.href) || hasActiveChild(item.children));\n\tconst isExpanded = (item: SidebarNavItem, key: string) => expandedItems !== undefined\n\t\t? expandedItems.includes(key)\n\t\t: overrides[key]?.route === currentUrl ? overrides[key]!.open : !!overrides[key]?.open || isActive(item.href) || hasActiveChild(item.children);\n\tconst allBranchKeys = (items: SidebarNavItem[]): string[] => items.flatMap((item, index) => item.children?.length ? [String(getNavKey(item, index)), ...allBranchKeys(item.children)] : []);\n\tconst groups: readonly SidebarNavigationGroup[] = Array.isArray(navigationByGroups) ? navigationByGroups : Object.entries(navigationByGroups).map(([id, items]) => ({ id, label: id.startsWith('_') ? undefined : id, items }));\n\tconst branchItems = groups.flatMap(group => group.items);\n\tconst currentHref = getCurrentNavigationHref(currentUrl, branchItems);\n\tconst hasCurrentChild = (items: readonly SidebarNavItem[]): boolean => items.some(item => (!!item.href && item.href === currentHref) || hasCurrentChild(item.children ?? []));\n\tconst findBranch = (key: string, items: SidebarNavItem[]): SidebarNavItem | undefined => {\n\t\tfor (const [index, item] of items.entries()) {\n\t\t\tif (String(getNavKey(item, index)) === key) return item;\n\t\t\tconst nested = findBranch(key, item.children ?? []);\n\t\t\tif (nested) return nested;\n\t\t}\n\t};\n\tconst setExpanded = (key: string, open: boolean) => {\n\t\tif (query) return;\n\t\tconst keys = new Set(expandedItems ?? allBranchKeys(branchItems).filter(candidate => {\n\t\t\tconst item = findBranch(candidate, branchItems);\n\t\t\treturn item && isExpanded(item, candidate);\n\t\t}));\n\t\tif (open) keys.add(key); else keys.delete(key);\n\t\tif (expandedItems === undefined) setOverrides(previous => ({ ...previous, [key]: { open, route: currentUrl } }));\n\t\tonExpandedItemsChange?.([...keys]);\n\t};\n\n\tconst renderNode = (item: SidebarNavItem, depth: number, index: number, ancestorDisabled = false): React.ReactNode => {\n\t\tconst key = String(getNavKey(item, index));\n\t\tconst disabled = ancestorDisabled || !!item.disabled;\n\t\tconst children = item.children ?? [];\n\t\tconst branch = children.length > 0;\n\t\tconst ancestor = branch && hasCurrentChild(children);\n\t\tconst active = !!item.href && item.href === currentHref && !ancestor;\n\t\tconst expanded = branch && (!!query || isExpanded(item, key));\n\t\tconst badge = showBadges ? resolveNavBadge(item.handle, item.badge, liveBadges, item.id) : undefined;\n\t\tconst renderChildren = () => <SidebarMenuSub>{children.map((child, childIndex) => renderNode(child, depth + 1, childIndex, disabled))}</SidebarMenuSub>;\n\t\tconst context: SidebarRenderItemContext = {\n\t\t\tdepth, active, ancestor, expanded, disabled, badge, renderLink: resolvedRenderLink,\n\t\t\tsetExpanded: branch ? open => { if (!disabled) setExpanded(key, open); } : undefined,\n\t\t\t// A complete row override may intentionally omit descendants. Resolve\n\t\t\t// their renderers only when the consumer requests the child-list seam.\n\t\t\tget children() { return branch && expanded ? renderChildren() : undefined; },\n\t\t};\n\t\tif (renderItem) return <React.Fragment key={key}>{renderItem(item, context)}</React.Fragment>;\n\t\tconst label = getNavLabel(item);\n\t\tconst labelText = typeof label === 'string' || typeof label === 'number' ? String(label) : item.handle ?? '';\n\t\tconst defaultContent = <>\n\t\t\t{!!item.icon && <DynamicIcon icon={item.icon} iconMap={iconMap} className=\"size-icon\" aria-hidden=\"true\" />}\n\t\t\t<Text tag=\"span\" weight=\"inherit\" className=\"min-w-0 flex-1 truncate text-start text-inherit\">{label}</Text>\n\t\t\t{badge !== undefined && <NavBadge value={badge} size={depth ? 'sm' : 'md'} />}\n\t\t\t{branch && !item.href && <ChevronRight className={cn('size-icon shrink-0 transition-transform rtl:rotate-180', expanded && 'rotate-90 rtl:rotate-90')} aria-hidden=\"true\" />}\n\t\t</>;\n\t\tconst content = renderItemContent ? renderItemContent(item, { depth, active, ancestor, expanded, disabled, badge, renderLink: resolvedRenderLink, defaultContent }) : defaultContent;\n\t\tconst Row = depth ? SidebarMenuSubButton : SidebarMenuButton;\n\t\tconst Item = depth ? SidebarMenuSubItem : SidebarMenuItem;\n\t\tconst row = <Row\n\t\t\t{...(depth === 0 ? { tooltip: { children: label } } : {})}\n\t\t\tactive={active || (depth === 0 && collapsed && ancestor)}\n\t\t\tdata-ancestor={ancestor || undefined}\n\t\t\trender={item.href && !disabled ? renderSidebarLink(resolvedRenderLink, item, content, undefined, active) as React.ReactElement : <button type=\"button\" disabled={disabled} />}\n\t\t\taria-disabled={disabled || undefined}\n\t\t\tclassName={cn('w-full', disabled && 'cursor-not-allowed opacity-50')}\n\t\t>{content}</Row>;\n\t\tif (!branch) return <Item key={key}>{row}</Item>;\n\t\treturn <Collapsible key={key} open={expanded} onOpenChange={(open, details) => {\n\t\t\t// Icon rails hide child lists. Reveal the shell and retain an open\n\t\t\t// branch rather than toggling descendants that remain inaccessible.\n\t\t\tconst target = details.event.target;\n\t\t\tif (depth === 0 && !item.href && target instanceof Element && target.closest('[data-collapsible=\"icon\"]')) {\n\t\t\t\tsetOpen(true);\n\t\t\t\tsetExpanded(key, true);\n\t\t\t} else setExpanded(key, open);\n\t\t}} disabled={disabled || !!query} render={<Item />}>\n\t\t\t{item.href ? <>\n\t\t\t\t{row}\n\t\t\t\t{/* Inset so its chevron lines up with the row-content chevrons and counts of sibling rows. */}\n\t\t\t\t<CollapsibleTrigger render={<SidebarMenuAction className=\"end-space-sm!\" />} aria-label={expanded ? strings.collapse(labelText) : strings.expand(labelText)}>\n\t\t\t\t\t<ChevronRight className={cn('size-icon shrink-0 transition-transform rtl:rotate-180', expanded && 'rotate-90 rtl:rotate-90')} aria-hidden=\"true\" />\n\t\t\t\t</CollapsibleTrigger>\n\t\t\t</> : <CollapsibleTrigger render={row} />}\n\t\t\t<CollapsibleContent className=\"group-data-[collapsible=icon]:hidden\">{renderChildren()}</CollapsibleContent>\n\t\t</Collapsible>;\n\t};\n\tconst groupEntries = groups.map(group => ({ ...group, items: filterNavigation(group.items, query) })).filter(group => group.items.length);\n\tif (!groupEntries.length) return emptySlot ?? (query ? <SidebarGroup><Text type=\"secondary\">{strings.noResults}</Text></SidebarGroup> : null);\n\t// Group labels and one shared gap separate groups; no rule between them.\n\treturn <div className={cn('sidebar-grouped-navigation--component flex flex-col gap-space-xl', className)}>\n\t\t{groupEntries.map(({id, label, items}) => <SidebarGroup key={id} className=\"py-0\">\n\t\t\t{label != null && <SidebarGroupLabel>{label}</SidebarGroupLabel>}\n\t\t\t<SidebarMenu menuDensity={density}>{items.map((item, index) => renderNode(item, 0, index))}</SidebarMenu>\n\t\t</SidebarGroup>)}\n\t</div>;\n}\n","/** SidebarLogo — hides its logo content when the sidebar is icon-collapsed. */\nimport type { ReactNode } from 'react';\n\nimport { cn } from '../../../../lib/utils';\n\nimport { useLayoutSidebar } from '../sidebar.context';\n\nexport interface SidebarLogoProps {\n\t/** Full product mark, shown when expanded. */\n\tlogo: ReactNode;\n\t/** Compact mark, shown when the sidebar collapses to icons. */\n\tcollapsedLogo?: ReactNode;\n\tclassName?: string;\n}\n\nexport function SidebarLogo({ logo, collapsedLogo = null, className }: SidebarLogoProps) {\n\tconst { collapsed: isCollapsed } = useLayoutSidebar();\n\tconst content = isCollapsed ? collapsedLogo : logo;\n\tif (!content) return null;\n\treturn <div className={cn('sidebar-logo--component flex min-h-action min-w-0 items-center', className)}>{content}</div>;\n}\n","/** SidebarNavigationFooter — secondary footer navigation using renderLink. */\nimport { ExternalLink } from 'lucide-react';\n\nimport {\n\tSidebarGroup,\n\tSidebarGroupContent,\n\tSidebarGroupLabel,\n\tSidebarMenu,\n\tSidebarMenuButton,\n\tSidebarMenuItem,\n} from '../../../base/sidebar';\nimport { Text } from '../../../typography';\nimport { useBaseSidebarMenuDensity } from '../../../base/sidebar/sidebar';\nimport { cn } from '../../../../lib/utils';\n\nimport { useLayoutLinkRenderer } from '../../hooks';\nimport type { SidebarNavigationFooterProps } from '../sidebar.types';\nimport {\n\tDynamicIcon,\n\tgetCurrentNavigationHref,\n\tgetNavKey,\n\tgetNavLabel,\n\tNavBadge,\n\trenderSidebarLink,\n\tresolveNavBadge,\n} from '../sidebar.utils';\n\nexport function SidebarNavigationFooter({\n\titems,\n\tlabel,\n\tcurrentUrl = '/',\n\ticonMap = {},\n\tliveBadges,\n\tshowBadges = true,\n\trenderLink,\n\tclassName,\n\tmenuDensity,\n}: SidebarNavigationFooterProps) {\n\tconst inheritedMenuDensity = useBaseSidebarMenuDensity();\n\tconst resolvedMenuDensity = menuDensity ?? inheritedMenuDensity ?? 'default';\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink });\n\tconst currentHref = getCurrentNavigationHref(currentUrl, items);\n\n\treturn (\n\t\t<SidebarGroup className={cn('sidebar-navigation-footer--component py-0', className)}>\n\t\t\t{!!label && <SidebarGroupLabel>{label}</SidebarGroupLabel>}\n\t\t\t<SidebarGroupContent>\n\t\t\t\t<SidebarMenu menuDensity={resolvedMenuDensity}>\n\t\t\t\t\t{items.map((item, index) => {\n\t\t\t\t\t\tconst active = !!item.href && item.href === currentHref;\n\t\t\t\t\t\tconst badge = showBadges ? resolveNavBadge(item.handle, item.badge, liveBadges, item.id) : undefined;\n\t\t\t\t\t\tconst labelNode = getNavLabel(item);\n\t\t\t\t\t\tconst content = (\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t{!!item.icon && <DynamicIcon icon={item.icon} iconMap={iconMap} className=\"size-icon\" aria-hidden=\"true\" />}\n\t\t\t\t\t\t\t\t{typeof labelNode === 'string' || typeof labelNode === 'number' ? (\n\t\t\t\t\t\t\t\t\t<Text tag=\"span\" weight=\"inherit\" className=\"min-w-0 flex-1 truncate text-start text-inherit\">{labelNode}</Text>\n\t\t\t\t\t\t\t\t) : labelNode}\n\t\t\t\t\t\t\t\t{badge !== undefined && <NavBadge value={badge} />}\n\t\t\t\t\t\t\t\t{!!item.external && <ExternalLink className=\"ms-auto size-icon-sm shrink-0\" aria-hidden=\"true\" />}\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<SidebarMenuItem key={getNavKey(item, index)}>\n\t\t\t\t\t\t\t\t<SidebarMenuButton\n\t\t\t\t\t\t\t\t\tactive={active}\n\t\t\t\t\t\t\t\t\trender={\n\t\t\t\t\t\t\t\t\t\titem.href && !item.disabled\n\t\t\t\t\t\t\t\t\t\t\t? renderSidebarLink(resolvedRenderLink, item, content, undefined, active) as React.ReactElement\n\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\ttooltip={{ children: labelNode }}\n\t\t\t\t\t\t\t\t\tdisabled={item.disabled}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{content}\n\t\t\t\t\t\t\t\t</SidebarMenuButton>\n\t\t\t\t\t\t\t</SidebarMenuItem>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</SidebarMenu>\n\t\t\t</SidebarGroupContent>\n\t\t</SidebarGroup>\n\t);\n}\n","/** SidebarWorkspaceDropdown — workspace selector using consumer link rendering. */\nimport { ChevronsUpDown, ExternalLink } from 'lucide-react';\n\nimport { ActionMenu, type ActionMenuAction } from '../../../base/action-menu';\n\nimport { Text } from '../../../typography';\nimport {\n\tSidebarMenu,\n\tSidebarMenuButton,\n\tSidebarMenuItem,\n} from '../../../base/sidebar';\nimport { useStrings } from '../../../../lib/strings';\nimport { Stack } from '../../../base/structure';\nimport { cn } from '../../../../lib/utils';\n\nimport { useLayoutLinkRenderer } from '../../hooks';\nimport {\n\tdefaultSidebarWorkspaceDropdownStrings,\n\ttype SidebarWorkspaceDropdownProps,\n} from '../sidebar.types';\nimport { useLayoutSidebar } from '../sidebar.context';\n\nexport function SidebarWorkspaceDropdown({\n\tlogo,\n\tcollapsedLogo,\n\tworkspaceLinks,\n\trenderLink,\n\tstrings: stringsProp,\n\tcontentClassName,\n}: SidebarWorkspaceDropdownProps) {\n\tconst strings = useStrings(defaultSidebarWorkspaceDropdownStrings, stringsProp);\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink });\n\tconst { collapsed: isCollapsed, isMobile } = useLayoutSidebar();\n\tconst visibleLogo = isCollapsed ? (collapsedLogo ?? logo) : logo;\n\n\t// Every entry is an external workspace link, captioned as one group.\n\tconst actions: ActionMenuAction[] = workspaceLinks.map((link) => ({\n\t\tid: link.url,\n\t\tlabel: link.label,\n\t\ticon: link.icon ?? ExternalLink,\n\t\thref: link.url,\n\t\texternal: link.external ?? true,\n\t\tgroup: strings.label,\n\t}));\n\n\tconst triggerElement = (\n\t\t<SidebarMenuButton\n\t\t\tsize={isCollapsed ? 'md' : 'lg'}\n\t\t\taria-label={strings.select}\n\t\t\tclassName=\"group-data-[collapsible=icon]:p-0! data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground\"\n\t\t>\n\t\t\t<Stack direction=\"horizontal\" align=\"center\" gap=\"md\" wrap={false} className=\"min-w-0 flex-1\">\n\t\t\t\t{visibleLogo}\n\t\t\t\t{!isCollapsed && (\n\t\t\t\t\t<Text tag=\"span\" size=\"xs\" className=\"sr-only\">\n\t\t\t\t\t\t{strings.select}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t</Stack>\n\t\t\t{!isCollapsed && <ChevronsUpDown className=\"ml-auto size-icon shrink-0\" aria-hidden=\"true\" />}\n\t\t</SidebarMenuButton>\n\t);\n\n\treturn (\n\t\t<SidebarMenu className=\"sidebar-workspace-dropdown--component\">\n\t\t\t<SidebarMenuItem>\n\t\t\t\t<ActionMenu\n\t\t\t\t\tactions={actions}\n\t\t\t\t\talign=\"start\"\n\t\t\t\t\tside={isMobile ? \"bottom\" : \"right\"}\n\t\t\t\t\tcontentClassName={cn('min-w-56', contentClassName)}\n\t\t\t\t\twidth=\"w-auto\"\n\t\t\t\t\tcloseOnSelect\n\t\t\t\t\tpreserveOrder\n\t\t\t\t\trenderTrigger={triggerElement}\n\t\t\t\t\trenderLink={({ children, ...linkProps }) =>\n\t\t\t\t\t\tresolvedRenderLink({ ...linkProps, children: children ?? null }) as React.ReactElement\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</SidebarMenuItem>\n\t\t</SidebarMenu>\n\t);\n}\n","/**\n * AppSidebar — opinionated assembly of logo/header, grouped navigation, and\n * footer links. Consumers still own framework routing through `renderLink`.\n */\nimport * as React from 'react';\nimport { Search } from 'lucide-react';\n\nimport { Button } from '../../base/buttons';\nimport { ScrollArea } from '../../base/display/scroll-area';\nimport { Skeleton } from '../../base/skeleton';\nimport { Input } from '../../base/text-inputs';\nimport {\n\tSidebarContent,\n\tSidebarFooter,\n\tSidebarGroup,\n\tSidebarHeader,\n\tSidebarMenu,\n\tSidebarMenuItem,\n} from '../../base/sidebar';\nimport { cn } from '../../../lib/utils';\nimport { useStrings } from '../../../lib/strings';\nimport { defaultSidebarNavigationStrings } from './sidebar.types';\nimport { useLayoutLinkRenderer } from '../hooks';\nimport { useDismissSidebarDrawerOnNavigate, useLayoutSidebar } from './sidebar.context';\n\nimport { SidebarGroupedNavigation } from './components/sidebar-grouped-navigation';\nimport { SidebarLogo } from './components/sidebar-logo';\nimport { SidebarNavigationFooter } from './components/sidebar-navigation-footer';\nimport { SidebarWorkspaceDropdown } from './components/sidebar-workspace-dropdown';\nimport { LayoutSidebar } from './sidebar';\nimport type { AppSidebarProps, SidebarSlot, SidebarSlotContext } from './sidebar.types';\n\nexport function AppSidebar({\n\tnavigationGroups,\n\t'aria-label': navigationLabel,\n\tfooterNavItems = [],\n\tfooterLabel,\n\tlogo,\n\tcollapsedLogo,\n\tworkspaceLinks = [],\n\tworkspaceStrings,\n\tworkspaceContentClassName,\n\theaderClassName,\n\tlogoClassName,\n\ticonMap,\n\tcurrentUrl = '/',\n\tcloseDrawerOnNavigate = true,\n\tliveBadges,\n\tshowBadges = true,\n\tmenuDensity,\n\trenderLink,\n\tloading,\n\tcollapsible = 'icon',\n\tpanelId,\n\tsurface,\n\tvariant = 'sidebar',\n\tside,\n\tclassName,\n\tsurfaceClassName,\n\tcontentClassName,\n\tslots,\n\trenderItem,\n\trenderItemContent,\n\tsearchable = false,\n\tsearchValue,\n\tdefaultSearchValue = '',\n\tonSearchValueChange,\n\tstrings: stringsProp,\n\texpandedItems,\n\tdefaultExpandedItems,\n\tonExpandedItemsChange,\n}: AppSidebarProps) {\n\tconst strings = useStrings(defaultSidebarNavigationStrings, stringsProp);\n\tconst selectedSidebar = useLayoutSidebar(panelId);\n\tuseDismissSidebarDrawerOnNavigate(selectedSidebar, currentUrl, closeDrawerOnNavigate);\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink });\n\tconst [localSearch, setLocalSearch] = React.useState(defaultSearchValue);\n\tconst query = searchValue ?? localSearch;\n\tconst isLoading = loading || !navigationGroups;\n\tconst iconCollapsed = collapsible === 'icon' && selectedSidebar.collapsed;\n\tconst searchRef = React.useRef<HTMLInputElement | null>(null);\n\tconst focusSearchAfterExpansion = React.useRef(false);\n\tReact.useLayoutEffect(() => {\n\t\tif (!focusSearchAfterExpansion.current || iconCollapsed) return;\n\t\tconst input = searchRef.current;\n\t\tif (!input) return;\n\t\tfocusSearchAfterExpansion.current = false;\n\t\tinput.focus({ preventScroll: true });\n\t}, [iconCollapsed]);\n\tconst hasWorkspaceLinks = workspaceLinks.length > 0;\n\tconst hasHeaderStart = slots?.headerStart != null && slots.headerStart !== false;\n\tconst hasHeaderEnd = slots?.headerEnd != null && slots.headerEnd !== false;\n\tconst context = {\n\t\tpanelId: selectedSidebar.panelId,\n\t\tcollapsed: selectedSidebar.collapsed,\n\t\tpresentation: selectedSidebar.presentation,\n\t\tisMobile: selectedSidebar.isMobile,\n\t\trenderLink: resolvedRenderLink,\n\t};\n\tconst branding = !!logo && (hasWorkspaceLinks ? <SidebarWorkspaceDropdown\n\t\t\tlogo={logo} collapsedLogo={collapsedLogo} workspaceLinks={workspaceLinks}\n\t\t\tstrings={workspaceStrings} contentClassName={workspaceContentClassName}\n\t\t\trenderLink={resolvedRenderLink}\n\t\t/> : <SidebarLogo logo={logo} collapsedLogo={collapsedLogo} className={logoClassName} />);\n\tconst defaultHeader = (!!logo || !!slots?.headerStart || !!slots?.headerEnd) ? <>\n\t\t{slots?.headerStart}\n\t\t{branding}\n\t\t{slots?.headerEnd}\n\t</> : null;\n\t// Node headers retain the original full-replacement seam. Callback headers\n\t// receive content only, so the library owns their padded, pinned region.\n\tconst headerContent = resolveSlot(slots?.header, context, defaultHeader);\n\tconst searchInput = searchable ? <div data-slot=\"sidebar-search\" className=\"relative min-w-0\">\n\t\t<div className={cn('min-w-0',iconCollapsed && 'invisible')} aria-hidden={iconCollapsed || undefined} inert={iconCollapsed || undefined}>\n\t\t<Input ref={searchRef} className=\"sidebar-input--component\" data-slot=\"sidebar-input\" data-sidebar=\"input\" aria-label={strings.search} placeholder={strings.search} value={query} disabled={isLoading} onChange={event => {\n\t\t\tif (searchValue === undefined) setLocalSearch(event.target.value);\n\t\t\tonSearchValueChange?.(event.target.value);\n\t\t}} />\n\t\t</div>\n\t\t<Button iconOnly icon={Search} tone=\"secondary\" buttonStyle=\"ghost\" aria-label={strings.search} withTooltip={strings.search}\n\t\t\tclassName={cn('absolute inset-0 h-full w-full shrink-0', !iconCollapsed && 'hidden')} disabled={isLoading} onClick={() => {\n\t\t\t\tfocusSearchAfterExpansion.current = true;\n\t\t\t\tselectedSidebar.setOpen(true);\n\t\t\t}} />\n\t</div> : null;\n\tconst replacesHeader = slots?.header != null && typeof slots.header !== 'function';\n\tconst header = replacesHeader\n\t\t? <>{headerContent}{searchInput && <SidebarHeader>{searchInput}</SidebarHeader>}</>\n\t\t: logo && slots?.header == null ? <SidebarHeader className={cn('gap-0 p-0', headerClassName)}>\n\t\t\t{hasHeaderStart && <div className=\"p-surface-xs\">{slots?.headerStart}</div>}\n\t\t\t<div data-slot=\"sidebar-brand\" className=\"box-border flex h-shell-header min-w-0 shrink-0 items-center border-b border-border px-surface-xs\">\n\t\t\t\t{branding}\n\t\t\t</div>\n\t\t\t{(hasHeaderEnd || searchInput) && <div className=\"flex min-w-0 flex-col gap-space-md p-surface-xs\">\n\t\t\t\t{slots?.headerEnd}\n\t\t\t\t{searchInput}\n\t\t\t</div>}\n\t\t</SidebarHeader> : ((headerContent != null && headerContent !== false) || searchInput) ? <SidebarHeader className={cn('gap-space-md', headerClassName)}>\n\t\t\t{headerContent}\n\t\t\t{searchInput}\n\t\t</SidebarHeader> : null;\n\tconst defaultFooter = footerNavItems.length ? <SidebarNavigationFooter\n\t\tclassName=\"p-0\" items={footerNavItems} label={footerLabel} currentUrl={currentUrl}\n\t\ticonMap={iconMap} liveBadges={liveBadges} showBadges={showBadges}\n\t\tmenuDensity={menuDensity} renderLink={resolvedRenderLink}\n\t/> : null;\n\tconst footer = resolveSlot(slots?.footer, context, defaultFooter);\n\tconst beforeNavigation = resolveSlot(slots?.beforeNavigation, context, null);\n\tconst afterNavigation = resolveSlot(slots?.afterNavigation, context, null);\n\n\treturn (\n\t\t<LayoutSidebar panelId={panelId} surface={surface} collapsible={collapsible} variant={variant} side={side} className={cn('app-sidebar--component h-full min-h-0', className)} surfaceClassName={surfaceClassName}>\n\t\t\t{header}\n\n\t\t\t<SidebarContent className={cn(\"overflow-hidden\", contentClassName)}>\n\t\t\t\t<ScrollArea className={cn('min-h-0 flex-1 pb-surface-xs', !searchable && 'pt-surface-xs')}>\n\t\t\t\t\t{/* One group gap separates slot groups and navigation groups alike. */}\n\t\t\t\t\t<nav aria-label={navigationLabel ?? (selectedSidebar.panelId === 'secondary' ? 'Contextual navigation' : selectedSidebar.panelId === 'aside' ? 'Supporting navigation' : 'Primary navigation')} className=\"app-sidebar--navigation flex flex-col gap-space-xl\">\n\t\t\t\t\t\t{beforeNavigation}\n\t\t\t\t\t\t{isLoading ? (\n\t\t\t\t\t\t\tslots?.loading ?? <AppSidebarSkeleton />\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<SidebarGroupedNavigation\n\t\t\t\t\t\t\t\tnavigationByGroups={navigationGroups}\n\t\t\t\t\t\t\t\tcurrentUrl={currentUrl}\n\t\t\t\t\t\t\t\tsearchValue={query}\n\t\t\t\t\t\t\t\tstrings={strings}\n\t\t\t\t\t\t\t\texpandedItems={expandedItems}\n\t\t\t\t\t\t\t\tdefaultExpandedItems={defaultExpandedItems}\n\t\t\t\t\t\t\t\tonExpandedItemsChange={onExpandedItemsChange}\n\t\t\t\t\t\t\t\ticonMap={iconMap}\n\t\t\t\t\t\t\t\tliveBadges={liveBadges}\n\t\t\t\t\t\t\t\tshowBadges={showBadges}\n\t\t\t\t\t\t\t\tmenuDensity={menuDensity}\n\t\t\t\t\t\t\t\trenderLink={renderLink}\n\t\t\t\t\t\t\t\temptySlot={slots?.empty}\n\t\t\t\t\t\t\t\trenderItem={renderItem}\n\t\t\t\t\t\t\t\trenderItemContent={renderItemContent}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{afterNavigation}\n\t\t\t\t\t</nav>\n\t\t\t\t</ScrollArea>\n\t\t\t</SidebarContent>\n\n\t\t\t{footer != null && footer !== false && <SidebarFooter>{footer}</SidebarFooter>}\n\t\t</LayoutSidebar>\n\t);\n}\n\nfunction resolveSlot(slot: SidebarSlot | undefined, context: Omit<SidebarSlotContext, 'defaultContent'>, defaultContent: React.ReactNode) {\n\treturn typeof slot === 'function' ? slot({ ...context, defaultContent }) : slot ?? defaultContent;\n}\n\nfunction AppSidebarSkeleton() {\n\tconst groups = [9, 3, 4, 2, 1];\n\n\treturn (\n\t\t<div className=\"flex flex-col gap-space-xl\">\n\t\t\t{groups.map((count, groupIdx) => (\n\t\t\t\t<SidebarGroup key={groupIdx} className=\"py-0\">\n\t\t\t\t\t<SidebarMenu>\n\t\t\t\t\t\t{Array.from({ length: count }, (_, i) => (\n\t\t\t\t\t\t\t<SidebarMenuItem key={i}>\n\t\t\t\t\t\t\t\t<div className=\"flex h-action-sm items-center gap-space-md px-control-sm\">\n\t\t\t\t\t\t\t\t\t<Skeleton className=\"size-icon shrink-0 rounded-radius-xs\" />\n\t\t\t\t\t\t\t\t\t<Skeleton\n\t\t\t\t\t\t\t\t\t\tclassName=\"h-3.5 rounded-radius-xs\"\n\t\t\t\t\t\t\t\t\t\tstyle={{ width: `${60 + ((groupIdx * 7 + i * 13) % 40)}px` }}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</SidebarMenuItem>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</SidebarMenu>\n\t\t\t\t</SidebarGroup>\n\t\t\t))}\n\t\t</div>\n\t);\n}\n","/** Primary area navigation, distinct from SidebarRail's collapse affordance. */\nimport type { ComponentType, CSSProperties, ReactElement } from 'react';\n\nimport { ScrollArea } from '../../base/display/scroll-area';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../../base/display/tooltip';\nimport { SidebarContent, SidebarFooter, SidebarGroup, SidebarHeader, SidebarMenu, SidebarMenuButton, SidebarMenuItem } from '../../base/sidebar';\nimport { Text } from '../../typography';\nimport { cn } from '../../../lib/utils';\nimport { useLayoutLinkRenderer } from '../hooks';\nimport type { LayoutIconSource, LayoutNavigationAdapter } from '../layout.types';\nimport { LayoutSidebar, type LayoutSidebarProps } from './sidebar';\nimport { useDismissSidebarDrawerOnNavigate, useLayoutSidebar } from './sidebar.context';\nimport type { SidebarFlatNavItem, SidebarSlot, SidebarSlotContext } from './sidebar.types';\nimport { DynamicIcon, getCurrentNavigationHref, getNavKey, renderSidebarLink } from './sidebar.utils';\n\nexport type SidebarNavigationRailItem = SidebarFlatNavItem & {\n\t/** Informative area icon; the full label remains accessible. */\n\ticon: LayoutIconSource;\n} & ({ id: string } | { handle: string });\n\nexport interface SidebarNavigationRailProps extends Omit<LayoutSidebarProps, 'children' | 'collapsible'>, LayoutNavigationAdapter {\n\titems: readonly SidebarNavigationRailItem[];\n\t/** Selected item id (or its legacy handle). Controlled. */\n\tvalue?: string;\n\tonValueChange?: (id: string) => void;\n\t/** Used for native current-route indication when value is omitted. */\n\tcurrentUrl?: string;\n\t/** Close this already-open drawer when currentUrl, or the fallback value, changes. @default true */\n\tcloseDrawerOnNavigate?: boolean;\n\ticonMap?: Record<string, ComponentType<{ className?: string }>>;\n\t/** Structural content seams. Header/footer stay pinned; navigation additions scroll. The rail owns each region's insets. */\n\tslots?: {\n\t\theader?: SidebarSlot;\n\t\tbeforeNavigation?: SidebarSlot;\n\t\tafterNavigation?: SidebarSlot;\n\t\tfooter?: SidebarSlot;\n\t};\n\t/** The rail stays visible by default; offcanvas makes the entire rail hideable. */\n\tcollapsible?: 'none' | 'offcanvas';\n\t/** Accessible name for this navigation region. @default 'Primary navigation' */\n\t'aria-label'?: string;\n}\n\nexport function SidebarNavigationRail({\n\titems, value, onValueChange, currentUrl, closeDrawerOnNavigate = true, renderLink, iconMap, slots,\n\tcollapsible = 'none', 'aria-label': ariaLabel = 'Primary navigation',\n\tclassName, surface = 'default', surfaceClassName, style, side, panelId, ...props\n}: SidebarNavigationRailProps) {\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink });\n\tconst selectedSidebar = useLayoutSidebar(panelId);\n\tuseDismissSidebarDrawerOnNavigate(selectedSidebar, currentUrl ?? value, closeDrawerOnNavigate);\n\tconst resolvedSide = side ?? selectedSidebar.side;\n\tconst currentHref = value === undefined && currentUrl ? getCurrentNavigationHref(currentUrl, items) : undefined;\n\tconst context: SidebarSlotContext = {\n\t\tpanelId: selectedSidebar.panelId,\n\t\tcollapsed: selectedSidebar.collapsed,\n\t\tpresentation: selectedSidebar.presentation,\n\t\tisMobile: selectedSidebar.isMobile,\n\t\trenderLink: resolvedRenderLink,\n\t\tdefaultContent: null,\n\t};\n\tconst resolveSlot = (slot: SidebarSlot | undefined) => typeof slot === 'function' ? slot(context) : slot;\n\tconst header = resolveSlot(slots?.header);\n\tconst footer = resolveSlot(slots?.footer);\n\tconst beforeNavigation = resolveSlot(slots?.beforeNavigation);\n\tconst afterNavigation = resolveSlot(slots?.afterNavigation);\n\treturn <LayoutSidebar\n\t\t{...props}\n\t\tpanelId={panelId}\n\t\tside={side}\n\t\tcollapsible={collapsible}\n\t\tsurface={surface}\n\t\tsurfaceClassName={cn(\n\t\t\t'border-border', resolvedSide === 'left' ? 'border-r' : 'border-l',\n\t\t\tsurface === 'default' && 'bg-background text-foreground',\n\t\t\tsurfaceClassName,\n\t\t)}\n\t\tclassName={cn('sidebar-navigation-rail--component', className)}\n\t\tstyle={{ '--sidebar-width': 'var(--shell-navigation-rail-width)', ...style } as CSSProperties}\n\t>\n\t\t{header != null && header !== false && <SidebarHeader className=\"items-center px-space-md pt-surface-xs pb-0\">{header}</SidebarHeader>}\n\t\t<SidebarContent className=\"overflow-hidden\">\n\t\t\t<ScrollArea className=\"min-h-0 flex-1\">\n\t\t\t\t<nav aria-label={ariaLabel} className={cn('flex flex-col gap-space-xl pb-surface-xs', header != null && header !== false ? 'pt-space-xs' : 'pt-surface-xs')}>\n\t\t\t\t\t{beforeNavigation}\n\t\t\t\t\t<SidebarGroup className=\"items-center px-space-md py-0\">\n\t\t\t\t\t\t<SidebarMenu menuDensity=\"comfortable\" className=\"items-center gap-space-xs\">\n\t\t\t\t\t\t\t{items.map(item => {\n\t\t\t\t\t\t\t\tconst id = String(getNavKey(item));\n\t\t\t\t\t\t\t\tconst active = value !== undefined ? value === id : !!item.href && item.href === currentHref;\n\t\t\t\t\t\t\t\tconst content = <>\n\t\t\t\t\t\t\t\t\t<DynamicIcon icon={item.icon} iconMap={iconMap} className=\"size-icon\" aria-hidden=\"true\" />\n\t\t\t\t\t\t\t\t\t<Text tag=\"span\" className=\"sr-only\">{item.label}</Text>\n\t\t\t\t\t\t\t\t</>;\n\t\t\t\t\t\t\t\treturn <SidebarMenuItem key={id}>\n\t\t\t\t\t\t\t\t\t<Tooltip disabled={item.disabled}>\n\t\t\t\t\t\t\t\t\t\t<TooltipTrigger render={<SidebarMenuButton\n\t\t\t\t\t\t\t\t\t\t\tsize=\"md\"\n\t\t\t\t\t\t\t\t\t\t\tactive={active}\n\t\t\t\t\t\t\t\t\t\t\tdisabled={item.disabled}\n\t\t\t\t\t\t\t\t\t\t\taria-current={item.href && active ? 'page' : undefined}\n\t\t\t\t\t\t\t\t\t\t\taria-pressed={!item.href ? active : undefined}\n\t\t\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t'relative size-action shrink-0 justify-center p-0 text-foreground hover:bg-accent hover:text-accent-foreground active:bg-accent active:text-accent-foreground data-active:bg-accent data-active:text-accent-foreground data-[active=true]:bg-accent data-[active=true]:text-accent-foreground',\n\t\t\t\t\t\t\t\t\t\t\t\tactive && 'before:pointer-events-none before:absolute before:inset-y-space-md before:start-0 before:w-space-2xs before:rounded-full before:bg-foreground',\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\trender={item.href && !item.disabled ? renderSidebarLink(resolvedRenderLink, item, content, undefined, active) as ReactElement : <button type=\"button\" />}\n\t\t\t\t\t\t\t\t\t\t\tonClickCapture={event => {\n\t\t\t\t\t\t\t\t\t\t\t\t// Observe a normal activation while preserving native and router\n\t\t\t\t\t\t\t\t\t\t\t\t// navigation, including modified clicks that open another tab.\n\t\t\t\t\t\t\t\t\t\t\t\tif (item.disabled || event.defaultPrevented || event.button !== 0 || event.ctrlKey || event.metaKey || event.altKey || event.shiftKey) return;\n\t\t\t\t\t\t\t\t\t\t\t\tonValueChange?.(id);\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t>{content}</SidebarMenuButton>} />\n\t\t\t\t\t\t\t\t\t\t<TooltipContent side={resolvedSide === 'left' ? 'right' : 'left'}>{item.label}</TooltipContent>\n\t\t\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t\t</SidebarMenuItem>;\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t</SidebarMenu>\n\t\t\t\t\t</SidebarGroup>\n\t\t\t\t\t{afterNavigation}\n\t\t\t\t</nav>\n\t\t\t</ScrollArea>\n\t\t</SidebarContent>\n\t\t{footer != null && footer !== false && <SidebarFooter className=\"items-center px-space-md py-surface-xs\">{footer}</SidebarFooter>}\n\t</LayoutSidebar>;\n}\n","/** SidebarNavigation — flat, framework-neutral sidebar nav list. */\nimport * as React from 'react';\n\nimport {\n\tSidebarGroup,\n\tSidebarGroupLabel,\n\tSidebarMenu,\n\tSidebarMenuButton,\n\tSidebarMenuItem,\n} from '../../../base/sidebar';\nimport { Text } from '../../../typography';\nimport { useBaseSidebarMenuDensity } from '../../../base/sidebar/sidebar';\nimport { cn } from '../../../../lib/utils';\n\nimport { useLayoutLinkRenderer } from '../../hooks';\nimport type { SidebarFlatNavigationProps, SidebarFlatNavItem, SidebarRenderItemContext } from '../sidebar.types';\nimport {\n\tDynamicIcon,\n\tgetCurrentNavigationHref,\n\tgetNavKey,\n\tgetNavLabel,\n\tNavBadge,\n\trenderSidebarLink,\n\tresolveNavBadge,\n} from '../sidebar.utils';\n\nfunction NavLabel({ item }: { item: SidebarFlatNavItem }) {\n\tconst label = getNavLabel(item);\n\treturn (\n\t\t<Text tag=\"span\" weight=\"inherit\" className=\"min-w-0 flex-1 truncate text-start text-inherit\">\n\t\t\t{label}\n\t\t</Text>\n\t);\n}\n\nexport function SidebarNavigation({\n\titems,\n\tlabel = 'Platform',\n\tcurrentUrl = '/',\n\ticonMap = {},\n\tliveBadges,\n\tshowBadges = true,\n\trenderLink,\n\trenderItem,\n\trenderItemContent,\n\tclassName,\n\tmenuDensity,\n}: SidebarFlatNavigationProps) {\n\tconst inheritedMenuDensity = useBaseSidebarMenuDensity();\n\tconst resolvedMenuDensity = menuDensity ?? inheritedMenuDensity ?? 'default';\n\tconst resolvedRenderLink = useLayoutLinkRenderer({ renderLink });\n\tconst currentHref = getCurrentNavigationHref(currentUrl, items);\n\n\treturn (\n\t\t<SidebarGroup className={cn('sidebar-navigation--component py-0', className)}>\n\t\t\t{!!label && <SidebarGroupLabel>{label}</SidebarGroupLabel>}\n\t\t\t<SidebarMenu menuDensity={resolvedMenuDensity}>\n\t\t\t\t{items.map((item, index) => {\n\t\t\t\t\tconst active = !!item.href && item.href === currentHref;\n\t\t\t\t\tconst badge = showBadges ? resolveNavBadge(item.handle, item.badge, liveBadges, item.id) : undefined;\n\t\t\t\t\tconst context: SidebarRenderItemContext = {\n\t\t\t\t\t\tdepth: 0,\n\t\t\t\t\t\tactive,\n\t\t\t\t\t\texpanded: false,\n\t\t\t\t\t\tdisabled: !!item.disabled,\n\t\t\t\t\t\tbadge,\n\t\t\t\t\t\trenderLink: resolvedRenderLink,\n\t\t\t\t\t};\n\t\t\t\t\tconst labelNode = getNavLabel(item);\n\n\t\t\t\t\tif (renderItem) {\n\t\t\t\t\t\treturn <React.Fragment key={getNavKey(item, index)}>{renderItem(item, context)}</React.Fragment>;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst defaultContent = (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{!!item.icon && <DynamicIcon icon={item.icon} iconMap={iconMap} className=\"size-icon\" aria-hidden=\"true\" />}\n\t\t\t\t\t\t\t<NavLabel item={item} />\n\t\t\t\t\t\t\t{badge !== undefined && <NavBadge value={badge} />}\n\t\t\t\t\t\t</>\n\t\t\t\t\t);\n\n\t\t\t\t\tconst content = renderItemContent ? renderItemContent(item, { ...context, defaultContent }) : defaultContent;\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<SidebarMenuItem key={getNavKey(item, index)}>\n\t\t\t\t\t\t\t<SidebarMenuButton\n\t\t\t\t\t\t\t\tactive={active}\n\t\t\t\t\t\t\t\trender={\n\t\t\t\t\t\t\t\t\titem.href && !item.disabled\n\t\t\t\t\t\t\t\t\t\t? renderSidebarLink(resolvedRenderLink, item, content, undefined, active) as React.ReactElement\n\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttooltip={{ children: labelNode }}\n\t\t\t\t\t\t\t\tdisabled={item.disabled}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\titem.disabled && 'cursor-not-allowed opacity-50',\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{content}\n\t\t\t\t\t\t\t</SidebarMenuButton>\n\t\t\t\t\t\t</SidebarMenuItem>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</SidebarMenu>\n\t\t</SidebarGroup>\n\t);\n}\n"," \n/** SidebarNavigationUser — user profile dropdown for sidebar footer. */\nimport { ChevronsUpDown, LogOut, Settings, User } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { ActionMenu, type ActionMenuAction } from '../../../base/action-menu';\nimport { Avatar, AvatarFallback, AvatarImage } from '../../../base/avatar';\nimport {\n\tDropdownMenu,\n\tDropdownMenuContent,\n\tDropdownMenuTrigger,\n} from '../../../base/navigation/dropdown-menu';\nimport { formatInitials } from '../../../primitives/initials-format';\nimport { Text } from '../../../typography';\nimport {\n\tSidebarMenu,\n\tSidebarMenuButton,\n\tSidebarMenuItem,\n} from '../../../base/sidebar';\nimport { useStrings, type StringsProp } from '../../../../lib/strings';\nimport { cn } from '../../../../lib/utils';\n\nimport type { LayoutUser } from '../../layout.types';\nimport { useLayoutSidebar } from '../sidebar.context';\nimport { Stack } from '../../../base/structure';\n\nexport interface SidebarNavigationUserStrings {\n\tprofile: string;\n\tsettings: string;\n\tlogout: string;\n}\n\nexport const defaultSidebarNavigationUserStrings: SidebarNavigationUserStrings = {\n\tprofile: 'Profile',\n\tsettings: 'Settings',\n\tlogout: 'Log out',\n};\n\nexport interface SidebarNavigationUserProps {\n\t/** The signed-in user shown in the menu. */\n\tuser: LayoutUser;\n\t/** Extra content appended inside the menu. */\n\tcustomContent?: ReactNode;\n\tonProfile?: () => void;\n\tonSettings?: () => void;\n\tonLogout?: () => void;\n\t/** Overrides this surface's own copy. */\n\tstrings?: StringsProp<SidebarNavigationUserStrings>;\n\t/** Replaces the default trigger element. */\n\trenderTrigger?: (user: LayoutUser) => ReactNode;\n}\n\nexport function SidebarNavigationUser({\n\tuser,\n\tcustomContent,\n\tonProfile,\n\tonSettings,\n\tonLogout,\n\tstrings: stringsProp,\n\trenderTrigger,\n}: SidebarNavigationUserProps) {\n\tconst strings = useStrings(defaultSidebarNavigationUserStrings, stringsProp);\n\tconst { collapsed, isMobile } = useLayoutSidebar();\n\tconst dropdownSide = isMobile || !collapsed ? 'bottom' : 'right';\n\tconst initials = formatInitials(user.name, { strategy: 'first-words' });\n\n\t// Profile and settings together; sign-out held apart by a captionless rule.\n\tconst actions: ActionMenuAction[] = [\n\t\t...(onProfile ? [{ id: 'profile', label: strings.profile, icon: User, onClick: onProfile }] : []),\n\t\t...(onSettings ? [{ id: 'settings', label: strings.settings, icon: Settings, onClick: onSettings }] : []),\n\t\t...(onLogout\n\t\t\t? [{\n\t\t\t\tid: 'logout',\n\t\t\t\tlabel: strings.logout,\n\t\t\t\ticon: LogOut,\n\t\t\t\tonClick: onLogout,\n\t\t\t\t...(onProfile || onSettings ? { group: true as const } : null),\n\t\t\t}]\n\t\t\t: []),\n\t];\n\n\tconst triggerElement = (\n\t\t<SidebarMenuButton\n\t\t\tsize={collapsed ? 'md' : 'lg'}\n\t\t\taria-label={user.name}\n\t\t\ttooltip={user.name}\n\t\t\tclassName={cn('group text-sidebar-accent-foreground data-[state=open]:bg-sidebar-accent', collapsed && 'justify-center group-data-[collapsible=icon]:p-0!')}\n\t\t>\n\t\t\t{renderTrigger?.(user) ?? (\n\t\t\t\t<>\n\t\t\t\t\t<Stack direction=\"horizontal\" align=\"center\" gap={collapsed ? 'none' : 'md'} className={cn('min-w-0 flex-1', collapsed && 'justify-center')}>\n\t\t\t\t\t\t<Avatar className=\"size-avatar shrink-0 rounded-full\">\n\t\t\t\t\t\t\t{!!user.avatar && <AvatarImage src={user.avatar} alt={user.name} />}\n\t\t\t\t\t\t\t<AvatarFallback className=\"bg-sidebar-accent text-xs text-sidebar-accent-foreground\">\n\t\t\t\t\t\t\t\t{initials}\n\t\t\t\t\t\t\t</AvatarFallback>\n\t\t\t\t\t\t</Avatar>\n\t\t\t\t\t\t{!collapsed && <div className=\"flex flex-1 flex-col items-start justify-center overflow-hidden\">\n\t\t\t\t\t\t\t<Text type=\"inherit\" weight=\"medium\" className=\"w-full truncate\">{user.name}</Text>\n\t\t\t\t\t\t\t{!!user.email && <Text size=\"xs\" type=\"secondary\" className=\"w-full truncate\">{user.email}</Text>}\n\t\t\t\t\t\t</div>}\n\t\t\t\t\t</Stack>\n\t\t\t\t\t{!collapsed && <ChevronsUpDown className=\"ml-auto size-icon shrink-0\" aria-hidden=\"true\" />}\n\t\t\t\t</>\n\t\t\t)}\n\t\t</SidebarMenuButton>\n\t);\n\n\tconst contentClasses = 'w-(--anchor-width) min-w-56 rounded-surface';\n\n\treturn (\n\t\t<SidebarMenu className=\"sidebar-navigation-user--component\">\n\t\t\t<SidebarMenuItem>\n\t\t\t\t{customContent ? (\n\t\t\t\t\t// A replaced body is a plain dropdown, not a command list, so it\n\t\t\t\t\t// keeps the primitive rather than bending ActionMenu around it.\n\t\t\t\t\t<DropdownMenu>\n\t\t\t\t\t\t<DropdownMenuTrigger render={triggerElement} />\n\t\t\t\t\t\t<DropdownMenuContent\n\t\t\t\t\t\t\tclassName={contentClasses}\n\t\t\t\t\t\t\talign=\"end\"\n\t\t\t\t\t\t\tside={dropdownSide}\n\t\t\t\t\t\t\tsideOffset={4}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{customContent}\n\t\t\t\t\t\t</DropdownMenuContent>\n\t\t\t\t\t</DropdownMenu>\n\t\t\t\t) : (\n\t\t\t\t\t<ActionMenu\n\t\t\t\t\t\tactions={actions}\n\t\t\t\t\t\talign=\"end\"\n\t\t\t\t\t\tside={dropdownSide}\n\t\t\t\t\t\tcontentClassName={contentClasses}\n\t\t\t\t\t\twidth=\"w-auto\"\n\t\t\t\t\t\tcloseOnSelect\n\t\t\t\t\t\trenderTrigger={triggerElement}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</SidebarMenuItem>\n\t\t</SidebarMenu>\n\t);\n}\n"],"mappings":"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"}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { d as e, i as t, r as n } from "./ui-provider-C-74NVLc.js";
|
|
3
3
|
import { useStrings as r } from "./lib/strings.js";
|
|
4
|
-
import { t as i } from "./utils-
|
|
4
|
+
import { t as i } from "./utils-DhuoqFy4.js";
|
|
5
5
|
import { t as a } from "./affordance-geometry.generated-P-aVJisu.js";
|
|
6
|
-
import { a as o, c as s, i as c, s as l, t as u } from "./sheet-
|
|
7
|
-
import { t as d } from "./separator-
|
|
8
|
-
import { c as f, o as p } from "./typography-
|
|
6
|
+
import { a as o, c as s, i as c, s as l, t as u } from "./sheet-C4DHsgLk.js";
|
|
7
|
+
import { t as d } from "./separator-B9ewiCGO.js";
|
|
8
|
+
import { c as f, o as p } from "./typography-C7-YMW1S.js";
|
|
9
9
|
import { t as m } from "./focus-recipes-B653VaLq.js";
|
|
10
10
|
import { t as h } from "./motion-recipes-DitYv6P2.js";
|
|
11
|
-
import { a as g, o as _, s as v } from "./tooltip-
|
|
12
|
-
import { t as y } from "./button-
|
|
13
|
-
import { a as b } from "./surface-recipes-
|
|
14
|
-
import { r as x } from "./skeleton-
|
|
15
|
-
import { f as S, y as C } from "./form-sizing-
|
|
16
|
-
import { t as w } from "./input-
|
|
11
|
+
import { a as g, o as _, s as v } from "./tooltip-31NwIpTo.js";
|
|
12
|
+
import { t as y } from "./button-ChBovTx0.js";
|
|
13
|
+
import { a as b } from "./surface-recipes-C8mNycaY.js";
|
|
14
|
+
import { r as x } from "./skeleton-DDgdhmu9.js";
|
|
15
|
+
import { f as S, y as C } from "./form-sizing-CgcrUbLU.js";
|
|
16
|
+
import { t as w } from "./input-DIREVYHs.js";
|
|
17
17
|
import { n as T, r as E, t as D } from "./navigation-row-recipes-BGVLvU_O.js";
|
|
18
18
|
import * as O from "react";
|
|
19
19
|
import { Fragment as k, jsx as A, jsxs as j } from "react/jsx-runtime";
|
|
@@ -412,7 +412,7 @@ function pe({ className: e, ...t }) {
|
|
|
412
412
|
return /* @__PURE__ */ A("div", {
|
|
413
413
|
"data-slot": "sidebar-menu-badge",
|
|
414
414
|
"data-sidebar": "menu-badge",
|
|
415
|
-
className: i("text-sidebar-foreground peer-hover/menu-button:text-sidebar-accent-foreground peer-data-active/menu-button:text-sidebar-accent-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 rounded-radius px-space-xs text-xs font-medium peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 flex items-center justify-center tabular-nums select-none group-data-[collapsible=icon]:hidden", e),
|
|
415
|
+
className: i("box-border", "text-sidebar-foreground peer-hover/menu-button:text-sidebar-accent-foreground peer-data-active/menu-button:text-sidebar-accent-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 rounded-radius px-space-xs text-xs font-medium peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 flex items-center justify-center tabular-nums select-none group-data-[collapsible=icon]:hidden", e),
|
|
416
416
|
...t
|
|
417
417
|
});
|
|
418
418
|
}
|
|
@@ -993,9 +993,12 @@ function $e({ className: e, children: t, ...n }) {
|
|
|
993
993
|
}
|
|
994
994
|
var et = U;
|
|
995
995
|
function tt() {
|
|
996
|
+
return H() !== null;
|
|
997
|
+
}
|
|
998
|
+
function nt() {
|
|
996
999
|
return O.useContext(Z);
|
|
997
1000
|
}
|
|
998
1001
|
//#endregion
|
|
999
|
-
export { Be as C,
|
|
1002
|
+
export { Be as C, nt as D, et as E, tt as O, Ae as S, _e as T, Ke as _, Re as a, Ee as b, Ne as c, Ve as d, Ue as f, Ge as g, He as h, Ie as i, U as k, ze as l, Ze as m, Fe as n, Le as o, We as p, Pe as r, $e as s, je as t, Je as u, Qe as v, Xe as w, Ye as x, qe as y };
|
|
1000
1003
|
|
|
1001
|
-
//# sourceMappingURL=sidebar-
|
|
1004
|
+
//# sourceMappingURL=sidebar-CmD6a-HK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sidebar-CmD6a-HK.js","names":["React","SidebarProvider","SidebarTrigger","_Fragment","SidebarRail","SidebarInset","SidebarInput","SidebarHeader","SidebarFooter","SidebarSeparator","SidebarContent","SidebarGroup","SidebarGroupLabel","SidebarGroupAction","SidebarGroupContent","SidebarMenu","SidebarMenuItem","SidebarMenuButton","React","SidebarMenuAction","SidebarMenuBadge","SidebarMenuSub","SidebarMenuSubItem","SidebarMenuSubButton","React","SidebarProviderPrimitive","useSidebarPrimitive","SidebarHeaderPrimitive","SidebarFooterPrimitive","SidebarContentPrimitive","SidebarGroupPrimitive","SidebarGroupContentPrimitive","SidebarGroupActionPrimitive","SidebarInputPrimitive","SidebarSeparatorPrimitive","SidebarMenuPrimitive","SidebarMenuItemPrimitive","SidebarMenuActionPrimitive","SidebarMenuBadgePrimitive","SidebarMenuSubPrimitive","SidebarMenuSubItemPrimitive","SidebarInsetPrimitive","SidebarRailPrimitive","SidebarTriggerPrimitive","SidebarMenuButtonPrimitive","SidebarMenuSubButtonPrimitive","SidebarGroupLabelPrimitive","useDensityConfig","useThemePortalContainer","ThemeScopeHostProvider","cn","affordanceGeometry","SheetDescription","SheetTitle","SheetContent","SheetHeader","Sheet","Separator","Text","DisplayLabel","focusRecipes","motionRecipes","Tooltip","TooltipContent","TooltipTrigger","Button","surfaceDividerRecipes","Skeleton","formFieldFrameClasses","resolveFormControlSize","Input","navigationRowDensityRecipes","navigationRowInlineClasses","navigationChildInsetClasses","React$1","Fragment$1","sidebarDockThresholds","SidebarScopeContext","SidebarScope","SidebarContext","useSidebarStore","useSidebar","store","scope","selected","panelId","open","presentation","isMobile","value","SidebarProvider$1","controlledMobilePanel","forwardedRef","props","hostRef","viewportWidth","setViewportWidth","containerWidth","setContainerWidth","regions","setRegions","internalPanels","setInternalPanels","defaultOpenPanels","defaultOpen","internalMobilePanel","setInternalMobilePanel","panels","openPanels","panel","currentPanels","currentMobile","currentMobileRef","triggers","rememberTrigger","element","triggerFor","visible","current","style","remembered","candidates","update","query","host","adaptTo","width","observer","registerRegion","existing","previous","registration","next","getPresentation","region","getCollapseMode","setPanelOpen","wasOpen","nextOpen","onOpenPanelsChange","onOpenChange","setMobilePanel","onMobilePanelChange","setPanelOpenMobile","togglePanel","mobilePanel","navigationPanel","keyboardShortcut","handler","event","target","activeHost","hosts","useRender","className","SidebarTrigger$1","openMobile","onClick","toggleSidebar","children","jsx","PanelRightIcon","PanelLeftIcon","SidebarRail$1","SidebarInset$1","SidebarInput$1","SidebarHeader$1","SidebarFooter$1","SidebarSeparator$1","SidebarContent$1","SidebarGroup$1","SidebarGroupLabel$1","mergeProps","SidebarGroupAction$1","SidebarGroupContent$1","SidebarMenu$1","SidebarMenuItem$1","sidebarMenuButtonVariants","cva","SidebarMenuButton$1","isDisabled","disabled","comp","isActive","preventDisabledSidebarActivation","preventDisabledSidebarKey","tooltip","collapsed","SidebarMenuAction$1","showOnHover","SidebarMenuBadge$1","SidebarMenuSub$1","SidebarMenuSubItem$1","SidebarMenuSubButton$1","defaultSidebarStrings","defaultInspectorSidebarStrings","sidebarMenuButtonStateClasses","sidebarMenuSubButtonStateClasses","SidebarMenuDensityContext","SidebarFooterInsetContext","sidebarMenuDensityRecipes","paddedCollapsedSidebarWidthClass","renderSidebarMenuText","renderSidebarTooltipText","normalizeSidebarMenuTooltip","getSidebarMenuButtonHeightClass","size","SidebarProvider","menuDensity","SidebarDrawerOwner","SidebarDrawerContext","equalProperties","keys","first","second","key","registrations","setRegistrations","registeredPanels","selection","mounted","setTarget","lastPanel","lastRegistration","register","wasRegistered","active","context","capturedHost","container","localDrawer","drawerContainer","SidebarRegion","availableWidth","setAvailableWidth","collapse","setCollapse","shell","measuredHost","parentWidth","dockAt","docked","hidden","suppressContents","concealed","rail","side","effectiveWidth","node","Sidebar","inherited","SidebarPanel","sideProp","stringsProp","regionOwnsWidth","drawer","inheritedThemeContainer","themeHost","themeContainer","themeScope","drawerThemeScope","strings","useStrings","rootRef","collapsible","variant","popup","registerDrawer","attachRoot","root","state","styles","permanent","sidebarWidth","createPortal","positioningProps","permanentBoundaryProps","contained","rootClassName","surface","surfaceClassName","SidebarHeader","SidebarFooter","SidebarContent","SidebarGroup","footerOwnsInset","SidebarGroupContent","SidebarGroupAction","SidebarInput","defaultScale","SidebarSeparator","SidebarMenu","inheritedDensity","density","recipe","SidebarMenuItem","SidebarMenuAction","SidebarMenuBadge","content","inline","SidebarMenuSkeleton","resolvedWidth","showIcon","SidebarMenuSub","SidebarMenuSubItem","SidebarInset","SidebarRail","SidebarTrigger","SidebarMenuButton","normalizedRender","render","normalizedTooltip","resolvedSize","primitiveSize","SidebarMenuSubButton","SidebarGroupLabel","useBaseSidebarContext","useHasSidebarProvider","useBaseSidebarMenuDensity"],"sources":["../src/components/ui/sidebar-state.tsx","../src/components/ui/sidebar.tsx","../src/components/base/sidebar/sidebar.tsx"],"sourcesContent":["import * as React from 'react';\nimport { useRender } from '@base-ui/react/use-render';\nimport { cn } from '../../lib/utils';\n\nexport type SidebarPanelId = 'primary' | 'secondary' | 'aside';\nexport type SidebarPresentation = 'docked' | 'drawer';\nexport type SidebarCollapseMode = 'offcanvas' | 'icon' | 'none';\nexport const sidebarDockThresholds = { primary: 768, secondary: 1024, aside: 1440 } as const;\n\nexport interface SidebarStateProps {\n defaultOpen?: boolean;\n adaptTo?: 'viewport' | 'container';\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n /** Controlled expanded desktop panels. Takes precedence over the legacy primary `open` prop. */\n openPanels?: readonly SidebarPanelId[];\n /** Initial uncontrolled desktop panels. Otherwise `defaultOpen` initializes primary only. */\n defaultOpenPanels?: readonly SidebarPanelId[];\n /** Receives an isolated desktop-state proposal; primary changes also notify `onOpenChange`. */\n onOpenPanelsChange?: (panels: SidebarPanelId[]) => void;\n /** Controlled active undocked panel, or null. Independent of remembered desktop expansion. */\n mobilePanel?: SidebarPanelId | null;\n /** Receives drawer selection and dismissal proposals, including removal or return to docked presentation. */\n onMobilePanelChange?: (panel: SidebarPanelId | null) => void;\n /** Default target for untargeted triggers and the keyboard shortcut. @default 'primary' */\n navigationPanel?: 'primary' | 'secondary';\n /** Ctrl/Command key for navigationPanel; false disables it. Editable fields and overlays retain their shortcuts. @default 'b' */\n keyboardShortcut?: string | false;\n}\n\ntype RegionRegistration = { dockAt: number; width?: number; collapsible?: SidebarCollapseMode };\nexport interface SidebarScopeValue {\n panelId: SidebarPanelId;\n geometry?: 'panel' | 'rail';\n side?: 'left' | 'right';\n setCollapse?: (value: { collapsible: SidebarCollapseMode; variant: 'sidebar' | 'floating' | 'inset' } | null) => void;\n}\nexport const SidebarScopeContext = React.createContext<SidebarScopeValue | null>(null);\nexport const SidebarScope = SidebarScopeContext.Provider;\n\ntype SidebarStore = {\n openPanels: readonly SidebarPanelId[];\n mobilePanel: SidebarPanelId | null;\n navigationPanel: SidebarPanelId;\n adaptTo: 'viewport' | 'container';\n hostRef: React.RefObject<HTMLDivElement | null>;\n getPresentation: (panelId: SidebarPanelId) => SidebarPresentation;\n getCollapseMode: (panelId: SidebarPanelId) => SidebarCollapseMode | undefined;\n setPanelOpen: (panelId: SidebarPanelId, value: boolean | ((open: boolean) => boolean)) => void;\n setPanelOpenMobile: (panelId: SidebarPanelId, value: React.SetStateAction<boolean>) => void;\n setMobilePanel: (value: SidebarPanelId | null) => void;\n togglePanel: (panelId: SidebarPanelId) => void;\n registerRegion: (panelId: SidebarPanelId, region: RegionRegistration | null) => void;\n triggerFor: (panelId: SidebarPanelId) => HTMLElement | null;\n rememberTrigger: (panelId: SidebarPanelId, element: HTMLElement) => void;\n};\nconst SidebarContext = React.createContext<SidebarStore | null>(null);\nexport function useSidebarStore() { return React.useContext(SidebarContext); }\n\nexport function useSidebar(panelId?: SidebarPanelId) {\n const store = useSidebarStore();\n const scope = React.useContext(SidebarScopeContext);\n if (!store) throw new Error('useSidebar must be used within a SidebarProvider.');\n const selected = panelId ?? scope?.panelId ?? 'primary';\n const open = store.openPanels.includes(selected);\n const presentation = store.getPresentation(selected);\n const isMobile = presentation === 'drawer';\n const setOpen = (value: boolean | ((open: boolean) => boolean)) => store.setPanelOpen(selected, value);\n const setOpenMobile = (value: React.SetStateAction<boolean>) => store.setPanelOpenMobile(selected, value);\n return {\n panelId: selected,\n side: (scope?.panelId === selected ? scope.side ?? 'left' : 'left') as 'left' | 'right',\n state: open ? 'expanded' as const : 'collapsed' as const,\n open, setOpen,\n /** Whether the selected desktop panel is collapsed; drawers expose expanded content. */\n collapsed: !open && !isMobile && store.getCollapseMode(selected) !== 'none',\n /** Effective presentation for the selected panel, including its own docking threshold. */\n presentation, isMobile,\n openMobile: store.mobilePanel === selected,\n setOpenMobile,\n toggleSidebar: () => store.togglePanel(selected),\n openPanels: store.openPanels,\n mobilePanel: store.mobilePanel,\n setMobilePanel: store.setMobilePanel,\n };\n}\n\nexport function SidebarProvider({\n defaultOpen = true, adaptTo = 'viewport', open, onOpenChange,\n openPanels, defaultOpenPanels, onOpenPanelsChange,\n mobilePanel: controlledMobilePanel, onMobilePanelChange,\n navigationPanel = 'primary', keyboardShortcut = 'b',\n ref: forwardedRef, className, style, children, ...props\n}: React.ComponentProps<'div'> & SidebarStateProps) {\n const hostRef = React.useRef<HTMLDivElement>(null);\n // The server and first client render share the same desktop snapshot.\n const [viewportWidth, setViewportWidth] = React.useState(Number.POSITIVE_INFINITY);\n const [containerWidth, setContainerWidth] = React.useState<number>();\n const [regions, setRegions] = React.useState<Partial<Record<SidebarPanelId, RegionRegistration>>>({});\n const [internalPanels, setInternalPanels] = React.useState<readonly SidebarPanelId[]>(() => defaultOpenPanels ? [...defaultOpenPanels] : (defaultOpen ? ['primary'] : []));\n const [internalMobilePanel, setInternalMobilePanel] = React.useState<SidebarPanelId | null>(null);\n const panels = openPanels ?? (open === undefined ? internalPanels : [...internalPanels.filter(panel => panel !== 'primary'), ...(open ? ['primary' as const] : [])]);\n const currentPanels = React.useRef(panels);\n currentPanels.current = panels;\n const currentMobile = controlledMobilePanel === undefined ? internalMobilePanel : controlledMobilePanel;\n const currentMobileRef = React.useRef(currentMobile);\n currentMobileRef.current = currentMobile;\n const triggers = React.useRef<Partial<Record<SidebarPanelId, HTMLElement>>>({});\n const rememberTrigger = React.useCallback((panelId: SidebarPanelId, element: HTMLElement) => { triggers.current[panelId] = element; }, []);\n const triggerFor = React.useCallback((panelId: SidebarPanelId) => {\n const visible = (element: HTMLElement) => {\n if (!element.isConnected) return false;\n for (let current: HTMLElement | null = element; current; current = current.parentElement) {\n const style = window.getComputedStyle(current);\n if (current.hidden || current.hasAttribute('inert') || style.display === 'none' || style.visibility === 'hidden') return false;\n }\n return true;\n };\n const remembered = triggers.current[panelId];\n if (remembered && visible(remembered)) return remembered;\n const candidates = hostRef.current?.querySelectorAll<HTMLElement>(`[data-sidebar-trigger-panel=\"${panelId}\"]`);\n return candidates ? Array.from(candidates).find(visible) ?? null : null;\n }, []);\n React.useEffect(() => {\n const update = () => setViewportWidth(window.innerWidth);\n const query = window.matchMedia?.('(max-width: 767px)');\n window.addEventListener('resize', update);\n query?.addEventListener('change', update);\n update();\n return () => { window.removeEventListener('resize', update); query?.removeEventListener('change', update); };\n }, []);\n React.useEffect(() => {\n const host = hostRef.current;\n if (adaptTo !== 'container' || !host) return;\n const update = () => { const width = host.getBoundingClientRect().width; if (width > 0) setContainerWidth(width); };\n update();\n if (typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(update); observer.observe(host);\n return () => observer.disconnect();\n }, [adaptTo]);\n const registerRegion = React.useCallback((panelId: SidebarPanelId, registration: RegionRegistration | null) => {\n setRegions(previous => {\n const existing = previous[panelId];\n if (!registration && !existing) return previous;\n if (registration && existing?.dockAt === registration.dockAt && existing?.width === registration.width && existing?.collapsible === registration.collapsible) return previous;\n const next = {...previous};\n if (registration) next[panelId] = registration; else delete next[panelId];\n return next;\n });\n }, []);\n const getPresentation = React.useCallback((panelId: SidebarPanelId): SidebarPresentation => {\n const region = regions[panelId];\n if (region?.collapsible === 'none') return 'docked';\n const width = Math.min(viewportWidth, region?.width ?? Number.POSITIVE_INFINITY, adaptTo === 'container' ? containerWidth ?? Number.POSITIVE_INFINITY : Number.POSITIVE_INFINITY);\n return width < (region?.dockAt ?? sidebarDockThresholds[panelId]) ? 'drawer' : 'docked';\n }, [regions, viewportWidth, containerWidth, adaptTo]);\n const getCollapseMode = React.useCallback((panelId: SidebarPanelId) => regions[panelId]?.collapsible, [regions]);\n const setPanelOpen = React.useCallback((panelId: SidebarPanelId, value: boolean | ((value: boolean) => boolean)) => {\n const previous = currentPanels.current;\n const wasOpen = previous.includes(panelId);\n const nextOpen = typeof value === 'function' ? value(wasOpen) : value;\n if (nextOpen === wasOpen) return;\n const next = previous.filter(panel => panel !== panelId);\n if (nextOpen) next.push(panelId);\n // Controlled proposals are not accepted state. Uncontrolled panels still\n // compose multiple updates made before React commits the next render.\n if (openPanels === undefined && (panelId !== 'primary' || open === undefined)) currentPanels.current = next;\n if (openPanels === undefined) setInternalPanels(next);\n onOpenPanelsChange?.([...next]);\n if (panelId === 'primary') {\n onOpenChange?.(nextOpen);\n document.cookie = `sidebar_state=${nextOpen}; path=/; max-age=${60 * 60 * 24 * 7}`;\n }\n }, [openPanels, open, onOpenPanelsChange, onOpenChange]);\n const setMobilePanel = React.useCallback((next: SidebarPanelId | null) => {\n if (currentMobileRef.current === next) return;\n if (controlledMobilePanel === undefined) {\n currentMobileRef.current = next;\n setInternalMobilePanel(next);\n }\n onMobilePanelChange?.(next);\n }, [controlledMobilePanel, onMobilePanelChange]);\n const setPanelOpenMobile = React.useCallback((panelId: SidebarPanelId, value: React.SetStateAction<boolean>) => {\n const wasOpen = currentMobileRef.current === panelId;\n const nextOpen = typeof value === 'function' ? value(wasOpen) : value;\n if (nextOpen !== wasOpen) setMobilePanel(nextOpen ? panelId : null);\n }, [setMobilePanel]);\n const togglePanel = React.useCallback((panelId: SidebarPanelId) => {\n if (getPresentation(panelId) === 'drawer') setMobilePanel(currentMobileRef.current === panelId ? null : panelId);\n else setPanelOpen(panelId, value => !value);\n }, [getPresentation,setMobilePanel,setPanelOpen]);\n const mobilePanel = currentMobile && getPresentation(currentMobile) === 'drawer' ? currentMobile : null;\n React.useEffect(() => {\n if (Number.isFinite(viewportWidth) && currentMobile && getPresentation(currentMobile) === 'docked') {\n setMobilePanel(null);\n triggerFor(currentMobile)?.focus();\n }\n }, [currentMobile, getPresentation, setMobilePanel, triggerFor, viewportWidth]);\n const value = React.useMemo<SidebarStore>(() => ({openPanels: panels, mobilePanel, navigationPanel, adaptTo, hostRef, getPresentation, getCollapseMode, setPanelOpen, setPanelOpenMobile, setMobilePanel, togglePanel, registerRegion, triggerFor, rememberTrigger}), [panels, mobilePanel, navigationPanel, adaptTo, getPresentation, getCollapseMode, setPanelOpen, setPanelOpenMobile, setMobilePanel, togglePanel, registerRegion, triggerFor, rememberTrigger]);\n React.useEffect(() => {\n if (keyboardShortcut === false) return;\n const handler = (event: KeyboardEvent) => {\n if (event.defaultPrevented || event.repeat || event.altKey || event.shiftKey || !(event.metaKey || event.ctrlKey) || event.key.toLowerCase() !== keyboardShortcut.toLowerCase()) return;\n const target = event.target instanceof Element ? event.target : document.activeElement;\n if (target?.closest('input,textarea,select,[contenteditable]:not([contenteditable=\"false\"]),[role=\"textbox\"],[role=\"dialog\"],[role=\"alertdialog\"],[role=\"menu\"],[role=\"listbox\"]')) return;\n const activeHost = target?.closest('[data-slot=\"sidebar-wrapper\"]');\n const hosts = document.querySelectorAll('[data-slot=\"sidebar-wrapper\"]');\n if (activeHost ? activeHost !== hostRef.current : hosts.length !== 1) return;\n event.preventDefault();\n if (getPresentation(navigationPanel) === 'drawer') setMobilePanel(currentMobileRef.current === navigationPanel ? null : navigationPanel);\n else setPanelOpen(navigationPanel, current => !current);\n };\n window.addEventListener('keydown', handler);\n return () => window.removeEventListener('keydown', handler);\n }, [keyboardShortcut, navigationPanel, getPresentation, setMobilePanel, setPanelOpen]);\n const host = useRender({defaultTagName:'div', ref:forwardedRef ? [hostRef,forwardedRef] : hostRef, props:{...props, 'data-slot':'sidebar-wrapper', 'data-mobile':getPresentation('primary') === 'drawer', style:{'--sidebar-width':'16rem','--sidebar-width-icon':'3rem',...style} as React.CSSProperties, className:cn('group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar relative flex min-h-svh w-full',adaptTo === 'container' && 'isolate [contain:paint]',className), children}});\n return <SidebarContext.Provider value={value}>{host}</SidebarContext.Provider>;\n}\n","import { mergeProps } from \"@base-ui/react/merge-props\"\nimport { useRender } from \"@base-ui/react/use-render\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { PanelLeftIcon, PanelRightIcon } from \"lucide-react\"\nimport * as React from \"react\"\nimport { Button } from \"./button\"\nimport { Input } from \"./input\"\nimport { Separator } from \"./separator\"\nimport {\n Sheet,\n SheetContent,\n SheetDescription,\n SheetHeader,\n SheetTitle,\n} from \"./sheet\"\nimport { Skeleton } from \"./skeleton\"\nimport {\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from \"./tooltip\"\nimport { cn } from \"../../lib/utils\"\nimport { navigationRowInlineClasses } from \"../../lib/navigation-row-recipes\"\nimport { focusRecipes } from \"../../lib/focus-recipes\"\n\nimport { SidebarProvider, useSidebar } from \"./sidebar-state\"\nimport { useSidebarStore, type SidebarPanelId } from \"./sidebar-state\"\n\nconst SIDEBAR_WIDTH_MOBILE = \"18rem\"\n\nfunction Sidebar({\n side = \"left\",\n variant = \"sidebar\",\n collapsible = \"offcanvas\",\n className,\n children,\n dir,\n ...props\n}: React.ComponentProps<\"div\"> & {\n side?: \"left\" | \"right\"\n variant?: \"sidebar\" | \"floating\" | \"inset\"\n collapsible?: \"offcanvas\" | \"icon\" | \"none\"\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar()\n\n if (collapsible === \"none\") {\n return (\n <div\n data-slot=\"sidebar\"\n className={cn(\n \"bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col\",\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n dir={dir}\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n className=\"bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden\"\n style={\n {\n \"--sidebar-width\": SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n side={side}\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </SheetContent>\n </Sheet>\n )\n }\n\n return (\n <div\n className=\"group peer text-sidebar-foreground hidden md:block\"\n data-state={state}\n data-collapsible={state === \"collapsed\" ? collapsible : \"\"}\n data-variant={variant}\n data-side={side}\n data-slot=\"sidebar\"\n >\n {/* This is what handles the sidebar gap on desktop */}\n <div\n data-slot=\"sidebar-gap\"\n className={cn(\n \"transition-[width] duration-200 ease-linear relative w-(--sidebar-width) bg-transparent\",\n \"group-data-[collapsible=offcanvas]:w-0\",\n \"group-data-[side=right]:rotate-180\",\n variant === \"floating\" || variant === \"inset\"\n ? \"group-data-[collapsible=icon]:w-shell-sidebar-icon-padded\"\n : \"group-data-[collapsible=icon]:w-(--sidebar-width-icon)\"\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n data-side={side}\n className={cn(\n \"fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear data-[side=left]:left-0 data-[side=left]:group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)] data-[side=right]:right-0 data-[side=right]:group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)] md:flex\",\n // Adjust the padding for floating and inset variants.\n variant === \"floating\" || variant === \"inset\"\n ? \"p-space-md group-data-[collapsible=icon]:w-shell-sidebar-icon-padded\"\n : \"border-border group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l\",\n className\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className=\"bg-sidebar group-data-[variant=floating]:ring-sidebar-border group-data-[variant=floating]:rounded-surface group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:ring-1 flex size-full flex-col\"\n >\n {children}\n </div>\n </div>\n </div>\n )\n}\n\nfunction SidebarTrigger({\n className,\n onClick,\n panelId,\n children,\n ...props\n}: React.ComponentProps<typeof Button> & { panelId?: SidebarPanelId }) {\n const store = useSidebarStore()\n const target = panelId ?? store?.navigationPanel ?? \"primary\"\n const { toggleSidebar, open, openMobile, isMobile } = useSidebar(target)\n\n return (\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n data-sidebar-trigger-panel={target}\n aria-expanded={isMobile ? openMobile : open}\n variant=\"ghost\"\n size=\"icon-sm\"\n className={cn(className)}\n onClick={(event) => {\n onClick?.(event)\n if (!event.defaultPrevented) {\n store?.rememberTrigger(target, event.currentTarget)\n toggleSidebar()\n }\n }}\n {...props}\n >\n {children ?? <>\n {target === \"aside\" ? <PanelRightIcon /> : <PanelLeftIcon />}\n <span className=\"sr-only\">Toggle Sidebar</span>\n </>}\n </Button>\n )\n}\n\nfunction SidebarRail({ className, ...props }: React.ComponentProps<\"button\">) {\n const { toggleSidebar } = useSidebar()\n\n return (\n <button\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n \"hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:start-1/2 after:w-[2px] sm:flex ltr:-translate-x-1/2 rtl:-translate-x-1/2\",\n \"in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize\",\n \"[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize\",\n \"hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full\",\n \"[[data-side=left][data-collapsible=offcanvas]_&]:-right-2\",\n \"[[data-side=right][data-collapsible=offcanvas]_&]:-left-2\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarInset({ className, ...props }: React.ComponentProps<\"main\">) {\n return (\n <main\n data-slot=\"sidebar-inset\"\n className={cn(\n \"bg-background md:peer-data-[variant=inset]:m-space-md md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-surface md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-space-md relative flex w-full flex-1 flex-col\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarInput({\n className,\n ...props\n}: React.ComponentProps<typeof Input>) {\n return (\n <Input\n data-slot=\"sidebar-input\"\n data-sidebar=\"input\"\n className={cn(\"w-full\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-header\"\n data-sidebar=\"header\"\n className={cn(\"flex flex-col\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-footer\"\n data-sidebar=\"footer\"\n className={cn(\"flex flex-col\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof Separator>) {\n return (\n <Separator\n data-slot=\"sidebar-separator\"\n data-sidebar=\"separator\"\n className={cn(\"bg-sidebar-border mx-space-md w-auto\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn(\n \"gap-space-md flex min-h-0 flex-1 flex-col overflow-auto group-data-[collapsible=icon]:overflow-hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-group\"\n data-sidebar=\"group\"\n className={cn(\n \"relative flex w-full min-w-0 flex-col\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarGroupLabel({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"div\"> & React.ComponentProps<\"div\">) {\n return useRender({\n defaultTagName: \"div\",\n props: mergeProps<\"div\">(\n {\n className: cn(\n `text-sidebar-foreground/70 h-8 rounded-radius text-xs font-medium transition-opacity duration-150 group-data-[collapsible=icon]:opacity-0 ${focusRecipes.sidebar} [&>svg]:size-icon flex shrink-0 items-center outline-hidden [&>svg]:shrink-0`,\n className\n ),\n },\n props\n ),\n render,\n state: {\n slot: \"sidebar-group-label\",\n sidebar: \"group-label\",\n },\n })\n}\n\nfunction SidebarGroupAction({\n className,\n render,\n ...props\n}: useRender.ComponentProps<\"button\"> & React.ComponentProps<\"button\">) {\n return useRender({\n defaultTagName: \"button\",\n props: mergeProps<\"button\">(\n {\n className: cn(\n `box-border border-0 bg-transparent font-sans text-sidebar-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 w-5 rounded-radius p-0 ${focusRecipes.sidebar} [&>svg]:size-icon flex aspect-square items-center justify-center outline-hidden transition-transform [&>svg]:shrink-0 after:absolute after:-inset-2 md:after:hidden group-data-[collapsible=icon]:hidden`,\n className\n ),\n },\n props\n ),\n render,\n state: {\n slot: \"sidebar-group-action\",\n sidebar: \"group-action\",\n },\n })\n}\n\nfunction SidebarGroupContent({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-group-content\"\n data-sidebar=\"group-content\"\n className={cn(\"text-sm w-full\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"sidebar-menu\"\n data-sidebar=\"menu\"\n className={cn(\"m-0 p-0 list-none flex w-full min-w-0 flex-col\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"sidebar-menu-item\"\n data-sidebar=\"menu-item\"\n className={cn(\"group/menu-item relative\", className)}\n {...props}\n />\n )\n}\n\nconst sidebarMenuButtonVariants = cva(\n cn(`box-border border-0 bg-transparent py-0 font-sans no-underline hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground data-open:hover:bg-sidebar-accent data-open:hover:text-sidebar-accent-foreground text-left transition-[background-color,color] ${focusRecipes.sidebar} data-active:font-medium peer/menu-button flex w-full items-center overflow-hidden outline-hidden group/menu-button disabled:opacity-50 aria-disabled:opacity-50 [&>span:last-child]:truncate [&_svg]:size-icon [&_svg]:shrink-0`, navigationRowInlineClasses),\n {\n variants: {\n variant: {\n default: \"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground\",\n outline: \"bg-background hover:bg-sidebar-accent hover:text-sidebar-accent-foreground ring-1 ring-sidebar-border hover:ring-sidebar-accent\",\n },\n size: {\n default: \"h-action\",\n sm: \"h-action-sm\",\n lg: \"h-action-lg\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nfunction SidebarMenuButton({\n render,\n disabled = false,\n isActive = false,\n variant = \"default\",\n size = \"default\",\n tooltip,\n className,\n ...props\n}: useRender.ComponentProps<\"button\"> &\n React.ComponentProps<\"button\"> & {\n isActive?: boolean\n tooltip?: string | React.ComponentProps<typeof TooltipContent>\n } & VariantProps<typeof sidebarMenuButtonVariants>) {\n const { isMobile, collapsed } = useSidebar()\n const isDisabled = disabled || props[\"aria-disabled\"] === true || props[\"aria-disabled\"] === \"true\"\n\n const comp = useRender({\n defaultTagName: \"button\",\n props: mergeProps<\"button\">(\n {\n className: cn(sidebarMenuButtonVariants({ variant, size }), className),\n },\n props\n ),\n render,\n state: {\n slot: \"sidebar-menu-button\",\n sidebar: \"menu-button\",\n size,\n active: isActive,\n },\n })\n\n // Tooltip.Trigger's disabled prop disables the tooltip, not its DOM target.\n // Own the target state after render composition so a render element cannot\n // re-enable the row; links retain their native role and destination.\n const target = isDisabled ? React.cloneElement(comp as React.ReactElement<React.HTMLAttributes<HTMLElement> & { disabled?: boolean }>, {\n disabled: comp.type === \"a\" ? undefined : true,\n \"aria-disabled\": true,\n tabIndex: -1,\n onClickCapture: preventDisabledSidebarActivation,\n onClick: preventDisabledSidebarActivation,\n onPointerDownCapture: preventDisabledSidebarActivation,\n onKeyDownCapture: preventDisabledSidebarKey,\n onKeyUpCapture: preventDisabledSidebarKey,\n }) : comp\n\n if (!tooltip) {\n return target\n }\n\n if (typeof tooltip === \"string\") {\n tooltip = {\n children: tooltip,\n }\n }\n\n return (\n <Tooltip disabled={isDisabled || !collapsed || isMobile}>\n <TooltipTrigger disabled={isDisabled} render={target} />\n <TooltipContent\n side=\"right\"\n align=\"center\"\n {...tooltip}\n />\n </Tooltip>\n )\n}\n\nfunction preventDisabledSidebarActivation(event: React.SyntheticEvent) {\n event.preventDefault()\n event.stopPropagation()\n}\n\nfunction preventDisabledSidebarKey(event: React.KeyboardEvent) {\n if (event.key === \"Enter\" || event.key === \" \") preventDisabledSidebarActivation(event)\n}\n\nfunction SidebarMenuAction({\n className,\n render,\n showOnHover = false,\n ...props\n}: useRender.ComponentProps<\"button\"> &\n React.ComponentProps<\"button\"> & {\n showOnHover?: boolean\n }) {\n return useRender({\n defaultTagName: \"button\",\n props: mergeProps<\"button\">(\n {\n className: cn(\n `box-border border-0 bg-transparent font-sans text-sidebar-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 aspect-square w-5 rounded-radius p-0 peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 ${focusRecipes.sidebar} [&>svg]:size-icon flex items-center justify-center outline-hidden transition-transform group-data-[collapsible=icon]:hidden after:absolute after:-inset-2 md:after:hidden [&_svg]:shrink-0`,\n showOnHover &&\n \"peer-data-active/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-open:opacity-100 md:opacity-0\",\n className\n ),\n },\n props\n ),\n render,\n state: {\n slot: \"sidebar-menu-action\",\n sidebar: \"menu-action\",\n },\n })\n}\n\nfunction SidebarMenuBadge({\n className,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n \"box-border\",\n \"text-sidebar-foreground peer-hover/menu-button:text-sidebar-accent-foreground peer-data-active/menu-button:text-sidebar-accent-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 rounded-radius px-space-xs text-xs font-medium peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 flex items-center justify-center tabular-nums select-none group-data-[collapsible=icon]:hidden\",\n className\n )}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<\"div\"> & {\n showIcon?: boolean\n}) {\n // Random width between 50 to 90%.\n const [width] = React.useState(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`\n })\n\n return (\n <div\n data-slot=\"sidebar-menu-skeleton\"\n data-sidebar=\"menu-skeleton\"\n className={cn(\"h-action flex items-center\", navigationRowInlineClasses, className)}\n {...props}\n >\n {!!showIcon && (\n <Skeleton\n className=\"size-4 rounded-radius-xs\"\n data-sidebar=\"menu-skeleton-icon\"\n />\n )}\n <Skeleton\n className=\"h-4 max-w-(--skeleton-width) flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n \"--skeleton-width\": width,\n } as React.CSSProperties\n }\n />\n </div>\n )\n}\n\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"sidebar-menu-sub\"\n data-sidebar=\"menu-sub\"\n className={cn(\"m-0 p-0 list-none border-sidebar-border mx-space-lg translate-x-px gap-space-xs border-l px-row-x py-row-y group-data-[collapsible=icon]:hidden flex min-w-0 flex-col\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuSubItem({\n className,\n ...props\n}: React.ComponentProps<\"li\">) {\n return (\n <li\n data-slot=\"sidebar-menu-sub-item\"\n data-sidebar=\"menu-sub-item\"\n className={cn(\"group/menu-sub-item relative\", className)}\n {...props}\n />\n )\n}\n\nfunction SidebarMenuSubButton({\n render,\n size = \"md\",\n isActive = false,\n className,\n ...props\n}: useRender.ComponentProps<\"a\"> &\n React.ComponentProps<\"a\"> & {\n size?: \"sm\" | \"md\"\n isActive?: boolean\n }) {\n return useRender({\n defaultTagName: \"a\",\n props: mergeProps<\"a\">(\n {\n className: cn(\n `text-sidebar-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground h-action-xs ${focusRecipes.sidebar} data-[size=md]:text-sm data-[size=sm]:text-xs [&>svg]:size-icon flex -translate-x-px items-center overflow-hidden outline-hidden group-data-[collapsible=icon]:hidden disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:shrink-0`,\n navigationRowInlineClasses,\n className\n ),\n },\n props\n ),\n render,\n state: {\n slot: \"sidebar-menu-sub-button\",\n sidebar: \"menu-sub-button\",\n size,\n active: isActive,\n },\n })\n}\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInput,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarSeparator,\n SidebarTrigger,\n useSidebar,\n}\n","/**\n * base/sidebar — tokenized wrapper around the shadcn `Sidebar` compound component.\n *\n * The internal Base UI owner supplies shared state. This layer applies the package shell,\n * density, spacing, typography, focus, and stable DOM-hook contracts while\n * preserving every compound part and polymorphic `render` seam.\n */\nimport * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { ThemeScopeHostProvider, useThemePortalContainer, type ThemePortalContainer } from '../../../lib/theme-scope';\nimport { SidebarScope, SidebarScopeContext, sidebarDockThresholds, useSidebarStore, type SidebarPanelId, type SidebarPresentation, type SidebarStateProps } from '../../ui/sidebar-state';\n\nimport {\n\tSidebarContent as SidebarContentPrimitive,\n\tSidebarFooter as SidebarFooterPrimitive,\n\tSidebarGroup as SidebarGroupPrimitive,\n\tSidebarGroupAction as SidebarGroupActionPrimitive,\n\tSidebarGroupContent as SidebarGroupContentPrimitive,\n\tSidebarGroupLabel as SidebarGroupLabelPrimitive,\n\tSidebarHeader as SidebarHeaderPrimitive,\n\tSidebarInput as SidebarInputPrimitive,\n\tSidebarInset as SidebarInsetPrimitive,\n\tSidebarMenu as SidebarMenuPrimitive,\n\tSidebarMenuAction as SidebarMenuActionPrimitive,\n\tSidebarMenuBadge as SidebarMenuBadgePrimitive,\n\tSidebarMenuButton as SidebarMenuButtonPrimitive,\n\tSidebarMenuItem as SidebarMenuItemPrimitive,\n\tSidebarMenuSub as SidebarMenuSubPrimitive,\n\tSidebarMenuSubButton as SidebarMenuSubButtonPrimitive,\n\tSidebarMenuSubItem as SidebarMenuSubItemPrimitive,\n\tSidebarProvider as SidebarProviderPrimitive,\n\tSidebarRail as SidebarRailPrimitive,\n\tSidebarSeparator as SidebarSeparatorPrimitive,\n\tSidebarTrigger as SidebarTriggerPrimitive,\n\tuseSidebar as useSidebarPrimitive,\n} from '../../ui/sidebar';\nimport {\n\tSheet,\n\tSheetContent,\n\tSheetDescription,\n\tSheetHeader,\n\tSheetTitle,\n} from '../sheet/sheet';\nimport { Skeleton } from '../skeleton';\nimport { DisplayLabel, Text } from '../../typography';\nimport type { ComponentScale } from '../../../lib/component-vocabulary';\nimport { useDensityConfig } from '../../../lib/ui-provider';\nimport { formFieldFrameClasses, resolveFormControlSize } from '../forms/form-sizing';\nimport { useStrings, type StringsProp } from '../../../lib/strings';\nimport { cn } from '../../../lib/utils';\nimport { surfaceDividerRecipes } from '../../../lib/surface-recipes';\nimport { navigationChildInsetClasses, navigationRowDensityRecipes, navigationRowInlineClasses } from '../../../lib/navigation-row-recipes';\nimport { focusRecipes } from '../../../lib/focus-recipes';\nimport { affordanceGeometry } from '../../../lib/affordance-geometry.generated';\nimport { motionRecipes } from '../../../lib/motion-recipes';\n\nexport interface SidebarStrings {\n\tmobileTitle: string;\n\tmobileDescription: string;\n}\n\nexport const defaultSidebarStrings: SidebarStrings = {\n\tmobileTitle: 'Navigation',\n\tmobileDescription: 'Navigation for this application.',\n};\n\nconst defaultInspectorSidebarStrings: SidebarStrings = {\n\tmobileTitle: 'Inspector',\n\tmobileDescription: 'Supporting tools and details.',\n};\n\nexport interface SidebarProps extends React.ComponentProps<'div'> {\n\t/** Explicit state identity; otherwise inherits the nearest shell region. */\n\tpanelId?: SidebarPanelId;\n\t/** Desktop canvas treatment. Drawers always retain their opaque sidebar surface. */\n\tsurface?: 'default' | 'transparent';\n\t/** Edge where the desktop rail and mobile sheet are anchored. */\n\tside?: 'left' | 'right';\n\t/** Surface treatment and inset behavior for the desktop shell. */\n\tvariant?: 'sidebar' | 'floating' | 'inset';\n\t/** Desktop collapse mode. `none` renders a permanently expanded panel. */\n\tcollapsible?: 'offcanvas' | 'icon' | 'none';\n\t/** Keeps the desktop sidebar in its parent layout instead of fixing it to the viewport. */\n\tcontained?: boolean;\n\t/** Classes for the visible sidebar surface, separate from the positioning container. */\n\tsurfaceClassName?: string;\n\t/** Classes for the responsive positioning root. */\n\trootClassName?: string;\n\t/** Copy for the mobile drawer heading and accessible description. */\n\tstrings?: StringsProp<SidebarStrings>;\n}\ntype SidebarContentProps = React.ComponentProps<typeof SidebarContentPrimitive>;\ntype SidebarFooterProps = React.ComponentProps<typeof SidebarFooterPrimitive>;\ntype SidebarGroupProps = React.ComponentProps<typeof SidebarGroupPrimitive>;\ntype SidebarGroupActionProps = React.ComponentProps<typeof SidebarGroupActionPrimitive>;\ntype SidebarGroupContentProps = React.ComponentProps<typeof SidebarGroupContentPrimitive>;\ntype SidebarGroupLabelProps = React.ComponentProps<typeof SidebarGroupLabelPrimitive>;\ntype SidebarHeaderProps = React.ComponentProps<typeof SidebarHeaderPrimitive>;\nexport interface SidebarInputProps extends React.ComponentProps<typeof SidebarInputPrimitive> {\n\t/** Accessible name when no visible label is associated with the navigation search. */\n\t'aria-label'?: string;\n\t/** Search or filter hint. */\n\tplaceholder?: string;\n\t/** Controlled input value. */\n\tvalue?: React.InputHTMLAttributes<HTMLInputElement>['value'];\n\t/** Disables the navigation input. */\n\tdisabled?: boolean;\n\t/** Native input change callback. */\n\tonChange?: React.ChangeEventHandler<HTMLInputElement>;\n\t/** Additional classes merged with the tokenized control defaults. */\n\tclassName?: string;\n}\ntype SidebarInsetProps = React.ComponentProps<typeof SidebarInsetPrimitive>;\nexport type SidebarMenuDensity = 'compact' | 'default' | 'comfortable';\n\nexport interface SidebarMenuProps extends React.ComponentProps<typeof SidebarMenuPrimitive> {\n\t/** Row and child-list rhythm. Inherits the nearest sidebar menu/provider. */\n\tmenuDensity?: SidebarMenuDensity;\n}\ntype SidebarMenuActionProps = React.ComponentProps<typeof SidebarMenuActionPrimitive>;\nexport interface SidebarMenuBadgeProps extends React.ComponentProps<typeof SidebarMenuBadgePrimitive> {\n\t/** Render in normal flow, for example inside a nested menu button. */\n\tinline?: boolean;\n\t/** Count-bubble size. @default \"md\" */\n\tsize?: ComponentScale;\n}\nexport interface SidebarMenuButtonProps extends Omit<React.ComponentProps<typeof SidebarMenuButtonPrimitive>, 'size' | 'isActive'> {\n\t/** Explicit row scale. Otherwise follows menuDensity, or md in an unconfigured base menu. */\n\tsize?: ComponentScale;\n\t/** Marks the navigation item as current. */\n\tactive?: boolean;\n}\ntype SidebarMenuItemProps = React.ComponentProps<typeof SidebarMenuItemPrimitive>;\nexport interface SidebarMenuSkeletonProps extends React.ComponentProps<'div'> {\n\t/** Show the leading icon placeholder. */\n\tshowIcon?: boolean;\n\t/** Deterministic text-bar width. @default \"72%\" */\n\twidth?: string;\n}\ntype SidebarMenuSubProps = React.ComponentProps<typeof SidebarMenuSubPrimitive>;\nexport interface SidebarMenuSubButtonProps extends Omit<React.ComponentProps<typeof SidebarMenuSubButtonPrimitive>, 'isActive'> {\n\t/** Marks the nested navigation item as current. */\n\tactive?: boolean;\n}\ntype SidebarMenuSubItemProps = React.ComponentProps<typeof SidebarMenuSubItemPrimitive>;\nexport interface SidebarProviderProps extends React.ComponentProps<'div'>, SidebarStateProps {\n\t/** Use the provider width for drawers in embedded workspaces; viewport remains the default. */\n\tadaptTo?: 'viewport' | 'container';\n\t/** Initial expanded state for uncontrolled sidebars. @default true */\n\tdefaultOpen?: boolean;\n\t/** Controlled expanded state. */\n\topen?: boolean;\n\t/** Controlled state callback. */\n\tonOpenChange?: (open: boolean) => void;\n\t/** Default menu rhythm; individual menus may override it. */\n\tmenuDensity?: SidebarMenuDensity;\n\t/** Sidebar shell contents. */\n\tchildren?: React.ReactNode;\n\t/** Scoped shell token overrides and other root styles. */\n\tstyle?: React.CSSProperties;\n\t/** Additional classes merged with the provider root. */\n\tclassName?: string;\n}\ntype SidebarRailProps = React.ComponentProps<typeof SidebarRailPrimitive>;\ntype SidebarSeparatorProps = React.ComponentProps<typeof SidebarSeparatorPrimitive>;\ntype SidebarTriggerProps = React.ComponentProps<typeof SidebarTriggerPrimitive>;\n\n// Navigation labels are medium throughout; the current entry is marked by its fill.\nconst sidebarMenuButtonStateClasses =\n\t`font-medium text-sidebar-foreground transition-[background-color,color] hover:bg-sidebar-accent hover:text-sidebar-foreground ${focusRecipes.sidebar} data-active:bg-sidebar-accent data-active:text-sidebar-foreground data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-foreground`;\n\nconst sidebarMenuSubButtonStateClasses = sidebarMenuButtonStateClasses;\n\n// One token-backed recipe covers both composed navigation and raw menu anatomy.\n// No density configured falls back to the default density, like the rest of the menu.\nconst SidebarMenuDensityContext = React.createContext<SidebarMenuDensity | undefined>(undefined);\n// A footer already owns the surface inset. Groups nested in that region keep\n// their navigation anatomy while delegating the surrounding inset to it.\nconst SidebarFooterInsetContext = React.createContext(false);\nconst sidebarMenuDensityRecipes = navigationRowDensityRecipes;\n\nconst paddedCollapsedSidebarWidthClass =\n\t'group-data-[collapsible=icon]:w-shell-sidebar-icon-padded';\n\nfunction renderSidebarMenuText(children: React.ReactNode) {\n\tif (typeof children === 'string' || typeof children === 'number' || typeof children === 'bigint') {\n\t\treturn (\n\t\t\t<Text tag=\"span\" size=\"inherit\" weight=\"inherit\" lineHeight=\"tight\" className=\"text-inherit\">\n\t\t\t\t{children}\n\t\t\t</Text>\n\t\t);\n\t}\n\treturn children;\n}\n\nfunction renderSidebarTooltipText(children: React.ReactNode) {\n\tif (typeof children === 'string' || typeof children === 'number' || typeof children === 'bigint') {\n\t\treturn (\n\t\t\t<Text\n\t\t\t\ttag=\"span\"\n\t\t\t\tsize=\"inherit\"\n\t\t\t\tlineHeight=\"snug\"\n\t\t\t\tclassName=\"sidebar-menu-button--tooltip-text text-inherit\"\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</Text>\n\t\t);\n\t}\n\treturn children;\n}\n\nfunction normalizeSidebarMenuTooltip(tooltip: SidebarMenuButtonProps['tooltip']) {\n\tif (!tooltip) return tooltip;\n\n\tif (typeof tooltip === 'string') {\n\t\treturn { children: renderSidebarTooltipText(tooltip) };\n\t}\n\n\treturn {\n\t\t...tooltip,\n\t\tchildren: renderSidebarTooltipText(tooltip.children),\n\t};\n}\n\n/** Row height, and the matching square when the sidebar collapses to icons. */\nfunction getSidebarMenuButtonHeightClass(size: SidebarMenuButtonProps['size']) {\n\tif (size === 'sm') {\n\t\treturn 'h-action-sm group-data-[collapsible=icon]:size-action-sm!';\n\t}\n\tif (size === 'lg') {\n\t\treturn 'h-action-lg group-data-[collapsible=icon]:size-action-lg!';\n\t}\n\treturn 'h-action group-data-[collapsible=icon]:size-action!';\n}\n\nfunction SidebarProvider({ className, style, menuDensity, ...props }: SidebarProviderProps) {\n\treturn (\n\t\t<SidebarMenuDensityContext.Provider value={menuDensity}>\n\t\t\t<SidebarProviderPrimitive\n\t\t\t\tclassName={cn('sidebar-provider--component shell-sidebar-vars box-border', className)}\n\t\t\t\tstyle={{\n\t\t\t\t\t'--sidebar-width': 'var(--shell-sidebar-width)',\n\t\t\t\t\t'--sidebar-width-icon': 'var(--shell-sidebar-width-icon)',\n\t\t\t\t\t...style,\n\t\t\t\t} as React.CSSProperties}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<SidebarDrawerOwner>{props.children}</SidebarDrawerOwner>\n\t\t\t</SidebarProviderPrimitive>\n\t\t</SidebarMenuDensityContext.Provider>\n\t);\n}\n\ntype SidebarDrawerRegistration = {\n\tcontained: boolean;\n\tside: 'left' | 'right';\n\tdir?: string;\n\tclassName?: string;\n\tsurfaceClassName?: string;\n\trootClassName?: string;\n\ttitle: string;\n\tdescription: string;\n\tthemeContainer: ThemePortalContainer;\n\tthemeScope: React.ComponentProps<typeof ThemeScopeHostProvider>['value'];\n\tprops: React.ComponentProps<'div'>;\n};\ntype SidebarDrawerContextValue = {\n\ttarget: HTMLDivElement | null;\n\tregister: (panelId: SidebarPanelId, registration: SidebarDrawerRegistration | null) => void;\n};\nconst SidebarDrawerContext = React.createContext<SidebarDrawerContextValue | null>(null);\n\nfunction equalProperties(first: object, second: object) {\n\tconst keys = Object.keys(first);\n\treturn keys.length === Object.keys(second).length && keys.every(key => Reflect.get(first, key) === Reflect.get(second, key));\n}\n\n/** One Base UI modal owner for every named undocked region in this provider. */\nfunction SidebarDrawerOwner({ children }: { children: React.ReactNode }) {\n\tconst { mobilePanel, setMobilePanel } = useSidebarPrimitive();\n\tconst store = useSidebarStore()!;\n\tconst [registrations, setRegistrations] = React.useState<Partial<Record<SidebarPanelId, SidebarDrawerRegistration>>>({});\n\tconst registeredPanels = React.useRef<Partial<Record<SidebarPanelId, SidebarDrawerRegistration>>>({});\n\tconst selection = React.useRef({mobilePanel,setMobilePanel});\n\tselection.current = {mobilePanel,setMobilePanel};\n\tconst mounted = React.useRef(true);\n\tReact.useLayoutEffect(() => {mounted.current = true; return () => {mounted.current = false;};}, []);\n\tconst [target, setTarget] = React.useState<HTMLDivElement | null>(null);\n\tconst lastPanel = React.useRef<SidebarPanelId>('primary');\n\tconst lastRegistration = React.useRef<SidebarDrawerRegistration | null>(null);\n\tif (mobilePanel) lastPanel.current = mobilePanel;\n\tconst register = React.useCallback((panelId: SidebarPanelId, registration: SidebarDrawerRegistration | null) => {\n\t\tconst wasRegistered = !!registeredPanels.current[panelId];\n\t\tif (registration) registeredPanels.current[panelId] = registration; else delete registeredPanels.current[panelId];\n\t\tif (!registration && wasRegistered) {\n\t\t\tif (lastPanel.current === panelId) lastRegistration.current = null;\n\t\t\t// Wait for this commit's registrations: StrictMode can unregister and\n\t\t\t// immediately restore a panel without removing its rendered owner.\n\t\t\tqueueMicrotask(() => {\n\t\t\t\tif (mounted.current && !registeredPanels.current[panelId] && selection.current.mobilePanel === panelId) selection.current.setMobilePanel(null);\n\t\t\t});\n\t\t}\n\t\tsetRegistrations(previous => {\n\t\t\tconst existing = previous[panelId];\n\t\t\tif (!registration && !existing) return previous;\n\t\t\tif (existing && registration && equalProperties(existing.props, registration.props) && equalProperties({...existing,props:undefined}, {...registration,props:undefined})) return previous;\n\t\t\tconst next = {...previous};\n\t\t\tif (registration) next[panelId] = registration; else delete next[panelId];\n\t\t\treturn next;\n\t\t});\n\t}, []);\n\tconst active = mobilePanel ? registrations[mobilePanel] : lastRegistration.current;\n\tif (mobilePanel) lastRegistration.current = active ?? null;\n\tconst context = React.useMemo(() => ({target, register}), [target,register]);\n\tlet capturedHost: HTMLElement | ShadowRoot | null = null;\n\tif (active?.themeContainer) {\n\t\tconst container = active.themeContainer;\n\t\tcapturedHost = 'current' in container ? container.current : container;\n\t}\n\t// An ancestor theme already reaches the application through CSS inheritance;\n\t// keep the native portal inside the frame that owns container adaptation.\n\tconst localDrawer = !!active?.contained || store.adaptTo === 'container';\n\tconst drawerContainer = localDrawer && capturedHost && !store.hostRef.current?.contains(capturedHost)\n\t\t? store.hostRef : active?.themeContainer;\n\treturn <Sheet modal={true} open={!!mobilePanel && !!active} onOpenChange={next => {if (!next) setMobilePanel(null);}}>\n\t\t<SidebarDrawerContext.Provider value={context}>\n\t\t\t{children}\n\t\t\t{active && <ThemeScopeHostProvider value={active.themeScope}><SheetContent\n\t\t\t\t{...active.props}\n\t\t\t\tcontainer={drawerContainer}\n\t\t\t\tforceRenderBackdrop\n\t\t\t\tbackdropClassName={active.contained ? 'absolute' : undefined}\n\t\t\t\tdir={active.dir}\n\t\t\t\tdata-sidebar=\"sidebar\"\n\t\t\t\tdata-slot=\"sidebar\"\n\t\t\t\tdata-panel-id={mobilePanel ?? lastPanel.current}\n\t\t\t\tdata-mobile=\"true\"\n\t\t\t\tdata-presentation=\"drawer\"\n\t\t\t\tside={active.side}\n\t\t\t\tfinalFocus={() => store.triggerFor(lastPanel.current)}\n\t\t\t\tclassName={cn('sidebar--component shell-sidebar-vars box-border data-[side=left]:w-(--sidebar-width) data-[side=right]:w-(--sidebar-width) bg-sidebar p-0 text-sidebar-foreground [&_[data-overlay-close]]:top-[calc(var(--surface-y)*var(--space-scale)/2+(var(--text-base)*var(--leading-snug)-var(--height-action)*7/8*var(--density-scale))/2)]! [&_[data-overlay-close]]:end-[calc(var(--surface-x)*var(--space-scale)/2)]!', active.contained && 'absolute', active.surfaceClassName, active.className, active.rootClassName)}\n\t\t\t\tstyle={{...active.props.style, '--sidebar-width':'var(--shell-sidebar-width-offcanvas)', ...(localDrawer ? {maxWidth:'calc(100% - var(--control-x) * var(--space-scale))'} : {})} as React.CSSProperties}\n\t\t\t>\n\t\t\t\t<SheetHeader className=\"min-h-[calc(var(--height-action)*var(--density-scale)+var(--surface-y)*var(--space-scale))] p-surface-xs pe-[calc(var(--height-action)*var(--density-scale)+var(--surface-x)*var(--space-scale))]\"><SheetTitle>{active.title}</SheetTitle><SheetDescription className=\"sr-only\">{active.description}</SheetDescription></SheetHeader>\n\t\t\t\t<div ref={setTarget} className=\"sidebar--surface flex min-h-0 w-full flex-1 flex-col\" />\n\t\t\t</SheetContent></ThemeScopeHostProvider>}\n\t\t</SidebarDrawerContext.Provider>\n\t</Sheet>;\n}\n\nexport interface SidebarRegionProps extends Omit<React.ComponentProps<'div'>, 'ref'> {\n\t/** Ref to the semantic aside boundary. */\n\tref?: React.Ref<HTMLElement>;\n\t/** Named desktop/drawer state and descendant scope owned by this region. */\n\tpanelId: SidebarPanelId;\n\t/** Minimum available width for docking; primary/secondary/aside default to 768/1024/1440. Zero stays docked. */\n\tdockAt?: number;\n\t/** Persistent region geometry, separate from docked/drawer presentation. */\n\tpresentation?: 'panel' | 'rail';\n\t/** Physical edge inherited by the scoped Sidebar and its drawer. @default 'left' */\n\tside?: 'left' | 'right';\n\t/** Expanded CSS length; defaults to --shell-sidebar-width. Rail widths derive from existing density roots. */\n\twidth?: string;\n}\n\n/** A named state and width boundary. Shells can also use static content without a provider. */\nfunction SidebarRegion({panelId, dockAt = sidebarDockThresholds[panelId], presentation = 'panel', side = 'left', width, className, style, ref: forwardedRef, children, ...props}: SidebarRegionProps) {\n\tconst store = useSidebarStore();\n\tconst hostRef = React.useRef<HTMLElement | null>(null);\n\tconst [availableWidth, setAvailableWidth] = React.useState(Number.POSITIVE_INFINITY);\n\tconst [collapse, setCollapse] = React.useState<{collapsible: 'offcanvas' | 'icon' | 'none';variant:'sidebar'|'floating'|'inset'} | null>(null);\n\tconst registerRegion = store?.registerRegion;\n\tReact.useLayoutEffect(() => {\n\t\tconst host = hostRef.current;\n\t\tif (!host) return;\n\t\tconst shell = host.closest('[data-shell-regions]');\n\t\tconst measuredHost = !store || store.adaptTo === 'container' ? shell ?? store?.hostRef.current : null;\n\t\tconst update = () => {\n\t\t\tconst parentWidth = measuredHost?.getBoundingClientRect().width;\n\t\t\tsetAvailableWidth(Math.min(window.innerWidth, parentWidth && parentWidth > 0 ? parentWidth : Number.POSITIVE_INFINITY));\n\t\t};\n\t\tupdate();\n\t\twindow.addEventListener('resize', update);\n\t\tconst observer = measuredHost && typeof ResizeObserver !== 'undefined' ? new ResizeObserver(update) : null;\n\t\tif (measuredHost) observer?.observe(measuredHost);\n\t\treturn () => {window.removeEventListener('resize', update); observer?.disconnect();};\n\t}, [store?.adaptTo, store?.hostRef]);\n\tReact.useLayoutEffect(() => {registerRegion?.(panelId,{dockAt,width:availableWidth,collapsible:collapse?.collapsible});}, [registerRegion,panelId,dockAt,availableWidth,collapse?.collapsible]);\n\tReact.useLayoutEffect(() => () => {registerRegion?.(panelId,null);}, [registerRegion,panelId]);\n\tconst docked = store ? store.getPresentation(panelId) === 'docked' : availableWidth >= dockAt;\n\tconst open = store?.openPanels.includes(panelId) ?? true;\n\tconst collapsed = !open && collapse?.collapsible !== 'none';\n\tconst hidden = !docked || (collapsed && collapse?.collapsible === 'offcanvas');\n\t// Native ThemeScope hosts must stay live while their Sidebar portals into the shared drawer.\n\tconst suppressContents = !docked && !collapse;\n\tconst concealed = docked && collapsed && collapse?.collapsible === 'offcanvas';\n\tconst rail = presentation === 'rail' || (collapsed && collapse?.collapsible === 'icon');\n\tconst scope = React.useMemo(() => ({panelId,geometry:presentation,side,setCollapse}), [panelId,presentation,side]);\n\tlet effectiveWidth = presentation === 'rail' ? 'var(--shell-navigation-rail-width)' : rail ? 'var(--shell-sidebar-width-icon)' : 'var(--sidebar-width)';\n\tif (collapsed && collapse?.collapsible === 'icon' && collapse.variant !== 'sidebar' && presentation !== 'rail') effectiveWidth = 'calc(var(--shell-sidebar-width-icon) + 1rem * var(--space-scale))';\n\treturn <SidebarScope value={scope}><aside\n\t\t{...props}\n\t\tref={node => {hostRef.current = node; if(typeof forwardedRef === 'function') forwardedRef(node); else if(forwardedRef) forwardedRef.current = node;}}\n\t\tdata-slot=\"sidebar-region\"\n\t\tdata-panel-id={panelId}\n\t\tdata-presentation={docked ? 'docked' : 'drawer'}\n\t\tdata-region-presentation={presentation}\n\t\tdata-state={open ? 'expanded' : 'collapsed'}\n\t\tdata-collapsible={collapsed ? collapse?.collapsible : ''}\n\t\tdata-side={side}\n\t\taria-hidden={concealed || undefined}\n\t\tinert={concealed || undefined}\n\t\tclassName={cn('sidebar-region--component shell-sidebar-vars box-border relative min-h-0 shrink-0', collapse?.collapsible === 'offcanvas' && 'overflow-hidden', docked && motionRecipes.sidebar, className)}\n\t\tstyle={{...style, '--sidebar-width':width ?? 'var(--shell-sidebar-width)', width:hidden ? 0 : effectiveWidth, position:docked ? undefined : 'static', display:suppressContents ? 'none' : undefined} as React.CSSProperties}\n\t>{children}</aside></SidebarScope>;\n}\n\n/** Tokenized responsive sidebar shell with contained and viewport-fixed modes. */\nfunction Sidebar(props: SidebarProps) {\n\tconst inherited = React.useContext(SidebarScopeContext);\n\tconst selected = props.panelId ?? inherited?.panelId ?? 'primary';\n\tconst scope = React.useMemo(() => ({...(inherited?.panelId === selected ? inherited : {}),panelId:selected,side:props.side ?? (inherited?.panelId === selected ? inherited.side : undefined) ?? 'left'}), [inherited,selected,props.side]);\n\treturn <SidebarScope value={scope}><SidebarPanel {...props} panelId={selected} /></SidebarScope>;\n}\n\nfunction SidebarPanel({\n\tpanelId = 'primary', surface = 'default', side: sideProp,\n\tvariant = 'sidebar', collapsible = 'offcanvas', contained = false,\n\tclassName, surfaceClassName, rootClassName, children, dir,\n\tstrings: stringsProp, ref: forwardedRef, ...props\n}: SidebarProps) {\n\tconst scope = React.useContext(SidebarScopeContext);\n\tconst regionOwnsWidth = !!scope?.setCollapse;\n\tconst side = sideProp ?? scope?.side ?? 'left';\n\tconst { isMobile, state } = useSidebarPrimitive(panelId);\n\tconst store = useSidebarStore()!;\n\tconst drawer = React.useContext(SidebarDrawerContext);\n\tconst inheritedThemeContainer = useThemePortalContainer();\n\t// Without an explicit container the theme hook returns its native host ref.\n\tconst themeHost = inheritedThemeContainer && 'current' in inheritedThemeContainer\n\t\t? inheritedThemeContainer as React.RefObject<HTMLElement | null> : store.hostRef;\n\tconst themeContainer = inheritedThemeContainer === undefined ? store.hostRef : inheritedThemeContainer;\n\tconst themeScope = React.useMemo(() => ({host:themeHost,mounted:inheritedThemeContainer !== null}), [themeHost,inheritedThemeContainer]);\n\tconst drawerThemeScope = React.useMemo(() => ({host:{current:drawer?.target ?? null},mounted:!!drawer?.target}), [drawer?.target]);\n\tconst strings = useStrings(panelId === 'aside' ? defaultInspectorSidebarStrings : defaultSidebarStrings, stringsProp);\n\tconst rootRef = React.useRef<HTMLDivElement | null>(null);\n\tconst setCollapse = scope?.setCollapse;\n\tReact.useLayoutEffect(() => {setCollapse?.({collapsible,variant}); return () => setCollapse?.(null);}, [setCollapse,collapsible,variant]);\n\tReact.useLayoutEffect(() => {\n\t\tif (regionOwnsWidth) return;\n\t\tstore.registerRegion(panelId,{dockAt:sidebarDockThresholds[panelId],collapsible});\n\t\treturn () => store.registerRegion(panelId,null);\n\t}, [regionOwnsWidth,store.registerRegion,panelId,collapsible]);\n\tReact.useLayoutEffect(() => {\n\t\tdrawer?.register(panelId,{contained,side,dir,className,surfaceClassName,rootClassName,title:strings.mobileTitle,description:strings.mobileDescription,themeContainer,themeScope,props:{...props,ref:forwardedRef}});\n\t});\n\tReact.useLayoutEffect(() => {\n\t\tconst target = drawer?.target;\n\t\tconst popup = target?.parentElement;\n\t\tif (!isMobile || store.mobilePanel !== panelId || !target || !popup || popup.contains(document.activeElement)) return;\n\t\t// Switching panels keeps the same modal owner; its old focused child may\n\t\t// have unmounted, so place focus in the newly selected content.\n\t\tconst first = target.querySelector<HTMLElement>('button:not(:disabled),a[href],input:not(:disabled),textarea:not(:disabled),select:not(:disabled),[tabindex]:not([tabindex=\"-1\"])');\n\t\t(first ?? popup).focus({preventScroll:true});\n\t}, [isMobile,store.mobilePanel,drawer?.target,panelId]);\n\tconst registerDrawer = drawer?.register;\n\tReact.useLayoutEffect(() => () => registerDrawer?.(panelId,null), [registerDrawer,panelId]);\n\tconst attachRoot = React.useCallback((node: HTMLDivElement | null) => {\n\t\tconst previous = rootRef.current;\n\t\tif (!node && previous?.contains(document.activeElement)) {\n\t\t\tqueueMicrotask(() => {if (!previous.isConnected) store.triggerFor(panelId)?.focus();});\n\t\t}\n\t\trootRef.current = node;\n\t}, [store.triggerFor,panelId]);\n\tReact.useLayoutEffect(() => {\n\t\tconst root = rootRef.current;\n\t\tconst active = document.activeElement;\n\t\tif (state !== 'collapsed' || collapsible === 'none' || !root || !(active instanceof HTMLElement) || !root.contains(active)) return;\n\t\tlet concealed = collapsible === 'offcanvas';\n\t\tfor (let node: HTMLElement | null = active; !concealed && node && root.contains(node); node = node.parentElement) {\n\t\t\tconst styles = window.getComputedStyle(node);\n\t\t\tconcealed = node.hidden || styles.display === 'none' || styles.visibility === 'hidden';\n\t\t}\n\t\tif (concealed) store.triggerFor(panelId)?.focus();\n\t}, [state,collapsible,panelId,store]);\n\tconst concealed = !isMobile && state === 'collapsed' && collapsible === 'offcanvas';\n\tconst permanent = collapsible === 'none';\n\tconst sidebarWidth = (props.style as React.CSSProperties & {'--sidebar-width'?: string})?.['--sidebar-width']\n\t\t?? (scope?.geometry === 'rail' ? 'var(--shell-navigation-rail-width)' : undefined);\n\tif (isMobile && collapsible !== 'none') {\n\t\t// Nested surfaces stay within the visible modal boundary and inherit its\n\t\t// selected CSS scope through the native drawer host.\n\t\treturn drawer?.target && store.mobilePanel === panelId ? createPortal(<ThemeScopeHostProvider value={drawerThemeScope}>{children}</ThemeScopeHostProvider>, drawer.target) : null;\n\t}\n\t// Keep one desktop content tree across collapse modes. A permanent panel's\n\t// transparent group lets native widths resolve against its original parent.\n\tconst positioningProps = {...props,ref:forwardedRef};\n\tconst permanentBoundaryProps = permanent ? {\n\t\t'data-panel-id':panelId, 'data-presentation':'docked', 'data-state':state,\n\t\t'data-collapsible':'', 'data-variant':variant, 'data-side':side, dir,\n\t} : {};\n\tif (contained) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'shell-sidebar-vars group peer text-sidebar-foreground',\n\t\t\t\t\tpermanent ? 'contents' : 'sidebar--component sticky top-0 block h-full shrink-0',\n\t\t\t\t\t!permanent && (regionOwnsWidth ? 'w-full' : 'w-(--sidebar-width) transition-[width] duration-200 ease-linear data-[collapsible=offcanvas]:w-0'),\n\t\t\t\t\t!permanent && !regionOwnsWidth && (variant === 'floating' || variant === 'inset'\n\t\t\t\t\t\t? 'data-[collapsible=icon]:w-shell-sidebar-icon-padded'\n\t\t\t\t\t\t: 'data-[collapsible=icon]:w-(--sidebar-width-icon)'),\n\t\t\t\t\t!permanent && rootClassName,\n\t\t\t\t)}\n\t\t\t\tstyle={{'--sidebar-width': sidebarWidth} as React.CSSProperties}\n\t\t\t\tdata-panel-id={panelId}\n\t\t\tdata-presentation=\"docked\"\n\t\t\t\t\taria-hidden={concealed || undefined}\n\t\t\t\t\tinert={concealed || undefined}\n\t\t\tref={attachRoot}\n\t\t\tdata-state={state}\n\t\t\t\t\tdata-collapsible={!permanent && state === 'collapsed' ? collapsible : ''}\n\t\t\t\tdata-variant={variant}\n\t\t\t\tdata-side={side}\n\t\t\t\t\tdata-slot={permanent ? undefined : 'sidebar'}\n\t\t\t\tdir={dir}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tdata-slot={permanent ? 'sidebar' : undefined}\n\t\t\t\t\t{...permanentBoundaryProps}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'box-border flex h-full', permanent ? 'relative' : 'absolute inset-y-0 z-10',\n\t\t\t\t\t\tpermanent && 'sidebar--component',\n\t\t\t\t\t\tregionOwnsWidth ? collapsible === 'offcanvas' ? 'w-(--sidebar-width)' : 'w-full' : 'w-(--sidebar-width) transition-[transform,width] duration-200 ease-linear',\n\t\t\t\t\t\t!regionOwnsWidth && (side === 'left'\n\t\t\t\t\t\t\t? 'left-0 group-data-[collapsible=offcanvas]:-translate-x-full'\n\t\t\t\t\t\t\t: 'right-0 group-data-[collapsible=offcanvas]:translate-x-full'),\n\t\t\t\t\t\tregionOwnsWidth && (side === 'left' ? 'left-0' : 'right-0'),\n\t\t\t\t\t\tvariant === 'floating' || variant === 'inset'\n\t\t\t\t\t\t\t? cn(variant === 'floating' ? 'p-space-md' : 'px-space-md py-space-lg', paddedCollapsedSidebarWidthClass)\n\t\t\t\t\t\t\t: !regionOwnsWidth && 'group-data-[collapsible=icon]:w-(--sidebar-width-icon)',\n\t\t\t\t\t\tpermanent && rootClassName, className,\n\t\t\t\t\t)}\n\t\t\t\t\t{...positioningProps}\n\t\t\t\t>\n\t\t\t\t\t<div\n\t\t\t\t\t\tdata-sidebar=\"sidebar\"\n\t\t\t\t\t\tdata-slot=\"sidebar-inner\"\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t'sidebar--surface box-border flex size-full flex-col group-data-[variant=floating]:rounded-surface group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:border group-data-[variant=floating]:border-sidebar-border',\n\t\t\t\t\t\t\tsurface === 'transparent' ? 'bg-transparent' : 'bg-sidebar',\n\t\t\t\t\t\t\tsurfaceClassName,\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\t\tclassName={cn('shell-sidebar-vars group peer text-sidebar-foreground', permanent ? 'contents' : 'sidebar--component block', !permanent && rootClassName)}\n\t\t\t\tstyle={{'--sidebar-width': sidebarWidth} as React.CSSProperties}\n\t\t\tdata-panel-id={panelId}\n\t\t\tdata-presentation=\"docked\"\n\t\t\t\taria-hidden={concealed || undefined}\n\t\t\t\tinert={concealed || undefined}\n\t\t\tref={attachRoot}\n\t\t\tdata-state={state}\n\t\t\t\tdata-collapsible={!permanent && state === 'collapsed' ? collapsible : ''}\n\t\t\tdata-variant={variant}\n\t\t\tdata-side={side}\n\t\t\tdata-slot={permanent ? undefined : 'sidebar'}\n\t\t\tdir={dir}\n\t\t>\n\t\t\t<div\n\t\t\t\tdata-slot=\"sidebar-gap\"\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'relative w-(--sidebar-width) bg-transparent transition-[width] duration-200 ease-linear',\n\t\t\t\t\t\tpermanent && 'hidden',\n\t\t\t\t\t'group-data-[collapsible=offcanvas]:w-0',\n\t\t\t\t\t'group-data-[side=right]:rotate-180',\n\t\t\t\t\tvariant === 'floating' || variant === 'inset'\n\t\t\t\t\t\t? paddedCollapsedSidebarWidthClass\n\t\t\t\t\t\t: 'group-data-[collapsible=icon]:w-(--sidebar-width-icon)',\n\t\t\t\t)}\n\t\t\t/>\n\t\t\t<div\n\t\t\t\tdata-slot={permanent ? 'sidebar' : 'sidebar-container'}\n\t\t\t\tdata-side={side}\n\t\t\t\t{...permanentBoundaryProps}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\tpermanent ? 'box-border relative flex h-full w-(--sidebar-width)' : 'box-border fixed inset-y-0 z-10 flex h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear data-[side=left]:left-0 data-[side=left]:group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)] data-[side=right]:right-0 data-[side=right]:group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]',\n\t\t\t\t\tpermanent && 'sidebar--component',\n\t\t\t\t\tvariant === 'floating' || variant === 'inset'\n\t\t\t\t\t\t? cn('p-space-md', paddedCollapsedSidebarWidthClass)\n\t\t\t\t\t\t: 'border-border group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l',\n\t\t\t\t\tpermanent && rootClassName, className,\n\t\t\t\t)}\n\t\t\t\t{...positioningProps}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tdata-sidebar=\"sidebar\"\n\t\t\t\t\tdata-slot=\"sidebar-inner\"\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t'sidebar--surface box-border flex size-full flex-col group-data-[variant=floating]:rounded-surface group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:border group-data-[variant=floating]:border-sidebar-border',\n\t\t\t\t\t\tsurface === 'transparent' ? 'bg-transparent' : 'bg-sidebar',\n\t\t\t\t\tsurfaceClassName,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n\nfunction SidebarHeader({ className, ...props }: SidebarHeaderProps) {\n\treturn <SidebarHeaderPrimitive className={cn('sidebar-header--component box-border min-w-0 shrink-0 gap-space-sm p-surface-xs', className)} {...props} />;\n}\n\nfunction SidebarFooter({ className, ...props }: SidebarFooterProps) {\n\treturn <SidebarFooterInsetContext.Provider value={true}>\n\t\t<SidebarFooterPrimitive className={cn('sidebar-footer--component box-border min-w-0 shrink-0 gap-space-md p-surface-xs', surfaceDividerRecipes.sidebar.footer, className)} {...props} />\n\t</SidebarFooterInsetContext.Provider>;\n}\n\nfunction SidebarContent({ className, ...props }: SidebarContentProps) {\n\treturn <SidebarContentPrimitive className={cn('sidebar-content--component min-w-0 gap-space-sm overflow-x-hidden', className)} {...props} />;\n}\n\nfunction SidebarGroup({ className, ...props }: SidebarGroupProps) {\n\tconst footerOwnsInset = React.useContext(SidebarFooterInsetContext);\n\treturn <SidebarGroupPrimitive className={cn('sidebar-group--component box-border', footerOwnsInset ? 'p-0' : 'px-surface-xs py-space-2xs', className)} {...props} />;\n}\n\nfunction SidebarGroupContent({ className, ...props }: SidebarGroupContentProps) {\n\treturn <SidebarGroupContentPrimitive className={cn('sidebar-group-content--component', className)} {...props} />;\n}\n\nfunction SidebarGroupAction({ className, ...props }: SidebarGroupActionProps) {\n\treturn <SidebarGroupActionPrimitive className={cn('sidebar-group-action--component top-space-xs size-action-xs', className)} {...props} />;\n}\n\nfunction SidebarInput({ className, ...props }: SidebarInputProps) {\n\tconst {defaultScale} = useDensityConfig();\n\tconst size = resolveFormControlSize(undefined,defaultScale);\n\treturn <SidebarInputPrimitive className={cn('sidebar-input--component',formFieldFrameClasses(size),className)} {...props} />;\n}\n\nfunction SidebarSeparator({ className, ...props }: SidebarSeparatorProps) {\n\treturn <SidebarSeparatorPrimitive className={cn('sidebar-separator--component mx-space-lg', className)} {...props} />;\n}\n\nfunction SidebarMenu({ className, menuDensity, ...props }: SidebarMenuProps) {\n\tconst inheritedDensity = React.useContext(SidebarMenuDensityContext);\n\tconst density = menuDensity ?? inheritedDensity;\n\tconst recipe = sidebarMenuDensityRecipes[density ?? 'default'];\n\treturn (\n\t\t<SidebarMenuDensityContext.Provider value={density}>\n\t\t\t<SidebarMenuPrimitive className={cn('sidebar-menu--component', recipe.gap, className)} {...props} />\n\t\t</SidebarMenuDensityContext.Provider>\n\t);\n}\n\nfunction SidebarMenuItem({ className, ...props }: SidebarMenuItemProps) {\n\treturn <SidebarMenuItemPrimitive className={cn('sidebar-menu-item--component group-data-[collapsible=icon]:flex group-data-[collapsible=icon]:justify-center', className)} {...props} />;\n}\n\nfunction SidebarMenuAction({ className, ...props }: SidebarMenuActionProps) {\n\tconst density = React.useContext(SidebarMenuDensityContext) ?? 'default';\n\treturn <SidebarMenuActionPrimitive className={cn(\n\t\t'sidebar-menu-action--component size-action-xs right-auto end-space-2xs! top-action-center! -translate-y-1/2 peer-data-[size=sm]/menu-button:top-action-sm-center! peer-data-[size=lg]/menu-button:top-action-lg-center!',\n\t\tdensity === 'comfortable'\n\t\t\t? 'peer-data-[sidebar=menu-sub-button]/menu-sub-button:top-action-sm-center!'\n\t\t\t: 'peer-data-[sidebar=menu-sub-button]/menu-sub-button:top-action-xs-center!',\n\t\tclassName,\n\t)} {...props} />;\n}\n\nfunction SidebarMenuBadge({ className, inline = false, size = 'md', children, ...props }: SidebarMenuBadgeProps) {\n\tconst content = typeof children === 'string' || typeof children === 'number' || typeof children === 'bigint'\n\t\t? (\n\t\t\t<Text tag=\"span\" size=\"xxs\" weight=\"semibold\" lineHeight=\"none\" className=\"text-inherit tabular-nums\">\n\t\t\t\t{children}\n\t\t\t</Text>\n\t\t)\n\t\t: children;\n\n\treturn (\n\t\t<SidebarMenuBadgePrimitive\n\t\t\tclassName={cn(\n\t\t\t\t'sidebar-menu-badge--component shrink-0 text-sidebar-foreground',\n\t\t\t\tsize === 'sm' ? 'h-4 min-w-4' : size === 'lg' ? 'h-6 min-w-6' : 'h-5 min-w-5',\n\t\t\t\tinline\n\t\t\t\t\t? 'static ms-auto translate-y-0'\n\t\t\t\t\t: 'top-action-center! -translate-y-1/2 peer-data-[size=sm]/menu-button:top-action-sm-center! peer-data-[size=lg]/menu-button:top-action-lg-center!',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{content}\n\t\t</SidebarMenuBadgePrimitive>\n\t);\n}\n\nfunction SidebarMenuSkeleton({ className, showIcon = false, style, width, ...props }: SidebarMenuSkeletonProps) {\n\tconst resolvedWidth = width ?? '72%';\n\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"sidebar-menu-skeleton\"\n\t\t\tdata-sidebar=\"menu-skeleton\"\n\t\t\tclassName={cn(\n\t\t\t\t'sidebar-menu-skeleton--component flex h-action items-center gap-space-md rounded-radius px-control-sm',\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tstyle={style}\n\t\t\t{...props}\n\t\t>\n\t\t\t{showIcon ? (\n\t\t\t\t<Skeleton\n\t\t\t\t\tclassName=\"size-icon rounded-radius-sm\"\n\t\t\t\t\tdata-sidebar=\"menu-skeleton-icon\"\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t\t<Skeleton\n\t\t\t\tclassName=\"h-icon-sm flex-1\"\n\t\t\t\tdata-sidebar=\"menu-skeleton-text\"\n\t\t\t\tstyle={{ maxWidth: resolvedWidth }}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\nfunction SidebarMenuSub({ className, ...props }: SidebarMenuSubProps) {\n\tconst density = React.useContext(SidebarMenuDensityContext) ?? 'default';\n\treturn <SidebarMenuSubPrimitive className={cn('sidebar-menu-sub--component border-l-0 border-s! border-sidebar-border', navigationChildInsetClasses, sidebarMenuDensityRecipes[density].childGap, className)} {...props} />;\n}\n\nfunction SidebarMenuSubItem({ className, ...props }: SidebarMenuSubItemProps) {\n\treturn <SidebarMenuSubItemPrimitive className={cn('sidebar-menu-sub-item--component', className)} {...props} />;\n}\n\nfunction SidebarInset({ className, ...props }: SidebarInsetProps) {\n\treturn <SidebarInsetPrimitive className={cn('sidebar-inset--component', className)} {...props} />;\n}\n\nfunction SidebarRail({ className, ...props }: SidebarRailProps) {\n\treturn <SidebarRailPrimitive className={cn('sidebar-rail--component', className)} {...props} />;\n}\n\nfunction SidebarTrigger({ className, ...props }: SidebarTriggerProps) {\n\t// Triggers sit in header rows beside search, tools and account controls, so they share their height.\n\treturn <SidebarTriggerPrimitive className={cn('sidebar-trigger--component size-action', className)} {...props} />;\n}\n\nfunction SidebarMenuButton({\n\tclassName,\n\trender,\n\tsize,\n\ttooltip,\n\tchildren,\n\tactive = false,\n\t...props\n}: SidebarMenuButtonProps) {\n\tconst normalizedRender = tooltip && !render\n\t\t? <button type=\"button\" />\n\t\t: render;\n\tconst normalizedTooltip = normalizeSidebarMenuTooltip(tooltip);\n\t// Without a scope, rows take the default density like the menu gap, child rows\n\t// and actions do, so an unscoped sidebar is not taller than its own rhythm.\n\tconst density = React.useContext(SidebarMenuDensityContext) ?? 'default';\n\tconst resolvedSize = size ?? sidebarMenuDensityRecipes[density].size;\n\tconst primitiveSize = resolvedSize === 'md' ? 'default' : resolvedSize;\n\n\treturn (\n\t\t<SidebarMenuButtonPrimitive\n\t\t\tclassName={cn(\n\t\t\t\t'sidebar-menu-button--component group-data-[collapsible=icon]:px-control-sm! group-data-[collapsible=icon]:py-0!',\n\t\t\t\tnavigationRowInlineClasses,\n\t\t\t\t// Reserve the trailing action (action-xs) plus the control inset: the\n\t\t\t\t// generated recipe is written from the root knobs, because the derived\n\t\t\t\t// --spacing-* aliases are fixed at :root and a scoped density would\n\t\t\t\t// otherwise resolve with the root scale.\n\t\t\t\t'group-has-data-[sidebar=menu-action]/menu-item:px-control-sm!',\n\t\t\t\taffordanceGeometry.menuActionReserve.item,\n\t\t\t\tgetSidebarMenuButtonHeightClass(resolvedSize),\n\t\t\t\tsidebarMenuButtonStateClasses,\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\trender={normalizedRender}\n\t\t\tsize={primitiveSize}\n\t\t\ttooltip={normalizedTooltip}\n\t\t\tisActive={active}\n\t\t\t{...props}\n\t\t>\n\t\t\t{renderSidebarMenuText(children)}\n\t\t</SidebarMenuButtonPrimitive>\n\t);\n}\n\nfunction SidebarMenuSubButton({\n\tclassName,\n\tchildren,\n\tactive = false,\n\t...props\n}: SidebarMenuSubButtonProps) {\n\tconst density = React.useContext(SidebarMenuDensityContext) ?? 'default';\n\treturn (\n\t\t<SidebarMenuSubButtonPrimitive\n\t\t\tclassName={cn(\n\t\t\t\t'sidebar-menu-sub-button--component peer/menu-sub-button translate-x-0',\n\t\t\t\taffordanceGeometry.menuActionReserve.subItem,\n\t\t\t\tnavigationRowInlineClasses,\n\t\t\t\tsidebarMenuDensityRecipes[density].childHeight,\n\t\t\t\tsidebarMenuSubButtonStateClasses,\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tisActive={active}\n\t\t\t{...props}\n\t\t>\n\t\t\t{renderSidebarMenuText(children)}\n\t\t</SidebarMenuSubButtonPrimitive>\n\t);\n}\n\nfunction SidebarGroupLabel({\n\tclassName,\n\tchildren,\n\t...props\n}: SidebarGroupLabelProps) {\n\tconst content =\n\t\ttypeof children === 'string' || typeof children === 'number' || typeof children === 'bigint'\n\t\t\t? <DisplayLabel>{children}</DisplayLabel>\n\t\t\t: children;\n\n\treturn (\n\t\t<SidebarGroupLabelPrimitive\n\t\t\tclassName={cn('sidebar-group-label--component mb-space-md h-action-sm px-control-sm group-data-[collapsible=icon]:hidden', className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{content}\n\t\t</SidebarGroupLabelPrimitive>\n\t);\n}\n\nexport {\n\tSidebar,\n\tSidebarContent,\n\tSidebarFooter,\n\tSidebarGroup,\n\tSidebarGroupAction,\n\tSidebarGroupContent,\n\tSidebarGroupLabel,\n\tSidebarHeader,\n\tSidebarInput,\n\tSidebarInset,\n\tSidebarMenu,\n\tSidebarMenuAction,\n\tSidebarMenuBadge,\n\tSidebarMenuButton,\n\tSidebarMenuItem,\n\tSidebarMenuSkeleton,\n\tSidebarMenuSub,\n\tSidebarMenuSubButton,\n\tSidebarMenuSubItem,\n\tSidebarProvider,\n\tSidebarRegion,\n\tSidebarRail,\n\tSidebarSeparator,\n\tSidebarTrigger,\n};\n\n/** Internal bridge for the layout layer; not part of the base package entrypoint. */\nexport const useBaseSidebarContext = useSidebarPrimitive;\n\n/** Lets composed layouts omit a sidebar control when no provider is present. */\nexport function useHasSidebarProvider() {\n\treturn useSidebarStore() !== null;\n}\n\n/** Internal density bridge for composed navigation; not a base entrypoint export. */\nexport function useBaseSidebarMenuDensity() {\n\treturn React.useContext(SidebarMenuDensityContext);\n}\n\nexport type { SidebarPanelId, SidebarPresentation };\n"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { t as e } from "./utils-
|
|
3
|
-
import { t } from "./smart-card-
|
|
4
|
-
import { i as n } from "./surface-recipes-
|
|
2
|
+
import { t as e } from "./utils-DhuoqFy4.js";
|
|
3
|
+
import { t } from "./smart-card-B6vLxqa_.js";
|
|
4
|
+
import { i as n } from "./surface-recipes-C8mNycaY.js";
|
|
5
5
|
import * as r from "react";
|
|
6
6
|
import { jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
7
7
|
//#region src/components/ui/skeleton.tsx
|
|
@@ -235,7 +235,7 @@ var C = "first:ps-surface last:pe-surface", w = r.forwardRef(function({ rows: n
|
|
|
235
235
|
children: [/* @__PURE__ */ i("thead", { children: /* @__PURE__ */ i("tr", {
|
|
236
236
|
className: "border-b border-border/60",
|
|
237
237
|
children: g.map((t) => /* @__PURE__ */ i("th", {
|
|
238
|
-
className: e("h-control px-row-x text-start align-middle", C),
|
|
238
|
+
className: e("box-border h-control px-row-x text-start align-middle", C),
|
|
239
239
|
children: /* @__PURE__ */ i(y, { className: e("h-4", c[t % c.length]) })
|
|
240
240
|
}, `table-head-${String(t)}`))
|
|
241
241
|
}) }), /* @__PURE__ */ i("tbody", { children: Array.from({ length: m }, (t, n) => /* @__PURE__ */ i("tr", {
|
|
@@ -262,4 +262,4 @@ w.displayName = "TableSkeleton";
|
|
|
262
262
|
//#endregion
|
|
263
263
|
export { S as a, w as i, x as n, y as r, b as t };
|
|
264
264
|
|
|
265
|
-
//# sourceMappingURL=skeleton-
|
|
265
|
+
//# sourceMappingURL=skeleton-DDgdhmu9.js.map
|