@flamingo-stack/openframe-frontend-core 0.0.703 → 0.0.704-snapshot.20261006090649
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/dist/{chunk-TCZCMD5Q.js → chunk-5HBHO5TB.js} +1 -1
- package/dist/{chunk-HYLIQMZH.cjs → chunk-5VA4XAXZ.cjs} +33 -33
- package/dist/{chunk-DAW6TDZB.js → chunk-5VLKPPZW.js} +30 -16
- package/dist/{chunk-NU724ZVN.cjs → chunk-5WI3MW7T.cjs} +121 -121
- package/dist/{chunk-HHFPQNP3.js → chunk-6X7CN3FF.js} +15 -15
- package/dist/{chunk-YR6JPJF4.js → chunk-6XIF2Z7I.js} +4 -4
- package/dist/{chunk-BMJUKS6S.cjs → chunk-734ZCH7K.cjs} +47 -47
- package/dist/{chunk-KFDP3DUL.cjs → chunk-7SNN23RP.cjs} +98 -98
- package/dist/{chunk-S6V7A5FS.cjs → chunk-A5FHI36C.cjs} +32 -32
- package/dist/{chunk-4OGAXAEG.cjs → chunk-ABU3TGXA.cjs} +3 -3
- package/dist/{chunk-BSEIEWM5.cjs → chunk-BCQLAF5R.cjs} +28 -14
- package/dist/{chunk-RLDAYA2A.cjs → chunk-BEG7K2ZX.cjs} +29 -29
- package/dist/{chunk-BRXOGCH3.cjs → chunk-BIZNSF3U.cjs} +3 -3
- package/dist/{chunk-2A4XES7R.cjs → chunk-BM5MVGH3.cjs} +3 -3
- package/dist/{chunk-NCTYD7HL.js → chunk-BNMQKVD6.js} +14 -14
- package/dist/{chunk-IIMICN7L.cjs → chunk-C3BWIU7R.cjs} +4 -44
- package/dist/{chunk-6YCXA7CN.js → chunk-CH5232HV.js} +20 -19
- package/dist/{chunk-67CXGPTW.cjs → chunk-D5A5YYUQ.cjs} +505 -72
- package/dist/{chunk-BOUPNYUV.js → chunk-D6NYUYMA.js} +5 -5
- package/dist/{chunk-UIBSSVON.cjs → chunk-D7BTSVMS.cjs} +2 -2
- package/dist/{chunk-QGTDWFT6.js → chunk-F5JXYSWX.js} +2469 -1928
- package/dist/{chunk-5V6O73EH.js → chunk-FLKJYMVB.js} +3 -3
- package/dist/{chunk-SL2FOFT2.js → chunk-GQ2ZH4VF.js} +7 -7
- package/dist/{chunk-YBGEPKC2.cjs → chunk-HBETPKV4.cjs} +6 -6
- package/dist/{chunk-KJ5LWATV.js → chunk-IHU5ANUY.js} +7 -7
- package/dist/{chunk-NMGX2ZTU.js → chunk-JH4HXSND.js} +17 -17
- package/dist/{chunk-SFGXIFYO.cjs → chunk-LA77476S.cjs} +24 -24
- package/dist/{chunk-G55W76S6.js → chunk-LS42PRUK.js} +10 -10
- package/dist/{chunk-OGLCD3UL.js → chunk-MFFCUVWG.js} +6 -6
- package/dist/{chunk-3L7KCOGO.cjs → chunk-MGGGBHYD.cjs} +30 -30
- package/dist/{chunk-EMCQGFXD.cjs → chunk-MMOODW57.cjs} +28 -27
- package/dist/{chunk-Q76ZTHNV.js → chunk-MP2C3LJ4.js} +1 -1
- package/dist/{chunk-2T6QWNXU.js → chunk-NDESEPW5.js} +99 -11
- package/dist/{chunk-ENGBNKUJ.js → chunk-O23NLB2P.js} +675 -569
- package/dist/{chunk-HUOLB7ZN.cjs → chunk-OHFS7VOU.cjs} +9 -9
- package/dist/{chunk-UTW4SQDI.js → chunk-OHIAKWO2.js} +10 -10
- package/dist/{chunk-2NE3DNXY.js → chunk-OUAGKSNE.js} +2 -2
- package/dist/{chunk-53AC23ZN.js → chunk-PI22A2FL.js} +24 -24
- package/dist/{chunk-HY5YL3U5.cjs → chunk-QCUDVECI.cjs} +1994 -1453
- package/dist/{chunk-GZYLZ4MB.js → chunk-RCG7EE75.js} +3 -3
- package/dist/{chunk-MDBHZBW7.cjs → chunk-RKV5B7EU.cjs} +92 -4
- package/dist/{chunk-5VPIC5MD.cjs → chunk-T5D47RBO.cjs} +12 -12
- package/dist/{chunk-7632TNE7.js → chunk-TZAMUCLI.js} +7 -7
- package/dist/{chunk-NYSYSKSH.cjs → chunk-UFENARMN.cjs} +15 -15
- package/dist/{chunk-HUMWQMCU.js → chunk-UT4YHQZW.js} +3 -3
- package/dist/{chunk-NGJCWEYX.cjs → chunk-VHCACDKP.cjs} +46 -46
- package/dist/{chunk-5FFNNJM7.js → chunk-VR2ZLFCP.js} +1 -1
- package/dist/{chunk-64O4L7WN.js → chunk-WUJNYGO2.js} +11 -51
- package/dist/{chunk-J4K5JOLI.js → chunk-WUJWCSYL.js} +25 -11
- package/dist/{chunk-RTXTGLGB.cjs → chunk-WXRB56OO.cjs} +4 -4
- package/dist/{chunk-GX3OUTFO.cjs → chunk-WZ3NM23A.cjs} +69 -55
- package/dist/{chunk-XCIFHW4E.cjs → chunk-XOYH2YQE.cjs} +2 -2
- package/dist/{chunk-PJP5SMOU.js → chunk-YUURKYCQ.js} +500 -67
- package/dist/{chunk-MXHJROXJ.cjs → chunk-YZCQPTMI.cjs} +1245 -1139
- package/dist/components/case-studies/index.cjs +24 -24
- package/dist/components/case-studies/index.js +10 -10
- package/dist/components/chat/chat-archive-page.d.ts +3 -3
- package/dist/components/chat/chat-archive-page.d.ts.map +1 -1
- package/dist/components/chat/chat-input.d.ts.map +1 -1
- package/dist/components/chat/chat-nav-sidebar.d.ts +4 -0
- package/dist/components/chat/chat-nav-sidebar.d.ts.map +1 -1
- package/dist/components/chat/chat-panel-header.d.ts +3 -2
- package/dist/components/chat/chat-panel-header.d.ts.map +1 -1
- package/dist/components/chat/embeddable-chat.d.ts +36 -2
- package/dist/components/chat/embeddable-chat.d.ts.map +1 -1
- package/dist/components/chat/index.cjs +14 -6
- package/dist/components/chat/index.d.ts +4 -1
- package/dist/components/chat/index.d.ts.map +1 -1
- package/dist/components/chat/index.js +13 -5
- package/dist/components/chat/mingo-archive-list.d.ts +17 -0
- package/dist/components/chat/mingo-archive-list.d.ts.map +1 -0
- package/dist/components/chat/mingo-chat-header.d.ts +31 -0
- package/dist/components/chat/mingo-chat-header.d.ts.map +1 -0
- package/dist/components/chat/mingo-chat-rail.d.ts +54 -0
- package/dist/components/chat/mingo-chat-rail.d.ts.map +1 -0
- package/dist/components/chat/model-display.d.ts.map +1 -1
- package/dist/components/contact/contact-form.d.ts.map +1 -1
- package/dist/components/contact/index.cjs +11 -11
- package/dist/components/contact/index.js +10 -10
- package/dist/components/content-loading-container.d.ts +1 -1
- package/dist/components/content-loading-container.d.ts.map +1 -1
- package/dist/components/docs/index.cjs +14 -14
- package/dist/components/docs/index.js +13 -13
- package/dist/components/docs/skeletons.d.ts.map +1 -1
- package/dist/components/embeds/index.cjs +11 -11
- package/dist/components/embeds/index.js +10 -10
- package/dist/components/faq/index.cjs +12 -12
- package/dist/components/faq/index.js +11 -11
- package/dist/components/features/figma-prototype-viewer.d.ts.map +1 -1
- package/dist/components/features/index.cjs +10 -10
- package/dist/components/features/index.js +9 -9
- package/dist/components/features/media-gallery-manager.d.ts.map +1 -1
- package/dist/components/features/parallax-image-showcase.d.ts.map +1 -1
- package/dist/components/features/policy-configuration-panel.d.ts.map +1 -1
- package/dist/components/features/section-selector.d.ts.map +1 -1
- package/dist/components/help-center-pages/index.cjs +119 -119
- package/dist/components/help-center-pages/index.js +39 -39
- package/dist/components/help-center-pages/trust-center-sections.d.ts +2 -2
- package/dist/components/help-center-pages/trust-center-sections.d.ts.map +1 -1
- package/dist/components/index.cjs +94 -86
- package/dist/components/index.js +32 -24
- package/dist/components/layout/article-detail-layout.d.ts +1 -1
- package/dist/components/layout/article-detail-layout.d.ts.map +1 -1
- package/dist/components/layout/page-container.d.ts.map +1 -1
- package/dist/components/layout/title-block.d.ts +2 -2
- package/dist/components/layout/title-block.d.ts.map +1 -1
- package/dist/components/loading/page-layout-skeleton.d.ts.map +1 -1
- package/dist/components/loading/unified-skeleton.d.ts.map +1 -1
- package/dist/components/meeting-scheduler/booking-form.d.ts +4 -4
- package/dist/components/meeting-scheduler/booking-form.d.ts.map +1 -1
- package/dist/components/meeting-scheduler/context-panel.d.ts.map +1 -1
- package/dist/components/meeting-scheduler/index.cjs +127 -127
- package/dist/components/meeting-scheduler/index.d.ts +2 -2
- package/dist/components/meeting-scheduler/index.d.ts.map +1 -1
- package/dist/components/meeting-scheduler/index.js +50 -50
- package/dist/components/navigation/app-header.d.ts +4 -0
- package/dist/components/navigation/app-header.d.ts.map +1 -1
- package/dist/components/navigation/app-layout-side-panel.d.ts +142 -0
- package/dist/components/navigation/app-layout-side-panel.d.ts.map +1 -0
- package/dist/components/navigation/app-layout.d.ts +11 -1
- package/dist/components/navigation/app-layout.d.ts.map +1 -1
- package/dist/components/navigation/header-mingo-button.d.ts +4 -1
- package/dist/components/navigation/header-mingo-button.d.ts.map +1 -1
- package/dist/components/navigation/index.cjs +13 -13
- package/dist/components/navigation/index.d.ts +1 -0
- package/dist/components/navigation/index.d.ts.map +1 -1
- package/dist/components/navigation/index.js +12 -12
- package/dist/components/navigation/navigation-sidebar.d.ts +8 -1
- package/dist/components/navigation/navigation-sidebar.d.ts.map +1 -1
- package/dist/components/navigation/sliding-sidebar.d.ts.map +1 -1
- package/dist/components/onboarding-guides/index.cjs +14 -14
- package/dist/components/onboarding-guides/index.js +13 -13
- package/dist/components/persistent-filter-controls.d.ts.map +1 -1
- package/dist/components/related-content/index.cjs +7 -7
- package/dist/components/related-content/index.js +6 -6
- package/dist/components/shared/detail-page-skeleton.d.ts.map +1 -1
- package/dist/components/tickets/help-center-create-form.d.ts +4 -4
- package/dist/components/tickets/index.cjs +15 -15
- package/dist/components/tickets/index.js +14 -14
- package/dist/components/ui/announcement-bar-view.d.ts.map +1 -1
- package/dist/components/ui/breadcrumb.d.ts.map +1 -1
- package/dist/components/ui/checkbox-block.d.ts.map +1 -1
- package/dist/components/ui/dashboard-info-card.d.ts +1 -1
- package/dist/components/ui/dashboard-info-card.d.ts.map +1 -1
- package/dist/components/ui/data-table/data-table-body.d.ts +2 -2
- package/dist/components/ui/data-table/data-table-skeleton.d.ts +2 -2
- package/dist/components/ui/data-table/data-table-skeleton.d.ts.map +1 -1
- package/dist/components/ui/data-table/utils.d.ts +2 -2
- package/dist/components/ui/dialog.d.ts.map +1 -1
- package/dist/components/ui/drawer.d.ts.map +1 -1
- package/dist/components/ui/entity-image.d.ts +2 -2
- package/dist/components/ui/file-manager/index.cjs +36 -36
- package/dist/components/ui/file-manager/index.js +3 -3
- package/dist/components/ui/filter-modal.d.ts.map +1 -1
- package/dist/components/ui/index.cjs +18 -10
- package/dist/components/ui/index.js +17 -9
- package/dist/components/ui/info-card-row.d.ts.map +1 -1
- package/dist/components/ui/menubar.d.ts +1 -1
- package/dist/components/ui/menubar.d.ts.map +1 -1
- package/dist/components/ui/modal-v2.d.ts.map +1 -1
- package/dist/components/ui/modal.d.ts.map +1 -1
- package/dist/components/ui/no-data/no-data-actions.d.ts.map +1 -1
- package/dist/components/ui/no-data/no-data-styles.d.ts +1 -1
- package/dist/components/ui/no-data/no-data-styles.d.ts.map +1 -1
- package/dist/components/ui/page-actions.d.ts.map +1 -1
- package/dist/components/ui/sheet.d.ts.map +1 -1
- package/dist/components/ui/table/table-skeleton.d.ts +1 -1
- package/dist/components/ui/table/table-skeleton.d.ts.map +1 -1
- package/dist/hooks/index.cjs +23 -9
- package/dist/hooks/index.js +24 -10
- package/dist/hooks/ui/index.d.ts +1 -0
- package/dist/hooks/ui/index.d.ts.map +1 -1
- package/dist/hooks/ui/use-content-breakpoint.d.ts +32 -0
- package/dist/hooks/ui/use-content-breakpoint.d.ts.map +1 -0
- package/dist/hooks/ui/use-isomorphic-layout-effect.d.ts +2 -2
- package/dist/hooks/ui/use-isomorphic-layout-effect.d.ts.map +1 -1
- package/dist/hooks/ui/use-media-query.d.ts.map +1 -1
- package/dist/index.cjs +39 -17
- package/dist/index.js +41 -19
- package/dist/styles/layout-steps.d.ts +30 -0
- package/dist/styles/layout-steps.d.ts.map +1 -0
- package/dist/tailwind.config.cjs +36 -11
- package/dist/tailwind.config.js +36 -11
- package/eslint-config/README.md +9 -0
- package/eslint-config/base.js +17 -1
- package/eslint-config/layout-variants.js +57 -0
- package/package.json +3 -1
- package/src/ODS_TOKEN_RULES.md +40 -0
- package/src/components/chat/chat-archive-page.tsx +9 -7
- package/src/components/chat/chat-input.tsx +5 -1
- package/src/components/chat/chat-nav-sidebar.tsx +10 -4
- package/src/components/chat/chat-panel-header.tsx +8 -5
- package/src/components/chat/embeddable-chat.tsx +675 -485
- package/src/components/chat/index.ts +4 -0
- package/src/components/chat/mingo-archive-list.tsx +108 -0
- package/src/components/chat/mingo-chat-header.tsx +104 -0
- package/src/components/chat/mingo-chat-rail.tsx +361 -0
- package/src/components/chat/model-display.tsx +8 -1
- package/src/components/contact/contact-form.tsx +11 -9
- package/src/components/content-loading-container.tsx +4 -2
- package/src/components/docs/doc-viewer.tsx +7 -7
- package/src/components/docs/skeletons.tsx +7 -4
- package/src/components/dynamic-skeleton.tsx +1 -1
- package/src/components/embeds/claude-embed.tsx +1 -1
- package/src/components/embeds/embed-viewer-frame.tsx +4 -4
- package/src/components/embeds/figma-embed.tsx +2 -2
- package/src/components/embeds/google-sheets-viewer.tsx +1 -1
- package/src/components/embeds/pdf-viewer.tsx +3 -3
- package/src/components/empty-state.tsx +6 -6
- package/src/components/faq/faq-section.tsx +2 -2
- package/src/components/faq-accordion.tsx +1 -1
- package/src/components/features/board/board-column-header.tsx +1 -1
- package/src/components/features/command-box.tsx +3 -3
- package/src/components/features/entity-video-section.tsx +2 -2
- package/src/components/features/figma-prototype-viewer.tsx +4 -1
- package/src/components/features/media-gallery-manager.tsx +3 -1
- package/src/components/features/parallax-image-showcase.tsx +9 -6
- package/src/components/features/policy-configuration-panel.tsx +9 -7
- package/src/components/features/provider-button.tsx +1 -1
- package/src/components/features/section-selector.tsx +11 -6
- package/src/components/features/select-button.tsx +4 -4
- package/src/components/features/seo-editor-preview.tsx +2 -2
- package/src/components/features/video-ratio-tabs.tsx +3 -3
- package/src/components/features/waitlist-form.tsx +1 -1
- package/src/components/help-center-pages/trust-center-page.tsx +1 -1
- package/src/components/help-center-pages/trust-center-sections.tsx +14 -14
- package/src/components/icon-display.tsx +1 -1
- package/src/components/layout/article-detail-layout.tsx +4 -2
- package/src/components/layout/list-page-layout.tsx +2 -2
- package/src/components/layout/page-container.tsx +26 -14
- package/src/components/layout/page-heading.tsx +1 -1
- package/src/components/layout/page-layout.tsx +1 -1
- package/src/components/layout/title-block.tsx +13 -13
- package/src/components/loading/card-skeleton.tsx +11 -11
- package/src/components/loading/category-vendor-selector-skeleton.tsx +1 -1
- package/src/components/loading/content-skeleton.tsx +6 -6
- package/src/components/loading/device-card-skeleton.tsx +1 -1
- package/src/components/loading/margin-report-skeleton.tsx +7 -7
- package/src/components/loading/msp-profile-form-skeleton.tsx +3 -3
- package/src/components/loading/organization-card-skeleton.tsx +2 -2
- package/src/components/loading/page-layout-skeleton.tsx +80 -68
- package/src/components/loading/unified-skeleton.tsx +16 -6
- package/src/components/media-carousel.tsx +3 -3
- package/src/components/meeting-scheduler/booking-form.tsx +9 -8
- package/src/components/meeting-scheduler/context-panel.tsx +8 -6
- package/src/components/meeting-scheduler/directory.tsx +4 -4
- package/src/components/meeting-scheduler/index.tsx +15 -15
- package/src/components/meeting-scheduler/slot-picker.tsx +12 -12
- package/src/components/navigation/app-header.tsx +6 -0
- package/src/components/navigation/app-layout-side-panel.tsx +594 -0
- package/src/components/navigation/app-layout.tsx +69 -4
- package/src/components/navigation/header-mingo-button.tsx +13 -3
- package/src/components/navigation/index.ts +5 -0
- package/src/components/navigation/navigation-sidebar.tsx +17 -3
- package/src/components/navigation/sliding-sidebar.tsx +2 -1
- package/src/components/pagination.tsx +3 -3
- package/src/components/persistent-filter-controls.tsx +6 -2
- package/src/components/platform/ScriptArguments.tsx +1 -1
- package/src/components/platform/ScriptInfoSection.tsx +4 -4
- package/src/components/shared/article-author-byline.tsx +1 -1
- package/src/components/shared/delivery/delivery-lists.tsx +2 -2
- package/src/components/shared/delivery/delivery-row.tsx +7 -7
- package/src/components/shared/delivery/delivery-table.tsx +3 -3
- package/src/components/shared/detail-page-skeleton.tsx +11 -5
- package/src/components/shared/dev-section/dev-card-row.tsx +6 -6
- package/src/components/shared/dev-section/dev-section-view.tsx +1 -1
- package/src/components/shared/product-release/product-release-card-skeleton.tsx +8 -8
- package/src/components/shared/product-release/product-release-card.tsx +9 -9
- package/src/components/shared/product-release/product-releases-view.tsx +1 -1
- package/src/components/shared/product-release/release-detail-page.tsx +5 -5
- package/src/components/shared/roadmap/roadmap-grid-skeleton.tsx +1 -1
- package/src/components/shared/roadmap/roadmap-grid.tsx +3 -3
- package/src/components/tickets/help-center-card.tsx +1 -1
- package/src/components/tickets/help-center-create-form.tsx +12 -12
- package/src/components/ui/announcement-bar-view.tsx +2 -10
- package/src/components/ui/benefit-card.tsx +18 -18
- package/src/components/ui/brand-association-grid.tsx +4 -4
- package/src/components/ui/breadcrumb.tsx +4 -1
- package/src/components/ui/card.tsx +1 -1
- package/src/components/ui/checkbox-block.tsx +9 -7
- package/src/components/ui/content-loader.tsx +3 -3
- package/src/components/ui/cursor-pagination.tsx +3 -3
- package/src/components/ui/dashboard-info-card.tsx +13 -9
- package/src/components/ui/data-attribution.tsx +2 -2
- package/src/components/ui/data-table/data-table-body.tsx +2 -2
- package/src/components/ui/data-table/data-table-header.tsx +15 -15
- package/src/components/ui/data-table/data-table-skeleton.tsx +6 -6
- package/src/components/ui/data-table/utils.ts +5 -5
- package/src/components/ui/dialog.tsx +4 -1
- package/src/components/ui/drawer.tsx +2 -1
- package/src/components/ui/duration-input.tsx +1 -1
- package/src/components/ui/entity-image.tsx +3 -3
- package/src/components/ui/feature-card.tsx +10 -10
- package/src/components/ui/file-manager/file-manager-action-bar.tsx +1 -1
- package/src/components/ui/file-manager/file-manager.tsx +1 -1
- package/src/components/ui/filter-modal.tsx +8 -1
- package/src/components/ui/highlight-card.tsx +7 -7
- package/src/components/ui/info-card-row.tsx +10 -6
- package/src/components/ui/modal-v2.tsx +7 -2
- package/src/components/ui/modal.tsx +3 -2
- package/src/components/ui/no-data/no-data-actions.tsx +10 -4
- package/src/components/ui/no-data/no-data-styles.ts +1 -1
- package/src/components/ui/no-data/no-data.tsx +1 -1
- package/src/components/ui/organization-card.tsx +1 -1
- package/src/components/ui/page-actions.tsx +34 -5
- package/src/components/ui/progress-bar.tsx +2 -2
- package/src/components/ui/query-report-table/query-report-table.tsx +1 -1
- package/src/components/ui/search-input.tsx +2 -2
- package/src/components/ui/service-card.tsx +2 -2
- package/src/components/ui/sheet.tsx +2 -1
- package/src/components/ui/skeleton.tsx +3 -3
- package/src/components/ui/stacked-rows-panel.tsx +4 -4
- package/src/components/ui/tab-navigation.tsx +2 -2
- package/src/components/ui/tab-selector.tsx +2 -2
- package/src/components/ui/table/table-header.tsx +3 -3
- package/src/components/ui/table/table-skeleton.tsx +3 -3
- package/src/components/ui/table/utils.ts +5 -5
- package/src/components/ui/tag-search-input.tsx +3 -3
- package/src/components/ui/tags-manager.tsx +5 -5
- package/src/components/ui/test-run.tsx +2 -2
- package/src/components/ui/ticket-info-section.tsx +1 -1
- package/src/components/ui/ticket-notes-section.tsx +1 -1
- package/src/components/ui/ticket-status-config-row.tsx +15 -15
- package/src/hooks/ui/index.ts +1 -0
- package/src/hooks/ui/use-content-breakpoint.ts +58 -0
- package/src/hooks/ui/use-media-query.ts +3 -2
- package/src/styles/app-globals.css +13 -0
- package/src/styles/index.css +2 -0
- package/src/styles/layout-steps.ts +14 -0
- package/src/styles/ods-colors.css +15 -0
- package/src/styles/ods-content-area-tokens.css +27 -0
- package/src/styles/ods-content-area.css +31 -0
- package/src/styles/ods-effects.css +4 -2
- package/src/styles/ods-responsive-tokens.css +14 -4
- package/tailwind.config.ts +42 -7
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }"use client";
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var _chunkHBETPKV4cjs = require('./chunk-HBETPKV4.cjs');
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
@@ -13,20 +13,18 @@ var _chunkYBGEPKC2cjs = require('./chunk-YBGEPKC2.cjs');
|
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
var
|
|
16
|
+
var _chunkYZCQPTMIcjs = require('./chunk-YZCQPTMI.cjs');
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
|
|
20
|
-
var
|
|
20
|
+
var _chunkMGGGBHYDcjs = require('./chunk-MGGGBHYD.cjs');
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
|
|
24
|
-
var
|
|
24
|
+
var _chunkQCUDVECIcjs = require('./chunk-QCUDVECI.cjs');
|
|
25
25
|
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
var _chunkIIMICN7Lcjs = require('./chunk-IIMICN7L.cjs');
|
|
27
|
+
var _chunkC3BWIU7Rcjs = require('./chunk-C3BWIU7R.cjs');
|
|
30
28
|
|
|
31
29
|
|
|
32
30
|
|
|
@@ -47,10 +45,15 @@ var _chunkN3COXDBHcjs = require('./chunk-N3COXDBH.cjs');
|
|
|
47
45
|
|
|
48
46
|
|
|
49
47
|
|
|
50
|
-
var
|
|
48
|
+
var _chunkMMOODW57cjs = require('./chunk-MMOODW57.cjs');
|
|
49
|
+
|
|
50
|
+
|
|
51
51
|
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
var _chunkRKV5B7EUcjs = require('./chunk-RKV5B7EU.cjs');
|
|
54
57
|
|
|
55
58
|
|
|
56
59
|
var _chunkQZVSJF2Kcjs = require('./chunk-QZVSJF2K.cjs');
|
|
@@ -59,7 +62,7 @@ var _chunkQZVSJF2Kcjs = require('./chunk-QZVSJF2K.cjs');
|
|
|
59
62
|
|
|
60
63
|
|
|
61
64
|
|
|
62
|
-
var
|
|
65
|
+
var _chunkBM5MVGH3cjs = require('./chunk-BM5MVGH3.cjs');
|
|
63
66
|
|
|
64
67
|
|
|
65
68
|
var _chunk4GFNWALLcjs = require('./chunk-4GFNWALL.cjs');
|
|
@@ -135,8 +138,8 @@ var MOBILE_NAV_PANEL_ID = "mobile-nav-panel";
|
|
|
135
138
|
function MobileNavPanel({ isOpen, config }) {
|
|
136
139
|
const panelRef = _react.useRef.call(void 0, null);
|
|
137
140
|
_overlays.usePreventScroll.call(void 0, { isDisabled: !isOpen });
|
|
138
|
-
|
|
139
|
-
const headerHeight =
|
|
141
|
+
_chunkMGGGBHYDcjs.useFocusTrap.call(void 0, panelRef, isOpen, { onEscape: config.onClose });
|
|
142
|
+
const headerHeight = _chunkC3BWIU7Rcjs.useHeaderHeight.call(void 0, 64, { enabled: isOpen });
|
|
140
143
|
if (!isOpen) return null;
|
|
141
144
|
const renderNavigationItem = (item) => {
|
|
142
145
|
if (item.element) {
|
|
@@ -187,7 +190,7 @@ function MobileNavPanel({ isOpen, config }) {
|
|
|
187
190
|
);
|
|
188
191
|
};
|
|
189
192
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
190
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: _chunk3ATAYP36cjs.cn.call(void 0, "fixed inset-0 z-[9998]",
|
|
193
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: _chunk3ATAYP36cjs.cn.call(void 0, "fixed inset-0 z-[9998]", _chunkQCUDVECIcjs.OVERLAY_BACKDROP_CLASS), onClick: config.onClose }),
|
|
191
194
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
192
195
|
"div",
|
|
193
196
|
{
|
|
@@ -242,16 +245,16 @@ function MobileNavPanel({ isOpen, config }) {
|
|
|
242
245
|
// src/components/navigation/ticket-alerts-button.tsx
|
|
243
246
|
|
|
244
247
|
function TicketAlertsButton({ href, onNavigate, disabled, className }) {
|
|
245
|
-
const live =
|
|
248
|
+
const live = _chunkHBETPKV4cjs.useOptionalTicketLive.call(void 0, );
|
|
246
249
|
if (!live || !live.authed || live.unreadTotal === 0) return null;
|
|
247
250
|
const targetId = live.nextUnreadTicketId;
|
|
248
|
-
const target = targetId ?
|
|
251
|
+
const target = targetId ? _chunkYZCQPTMIcjs.buildTicketOpenHref.call(void 0, href, targetId) : href;
|
|
249
252
|
const handleClick = () => {
|
|
250
253
|
if (onNavigate) onNavigate(target);
|
|
251
254
|
else window.location.assign(target);
|
|
252
255
|
};
|
|
253
256
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
254
|
-
|
|
257
|
+
_chunkYZCQPTMIcjs.HeaderButton,
|
|
255
258
|
{
|
|
256
259
|
icon: (
|
|
257
260
|
// Glyph inherits HeaderButton's standard cell coloring (secondary at
|
|
@@ -261,7 +264,7 @@ function TicketAlertsButton({ href, onNavigate, disabled, className }) {
|
|
|
261
264
|
// existing while updates are unread — never by tinting the glyph.
|
|
262
265
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "relative inline-flex", children: [
|
|
263
266
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkN3COXDBHcjs.LifeBuoyIcon, { className: "h-6 w-6" }),
|
|
264
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
267
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYZCQPTMIcjs.UnreadCountBadge, { count: live.unreadTotal })
|
|
265
268
|
] })
|
|
266
269
|
),
|
|
267
270
|
"aria-label": `Support tickets \u2014 ${live.unreadTotal} unread ${live.unreadTotal === 1 ? "update" : "updates"}`,
|
|
@@ -579,7 +582,7 @@ function Header({ config }) {
|
|
|
579
582
|
leading: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
580
583
|
!!_optionalChain([config, 'access', _12 => _12.actions, 'optionalAccess', _13 => _13.left, 'optionalAccess', _14 => _14.length]) && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex h-full items-center border-r border-ods-border", children: config.actions.left }),
|
|
581
584
|
_optionalChain([config, 'access', _15 => _15.mobile, 'optionalAccess', _16 => _16.enabled]) && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
582
|
-
|
|
585
|
+
_chunkYZCQPTMIcjs.HeaderButton,
|
|
583
586
|
{
|
|
584
587
|
className: "border-r border-ods-border lg:hidden",
|
|
585
588
|
onClick: () => {
|
|
@@ -680,7 +683,7 @@ function HeaderSkeleton({ config }) {
|
|
|
680
683
|
// src/components/navigation/client-only-header.tsx
|
|
681
684
|
|
|
682
685
|
function ClientOnlyHeader({ config, skeleton }) {
|
|
683
|
-
const isClient =
|
|
686
|
+
const isClient = _chunkQCUDVECIcjs.useIsHydrated.call(void 0, );
|
|
684
687
|
if (!isClient) {
|
|
685
688
|
return skeleton || /* @__PURE__ */ _jsxruntime.jsx.call(void 0, HeaderSkeleton, { config });
|
|
686
689
|
}
|
|
@@ -694,12 +697,12 @@ var _framermotion = require('framer-motion');
|
|
|
694
697
|
|
|
695
698
|
function SlidingSidebar({ config }) {
|
|
696
699
|
const [expandedItems, setExpandedItems] = _react.useState.call(void 0, /* @__PURE__ */ new Set());
|
|
697
|
-
const mounted =
|
|
698
|
-
const headerHeight =
|
|
700
|
+
const mounted = _chunkQCUDVECIcjs.useIsHydrated.call(void 0, );
|
|
701
|
+
const headerHeight = _chunkC3BWIU7Rcjs.useHeaderHeight.call(void 0, );
|
|
699
702
|
const asideRef = _react.useRef.call(void 0, null);
|
|
700
703
|
const prefersReducedMotion = _framermotion.useReducedMotion.call(void 0, );
|
|
701
704
|
_overlays.usePreventScroll.call(void 0, { isDisabled: !config.isOpen });
|
|
702
|
-
|
|
705
|
+
_chunkMGGGBHYDcjs.useFocusTrap.call(void 0, asideRef, config.isOpen, { onEscape: config.onClose, contain: false });
|
|
703
706
|
const toggleExpanded = (itemId) => {
|
|
704
707
|
const newExpanded = new Set(expandedItems);
|
|
705
708
|
if (newExpanded.has(itemId)) {
|
|
@@ -826,7 +829,7 @@ function SlidingSidebar({ config }) {
|
|
|
826
829
|
duration: 0.3,
|
|
827
830
|
ease: [0.4, 0, 0.2, 1]
|
|
828
831
|
},
|
|
829
|
-
className: _chunk3ATAYP36cjs.cn.call(void 0, "fixed inset-0 z-[45]",
|
|
832
|
+
className: _chunk3ATAYP36cjs.cn.call(void 0, "fixed inset-0 z-[45]", _chunkQCUDVECIcjs.OVERLAY_BACKDROP_CLASS),
|
|
830
833
|
onClick: () => config.onClose()
|
|
831
834
|
}
|
|
832
835
|
) }),
|
|
@@ -851,7 +854,8 @@ function SlidingSidebar({ config }) {
|
|
|
851
854
|
role: config.isOpen ? "dialog" : void 0,
|
|
852
855
|
"aria-label": config.isOpen ? "Navigation sidebar" : void 0,
|
|
853
856
|
className: _chunk3ATAYP36cjs.cn.call(void 0,
|
|
854
|
-
|
|
857
|
+
// Window chrome: the window's tokens even when opened from a narrow content area.
|
|
858
|
+
"ods-viewport-layer fixed bottom-0 top-0 z-[46] flex w-72 flex-col border-ods-border bg-ods-card shadow-xl",
|
|
855
859
|
config.position === "right" ? "right-0 border-l" : "left-0 border-r",
|
|
856
860
|
config.className
|
|
857
861
|
),
|
|
@@ -901,7 +905,7 @@ function NavigationSidebarHeader({ minimized }) {
|
|
|
901
905
|
|
|
902
906
|
function NavigationItemBadge({ label, compact = false, className, ...rest }) {
|
|
903
907
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
904
|
-
|
|
908
|
+
_chunkMMOODW57cjs.Tag,
|
|
905
909
|
{
|
|
906
910
|
as: "span",
|
|
907
911
|
label,
|
|
@@ -966,7 +970,7 @@ var NavigationSidebarItemButton = _react.memo.call(void 0, function NavigationSi
|
|
|
966
970
|
_react.cloneElement.call(void 0, item.icon, {
|
|
967
971
|
color: isActive && !disabled ? "text-ods-accent" : "text-ods-text-secondary"
|
|
968
972
|
}),
|
|
969
|
-
hasUnread && !showLabel && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
973
|
+
hasUnread && !showLabel && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYZCQPTMIcjs.UnreadDot, { size: "fixed" })
|
|
970
974
|
] }),
|
|
971
975
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
972
976
|
"span",
|
|
@@ -1056,18 +1060,18 @@ var SIDEBAR_GEOMETRY_CLASSES = [
|
|
|
1056
1060
|
].join(" ");
|
|
1057
1061
|
var SIDEBAR_TABLET_WIDTH = { rail: "md:w-14", overlay: "md:w-56" };
|
|
1058
1062
|
var isModifiedClick = (event) => !!event && (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey || event.button !== 0);
|
|
1059
|
-
function NavigationSidebar({ config, disabled = false }) {
|
|
1060
|
-
const isMdUp = _nullishCoalesce(
|
|
1061
|
-
const isLgUp = _nullishCoalesce(
|
|
1063
|
+
function NavigationSidebar({ config, disabled = false, pushOnTablet = false }) {
|
|
1064
|
+
const isMdUp = _nullishCoalesce(_chunkRKV5B7EUcjs.useMdUp.call(void 0, ), () => ( false));
|
|
1065
|
+
const isLgUp = _nullishCoalesce(_chunkRKV5B7EUcjs.useLgUp.call(void 0, ), () => ( false));
|
|
1062
1066
|
const isTablet = isMdUp && !isLgUp;
|
|
1063
|
-
const [desktopMinimized, setDesktopMinimized] =
|
|
1067
|
+
const [desktopMinimized, setDesktopMinimized] = _chunkMGGGBHYDcjs.useLocalStorage.call(void 0, STORAGE_KEY, _nullishCoalesce(config.minimized, () => ( false)));
|
|
1064
1068
|
const [tabletMinimized, setTabletMinimized] = _react.useState.call(void 0, true);
|
|
1065
1069
|
const [tabletFor, setTabletFor] = _react.useState.call(void 0, isTablet);
|
|
1066
1070
|
if (tabletFor !== isTablet) {
|
|
1067
1071
|
setTabletFor(isTablet);
|
|
1068
1072
|
if (isTablet) setTabletMinimized(true);
|
|
1069
1073
|
}
|
|
1070
|
-
const hydrated =
|
|
1074
|
+
const hydrated = _chunkQCUDVECIcjs.useIsHydrated.call(void 0, );
|
|
1071
1075
|
const minimized = hydrated ? isTablet ? tabletMinimized : desktopMinimized : _nullishCoalesce(config.minimized, () => ( false));
|
|
1072
1076
|
const [transitionsEnabled, setTransitionsEnabled] = _react.useState.call(void 0, false);
|
|
1073
1077
|
const isOverlayOpen = isTablet && !minimized;
|
|
@@ -1134,10 +1138,10 @@ function NavigationSidebar({ config, disabled = false }) {
|
|
|
1134
1138
|
};
|
|
1135
1139
|
}, [config.loading, _optionalChain([config, 'access', _82 => _82.loadingRows, 'optionalAccess', _83 => _83.primary]), _optionalChain([config, 'access', _84 => _84.loadingRows, 'optionalAccess', _85 => _85.secondary])]);
|
|
1136
1140
|
const sidebarWidth = _react.useMemo.call(void 0, () => minimized ? `${MINIMIZED_WIDTH}px` : `${EXPANDED_WIDTH}px`, [minimized]);
|
|
1137
|
-
|
|
1141
|
+
_chunkRKV5B7EUcjs.useIsomorphicLayoutEffect.call(void 0, () => {
|
|
1138
1142
|
document.documentElement.style.setProperty(NAVIGATION_SIDEBAR_WIDTH_VAR, sidebarWidth);
|
|
1139
1143
|
}, [sidebarWidth]);
|
|
1140
|
-
|
|
1144
|
+
_chunkRKV5B7EUcjs.useIsomorphicLayoutEffect.call(void 0, () => {
|
|
1141
1145
|
if (transitionsEnabled) return void 0;
|
|
1142
1146
|
const id = requestAnimationFrame(() => {
|
|
1143
1147
|
setTransitionsEnabled(true);
|
|
@@ -1152,13 +1156,23 @@ function NavigationSidebar({ config, disabled = false }) {
|
|
|
1152
1156
|
"fixed inset-0 z-[40] bg-ods-overlay",
|
|
1153
1157
|
"hidden md:block lg:hidden",
|
|
1154
1158
|
"transition-opacity duration-300",
|
|
1155
|
-
isOverlayOpen ? "opacity-100" : "pointer-events-none opacity-0"
|
|
1159
|
+
isOverlayOpen && !pushOnTablet ? "opacity-100" : "pointer-events-none opacity-0"
|
|
1156
1160
|
),
|
|
1157
1161
|
onClick: closeOverlay,
|
|
1158
1162
|
"aria-hidden": "true"
|
|
1159
1163
|
}
|
|
1160
1164
|
),
|
|
1161
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1165
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1166
|
+
"div",
|
|
1167
|
+
{
|
|
1168
|
+
className: _chunk3ATAYP36cjs.cn.call(void 0,
|
|
1169
|
+
"hidden h-full flex-shrink-0 md:block lg:hidden",
|
|
1170
|
+
isOverlayOpen && pushOnTablet ? "w-56" : "w-14",
|
|
1171
|
+
transitionsEnabled && "transition-[width] duration-300"
|
|
1172
|
+
),
|
|
1173
|
+
"aria-hidden": "true"
|
|
1174
|
+
}
|
|
1175
|
+
),
|
|
1162
1176
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
1163
1177
|
"aside",
|
|
1164
1178
|
{
|
|
@@ -1249,7 +1263,7 @@ function HeaderGlobalSearch({
|
|
|
1249
1263
|
"form",
|
|
1250
1264
|
{
|
|
1251
1265
|
onSubmit: handleSubmit,
|
|
1252
|
-
...
|
|
1266
|
+
..._chunkYZCQPTMIcjs.HUBSPOT_DO_NOT_COLLECT_FORM_PROPS,
|
|
1253
1267
|
className: _chunk3ATAYP36cjs.cn.call(void 0,
|
|
1254
1268
|
"flex h-full flex-1 items-center gap-2 px-3",
|
|
1255
1269
|
// Transparent so the cell inherits the bar's background
|
|
@@ -1282,12 +1296,19 @@ function HeaderGlobalSearch({
|
|
|
1282
1296
|
|
|
1283
1297
|
// src/components/navigation/header-mingo-button.tsx
|
|
1284
1298
|
|
|
1285
|
-
function HeaderMingoButton({
|
|
1299
|
+
function HeaderMingoButton({
|
|
1300
|
+
isActive = false,
|
|
1301
|
+
iconOnly = false,
|
|
1302
|
+
closeWhenActive = false,
|
|
1303
|
+
className,
|
|
1304
|
+
...props
|
|
1305
|
+
}) {
|
|
1306
|
+
const showClose = isActive && (iconOnly || closeWhenActive);
|
|
1286
1307
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
1287
1308
|
"button",
|
|
1288
1309
|
{
|
|
1289
1310
|
type: "button",
|
|
1290
|
-
"aria-label":
|
|
1311
|
+
"aria-label": showClose ? "Close Mingo AI" : "Mingo AI",
|
|
1291
1312
|
"aria-pressed": isActive,
|
|
1292
1313
|
className: _chunk3ATAYP36cjs.cn.call(void 0,
|
|
1293
1314
|
"flex h-full shrink-0 items-center gap-2 px-4",
|
|
@@ -1305,7 +1326,7 @@ function HeaderMingoButton({ isActive = false, iconOnly = false, className, ...p
|
|
|
1305
1326
|
),
|
|
1306
1327
|
...props,
|
|
1307
1328
|
children: [
|
|
1308
|
-
|
|
1329
|
+
showClose ? (
|
|
1309
1330
|
// Mobile, drawer open: the icon-only button doubles as the close
|
|
1310
1331
|
// affordance, so swap the Mingo logo for an X. Match the other header
|
|
1311
1332
|
// icons (e.g. notifications): secondary color, w-4 h-4 → md:w-6 h-6.
|
|
@@ -1341,8 +1362,8 @@ function HeaderOrganizationFilter({
|
|
|
1341
1362
|
const selectedOrg = organizations.find((o) => o.id === selectedOrgId);
|
|
1342
1363
|
const displayName = _optionalChain([selectedOrg, 'optionalAccess', _90 => _90.name]) || "All Organizations";
|
|
1343
1364
|
const deviceCount = _nullishCoalesce(_optionalChain([selectedOrg, 'optionalAccess', _91 => _91.deviceCount]), () => ( totalDeviceCount));
|
|
1344
|
-
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
1345
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1365
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkBM5MVGH3cjs.DropdownMenu, { children: [
|
|
1366
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBM5MVGH3cjs.DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
1346
1367
|
"button",
|
|
1347
1368
|
{
|
|
1348
1369
|
className: _chunk3ATAYP36cjs.cn.call(void 0,
|
|
@@ -1365,9 +1386,9 @@ function HeaderOrganizationFilter({
|
|
|
1365
1386
|
]
|
|
1366
1387
|
}
|
|
1367
1388
|
) }),
|
|
1368
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
1369
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1370
|
-
organizations.map((org) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1389
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkBM5MVGH3cjs.DropdownMenuContent, { align: "end", className: "min-w-[240px]", children: [
|
|
1390
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBM5MVGH3cjs.DropdownMenuItem, { onClick: () => _optionalChain([onOrgChange, 'optionalCall', _92 => _92("")]), children: "All Organizations" }),
|
|
1391
|
+
organizations.map((org) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBM5MVGH3cjs.DropdownMenuItem, { onClick: () => _optionalChain([onOrgChange, 'optionalCall', _93 => _93(org.id)]), children: org.name }, org.id))
|
|
1371
1392
|
] })
|
|
1372
1393
|
] });
|
|
1373
1394
|
}
|
|
@@ -1390,6 +1411,7 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
|
|
|
1390
1411
|
showMingoAI = false,
|
|
1391
1412
|
onMingoAI,
|
|
1392
1413
|
isMingoAIActive = false,
|
|
1414
|
+
mingoAICloseWhenActive = false,
|
|
1393
1415
|
showUser,
|
|
1394
1416
|
userName,
|
|
1395
1417
|
userEmail,
|
|
@@ -1403,7 +1425,7 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
|
|
|
1403
1425
|
loading = false,
|
|
1404
1426
|
loadingActionCells
|
|
1405
1427
|
}) {
|
|
1406
|
-
const isMdUp = _nullishCoalesce(
|
|
1428
|
+
const isMdUp = _nullishCoalesce(_chunkRKV5B7EUcjs.useMdUp.call(void 0, ), () => ( false));
|
|
1407
1429
|
if (loading) {
|
|
1408
1430
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1409
1431
|
AppHeaderSkeleton,
|
|
@@ -1436,7 +1458,7 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
|
|
|
1436
1458
|
leading: (
|
|
1437
1459
|
// Mobile: Burger Menu Button
|
|
1438
1460
|
!isMdUp && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1439
|
-
|
|
1461
|
+
_chunkYZCQPTMIcjs.HeaderButton,
|
|
1440
1462
|
{
|
|
1441
1463
|
onClick: onToggleMobileMenu,
|
|
1442
1464
|
isActive: isMobileMenuOpen,
|
|
@@ -1462,7 +1484,7 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
|
|
|
1462
1484
|
center: showSearch ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, HeaderGlobalSearch, { onSubmit: onSearch, className: _chunk3ATAYP36cjs.cn.call(void 0, "w-full", dimmedClass) }) : void 0,
|
|
1463
1485
|
sideActions: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
1464
1486
|
showSearch && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1465
|
-
|
|
1487
|
+
_chunkYZCQPTMIcjs.HeaderButton,
|
|
1466
1488
|
{
|
|
1467
1489
|
icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk4GFNWALLcjs.SearchIcon, { className: "h-6 w-6" }),
|
|
1468
1490
|
"aria-label": "Search",
|
|
@@ -1479,7 +1501,7 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
|
|
|
1479
1501
|
className: _chunk3ATAYP36cjs.cn.call(void 0, "hidden lg:flex", dimmedClass)
|
|
1480
1502
|
}
|
|
1481
1503
|
),
|
|
1482
|
-
showTimeTracker && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1504
|
+
showTimeTracker && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYZCQPTMIcjs.TimeTrackerHeaderButton, { disabled, className: _chunk3ATAYP36cjs.cn.call(void 0, cellDivider, dimmedClass) }),
|
|
1483
1505
|
showNotifications && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1484
1506
|
NotificationsHeaderButton,
|
|
1485
1507
|
{
|
|
@@ -1497,12 +1519,12 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
|
|
|
1497
1519
|
className: _chunk3ATAYP36cjs.cn.call(void 0, cellDivider, dimmedClass)
|
|
1498
1520
|
}
|
|
1499
1521
|
),
|
|
1500
|
-
isMdUp && showUser && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
1501
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1502
|
-
|
|
1522
|
+
isMdUp && showUser && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkBM5MVGH3cjs.DropdownMenu, { children: [
|
|
1523
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkBM5MVGH3cjs.DropdownMenuTrigger, { asChild: true, disabled, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1524
|
+
_chunkYZCQPTMIcjs.HeaderButton,
|
|
1503
1525
|
{
|
|
1504
1526
|
icon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1505
|
-
|
|
1527
|
+
_chunkMMOODW57cjs.SquareAvatar,
|
|
1506
1528
|
{
|
|
1507
1529
|
src: userAvatarUrl || void 0,
|
|
1508
1530
|
alt: userName || "User",
|
|
@@ -1521,14 +1543,14 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
|
|
|
1521
1543
|
}
|
|
1522
1544
|
) }),
|
|
1523
1545
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
1524
|
-
|
|
1546
|
+
_chunkBM5MVGH3cjs.DropdownMenuContent,
|
|
1525
1547
|
{
|
|
1526
1548
|
align: "end",
|
|
1527
1549
|
className: "z-[104] w-[280px] overflow-hidden rounded-[6px] border-ods-border bg-ods-bg p-0",
|
|
1528
1550
|
children: [
|
|
1529
1551
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-2 border-b border-ods-border bg-ods-card p-3", children: [
|
|
1530
1552
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1531
|
-
|
|
1553
|
+
_chunkMMOODW57cjs.SquareAvatar,
|
|
1532
1554
|
{
|
|
1533
1555
|
src: userAvatarUrl || void 0,
|
|
1534
1556
|
alt: userName || "User",
|
|
@@ -1543,7 +1565,7 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
|
|
|
1543
1565
|
] })
|
|
1544
1566
|
] }),
|
|
1545
1567
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1546
|
-
|
|
1568
|
+
_chunkBM5MVGH3cjs.DropdownMenuItem,
|
|
1547
1569
|
{
|
|
1548
1570
|
onClick: onProfile,
|
|
1549
1571
|
className: "cursor-pointer rounded-none border-b border-ods-border bg-ods-card px-3 py-3 hover:bg-ods-card/80 focus:bg-ods-card/80",
|
|
@@ -1554,7 +1576,7 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
|
|
|
1554
1576
|
}
|
|
1555
1577
|
),
|
|
1556
1578
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1557
|
-
|
|
1579
|
+
_chunkBM5MVGH3cjs.DropdownMenuItem,
|
|
1558
1580
|
{
|
|
1559
1581
|
onClick: onLogout,
|
|
1560
1582
|
className: "cursor-pointer rounded-none bg-ods-card px-3 py-3 hover:bg-ods-card/80 focus:bg-ods-card/80",
|
|
@@ -1573,6 +1595,7 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
|
|
|
1573
1595
|
{
|
|
1574
1596
|
onClick: onMingoAI,
|
|
1575
1597
|
isActive: isMingoAIActive,
|
|
1598
|
+
closeWhenActive: mingoAICloseWhenActive,
|
|
1576
1599
|
iconOnly: !isMdUp,
|
|
1577
1600
|
disabled: disabled || !onMingoAI,
|
|
1578
1601
|
className: _chunk3ATAYP36cjs.cn.call(void 0, cellDivider, dimmedClass)
|
|
@@ -1583,12 +1606,12 @@ var AppHeader = _react2.default.memo(function AppHeaderImpl({
|
|
|
1583
1606
|
);
|
|
1584
1607
|
});
|
|
1585
1608
|
function NotificationsHeaderButton({ fallbackUnreadCount, disabled, dimmedClass }) {
|
|
1586
|
-
const ctx =
|
|
1609
|
+
const ctx = _chunkYZCQPTMIcjs.useOptionalNotifications.call(void 0, );
|
|
1587
1610
|
const hasUnread = (_nullishCoalesce(_optionalChain([ctx, 'optionalAccess', _94 => _94.unreadCount]), () => ( fallbackUnreadCount))) > 0;
|
|
1588
1611
|
const isActive = _nullishCoalesce(_optionalChain([ctx, 'optionalAccess', _95 => _95.isOpen]), () => ( false));
|
|
1589
1612
|
const onClick = _optionalChain([ctx, 'optionalAccess', _96 => _96.toggle]);
|
|
1590
1613
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1591
|
-
|
|
1614
|
+
_chunkYZCQPTMIcjs.HeaderButton,
|
|
1592
1615
|
{
|
|
1593
1616
|
icon: isActive ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkN3COXDBHcjs.XmarkIcon, { className: "h-6 w-6" }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkN3COXDBHcjs.BellIcon, { className: "h-6 w-6" }),
|
|
1594
1617
|
showUnreadDot: !isActive && hasUnread,
|
|
@@ -1649,6 +1672,369 @@ function AppHeaderSkeleton({
|
|
|
1649
1672
|
// src/components/navigation/app-layout.tsx
|
|
1650
1673
|
|
|
1651
1674
|
|
|
1675
|
+
// src/components/navigation/app-layout-side-panel.tsx
|
|
1676
|
+
|
|
1677
|
+
|
|
1678
|
+
|
|
1679
|
+
|
|
1680
|
+
|
|
1681
|
+
|
|
1682
|
+
|
|
1683
|
+
|
|
1684
|
+
var SIDE_PANEL_INSET = 16;
|
|
1685
|
+
var MOBILE_QUERY = `not all and ${_chunkRKV5B7EUcjs.breakpoints.md}`;
|
|
1686
|
+
var REDUCED_MOTION_QUERY = "(prefers-reduced-motion: reduce)";
|
|
1687
|
+
var MORPH_MS = 300;
|
|
1688
|
+
var STORAGE_EVENT = "of:side-panel-size";
|
|
1689
|
+
function resolveSidePanelLayout({
|
|
1690
|
+
rowWidth,
|
|
1691
|
+
isMobile,
|
|
1692
|
+
isOpen,
|
|
1693
|
+
size,
|
|
1694
|
+
minWidth,
|
|
1695
|
+
minContentWidth
|
|
1696
|
+
}) {
|
|
1697
|
+
const measured = rowWidth > 0;
|
|
1698
|
+
const room = rowWidth - minContentWidth - SIDE_PANEL_INSET;
|
|
1699
|
+
const canDock = !isMobile && (!measured || room >= minWidth);
|
|
1700
|
+
const maxDockedWidth = measured ? Math.max(minWidth, room) : Number.POSITIVE_INFINITY;
|
|
1701
|
+
let mode;
|
|
1702
|
+
if (isMobile) mode = isOpen ? "overlay" : "hidden";
|
|
1703
|
+
else if (!canDock) mode = isOpen ? "full" : "hidden";
|
|
1704
|
+
else mode = size.expanded ? "full" : "docked";
|
|
1705
|
+
const dockedWidth = Math.min(Math.max(size.width, minWidth), maxDockedWidth);
|
|
1706
|
+
let width;
|
|
1707
|
+
if (mode === "docked") width = dockedWidth;
|
|
1708
|
+
else if (mode === "overlay") width = rowWidth;
|
|
1709
|
+
else width = Math.max(0, rowWidth - 2 * SIDE_PANEL_INSET);
|
|
1710
|
+
return { mode, width, canDock, maxDockedWidth, dockedWidth };
|
|
1711
|
+
}
|
|
1712
|
+
function parseSize(raw) {
|
|
1713
|
+
if (!raw) return null;
|
|
1714
|
+
try {
|
|
1715
|
+
const parsed = JSON.parse(raw);
|
|
1716
|
+
if (!parsed || typeof parsed.width !== "number" || !Number.isFinite(parsed.width)) return null;
|
|
1717
|
+
return { width: parsed.width, expanded: parsed.expanded === true };
|
|
1718
|
+
} catch (e2) {
|
|
1719
|
+
return null;
|
|
1720
|
+
}
|
|
1721
|
+
}
|
|
1722
|
+
function subscribeToStoredSize(onChange) {
|
|
1723
|
+
window.addEventListener("storage", onChange);
|
|
1724
|
+
window.addEventListener(STORAGE_EVENT, onChange);
|
|
1725
|
+
return () => {
|
|
1726
|
+
window.removeEventListener("storage", onChange);
|
|
1727
|
+
window.removeEventListener(STORAGE_EVENT, onChange);
|
|
1728
|
+
};
|
|
1729
|
+
}
|
|
1730
|
+
function useStoredSize(storageKey, fallback) {
|
|
1731
|
+
const raw = _react.useSyncExternalStore.call(void 0,
|
|
1732
|
+
subscribeToStoredSize,
|
|
1733
|
+
() => {
|
|
1734
|
+
if (!storageKey) return null;
|
|
1735
|
+
try {
|
|
1736
|
+
return window.localStorage.getItem(storageKey);
|
|
1737
|
+
} catch (e3) {
|
|
1738
|
+
return null;
|
|
1739
|
+
}
|
|
1740
|
+
},
|
|
1741
|
+
() => null
|
|
1742
|
+
);
|
|
1743
|
+
const [sessionSize, setSessionSize] = _react.useState.call(void 0, null);
|
|
1744
|
+
const size = _nullishCoalesce((storageKey ? parseSize(raw) : sessionSize), () => ( fallback));
|
|
1745
|
+
const setSize = (next) => {
|
|
1746
|
+
if (!storageKey) {
|
|
1747
|
+
setSessionSize(next);
|
|
1748
|
+
return;
|
|
1749
|
+
}
|
|
1750
|
+
try {
|
|
1751
|
+
window.localStorage.setItem(storageKey, JSON.stringify(next));
|
|
1752
|
+
} catch (e4) {
|
|
1753
|
+
setSessionSize(next);
|
|
1754
|
+
}
|
|
1755
|
+
window.dispatchEvent(new Event(STORAGE_EVENT));
|
|
1756
|
+
};
|
|
1757
|
+
return [size, setSize];
|
|
1758
|
+
}
|
|
1759
|
+
function useAppLayoutSidePanel(config, row) {
|
|
1760
|
+
const enabled = config !== void 0;
|
|
1761
|
+
const minWidth = _nullishCoalesce(_optionalChain([config, 'optionalAccess', _97 => _97.minWidth]), () => ( 0));
|
|
1762
|
+
const minContentWidth = _nullishCoalesce(_optionalChain([config, 'optionalAccess', _98 => _98.minContentWidth]), () => ( 400));
|
|
1763
|
+
const collapsed = _nullishCoalesce(_optionalChain([config, 'optionalAccess', _99 => _99.collapsed]), () => ( false));
|
|
1764
|
+
const minimum = { width: minWidth, expanded: false };
|
|
1765
|
+
const [rowWidth, setRowWidth] = _react.useState.call(void 0, 0);
|
|
1766
|
+
_chunkRKV5B7EUcjs.useIsomorphicLayoutEffect.call(void 0, () => {
|
|
1767
|
+
if (!enabled || !row) return void 0;
|
|
1768
|
+
const update = () => setRowWidth(row.clientWidth);
|
|
1769
|
+
update();
|
|
1770
|
+
const observer = new ResizeObserver(update);
|
|
1771
|
+
observer.observe(row);
|
|
1772
|
+
return () => observer.disconnect();
|
|
1773
|
+
}, [enabled, row]);
|
|
1774
|
+
const isMobile = _chunkRKV5B7EUcjs.useMediaQuery.call(void 0, MOBILE_QUERY) === true;
|
|
1775
|
+
const reduceMotion = _chunkRKV5B7EUcjs.useMediaQuery.call(void 0, REDUCED_MOTION_QUERY) === true;
|
|
1776
|
+
const [morph, setMorph] = _react.useState.call(void 0, null);
|
|
1777
|
+
const [liveWidth, setLiveWidth] = _react.useState.call(void 0, null);
|
|
1778
|
+
const [storedSize, setStoredSize] = useStoredSize(_optionalChain([config, 'optionalAccess', _100 => _100.storageKey]), minimum);
|
|
1779
|
+
const [ownIsOpen, setOwnIsOpen] = _react.useState.call(void 0, false);
|
|
1780
|
+
const isOpen = _nullishCoalesce(_optionalChain([config, 'optionalAccess', _101 => _101.open]), () => ( ownIsOpen));
|
|
1781
|
+
const onOpenChange = _optionalChain([config, 'optionalAccess', _102 => _102.onOpenChange]);
|
|
1782
|
+
const setIsOpen = (next) => {
|
|
1783
|
+
if (_optionalChain([config, 'optionalAccess', _103 => _103.open]) === void 0) setOwnIsOpen(next);
|
|
1784
|
+
_optionalChain([onOpenChange, 'optionalCall', _104 => _104(next)]);
|
|
1785
|
+
};
|
|
1786
|
+
const [collapsedSize, setCollapsedSize] = _react.useState.call(void 0, null);
|
|
1787
|
+
const [prevCollapsed, setPrevCollapsed] = _react.useState.call(void 0, collapsed);
|
|
1788
|
+
if (collapsed !== prevCollapsed) {
|
|
1789
|
+
setPrevCollapsed(collapsed);
|
|
1790
|
+
setCollapsedSize(null);
|
|
1791
|
+
}
|
|
1792
|
+
const size = collapsed ? _nullishCoalesce(collapsedSize, () => ( minimum)) : storedSize;
|
|
1793
|
+
const setSize = collapsed ? setCollapsedSize : setStoredSize;
|
|
1794
|
+
const layout = resolveSidePanelLayout({ rowWidth, isMobile, isOpen, size, minWidth, minContentWidth });
|
|
1795
|
+
const [prevCanDock, setPrevCanDock] = _react.useState.call(void 0, layout.canDock);
|
|
1796
|
+
if (layout.canDock !== prevCanDock) {
|
|
1797
|
+
setPrevCanDock(layout.canDock);
|
|
1798
|
+
setOwnIsOpen(false);
|
|
1799
|
+
}
|
|
1800
|
+
const prevCanDockRef = _react.useRef.call(void 0, layout.canDock);
|
|
1801
|
+
_react.useEffect.call(void 0, () => {
|
|
1802
|
+
const couldDock = prevCanDockRef.current;
|
|
1803
|
+
prevCanDockRef.current = layout.canDock;
|
|
1804
|
+
if (!couldDock && layout.canDock && _optionalChain([config, 'optionalAccess', _105 => _105.open])) _optionalChain([onOpenChange, 'optionalCall', _106 => _106(false)]);
|
|
1805
|
+
}, [layout.canDock, _optionalChain([config, 'optionalAccess', _107 => _107.open]), onOpenChange]);
|
|
1806
|
+
if (!enabled) return null;
|
|
1807
|
+
const animate = (next) => {
|
|
1808
|
+
if (!reduceMotion) setMorph(next);
|
|
1809
|
+
};
|
|
1810
|
+
const fullWidth = Math.max(0, rowWidth - 2 * SIDE_PANEL_INSET);
|
|
1811
|
+
const peekWidth = layout.canDock ? liveWidth : null;
|
|
1812
|
+
const dock = (next) => setSize({ width: Math.max(minWidth, Math.round(next)), expanded: false });
|
|
1813
|
+
const resize = (next) => {
|
|
1814
|
+
const expand = next > layout.maxDockedWidth;
|
|
1815
|
+
if (layout.canDock) {
|
|
1816
|
+
if (expand && layout.mode === "docked") animate("expand");
|
|
1817
|
+
else if (!expand && layout.mode === "full") animate("collapse");
|
|
1818
|
+
}
|
|
1819
|
+
if (expand) setSize({ width: size.width, expanded: true });
|
|
1820
|
+
else dock(next);
|
|
1821
|
+
};
|
|
1822
|
+
let collapsesTo = null;
|
|
1823
|
+
if (layout.mode === "full" && layout.canDock) collapsesTo = layout.dockedWidth > minWidth ? "column" : "minimum";
|
|
1824
|
+
else if (layout.mode === "docked" && layout.width > minWidth) collapsesTo = "minimum";
|
|
1825
|
+
return {
|
|
1826
|
+
...layout,
|
|
1827
|
+
minWidth,
|
|
1828
|
+
isOpen,
|
|
1829
|
+
morph,
|
|
1830
|
+
peekWidth,
|
|
1831
|
+
coversContent: layout.mode === "full" && morph !== "expand" && peekWidth === null,
|
|
1832
|
+
overlapsContent: morph !== null || peekWidth !== null,
|
|
1833
|
+
endMorph: () => setMorph(null),
|
|
1834
|
+
collapsesTo,
|
|
1835
|
+
collapse: () => {
|
|
1836
|
+
if (collapsesTo === null) return;
|
|
1837
|
+
if (layout.mode === "full") {
|
|
1838
|
+
animate("collapse");
|
|
1839
|
+
setSize({ width: size.width, expanded: false });
|
|
1840
|
+
} else {
|
|
1841
|
+
animate("narrow");
|
|
1842
|
+
setSize({ width: minWidth, expanded: false });
|
|
1843
|
+
}
|
|
1844
|
+
},
|
|
1845
|
+
toggle: () => setIsOpen(!isOpen),
|
|
1846
|
+
close: () => setIsOpen(false),
|
|
1847
|
+
resize,
|
|
1848
|
+
drag: (next) => {
|
|
1849
|
+
if (next > layout.maxDockedWidth) {
|
|
1850
|
+
if (size.expanded || size.width !== layout.maxDockedWidth) dock(layout.maxDockedWidth);
|
|
1851
|
+
setLiveWidth(Math.min(Math.round(next), fullWidth));
|
|
1852
|
+
return;
|
|
1853
|
+
}
|
|
1854
|
+
setLiveWidth(null);
|
|
1855
|
+
dock(next);
|
|
1856
|
+
},
|
|
1857
|
+
release: (next) => {
|
|
1858
|
+
setLiveWidth(null);
|
|
1859
|
+
if (next <= layout.maxDockedWidth) return;
|
|
1860
|
+
if (next > (layout.maxDockedWidth + fullWidth) / 2) {
|
|
1861
|
+
if (next < fullWidth) animate("expand");
|
|
1862
|
+
setSize({ width: layout.maxDockedWidth, expanded: true });
|
|
1863
|
+
} else {
|
|
1864
|
+
animate("narrow");
|
|
1865
|
+
dock(layout.maxDockedWidth);
|
|
1866
|
+
}
|
|
1867
|
+
}
|
|
1868
|
+
};
|
|
1869
|
+
}
|
|
1870
|
+
function SidePanelResizeHandle({ state, label, controls }) {
|
|
1871
|
+
const { width, minWidth, maxDockedWidth, mode, peekWidth, resize, drag, release } = state;
|
|
1872
|
+
const startRef = _react.useRef.call(void 0, null);
|
|
1873
|
+
const frameRef = _react.useRef.call(void 0, null);
|
|
1874
|
+
const pendingRef = _react.useRef.call(void 0, null);
|
|
1875
|
+
const measured = Number.isFinite(maxDockedWidth);
|
|
1876
|
+
const current = _nullishCoalesce(peekWidth, () => ( (mode === "full" && measured ? maxDockedWidth + 1 : width)));
|
|
1877
|
+
_react.useEffect.call(void 0,
|
|
1878
|
+
() => () => {
|
|
1879
|
+
if (frameRef.current !== null) cancelAnimationFrame(frameRef.current);
|
|
1880
|
+
},
|
|
1881
|
+
[]
|
|
1882
|
+
);
|
|
1883
|
+
const scheduleDrag = (next) => {
|
|
1884
|
+
pendingRef.current = next;
|
|
1885
|
+
if (frameRef.current !== null) return;
|
|
1886
|
+
frameRef.current = requestAnimationFrame(() => {
|
|
1887
|
+
frameRef.current = null;
|
|
1888
|
+
if (pendingRef.current !== null) drag(pendingRef.current);
|
|
1889
|
+
});
|
|
1890
|
+
};
|
|
1891
|
+
const handlePointerDown = (event) => {
|
|
1892
|
+
if (event.button !== 0 && event.pointerType === "mouse") return;
|
|
1893
|
+
event.preventDefault();
|
|
1894
|
+
startRef.current = { x: event.clientX, width: mode === "full" && measured ? width : current };
|
|
1895
|
+
pendingRef.current = null;
|
|
1896
|
+
event.currentTarget.setPointerCapture(event.pointerId);
|
|
1897
|
+
document.body.style.cursor = "col-resize";
|
|
1898
|
+
document.body.style.userSelect = "none";
|
|
1899
|
+
};
|
|
1900
|
+
const handlePointerMove = (event) => {
|
|
1901
|
+
const start = startRef.current;
|
|
1902
|
+
if (!start) return;
|
|
1903
|
+
scheduleDrag(start.width - (event.clientX - start.x));
|
|
1904
|
+
};
|
|
1905
|
+
const endDrag = (event) => {
|
|
1906
|
+
const start = startRef.current;
|
|
1907
|
+
if (!start) return;
|
|
1908
|
+
startRef.current = null;
|
|
1909
|
+
if (frameRef.current !== null) {
|
|
1910
|
+
cancelAnimationFrame(frameRef.current);
|
|
1911
|
+
frameRef.current = null;
|
|
1912
|
+
if (pendingRef.current !== null) drag(pendingRef.current);
|
|
1913
|
+
}
|
|
1914
|
+
if (pendingRef.current !== null) release(pendingRef.current);
|
|
1915
|
+
pendingRef.current = null;
|
|
1916
|
+
try {
|
|
1917
|
+
event.currentTarget.releasePointerCapture(event.pointerId);
|
|
1918
|
+
} catch (e5) {
|
|
1919
|
+
}
|
|
1920
|
+
document.body.style.cursor = "";
|
|
1921
|
+
document.body.style.userSelect = "";
|
|
1922
|
+
};
|
|
1923
|
+
const handleKeyDown = (event) => {
|
|
1924
|
+
const step = event.shiftKey ? 40 : 16;
|
|
1925
|
+
let next = null;
|
|
1926
|
+
if (event.key === "ArrowLeft") next = current + step;
|
|
1927
|
+
else if (event.key === "ArrowRight") next = Math.min(current, maxDockedWidth) - step;
|
|
1928
|
+
else if (event.key === "Home") next = minWidth;
|
|
1929
|
+
else if (event.key === "End" && measured) next = maxDockedWidth + 1;
|
|
1930
|
+
if (next === null) return;
|
|
1931
|
+
event.preventDefault();
|
|
1932
|
+
resize(next);
|
|
1933
|
+
};
|
|
1934
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1935
|
+
"div",
|
|
1936
|
+
{
|
|
1937
|
+
role: "separator",
|
|
1938
|
+
tabIndex: 0,
|
|
1939
|
+
"aria-controls": controls,
|
|
1940
|
+
"aria-orientation": "vertical",
|
|
1941
|
+
"aria-label": label,
|
|
1942
|
+
"aria-valuenow": Math.round(current),
|
|
1943
|
+
"aria-valuemin": minWidth,
|
|
1944
|
+
"aria-valuemax": measured ? Math.round(maxDockedWidth + 1) : void 0,
|
|
1945
|
+
"aria-valuetext": mode === "full" ? "Full width" : `${Math.round(width)} pixels`,
|
|
1946
|
+
onPointerDown: handlePointerDown,
|
|
1947
|
+
onPointerMove: handlePointerMove,
|
|
1948
|
+
onPointerUp: endDrag,
|
|
1949
|
+
onPointerCancel: endDrag,
|
|
1950
|
+
onKeyDown: handleKeyDown,
|
|
1951
|
+
className: "group absolute inset-y-0 left-0 z-10 flex w-4 -translate-x-1/2 cursor-col-resize touch-none select-none items-center justify-center outline-none",
|
|
1952
|
+
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1953
|
+
"span",
|
|
1954
|
+
{
|
|
1955
|
+
"aria-hidden": true,
|
|
1956
|
+
className: "flex h-8 w-4 items-center justify-center rounded-sm border border-ods-border bg-ods-card text-ods-text-secondary transition-colors group-hover:border-ods-border-hover group-focus-visible:border-ods-accent group-focus-visible:text-ods-accent",
|
|
1957
|
+
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkN3COXDBHcjs.Menu01Icon, { size: 12 })
|
|
1958
|
+
}
|
|
1959
|
+
)
|
|
1960
|
+
}
|
|
1961
|
+
);
|
|
1962
|
+
}
|
|
1963
|
+
function AppLayoutSidePanel({ config, state }) {
|
|
1964
|
+
const panelId = _react.useId.call(void 0, );
|
|
1965
|
+
const { mode, width, dockedWidth, canDock, isOpen, close, morph, endMorph, peekWidth } = state;
|
|
1966
|
+
_react.useEffect.call(void 0, () => {
|
|
1967
|
+
if (!morph) return void 0;
|
|
1968
|
+
const timer = window.setTimeout(endMorph, MORPH_MS * 3);
|
|
1969
|
+
return () => window.clearTimeout(timer);
|
|
1970
|
+
}, [morph, endMorph]);
|
|
1971
|
+
if (mode === "hidden") return null;
|
|
1972
|
+
const label = _nullishCoalesce(config.label, () => ( "Side panel"));
|
|
1973
|
+
const inColumn = mode === "docked" || morph === "expand" || peekWidth !== null;
|
|
1974
|
+
const handleKeyDown = (event) => {
|
|
1975
|
+
if (event.key !== "Escape" || !isOpen || event.defaultPrevented) return;
|
|
1976
|
+
event.preventDefault();
|
|
1977
|
+
close();
|
|
1978
|
+
};
|
|
1979
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1980
|
+
"aside",
|
|
1981
|
+
{
|
|
1982
|
+
id: panelId,
|
|
1983
|
+
"aria-label": label,
|
|
1984
|
+
onKeyDown: handleKeyDown,
|
|
1985
|
+
className: _chunk3ATAYP36cjs.cn.call(void 0,
|
|
1986
|
+
"relative min-w-0",
|
|
1987
|
+
// Docked is decided before the viewport is known (server render, first
|
|
1988
|
+
// paint): keep it off phones until JS says otherwise.
|
|
1989
|
+
mode !== "overlay" && inColumn && "hidden shrink-0 md:block",
|
|
1990
|
+
mode !== "overlay" && !inColumn && "flex-1",
|
|
1991
|
+
// z-[99]: above the page's own layers (sticky headers, the z-50 bottom
|
|
1992
|
+
// action bar), BELOW the mobile burger menu (backdrop z-[100], panel
|
|
1993
|
+
// z-[101]), so the menu opens over a panel covering the content.
|
|
1994
|
+
mode === "overlay" && "absolute inset-0 z-[99] bg-ods-bg"
|
|
1995
|
+
),
|
|
1996
|
+
style: mode !== "overlay" && inColumn ? { width: dockedWidth + SIDE_PANEL_INSET } : void 0,
|
|
1997
|
+
children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
1998
|
+
"div",
|
|
1999
|
+
{
|
|
2000
|
+
onTransitionEnd: (event) => {
|
|
2001
|
+
if (event.target === event.currentTarget) endMorph();
|
|
2002
|
+
},
|
|
2003
|
+
onTransitionCancel: (event) => {
|
|
2004
|
+
if (event.target === event.currentTarget) endMorph();
|
|
2005
|
+
},
|
|
2006
|
+
className: _chunk3ATAYP36cjs.cn.call(void 0,
|
|
2007
|
+
"absolute flex",
|
|
2008
|
+
mode === "overlay" ? "inset-0" : "inset-y-[var(--spacing-system-mf)] right-[var(--spacing-system-mf)] z-[1]",
|
|
2009
|
+
morph && "transition-[width] duration-300 ease-in-out motion-reduce:transition-none"
|
|
2010
|
+
),
|
|
2011
|
+
style: mode === "overlay" ? void 0 : { width: _nullishCoalesce(peekWidth, () => ( width)) },
|
|
2012
|
+
children: [
|
|
2013
|
+
canDock && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, SidePanelResizeHandle, { state, label: `Resize ${label}`, controls: panelId }),
|
|
2014
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2015
|
+
"div",
|
|
2016
|
+
{
|
|
2017
|
+
className: _chunk3ATAYP36cjs.cn.call(void 0,
|
|
2018
|
+
"flex min-h-0 min-w-0 flex-1 overflow-hidden bg-ods-bg",
|
|
2019
|
+
mode !== "overlay" && "rounded-md border border-ods-border"
|
|
2020
|
+
),
|
|
2021
|
+
children: config.children({
|
|
2022
|
+
width: _nullishCoalesce(peekWidth, () => ( width)),
|
|
2023
|
+
mode,
|
|
2024
|
+
canClose: mode === "overlay" || mode === "full" && !canDock,
|
|
2025
|
+
close,
|
|
2026
|
+
collapsesTo: state.collapsesTo,
|
|
2027
|
+
collapse: state.collapse
|
|
2028
|
+
})
|
|
2029
|
+
}
|
|
2030
|
+
)
|
|
2031
|
+
]
|
|
2032
|
+
}
|
|
2033
|
+
)
|
|
2034
|
+
}
|
|
2035
|
+
);
|
|
2036
|
+
}
|
|
2037
|
+
|
|
1652
2038
|
// src/components/navigation/mobile-burger-menu.tsx
|
|
1653
2039
|
|
|
1654
2040
|
|
|
@@ -1666,13 +2052,13 @@ var MobileBurgerMenu = _react2.default.memo(function MobileBurgerMenuImpl({
|
|
|
1666
2052
|
}) {
|
|
1667
2053
|
const panelRef = _react.useRef.call(void 0, null);
|
|
1668
2054
|
_overlays.usePreventScroll.call(void 0, { isDisabled: !isOpen });
|
|
1669
|
-
|
|
2055
|
+
_chunkMGGGBHYDcjs.useFocusTrap.call(void 0, panelRef, isOpen, { onEscape: onClose });
|
|
1670
2056
|
const handleItemClick = _react.useCallback.call(void 0,
|
|
1671
2057
|
(item) => {
|
|
1672
2058
|
if (item.onClick) {
|
|
1673
2059
|
item.onClick();
|
|
1674
2060
|
} else if (item.path) {
|
|
1675
|
-
_optionalChain([config, 'access',
|
|
2061
|
+
_optionalChain([config, 'access', _108 => _108.onNavigate, 'optionalCall', _109 => _109(item.path)]);
|
|
1676
2062
|
}
|
|
1677
2063
|
onClose();
|
|
1678
2064
|
},
|
|
@@ -1731,7 +2117,7 @@ var MobileBurgerMenu = _react2.default.memo(function MobileBurgerMenuImpl({
|
|
|
1731
2117
|
{
|
|
1732
2118
|
className: _chunk3ATAYP36cjs.cn.call(void 0,
|
|
1733
2119
|
"absolute inset-0 z-[100] md:hidden",
|
|
1734
|
-
|
|
2120
|
+
_chunkQCUDVECIcjs.OVERLAY_BACKDROP_CLASS,
|
|
1735
2121
|
"transition-all duration-300 motion-reduce:transition-none",
|
|
1736
2122
|
isOpen ? "opacity-100" : "pointer-events-none opacity-0"
|
|
1737
2123
|
),
|
|
@@ -1772,7 +2158,7 @@ var MobileBurgerMenu = _react2.default.memo(function MobileBurgerMenuImpl({
|
|
|
1772
2158
|
"aria-disabled": disabled || void 0,
|
|
1773
2159
|
children: [
|
|
1774
2160
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1775
|
-
|
|
2161
|
+
_chunkMMOODW57cjs.SquareAvatar,
|
|
1776
2162
|
{
|
|
1777
2163
|
src: user.userAvatarUrl || void 0,
|
|
1778
2164
|
alt: user.userName || "User",
|
|
@@ -1796,7 +2182,7 @@ var MobileBurgerMenu = _react2.default.memo(function MobileBurgerMenuImpl({
|
|
|
1796
2182
|
]
|
|
1797
2183
|
}
|
|
1798
2184
|
),
|
|
1799
|
-
_optionalChain([config, 'access',
|
|
2185
|
+
_optionalChain([config, 'access', _110 => _110.topSlot, 'optionalCall', _111 => _111({ minimized: false })]),
|
|
1800
2186
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "nav", { "aria-label": "Primary navigation", children: renderNavigationGrid(primaryItems) }),
|
|
1801
2187
|
secondaryItems.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "nav", { "aria-label": "Secondary navigation", className: "flex flex-col gap-3", children: secondaryItems.map((item) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _react2.default.Fragment, { children: renderNavigationItem(item, false) }, item.id)) }),
|
|
1802
2188
|
onLogout && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
@@ -1832,10 +2218,31 @@ function AppLayout({
|
|
|
1832
2218
|
mobileBurgerMenuProps,
|
|
1833
2219
|
disabled = false,
|
|
1834
2220
|
drawer,
|
|
1835
|
-
topBar
|
|
2221
|
+
topBar,
|
|
2222
|
+
sidePanel
|
|
1836
2223
|
}) {
|
|
1837
2224
|
const [mobileMenuOpen, setMobileMenuOpen] = _react.useState.call(void 0, false);
|
|
1838
2225
|
const [drawerContainer, setDrawerContainer] = _react.useState.call(void 0, null);
|
|
2226
|
+
const [mainElement, setMainElement] = _react.useState.call(void 0, null);
|
|
2227
|
+
const [contentWidth, setContentWidth] = _react.useState.call(void 0, null);
|
|
2228
|
+
const hasSidePanel = sidePanel !== void 0;
|
|
2229
|
+
const sidePanelState = useAppLayoutSidePanel(sidePanel, drawerContainer);
|
|
2230
|
+
_chunkRKV5B7EUcjs.useIsomorphicLayoutEffect.call(void 0, () => {
|
|
2231
|
+
if (!hasSidePanel || !mainElement) return void 0;
|
|
2232
|
+
const update = () => setContentWidth(mainElement.clientWidth);
|
|
2233
|
+
update();
|
|
2234
|
+
const observer = new ResizeObserver(update);
|
|
2235
|
+
observer.observe(mainElement);
|
|
2236
|
+
return () => observer.disconnect();
|
|
2237
|
+
}, [hasSidePanel, mainElement]);
|
|
2238
|
+
const resolvedHeaderProps = sidePanelState === null ? headerProps : {
|
|
2239
|
+
...headerProps,
|
|
2240
|
+
showMingoAI: !sidePanelState.canDock,
|
|
2241
|
+
onMingoAI: sidePanelState.toggle,
|
|
2242
|
+
isMingoAIActive: sidePanelState.isOpen,
|
|
2243
|
+
mingoAICloseWhenActive: true
|
|
2244
|
+
};
|
|
2245
|
+
const contentCovered = _optionalChain([sidePanelState, 'optionalAccess', _112 => _112.coversContent]) === true;
|
|
1839
2246
|
const mobileMenuOpenRef = _react.useRef.call(void 0, mobileMenuOpen);
|
|
1840
2247
|
_react.useEffect.call(void 0, () => {
|
|
1841
2248
|
mobileMenuOpenRef.current = mobileMenuOpen;
|
|
@@ -1866,10 +2273,10 @@ function AppLayout({
|
|
|
1866
2273
|
}),
|
|
1867
2274
|
[]
|
|
1868
2275
|
);
|
|
1869
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2276
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYZCQPTMIcjs.AppLayoutDrawerContainerContext.Provider, { value: drawerContainer, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYZCQPTMIcjs.AppLayoutDrawerCoordinationContext.Provider, { value: drawerCoordination, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunk3ATAYP36cjs.cn.call(void 0, "flex h-screen flex-col bg-ods-bg", className), children: [
|
|
1870
2277
|
topBar,
|
|
1871
2278
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "relative flex min-h-0 flex-1", children: [
|
|
1872
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, NavigationSidebar, { config: sidebarConfig, disabled }),
|
|
2279
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, NavigationSidebar, { config: sidebarConfig, disabled, pushOnTablet: hasSidePanel }),
|
|
1873
2280
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1874
2281
|
MobileBurgerMenu,
|
|
1875
2282
|
{
|
|
@@ -1884,17 +2291,43 @@ function AppLayout({
|
|
|
1884
2291
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1885
2292
|
AppHeader,
|
|
1886
2293
|
{
|
|
1887
|
-
...
|
|
2294
|
+
...resolvedHeaderProps,
|
|
1888
2295
|
isMobileMenuOpen: mobileMenuOpen,
|
|
1889
2296
|
onToggleMobileMenu: handleToggleMobileMenu,
|
|
1890
2297
|
disabled
|
|
1891
2298
|
}
|
|
1892
2299
|
),
|
|
1893
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1894
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
1895
|
-
|
|
1896
|
-
|
|
1897
|
-
|
|
2300
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkYZCQPTMIcjs.NotificationDrawer, {}),
|
|
2301
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
2302
|
+
"div",
|
|
2303
|
+
{
|
|
2304
|
+
ref: setDrawerContainer,
|
|
2305
|
+
className: _chunk3ATAYP36cjs.cn.call(void 0, "relative flex flex-1 overflow-hidden", sidePanel ? "flex-row" : "flex-col"),
|
|
2306
|
+
children: [
|
|
2307
|
+
sidePanel ? (
|
|
2308
|
+
// `hidden` while the panel covers the area: the page stays
|
|
2309
|
+
// mounted, it just takes no room.
|
|
2310
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
2311
|
+
"main",
|
|
2312
|
+
{
|
|
2313
|
+
ref: setMainElement,
|
|
2314
|
+
className: _chunk3ATAYP36cjs.cn.call(void 0,
|
|
2315
|
+
"ods-content-area min-w-0 flex-1 overflow-y-auto",
|
|
2316
|
+
contentCovered && "hidden",
|
|
2317
|
+
// While the panel is drawn over the page, keep the page's own
|
|
2318
|
+
// z-indexed layers (sticky headers, fixed bars) under it.
|
|
2319
|
+
_optionalChain([sidePanelState, 'optionalAccess', _113 => _113.overlapsContent]) && "isolate",
|
|
2320
|
+
mainClassName
|
|
2321
|
+
),
|
|
2322
|
+
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkRKV5B7EUcjs.ContentAreaWidthContext.Provider, { value: contentWidth, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "ods-content-scope", children }) })
|
|
2323
|
+
}
|
|
2324
|
+
)
|
|
2325
|
+
) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "main", { className: _chunk3ATAYP36cjs.cn.call(void 0, "flex-1 overflow-y-auto", mainClassName), children }),
|
|
2326
|
+
sidePanel && sidePanelState && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, AppLayoutSidePanel, { config: sidePanel, state: sidePanelState }),
|
|
2327
|
+
drawer
|
|
2328
|
+
]
|
|
2329
|
+
}
|
|
2330
|
+
)
|
|
1898
2331
|
] })
|
|
1899
2332
|
] })
|
|
1900
2333
|
] }) }) });
|