@flamingo-stack/openframe-frontend-core 0.0.703 → 0.0.704-snapshot.20261006133653
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-3L7KCOGO.cjs → chunk-2QEUFXNS.cjs} +30 -30
- package/dist/{chunk-BMJUKS6S.cjs → chunk-3256UJXS.cjs} +47 -47
- package/dist/{chunk-GZYLZ4MB.js → chunk-4S7TJYRQ.js} +3 -3
- package/dist/{chunk-ENGBNKUJ.js → chunk-5EFZO5EB.js} +675 -569
- package/dist/{chunk-TCZCMD5Q.js → chunk-5HBHO5TB.js} +1 -1
- package/dist/{chunk-BOUPNYUV.js → chunk-64HOMVYC.js} +5 -5
- package/dist/{chunk-YR6JPJF4.js → chunk-6XIF2Z7I.js} +4 -4
- package/dist/{chunk-NU724ZVN.cjs → chunk-7GHB2IK6.cjs} +121 -121
- package/dist/{chunk-GX3OUTFO.cjs → chunk-7ZYIC7NA.cjs} +69 -55
- package/dist/{chunk-53AC23ZN.js → chunk-A6WVQKOZ.js} +24 -24
- package/dist/{chunk-4OGAXAEG.cjs → chunk-ABU3TGXA.cjs} +3 -3
- package/dist/{chunk-RTXTGLGB.cjs → chunk-ACV4DFQ3.cjs} +4 -4
- package/dist/{chunk-RLDAYA2A.cjs → chunk-BH6PJP66.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-6YCXA7CN.js → chunk-CH5232HV.js} +20 -19
- package/dist/{chunk-UIBSSVON.cjs → chunk-D7BTSVMS.cjs} +2 -2
- package/dist/{chunk-YBGEPKC2.cjs → chunk-F7Y2ZS5U.cjs} +6 -6
- package/dist/{chunk-5V6O73EH.js → chunk-FLKJYMVB.js} +3 -3
- package/dist/{chunk-NMGX2ZTU.js → chunk-IFUQVZF4.js} +17 -17
- package/dist/{chunk-2NE3DNXY.js → chunk-IKCQK67U.js} +2 -2
- package/dist/{chunk-KFDP3DUL.cjs → chunk-IXPUM3AW.cjs} +98 -98
- package/dist/{chunk-QGTDWFT6.js → chunk-IZHZMBIX.js} +2469 -1928
- package/dist/{chunk-67CXGPTW.cjs → chunk-JKEEFQOX.cjs} +505 -72
- package/dist/{chunk-NYSYSKSH.cjs → chunk-M6HTJTFH.cjs} +15 -15
- package/dist/{chunk-OGLCD3UL.js → chunk-MFFCUVWG.js} +6 -6
- package/dist/{chunk-KJ5LWATV.js → chunk-MKXO4Q5P.js} +7 -7
- package/dist/{chunk-EMCQGFXD.cjs → chunk-MMOODW57.cjs} +28 -27
- package/dist/{chunk-Q76ZTHNV.js → chunk-MP2C3LJ4.js} +1 -1
- package/dist/{chunk-J4K5JOLI.js → chunk-MV4HYG3B.js} +25 -11
- package/dist/{chunk-2T6QWNXU.js → chunk-NDESEPW5.js} +99 -11
- package/dist/{chunk-HHFPQNP3.js → chunk-NJDHFC55.js} +15 -15
- package/dist/{chunk-HUOLB7ZN.cjs → chunk-OHFS7VOU.cjs} +9 -9
- package/dist/{chunk-7632TNE7.js → chunk-OSNIZNVH.js} +7 -7
- package/dist/{chunk-UTW4SQDI.js → chunk-OUHMD6EU.js} +10 -10
- package/dist/{chunk-MXHJROXJ.cjs → chunk-P23CRLU4.cjs} +1245 -1139
- package/dist/{chunk-64O4L7WN.js → chunk-PDWVPI3S.js} +11 -55
- package/dist/{chunk-DAW6TDZB.js → chunk-PFC2HWQA.js} +30 -16
- package/dist/{chunk-G55W76S6.js → chunk-POZ7F77D.js} +12 -13
- package/dist/{chunk-PJP5SMOU.js → chunk-PPEZGUL7.js} +500 -67
- package/dist/{chunk-SFGXIFYO.cjs → chunk-QC7Q3XCE.cjs} +24 -24
- package/dist/{chunk-MDBHZBW7.cjs → chunk-RKV5B7EU.cjs} +92 -4
- package/dist/{chunk-5VPIC5MD.cjs → chunk-SAAZEWUR.cjs} +12 -12
- package/dist/{chunk-IIMICN7L.cjs → chunk-TYWLNCNH.cjs} +4 -48
- package/dist/{chunk-HYLIQMZH.cjs → chunk-UBP5RNGK.cjs} +33 -33
- package/dist/{chunk-HUMWQMCU.js → chunk-UT4YHQZW.js} +3 -3
- package/dist/{chunk-BSEIEWM5.cjs → chunk-V3H26CNS.cjs} +28 -14
- package/dist/{chunk-NGJCWEYX.cjs → chunk-VHCACDKP.cjs} +46 -46
- package/dist/{chunk-SL2FOFT2.js → chunk-VMAZCLX4.js} +7 -7
- package/dist/{chunk-5FFNNJM7.js → chunk-VR2ZLFCP.js} +1 -1
- package/dist/{chunk-NCTYD7HL.js → chunk-VYWMEL5F.js} +14 -14
- package/dist/{chunk-HY5YL3U5.cjs → chunk-XBWE423R.cjs} +1994 -1453
- package/dist/{chunk-XCIFHW4E.cjs → chunk-XOYH2YQE.cjs} +2 -2
- package/dist/{chunk-S6V7A5FS.cjs → chunk-ZQZFIE2K.cjs} +32 -33
- 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/platform/SoftwareSourceBadge.tsx +1 -1
- 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
|
@@ -14,14 +14,14 @@ export function AnnouncementBarSkeleton() {
|
|
|
14
14
|
return (
|
|
15
15
|
<div className="relative w-full animate-pulse bg-ods-skeleton">
|
|
16
16
|
<div className="relative flex w-full flex-row items-center">
|
|
17
|
-
<div className="relative box-border flex w-full flex-row items-center justify-start gap-4 py-3 pl-4 pr-12 md:gap-6 md:py-4 md:pl-6 md:pr-16">
|
|
17
|
+
<div className="relative box-border flex w-full flex-row items-center justify-start gap-4 py-3 pl-4 pr-12 content-md:gap-6 content-md:py-4 content-md:pl-6 content-md:pr-16">
|
|
18
18
|
{/* Logo skeleton */}
|
|
19
|
-
<div className="relative h-6 w-6 shrink-0 rounded bg-ods-border md:h-8 md:w-8"></div>
|
|
19
|
+
<div className="relative h-6 w-6 shrink-0 rounded bg-ods-border content-md:h-8 content-md:w-8"></div>
|
|
20
20
|
|
|
21
21
|
{/* Text content skeleton */}
|
|
22
|
-
<div className="min-w-0 flex-1 space-y-1 md:space-y-2">
|
|
23
|
-
<div className="h-[14px] w-3/4 max-w-md rounded bg-ods-border md:h-[18px]"></div>
|
|
24
|
-
<div className="hidden h-[12px] w-full max-w-lg rounded bg-ods-border md:block md:h-[18px]"></div>
|
|
22
|
+
<div className="min-w-0 flex-1 space-y-1 content-md:space-y-2">
|
|
23
|
+
<div className="h-[14px] w-3/4 max-w-md rounded bg-ods-border content-md:h-[18px]"></div>
|
|
24
|
+
<div className="hidden h-[12px] w-full max-w-lg rounded bg-ods-border content-md:block content-md:h-[18px]"></div>
|
|
25
25
|
</div>
|
|
26
26
|
|
|
27
27
|
{/* Close button skeleton */}
|
|
@@ -37,14 +37,14 @@ export function AnnouncementBarSkeleton() {
|
|
|
37
37
|
*/
|
|
38
38
|
export function HeaderSkeleton() {
|
|
39
39
|
return (
|
|
40
|
-
<header className="sticky top-0 z-40 flex w-full animate-pulse items-center justify-between border-b border-ods-border bg-ods-card bg-ods-card/95 px-4 py-3 backdrop-blur-sm md:px-[80px] md:py-[12px]">
|
|
40
|
+
<header className="sticky top-0 z-40 flex w-full animate-pulse items-center justify-between border-b border-ods-border bg-ods-card bg-ods-card/95 px-4 py-3 backdrop-blur-sm content-md:px-[80px] content-md:py-[12px]">
|
|
41
41
|
{/* Left: Logo skeleton */}
|
|
42
42
|
<div className="flex min-w-0 flex-1 items-center justify-start">
|
|
43
|
-
<div className="h-[26px] w-[110px] rounded bg-ods-skeleton md:h-8 md:w-[137px]"></div>
|
|
43
|
+
<div className="h-[26px] w-[110px] rounded bg-ods-skeleton content-md:h-8 content-md:w-[137px]"></div>
|
|
44
44
|
</div>
|
|
45
45
|
|
|
46
46
|
{/* Center: Navigation skeleton - hidden on mobile, visible on desktop */}
|
|
47
|
-
<nav className="hidden min-w-0 flex-1 basis-1/3 items-center justify-center gap-2 md:flex">
|
|
47
|
+
<nav className="hidden min-w-0 flex-1 basis-1/3 items-center justify-center gap-2 content-md:flex">
|
|
48
48
|
<div className="flex items-center gap-2">
|
|
49
49
|
<InteractiveSkeleton.Button className="h-10 w-24" />
|
|
50
50
|
<InteractiveSkeleton.Button className="h-10 w-24" />
|
|
@@ -55,12 +55,12 @@ export function HeaderSkeleton() {
|
|
|
55
55
|
{/* Right: Actions skeleton */}
|
|
56
56
|
<div className="flex min-w-0 flex-1 items-center justify-end gap-4">
|
|
57
57
|
{/* Mobile: Show hamburger skeleton */}
|
|
58
|
-
<div className="md:hidden">
|
|
58
|
+
<div className="content-md:hidden">
|
|
59
59
|
<InteractiveSkeleton.Button className="h-10 w-10" />
|
|
60
60
|
</div>
|
|
61
61
|
|
|
62
62
|
{/* Desktop: Show action buttons skeletons */}
|
|
63
|
-
<div className="hidden items-center gap-4 md:flex">
|
|
63
|
+
<div className="hidden items-center gap-4 content-md:flex">
|
|
64
64
|
<InteractiveSkeleton.Button className="h-10 w-10" />
|
|
65
65
|
<InteractiveSkeleton.Button className="h-10 w-32" />
|
|
66
66
|
<InteractiveSkeleton.Button className="h-10 w-20" />
|
|
@@ -76,22 +76,22 @@ export function HeaderSkeleton() {
|
|
|
76
76
|
export function HeroSkeleton() {
|
|
77
77
|
return (
|
|
78
78
|
<section
|
|
79
|
-
className="flex w-full animate-pulse flex-col items-center justify-center px-4 py-12 text-center md:px-8 md:py-20"
|
|
79
|
+
className="flex w-full animate-pulse flex-col items-center justify-center px-4 py-12 text-center content-md:px-8 content-md:py-20"
|
|
80
80
|
style={{
|
|
81
81
|
background: 'radial-gradient(circle at 50% 0%, #242323 0%, #1A1A1A 100%)',
|
|
82
82
|
}}
|
|
83
83
|
>
|
|
84
84
|
{/* Title skeleton */}
|
|
85
|
-
<TextSkeleton.Heading className="mb-4 h-12 w-full max-w-4xl md:mb-6 md:h-20 lg:h-24" />
|
|
85
|
+
<TextSkeleton.Heading className="mb-4 h-12 w-full max-w-4xl content-md:mb-6 content-md:h-20 content-lg:h-24" />
|
|
86
86
|
|
|
87
87
|
{/* Subtitle skeleton */}
|
|
88
|
-
<div className="mb-8 w-full max-w-4xl space-y-3 px-2 md:mb-10">
|
|
89
|
-
<TextSkeleton.Body className="h-5 md:h-7" />
|
|
90
|
-
<TextSkeleton.Body className="mx-auto h-5 w-3/4 md:h-7" />
|
|
88
|
+
<div className="mb-8 w-full max-w-4xl space-y-3 px-2 content-md:mb-10">
|
|
89
|
+
<TextSkeleton.Body className="h-5 content-md:h-7" />
|
|
90
|
+
<TextSkeleton.Body className="mx-auto h-5 w-3/4 content-md:h-7" />
|
|
91
91
|
</div>
|
|
92
92
|
|
|
93
93
|
{/* CTA Button skeleton */}
|
|
94
|
-
<InteractiveSkeleton.Button className="h-12 w-full md:w-64" />
|
|
94
|
+
<InteractiveSkeleton.Button className="h-12 w-full content-md:w-64" />
|
|
95
95
|
</section>
|
|
96
96
|
);
|
|
97
97
|
}
|
|
@@ -106,9 +106,9 @@ export function SearchContainerSkeleton({
|
|
|
106
106
|
return (
|
|
107
107
|
<div className={cn('space-y-4', className || '')}>
|
|
108
108
|
{/* Search input and button */}
|
|
109
|
-
<div className="flex gap-2 md:gap-4">
|
|
109
|
+
<div className="flex gap-2 content-md:gap-4">
|
|
110
110
|
<InteractiveSkeleton.Input className="flex-1" />
|
|
111
|
-
<InteractiveSkeleton.Button className="w-32 md:w-40" />
|
|
111
|
+
<InteractiveSkeleton.Button className="w-32 content-md:w-40" />
|
|
112
112
|
</div>
|
|
113
113
|
|
|
114
114
|
{/* Filter chips */}
|
|
@@ -144,7 +144,7 @@ export function CategorySidebarSkeleton({ className }: PageLayoutSkeletonProps)
|
|
|
144
144
|
];
|
|
145
145
|
|
|
146
146
|
return (
|
|
147
|
-
<div className={cn('w-full lg:w-[320px]', className)}>
|
|
147
|
+
<div className={cn('w-full content-lg:w-[320px]', className)}>
|
|
148
148
|
{/* DATA ROOM label */}
|
|
149
149
|
<UnifiedSkeleton className="mb-4 h-[14px] w-24 rounded" />
|
|
150
150
|
|
|
@@ -195,7 +195,12 @@ export function BreadcrumbSkeleton({ className }: PageLayoutSkeletonProps) {
|
|
|
195
195
|
*/
|
|
196
196
|
export function ResultsHeaderSkeleton({ className }: PageLayoutSkeletonProps) {
|
|
197
197
|
return (
|
|
198
|
-
<div
|
|
198
|
+
<div
|
|
199
|
+
className={cn(
|
|
200
|
+
'mb-6 flex flex-col items-start justify-between gap-4 content-md:flex-row content-md:items-center',
|
|
201
|
+
className,
|
|
202
|
+
)}
|
|
203
|
+
>
|
|
199
204
|
<div className="space-y-1">
|
|
200
205
|
<TextSkeleton.Body className="w-48" />
|
|
201
206
|
{/* <TextSkeleton.Caption className="w-32" /> */}
|
|
@@ -223,15 +228,15 @@ export function TwoColumnLayoutSkeleton({
|
|
|
223
228
|
return (
|
|
224
229
|
<div
|
|
225
230
|
className={cn(
|
|
226
|
-
'grid grid-cols-1 gap-6 lg:grid-cols-[320px_1fr] lg:gap-8',
|
|
227
|
-
sidebarPosition === 'right' && 'lg:grid-cols-[1fr_320px]',
|
|
231
|
+
'grid grid-cols-1 gap-6 content-lg:grid-cols-[320px_1fr] content-lg:gap-8',
|
|
232
|
+
sidebarPosition === 'right' && 'content-lg:grid-cols-[1fr_320px]',
|
|
228
233
|
className,
|
|
229
234
|
)}
|
|
230
235
|
>
|
|
231
236
|
{sidebarPosition === 'left' ? (
|
|
232
237
|
<>
|
|
233
|
-
<aside className="order-2 lg:order-1">{sidebar}</aside>
|
|
234
|
-
<main className="order-1 lg:order-2">{main}</main>
|
|
238
|
+
<aside className="order-2 content-lg:order-1">{sidebar}</aside>
|
|
239
|
+
<main className="order-1 content-lg:order-2">{main}</main>
|
|
235
240
|
</>
|
|
236
241
|
) : (
|
|
237
242
|
<>
|
|
@@ -250,7 +255,7 @@ export function ArticleLayoutSkeleton({ className }: PageLayoutSkeletonProps) {
|
|
|
250
255
|
return (
|
|
251
256
|
<article className={cn('mx-auto max-w-4xl', className)}>
|
|
252
257
|
{/* Article header */}
|
|
253
|
-
<header className="mb-8 space-y-4 md:mb-12 md:space-y-6">
|
|
258
|
+
<header className="mb-8 space-y-4 content-md:mb-12 content-md:space-y-6">
|
|
254
259
|
{/* Category/tags */}
|
|
255
260
|
<div className="flex gap-2">
|
|
256
261
|
<InteractiveSkeleton.Chip />
|
|
@@ -275,8 +280,8 @@ export function ArticleLayoutSkeleton({ className }: PageLayoutSkeletonProps) {
|
|
|
275
280
|
</header>
|
|
276
281
|
|
|
277
282
|
{/* Featured image */}
|
|
278
|
-
<div className="mb-8 md:mb-12">
|
|
279
|
-
<MediaSkeleton.CardImage className="h-64 w-full md:h-96" />
|
|
283
|
+
<div className="mb-8 content-md:mb-12">
|
|
284
|
+
<MediaSkeleton.CardImage className="h-64 w-full content-md:h-96" />
|
|
280
285
|
</div>
|
|
281
286
|
|
|
282
287
|
{/* Article content */}
|
|
@@ -311,12 +316,12 @@ export function ArticleLayoutSkeleton({ className }: PageLayoutSkeletonProps) {
|
|
|
311
316
|
export function VendorDetailLayoutSkeleton({ className }: PageLayoutSkeletonProps) {
|
|
312
317
|
return (
|
|
313
318
|
<main className={cn('min-h-screen bg-ods-bg', className)}>
|
|
314
|
-
<div className="mx-auto max-w-[1920px] px-6 py-6 md:px-20 md:py-10">
|
|
319
|
+
<div className="mx-auto max-w-[1920px] px-6 py-6 content-md:px-20 content-md:py-10">
|
|
315
320
|
{/* Breadcrumb */}
|
|
316
321
|
<BreadcrumbSkeleton className="mb-6" />
|
|
317
322
|
|
|
318
323
|
{/* Main Layout Container */}
|
|
319
|
-
<div className="flex flex-col lg:flex-row lg:gap-10">
|
|
324
|
+
<div className="flex flex-col content-lg:flex-row content-lg:gap-10">
|
|
320
325
|
{/* Left Content Area */}
|
|
321
326
|
<div className="min-w-0 flex-1">
|
|
322
327
|
{/* Vendor Hero Section */}
|
|
@@ -328,9 +333,9 @@ export function VendorDetailLayoutSkeleton({ className }: PageLayoutSkeletonProp
|
|
|
328
333
|
<div className="flex flex-col gap-3">
|
|
329
334
|
<div className="flex flex-col gap-2">
|
|
330
335
|
{/* Large title skeleton */}
|
|
331
|
-
<div className="h-12 w-80 max-w-full animate-pulse rounded bg-ods-skeleton md:h-16 lg:h-20"></div>
|
|
336
|
+
<div className="h-12 w-80 max-w-full animate-pulse rounded bg-ods-skeleton content-md:h-16 content-lg:h-20"></div>
|
|
332
337
|
{/* Category text */}
|
|
333
|
-
<div className="h-5 w-32 animate-pulse rounded bg-ods-skeleton md:h-6"></div>
|
|
338
|
+
<div className="h-5 w-32 animate-pulse rounded bg-ods-skeleton content-md:h-6"></div>
|
|
334
339
|
</div>
|
|
335
340
|
|
|
336
341
|
{/* Pricing tags */}
|
|
@@ -342,14 +347,14 @@ export function VendorDetailLayoutSkeleton({ className }: PageLayoutSkeletonProp
|
|
|
342
347
|
</div>
|
|
343
348
|
|
|
344
349
|
{/* Vendor Image Display Skeleton */}
|
|
345
|
-
<div className="mb-2 h-[300px] w-full animate-pulse rounded-lg border border-ods-border bg-ods-card md:h-[400px] lg:h-[500px]"></div>
|
|
350
|
+
<div className="mb-2 h-[300px] w-full animate-pulse rounded-lg border border-ods-border bg-ods-card content-md:h-[400px] content-lg:h-[500px]"></div>
|
|
346
351
|
<div className="text-center">
|
|
347
352
|
<div className="mx-auto h-4 w-24 animate-pulse rounded bg-ods-skeleton"></div>
|
|
348
353
|
</div>
|
|
349
354
|
</div>
|
|
350
355
|
|
|
351
356
|
{/* Mobile Sidebar - Show on mobile only, positioned after title */}
|
|
352
|
-
<div className="mb-10 lg:hidden">
|
|
357
|
+
<div className="mb-10 content-lg:hidden">
|
|
353
358
|
<div className="space-y-4">
|
|
354
359
|
{/* Deploy Button */}
|
|
355
360
|
<div className="h-12 animate-pulse rounded-lg border border-ods-border bg-ods-card"></div>
|
|
@@ -396,7 +401,7 @@ export function VendorDetailLayoutSkeleton({ className }: PageLayoutSkeletonProp
|
|
|
396
401
|
|
|
397
402
|
{/* Alternatives Container */}
|
|
398
403
|
<div className="mb-20 flex flex-col gap-6">
|
|
399
|
-
<div className="h-8 w-48 animate-pulse rounded bg-ods-skeleton md:h-10"></div>
|
|
404
|
+
<div className="h-8 w-48 animate-pulse rounded bg-ods-skeleton content-md:h-10"></div>
|
|
400
405
|
|
|
401
406
|
{/* Open Source Alternatives */}
|
|
402
407
|
<div className="flex flex-col gap-4">
|
|
@@ -427,9 +432,9 @@ export function VendorDetailLayoutSkeleton({ className }: PageLayoutSkeletonProp
|
|
|
427
432
|
|
|
428
433
|
{/* About Section */}
|
|
429
434
|
<div className="mb-20 flex flex-col gap-6">
|
|
430
|
-
<div className="h-8 w-64 animate-pulse rounded bg-ods-skeleton md:h-10"></div>
|
|
435
|
+
<div className="h-8 w-64 animate-pulse rounded bg-ods-skeleton content-md:h-10"></div>
|
|
431
436
|
|
|
432
|
-
<div className="rounded-lg border border-ods-border bg-ods-card p-6 md:p-8">
|
|
437
|
+
<div className="rounded-lg border border-ods-border bg-ods-card p-6 content-md:p-8">
|
|
433
438
|
<div className="space-y-4">
|
|
434
439
|
<div className="h-6 animate-pulse rounded bg-ods-skeleton"></div>
|
|
435
440
|
<div className="h-6 animate-pulse rounded bg-ods-skeleton"></div>
|
|
@@ -441,8 +446,8 @@ export function VendorDetailLayoutSkeleton({ className }: PageLayoutSkeletonProp
|
|
|
441
446
|
|
|
442
447
|
{/* Key Features Section */}
|
|
443
448
|
<div className="mb-20 flex flex-col gap-6">
|
|
444
|
-
<div className="h-8 w-72 animate-pulse rounded bg-ods-skeleton md:h-10"></div>
|
|
445
|
-
<div className="grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-3">
|
|
449
|
+
<div className="h-8 w-72 animate-pulse rounded bg-ods-skeleton content-md:h-10"></div>
|
|
450
|
+
<div className="grid grid-cols-1 gap-6 content-md:grid-cols-2 content-lg:grid-cols-3">
|
|
446
451
|
{Array.from({ length: 6 }).map((_, i) => (
|
|
447
452
|
<div key={i} className="flex gap-4 rounded-lg border border-ods-border bg-ods-card p-4">
|
|
448
453
|
<div className="h-12 w-12 flex-shrink-0 animate-pulse rounded bg-ods-skeleton"></div>
|
|
@@ -457,8 +462,8 @@ export function VendorDetailLayoutSkeleton({ className }: PageLayoutSkeletonProp
|
|
|
457
462
|
|
|
458
463
|
{/* Pros and Cons Section */}
|
|
459
464
|
<div className="mb-20 flex flex-col gap-6">
|
|
460
|
-
<div className="h-8 w-80 animate-pulse rounded bg-ods-skeleton md:h-10"></div>
|
|
461
|
-
<div className="grid grid-cols-1 gap-6 lg:grid-cols-2">
|
|
465
|
+
<div className="h-8 w-80 animate-pulse rounded bg-ods-skeleton content-md:h-10"></div>
|
|
466
|
+
<div className="grid grid-cols-1 gap-6 content-lg:grid-cols-2">
|
|
462
467
|
{/* Pros Column */}
|
|
463
468
|
<div className="flex flex-col gap-6">
|
|
464
469
|
<div className="h-5 w-16 animate-pulse rounded bg-ods-skeleton"></div>
|
|
@@ -490,8 +495,8 @@ export function VendorDetailLayoutSkeleton({ className }: PageLayoutSkeletonProp
|
|
|
490
495
|
|
|
491
496
|
{/* Alternatives Section */}
|
|
492
497
|
<div className="mb-20 flex flex-col gap-6">
|
|
493
|
-
<div className="h-8 w-72 animate-pulse rounded bg-ods-skeleton md:h-10"></div>
|
|
494
|
-
<div className="grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-3">
|
|
498
|
+
<div className="h-8 w-72 animate-pulse rounded bg-ods-skeleton content-md:h-10"></div>
|
|
499
|
+
<div className="grid grid-cols-1 gap-6 content-md:grid-cols-2 content-lg:grid-cols-3">
|
|
495
500
|
{Array.from({ length: 6 }).map((_, i) => (
|
|
496
501
|
<div key={i} className="space-y-4 rounded-lg border border-ods-border bg-ods-card p-6">
|
|
497
502
|
{/* Header */}
|
|
@@ -525,7 +530,7 @@ export function VendorDetailLayoutSkeleton({ className }: PageLayoutSkeletonProp
|
|
|
525
530
|
|
|
526
531
|
{/* Comments Section */}
|
|
527
532
|
<div className="mb-20 flex flex-col gap-6">
|
|
528
|
-
<div className="h-8 w-64 animate-pulse rounded bg-ods-skeleton md:h-10"></div>
|
|
533
|
+
<div className="h-8 w-64 animate-pulse rounded bg-ods-skeleton content-md:h-10"></div>
|
|
529
534
|
|
|
530
535
|
{/* Comment Form Skeleton */}
|
|
531
536
|
<div className="space-y-3">
|
|
@@ -589,7 +594,7 @@ export function VendorDetailLayoutSkeleton({ className }: PageLayoutSkeletonProp
|
|
|
589
594
|
</div>
|
|
590
595
|
|
|
591
596
|
{/* Right Sidebar - Desktop Only */}
|
|
592
|
-
<div className="hidden w-[290px] flex-shrink-0 lg:block">
|
|
597
|
+
<div className="hidden w-[290px] flex-shrink-0 content-lg:block">
|
|
593
598
|
<div className="space-y-4">
|
|
594
599
|
{/* Deploy Button */}
|
|
595
600
|
<div className="h-12 animate-pulse rounded-lg border border-ods-border bg-ods-card"></div>
|
|
@@ -646,9 +651,9 @@ export function StatsSectionSkeleton({ className, columns = 3 }: PageLayoutSkele
|
|
|
646
651
|
return (
|
|
647
652
|
<div
|
|
648
653
|
className={cn(
|
|
649
|
-
'mb-12 grid gap-6 md:mb-16',
|
|
650
|
-
columns === 3 && 'grid-cols-1 md:grid-cols-3',
|
|
651
|
-
columns === 4 && 'grid-cols-1 md:grid-cols-2 lg:grid-cols-4',
|
|
654
|
+
'mb-12 grid gap-6 content-md:mb-16',
|
|
655
|
+
columns === 3 && 'grid-cols-1 content-md:grid-cols-3',
|
|
656
|
+
columns === 4 && 'grid-cols-1 content-md:grid-cols-2 content-lg:grid-cols-4',
|
|
652
657
|
className,
|
|
653
658
|
)}
|
|
654
659
|
>
|
|
@@ -675,7 +680,7 @@ export function StatsSectionSkeleton({ className, columns = 3 }: PageLayoutSkele
|
|
|
675
680
|
export function BlogCardGridSkeleton({ className }: PageLayoutSkeletonProps) {
|
|
676
681
|
return (
|
|
677
682
|
<div className={cn('space-y-6', className)}>
|
|
678
|
-
<CardSkeletonGrid count={4} variant="blog" className="grid-cols-1 md:grid-cols-2" />
|
|
683
|
+
<CardSkeletonGrid count={4} variant="blog" className="grid-cols-1 content-md:grid-cols-2" />
|
|
679
684
|
</div>
|
|
680
685
|
);
|
|
681
686
|
}
|
|
@@ -687,7 +692,11 @@ export function BlogCardGridSkeleton({ className }: PageLayoutSkeletonProps) {
|
|
|
687
692
|
export function VendorGridSkeleton({ className }: PageLayoutSkeletonProps) {
|
|
688
693
|
return (
|
|
689
694
|
<div className={cn('space-y-6', className)}>
|
|
690
|
-
<CardSkeletonGrid
|
|
695
|
+
<CardSkeletonGrid
|
|
696
|
+
count={12}
|
|
697
|
+
variant="vendor"
|
|
698
|
+
className="grid-cols-1 content-md:grid-cols-2 content-lg:grid-cols-3"
|
|
699
|
+
/>
|
|
691
700
|
</div>
|
|
692
701
|
);
|
|
693
702
|
}
|
|
@@ -698,18 +707,21 @@ export function VendorGridSkeleton({ className }: PageLayoutSkeletonProps) {
|
|
|
698
707
|
*/
|
|
699
708
|
export function SlackCommunitySkeleton() {
|
|
700
709
|
return (
|
|
701
|
-
<section
|
|
710
|
+
<section
|
|
711
|
+
className="w-full bg-ods-bg px-4 py-12 content-md:px-20 content-md:py-20 content-lg:px-20"
|
|
712
|
+
aria-label="Slack Community Loading"
|
|
713
|
+
>
|
|
702
714
|
{/* Frame 651 Container */}
|
|
703
|
-
<div className="flex w-full flex-col gap-4 md:gap-6">
|
|
715
|
+
<div className="flex w-full flex-col gap-4 content-md:gap-6">
|
|
704
716
|
{/* Title Skeleton */}
|
|
705
717
|
<div className="w-full">
|
|
706
|
-
<div className="h-8 max-w-md animate-pulse rounded-lg bg-ods-skeleton md:h-12 lg:h-14"></div>
|
|
718
|
+
<div className="h-8 max-w-md animate-pulse rounded-lg bg-ods-skeleton content-md:h-12 content-lg:h-14"></div>
|
|
707
719
|
</div>
|
|
708
720
|
|
|
709
721
|
{/* Content Area - Channel List + Chat Interface */}
|
|
710
|
-
<div className="flex w-full min-w-0 flex-col gap-4 md:gap-6 lg:flex-row lg:items-start lg:justify-end">
|
|
722
|
+
<div className="flex w-full min-w-0 flex-col gap-4 content-md:gap-6 content-lg:flex-row content-lg:items-start content-lg:justify-end">
|
|
711
723
|
{/* Channel List Skeleton */}
|
|
712
|
-
<div className="flex w-full flex-shrink-0 animate-pulse flex-col overflow-hidden rounded border border-ods-border bg-ods-bg lg:w-[290px] lg:max-w-[290px]">
|
|
724
|
+
<div className="flex w-full flex-shrink-0 animate-pulse flex-col overflow-hidden rounded border border-ods-border bg-ods-bg content-lg:w-[290px] content-lg:max-w-[290px]">
|
|
713
725
|
<div className="space-y-4 p-4">
|
|
714
726
|
{/* Header */}
|
|
715
727
|
<div className="flex flex-col gap-2">
|
|
@@ -751,36 +763,36 @@ export function SlackCommunitySkeleton() {
|
|
|
751
763
|
</div>
|
|
752
764
|
|
|
753
765
|
{/* Chat Interface Skeleton */}
|
|
754
|
-
<div className="flex h-[450px] min-h-[450px] min-w-0 flex-1 animate-pulse flex-col rounded-lg border border-ods-border bg-ods-card md:h-[500px] md:min-h-[500px] lg:h-[600px] lg:min-h-[600px]">
|
|
766
|
+
<div className="flex h-[450px] min-h-[450px] min-w-0 flex-1 animate-pulse flex-col rounded-lg border border-ods-border bg-ods-card content-md:h-[500px] content-md:min-h-[500px] content-lg:h-[600px] content-lg:min-h-[600px]">
|
|
755
767
|
{/* Header */}
|
|
756
|
-
<div className="flex h-[56px] flex-shrink-0 items-center justify-between border-b border-ods-border bg-ods-bg p-4 md:h-[60px] md:p-6">
|
|
768
|
+
<div className="flex h-[56px] flex-shrink-0 items-center justify-between border-b border-ods-border bg-ods-bg p-4 content-md:h-[60px] content-md:p-6">
|
|
757
769
|
<div className="flex items-center gap-2">
|
|
758
|
-
<div className="h-3 w-3 rounded bg-ods-skeleton md:h-4 md:w-4"></div>
|
|
759
|
-
<div className="h-3 w-24 rounded bg-ods-skeleton md:h-4 md:w-32"></div>
|
|
770
|
+
<div className="h-3 w-3 rounded bg-ods-skeleton content-md:h-4 content-md:w-4"></div>
|
|
771
|
+
<div className="h-3 w-24 rounded bg-ods-skeleton content-md:h-4 content-md:w-32"></div>
|
|
760
772
|
</div>
|
|
761
|
-
<div className="h-3 w-12 rounded bg-ods-skeleton md:w-16"></div>
|
|
773
|
+
<div className="h-3 w-12 rounded bg-ods-skeleton content-md:w-16"></div>
|
|
762
774
|
</div>
|
|
763
775
|
|
|
764
776
|
{/* Messages */}
|
|
765
|
-
<div className="min-h-[280px] flex-1 space-y-3 overflow-hidden bg-ods-bg p-4 md:min-h-[320px] md:space-y-4 md:p-6 lg:min-h-[420px]">
|
|
777
|
+
<div className="min-h-[280px] flex-1 space-y-3 overflow-hidden bg-ods-bg p-4 content-md:min-h-[320px] content-md:space-y-4 content-md:p-6 content-lg:min-h-[420px]">
|
|
766
778
|
{Array.from({ length: 6 }).map((_, i) => (
|
|
767
|
-
<div key={i} className="flex gap-2 md:gap-3">
|
|
768
|
-
<div className="h-10 w-10 flex-shrink-0 rounded-lg bg-ods-skeleton md:h-12 md:w-12"></div>
|
|
779
|
+
<div key={i} className="flex gap-2 content-md:gap-3">
|
|
780
|
+
<div className="h-10 w-10 flex-shrink-0 rounded-lg bg-ods-skeleton content-md:h-12 content-md:w-12"></div>
|
|
769
781
|
<div className="flex-1">
|
|
770
782
|
<div className="mb-1 flex items-center gap-2">
|
|
771
|
-
<div className="h-3 w-16 rounded bg-ods-skeleton md:w-20"></div>
|
|
772
|
-
<div className="h-3 w-12 rounded bg-ods-skeleton md:w-16"></div>
|
|
783
|
+
<div className="h-3 w-16 rounded bg-ods-skeleton content-md:w-20"></div>
|
|
784
|
+
<div className="h-3 w-12 rounded bg-ods-skeleton content-md:w-16"></div>
|
|
773
785
|
</div>
|
|
774
|
-
<div className="h-3 w-full rounded bg-ods-skeleton md:h-4"></div>
|
|
786
|
+
<div className="h-3 w-full rounded bg-ods-skeleton content-md:h-4"></div>
|
|
775
787
|
</div>
|
|
776
788
|
</div>
|
|
777
789
|
))}
|
|
778
790
|
</div>
|
|
779
791
|
|
|
780
792
|
{/* Input Area */}
|
|
781
|
-
<div className="h-[72px] flex-shrink-0 border-t border-ods-border bg-ods-card p-4 md:h-[80px] md:p-6">
|
|
782
|
-
<div className="flex items-end justify-center gap-3 md:justify-end">
|
|
783
|
-
<div className="h-10 w-28 rounded-lg bg-ods-skeleton md:h-12 md:w-32"></div>
|
|
793
|
+
<div className="h-[72px] flex-shrink-0 border-t border-ods-border bg-ods-card p-4 content-md:h-[80px] content-md:p-6">
|
|
794
|
+
<div className="flex items-end justify-center gap-3 content-md:justify-end">
|
|
795
|
+
<div className="h-10 w-28 rounded-lg bg-ods-skeleton content-md:h-12 content-md:w-32"></div>
|
|
784
796
|
</div>
|
|
785
797
|
</div>
|
|
786
798
|
</div>
|
|
@@ -97,7 +97,7 @@ export const TextSkeleton = {
|
|
|
97
97
|
Heading: ({ className, ...props }: Omit<UnifiedSkeletonProps, 'variant'>) => (
|
|
98
98
|
<UnifiedSkeleton
|
|
99
99
|
variant="text"
|
|
100
|
-
className={cn('h-8 md:h-10 lg:h-12', className)}
|
|
100
|
+
className={cn('h-8 content-md:h-10 content-lg:h-12', className)}
|
|
101
101
|
aria-label="Loading heading"
|
|
102
102
|
{...props}
|
|
103
103
|
/>
|
|
@@ -109,7 +109,7 @@ export const TextSkeleton = {
|
|
|
109
109
|
Subheading: ({ className, ...props }: Omit<UnifiedSkeletonProps, 'variant'>) => (
|
|
110
110
|
<UnifiedSkeleton
|
|
111
111
|
variant="text"
|
|
112
|
-
className={cn('h-6 md:h-7 lg:h-8', className)}
|
|
112
|
+
className={cn('h-6 content-md:h-7 content-lg:h-8', className)}
|
|
113
113
|
aria-label="Loading subheading"
|
|
114
114
|
{...props}
|
|
115
115
|
/>
|
|
@@ -119,14 +119,24 @@ export const TextSkeleton = {
|
|
|
119
119
|
* Body text skeleton
|
|
120
120
|
*/
|
|
121
121
|
Body: ({ className, ...props }: Omit<UnifiedSkeletonProps, 'variant'>) => (
|
|
122
|
-
<UnifiedSkeleton
|
|
122
|
+
<UnifiedSkeleton
|
|
123
|
+
variant="text"
|
|
124
|
+
className={cn('h-4 content-md:h-5', className)}
|
|
125
|
+
aria-label="Loading text"
|
|
126
|
+
{...props}
|
|
127
|
+
/>
|
|
123
128
|
),
|
|
124
129
|
|
|
125
130
|
/**
|
|
126
131
|
* Small text skeleton (captions, metadata)
|
|
127
132
|
*/
|
|
128
133
|
Caption: ({ className, ...props }: Omit<UnifiedSkeletonProps, 'variant'>) => (
|
|
129
|
-
<UnifiedSkeleton
|
|
134
|
+
<UnifiedSkeleton
|
|
135
|
+
variant="text"
|
|
136
|
+
className={cn('h-3 content-md:h-4', className)}
|
|
137
|
+
aria-label="Loading caption"
|
|
138
|
+
{...props}
|
|
139
|
+
/>
|
|
130
140
|
),
|
|
131
141
|
};
|
|
132
142
|
|
|
@@ -140,7 +150,7 @@ export const InteractiveSkeleton = {
|
|
|
140
150
|
Button: ({ className, ...props }: Omit<UnifiedSkeletonProps, 'variant'>) => (
|
|
141
151
|
<UnifiedSkeleton
|
|
142
152
|
variant="default"
|
|
143
|
-
className={cn('h-10 w-32 md:h-12 md:w-40', className)}
|
|
153
|
+
className={cn('h-10 w-32 content-md:h-12 content-md:w-40', className)}
|
|
144
154
|
aria-label="Loading button"
|
|
145
155
|
{...props}
|
|
146
156
|
/>
|
|
@@ -152,7 +162,7 @@ export const InteractiveSkeleton = {
|
|
|
152
162
|
Input: ({ className, ...props }: Omit<UnifiedSkeletonProps, 'variant'>) => (
|
|
153
163
|
<UnifiedSkeleton
|
|
154
164
|
variant="default"
|
|
155
|
-
className={cn('h-10 w-full md:h-12', className)}
|
|
165
|
+
className={cn('h-10 w-full content-md:h-12', className)}
|
|
156
166
|
aria-label="Loading input field"
|
|
157
167
|
{...props}
|
|
158
168
|
/>
|
|
@@ -293,7 +293,7 @@ export const MediaCarousel = memo(function MediaCarouselImpl({
|
|
|
293
293
|
<Button
|
|
294
294
|
variant="transparent"
|
|
295
295
|
onClick={prevSlide}
|
|
296
|
-
className="absolute left-3 top-1/2 z-10 h-auto -translate-y-1/2 rounded-full bg-black/50 p-2 text-ods-text-on-dark opacity-0 transition-opacity duration-200 hover:bg-black/70 group-hover:opacity-100 md:h-auto"
|
|
296
|
+
className="absolute left-3 top-1/2 z-10 h-auto -translate-y-1/2 rounded-full bg-black/50 p-2 text-ods-text-on-dark opacity-0 transition-opacity duration-200 hover:bg-black/70 group-hover:opacity-100 content-md:h-auto"
|
|
297
297
|
aria-label="Previous media"
|
|
298
298
|
>
|
|
299
299
|
<ChevronLeftIcon />
|
|
@@ -302,7 +302,7 @@ export const MediaCarousel = memo(function MediaCarouselImpl({
|
|
|
302
302
|
<Button
|
|
303
303
|
variant="transparent"
|
|
304
304
|
onClick={nextSlide}
|
|
305
|
-
className="absolute right-3 top-1/2 z-10 h-auto -translate-y-1/2 rounded-full bg-black/50 p-2 text-ods-text-on-dark opacity-0 transition-opacity duration-200 hover:bg-black/70 group-hover:opacity-100 md:h-auto"
|
|
305
|
+
className="absolute right-3 top-1/2 z-10 h-auto -translate-y-1/2 rounded-full bg-black/50 p-2 text-ods-text-on-dark opacity-0 transition-opacity duration-200 hover:bg-black/70 group-hover:opacity-100 content-md:h-auto"
|
|
306
306
|
aria-label="Next media"
|
|
307
307
|
>
|
|
308
308
|
<ChevronRightIcon />
|
|
@@ -326,7 +326,7 @@ export const MediaCarousel = memo(function MediaCarouselImpl({
|
|
|
326
326
|
aria-current={isActive ? 'true' : undefined}
|
|
327
327
|
aria-label={`Go to slide ${index + 1}`}
|
|
328
328
|
onClick={() => selectSlide(index)}
|
|
329
|
-
className="flex h-6 w-6 shrink-0 items-center justify-center rounded-full p-0 md:h-6"
|
|
329
|
+
className="flex h-6 w-6 shrink-0 items-center justify-center rounded-full p-0 content-md:h-6"
|
|
330
330
|
>
|
|
331
331
|
<span
|
|
332
332
|
className={cn(
|
|
@@ -104,26 +104,27 @@ const FORM_STACK = 'flex flex-col gap-[var(--spacing-system-l)]';
|
|
|
104
104
|
/** The row grid: two columns on a phone, four from `md`. The row gap is one step
|
|
105
105
|
* wider than the column gap because field messages hang ~16px below their
|
|
106
106
|
* control and would print over the next row's label at the column gap. */
|
|
107
|
-
const ROW_GRID =
|
|
107
|
+
const ROW_GRID =
|
|
108
|
+
'grid grid-cols-2 gap-x-[var(--spacing-system-m)] gap-y-[var(--spacing-system-lf)] content-md:grid-cols-4';
|
|
108
109
|
|
|
109
110
|
/** The wire key of the host consent tick (stripped server-side, never sent to HubSpot). */
|
|
110
111
|
const HOST_CONSENT_KEY = 'hostConsent';
|
|
111
112
|
|
|
112
|
-
/** The row grid's column count at `md` and up. `ROW_GRID`'s `md:grid-cols-4`
|
|
113
|
+
/** The row grid's column count at `md` and up. `ROW_GRID`'s `content-md:grid-cols-4`
|
|
113
114
|
* and `SPAN_CLASS` are its Tailwind twins (literal so the scanner sees them). */
|
|
114
115
|
const GRID_COLUMNS = 4;
|
|
115
116
|
|
|
116
117
|
/** Static so Tailwind's scanner sees every class — a template built from a
|
|
117
118
|
* runtime span would compile to nothing. */
|
|
118
119
|
const SPAN_CLASS = {
|
|
119
|
-
1: 'md:col-span-1',
|
|
120
|
-
2: 'md:col-span-2',
|
|
121
|
-
3: 'md:col-span-3',
|
|
122
|
-
4: 'md:col-span-4',
|
|
120
|
+
1: 'content-md:col-span-1',
|
|
121
|
+
2: 'content-md:col-span-2',
|
|
122
|
+
3: 'content-md:col-span-3',
|
|
123
|
+
4: 'content-md:col-span-4',
|
|
123
124
|
} as const;
|
|
124
125
|
|
|
125
126
|
/** One field's skeleton: label + control footprint — the CSS twin of `FieldWrapper`'s
|
|
126
|
-
* label row over `Input`'s `h-11 md:h-12` (the other skeleton heights below are
|
|
127
|
+
* label row over `Input`'s `h-11 content-md:h-12` (the other skeleton heights below are
|
|
127
128
|
* the same kind of twin: the textarea, the consent row, the `Button`). */
|
|
128
129
|
const FIELD_SKELETON_CLASS = 'h-[4.75rem] w-full';
|
|
129
130
|
|
|
@@ -135,7 +136,7 @@ const FOOTER_ROW_CLASS = 'flex flex-wrap items-center justify-between gap-[var(-
|
|
|
135
136
|
/** The bare footer: the button stays LEFT, where the form's reading order ends. */
|
|
136
137
|
const FOOTER_BARE_CLASS = 'flex';
|
|
137
138
|
/** The submit's width when a note sits beside it. */
|
|
138
|
-
const SUBMIT_WIDE_CLASS = 'md:w-60';
|
|
139
|
+
const SUBMIT_WIDE_CLASS = 'content-md:w-60';
|
|
139
140
|
|
|
140
141
|
/** The built-in layout when a host passes no rows — what the skeleton draws for it. */
|
|
141
142
|
const DEFAULT_FIELD_ROWS: BookingFieldRow[] = [[{ name: 'email' }], [{ name: 'firstName' }, { name: 'lastName' }]];
|
|
@@ -70,7 +70,7 @@ const PANEL_STACK = 'flex flex-col gap-[var(--spacing-system-l)]';
|
|
|
70
70
|
* two children, different axis; nothing is hidden at any width.
|
|
71
71
|
*/
|
|
72
72
|
const IDENTITY_ROW =
|
|
73
|
-
'flex items-center justify-between gap-[var(--spacing-system-m)] lg:flex-col lg:items-stretch lg:gap-[var(--spacing-system-l)]';
|
|
73
|
+
'flex items-center justify-between gap-[var(--spacing-system-m)] content-lg:flex-col content-lg:items-stretch content-lg:gap-[var(--spacing-system-l)]';
|
|
74
74
|
|
|
75
75
|
/**
|
|
76
76
|
* Everything under the back edge, in TWO groups: identity/title/duration, and
|
|
@@ -85,11 +85,13 @@ const IDENTITY_ROW =
|
|
|
85
85
|
* Below `md` (phone) and from `lg` up (280px sidebar) there is no horizontal
|
|
86
86
|
* room to spend, so both fall back to the plain stack.
|
|
87
87
|
*/
|
|
88
|
-
const STRIP_BODY =
|
|
89
|
-
|
|
88
|
+
const STRIP_BODY =
|
|
89
|
+
'flex flex-col gap-[var(--spacing-system-l)] content-md:flex-row content-md:items-start content-lg:flex-col';
|
|
90
|
+
const STRIP_MAIN = 'flex min-w-0 flex-col gap-[var(--spacing-system-l)] content-md:flex-1';
|
|
90
91
|
/** 280px — the same width this panel has as a sidebar, so the field is the
|
|
91
92
|
* size the visitor meets at every other breakpoint. */
|
|
92
|
-
const STRIP_ASIDE =
|
|
93
|
+
const STRIP_ASIDE =
|
|
94
|
+
'flex flex-col gap-[var(--spacing-system-xxs)] content-md:w-[280px] content-md:shrink-0 content-lg:w-full';
|
|
93
95
|
|
|
94
96
|
/** The back affordance sits flush with the panel's top padding: `BackButton`'s
|
|
95
97
|
* own 12px block padding would otherwise double the 24px stack gap under it. */
|
|
@@ -124,7 +126,7 @@ export function ContextPanelSkeleton({
|
|
|
124
126
|
<div className={STRIP_BODY}>
|
|
125
127
|
<div className={STRIP_MAIN}>
|
|
126
128
|
<div className={IDENTITY_ROW}>
|
|
127
|
-
<div className="flex min-w-0 flex-1 items-center gap-[var(--spacing-system-xs)] lg:flex-none">
|
|
129
|
+
<div className="flex min-w-0 flex-1 items-center gap-[var(--spacing-system-xs)] content-lg:flex-none">
|
|
128
130
|
<Skeleton className="h-8 w-8 shrink-0 rounded-full" />
|
|
129
131
|
<div className="flex flex-1 flex-col gap-[var(--spacing-system-xxs)]">
|
|
130
132
|
<Skeleton className="h-5 w-32" />
|
|
@@ -241,7 +243,7 @@ export function SchedulerContextPanel({
|
|
|
241
243
|
// summary line states the zone one row below — so the fact survives,
|
|
242
244
|
// only the control steps aside. The 280px sidebar has the room, so
|
|
243
245
|
// there it stays.
|
|
244
|
-
<div className={cn(STRIP_ASIDE, locked && 'max-lg:hidden')}>
|
|
246
|
+
<div className={cn(STRIP_ASIDE, locked && 'content-max-lg:hidden')}>
|
|
245
247
|
<p className={FIELD_LABEL_CLASS}>Timezone</p>
|
|
246
248
|
{timezone ? (
|
|
247
249
|
<TimezoneSelect
|
|
@@ -98,7 +98,7 @@ function DirectoryRow({
|
|
|
98
98
|
|
|
99
99
|
{/* No audience entity (scope=all "other" group) → no chip. */}
|
|
100
100
|
{audienceLabel && (
|
|
101
|
-
<StatusBadge text={`For ${audienceLabel}`} singleLine className="hidden shrink-0 sm:inline-flex" />
|
|
101
|
+
<StatusBadge text={`For ${audienceLabel}`} singleLine className="hidden shrink-0 content-sm:inline-flex" />
|
|
102
102
|
)}
|
|
103
103
|
|
|
104
104
|
{/* Hosts stay visible on mobile too — the facepile is the row's "who
|
|
@@ -106,7 +106,7 @@ function DirectoryRow({
|
|
|
106
106
|
collapse on narrow widths. */}
|
|
107
107
|
<AvatarStack people={link.hosts} max={3} size="md" label="Hosts" className="flex shrink-0" />
|
|
108
108
|
|
|
109
|
-
<div className="hidden w-44 shrink-0 flex-col items-end justify-center md:flex">
|
|
109
|
+
<div className="hidden w-44 shrink-0 flex-col items-end justify-center content-md:flex">
|
|
110
110
|
<p className="text-ods-text-secondary text-h6">Next available</p>
|
|
111
111
|
<p className="min-h-5 text-ods-text-primary text-h6">
|
|
112
112
|
{link.nextAvailableMs == null ? 'No times published' : (nextLabel ?? ' ')}
|
|
@@ -130,9 +130,9 @@ export function MeetingSchedulerDirectoryRowSkeleton() {
|
|
|
130
130
|
<Skeleton className="h-5 w-1/2" />
|
|
131
131
|
<Skeleton className="h-4 w-1/3" />
|
|
132
132
|
</div>
|
|
133
|
-
<Skeleton className="hidden h-6 w-28 shrink-0 sm:block" />
|
|
133
|
+
<Skeleton className="hidden h-6 w-28 shrink-0 content-sm:block" />
|
|
134
134
|
<Skeleton className="h-10 w-10 shrink-0 rounded-full" />
|
|
135
|
-
<div className="hidden w-44 shrink-0 flex-col items-end gap-1 md:flex">
|
|
135
|
+
<div className="hidden w-44 shrink-0 flex-col items-end gap-1 content-md:flex">
|
|
136
136
|
<Skeleton className="h-4 w-24" />
|
|
137
137
|
<Skeleton className="h-5 w-32" />
|
|
138
138
|
</div>
|