@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
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { cn } from '../../utils/cn';
|
|
2
|
-
import {
|
|
2
|
+
import { LoadingRegion } from './loading-region';
|
|
3
|
+
import { UnifiedSkeleton, TextSkeleton, MediaSkeleton, InteractiveSkeleton } from './unified-skeleton';
|
|
3
4
|
|
|
4
5
|
interface CardSkeletonProps {
|
|
5
6
|
className?: string;
|
|
6
7
|
/**
|
|
7
8
|
* Card layout variant
|
|
8
9
|
*/
|
|
9
|
-
variant?: 'vendor' | 'blog' | '
|
|
10
|
+
variant?: 'vendor' | 'blog' | 'alternative';
|
|
10
11
|
/**
|
|
11
12
|
* Show action buttons area
|
|
12
13
|
*/
|
|
@@ -24,9 +25,10 @@ interface CardSkeletonProps {
|
|
|
24
25
|
*
|
|
25
26
|
* Supports different card types used across the application:
|
|
26
27
|
* - vendor: Vendor cards with logo, title, description, and actions
|
|
27
|
-
* - blog: Blog post cards with image, title, summary, and metadata
|
|
28
|
-
* - category: Category cards with icon, title, and description
|
|
28
|
+
* - blog: Blog post cards with image, title, summary, and metadata
|
|
29
29
|
* - alternative: Alternative vendor cards in comparison lists
|
|
30
|
+
*
|
|
31
|
+
* A category card's loading box is `CategoryCardSkeleton`.
|
|
30
32
|
*/
|
|
31
33
|
export function CardSkeleton({
|
|
32
34
|
className,
|
|
@@ -39,7 +41,6 @@ export function CardSkeleton({
|
|
|
39
41
|
const cardContent = {
|
|
40
42
|
vendor: <VendorCardContent showMetadata={showMetadata} />,
|
|
41
43
|
blog: <BlogCardContent showActions={showActions} showMetadata={showMetadata} />,
|
|
42
|
-
category: <CategoryCardContent />,
|
|
43
44
|
alternative: <AlternativeCardContent showActions={showActions} />,
|
|
44
45
|
};
|
|
45
46
|
|
|
@@ -53,8 +54,6 @@ export function CardSkeleton({
|
|
|
53
54
|
variant === 'vendor' && 'flex h-full flex-col',
|
|
54
55
|
className,
|
|
55
56
|
)}
|
|
56
|
-
role="status"
|
|
57
|
-
aria-label={`Loading ${variant} card`}
|
|
58
57
|
{...props}
|
|
59
58
|
>
|
|
60
59
|
{cardContent[variant]}
|
|
@@ -181,7 +180,7 @@ function BlogCardContent({ showActions, showMetadata }: { showActions: boolean;
|
|
|
181
180
|
<div className="flex shrink-0 items-center gap-3 text-ods-text-muted">
|
|
182
181
|
<TextSkeleton.Caption className="w-12" />
|
|
183
182
|
{/* Separator dot */}
|
|
184
|
-
<
|
|
183
|
+
<UnifiedSkeleton variant="circular" className="h-1 w-1" />
|
|
185
184
|
<TextSkeleton.Caption className="w-16" />
|
|
186
185
|
</div>
|
|
187
186
|
</div>
|
|
@@ -192,39 +191,6 @@ function BlogCardContent({ showActions, showMetadata }: { showActions: boolean;
|
|
|
192
191
|
);
|
|
193
192
|
}
|
|
194
193
|
|
|
195
|
-
/**
|
|
196
|
-
* Category card skeleton content
|
|
197
|
-
*/
|
|
198
|
-
function CategoryCardContent() {
|
|
199
|
-
return (
|
|
200
|
-
<div className="space-y-4 p-4 content-md:p-6">
|
|
201
|
-
{/* Icon grid */}
|
|
202
|
-
<div className="flex gap-2 content-md:gap-3">
|
|
203
|
-
{Array.from({ length: 6 }).map((_, index) => (
|
|
204
|
-
<MediaSkeleton.Icon key={index} size="lg" className="flex-shrink-0" />
|
|
205
|
-
))}
|
|
206
|
-
</div>
|
|
207
|
-
|
|
208
|
-
{/* Content */}
|
|
209
|
-
<div className="space-y-2">
|
|
210
|
-
<div className="space-y-1">
|
|
211
|
-
<TextSkeleton.Subheading className="w-3/4" />
|
|
212
|
-
<TextSkeleton.Caption className="w-1/2" />
|
|
213
|
-
</div>
|
|
214
|
-
|
|
215
|
-
<div className="flex items-start justify-between gap-4 content-md:items-end content-md:gap-6">
|
|
216
|
-
<div className="flex-1 space-y-2">
|
|
217
|
-
<TextSkeleton.Body className="w-full" />
|
|
218
|
-
<TextSkeleton.Body className="w-2/3" />
|
|
219
|
-
</div>
|
|
220
|
-
|
|
221
|
-
<InteractiveSkeleton.Button className="h-10 w-10 flex-shrink-0 content-md:h-12 content-md:w-12" />
|
|
222
|
-
</div>
|
|
223
|
-
</div>
|
|
224
|
-
</div>
|
|
225
|
-
);
|
|
226
|
-
}
|
|
227
|
-
|
|
228
194
|
/**
|
|
229
195
|
* Alternative card skeleton content (for vendor alternatives/comparisons)
|
|
230
196
|
*/
|
|
@@ -258,34 +224,36 @@ function AlternativeCardContent({ showActions }: { showActions: boolean }) {
|
|
|
258
224
|
* Grid of card skeletons for loading lists
|
|
259
225
|
*/
|
|
260
226
|
export function CardSkeletonGrid({
|
|
227
|
+
region = true,
|
|
261
228
|
count = 6,
|
|
262
229
|
variant = 'vendor',
|
|
263
230
|
className,
|
|
264
231
|
containerClassName,
|
|
265
232
|
...props
|
|
266
233
|
}: {
|
|
234
|
+
/** The loading state announces itself (`LoadingRegion`). `false` inside another loading region. Default `true`. */
|
|
235
|
+
region?: boolean;
|
|
267
236
|
count?: number;
|
|
268
237
|
variant?: CardSkeletonProps['variant'];
|
|
269
238
|
className?: string;
|
|
270
239
|
containerClassName?: string;
|
|
271
240
|
} & Omit<CardSkeletonProps, 'variant'>) {
|
|
272
241
|
return (
|
|
273
|
-
<
|
|
242
|
+
<LoadingRegion
|
|
243
|
+
label={`Loading ${variant} cards`}
|
|
244
|
+
announce={region}
|
|
274
245
|
className={cn(
|
|
275
246
|
'grid gap-4 content-md:gap-6',
|
|
276
247
|
// Responsive grid based on card type
|
|
277
248
|
variant === 'vendor' && 'grid-cols-1 content-md:grid-cols-2 content-lg:grid-cols-3',
|
|
278
249
|
variant === 'blog' && 'grid-cols-1 content-md:grid-cols-2',
|
|
279
|
-
variant === 'category' && 'grid-cols-1 content-md:grid-cols-2 content-lg:grid-cols-4',
|
|
280
250
|
variant === 'alternative' && 'grid-cols-1',
|
|
281
251
|
className,
|
|
282
252
|
)}
|
|
283
|
-
role="status"
|
|
284
|
-
aria-label={`Loading ${count} ${variant} cards`}
|
|
285
253
|
>
|
|
286
254
|
{Array.from({ length: count }, (_, index) => (
|
|
287
255
|
<CardSkeleton key={index} variant={variant} containerClassName={containerClassName} {...props} />
|
|
288
256
|
))}
|
|
289
|
-
</
|
|
257
|
+
</LoadingRegion>
|
|
290
258
|
);
|
|
291
259
|
}
|
|
@@ -12,13 +12,11 @@ export function CategoryCardSkeleton({ className }: CategoryCardSkeletonProps) {
|
|
|
12
12
|
'box-border flex min-w-0 flex-col rounded-[12px] border border-ods-border bg-ods-card p-8',
|
|
13
13
|
className,
|
|
14
14
|
)}
|
|
15
|
-
role="status"
|
|
16
|
-
aria-label="Loading category card"
|
|
17
15
|
>
|
|
18
16
|
{/* Icons row */}
|
|
19
17
|
<div className="mb-8 flex items-center justify-center gap-6">
|
|
20
18
|
{Array.from({ length: 10 }).map((_, i) => (
|
|
21
|
-
<UnifiedSkeleton key={i} variant="circular" className="h-10 w-10 flex-shrink-0"
|
|
19
|
+
<UnifiedSkeleton key={i} variant="circular" className="h-10 w-10 flex-shrink-0" />
|
|
22
20
|
))}
|
|
23
21
|
</div>
|
|
24
22
|
|
|
@@ -31,7 +29,7 @@ export function CategoryCardSkeleton({ className }: CategoryCardSkeletonProps) {
|
|
|
31
29
|
|
|
32
30
|
{/* Arrow button placeholder */}
|
|
33
31
|
<div className="mt-4 flex justify-end">
|
|
34
|
-
<UnifiedSkeleton className="h-12 w-12 rounded-[6px]"
|
|
32
|
+
<UnifiedSkeleton className="h-12 w-12 rounded-[6px]" />
|
|
35
33
|
</div>
|
|
36
34
|
</article>
|
|
37
35
|
);
|
|
@@ -1,18 +1,25 @@
|
|
|
1
1
|
import { cn } from '../../utils/cn';
|
|
2
|
+
import { LoadingRegion } from './loading-region';
|
|
2
3
|
import { TextSkeleton, UnifiedSkeleton } from './unified-skeleton';
|
|
3
4
|
|
|
4
5
|
interface CategoryVendorSelectorSkeletonProps {
|
|
6
|
+
/** The loading state announces itself (`LoadingRegion`). `false` inside another loading region. Default `true`. */
|
|
7
|
+
region?: boolean;
|
|
5
8
|
/** number of subcategory blocks to render */
|
|
6
9
|
subcategories?: number;
|
|
7
10
|
className?: string;
|
|
8
11
|
}
|
|
9
12
|
|
|
10
|
-
export function CategoryVendorSelectorSkeleton({
|
|
13
|
+
export function CategoryVendorSelectorSkeleton({
|
|
14
|
+
region = true,
|
|
15
|
+
subcategories = 3,
|
|
16
|
+
className,
|
|
17
|
+
}: CategoryVendorSelectorSkeletonProps) {
|
|
11
18
|
return (
|
|
12
|
-
<
|
|
19
|
+
<LoadingRegion
|
|
20
|
+
label="Loading categories"
|
|
21
|
+
announce={region}
|
|
13
22
|
className={cn('rounded-lg border border-ods-border bg-ods-card p-6', className)}
|
|
14
|
-
role="status"
|
|
15
|
-
aria-label="Loading category section"
|
|
16
23
|
>
|
|
17
24
|
{/* Header */}
|
|
18
25
|
<div className="mb-6 max-w-xl space-y-2">
|
|
@@ -35,6 +42,6 @@ export function CategoryVendorSelectorSkeleton({ subcategories = 3, className }:
|
|
|
35
42
|
</div>
|
|
36
43
|
))}
|
|
37
44
|
</div>
|
|
38
|
-
</
|
|
45
|
+
</LoadingRegion>
|
|
39
46
|
);
|
|
40
47
|
}
|
|
@@ -1,68 +1,66 @@
|
|
|
1
1
|
import { cn } from '../../utils/cn';
|
|
2
|
-
import {
|
|
2
|
+
import { LoadingRegion } from './loading-region';
|
|
3
|
+
import { UnifiedSkeleton } from './unified-skeleton';
|
|
3
4
|
|
|
4
5
|
export interface DeviceCardSkeletonProps {
|
|
5
6
|
/**
|
|
6
7
|
* Additional CSS classes
|
|
7
8
|
*/
|
|
8
9
|
className?: string;
|
|
10
|
+
/** Hold `DeviceCard`'s "more" button (its `actions.moreButton`). Default `true`. */
|
|
11
|
+
moreButton?: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Hold the box of `DeviceCard`'s `actions.detailsButton.component` with these size classes
|
|
14
|
+
* (e.g. `'h-12 w-[88px]'`). Omit when the card has no details button.
|
|
15
|
+
*/
|
|
16
|
+
detailsButtonClassName?: string;
|
|
9
17
|
}
|
|
10
18
|
|
|
11
19
|
/**
|
|
12
|
-
* DeviceCardSkeleton
|
|
20
|
+
* DeviceCardSkeleton: the loading box of `DeviceCard` (`ui/device-card.tsx`), box for box:
|
|
21
|
+
* the same container classes, then
|
|
22
|
+
* - Row 1: the bordered device-icon box, the OS icon and name line (`text-h4`) over the
|
|
23
|
+
* organization line (`text-h6`), the bordered "more" button (`moreButton`) and/or the details
|
|
24
|
+
* button's box (`detailsButtonClassName`);
|
|
25
|
+
* - Row 2: the status tag (`Tag`'s `h-8`) and the "Last seen" line (`text-h6`).
|
|
13
26
|
*
|
|
14
|
-
*
|
|
15
|
-
* - Row 1: Device icon + Device name + More button
|
|
16
|
-
* - Row 2: OS badge + Organization icon + Organization name
|
|
17
|
-
* - Row 3: Status badge + Last seen
|
|
18
|
-
*
|
|
19
|
-
* Prevents layout jumps by matching exact dimensions.
|
|
27
|
+
* The loaded card replaces it with no movement.
|
|
20
28
|
*/
|
|
21
|
-
export function DeviceCardSkeleton({ className }: DeviceCardSkeletonProps) {
|
|
29
|
+
export function DeviceCardSkeleton({ className, moreButton = true, detailsButtonClassName }: DeviceCardSkeletonProps) {
|
|
22
30
|
return (
|
|
23
31
|
<div
|
|
24
|
-
className={cn(
|
|
25
|
-
|
|
26
|
-
|
|
32
|
+
className={cn(
|
|
33
|
+
'overflow-clip rounded-[6px] border border-ods-border bg-ods-card',
|
|
34
|
+
'flex flex-col gap-4 p-4',
|
|
35
|
+
className,
|
|
36
|
+
)}
|
|
27
37
|
>
|
|
28
|
-
{/* Row 1:
|
|
29
|
-
<div className="flex items-center gap-4
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
<div className="h-4 w-4 animate-pulse rounded bg-ods-border" />
|
|
38
|
+
{/* Row 1: device icon | name over organization | more button */}
|
|
39
|
+
<div className="flex w-full items-center gap-4">
|
|
40
|
+
<div className="flex shrink-0 items-center justify-center rounded-[6px] border border-ods-border p-2">
|
|
41
|
+
<UnifiedSkeleton className="size-4 rounded" />
|
|
33
42
|
</div>
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
<div className="h-12 w-12 flex-shrink-0 animate-pulse rounded-[6px] bg-ods-border" />
|
|
42
|
-
</div>
|
|
43
|
-
|
|
44
|
-
{/* Row 2: OS badge + Organization */}
|
|
45
|
-
<div className="flex items-center gap-4 px-4 py-2">
|
|
46
|
-
{/* OS badge */}
|
|
47
|
-
<div className="h-6 w-24 flex-shrink-0 animate-pulse rounded bg-ods-border" />
|
|
48
|
-
|
|
49
|
-
{/* Organization icon */}
|
|
50
|
-
<OrganizationIconSkeleton size="sm" />
|
|
51
|
-
|
|
52
|
-
{/* Organization name */}
|
|
53
|
-
<div className="min-w-0 flex-1">
|
|
54
|
-
<div className="h-5 w-1/2 animate-pulse rounded bg-ods-border" />
|
|
43
|
+
<div className="flex min-w-0 flex-1 flex-col justify-center">
|
|
44
|
+
{/* OS icon (16px) + name, one `text-h4` line */}
|
|
45
|
+
<div className="flex items-center gap-1 text-h4">
|
|
46
|
+
<UnifiedSkeleton className="size-4 shrink-0 rounded" />
|
|
47
|
+
<UnifiedSkeleton className="h-[1lh] w-3/4 rounded" />
|
|
48
|
+
</div>
|
|
49
|
+
<UnifiedSkeleton className="h-[1lh] w-1/2 rounded text-h6" />
|
|
55
50
|
</div>
|
|
51
|
+
{moreButton && (
|
|
52
|
+
<div className="flex shrink-0 items-center justify-center rounded-[6px] border border-ods-border p-3">
|
|
53
|
+
<UnifiedSkeleton className="size-6 rounded" />
|
|
54
|
+
</div>
|
|
55
|
+
)}
|
|
56
|
+
{detailsButtonClassName && <UnifiedSkeleton className={cn('shrink-0 rounded-[6px]', detailsButtonClassName)} />}
|
|
56
57
|
</div>
|
|
57
58
|
|
|
58
|
-
{/* Row
|
|
59
|
-
<div className="flex items-center gap-
|
|
60
|
-
|
|
61
|
-
<div className="
|
|
62
|
-
|
|
63
|
-
{/* Last seen */}
|
|
64
|
-
<div className="flex-1">
|
|
65
|
-
<div className="h-5 w-40 animate-pulse rounded bg-ods-border" />
|
|
59
|
+
{/* Row 2: status tag | last seen */}
|
|
60
|
+
<div className="flex w-full items-center gap-2">
|
|
61
|
+
<UnifiedSkeleton className="h-8 w-20 shrink-0 rounded-md" />
|
|
62
|
+
<div className="min-w-0 flex-1 text-h6">
|
|
63
|
+
<UnifiedSkeleton className="h-[1lh] w-40 max-w-full rounded" />
|
|
66
64
|
</div>
|
|
67
65
|
</div>
|
|
68
66
|
</div>
|
|
@@ -78,16 +76,25 @@ export function DeviceCardSkeleton({ className }: DeviceCardSkeletonProps) {
|
|
|
78
76
|
* - Desktop (lg): 3 columns
|
|
79
77
|
* - Large (xl): 4 columns
|
|
80
78
|
*/
|
|
81
|
-
export function DeviceCardSkeletonGrid({
|
|
79
|
+
export function DeviceCardSkeletonGrid({
|
|
80
|
+
region = true,
|
|
81
|
+
count = 12,
|
|
82
|
+
className,
|
|
83
|
+
}: {
|
|
84
|
+
/** The loading state announces itself (`LoadingRegion`). `false` inside another loading region. Default `true`. */
|
|
85
|
+
region?: boolean;
|
|
86
|
+
count?: number;
|
|
87
|
+
className?: string;
|
|
88
|
+
}) {
|
|
82
89
|
return (
|
|
83
|
-
<
|
|
90
|
+
<LoadingRegion
|
|
91
|
+
label="Loading devices"
|
|
92
|
+
announce={region}
|
|
84
93
|
className={cn('grid grid-cols-1 gap-4 content-md:grid-cols-2 content-lg:grid-cols-4', className)}
|
|
85
|
-
role="status"
|
|
86
|
-
aria-label={`Loading ${count} device cards`}
|
|
87
94
|
>
|
|
88
95
|
{Array.from({ length: count }, (_, index) => (
|
|
89
96
|
<DeviceCardSkeleton key={index} />
|
|
90
97
|
))}
|
|
91
|
-
</
|
|
98
|
+
</LoadingRegion>
|
|
92
99
|
);
|
|
93
100
|
}
|
|
@@ -7,6 +7,7 @@ export {
|
|
|
7
7
|
SearchContainerSkeleton,
|
|
8
8
|
CategorySidebarSkeleton,
|
|
9
9
|
BreadcrumbSkeleton,
|
|
10
|
+
BreadcrumbLinkSkeleton,
|
|
10
11
|
ResultsHeaderSkeleton,
|
|
11
12
|
TwoColumnLayoutSkeleton,
|
|
12
13
|
ArticleLayoutSkeleton,
|
|
@@ -26,25 +27,13 @@ export { UnifiedSkeleton, TextSkeleton, MediaSkeleton, InteractiveSkeleton } fro
|
|
|
26
27
|
// New unified loading components
|
|
27
28
|
export { ContentLoadingContainer, useContentLoading } from '../content-loading-container';
|
|
28
29
|
|
|
29
|
-
// Content skeleton components
|
|
30
|
-
export {
|
|
31
|
-
ParagraphSkeleton,
|
|
32
|
-
ListSkeleton,
|
|
33
|
-
TableSkeleton,
|
|
34
|
-
FormSkeleton,
|
|
35
|
-
NavigationSkeleton,
|
|
36
|
-
ProfileSkeleton,
|
|
37
|
-
CommentSkeleton,
|
|
38
|
-
FeatureListSkeleton,
|
|
39
|
-
TimelineSkeleton,
|
|
40
|
-
PricingSkeleton,
|
|
41
|
-
} from './content-skeleton';
|
|
42
|
-
|
|
43
30
|
// Profile system loading skeleton
|
|
44
31
|
export { ProfileLoadingSkeleton } from '../profile/ProfileLoadingSkeleton';
|
|
45
32
|
|
|
46
33
|
export { MspProfileFormSkeleton } from './msp-profile-form-skeleton';
|
|
47
34
|
|
|
35
|
+
export { SettingsFormSkeleton, type SettingsFormSkeletonProps } from './settings-form-skeleton';
|
|
36
|
+
|
|
48
37
|
export { CategoryCardSkeleton } from './category-card-skeleton';
|
|
49
38
|
|
|
50
39
|
export { CategoryVendorSelectorSkeleton } from './category-vendor-selector-skeleton';
|
|
@@ -56,12 +45,9 @@ export { WizardLayoutSkeleton } from './wizard-layout-skeleton';
|
|
|
56
45
|
// export it here, otherwise server components that import this index will
|
|
57
46
|
// break due to client-only code.
|
|
58
47
|
|
|
59
|
-
export {
|
|
60
|
-
|
|
61
|
-
export { UsersGridSkeleton } from './users-grid-skeleton';
|
|
48
|
+
export { LoadingRegion, type LoadingRegionProps } from './loading-region';
|
|
62
49
|
|
|
63
|
-
|
|
64
|
-
export { DynamicSkeleton, SkeletonPresets, PlatformSkeletonContainer, ProgressiveSkeleton } from '../dynamic-skeleton';
|
|
50
|
+
export { MarginReportSkeleton } from './margin-report-skeleton';
|
|
65
51
|
|
|
66
52
|
// Organization & Device skeleton components
|
|
67
53
|
export { OrganizationIconSkeleton } from './organization-icon-skeleton';
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { ElementType, HTMLAttributes, ReactNode } from 'react';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* THE container of a loading state: the one thing a screen reader hears while it loads.
|
|
5
|
+
*
|
|
6
|
+
* Skeleton bars (`UnifiedSkeleton`, `TextHold`) are decoration and are hidden from assistive technology;
|
|
7
|
+
* a page with forty bars must not announce "loading" forty times. The region around them says it ONCE:
|
|
8
|
+
* `aria-busy` on the container, and one polite status with the label. Few screen readers honour
|
|
9
|
+
* `aria-busy` alone, so the status is what is actually read. When the content replaces the region, the
|
|
10
|
+
* status goes with it.
|
|
11
|
+
*
|
|
12
|
+
* Put it on the top of a loading state (a page's skeleton, a card grid's, a Suspense fallback), never on
|
|
13
|
+
* every card inside it: nested regions would announce again.
|
|
14
|
+
*/
|
|
15
|
+
export interface LoadingRegionProps extends HTMLAttributes<HTMLElement> {
|
|
16
|
+
/** What is loading, read once by a screen reader. */
|
|
17
|
+
label?: string;
|
|
18
|
+
/** The container element, so the region keeps the layout element it replaces (a `section`, a `li`, a `span` in text). */
|
|
19
|
+
as?: ElementType;
|
|
20
|
+
/**
|
|
21
|
+
* `false`: only the container is drawn (no `aria-busy`, no status), for a loading state rendered inside
|
|
22
|
+
* another region, which announces for both. Components expose it as their `region` / `loadingRegion` prop.
|
|
23
|
+
* Default `true`.
|
|
24
|
+
*/
|
|
25
|
+
announce?: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* `false`: `aria-busy` without a status of its own, for a container whose loading is already announced by a
|
|
28
|
+
* status elsewhere (a table footer's "Loading more results"). Default `true`.
|
|
29
|
+
*/
|
|
30
|
+
status?: boolean;
|
|
31
|
+
children?: ReactNode;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function LoadingRegion({
|
|
35
|
+
label = 'Loading',
|
|
36
|
+
as: Tag = 'div',
|
|
37
|
+
announce = true,
|
|
38
|
+
status = true,
|
|
39
|
+
className,
|
|
40
|
+
children,
|
|
41
|
+
...props
|
|
42
|
+
}: LoadingRegionProps) {
|
|
43
|
+
if (!announce) {
|
|
44
|
+
return (
|
|
45
|
+
<Tag className={className} {...props}>
|
|
46
|
+
{children}
|
|
47
|
+
</Tag>
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
return (
|
|
51
|
+
<Tag aria-busy="true" className={className} {...props}>
|
|
52
|
+
{status && (
|
|
53
|
+
<span role="status" aria-live="polite" className="sr-only">
|
|
54
|
+
{label}
|
|
55
|
+
</span>
|
|
56
|
+
)}
|
|
57
|
+
{children}
|
|
58
|
+
</Tag>
|
|
59
|
+
);
|
|
60
|
+
}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import type React from 'react';
|
|
2
|
+
import { LoadingRegion } from './loading-region';
|
|
3
|
+
import { UnifiedSkeleton } from './unified-skeleton';
|
|
2
4
|
|
|
3
5
|
interface MarginReportSkeletonProps {
|
|
6
|
+
/** The loading state announces itself (`LoadingRegion`). `false` inside another loading region. Default `true`. */
|
|
7
|
+
region?: boolean;
|
|
4
8
|
/** Enable pulse animation (default: true) */
|
|
5
9
|
animate?: boolean;
|
|
6
10
|
/** Optional explanation text shown above overlay content */
|
|
@@ -9,63 +13,70 @@ interface MarginReportSkeletonProps {
|
|
|
9
13
|
overlayContent?: React.ReactNode;
|
|
10
14
|
}
|
|
11
15
|
|
|
12
|
-
export function MarginReportSkeleton({
|
|
16
|
+
export function MarginReportSkeleton({
|
|
17
|
+
region = true,
|
|
18
|
+
animate = true,
|
|
19
|
+
description,
|
|
20
|
+
overlayContent,
|
|
21
|
+
}: MarginReportSkeletonProps) {
|
|
13
22
|
return (
|
|
14
|
-
<
|
|
23
|
+
<LoadingRegion
|
|
24
|
+
label="Loading the report"
|
|
25
|
+
as="main"
|
|
26
|
+
announce={region && !overlayContent}
|
|
27
|
+
className="relative min-h-screen bg-ods-bg"
|
|
28
|
+
>
|
|
15
29
|
<div className="mx-auto max-w-[1920px] space-y-10 px-6 py-6 content-md:px-20 content-md:py-10">
|
|
16
30
|
{/* Header */}
|
|
17
31
|
<div className="space-y-3">
|
|
18
|
-
<
|
|
19
|
-
<
|
|
32
|
+
<UnifiedSkeleton className="h-10 w-72 rounded" animate={animate} />
|
|
33
|
+
<UnifiedSkeleton className="h-4 w-80 rounded" animate={animate} />
|
|
20
34
|
</div>
|
|
21
35
|
|
|
22
36
|
{/* Summary cards */}
|
|
23
37
|
<div className="grid grid-cols-1 gap-6 content-md:grid-cols-3">
|
|
24
38
|
{Array.from({ length: 3 }).map((_, i) => (
|
|
25
|
-
<
|
|
39
|
+
<UnifiedSkeleton key={i} className="h-32 rounded border border-ods-border" animate={animate} />
|
|
26
40
|
))}
|
|
27
41
|
</div>
|
|
28
42
|
|
|
29
43
|
{/* MSP Profile & Report Info cards */}
|
|
30
44
|
<div className="grid grid-cols-1 gap-6 content-md:grid-cols-2">
|
|
31
45
|
{/* MSP profile skeleton */}
|
|
32
|
-
<div className="flex
|
|
33
|
-
<
|
|
46
|
+
<div className="flex items-center gap-4 rounded-lg border border-ods-border bg-ods-card p-6">
|
|
47
|
+
<UnifiedSkeleton className="h-14 w-14 rounded-lg" animate={animate} />
|
|
34
48
|
<div className="flex-1 space-y-2">
|
|
35
|
-
<
|
|
36
|
-
<
|
|
49
|
+
<UnifiedSkeleton className="h-4 w-3/4 rounded" animate={animate} />
|
|
50
|
+
<UnifiedSkeleton className="h-3 w-1/2 rounded" animate={animate} />
|
|
37
51
|
</div>
|
|
38
52
|
</div>
|
|
39
53
|
|
|
40
54
|
{/* Report info skeleton */}
|
|
41
|
-
<div className="flex
|
|
55
|
+
<div className="flex flex-col gap-4 rounded-lg border border-ods-border bg-ods-card p-6">
|
|
42
56
|
<div className="flex items-center justify-between gap-4">
|
|
43
57
|
<div className="flex items-center gap-2">
|
|
44
|
-
<
|
|
58
|
+
<UnifiedSkeleton className="h-10 w-10 rounded-lg" animate={animate} />
|
|
45
59
|
<div className="space-y-1">
|
|
46
|
-
<
|
|
47
|
-
<
|
|
60
|
+
<UnifiedSkeleton className="h-4 w-32 rounded" animate={animate} />
|
|
61
|
+
<UnifiedSkeleton className="h-3 w-20 rounded" animate={animate} />
|
|
48
62
|
</div>
|
|
49
63
|
</div>
|
|
50
|
-
<
|
|
64
|
+
<UnifiedSkeleton className="h-6 w-36 rounded" animate={animate} />
|
|
51
65
|
</div>
|
|
52
|
-
<
|
|
66
|
+
<UnifiedSkeleton className="mt-4 h-4 w-40 rounded" animate={animate} />
|
|
53
67
|
</div>
|
|
54
68
|
</div>
|
|
55
69
|
|
|
56
70
|
{/* Vendor solution lists (Commercial & Open-Source) */}
|
|
57
71
|
<div className="grid grid-cols-1 gap-6 content-md:grid-cols-2">
|
|
58
72
|
{['Commercial Stack', 'Open-Source Stack'].map((label, idx) => (
|
|
59
|
-
<div
|
|
60
|
-
key={idx}
|
|
61
|
-
className="flex animate-pulse flex-col overflow-hidden rounded-lg border border-ods-border bg-ods-card"
|
|
62
|
-
>
|
|
73
|
+
<div key={idx} className="flex flex-col overflow-hidden rounded-lg border border-ods-border bg-ods-card">
|
|
63
74
|
{/* list header */}
|
|
64
75
|
<div className="flex items-center justify-between px-6 py-4">
|
|
65
|
-
<
|
|
76
|
+
<UnifiedSkeleton className="h-6 w-40 rounded" animate={animate} />
|
|
66
77
|
<div className="flex items-center gap-2">
|
|
67
|
-
<
|
|
68
|
-
<
|
|
78
|
+
<UnifiedSkeleton className="h-5 w-20 rounded" animate={animate} />
|
|
79
|
+
<UnifiedSkeleton className="h-4 w-10 rounded" animate={animate} />
|
|
69
80
|
</div>
|
|
70
81
|
</div>
|
|
71
82
|
|
|
@@ -78,16 +89,16 @@ export function MarginReportSkeleton({ animate = true, description, overlayConte
|
|
|
78
89
|
>
|
|
79
90
|
{/* left section: icon + text */}
|
|
80
91
|
<div className="flex min-w-0 items-center gap-3">
|
|
81
|
-
<
|
|
92
|
+
<UnifiedSkeleton className="h-12 w-12 flex-shrink-0 rounded-lg" animate={animate} />
|
|
82
93
|
<div className="flex min-w-0 flex-col">
|
|
83
|
-
<
|
|
84
|
-
<
|
|
94
|
+
<UnifiedSkeleton className="h-4 w-32 rounded" animate={animate} />
|
|
95
|
+
<UnifiedSkeleton className="mt-1 hidden h-3 w-24 rounded content-md:block" animate={animate} />
|
|
85
96
|
</div>
|
|
86
97
|
</div>
|
|
87
98
|
{/* right addon: cost text */}
|
|
88
99
|
<div className="flex flex-shrink-0 items-center gap-1">
|
|
89
|
-
<
|
|
90
|
-
<
|
|
100
|
+
<UnifiedSkeleton className="h-4 w-16 rounded" animate={animate} />
|
|
101
|
+
<UnifiedSkeleton className="h-3 w-8 rounded" animate={animate} />
|
|
91
102
|
</div>
|
|
92
103
|
</div>
|
|
93
104
|
))}
|
|
@@ -97,12 +108,12 @@ export function MarginReportSkeleton({ animate = true, description, overlayConte
|
|
|
97
108
|
</div>
|
|
98
109
|
|
|
99
110
|
{/* Strategic Recommendations header placeholder */}
|
|
100
|
-
<
|
|
111
|
+
<UnifiedSkeleton className="h-6 w-60 rounded" animate={animate} />
|
|
101
112
|
|
|
102
113
|
{/* Recommendations grid */}
|
|
103
114
|
<div className="grid grid-cols-1 gap-6 content-md:grid-cols-2 content-lg:grid-cols-3">
|
|
104
115
|
{Array.from({ length: 3 }).map((_, i) => (
|
|
105
|
-
<
|
|
116
|
+
<UnifiedSkeleton key={i} className="h-48 rounded border border-ods-border" animate={animate} />
|
|
106
117
|
))}
|
|
107
118
|
</div>
|
|
108
119
|
|
|
@@ -111,17 +122,17 @@ export function MarginReportSkeleton({ animate = true, description, overlayConte
|
|
|
111
122
|
{/* Section header */}
|
|
112
123
|
<div className="flex items-start gap-6">
|
|
113
124
|
<div className="min-w-0 flex-1 space-y-2">
|
|
114
|
-
<
|
|
115
|
-
<
|
|
125
|
+
<UnifiedSkeleton className="h-8 w-72 rounded" animate={animate} />
|
|
126
|
+
<UnifiedSkeleton className="h-4 w-3/4 rounded" animate={animate} />
|
|
116
127
|
</div>
|
|
117
128
|
{/* Logo placeholder */}
|
|
118
|
-
<
|
|
129
|
+
<UnifiedSkeleton className="h-12 w-12 shrink-0 rounded-md" animate={animate} />
|
|
119
130
|
</div>
|
|
120
131
|
|
|
121
132
|
{/* Value cards grid */}
|
|
122
133
|
<div className="grid grid-cols-1 gap-6 content-md:grid-cols-2 content-lg:grid-cols-3">
|
|
123
134
|
{Array.from({ length: 3 }).map((_, i) => (
|
|
124
|
-
<
|
|
135
|
+
<UnifiedSkeleton key={i} className="h-32 rounded border border-ods-border" animate={animate} />
|
|
125
136
|
))}
|
|
126
137
|
</div>
|
|
127
138
|
</div>
|
|
@@ -137,6 +148,6 @@ export function MarginReportSkeleton({ animate = true, description, overlayConte
|
|
|
137
148
|
</div>
|
|
138
149
|
</div>
|
|
139
150
|
)}
|
|
140
|
-
</
|
|
151
|
+
</LoadingRegion>
|
|
141
152
|
);
|
|
142
153
|
}
|