@flamingo-stack/openframe-frontend-core 0.0.702 → 0.0.703-snapshot.20261006080901
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-CYYTD5ZK.cjs → chunk-262YQFOS.cjs} +47 -47
- package/dist/{chunk-SAA7B3DA.js → chunk-2G546OND.js} +500 -67
- package/dist/{chunk-6JPQDYYY.js → chunk-2JDVL7UV.js} +2614 -2001
- package/dist/{chunk-ASN65P3F.cjs → chunk-4DQMTBMK.cjs} +15 -15
- package/dist/{chunk-CZ34HXDW.js → chunk-4KGXLVCF.js} +686 -725
- package/dist/{chunk-TCZCMD5Q.js → chunk-5HBHO5TB.js} +1 -1
- package/dist/{chunk-446KS5BG.js → chunk-5QJDM6UV.js} +5 -5
- package/dist/{chunk-UJJWTJ6S.js → chunk-6WQIUQUC.js} +30 -16
- package/dist/{chunk-YR6JPJF4.js → chunk-6XIF2Z7I.js} +4 -4
- package/dist/{chunk-YGRHITPY.cjs → chunk-7JIL3WOH.cjs} +24 -24
- package/dist/{chunk-RS7HWAYX.js → chunk-7LFIKJX2.js} +3 -3
- package/dist/{chunk-4OGAXAEG.cjs → chunk-ABU3TGXA.cjs} +3 -3
- package/dist/{chunk-3WSFIV5G.cjs → chunk-AMYY3PNL.cjs} +69 -55
- package/dist/{chunk-BRXOGCH3.cjs → chunk-BIZNSF3U.cjs} +3 -3
- package/dist/{chunk-2A4XES7R.cjs → chunk-BM5MVGH3.cjs} +3 -3
- package/dist/{chunk-IIMICN7L.cjs → chunk-C3BWIU7R.cjs} +4 -44
- package/dist/{chunk-LZNJH23A.cjs → chunk-C7XGRLT5.cjs} +12 -12
- package/dist/{chunk-6YCXA7CN.js → chunk-CH5232HV.js} +20 -19
- package/dist/{chunk-UIBSSVON.cjs → chunk-D7BTSVMS.cjs} +2 -2
- package/dist/{chunk-BO5ZHDA4.js → chunk-ERCV6HHJ.js} +7 -7
- package/dist/{chunk-5V6O73EH.js → chunk-FLKJYMVB.js} +3 -3
- package/dist/{chunk-Z5HDCZAS.js → chunk-FXENTYE5.js} +15 -15
- package/dist/{chunk-HIXGAY2L.cjs → chunk-HFJW24JJ.cjs} +121 -121
- package/dist/{chunk-HPJ4XS2L.js → chunk-HJAYVKWQ.js} +24 -24
- package/dist/{chunk-PLK6GHN7.js → chunk-I7DFUQMN.js} +10 -10
- package/dist/{chunk-KJ5LWATV.js → chunk-IHU5ANUY.js} +7 -7
- package/dist/{chunk-AEQANLBW.cjs → chunk-IZGDG5X6.cjs} +505 -72
- package/dist/{chunk-2V4Z44G6.js → chunk-JEYRXT5L.js} +17 -17
- package/dist/{chunk-B3LZJ6J3.cjs → chunk-L3IC42IF.cjs} +32 -32
- package/dist/{chunk-RTGPIHVO.cjs → chunk-LDPEQGKT.cjs} +2243 -1630
- package/dist/{chunk-FD4DBTFO.cjs → chunk-LTSTC3N5.cjs} +1253 -1292
- package/dist/{chunk-OGLCD3UL.js → chunk-MFFCUVWG.js} +6 -6
- package/dist/{chunk-3L7KCOGO.cjs → chunk-MGGGBHYD.cjs} +30 -30
- package/dist/{chunk-QFW3RUZS.cjs → chunk-MI3JUJ75.cjs} +33 -33
- package/dist/{chunk-EMCQGFXD.cjs → chunk-MMOODW57.cjs} +28 -27
- package/dist/{chunk-Q76ZTHNV.js → chunk-MP2C3LJ4.js} +1 -1
- package/dist/{chunk-E3DH543A.cjs → chunk-N3TO7JV3.cjs} +98 -98
- package/dist/{chunk-2T6QWNXU.js → chunk-NDESEPW5.js} +99 -11
- package/dist/{chunk-ETFFEA3J.js → chunk-NRLJUBCS.js} +7 -7
- package/dist/{chunk-HUOLB7ZN.cjs → chunk-OHFS7VOU.cjs} +9 -9
- package/dist/{chunk-MWUBBBWZ.js → chunk-QVSFBSWV.js} +10 -10
- package/dist/{chunk-MDBHZBW7.cjs → chunk-RKV5B7EU.cjs} +92 -4
- package/dist/{chunk-3G76LRGL.cjs → chunk-SYXQLETR.cjs} +29 -29
- package/dist/{chunk-FHM7GD5B.cjs → chunk-UK62YTH6.cjs} +28 -14
- 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-IZKOQVXO.js → chunk-VTASHWER.js} +14 -14
- package/dist/{chunk-64O4L7WN.js → chunk-WUJNYGO2.js} +11 -51
- package/dist/{chunk-JOY6HVPV.js → chunk-XATTBO5X.js} +25 -11
- package/dist/{chunk-L7KZA7ZD.cjs → chunk-XIFOBQRQ.cjs} +6 -6
- package/dist/{chunk-CXDJUKC6.cjs → chunk-XJKZ4IKT.cjs} +4 -4
- package/dist/{chunk-XCIFHW4E.cjs → chunk-XOYH2YQE.cjs} +2 -2
- package/dist/{chunk-HYFLTFFB.js → chunk-ZQFZSFQI.js} +2 -2
- 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-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-drawer.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 +7 -3
- 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/panel-resize-handle.d.ts +25 -0
- package/dist/components/ui/panel-resize-handle.d.ts.map +1 -0
- 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/hooks/ui/use-resizable-panel-size.d.ts +46 -0
- package/dist/hooks/ui/use-resizable-panel-size.d.ts.map +1 -0
- 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-nav-sidebar.tsx +10 -4
- package/src/components/chat/chat-panel-header.tsx +8 -5
- package/src/components/chat/embeddable-chat.tsx +686 -494
- 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-drawer.tsx +14 -237
- 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 +43 -189
- 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/panel-resize-handle.tsx +184 -0
- 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/hooks/ui/use-resizable-panel-size.ts +114 -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
package/dist/index.js
CHANGED
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
SoftwareInfo,
|
|
10
10
|
SoftwareSourceBadge,
|
|
11
11
|
ToolBadge
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-I7DFUQMN.js";
|
|
13
13
|
import {
|
|
14
14
|
AppHeader,
|
|
15
15
|
AppLayout,
|
|
@@ -29,14 +29,14 @@ import {
|
|
|
29
29
|
SlidingSidebar,
|
|
30
30
|
TicketAlertsButton,
|
|
31
31
|
TopNavigation
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-2G546OND.js";
|
|
33
33
|
import {
|
|
34
34
|
MobileNavigationDropdown,
|
|
35
35
|
MultiLevelNavigation,
|
|
36
36
|
StickySectionNav,
|
|
37
37
|
useSectionNavigation
|
|
38
|
-
} from "./chunk-
|
|
39
|
-
import "./chunk-
|
|
38
|
+
} from "./chunk-ZQFZSFQI.js";
|
|
39
|
+
import "./chunk-7LFIKJX2.js";
|
|
40
40
|
import {
|
|
41
41
|
AIEnrichButton,
|
|
42
42
|
AIEnrichSection,
|
|
@@ -665,7 +665,7 @@ import {
|
|
|
665
665
|
withFirstTouchAttribution,
|
|
666
666
|
withWalkthroughOpenParam,
|
|
667
667
|
writeDismissCookie
|
|
668
|
-
} from "./chunk-
|
|
668
|
+
} from "./chunk-4KGXLVCF.js";
|
|
669
669
|
import "./chunk-LQYXMEYF.js";
|
|
670
670
|
import "./chunk-4JPLYOS6.js";
|
|
671
671
|
import {
|
|
@@ -783,7 +783,7 @@ import {
|
|
|
783
783
|
validateSchema,
|
|
784
784
|
validateVariables,
|
|
785
785
|
variablesToUrlParams
|
|
786
|
-
} from "./chunk-
|
|
786
|
+
} from "./chunk-IHU5ANUY.js";
|
|
787
787
|
import "./chunk-HFL2F4RM.js";
|
|
788
788
|
import {
|
|
789
789
|
CONTENT_REF_GROUPS,
|
|
@@ -791,7 +791,7 @@ import {
|
|
|
791
791
|
getContentRefLabel,
|
|
792
792
|
getContentRefLabelOrTitleCase,
|
|
793
793
|
orderContentRefTypes
|
|
794
|
-
} from "./chunk-
|
|
794
|
+
} from "./chunk-UT4YHQZW.js";
|
|
795
795
|
import {
|
|
796
796
|
PAGE_PARAM_LIMITS,
|
|
797
797
|
clampPageToTotal,
|
|
@@ -805,7 +805,7 @@ import {
|
|
|
805
805
|
serializeSchemaParams,
|
|
806
806
|
shouldIncludeInUrl,
|
|
807
807
|
withQuery
|
|
808
|
-
} from "./chunk-
|
|
808
|
+
} from "./chunk-MP2C3LJ4.js";
|
|
809
809
|
import {
|
|
810
810
|
Checkbox
|
|
811
811
|
} from "./chunk-PLWMIU72.js";
|
|
@@ -936,6 +936,7 @@ import {
|
|
|
936
936
|
MAX_PENDING_RETAIN_KEYS,
|
|
937
937
|
MESSAGE_ROLE,
|
|
938
938
|
MESSAGE_TYPE,
|
|
939
|
+
MINGO_V2_RAIL_WIDTH,
|
|
939
940
|
MUX_IMAGE_ORIGIN,
|
|
940
941
|
MUX_STREAM_ORIGIN,
|
|
941
942
|
MarkdownEngine,
|
|
@@ -944,8 +945,11 @@ import {
|
|
|
944
945
|
MemoizedChatMessageEnhanced,
|
|
945
946
|
MermaidDiagram,
|
|
946
947
|
MessageSegmentAccumulator,
|
|
948
|
+
MingoArchiveList,
|
|
949
|
+
MingoChatHeader,
|
|
947
950
|
MingoChatHistory,
|
|
948
951
|
MingoChatHistorySkeleton,
|
|
952
|
+
MingoChatRail,
|
|
949
953
|
MingoHistoryRail,
|
|
950
954
|
MingoOnboardingCard,
|
|
951
955
|
MingoOnboardingCardSkeleton,
|
|
@@ -1200,7 +1204,7 @@ import {
|
|
|
1200
1204
|
useVideoOriginPreconnect,
|
|
1201
1205
|
useVideoWarmup,
|
|
1202
1206
|
usesCanonicalStatusStyle
|
|
1203
|
-
} from "./chunk-
|
|
1207
|
+
} from "./chunk-2JDVL7UV.js";
|
|
1204
1208
|
import {
|
|
1205
1209
|
HEADING_EMOJI_RE,
|
|
1206
1210
|
HUB_HEADER_OFFSET_PX,
|
|
@@ -1210,7 +1214,6 @@ import {
|
|
|
1210
1214
|
STICKY_HEADER_OFFSET_PX,
|
|
1211
1215
|
ToolIcon,
|
|
1212
1216
|
ToolTypeValues,
|
|
1213
|
-
breakpoints,
|
|
1214
1217
|
clamp,
|
|
1215
1218
|
createFenceTracker,
|
|
1216
1219
|
createHeadingIdDeduper,
|
|
@@ -1237,17 +1240,13 @@ import {
|
|
|
1237
1240
|
useDebounce,
|
|
1238
1241
|
useHeaderHeight,
|
|
1239
1242
|
useInView,
|
|
1240
|
-
useLgUp,
|
|
1241
1243
|
useMarqueeEngine,
|
|
1242
|
-
useMdUp,
|
|
1243
|
-
useMediaQuery,
|
|
1244
1244
|
useNearViewport,
|
|
1245
1245
|
usePrefersReducedMotion,
|
|
1246
1246
|
usePrefersReducedMotionState,
|
|
1247
1247
|
useResetOnPageHidden,
|
|
1248
|
-
useSmUp,
|
|
1249
1248
|
useSuppressCloneFocus
|
|
1250
|
-
} from "./chunk-
|
|
1249
|
+
} from "./chunk-WUJNYGO2.js";
|
|
1251
1250
|
import "./chunk-GY4IZG22.js";
|
|
1252
1251
|
import {
|
|
1253
1252
|
AboutIcon,
|
|
@@ -1614,20 +1613,25 @@ import {
|
|
|
1614
1613
|
urlPathLooksLikeSvg,
|
|
1615
1614
|
useCoverImageFallback,
|
|
1616
1615
|
webinarTiming
|
|
1617
|
-
} from "./chunk-
|
|
1616
|
+
} from "./chunk-CH5232HV.js";
|
|
1618
1617
|
import "./chunk-FBZMAPWO.js";
|
|
1619
1618
|
import {
|
|
1619
|
+
CONTENT_BREAKPOINTS,
|
|
1620
|
+
ContentAreaWidthContext,
|
|
1620
1621
|
EMBED_PROXY_OPTIONAL_HEADERS,
|
|
1621
1622
|
ODS_STEM_CLASSES,
|
|
1622
1623
|
ODS_STEM_TOKENS,
|
|
1623
1624
|
PLATFORM_BRAND,
|
|
1624
1625
|
PLATFORM_SURFACE,
|
|
1625
1626
|
PLATFORM_THEME,
|
|
1627
|
+
ViewportBreakpoints,
|
|
1626
1628
|
applyProxyAuth,
|
|
1629
|
+
breakpoints,
|
|
1627
1630
|
buildOgPlaceholderUrl,
|
|
1628
1631
|
clearAuthedAssetCache,
|
|
1629
1632
|
clearAuthedImageCache,
|
|
1630
1633
|
clearEmbedProxyAuth,
|
|
1634
|
+
contentBreakpointFor,
|
|
1631
1635
|
embedAuthedFetch,
|
|
1632
1636
|
getDefaultColorForPlatform,
|
|
1633
1637
|
getDefaultIconForPlatform,
|
|
@@ -1659,11 +1663,18 @@ import {
|
|
|
1659
1663
|
setEmbedProxyAuth,
|
|
1660
1664
|
useAuthedAssetSrc,
|
|
1661
1665
|
useAuthedImageSrc,
|
|
1666
|
+
useContentBreakpoint,
|
|
1667
|
+
useContentLgUp,
|
|
1668
|
+
useContentMdUp,
|
|
1662
1669
|
useImageEdgeColor,
|
|
1663
1670
|
useIsTruncated,
|
|
1664
1671
|
useIsomorphicLayoutEffect,
|
|
1665
|
-
|
|
1666
|
-
|
|
1672
|
+
useLgUp,
|
|
1673
|
+
useMdUp,
|
|
1674
|
+
useMediaQuery,
|
|
1675
|
+
useOgPlaceholderUrl,
|
|
1676
|
+
useSmUp
|
|
1677
|
+
} from "./chunk-NDESEPW5.js";
|
|
1667
1678
|
import {
|
|
1668
1679
|
FigmaIcon,
|
|
1669
1680
|
ImageIcon,
|
|
@@ -1704,7 +1715,7 @@ import {
|
|
|
1704
1715
|
SkeletonList,
|
|
1705
1716
|
SkeletonNavigation,
|
|
1706
1717
|
SkeletonText
|
|
1707
|
-
} from "./chunk-
|
|
1718
|
+
} from "./chunk-FLKJYMVB.js";
|
|
1708
1719
|
import "./chunk-INS7KZJB.js";
|
|
1709
1720
|
import {
|
|
1710
1721
|
Button,
|
|
@@ -2046,6 +2057,7 @@ export {
|
|
|
2046
2057
|
COMPACT_CARD_TITLE_ROW,
|
|
2047
2058
|
COMPLIANCE_STANDARDS,
|
|
2048
2059
|
CONNECTION_STATUS,
|
|
2060
|
+
CONTENT_BREAKPOINTS,
|
|
2049
2061
|
CONTENT_CARD_FRAME_CLASS,
|
|
2050
2062
|
CONTENT_CARD_SKELETON_FRAME_CLASS,
|
|
2051
2063
|
CONTENT_REF_GROUPS,
|
|
@@ -2139,6 +2151,7 @@ export {
|
|
|
2139
2151
|
ComplianceBadge,
|
|
2140
2152
|
ComplianceLogo,
|
|
2141
2153
|
ConfidenceBadge,
|
|
2154
|
+
ContentAreaWidthContext,
|
|
2142
2155
|
ContentCardFrame,
|
|
2143
2156
|
ContentLoader,
|
|
2144
2157
|
ContentPageContainer,
|
|
@@ -2433,6 +2446,7 @@ export {
|
|
|
2433
2446
|
MESSAGE_ROLE,
|
|
2434
2447
|
MESSAGE_TYPE,
|
|
2435
2448
|
MINGO_APPROVAL_REQUEST_TYPE,
|
|
2449
|
+
MINGO_V2_RAIL_WIDTH,
|
|
2436
2450
|
MOBILE_NAV_PANEL_ID,
|
|
2437
2451
|
MUX_IMAGE_ORIGIN,
|
|
2438
2452
|
MUX_STREAM_ORIGIN,
|
|
@@ -2469,8 +2483,11 @@ export {
|
|
|
2469
2483
|
MiamiCyberGangLogoFaceOnly,
|
|
2470
2484
|
MicrosoftIcon,
|
|
2471
2485
|
MingoAiButton,
|
|
2486
|
+
MingoArchiveList,
|
|
2487
|
+
MingoChatHeader,
|
|
2472
2488
|
MingoChatHistory,
|
|
2473
2489
|
MingoChatHistorySkeleton,
|
|
2490
|
+
MingoChatRail,
|
|
2474
2491
|
MingoHistoryRail,
|
|
2475
2492
|
MingoIcon,
|
|
2476
2493
|
MingoOnboardingCard,
|
|
@@ -2922,6 +2939,7 @@ export {
|
|
|
2922
2939
|
VideoSourceSelector,
|
|
2923
2940
|
VideoUnmuteGlyph,
|
|
2924
2941
|
ViewToggle,
|
|
2942
|
+
ViewportBreakpoints,
|
|
2925
2943
|
VolumeOffFilledIcon,
|
|
2926
2944
|
WALKTHROUGH_OPEN_QUERY_PARAM,
|
|
2927
2945
|
WALKTHROUGH_VIDEO_DISMISS_KEY,
|
|
@@ -3005,6 +3023,7 @@ export {
|
|
|
3005
3023
|
configureAuthenticatedImage,
|
|
3006
3024
|
configureBatchImageFetch,
|
|
3007
3025
|
consumeAccessCode,
|
|
3026
|
+
contentBreakpointFor,
|
|
3008
3027
|
copyrightLine,
|
|
3009
3028
|
createChatConversationsApi,
|
|
3010
3029
|
createChatDialogStore,
|
|
@@ -3481,6 +3500,9 @@ export {
|
|
|
3481
3500
|
useCollapsible,
|
|
3482
3501
|
useConfirm,
|
|
3483
3502
|
useContactSubmission,
|
|
3503
|
+
useContentBreakpoint,
|
|
3504
|
+
useContentLgUp,
|
|
3505
|
+
useContentMdUp,
|
|
3484
3506
|
useCopyToClipboard,
|
|
3485
3507
|
useCoverImageFallback,
|
|
3486
3508
|
useCursorPaginationState,
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Layout steps in px, the one place they are written. `viewport` is the window
|
|
3
|
+
* step (`md:`, `useMdUp`), `content` its content-area counterpart
|
|
4
|
+
* (`content-md:`, `useContentMdUp`): the viewport step less the navigation.
|
|
5
|
+
*
|
|
6
|
+
* Imported by tailwind.config.ts, so it must stay free of imports and aliases.
|
|
7
|
+
*/
|
|
8
|
+
export declare const LAYOUT_STEPS: {
|
|
9
|
+
readonly sm: {
|
|
10
|
+
readonly viewport: 640;
|
|
11
|
+
readonly content: 640;
|
|
12
|
+
};
|
|
13
|
+
readonly md: {
|
|
14
|
+
readonly viewport: 800;
|
|
15
|
+
readonly content: 720;
|
|
16
|
+
};
|
|
17
|
+
readonly lg: {
|
|
18
|
+
readonly viewport: 1280;
|
|
19
|
+
readonly content: 1024;
|
|
20
|
+
};
|
|
21
|
+
readonly xl: {
|
|
22
|
+
readonly viewport: 1440;
|
|
23
|
+
readonly content: 1216;
|
|
24
|
+
};
|
|
25
|
+
readonly '2xl': {
|
|
26
|
+
readonly viewport: 1536;
|
|
27
|
+
readonly content: 1312;
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=layout-steps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout-steps.d.ts","sourceRoot":"","sources":["../../src/styles/layout-steps.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;CAMf,CAAC"}
|
package/dist/tailwind.config.cjs
CHANGED
|
@@ -101,6 +101,17 @@ var require_plugin = __commonJS({
|
|
|
101
101
|
|
|
102
102
|
// tailwind.config.ts
|
|
103
103
|
var import_plugin = __toESM(require_plugin());
|
|
104
|
+
|
|
105
|
+
// src/styles/layout-steps.ts
|
|
106
|
+
var LAYOUT_STEPS = {
|
|
107
|
+
sm: { viewport: 640, content: 640 },
|
|
108
|
+
md: { viewport: 800, content: 720 },
|
|
109
|
+
lg: { viewport: 1280, content: 1024 },
|
|
110
|
+
xl: { viewport: 1440, content: 1216 },
|
|
111
|
+
"2xl": { viewport: 1536, content: 1312 }
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
// tailwind.config.ts
|
|
104
115
|
var odsTypographyPlugin = (0, import_plugin.default)(({ addUtilities }) => {
|
|
105
116
|
addUtilities({
|
|
106
117
|
".text-h1": {
|
|
@@ -175,6 +186,25 @@ var odsTypographyPlugin = (0, import_plugin.default)(({ addUtilities }) => {
|
|
|
175
186
|
}
|
|
176
187
|
});
|
|
177
188
|
});
|
|
189
|
+
var CONTENT_STEPS = Object.entries(LAYOUT_STEPS).map(([name, step]) => ({ name, ...step }));
|
|
190
|
+
var odsContentAreaPlugin = (0, import_plugin.default)(({ addVariant }) => {
|
|
191
|
+
const viewportLayer = ".ods-viewport-layer, .ods-viewport-layer *";
|
|
192
|
+
const byContent = `&:where(:not(${viewportLayer}))`;
|
|
193
|
+
const byViewport = `&:where(:not(.ods-content-area *), ${viewportLayer})`;
|
|
194
|
+
for (const { name, content, viewport } of CONTENT_STEPS) {
|
|
195
|
+
if (name !== "md" && name !== "lg") continue;
|
|
196
|
+
addVariant(`content-max-${name}`, [
|
|
197
|
+
`@container ods-content not (min-width: ${content}px) { ${byContent} }`,
|
|
198
|
+
`@media not all and (min-width: ${viewport}px) { ${byViewport} }`
|
|
199
|
+
]);
|
|
200
|
+
}
|
|
201
|
+
for (const { name, content, viewport } of CONTENT_STEPS) {
|
|
202
|
+
addVariant(`content-${name}`, [
|
|
203
|
+
`@container ods-content (min-width: ${content}px) { ${byContent} }`,
|
|
204
|
+
`@media (min-width: ${viewport}px) { ${byViewport} }`
|
|
205
|
+
]);
|
|
206
|
+
}
|
|
207
|
+
});
|
|
178
208
|
var withAlphaValue = (color) => `color-mix(in srgb, ${color} calc(<alpha-value> * 100%), transparent)`;
|
|
179
209
|
var withAlphaSupport = (tree) => Object.fromEntries(
|
|
180
210
|
Object.entries(tree).map(([key, value]) => [
|
|
@@ -190,7 +220,9 @@ var config = {
|
|
|
190
220
|
"md:hidden",
|
|
191
221
|
"lg:hidden",
|
|
192
222
|
"md:flex",
|
|
193
|
-
"lg:flex"
|
|
223
|
+
"lg:flex",
|
|
224
|
+
// ...and their content-area forms (DataTable `hideAt`)
|
|
225
|
+
...["md", "lg", "xl", "2xl"].flatMap((step) => [`content-${step}:hidden`, `content-${step}:flex`])
|
|
194
226
|
],
|
|
195
227
|
theme: {
|
|
196
228
|
container: {
|
|
@@ -380,15 +412,8 @@ var config = {
|
|
|
380
412
|
current: "var(--ods-current)"
|
|
381
413
|
})
|
|
382
414
|
},
|
|
383
|
-
//
|
|
384
|
-
screens: {
|
|
385
|
-
md: "800px",
|
|
386
|
-
// Tablet: 50rem
|
|
387
|
-
lg: "1280px",
|
|
388
|
-
// Desktop: 80rem
|
|
389
|
-
xl: "1440px"
|
|
390
|
-
// Large desktop: 90rem
|
|
391
|
-
},
|
|
415
|
+
// Aligned with the ODS responsive tokens from Figma: md tablet, lg desktop.
|
|
416
|
+
screens: Object.fromEntries(CONTENT_STEPS.map(({ name, viewport }) => [name, `${viewport}px`])),
|
|
392
417
|
borderRadius: {
|
|
393
418
|
lg: "var(--radius)",
|
|
394
419
|
// 8px
|
|
@@ -503,7 +528,7 @@ var config = {
|
|
|
503
528
|
}
|
|
504
529
|
}
|
|
505
530
|
},
|
|
506
|
-
plugins: [tailwindcssAnimate__default.default, odsTypographyPlugin, containerQueries__default.default]
|
|
531
|
+
plugins: [tailwindcssAnimate__default.default, odsTypographyPlugin, odsContentAreaPlugin, containerQueries__default.default]
|
|
507
532
|
};
|
|
508
533
|
var tailwind_config_default = config;
|
|
509
534
|
|
package/dist/tailwind.config.js
CHANGED
|
@@ -94,6 +94,17 @@ var require_plugin = __commonJS({
|
|
|
94
94
|
|
|
95
95
|
// tailwind.config.ts
|
|
96
96
|
var import_plugin = __toESM(require_plugin());
|
|
97
|
+
|
|
98
|
+
// src/styles/layout-steps.ts
|
|
99
|
+
var LAYOUT_STEPS = {
|
|
100
|
+
sm: { viewport: 640, content: 640 },
|
|
101
|
+
md: { viewport: 800, content: 720 },
|
|
102
|
+
lg: { viewport: 1280, content: 1024 },
|
|
103
|
+
xl: { viewport: 1440, content: 1216 },
|
|
104
|
+
"2xl": { viewport: 1536, content: 1312 }
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
// tailwind.config.ts
|
|
97
108
|
var odsTypographyPlugin = (0, import_plugin.default)(({ addUtilities }) => {
|
|
98
109
|
addUtilities({
|
|
99
110
|
".text-h1": {
|
|
@@ -168,6 +179,25 @@ var odsTypographyPlugin = (0, import_plugin.default)(({ addUtilities }) => {
|
|
|
168
179
|
}
|
|
169
180
|
});
|
|
170
181
|
});
|
|
182
|
+
var CONTENT_STEPS = Object.entries(LAYOUT_STEPS).map(([name, step]) => ({ name, ...step }));
|
|
183
|
+
var odsContentAreaPlugin = (0, import_plugin.default)(({ addVariant }) => {
|
|
184
|
+
const viewportLayer = ".ods-viewport-layer, .ods-viewport-layer *";
|
|
185
|
+
const byContent = `&:where(:not(${viewportLayer}))`;
|
|
186
|
+
const byViewport = `&:where(:not(.ods-content-area *), ${viewportLayer})`;
|
|
187
|
+
for (const { name, content, viewport } of CONTENT_STEPS) {
|
|
188
|
+
if (name !== "md" && name !== "lg") continue;
|
|
189
|
+
addVariant(`content-max-${name}`, [
|
|
190
|
+
`@container ods-content not (min-width: ${content}px) { ${byContent} }`,
|
|
191
|
+
`@media not all and (min-width: ${viewport}px) { ${byViewport} }`
|
|
192
|
+
]);
|
|
193
|
+
}
|
|
194
|
+
for (const { name, content, viewport } of CONTENT_STEPS) {
|
|
195
|
+
addVariant(`content-${name}`, [
|
|
196
|
+
`@container ods-content (min-width: ${content}px) { ${byContent} }`,
|
|
197
|
+
`@media (min-width: ${viewport}px) { ${byViewport} }`
|
|
198
|
+
]);
|
|
199
|
+
}
|
|
200
|
+
});
|
|
171
201
|
var withAlphaValue = (color) => `color-mix(in srgb, ${color} calc(<alpha-value> * 100%), transparent)`;
|
|
172
202
|
var withAlphaSupport = (tree) => Object.fromEntries(
|
|
173
203
|
Object.entries(tree).map(([key, value]) => [
|
|
@@ -183,7 +213,9 @@ var config = {
|
|
|
183
213
|
"md:hidden",
|
|
184
214
|
"lg:hidden",
|
|
185
215
|
"md:flex",
|
|
186
|
-
"lg:flex"
|
|
216
|
+
"lg:flex",
|
|
217
|
+
// ...and their content-area forms (DataTable `hideAt`)
|
|
218
|
+
...["md", "lg", "xl", "2xl"].flatMap((step) => [`content-${step}:hidden`, `content-${step}:flex`])
|
|
187
219
|
],
|
|
188
220
|
theme: {
|
|
189
221
|
container: {
|
|
@@ -373,15 +405,8 @@ var config = {
|
|
|
373
405
|
current: "var(--ods-current)"
|
|
374
406
|
})
|
|
375
407
|
},
|
|
376
|
-
//
|
|
377
|
-
screens: {
|
|
378
|
-
md: "800px",
|
|
379
|
-
// Tablet: 50rem
|
|
380
|
-
lg: "1280px",
|
|
381
|
-
// Desktop: 80rem
|
|
382
|
-
xl: "1440px"
|
|
383
|
-
// Large desktop: 90rem
|
|
384
|
-
},
|
|
408
|
+
// Aligned with the ODS responsive tokens from Figma: md tablet, lg desktop.
|
|
409
|
+
screens: Object.fromEntries(CONTENT_STEPS.map(({ name, viewport }) => [name, `${viewport}px`])),
|
|
385
410
|
borderRadius: {
|
|
386
411
|
lg: "var(--radius)",
|
|
387
412
|
// 8px
|
|
@@ -496,7 +521,7 @@ var config = {
|
|
|
496
521
|
}
|
|
497
522
|
}
|
|
498
523
|
},
|
|
499
|
-
plugins: [tailwindcssAnimate, odsTypographyPlugin, containerQueries]
|
|
524
|
+
plugins: [tailwindcssAnimate, odsTypographyPlugin, odsContentAreaPlugin, containerQueries]
|
|
500
525
|
};
|
|
501
526
|
var tailwind_config_default = config;
|
|
502
527
|
|
package/eslint-config/README.md
CHANGED
|
@@ -84,6 +84,15 @@ applied to tests or stories.
|
|
|
84
84
|
hook that is not a zustand subscription (a context getter, say) is a false positive: carry it in
|
|
85
85
|
a named `files:` block.
|
|
86
86
|
|
|
87
|
+
## Layout variant rule
|
|
88
|
+
|
|
89
|
+
`base` carries `flamingo/no-mixed-layout-variants` from `./layout-variants.js`: one class string may
|
|
90
|
+
not hold both a viewport breakpoint (`md:`) and a content-area one (`content-md:`). Tailwind emits
|
|
91
|
+
every `content-*` rule before the viewport ones, so where the two set the same property the viewport
|
|
92
|
+
class wins at any content width, and nothing says so. A class that stacks them
|
|
93
|
+
(`md:content-max-md:`) is the deliberate form and is allowed. The rule reads one string at a time:
|
|
94
|
+
classes split across `cn()` arguments are not compared.
|
|
95
|
+
|
|
87
96
|
## Why not ESLint 10
|
|
88
97
|
|
|
89
98
|
ESLint 10 is out, and `eslint@9` is marked deprecated on npm. It still does not work here:
|
package/eslint-config/base.js
CHANGED
|
@@ -6,8 +6,15 @@ import globals from 'globals';
|
|
|
6
6
|
import tseslint from 'typescript-eslint';
|
|
7
7
|
|
|
8
8
|
import { ignores } from './ignores.js';
|
|
9
|
+
import { layoutVariantsPlugin } from './layout-variants.js';
|
|
9
10
|
import { webviewPerformancePlugin } from './webview-performance.js';
|
|
10
11
|
|
|
12
|
+
/** The rules this config ships itself, under one `flamingo/` namespace. */
|
|
13
|
+
const flamingoPlugin = {
|
|
14
|
+
meta: { name: 'flamingo' },
|
|
15
|
+
rules: { ...webviewPerformancePlugin.rules, ...layoutVariantsPlugin.rules },
|
|
16
|
+
};
|
|
17
|
+
|
|
11
18
|
/**
|
|
12
19
|
* Promote every `warn` in a third-party config to `error`.
|
|
13
20
|
*
|
|
@@ -299,13 +306,22 @@ export const base = [
|
|
|
299
306
|
name: 'flamingo/base/webview-performance',
|
|
300
307
|
files: ['**/*.{js,mjs,jsx,ts,mts,tsx}'],
|
|
301
308
|
ignores: ['**/*.{test,spec}.{js,mjs,jsx,ts,mts,tsx}', '**/__tests__/**', '**/*.stories.{js,jsx,ts,tsx,mdx}'],
|
|
302
|
-
plugins: { flamingo:
|
|
309
|
+
plugins: { flamingo: flamingoPlugin },
|
|
303
310
|
rules: {
|
|
304
311
|
'flamingo/no-inline-style-element': 'error',
|
|
305
312
|
'flamingo/no-whole-store-subscription': 'error',
|
|
306
313
|
},
|
|
307
314
|
},
|
|
308
315
|
|
|
316
|
+
// `md:` and `content-md:` in one class string — see ./layout-variants.js.
|
|
317
|
+
{
|
|
318
|
+
name: 'flamingo/base/layout-variants',
|
|
319
|
+
files: ['**/*.{js,mjs,jsx,ts,mts,tsx}'],
|
|
320
|
+
ignores: ['**/*.{test,spec}.{js,mjs,jsx,ts,mts,tsx}', '**/__tests__/**'],
|
|
321
|
+
plugins: { flamingo: flamingoPlugin },
|
|
322
|
+
rules: { 'flamingo/no-mixed-layout-variants': 'error' },
|
|
323
|
+
},
|
|
324
|
+
|
|
309
325
|
// Type declaration files describe other people's shapes; most of the base
|
|
310
326
|
// rules are noise there.
|
|
311
327
|
{
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An element lays out by the window (`md:`) or by the content area
|
|
3
|
+
* (`content-md:`), never both. See "Content area breakpoints" in
|
|
4
|
+
* src/ODS_TOKEN_RULES.md.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const VIEWPORT = /^(?:max-)?(?:sm|md|lg|xl|2xl)$/;
|
|
8
|
+
const CONTENT = /^content-(?:max-)?(?:sm|md|lg|xl|2xl)$/;
|
|
9
|
+
|
|
10
|
+
/** The first class of each kind in a class string. A class that stacks the two
|
|
11
|
+
* (`md:content-max-md:flex`) is the deliberate form and counts as neither. */
|
|
12
|
+
function layoutVariantsIn(classes) {
|
|
13
|
+
const found = {};
|
|
14
|
+
for (const token of classes.split(/\s+/)) {
|
|
15
|
+
const variants = token.split(':').slice(0, -1);
|
|
16
|
+
const viewport = variants.some(variant => VIEWPORT.test(variant));
|
|
17
|
+
const content = variants.some(variant => CONTENT.test(variant));
|
|
18
|
+
if (viewport === content) continue;
|
|
19
|
+
found[viewport ? 'viewport' : 'content'] ??= token;
|
|
20
|
+
}
|
|
21
|
+
return found;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** @type {import('eslint').Rule.RuleModule} */
|
|
25
|
+
const noMixedLayoutVariants = {
|
|
26
|
+
meta: {
|
|
27
|
+
type: 'problem',
|
|
28
|
+
docs: { description: 'Disallow viewport and content-area breakpoints in one class string' },
|
|
29
|
+
schema: [],
|
|
30
|
+
messages: {
|
|
31
|
+
mixed:
|
|
32
|
+
'`{{viewport}}` follows the window and `{{content}}` the content area. Tailwind emits every `content-*` ' +
|
|
33
|
+
'rule before the viewport ones, so where they set the same property the viewport class wins at any ' +
|
|
34
|
+
'content width. Use one of the two on an element; chrome that needs both stacks them in one class ' +
|
|
35
|
+
'(`md:content-max-md:`).',
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
create(context) {
|
|
39
|
+
const check = (node, classes) => {
|
|
40
|
+
const { viewport, content } = layoutVariantsIn(classes);
|
|
41
|
+
if (viewport && content) context.report({ node, messageId: 'mixed', data: { viewport, content } });
|
|
42
|
+
};
|
|
43
|
+
return {
|
|
44
|
+
Literal(node) {
|
|
45
|
+
if (typeof node.value === 'string') check(node, node.value);
|
|
46
|
+
},
|
|
47
|
+
TemplateElement(node) {
|
|
48
|
+
check(node, node.value.cooked ?? node.value.raw);
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
export const layoutVariantsPlugin = {
|
|
55
|
+
meta: { name: 'flamingo-layout-variants' },
|
|
56
|
+
rules: { 'no-mixed-layout-variants': noMixedLayoutVariants },
|
|
57
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flamingo-stack/openframe-frontend-core",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.703-snapshot.20261006080901",
|
|
4
4
|
"description": "Shared design system and components for all Flamingo platforms",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -355,6 +355,7 @@
|
|
|
355
355
|
"yalc:push": "yalc push ${YALC_STORE_FOLDER:+--store-folder \"$YALC_STORE_FOLDER\"}",
|
|
356
356
|
"yalc:publish": "yalc publish ${YALC_STORE_FOLDER:+--store-folder \"$YALC_STORE_FOLDER\"}",
|
|
357
357
|
"generate:icons": "node scripts/generate-icons.mjs",
|
|
358
|
+
"generate:content-area": "vitest run src/__tests__/content-area-variants.test.ts -u",
|
|
358
359
|
"format": "prettier --check .",
|
|
359
360
|
"storybook": "storybook dev -p 6006",
|
|
360
361
|
"build-storybook": "storybook build",
|
|
@@ -503,6 +504,7 @@
|
|
|
503
504
|
"next": "^16.1.3",
|
|
504
505
|
"nodemon": "^3.1.11",
|
|
505
506
|
"pkg-pr-new": "0.0.88",
|
|
507
|
+
"postcss": "^8.5.15",
|
|
506
508
|
"prettier": "^3.9.6",
|
|
507
509
|
"react": "^19.2.3",
|
|
508
510
|
"react-dom": "^19.2.3",
|
package/src/ODS_TOKEN_RULES.md
CHANGED
|
@@ -109,6 +109,46 @@ for it on badges and chips instead of a raw `text-[10px]`; anything a user reads
|
|
|
109
109
|
`text-h5`/`text-h6` or larger. Stamps are fixed on purpose — growing them on desktop is what
|
|
110
110
|
balloons a badge out of the row it sits in.
|
|
111
111
|
|
|
112
|
+
## Content area breakpoints
|
|
113
|
+
|
|
114
|
+
The tokens and `md:` / `lg:` above follow the **viewport**. When `AppLayout` has a `sidePanel` (the
|
|
115
|
+
docked Mingo chat), the panel narrows the content without the viewport changing, so the content lays
|
|
116
|
+
out by **its own width** instead. `<main>` becomes an `.ods-content-area` container, and:
|
|
117
|
+
|
|
118
|
+
| Content width | Layout | Tokens (`text-h*`, `--spacing-system-*`) |
|
|
119
|
+
|---------------|--------|-------------------------------------------|
|
|
120
|
+
| < 720px | mobile | mobile values |
|
|
121
|
+
| 720-1023px | tablet (`content-md:`) | the viewport's (desktop sizes on a desktop) |
|
|
122
|
+
| ≥ 1024px | desktop (`content-lg:`) | the viewport's |
|
|
123
|
+
|
|
124
|
+
- **Tokens need nothing.** `ods-content-area-tokens.css` (generated from the responsive tokens)
|
|
125
|
+
re-declares the mobile values on the content scope while it is narrower than 720px; every
|
|
126
|
+
`text-h*` and spacing var below it follows.
|
|
127
|
+
- **The steps are written once**, in `styles/layout-steps.ts`: the Tailwind screens, the
|
|
128
|
+
`content-*` variants and the JS hooks all read them from there.
|
|
129
|
+
- **Layout switches in page content use `content-md:` / `content-lg:`**, not `md:` / `lg:` — e.g.
|
|
130
|
+
`grid-cols-2 content-lg:grid-cols-4`. Outside a content area (apps without a side panel, overlays
|
|
131
|
+
portalled to `<body>`) they fall back to the viewport `md` / `lg` steps, so a shared component can
|
|
132
|
+
switch to them without changing anywhere else it renders.
|
|
133
|
+
- **Keep `md:` / `lg:` for chrome and overlays** that follow the window: header, navigation,
|
|
134
|
+
modals, dropdowns, toasts. Never mix `md:` and `content-md:` on one element: lint rejects the two
|
|
135
|
+
in one class string (`flamingo/no-mixed-layout-variants`).
|
|
136
|
+
- **Window chrome that renders inside the content area** (not portalled to `<body>`: `ModalV2`,
|
|
137
|
+
`Modal`, `SlidingSidebar`) carries `ods-viewport-layer`, which restates the viewport's tokens on its
|
|
138
|
+
subtree; otherwise a modal opened from a narrow content area inherits the area's mobile fonts.
|
|
139
|
+
`content-*` classes under the layer follow the window as well. The JS hooks need their own reset,
|
|
140
|
+
because React context crosses a portal: `ModalV2`, `Modal`, `Dialog`, `Sheet` and `Drawer` wrap
|
|
141
|
+
their content in `<ViewportBreakpoints>`.
|
|
142
|
+
- **Chrome inside the content area that ALSO depends on the window** stacks the two:
|
|
143
|
+
`md:content-max-md:` is "narrow content in a wide window" and never matches outside a content
|
|
144
|
+
area. `PageActions` `primary-buttons` uses it: the bottom bar spans the window (`md:hidden`),
|
|
145
|
+
so a docked panel narrowing the content compacts the actions into the title row instead.
|
|
146
|
+
- **JS layout decisions** use `useContentBreakpoint()` / `useContentMdUp()` / `useContentLgUp()`
|
|
147
|
+
from `hooks` instead of `useMdUp()` / `useLgUp()` — the same steps, the same viewport fallback.
|
|
148
|
+
- **Things that measure the window** (`vw`, `w-screen`, `fixed left-0 right-0`, a `resize` listener
|
|
149
|
+
on `window`) do not see the panel. Measure the element (`ResizeObserver`) or the container
|
|
150
|
+
(`cqw`) instead.
|
|
151
|
+
|
|
112
152
|
## General
|
|
113
153
|
|
|
114
154
|
- Convert hardcoded values to ODS tokens even when copying patterns from existing code.
|
|
@@ -25,14 +25,14 @@ interface ChatArchivePageBaseProps {
|
|
|
25
25
|
onLoadMore?: () => void;
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
/** Standalone (default): renders its own back/close header
|
|
29
|
-
*
|
|
28
|
+
/** Standalone (default): renders its own back/close header. `onBack` is
|
|
29
|
+
* required; without `onClose` the close button is left out. */
|
|
30
30
|
export interface ChatArchivePageStandaloneProps extends ChatArchivePageBaseProps {
|
|
31
31
|
embedded?: false;
|
|
32
32
|
/** Back chevron — returns to the previous (list) view. */
|
|
33
33
|
onBack: () => void;
|
|
34
34
|
/** Close the whole chat panel. */
|
|
35
|
-
onClose
|
|
35
|
+
onClose?: () => void;
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
/** Embedded (wide split layout): the archive lives in the left rail and the
|
|
@@ -69,7 +69,7 @@ export function ChatArchivePage(props: ChatArchivePageProps) {
|
|
|
69
69
|
{/* Mobile (<md): the shared mobile header — back to the list + a ⋯ menu
|
|
70
70
|
(Close only here, since the archive list has no per-chat actions).
|
|
71
71
|
`!props.embedded` narrows the union so `onBack` / `onClose` are the
|
|
72
|
-
|
|
72
|
+
standalone handlers (no no-op fallbacks). */}
|
|
73
73
|
{!props.embedded && (
|
|
74
74
|
<ChatPanelHeaderMobile
|
|
75
75
|
className="flex md:hidden"
|
|
@@ -93,9 +93,11 @@ export function ChatArchivePage(props: ChatArchivePageProps) {
|
|
|
93
93
|
<span className="truncate text-ods-text-primary text-h3">Chat Archive</span>
|
|
94
94
|
</div>
|
|
95
95
|
|
|
96
|
-
|
|
97
|
-
<
|
|
98
|
-
|
|
96
|
+
{props.onClose && (
|
|
97
|
+
<ChatHeaderIconButton onClick={props.onClose} aria-label="Close">
|
|
98
|
+
<XmarkIcon size={24} />
|
|
99
|
+
</ChatHeaderIconButton>
|
|
100
|
+
)}
|
|
99
101
|
</div>
|
|
100
102
|
)}
|
|
101
103
|
<div className="flex min-h-0 flex-1 flex-col p-[var(--spacing-system-m)]">
|