@flamingo-stack/openframe-frontend-core 0.0.748 → 0.0.750
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/build/export-map.json +1 -1
- package/dist/{chunk-7Y3VMMJB.cjs → chunk-2J2OBP4N.cjs} +26 -18
- package/dist/chunk-2YXOD2KL.cjs +137 -0
- package/dist/{chunk-BEC43GHL.cjs → chunk-34TWK3JE.cjs} +3 -3
- package/dist/{chunk-BBM2ICOY.cjs → chunk-3TELPOVH.cjs} +2 -2
- package/dist/{chunk-G2ELX3DG.cjs → chunk-45YRDD7W.cjs} +22 -19
- package/dist/{chunk-4AZHFLOM.cjs → chunk-4O2KYY4K.cjs} +3 -3
- package/dist/{chunk-6XP6RNFD.cjs → chunk-6KEJQR6L.cjs} +1875 -2116
- package/dist/{chunk-JNBOQ7F2.cjs → chunk-7RCTOWBA.cjs} +24 -24
- package/dist/{chunk-U6XWGK53.cjs → chunk-ALPRQ3ZX.cjs} +56 -46
- package/dist/{chunk-TRXCQADV.cjs → chunk-AW6GP3JK.cjs} +103 -98
- package/dist/{chunk-GE4PCDNZ.cjs → chunk-BO6ZOAPB.cjs} +12 -12
- package/dist/{chunk-HNLI4OU5.cjs → chunk-C6LPOYDM.cjs} +24 -24
- package/dist/{chunk-4MGZYY6U.cjs → chunk-CLAJIQ7E.cjs} +26 -18
- package/dist/{chunk-EH3LOWGY.cjs → chunk-CNUZLOVA.cjs} +48 -40
- package/dist/{chunk-QPSQ5WLG.cjs → chunk-DGEB5GUZ.cjs} +2 -2
- package/dist/{chunk-OZUJYBQ2.cjs → chunk-E3KFEOFA.cjs} +9 -6
- package/dist/{chunk-PSSGIZXZ.cjs → chunk-FHT7SMA7.cjs} +49 -46
- package/dist/{chunk-JOPFX3PJ.cjs → chunk-FP6HAJQV.cjs} +137 -122
- package/dist/{chunk-YKJQM2O6.cjs → chunk-GVETSV7H.cjs} +56 -53
- package/dist/{chunk-UNR74CAC.cjs → chunk-HOEVD6EN.cjs} +4 -4
- package/dist/{chunk-H34A2765.cjs → chunk-JPUTILTV.cjs} +104 -118
- package/dist/{chunk-46EIXJFC.cjs → chunk-KVSEWACW.cjs} +44 -27
- package/dist/{chunk-AKTPO2DN.cjs → chunk-L4UI63K6.cjs} +2 -2
- package/dist/{chunk-PSIKUDUV.cjs → chunk-LVO7FALW.cjs} +5 -5
- package/dist/{chunk-L2RMTGOK.cjs → chunk-MGF3FUKD.cjs} +7 -7
- package/dist/{chunk-P7KTAXXE.cjs → chunk-OFO75R2O.cjs} +169 -175
- package/dist/{chunk-B27QEHYR.cjs → chunk-P6F6PHVK.cjs} +9 -9
- package/dist/chunk-RB6BSE3O.cjs +21 -0
- package/dist/chunk-UGCRLRCT.cjs +25 -0
- package/dist/{chunk-BBTSJYTR.cjs → chunk-V3UJ6NDR.cjs} +243 -429
- package/dist/{chunk-ZNUSYMH7.cjs → chunk-WZX26ODJ.cjs} +121 -121
- package/dist/{chunk-YIRX6C7V.cjs → chunk-XJ3J4UIS.cjs} +57 -22
- package/dist/{chunk-D4XZL27V.cjs → chunk-YL62VAHC.cjs} +6 -6
- package/dist/{cloud-tenants-V5727B7F.cjs → cloud-tenants-E4JSG3GH.cjs} +16 -14
- package/dist/components/case-studies/index.cjs +29 -27
- package/dist/components/categories-cart.d.ts.map +1 -1
- package/dist/components/categories-cart.js +2 -7
- package/dist/components/chat/chat-container.js +4 -4
- package/dist/components/chat/chat-context-picker.d.ts.map +1 -1
- package/dist/components/chat/chat-context-picker.js +2 -1
- package/dist/components/chat/chat-message-row.d.ts.map +1 -1
- package/dist/components/chat/chat-message-row.js +6 -5
- package/dist/components/chat/chat-message-skeleton.d.ts +3 -1
- package/dist/components/chat/chat-message-skeleton.d.ts.map +1 -1
- package/dist/components/chat/chat-message-skeleton.js +8 -5
- package/dist/components/chat/chat-sidebar-skeleton.d.ts.map +1 -1
- package/dist/components/chat/chat-sidebar-skeleton.js +4 -3
- package/dist/components/chat/chat-top-navigation.js +4 -4
- package/dist/components/chat/context-items-list.d.ts.map +1 -1
- package/dist/components/chat/context-items-list.js +5 -3
- package/dist/components/chat/entity-cards/admin-content-card-grid.d.ts +24 -1
- package/dist/components/chat/entity-cards/admin-content-card-grid.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/admin-content-card-grid.js +46 -15
- package/dist/components/chat/entity-cards/admin-content-card.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/admin-content-card.js +2 -1
- package/dist/components/chat/entity-cards/blog-card.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/blog-card.js +13 -12
- package/dist/components/chat/entity-cards/campaign-card-admin.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/campaign-card-admin.js +5 -4
- package/dist/components/chat/entity-cards/case-study-card.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/case-study-card.js +19 -18
- package/dist/components/chat/entity-cards/chat-ticket-item.js +5 -5
- package/dist/components/chat/entity-cards/customer-interview-card.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/customer-interview-card.js +15 -14
- package/dist/components/chat/entity-cards/data-room-doc-card.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/data-room-doc-card.js +7 -6
- package/dist/components/chat/entity-cards/design-doc-card.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/design-doc-card.js +0 -2
- package/dist/components/chat/entity-cards/generic-entity-card.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/generic-entity-card.js +8 -7
- package/dist/components/chat/entity-cards/github-activity-card.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/github-activity-card.js +11 -10
- package/dist/components/chat/entity-cards/hubspot-ticket-card.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/hubspot-ticket-card.js +16 -15
- package/dist/components/chat/entity-cards/index.d.ts +1 -1
- package/dist/components/chat/entity-cards/index.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/index.js +2 -0
- package/dist/components/chat/entity-cards/investor-update-card.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/investor-update-card.js +12 -11
- package/dist/components/chat/entity-cards/onboarding-guide-card.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/onboarding-guide-card.js +25 -30
- package/dist/components/chat/entity-cards/program-card.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/program-card.js +29 -28
- package/dist/components/chat/entity-cards/roadmap-card.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/roadmap-card.js +37 -39
- package/dist/components/chat/entity-cards/slack-message-card.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/slack-message-card.js +12 -11
- package/dist/components/chat/guide-welcome.js +2 -2
- package/dist/components/chat/index.cjs +13 -9
- package/dist/components/chat/mingo-archive-list.d.ts.map +1 -1
- package/dist/components/chat/mingo-archive-list.js +2 -1
- package/dist/components/chat/mingo-chat-history.d.ts +4 -2
- package/dist/components/chat/mingo-chat-history.d.ts.map +1 -1
- package/dist/components/chat/mingo-chat-history.js +11 -5
- package/dist/components/chat/mingo-chat-rail.d.ts.map +1 -1
- package/dist/components/chat/mingo-chat-rail.js +2 -1
- package/dist/components/chat/mingo-info-card.d.ts.map +1 -1
- package/dist/components/chat/mingo-info-card.js +6 -5
- package/dist/components/chat/mingo-onboarding-card-skeleton.d.ts +3 -1
- package/dist/components/chat/mingo-onboarding-card-skeleton.d.ts.map +1 -1
- package/dist/components/chat/mingo-onboarding-card-skeleton.js +12 -12
- package/dist/components/chat/model-display.js +4 -4
- package/dist/components/chat/msp-organization-card-skeleton.js +5 -5
- package/dist/components/chat/quick-action-chip.d.ts +3 -3
- package/dist/components/chat/quick-action-chip.d.ts.map +1 -1
- package/dist/components/chat/quick-action-chip.js +12 -6
- package/dist/components/chat/utils/compact-card-classes.d.ts +4 -4
- package/dist/components/chat/utils/compact-card-classes.d.ts.map +1 -1
- package/dist/components/chat/utils/compact-card-classes.js +2 -2
- package/dist/components/contact/index.cjs +17 -15
- package/dist/components/content-loading-container.d.ts +1 -1
- package/dist/components/content-loading-container.d.ts.map +1 -1
- package/dist/components/content-loading-container.js +6 -7
- package/dist/components/docs/doc-viewer.d.ts.map +1 -1
- package/dist/components/docs/doc-viewer.js +3 -2
- package/dist/components/docs/index.cjs +20 -18
- package/dist/components/docs/skeletons.d.ts +7 -8
- package/dist/components/docs/skeletons.d.ts.map +1 -1
- package/dist/components/docs/skeletons.js +62 -61
- package/dist/components/embeds/embed-iframe.d.ts +6 -6
- package/dist/components/embeds/embed-iframe.d.ts.map +1 -1
- package/dist/components/embeds/embed-iframe.js +9 -4
- package/dist/components/embeds/index.cjs +19 -15
- package/dist/components/embeds/index.d.ts +2 -2
- package/dist/components/embeds/index.d.ts.map +1 -1
- package/dist/components/embeds/index.js +2 -1
- package/dist/components/embeds/linkedin-embed-client.d.ts.map +1 -1
- package/dist/components/embeds/linkedin-embed-client.js +7 -6
- package/dist/components/embeds/markdown-image.d.ts.map +1 -1
- package/dist/components/embeds/markdown-image.js +5 -3
- package/dist/components/embeds/og-link-preview.d.ts +19 -18
- package/dist/components/embeds/og-link-preview.d.ts.map +1 -1
- package/dist/components/embeds/og-link-preview.js +143 -88
- package/dist/components/embeds/reddit-embed-client.d.ts.map +1 -1
- package/dist/components/embeds/reddit-embed-client.js +10 -9
- package/dist/components/embeds/twitter-embed-client.d.ts.map +1 -1
- package/dist/components/embeds/twitter-embed-client.js +10 -9
- package/dist/components/faq/faq-section.d.ts.map +1 -1
- package/dist/components/faq/faq-section.js +9 -5
- package/dist/components/faq/index.cjs +18 -16
- package/dist/components/features/auth/login-form.d.ts +34 -21
- package/dist/components/features/auth/login-form.d.ts.map +1 -1
- package/dist/components/features/auth/login-form.js +77 -39
- package/dist/components/features/auth/sso-providers.d.ts +7 -1
- package/dist/components/features/auth/sso-providers.d.ts.map +1 -1
- package/dist/components/features/auth/sso-providers.js +22 -4
- package/dist/components/features/board/ticket-card-skeleton.js +8 -8
- package/dist/components/features/capability-explorer.d.ts +3 -1
- package/dist/components/features/capability-explorer.d.ts.map +1 -1
- package/dist/components/features/capability-explorer.js +27 -24
- package/dist/components/features/devices/device-selector/device-selector-skeleton.d.ts +5 -2
- package/dist/components/features/devices/device-selector/device-selector-skeleton.d.ts.map +1 -1
- package/dist/components/features/devices/device-selector/device-selector-skeleton.js +2 -2
- package/dist/components/features/devices/device-selector/device-selector.d.ts +1 -1
- package/dist/components/features/devices/device-selector/device-selector.d.ts.map +1 -1
- package/dist/components/features/devices/device-selector/device-selector.js +2 -0
- package/dist/components/features/devices/device-selector/device-selector.types.d.ts +2 -0
- package/dist/components/features/devices/device-selector/device-selector.types.d.ts.map +1 -1
- package/dist/components/features/devices/devices-grid.d.ts +3 -1
- package/dist/components/features/devices/devices-grid.d.ts.map +1 -1
- package/dist/components/features/devices/devices-grid.js +3 -2
- package/dist/components/features/devices/devices-panel-view.d.ts +6 -1
- package/dist/components/features/devices/devices-panel-view.d.ts.map +1 -1
- package/dist/components/features/devices/devices-panel-view.js +4 -1
- package/dist/components/features/devices/devices-table-columns.d.ts +3 -1
- package/dist/components/features/devices/devices-table-columns.d.ts.map +1 -1
- package/dist/components/features/devices/devices-table-columns.js +2 -0
- package/dist/components/features/index.cjs +18 -14
- package/dist/components/features/logs/logs-table-view.d.ts +3 -1
- package/dist/components/features/logs/logs-table-view.d.ts.map +1 -1
- package/dist/components/features/logs/logs-table-view.js +2 -2
- package/dist/components/features/model-token-rates.d.ts +4 -1
- package/dist/components/features/model-token-rates.d.ts.map +1 -1
- package/dist/components/features/model-token-rates.js +18 -23
- package/dist/components/features/notifications/index.d.ts +2 -2
- package/dist/components/features/notifications/index.d.ts.map +1 -1
- package/dist/components/features/notifications/index.js +2 -1
- package/dist/components/features/notifications/notification-drawer.d.ts.map +1 -1
- package/dist/components/features/notifications/notification-drawer.js +9 -16
- package/dist/components/features/notifications/notification-tile.d.ts +14 -0
- package/dist/components/features/notifications/notification-tile.d.ts.map +1 -1
- package/dist/components/features/notifications/notification-tile.js +36 -1
- package/dist/components/features/policies/policy-summary-cards.js +2 -2
- package/dist/components/features/push-button-selector.d.ts.map +1 -1
- package/dist/components/features/push-button-selector.js +12 -7
- package/dist/components/features/remote-session/remote-desktop-view.d.ts +4 -1
- package/dist/components/features/remote-session/remote-desktop-view.d.ts.map +1 -1
- package/dist/components/features/remote-session/remote-desktop-view.js +14 -10
- package/dist/components/features/waitlist-form.d.ts.map +1 -1
- package/dist/components/features/waitlist-form.js +6 -5
- package/dist/components/help-center-pages/download-apps-page.d.ts.map +1 -1
- package/dist/components/help-center-pages/download-apps-page.js +2 -1
- package/dist/components/help-center-pages/index.cjs +127 -119
- package/dist/components/help-center-pages/trust-center-page.d.ts +4 -1
- package/dist/components/help-center-pages/trust-center-page.d.ts.map +1 -1
- package/dist/components/help-center-pages/trust-center-page.js +3 -2
- package/dist/components/help-center-pages/trust-center-sections.d.ts +4 -1
- package/dist/components/help-center-pages/trust-center-sections.d.ts.map +1 -1
- package/dist/components/help-center-pages/trust-center-sections.js +5 -2
- package/dist/components/index.cjs +70 -112
- package/dist/components/index.d.ts +0 -2
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +0 -2
- package/dist/components/layout/title-block.d.ts.map +1 -1
- package/dist/components/layout/title-block.js +18 -11
- package/dist/components/loading/card-skeleton.d.ts +6 -3
- package/dist/components/loading/card-skeleton.d.ts.map +1 -1
- package/dist/components/loading/card-skeleton.js +7 -27
- package/dist/components/loading/category-card-skeleton.d.ts.map +1 -1
- package/dist/components/loading/category-card-skeleton.js +2 -4
- package/dist/components/loading/category-vendor-selector-skeleton.d.ts +3 -1
- package/dist/components/loading/category-vendor-selector-skeleton.d.ts.map +1 -1
- package/dist/components/loading/category-vendor-selector-skeleton.js +9 -4
- package/dist/components/loading/device-card-skeleton.d.ts +18 -9
- package/dist/components/loading/device-card-skeleton.d.ts.map +1 -1
- package/dist/components/loading/device-card-skeleton.js +30 -21
- package/dist/components/loading/index.d.ts +3 -4
- package/dist/components/loading/index.d.ts.map +1 -1
- package/dist/components/loading/index.js +6 -29
- package/dist/components/loading/loading-region.d.ts +33 -0
- package/dist/components/loading/loading-region.d.ts.map +1 -0
- package/dist/components/loading/loading-region.js +22 -0
- package/dist/components/loading/margin-report-skeleton.d.ts +3 -1
- package/dist/components/loading/margin-report-skeleton.d.ts.map +1 -1
- package/dist/components/loading/margin-report-skeleton.js +70 -61
- package/dist/components/loading/msp-profile-form-skeleton.d.ts +3 -1
- package/dist/components/loading/msp-profile-form-skeleton.d.ts.map +1 -1
- package/dist/components/loading/msp-profile-form-skeleton.js +6 -5
- package/dist/components/loading/organization-card-skeleton.d.ts +3 -1
- package/dist/components/loading/organization-card-skeleton.d.ts.map +1 -1
- package/dist/components/loading/organization-card-skeleton.js +5 -5
- package/dist/components/loading/organization-icon-skeleton.d.ts.map +1 -1
- package/dist/components/loading/organization-icon-skeleton.js +2 -1
- package/dist/components/loading/page-layout-skeleton.d.ts +21 -6
- package/dist/components/loading/page-layout-skeleton.d.ts.map +1 -1
- package/dist/components/loading/page-layout-skeleton.js +283 -266
- package/dist/components/loading/settings-form-skeleton.d.ts +17 -0
- package/dist/components/loading/settings-form-skeleton.d.ts.map +1 -0
- package/dist/components/loading/settings-form-skeleton.js +42 -0
- package/dist/components/loading/unified-skeleton.d.ts +11 -4
- package/dist/components/loading/unified-skeleton.d.ts.map +1 -1
- package/dist/components/loading/unified-skeleton.js +14 -89
- package/dist/components/loading/wizard-layout-skeleton.d.ts +3 -1
- package/dist/components/loading/wizard-layout-skeleton.d.ts.map +1 -1
- package/dist/components/loading/wizard-layout-skeleton.js +3 -2
- package/dist/components/media-carousel.d.ts.map +1 -1
- package/dist/components/media-carousel.js +2 -1
- package/dist/components/meeting-scheduler/booking-form.d.ts.map +1 -1
- package/dist/components/meeting-scheduler/booking-form.js +14 -8
- package/dist/components/meeting-scheduler/context-panel.d.ts.map +1 -1
- package/dist/components/meeting-scheduler/context-panel.js +8 -7
- package/dist/components/meeting-scheduler/directory.d.ts.map +1 -1
- package/dist/components/meeting-scheduler/directory.js +10 -9
- package/dist/components/meeting-scheduler/index.cjs +85 -75
- package/dist/components/meeting-scheduler/index.d.ts.map +1 -1
- package/dist/components/meeting-scheduler/index.js +3 -2
- package/dist/components/meeting-scheduler/modal-header.d.ts.map +1 -1
- package/dist/components/meeting-scheduler/modal-header.js +8 -7
- package/dist/components/meeting-scheduler/slot-picker.d.ts.map +1 -1
- package/dist/components/meeting-scheduler/slot-picker.js +4 -3
- package/dist/components/navigation/app-header.d.ts.map +1 -1
- package/dist/components/navigation/app-header.js +8 -7
- package/dist/components/navigation/index.cjs +19 -17
- package/dist/components/navigation/multi-level-navigation.d.ts.map +1 -1
- package/dist/components/navigation/multi-level-navigation.js +3 -2
- package/dist/components/navigation/navigation-sidebar-item.d.ts.map +1 -1
- package/dist/components/navigation/navigation-sidebar-item.js +3 -2
- package/dist/components/onboarding-guides/index.cjs +19 -17
- package/dist/components/onboarding-guides/onboarding-guides-catalog-skeleton.d.ts +4 -1
- package/dist/components/onboarding-guides/onboarding-guides-catalog-skeleton.d.ts.map +1 -1
- package/dist/components/onboarding-guides/onboarding-guides-catalog-skeleton.js +12 -8
- package/dist/components/product-demo/index.cjs +16 -15
- package/dist/components/product-demo/product-screen.d.ts.map +1 -1
- package/dist/components/product-demo/product-screen.js +4 -4
- package/dist/components/profile/ProfileLoadingSkeleton.d.ts +3 -1
- package/dist/components/profile/ProfileLoadingSkeleton.d.ts.map +1 -1
- package/dist/components/profile/ProfileLoadingSkeleton.js +10 -8
- package/dist/components/related-content/index.cjs +7 -5
- package/dist/components/related-content/related-content-section.d.ts.map +1 -1
- package/dist/components/related-content/related-content-section.js +3 -2
- package/dist/components/shared/delivery/delivery-table.d.ts.map +1 -1
- package/dist/components/shared/delivery/delivery-table.js +8 -7
- package/dist/components/shared/detail-page-skeleton.d.ts +5 -1
- package/dist/components/shared/detail-page-skeleton.d.ts.map +1 -1
- package/dist/components/shared/detail-page-skeleton.js +18 -14
- package/dist/components/shared/dev-section/dev-card-row.d.ts +3 -1
- package/dist/components/shared/dev-section/dev-card-row.d.ts.map +1 -1
- package/dist/components/shared/dev-section/dev-card-row.js +22 -9
- package/dist/components/shared/legal-document/legal-document-page.d.ts.map +1 -1
- package/dist/components/shared/legal-document/legal-document-page.js +8 -7
- package/dist/components/shared/onboarding/onboarding-step-card.d.ts.map +1 -1
- package/dist/components/shared/onboarding/onboarding-step-card.js +3 -2
- package/dist/components/shared/onboarding/onboarding-walkthrough.d.ts.map +1 -1
- package/dist/components/shared/onboarding/onboarding-walkthrough.js +2 -1
- package/dist/components/shared/product-release/index.d.ts +0 -1
- package/dist/components/shared/product-release/index.d.ts.map +1 -1
- package/dist/components/shared/product-release/index.js +1 -3
- package/dist/components/shared/product-release/product-release-card-skeleton.d.ts.map +1 -1
- package/dist/components/shared/product-release/product-release-card-skeleton.js +21 -20
- package/dist/components/shared/product-release/product-releases-view.d.ts.map +1 -1
- package/dist/components/shared/product-release/product-releases-view.js +2 -1
- package/dist/components/shared/roadmap/roadmap-grid-skeleton.d.ts +6 -13
- package/dist/components/shared/roadmap/roadmap-grid-skeleton.d.ts.map +1 -1
- package/dist/components/shared/roadmap/roadmap-grid-skeleton.js +13 -25
- package/dist/components/tickets/help-center-create-form.d.ts +4 -1
- package/dist/components/tickets/help-center-create-form.d.ts.map +1 -1
- package/dist/components/tickets/help-center-create-form.js +38 -26
- package/dist/components/tickets/index.cjs +22 -20
- package/dist/components/tickets/ticket-center.d.ts.map +1 -1
- package/dist/components/tickets/ticket-center.js +13 -10
- package/dist/components/tickets/ticket-detail-drawer.d.ts.map +1 -1
- package/dist/components/tickets/ticket-detail-drawer.js +2 -1
- package/dist/components/ui/admin-form-drawer.d.ts.map +1 -1
- package/dist/components/ui/admin-form-drawer.js +6 -8
- package/dist/components/ui/admin-form-modal.d.ts.map +1 -1
- package/dist/components/ui/admin-form-modal.js +12 -11
- package/dist/components/ui/analyzing-state.d.ts +1 -1
- package/dist/components/ui/analyzing-state.d.ts.map +1 -1
- package/dist/components/ui/analyzing-state.js +4 -10
- package/dist/components/ui/content-loader.d.ts +5 -1
- package/dist/components/ui/content-loader.d.ts.map +1 -1
- package/dist/components/ui/content-loader.js +27 -23
- package/dist/components/ui/dashboard-info-card.d.ts +17 -3
- package/dist/components/ui/dashboard-info-card.d.ts.map +1 -1
- package/dist/components/ui/dashboard-info-card.js +30 -10
- package/dist/components/ui/data-attribution.d.ts +6 -0
- package/dist/components/ui/data-attribution.d.ts.map +1 -1
- package/dist/components/ui/data-attribution.js +12 -1
- package/dist/components/ui/data-table/data-table-body.d.ts +6 -1
- package/dist/components/ui/data-table/data-table-body.d.ts.map +1 -1
- package/dist/components/ui/data-table/data-table-body.js +3 -1
- package/dist/components/ui/data-table/data-table-infinite-footer.d.ts.map +1 -1
- package/dist/components/ui/data-table/data-table-infinite-footer.js +3 -1
- package/dist/components/ui/data-table/data-table-skeleton.d.ts.map +1 -1
- package/dist/components/ui/data-table/data-table-skeleton.js +7 -5
- package/dist/components/ui/feature-card.d.ts.map +1 -1
- package/dist/components/ui/feature-card.js +7 -9
- package/dist/components/ui/file-manager/file-manager-skeleton.d.ts +3 -1
- package/dist/components/ui/file-manager/file-manager-skeleton.d.ts.map +1 -1
- package/dist/components/ui/file-manager/file-manager-skeleton.js +27 -21
- package/dist/components/ui/file-manager/file-manager-table.js +10 -10
- package/dist/components/ui/file-manager/index.cjs +45 -36
- package/dist/components/ui/filter-modal.d.ts.map +1 -1
- package/dist/components/ui/filter-modal.js +5 -5
- package/dist/components/ui/filter-pill-row.d.ts +10 -0
- package/dist/components/ui/filter-pill-row.d.ts.map +1 -1
- package/dist/components/ui/filter-pill-row.js +8 -1
- package/dist/components/ui/index.cjs +19 -28
- package/dist/components/ui/index.d.ts +0 -1
- package/dist/components/ui/index.d.ts.map +1 -1
- package/dist/components/ui/index.js +0 -1
- package/dist/components/ui/layout-hold.d.ts +5 -4
- package/dist/components/ui/layout-hold.d.ts.map +1 -1
- package/dist/components/ui/layout-hold.js +20 -29
- package/dist/components/ui/markdown/base-components.js +1 -1
- package/dist/components/ui/page-actions.d.ts.map +1 -1
- package/dist/components/ui/page-actions.js +6 -8
- package/dist/components/ui/photo-wall.d.ts.map +1 -1
- package/dist/components/ui/photo-wall.js +11 -18
- package/dist/components/ui/query-report-table/query-report-table-skeleton.d.ts +1 -1
- package/dist/components/ui/query-report-table/query-report-table-skeleton.d.ts.map +1 -1
- package/dist/components/ui/query-report-table/query-report-table-skeleton.js +28 -18
- package/dist/components/ui/query-report-table/query-report-table.d.ts +1 -1
- package/dist/components/ui/query-report-table/query-report-table.d.ts.map +1 -1
- package/dist/components/ui/query-report-table/query-report-table.js +3 -1
- package/dist/components/ui/query-report-table/types.d.ts +4 -0
- package/dist/components/ui/query-report-table/types.d.ts.map +1 -1
- package/dist/components/ui/skeleton-surface.d.ts +7 -0
- package/dist/components/ui/skeleton-surface.d.ts.map +1 -0
- package/dist/components/ui/skeleton-surface.js +5 -0
- package/dist/components/ui/table/table-skeleton.d.ts.map +1 -1
- package/dist/components/ui/table/table-skeleton.js +11 -13
- package/dist/components/ui/test-run.d.ts +6 -4
- package/dist/components/ui/test-run.d.ts.map +1 -1
- package/dist/components/ui/test-run.js +9 -5
- package/dist/{devices-WWMXIIHI.cjs → devices-AVRQGB2N.cjs} +17 -15
- package/dist/{embeddable-chat-IJHCGQ24.cjs → embeddable-chat-SNYQSMS7.cjs} +79 -77
- package/dist/index.cjs +24 -31
- package/dist/{knowledge-JZP4RIXB.cjs → knowledge-S3CNISQH.cjs} +17 -15
- package/dist/{logs-WIRYFNUC.cjs → logs-WDLOKDXT.cjs} +24 -22
- package/dist/{policies-X7OJYA7G.cjs → policies-STML7NEZ.cjs} +20 -18
- package/dist/{remote-session-IYT4LWJC.cjs → remote-session-ZKP2W3IS.cjs} +9 -7
- package/dist/{scripts-GRMT2NGW.cjs → scripts-HO53VYGX.cjs} +23 -21
- package/dist/{software-update-G3QOB7RT.cjs → software-update-4VTK7LWQ.cjs} +20 -18
- package/dist/{tickets-board-4MT6ZB4F.cjs → tickets-board-BNW4AYFL.cjs} +11 -10
- package/package.json +1 -1
- package/src/components/categories-cart.tsx +2 -4
- package/src/components/chat/chat-container.tsx +4 -4
- package/src/components/chat/chat-context-picker.tsx +3 -2
- package/src/components/chat/chat-message-row.tsx +6 -7
- package/src/components/chat/chat-message-skeleton.tsx +11 -6
- package/src/components/chat/chat-sidebar-skeleton.tsx +4 -3
- package/src/components/chat/chat-top-navigation.tsx +4 -4
- package/src/components/chat/context-items-list.tsx +9 -3
- package/src/components/chat/entity-cards/admin-content-card-grid.tsx +65 -18
- package/src/components/chat/entity-cards/admin-content-card.tsx +2 -1
- package/src/components/chat/entity-cards/blog-card.tsx +13 -12
- package/src/components/chat/entity-cards/campaign-card-admin.tsx +5 -4
- package/src/components/chat/entity-cards/case-study-card.tsx +19 -18
- package/src/components/chat/entity-cards/chat-ticket-item.tsx +5 -5
- package/src/components/chat/entity-cards/customer-interview-card.tsx +15 -14
- package/src/components/chat/entity-cards/data-room-doc-card.tsx +7 -6
- package/src/components/chat/entity-cards/design-doc-card.tsx +0 -2
- package/src/components/chat/entity-cards/generic-entity-card.tsx +8 -7
- package/src/components/chat/entity-cards/github-activity-card.tsx +11 -10
- package/src/components/chat/entity-cards/hubspot-ticket-card.tsx +16 -15
- package/src/components/chat/entity-cards/index.ts +2 -0
- package/src/components/chat/entity-cards/investor-update-card.tsx +12 -11
- package/src/components/chat/entity-cards/onboarding-guide-card.tsx +21 -22
- package/src/components/chat/entity-cards/program-card.tsx +29 -28
- package/src/components/chat/entity-cards/roadmap-card.tsx +22 -23
- package/src/components/chat/entity-cards/slack-message-card.tsx +12 -11
- package/src/components/chat/guide-welcome.tsx +2 -2
- package/src/components/chat/mingo-archive-list.tsx +2 -1
- package/src/components/chat/mingo-chat-history.tsx +18 -9
- package/src/components/chat/mingo-chat-rail.tsx +2 -1
- package/src/components/chat/mingo-info-card.tsx +6 -5
- package/src/components/chat/mingo-onboarding-card-skeleton.tsx +15 -13
- package/src/components/chat/model-display.tsx +4 -4
- package/src/components/chat/msp-organization-card-skeleton.tsx +5 -5
- package/src/components/chat/quick-action-chip.tsx +17 -14
- package/src/components/chat/utils/compact-card-classes.ts +4 -5
- package/src/components/content-loading-container.tsx +7 -8
- package/src/components/docs/doc-viewer.tsx +3 -2
- package/src/components/docs/skeletons.tsx +64 -63
- package/src/components/embeds/embed-iframe.tsx +16 -9
- package/src/components/embeds/index.ts +2 -2
- package/src/components/embeds/linkedin-embed-client.tsx +7 -6
- package/src/components/embeds/markdown-image.tsx +5 -3
- package/src/components/embeds/og-link-preview.tsx +162 -79
- package/src/components/embeds/reddit-embed-client.tsx +10 -9
- package/src/components/embeds/twitter-embed-client.tsx +10 -9
- package/src/components/faq/faq-section.tsx +13 -6
- package/src/components/features/auth/login-form.tsx +121 -64
- package/src/components/features/auth/sso-providers.tsx +21 -0
- package/src/components/features/board/ticket-card-skeleton.tsx +8 -8
- package/src/components/features/capability-explorer.tsx +61 -30
- package/src/components/features/devices/device-selector/device-selector-skeleton.tsx +9 -3
- package/src/components/features/devices/device-selector/device-selector.tsx +2 -0
- package/src/components/features/devices/device-selector/device-selector.types.ts +2 -0
- package/src/components/features/devices/devices-grid.tsx +4 -1
- package/src/components/features/devices/devices-panel-view.tsx +9 -1
- package/src/components/features/devices/devices-table-columns.tsx +4 -0
- package/src/components/features/logs/logs-table-view.tsx +4 -2
- package/src/components/features/model-token-rates.tsx +27 -24
- package/src/components/features/notifications/index.ts +2 -2
- package/src/components/features/notifications/notification-drawer.tsx +7 -10
- package/src/components/features/notifications/notification-tile.tsx +57 -0
- package/src/components/features/policies/policy-summary-cards.tsx +2 -2
- package/src/components/features/push-button-selector.tsx +20 -11
- package/src/components/features/remote-session/remote-desktop-view.tsx +26 -16
- package/src/components/features/waitlist-form.tsx +6 -5
- package/src/components/help-center-pages/download-apps-page.tsx +3 -2
- package/src/components/help-center-pages/trust-center-page.tsx +6 -2
- package/src/components/help-center-pages/trust-center-sections.tsx +9 -3
- package/src/components/index.ts +0 -2
- package/src/components/layout/title-block.tsx +17 -15
- package/src/components/loading/card-skeleton.tsx +14 -46
- package/src/components/loading/category-card-skeleton.tsx +2 -4
- package/src/components/loading/category-vendor-selector-skeleton.tsx +12 -5
- package/src/components/loading/device-card-skeleton.tsx +58 -51
- package/src/components/loading/index.ts +5 -19
- package/src/components/loading/loading-region.tsx +60 -0
- package/src/components/loading/margin-report-skeleton.tsx +45 -34
- package/src/components/loading/msp-profile-form-skeleton.tsx +9 -6
- package/src/components/loading/organization-card-skeleton.tsx +8 -6
- package/src/components/loading/organization-icon-skeleton.tsx +3 -2
- package/src/components/loading/page-layout-skeleton.tsx +162 -133
- package/src/components/loading/settings-form-skeleton.tsx +52 -0
- package/src/components/loading/unified-skeleton.tsx +26 -71
- package/src/components/loading/wizard-layout-skeleton.tsx +6 -3
- package/src/components/media-carousel.tsx +2 -1
- package/src/components/meeting-scheduler/booking-form.tsx +10 -7
- package/src/components/meeting-scheduler/context-panel.tsx +8 -7
- package/src/components/meeting-scheduler/directory.tsx +10 -9
- package/src/components/meeting-scheduler/index.tsx +5 -4
- package/src/components/meeting-scheduler/modal-header.tsx +8 -7
- package/src/components/meeting-scheduler/slot-picker.tsx +4 -3
- package/src/components/navigation/app-header.tsx +8 -7
- package/src/components/navigation/multi-level-navigation.tsx +3 -2
- package/src/components/navigation/navigation-sidebar-item.tsx +3 -2
- package/src/components/onboarding-guides/onboarding-guides-catalog-skeleton.tsx +17 -10
- package/src/components/product-demo/product-screen.tsx +4 -4
- package/src/components/profile/ProfileLoadingSkeleton.tsx +13 -9
- package/src/components/related-content/related-content-section.tsx +5 -4
- package/src/components/shared/delivery/delivery-table.tsx +8 -7
- package/src/components/shared/detail-page-skeleton.tsx +22 -14
- package/src/components/shared/dev-section/dev-card-row.tsx +23 -10
- package/src/components/shared/legal-document/legal-document-page.tsx +8 -7
- package/src/components/shared/onboarding/onboarding-step-card.tsx +3 -2
- package/src/components/shared/onboarding/onboarding-walkthrough.tsx +2 -1
- package/src/components/shared/product-release/index.ts +0 -1
- package/src/components/shared/product-release/product-release-card-skeleton.tsx +23 -25
- package/src/components/shared/product-release/product-releases-view.tsx +3 -2
- package/src/components/shared/roadmap/roadmap-grid-skeleton.tsx +14 -56
- package/src/components/tickets/help-center-create-form.tsx +23 -12
- package/src/components/tickets/ticket-center.tsx +17 -11
- package/src/components/tickets/ticket-detail-drawer.tsx +3 -2
- package/src/components/ui/admin-form-drawer.tsx +7 -7
- package/src/components/ui/admin-form-modal.tsx +9 -8
- package/src/components/ui/analyzing-state.tsx +5 -8
- package/src/components/ui/content-loader.tsx +31 -23
- package/src/components/ui/dashboard-info-card.tsx +81 -20
- package/src/components/ui/data-attribution.tsx +18 -0
- package/src/components/ui/data-table/data-table-body.tsx +9 -2
- package/src/components/ui/data-table/data-table-infinite-footer.tsx +4 -2
- package/src/components/ui/data-table/data-table-skeleton.tsx +8 -5
- package/src/components/ui/feature-card.tsx +27 -11
- package/src/components/ui/file-manager/file-manager-skeleton.tsx +30 -22
- package/src/components/ui/file-manager/file-manager-table.tsx +10 -10
- package/src/components/ui/filter-modal.tsx +5 -5
- package/src/components/ui/filter-pill-row.tsx +19 -0
- package/src/components/ui/index.ts +0 -1
- package/src/components/ui/layout-hold.tsx +30 -38
- package/src/components/ui/markdown/base-components.tsx +1 -1
- package/src/components/ui/page-actions.tsx +10 -8
- package/src/components/ui/photo-wall.tsx +4 -7
- package/src/components/ui/query-report-table/query-report-table-skeleton.tsx +13 -7
- package/src/components/ui/query-report-table/query-report-table.tsx +2 -0
- package/src/components/ui/query-report-table/types.ts +4 -0
- package/src/components/ui/skeleton-surface.ts +6 -0
- package/src/components/ui/table/table-skeleton.tsx +11 -13
- package/src/components/ui/test-run.tsx +30 -22
- package/src/styles/ods-colors.css +2 -2
- package/dist/chunk-5M5C6UV4.cjs +0 -125
- package/dist/components/dynamic-skeleton.d.ts +0 -108
- package/dist/components/dynamic-skeleton.d.ts.map +0 -1
- package/dist/components/dynamic-skeleton.js +0 -221
- package/dist/components/loading/content-skeleton.d.ts +0 -73
- package/dist/components/loading/content-skeleton.d.ts.map +0 -1
- package/dist/components/loading/content-skeleton.js +0 -217
- package/dist/components/loading/users-grid-skeleton.d.ts +0 -7
- package/dist/components/loading/users-grid-skeleton.d.ts.map +0 -1
- package/dist/components/loading/users-grid-skeleton.js +0 -13
- package/dist/components/shared/product-release/release-detail-skeleton.d.ts +0 -2
- package/dist/components/shared/product-release/release-detail-skeleton.d.ts.map +0 -1
- package/dist/components/shared/product-release/release-detail-skeleton.js +0 -9
- package/dist/components/skeleton.d.ts +0 -4
- package/dist/components/skeleton.d.ts.map +0 -1
- package/dist/components/skeleton.js +0 -9
- package/dist/components/ui/skeleton.d.ts +0 -44
- package/dist/components/ui/skeleton.d.ts.map +0 -1
- package/dist/components/ui/skeleton.js +0 -103
- package/dist/components/vendor-page-skeleton.d.ts +0 -2
- package/dist/components/vendor-page-skeleton.d.ts.map +0 -1
- package/dist/components/vendor-page-skeleton.js +0 -9
- package/src/components/dynamic-skeleton.tsx +0 -365
- package/src/components/loading/content-skeleton.tsx +0 -374
- package/src/components/loading/users-grid-skeleton.tsx +0 -36
- package/src/components/shared/product-release/release-detail-skeleton.tsx +0 -7
- package/src/components/skeleton.tsx +0 -8
- package/src/components/ui/skeleton.tsx +0 -173
- package/src/components/vendor-page-skeleton.tsx +0 -7
|
@@ -4,6 +4,7 @@ import { cloneElement, memo, type ReactElement, type ReactNode, type MouseEvent
|
|
|
4
4
|
import Link from '../../embed-shims/next-link';
|
|
5
5
|
import type { NavigationSidebarItem } from '../../types/navigation';
|
|
6
6
|
import { cn } from '../../utils';
|
|
7
|
+
import { UnifiedSkeleton } from '../loading/unified-skeleton';
|
|
7
8
|
import { NavigationItemBadge } from './navigation-item-badge';
|
|
8
9
|
import { UnreadDot } from './unread-dot';
|
|
9
10
|
|
|
@@ -164,9 +165,9 @@ export function NavigationSidebarItemSkeleton({ showLabel }: { showLabel: boolea
|
|
|
164
165
|
return (
|
|
165
166
|
<div className="flex h-14 w-full items-center justify-start p-[var(--spacing-system-m)]" aria-hidden="true">
|
|
166
167
|
<div className="relative flex flex-shrink-0 items-center justify-center">
|
|
167
|
-
<
|
|
168
|
+
<UnifiedSkeleton className="h-6 w-6 rounded" />
|
|
168
169
|
</div>
|
|
169
|
-
{showLabel && <
|
|
170
|
+
{showLabel && <UnifiedSkeleton className="ml-[var(--spacing-system-xs)] h-4 flex-1 rounded" />}
|
|
170
171
|
</div>
|
|
171
172
|
);
|
|
172
173
|
}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
3
|
import { OnboardingGuideCardSkeleton } from '../chat/entity-cards/onboarding-guide-card';
|
|
4
|
+
import { LoadingRegion } from '../loading/loading-region';
|
|
5
|
+
import { UnifiedSkeleton } from '../loading/unified-skeleton';
|
|
4
6
|
|
|
5
7
|
/**
|
|
6
8
|
* Loading skeleton for `/onboarding-guides` — CHROME-LESS, exactly like the
|
|
@@ -17,28 +19,33 @@ import { OnboardingGuideCardSkeleton } from '../chat/entity-cards/onboarding-gui
|
|
|
17
19
|
* Wrapper mirrors the loaded view's `w-full flex flex-col gap-10`; per-card
|
|
18
20
|
* height matches the loaded catalog card so resolve shifts are zero.
|
|
19
21
|
*/
|
|
20
|
-
export function OnboardingGuidesCatalogSkeleton(
|
|
22
|
+
export function OnboardingGuidesCatalogSkeleton({
|
|
23
|
+
region = true,
|
|
24
|
+
}: {
|
|
25
|
+
/** The loading state announces itself (`LoadingRegion`). `false` inside another loading region. Default `true`. */
|
|
26
|
+
region?: boolean;
|
|
27
|
+
} = {}) {
|
|
21
28
|
return (
|
|
22
|
-
<
|
|
29
|
+
<LoadingRegion label="Loading onboarding guides" announce={region} className="flex w-full flex-col gap-10">
|
|
23
30
|
{/* Search input placeholder — matches `<SearchInput>` h-12 — plus the
|
|
24
31
|
section pill row (~74 px incl. padding), same as the loaded
|
|
25
32
|
preControls block. */}
|
|
26
33
|
<div className="space-y-4">
|
|
27
|
-
<
|
|
34
|
+
<UnifiedSkeleton className="h-12 w-full rounded-md" />
|
|
28
35
|
<div className="flex flex-wrap items-center gap-3 rounded-lg border border-ods-border bg-ods-card p-4">
|
|
29
|
-
<
|
|
36
|
+
<UnifiedSkeleton className="h-4 w-14 rounded" />
|
|
30
37
|
{[0, 1, 2, 3].map(i => (
|
|
31
|
-
<
|
|
38
|
+
<UnifiedSkeleton key={i} className="h-10 w-24 rounded-md" />
|
|
32
39
|
))}
|
|
33
40
|
</div>
|
|
34
41
|
</div>
|
|
35
42
|
<div className="space-y-10">
|
|
36
43
|
{[4, 3, 3].map((cardCount, sectionIdx) => (
|
|
37
44
|
<section key={sectionIdx} className="space-y-4">
|
|
38
|
-
<
|
|
39
|
-
<
|
|
40
|
-
<
|
|
41
|
-
</
|
|
45
|
+
<div className="flex items-center gap-2 tracking-[-0.36px] text-ods-text-primary text-h3">
|
|
46
|
+
<UnifiedSkeleton className="h-6 w-40 rounded" />
|
|
47
|
+
<UnifiedSkeleton className="h-5 w-8 rounded-full" />
|
|
48
|
+
</div>
|
|
42
49
|
<ul className="flex flex-col gap-4">
|
|
43
50
|
{Array.from({ length: cardCount }).map((_, cardIdx) => (
|
|
44
51
|
<li key={cardIdx}>
|
|
@@ -49,6 +56,6 @@ export function OnboardingGuidesCatalogSkeleton() {
|
|
|
49
56
|
</section>
|
|
50
57
|
))}
|
|
51
58
|
</div>
|
|
52
|
-
</
|
|
59
|
+
</LoadingRegion>
|
|
53
60
|
);
|
|
54
61
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
3
|
import { lazy, type LazyExoticComponent, Suspense } from 'react';
|
|
4
|
+
import { UnifiedSkeleton } from '../loading/unified-skeleton';
|
|
4
5
|
import { ProductScreenFrame, type ProductScreenFrameProps } from '../ui/product-screen-frame';
|
|
5
|
-
import { Skeleton } from '../ui/skeleton';
|
|
6
6
|
import { PRODUCT_SCREEN_LOADERS } from './registry';
|
|
7
7
|
import { PRODUCT_SCREEN_KEYS, PRODUCT_SCREEN_LABELS, type ProductScreenKey } from './screen-keys';
|
|
8
8
|
import type { ProductScreenComponent } from './types';
|
|
@@ -59,9 +59,9 @@ export function ProductScreenSkeleton({
|
|
|
59
59
|
className,
|
|
60
60
|
}: Pick<ProductScreenProps, 'compact' | 'height' | 'className'>) {
|
|
61
61
|
return (
|
|
62
|
-
<
|
|
62
|
+
<UnifiedSkeleton
|
|
63
63
|
className={className}
|
|
64
|
-
|
|
64
|
+
height={height ?? (compact ? PRODUCT_SCREEN_COMPACT_HEIGHT : PRODUCT_SCREEN_HEIGHT)}
|
|
65
65
|
/>
|
|
66
66
|
);
|
|
67
67
|
}
|
|
@@ -88,7 +88,7 @@ export function ProductScreen({ screen, compact = false, label, height, designWi
|
|
|
88
88
|
label={label ?? PRODUCT_SCREEN_LABELS[screen]}
|
|
89
89
|
height={frameHeight}
|
|
90
90
|
>
|
|
91
|
-
<Suspense fallback={<
|
|
91
|
+
<Suspense fallback={<UnifiedSkeleton className="h-full w-full" />}>
|
|
92
92
|
<Screen compact={compact} />
|
|
93
93
|
</Suspense>
|
|
94
94
|
</ProductScreenFrame>
|
|
@@ -1,27 +1,31 @@
|
|
|
1
1
|
import { cn } from '../../utils/cn';
|
|
2
|
+
import { LoadingRegion } from '../loading/loading-region';
|
|
3
|
+
import { UnifiedSkeleton } from '../loading/unified-skeleton';
|
|
2
4
|
|
|
3
5
|
interface ProfileLoadingSkeletonProps {
|
|
6
|
+
/** The loading state announces itself (`LoadingRegion`). `false` inside another loading region. Default `true`. */
|
|
7
|
+
region?: boolean;
|
|
4
8
|
className?: string;
|
|
5
9
|
}
|
|
6
10
|
|
|
7
|
-
export function ProfileLoadingSkeleton({ className }: ProfileLoadingSkeletonProps) {
|
|
11
|
+
export function ProfileLoadingSkeleton({ region = true, className }: ProfileLoadingSkeletonProps) {
|
|
8
12
|
return (
|
|
9
|
-
<
|
|
13
|
+
<LoadingRegion label="Loading the profile" announce={region} className={cn('space-y-6', className)}>
|
|
10
14
|
{/* Header skeleton */}
|
|
11
15
|
<div className="flex items-center space-x-4">
|
|
12
|
-
<
|
|
16
|
+
<UnifiedSkeleton className="h-16 w-16 rounded-full" />
|
|
13
17
|
<div className="space-y-2">
|
|
14
|
-
<
|
|
15
|
-
<
|
|
18
|
+
<UnifiedSkeleton className="h-4 w-32 rounded" />
|
|
19
|
+
<UnifiedSkeleton className="h-3 w-24 rounded" />
|
|
16
20
|
</div>
|
|
17
21
|
</div>
|
|
18
22
|
|
|
19
23
|
{/* Content skeleton */}
|
|
20
24
|
<div className="space-y-4">
|
|
21
|
-
<
|
|
22
|
-
<
|
|
23
|
-
<
|
|
25
|
+
<UnifiedSkeleton className="h-4 w-full rounded" />
|
|
26
|
+
<UnifiedSkeleton className="h-4 w-3/4 rounded" />
|
|
27
|
+
<UnifiedSkeleton className="h-4 w-1/2 rounded" />
|
|
24
28
|
</div>
|
|
25
|
-
</
|
|
29
|
+
</LoadingRegion>
|
|
26
30
|
);
|
|
27
31
|
}
|
|
@@ -66,6 +66,7 @@ import { buildSuggestionUrl } from '../../utils/suggestion-url';
|
|
|
66
66
|
import type { ChatCardDispatchExtras } from '../chat/entity-cards/dispatch';
|
|
67
67
|
import { decideNewTab } from '../chat/utils/decide-new-tab';
|
|
68
68
|
import { accentSentenceMarks } from '../layout/page-heading';
|
|
69
|
+
import { LoadingRegion } from '../loading/loading-region';
|
|
69
70
|
import { Pagination } from '../pagination';
|
|
70
71
|
// The per-type card dispatch — one registry entry per content type, each
|
|
71
72
|
// carrying its OWN row type — plus the DEEP card imports that keep this
|
|
@@ -361,7 +362,7 @@ function ContentGroup({
|
|
|
361
362
|
<div key={r.id}>{renderSkeletonForType(type, cardSize, adminCampaignCard)}</div>
|
|
362
363
|
));
|
|
363
364
|
return (
|
|
364
|
-
<
|
|
365
|
+
<LoadingRegion label="Loading related content" className="space-y-4">
|
|
365
366
|
{heading}
|
|
366
367
|
{isListLayout ? (
|
|
367
368
|
<div className="space-y-4">{skeletons}</div>
|
|
@@ -369,7 +370,7 @@ function ContentGroup({
|
|
|
369
370
|
<div className={gridClassFor(columns)}>{skeletons}</div>
|
|
370
371
|
)}
|
|
371
372
|
{groupPagination}
|
|
372
|
-
</
|
|
373
|
+
</LoadingRegion>
|
|
373
374
|
);
|
|
374
375
|
}
|
|
375
376
|
|
|
@@ -652,14 +653,14 @@ export function RelatedContentSection({
|
|
|
652
653
|
if (isLoading) {
|
|
653
654
|
const skeletonType = includeTypes?.[0] ?? entityType ?? 'blog_post_existing';
|
|
654
655
|
return (
|
|
655
|
-
<
|
|
656
|
+
<LoadingRegion label="Loading related content" className="space-y-8">
|
|
656
657
|
<h2 className="text-ods-text-primary text-h2">{accentSentenceMarks(title)}</h2>
|
|
657
658
|
<div className={gridClassFor(columns)}>
|
|
658
659
|
{Array.from({ length: 3 }).map((_, i) => (
|
|
659
660
|
<div key={i}>{renderSkeletonForType(skeletonType, 'default', adminCampaignCard)}</div>
|
|
660
661
|
))}
|
|
661
662
|
</div>
|
|
662
|
-
</
|
|
663
|
+
</LoadingRegion>
|
|
663
664
|
);
|
|
664
665
|
}
|
|
665
666
|
return (
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
import type { DeliveryItem } from '../../../types/delivery';
|
|
21
21
|
import { devSectionAnchorId } from '../../../utils/dev-sections/dev-section-param-keys';
|
|
22
22
|
import { CONTENT_CARD_SKELETON_FRAME_CLASS } from '../../chat/entity-cards/content-card-frame';
|
|
23
|
+
import { UnifiedSkeleton } from '../../loading/unified-skeleton';
|
|
23
24
|
import { DeliveryRow } from './delivery-row';
|
|
24
25
|
|
|
25
26
|
interface DeliveryTableProps {
|
|
@@ -38,26 +39,26 @@ function SkeletonRow() {
|
|
|
38
39
|
<div className="flex w-full min-w-0 flex-1 flex-col gap-[12px] content-md:w-auto content-md:gap-[16px]">
|
|
39
40
|
{/* Title skeleton - responsive */}
|
|
40
41
|
<div className="flex min-h-[24px] items-center">
|
|
41
|
-
<
|
|
42
|
+
<UnifiedSkeleton className="h-[20px] w-full rounded" />
|
|
42
43
|
</div>
|
|
43
44
|
{/* Subtitle skeleton - 1 line */}
|
|
44
45
|
<div className="flex min-h-[20px] items-center">
|
|
45
|
-
<
|
|
46
|
+
<UnifiedSkeleton className="h-[20px] w-1/2 rounded" />
|
|
46
47
|
</div>
|
|
47
48
|
{/* Description skeleton - 3 lines */}
|
|
48
49
|
<div className="flex min-h-[72px] items-center">
|
|
49
50
|
<div className="flex-1 space-y-1">
|
|
50
|
-
<
|
|
51
|
-
<
|
|
52
|
-
<
|
|
51
|
+
<UnifiedSkeleton className="h-[20px] w-full rounded" />
|
|
52
|
+
<UnifiedSkeleton className="h-[20px] w-full rounded" />
|
|
53
|
+
<UnifiedSkeleton className="h-[20px] w-2/3 rounded" />
|
|
53
54
|
</div>
|
|
54
55
|
</div>
|
|
55
56
|
</div>
|
|
56
57
|
|
|
57
58
|
{/* Right: Badge skeleton - two stacked badges */}
|
|
58
59
|
<div className="flex flex-shrink-0 flex-col gap-2 self-start">
|
|
59
|
-
<
|
|
60
|
-
<
|
|
60
|
+
<UnifiedSkeleton className="h-[32px] w-[100px] rounded" />
|
|
61
|
+
<UnifiedSkeleton className="h-[32px] w-[120px] rounded" />
|
|
61
62
|
</div>
|
|
62
63
|
</div>
|
|
63
64
|
</div>
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
3
|
import { PageLayout } from '../layout/page-layout';
|
|
4
|
+
import { LoadingRegion } from '../loading/loading-region';
|
|
5
|
+
import { UnifiedSkeleton } from '../loading/unified-skeleton';
|
|
4
6
|
|
|
5
7
|
export interface DetailPageSkeletonProps {
|
|
6
8
|
metadataColumns?: number; // Number of metadata grid columns (default 4)
|
|
@@ -10,25 +12,31 @@ export interface DetailPageSkeletonProps {
|
|
|
10
12
|
* matches the loaded page's width, padding, and min-height. Default false
|
|
11
13
|
* (self-contained `<PageLayout>` at the hub article width). */
|
|
12
14
|
bare?: boolean;
|
|
15
|
+
/** What is loading, read once by a screen reader. Default "Loading". */
|
|
16
|
+
label?: string;
|
|
17
|
+
/** The loading state announces itself (`LoadingRegion`). `false` inside another loading region. Default `true`. */
|
|
18
|
+
region?: boolean;
|
|
13
19
|
}
|
|
14
20
|
|
|
15
21
|
export function DetailPageSkeleton({
|
|
16
22
|
metadataColumns = 4,
|
|
17
23
|
showImageGallery = true,
|
|
18
24
|
bare = false,
|
|
25
|
+
label = 'Loading',
|
|
26
|
+
region = true,
|
|
19
27
|
}: DetailPageSkeletonProps = {}) {
|
|
20
28
|
const content = (
|
|
21
|
-
<
|
|
29
|
+
<LoadingRegion label={label} announce={region} className="space-y-6 content-md:space-y-10">
|
|
22
30
|
{/* Title Block */}
|
|
23
31
|
<div className="flex w-full flex-col gap-6">
|
|
24
|
-
<
|
|
32
|
+
<UnifiedSkeleton className="h-16 w-full max-w-3xl rounded content-md:h-20" />
|
|
25
33
|
</div>
|
|
26
34
|
|
|
27
35
|
{/* Category Tags Skeleton */}
|
|
28
36
|
<div className="flex w-full flex-wrap gap-2">
|
|
29
|
-
<
|
|
30
|
-
<
|
|
31
|
-
<
|
|
37
|
+
<UnifiedSkeleton className="h-8 w-32 rounded" />
|
|
38
|
+
<UnifiedSkeleton className="h-8 w-28 rounded" />
|
|
39
|
+
<UnifiedSkeleton className="h-8 w-36 rounded" />
|
|
32
40
|
</div>
|
|
33
41
|
|
|
34
42
|
{/* Metadata Grid Skeleton */}
|
|
@@ -40,8 +48,8 @@ export function DetailPageSkeleton({
|
|
|
40
48
|
key={i}
|
|
41
49
|
className="border-b border-ods-border bg-ods-card p-4 last:border-r-0 content-md:border-b-0 content-md:border-r"
|
|
42
50
|
>
|
|
43
|
-
<
|
|
44
|
-
<
|
|
51
|
+
<UnifiedSkeleton className="mb-2 h-6 w-24 rounded" />
|
|
52
|
+
<UnifiedSkeleton className="h-5 w-20 rounded" />
|
|
45
53
|
</div>
|
|
46
54
|
))}
|
|
47
55
|
</div>
|
|
@@ -50,26 +58,26 @@ export function DetailPageSkeleton({
|
|
|
50
58
|
{showImageGallery && (
|
|
51
59
|
<div className="flex w-full gap-6 overflow-x-auto">
|
|
52
60
|
{[1, 2, 3, 4, 5].map(i => (
|
|
53
|
-
<
|
|
61
|
+
<UnifiedSkeleton key={i} className="h-[200px] w-[240px] shrink-0 rounded-md border border-ods-border" />
|
|
54
62
|
))}
|
|
55
63
|
</div>
|
|
56
64
|
)}
|
|
57
65
|
|
|
58
66
|
{/* Featured Image Skeleton (for case studies) */}
|
|
59
|
-
{!showImageGallery && <
|
|
67
|
+
{!showImageGallery && <UnifiedSkeleton className="aspect-[2560/1366] w-full rounded-md" />}
|
|
60
68
|
|
|
61
69
|
{/* Content Sections Skeleton */}
|
|
62
70
|
{[1, 2, 3].map(section => (
|
|
63
71
|
<div key={section} className="space-y-6">
|
|
64
|
-
<
|
|
72
|
+
<UnifiedSkeleton className="h-16 w-64 rounded" />
|
|
65
73
|
<div className="space-y-3">
|
|
66
|
-
<
|
|
67
|
-
<
|
|
68
|
-
<
|
|
74
|
+
<UnifiedSkeleton className="h-6 w-full rounded" />
|
|
75
|
+
<UnifiedSkeleton className="h-6 w-full rounded" />
|
|
76
|
+
<UnifiedSkeleton className="h-6 w-4/5 rounded" />
|
|
69
77
|
</div>
|
|
70
78
|
</div>
|
|
71
79
|
))}
|
|
72
|
-
</
|
|
80
|
+
</LoadingRegion>
|
|
73
81
|
);
|
|
74
82
|
if (bare) return content;
|
|
75
83
|
return (
|
|
@@ -26,6 +26,8 @@
|
|
|
26
26
|
*/
|
|
27
27
|
|
|
28
28
|
import type { ReactNode } from 'react';
|
|
29
|
+
import { LoadingRegion } from '../../loading/loading-region';
|
|
30
|
+
import { UnifiedSkeleton } from '../../loading/unified-skeleton';
|
|
29
31
|
|
|
30
32
|
export interface DevCardRowContentProps {
|
|
31
33
|
title: string;
|
|
@@ -78,22 +80,22 @@ export function DevCardRowSkeleton() {
|
|
|
78
80
|
<div className="flex w-full flex-col items-start justify-between gap-[12px] content-md:flex-row content-md:gap-[16px]">
|
|
79
81
|
<div className="flex w-full min-w-0 flex-1 flex-col gap-[12px] content-md:w-auto content-md:gap-[16px]">
|
|
80
82
|
<div className="flex min-h-[24px] items-center">
|
|
81
|
-
<
|
|
83
|
+
<UnifiedSkeleton className="h-[20px] w-full rounded" />
|
|
82
84
|
</div>
|
|
83
85
|
<div className="flex min-h-[20px] items-center">
|
|
84
|
-
<
|
|
86
|
+
<UnifiedSkeleton className="h-[20px] w-1/2 rounded" />
|
|
85
87
|
</div>
|
|
86
88
|
<div className="flex min-h-[72px] items-center">
|
|
87
89
|
<div className="flex-1 space-y-1">
|
|
88
|
-
<
|
|
89
|
-
<
|
|
90
|
-
<
|
|
90
|
+
<UnifiedSkeleton className="h-[20px] w-full rounded" />
|
|
91
|
+
<UnifiedSkeleton className="h-[20px] w-full rounded" />
|
|
92
|
+
<UnifiedSkeleton className="h-[20px] w-2/3 rounded" />
|
|
91
93
|
</div>
|
|
92
94
|
</div>
|
|
93
95
|
</div>
|
|
94
96
|
<div className="flex flex-shrink-0 flex-col gap-2 self-start">
|
|
95
|
-
<
|
|
96
|
-
<
|
|
97
|
+
<UnifiedSkeleton className="h-[32px] w-[100px] rounded" />
|
|
98
|
+
<UnifiedSkeleton className="h-[32px] w-[120px] rounded" />
|
|
97
99
|
</div>
|
|
98
100
|
</div>
|
|
99
101
|
</div>
|
|
@@ -105,12 +107,23 @@ export function DevCardRowSkeleton() {
|
|
|
105
107
|
* used by every list shell. Both delivery (`delivery-table.tsx`) and
|
|
106
108
|
* tickets (`tickets-list.tsx`) mount this directly.
|
|
107
109
|
*/
|
|
108
|
-
export function DevCardRowSkeletonList({
|
|
110
|
+
export function DevCardRowSkeletonList({
|
|
111
|
+
region = true,
|
|
112
|
+
rows = 5,
|
|
113
|
+
}: {
|
|
114
|
+
/** The loading state announces itself (`LoadingRegion`). `false` inside another loading region. Default `true`. */
|
|
115
|
+
region?: boolean;
|
|
116
|
+
rows?: number;
|
|
117
|
+
}) {
|
|
109
118
|
return (
|
|
110
|
-
<
|
|
119
|
+
<LoadingRegion
|
|
120
|
+
label="Loading"
|
|
121
|
+
announce={region}
|
|
122
|
+
className="w-full overflow-hidden rounded-[6px] border border-ods-border bg-ods-card"
|
|
123
|
+
>
|
|
111
124
|
{Array.from({ length: rows }, (_, i) => (
|
|
112
125
|
<DevCardRowSkeleton key={i} />
|
|
113
126
|
))}
|
|
114
|
-
</
|
|
127
|
+
</LoadingRegion>
|
|
115
128
|
);
|
|
116
129
|
}
|
|
@@ -22,6 +22,7 @@ import Link from '../../../embed-shims/next-link';
|
|
|
22
22
|
import { useRouter } from '../../../embed-shims/next-navigation';
|
|
23
23
|
import { formatLegalDate } from '../../../utils/format';
|
|
24
24
|
import { FaqSection, pageFaqProps, type PageFaqSlot } from '../../faq/faq-section';
|
|
25
|
+
import { UnifiedSkeleton } from '../../loading/unified-skeleton';
|
|
25
26
|
import { PageShell, PageLayout } from '../../ui';
|
|
26
27
|
import { RichMarkdownRenderer } from '../../ui/markdown';
|
|
27
28
|
import { useLegalDocs, type LegalDocument } from './use-legal-docs';
|
|
@@ -161,16 +162,16 @@ export function LegalDocumentPage({
|
|
|
161
162
|
{isLoading ? (
|
|
162
163
|
// Loading skeleton matching Knowledge Hub pattern
|
|
163
164
|
<div className="space-y-6">
|
|
164
|
-
<
|
|
165
|
+
<UnifiedSkeleton className="h-10 w-3/4 rounded-lg" />
|
|
165
166
|
<div className="space-y-4">
|
|
166
|
-
<
|
|
167
|
-
<
|
|
168
|
-
<
|
|
167
|
+
<UnifiedSkeleton className="h-4 w-full rounded" />
|
|
168
|
+
<UnifiedSkeleton className="h-4 w-full rounded" />
|
|
169
|
+
<UnifiedSkeleton className="h-4 w-5/6 rounded" />
|
|
169
170
|
</div>
|
|
170
|
-
<
|
|
171
|
+
<UnifiedSkeleton className="h-32 rounded-lg border border-ods-border" />
|
|
171
172
|
<div className="space-y-4">
|
|
172
|
-
<
|
|
173
|
-
<
|
|
173
|
+
<UnifiedSkeleton className="h-4 w-full rounded" />
|
|
174
|
+
<UnifiedSkeleton className="h-4 w-4/5 rounded" />
|
|
174
175
|
</div>
|
|
175
176
|
</div>
|
|
176
177
|
) : error ? (
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import React from 'react';
|
|
4
4
|
import { cn } from '../../../utils/cn';
|
|
5
|
+
import { UnifiedSkeleton } from '../../loading/unified-skeleton';
|
|
5
6
|
import { Button } from '../../ui/button';
|
|
6
7
|
import { InteractiveCard } from '../../ui/interactive-card';
|
|
7
8
|
import { StatusBadge } from '../../ui/status-badge';
|
|
@@ -81,8 +82,8 @@ export function OnboardingStepCard({
|
|
|
81
82
|
>
|
|
82
83
|
{isCheckingCompletion ? (
|
|
83
84
|
<>
|
|
84
|
-
<
|
|
85
|
-
<
|
|
85
|
+
<UnifiedSkeleton className="h-[32px] w-[100px] rounded-[6px]" />
|
|
86
|
+
<UnifiedSkeleton className="h-[32px] w-[120px] rounded-[6px]" />
|
|
86
87
|
</>
|
|
87
88
|
) : isCompleted ? (
|
|
88
89
|
<>
|
|
@@ -4,6 +4,7 @@ import React, { useRef, useCallback } from 'react';
|
|
|
4
4
|
import { useOnboardingState, type OnboardingStepConfig } from '../../../hooks/ui/use-onboarding-state';
|
|
5
5
|
import { cn } from '../../../utils/cn';
|
|
6
6
|
import { accentSentenceMarks, SECTION_HEADING_CLASS } from '../../layout/page-heading';
|
|
7
|
+
import { UnifiedSkeleton } from '../../loading/unified-skeleton';
|
|
7
8
|
import { Button } from '../../ui/button';
|
|
8
9
|
import { OnboardingStepCard } from './onboarding-step-card';
|
|
9
10
|
|
|
@@ -194,7 +195,7 @@ export function OnboardingWalkthrough({
|
|
|
194
195
|
<h2 className={SECTION_HEADING_CLASS}>{accentSentenceMarks(title)}</h2>
|
|
195
196
|
|
|
196
197
|
{isLoadingCompletion ? (
|
|
197
|
-
<
|
|
198
|
+
<UnifiedSkeleton className="h-[48px] w-full rounded-[6px] md:w-[160px]" />
|
|
198
199
|
) : isAllComplete ? (
|
|
199
200
|
<Button variant="accent" onClick={handleDismiss} className="w-full md:w-auto">
|
|
200
201
|
Close Onboarding
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { cn } from '../../../utils/cn';
|
|
4
4
|
import { CONTENT_CARD_SKELETON_FRAME_CLASS } from '../../chat/entity-cards/content-card-frame';
|
|
5
|
+
import { UnifiedSkeleton } from '../../loading/unified-skeleton';
|
|
5
6
|
|
|
6
7
|
export interface ProductReleaseCardSkeletonProps {
|
|
7
8
|
/** Additional CSS classes */
|
|
@@ -23,8 +24,8 @@ export function ProductReleaseCardSkeleton({ className, size = 'lg' }: ProductRe
|
|
|
23
24
|
// skeleton's shape matches exactly with zero load-to-resolve reflow.
|
|
24
25
|
if (size === 'lg') {
|
|
25
26
|
return (
|
|
26
|
-
<div className={cn(CONTENT_CARD_SKELETON_FRAME_CLASS, 'flex flex-col gap-4 p-6',
|
|
27
|
-
{/* HERO: placeholders are `
|
|
27
|
+
<div className={cn(CONTENT_CARD_SKELETON_FRAME_CLASS, 'flex flex-col gap-4 p-6', className)}>
|
|
28
|
+
{/* HERO: placeholders are `UnifiedSkeleton` bars on the page background.
|
|
28
29
|
|
|
29
30
|
CRITICAL: title + summary use the SAME min-h containers as
|
|
30
31
|
the loaded card so total card height is byte-identical
|
|
@@ -32,30 +33,27 @@ export function ProductReleaseCardSkeleton({ className, size = 'lg' }: ProductRe
|
|
|
32
33
|
individual placeholder heights underrun the loaded card's
|
|
33
34
|
min-h reservations and the page jumps on resolve. */}
|
|
34
35
|
<div className="flex flex-col gap-4 content-md:flex-row content-md:gap-6">
|
|
35
|
-
<
|
|
36
|
+
<UnifiedSkeleton className="aspect-[1200/630] w-full flex-shrink-0 rounded-lg content-md:w-[256px]" />
|
|
36
37
|
<div className="flex min-w-0 flex-1 flex-col">
|
|
37
38
|
{/* Version pill — mirrors `flex items-center gap-3 mb-3` in
|
|
38
39
|
the loaded card. The loaded `<span text-lg>` renders at
|
|
39
40
|
line-height 28 px (Tailwind text-lg = 18 px / 28 px LH);
|
|
40
41
|
placeholder uses `h-7` (28 px) to match exactly. */}
|
|
41
42
|
<div className="mb-3 flex items-center gap-3">
|
|
42
|
-
<
|
|
43
|
+
<UnifiedSkeleton className="h-7 w-20 rounded" />
|
|
43
44
|
</div>
|
|
44
45
|
{/* Title container — SAME min-h as the loaded card so the
|
|
45
46
|
card height contributed by this region matches exactly. */}
|
|
46
47
|
<div className="mb-3 flex min-h-[60px] flex-col justify-start gap-1.5 content-md:min-h-[72px]">
|
|
47
|
-
<
|
|
48
|
-
<
|
|
48
|
+
<UnifiedSkeleton className="h-[25px] w-3/4 rounded content-md:h-[30px]" />
|
|
49
|
+
<UnifiedSkeleton className="h-[25px] w-1/2 rounded content-md:h-[30px]" />
|
|
49
50
|
</div>
|
|
50
51
|
{/* Summary container — SAME min-h as the loaded card. The
|
|
51
|
-
3 placeholder lines mirror the rendered 3-line clamp
|
|
52
|
-
`bg-ods-border/70` keeps summary placeholders slightly
|
|
53
|
-
dimmer than title placeholders (primary vs secondary
|
|
54
|
-
text hierarchy). */}
|
|
52
|
+
3 placeholder lines mirror the rendered 3-line clamp. */}
|
|
55
53
|
<div className="flex min-h-[68px] flex-col justify-start gap-2 content-md:min-h-[78px]">
|
|
56
|
-
<
|
|
57
|
-
<
|
|
58
|
-
<
|
|
54
|
+
<UnifiedSkeleton className="h-3 w-full rounded" />
|
|
55
|
+
<UnifiedSkeleton className="h-3 w-11/12 rounded" />
|
|
56
|
+
<UnifiedSkeleton className="h-3 w-5/6 rounded" />
|
|
59
57
|
</div>
|
|
60
58
|
</div>
|
|
61
59
|
</div>
|
|
@@ -65,7 +63,7 @@ export function ProductReleaseCardSkeleton({ className, size = 'lg' }: ProductRe
|
|
|
65
63
|
line-height (20 px) so total height is consistent with the
|
|
66
64
|
loaded `border-t pt-3 + text content` (~32-33 px). */}
|
|
67
65
|
<div className="border-t border-ods-border pt-3">
|
|
68
|
-
<
|
|
66
|
+
<UnifiedSkeleton className="h-5 w-2/3 rounded" />
|
|
69
67
|
</div>
|
|
70
68
|
|
|
71
69
|
{/* METADATA GRID: 4-cell placeholder, the loaded cells' own boxes (no surface of
|
|
@@ -77,17 +75,17 @@ export function ProductReleaseCardSkeleton({ className, size = 'lg' }: ProductRe
|
|
|
77
75
|
className="flex flex-col gap-3 border-b border-ods-border p-4 content-md:border-b-0 content-md:border-r"
|
|
78
76
|
>
|
|
79
77
|
<div className="flex flex-col gap-2">
|
|
80
|
-
<
|
|
81
|
-
<
|
|
78
|
+
<UnifiedSkeleton className="h-7 w-24 rounded" />
|
|
79
|
+
<UnifiedSkeleton className="h-4 w-16 rounded" />
|
|
82
80
|
</div>
|
|
83
81
|
</div>
|
|
84
82
|
))}
|
|
85
83
|
{/* Author cell */}
|
|
86
84
|
<div className="flex items-center gap-3 p-4">
|
|
87
|
-
<
|
|
85
|
+
<UnifiedSkeleton className="h-10 w-10 shrink-0 rounded-full" />
|
|
88
86
|
<div className="flex min-w-0 flex-1 flex-col gap-2">
|
|
89
|
-
<
|
|
90
|
-
<
|
|
87
|
+
<UnifiedSkeleton className="h-5 w-3/4 rounded" />
|
|
88
|
+
<UnifiedSkeleton className="h-4 w-1/2 rounded" />
|
|
91
89
|
</div>
|
|
92
90
|
</div>
|
|
93
91
|
</div>
|
|
@@ -107,12 +105,12 @@ export function ProductReleaseCardSkeleton({ className, size = 'lg' }: ProductRe
|
|
|
107
105
|
return (
|
|
108
106
|
<span
|
|
109
107
|
className={cn(
|
|
110
|
-
'my-1.5 flex w-full
|
|
108
|
+
'my-1.5 flex w-full items-start gap-3',
|
|
111
109
|
'rounded-lg border border-ods-border bg-ods-card p-2',
|
|
112
110
|
className,
|
|
113
111
|
)}
|
|
114
112
|
>
|
|
115
|
-
<span className="block aspect-square h-14 w-14 shrink-0 self-start rounded-md
|
|
113
|
+
<UnifiedSkeleton as="span" className="block aspect-square h-14 w-14 shrink-0 self-start rounded-md" />
|
|
116
114
|
{/* Text column: 3 rows with FIXED heights matching the loaded
|
|
117
115
|
card (h-5 title, h-4 + h-4 meta + summary). Skeleton bars
|
|
118
116
|
sit centered inside each row container so a placeholder
|
|
@@ -120,14 +118,14 @@ export function ProductReleaseCardSkeleton({ className, size = 'lg' }: ProductRe
|
|
|
120
118
|
on resolve. */}
|
|
121
119
|
<span className="flex min-h-14 min-w-0 flex-1 flex-col gap-0.5">
|
|
122
120
|
<span className="flex h-5 min-w-0 items-center gap-2">
|
|
123
|
-
<span className="h-3.5 w-3/5 rounded
|
|
124
|
-
<span className="h-4 w-12 shrink-0 rounded
|
|
121
|
+
<UnifiedSkeleton as="span" className="h-3.5 w-3/5 rounded" />
|
|
122
|
+
<UnifiedSkeleton as="span" className="h-4 w-12 shrink-0 rounded" />
|
|
125
123
|
</span>
|
|
126
124
|
<span className="flex h-4 min-w-0 items-center">
|
|
127
|
-
<span className="h-3 w-1/3 rounded
|
|
125
|
+
<UnifiedSkeleton as="span" className="h-3 w-1/3 rounded" />
|
|
128
126
|
</span>
|
|
129
127
|
<span className="flex h-4 min-w-0 items-center">
|
|
130
|
-
<span className="h-3 w-11/12 rounded
|
|
128
|
+
<UnifiedSkeleton as="span" className="h-3 w-11/12 rounded" />
|
|
131
129
|
</span>
|
|
132
130
|
</span>
|
|
133
131
|
</span>
|
|
@@ -33,6 +33,7 @@ import { useEntityCardLink } from '../../chat/entity-cards/use-entity-card-link'
|
|
|
33
33
|
import { isModifierClick } from '../../chat/utils/chat-nav-resolution';
|
|
34
34
|
import { executeNavigationImperative } from '../../chat/utils/execute-navigation';
|
|
35
35
|
import { ListEmptyState } from '../../list-empty-state';
|
|
36
|
+
import { LoadingRegion } from '../../loading/loading-region';
|
|
36
37
|
import { PersistentPaginationWrapper } from '../../persistent-pagination';
|
|
37
38
|
import { LoadError } from '../../ui/error-state';
|
|
38
39
|
import { ProductReleaseCard, type ProductReleaseCardProps } from './product-release-card';
|
|
@@ -209,7 +210,7 @@ export function ProductReleasesView({
|
|
|
209
210
|
<>
|
|
210
211
|
{/* ALWAYS render `itemsPerPage` slots — visibility toggles so the
|
|
211
212
|
list height is stable across loading ↔ loaded. */}
|
|
212
|
-
<
|
|
213
|
+
<LoadingRegion label="Loading releases" announce={isLoading} className="flex flex-col gap-6">
|
|
213
214
|
{Array.from({ length: itemsPerPage }).map((_, i) => {
|
|
214
215
|
const release = releases[i];
|
|
215
216
|
const hasData = !!release;
|
|
@@ -228,7 +229,7 @@ export function ProductReleasesView({
|
|
|
228
229
|
</div>
|
|
229
230
|
);
|
|
230
231
|
})}
|
|
231
|
-
</
|
|
232
|
+
</LoadingRegion>
|
|
232
233
|
|
|
233
234
|
{/* Pagination — always present at the bottom for consistent spacing. */}
|
|
234
235
|
<div className="mt-6 flex justify-center content-md:mt-8">
|