@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
|
@@ -100,6 +100,8 @@ export function getDeviceOpenColumn<T extends DeviceRow = DeviceRow>(): ColumnDe
|
|
|
100
100
|
export interface DevicesTableBodyProps<T extends DeviceRow = DeviceRow> {
|
|
101
101
|
devices: T[];
|
|
102
102
|
isLoading?: boolean;
|
|
103
|
+
/** The loading state announces itself ("Loading results"). `false` inside another loading region. Default `true`. */
|
|
104
|
+
loadingRegion?: boolean;
|
|
103
105
|
/**
|
|
104
106
|
* The empty state, as the design's `data-placeholder`: icon over a title over
|
|
105
107
|
* a description. Wins over `emptyMessage` when both are given.
|
|
@@ -139,6 +141,7 @@ export interface DevicesTableBodyProps<T extends DeviceRow = DeviceRow> {
|
|
|
139
141
|
export function DevicesTableBody<T extends DeviceRow = DeviceRow>({
|
|
140
142
|
devices,
|
|
141
143
|
isLoading,
|
|
144
|
+
loadingRegion,
|
|
142
145
|
emptyState,
|
|
143
146
|
emptyMessage = 'No devices found.',
|
|
144
147
|
skeletonRows = 10,
|
|
@@ -186,6 +189,7 @@ export function DevicesTableBody<T extends DeviceRow = DeviceRow>({
|
|
|
186
189
|
)}
|
|
187
190
|
<DataTable.Body
|
|
188
191
|
loading={isLoading}
|
|
192
|
+
loadingRegion={loadingRegion}
|
|
189
193
|
skeletonRows={skeletonRows}
|
|
190
194
|
emptyState={emptyState}
|
|
191
195
|
emptyMessage={emptyState ? undefined : emptyMessage}
|
|
@@ -432,13 +432,15 @@ const PENDING_FILTER = { options: [] as never[], pending: true };
|
|
|
432
432
|
export interface LogsTableSkeletonProps {
|
|
433
433
|
/** The Log ID header in its inert form, so the icon does not arrive with the data. */
|
|
434
434
|
logIdHeader?: ReactNode;
|
|
435
|
+
/** The loading state announces itself ("Loading results"). `false` inside another loading region. Default `true`. */
|
|
436
|
+
region?: boolean;
|
|
435
437
|
}
|
|
436
438
|
|
|
437
439
|
/**
|
|
438
440
|
* Loading fallback of the logs table: an empty `DataTable` with the table's own
|
|
439
441
|
* columns, so the header row and the column widths match the loaded table.
|
|
440
442
|
*/
|
|
441
|
-
export function LogsTableSkeleton({ logIdHeader }: LogsTableSkeletonProps) {
|
|
443
|
+
export function LogsTableSkeleton({ logIdHeader, region = true }: LogsTableSkeletonProps) {
|
|
442
444
|
const columns = useMemo<ColumnDef<unknown>[]>(() => {
|
|
443
445
|
const multiSelect = multiSelectFor<unknown>();
|
|
444
446
|
return [
|
|
@@ -503,7 +505,7 @@ export function LogsTableSkeleton({ logIdHeader }: LogsTableSkeletonProps) {
|
|
|
503
505
|
return (
|
|
504
506
|
<DataTable table={table}>
|
|
505
507
|
<DataTable.Header stickyHeader stickyHeaderOffset="top-[96px]" />
|
|
506
|
-
<DataTable.Body loading={true} skeletonRows={10} emptyMessage="" rowClassName="mb-1" />
|
|
508
|
+
<DataTable.Body loading={true} loadingRegion={region} skeletonRows={10} emptyMessage="" rowClassName="mb-1" />
|
|
507
509
|
</DataTable>
|
|
508
510
|
);
|
|
509
511
|
}
|
|
@@ -19,10 +19,11 @@ import { AlertTriangleIcon } from '../icons-v2-generated/interface/alert-triangl
|
|
|
19
19
|
import { Refresh02VrIcon } from '../icons-v2-generated/media-playback/refresh-02-vr-icon';
|
|
20
20
|
import { QuestionCircleIcon } from '../icons-v2-generated/signs-and-symbols/question-circle-icon';
|
|
21
21
|
import { XmarkCircleIcon } from '../icons-v2-generated/signs-and-symbols/xmark-circle-icon';
|
|
22
|
+
import { LoadingRegion } from '../loading/loading-region';
|
|
23
|
+
import { UnifiedSkeleton } from '../loading/unified-skeleton';
|
|
22
24
|
import { Autocomplete, type AutocompleteOption } from '../ui/autocomplete';
|
|
23
25
|
import { Button } from '../ui/button';
|
|
24
26
|
import { DropdownMenu, DropdownMenuContent, DropdownMenuTrigger } from '../ui/dropdown-menu';
|
|
25
|
-
import { Skeleton } from '../ui/skeleton';
|
|
26
27
|
import { Slider } from '../ui/slider';
|
|
27
28
|
import { TabSelector } from '../ui/tab-selector';
|
|
28
29
|
import { PushButtonSelector } from './push-button-selector';
|
|
@@ -347,31 +348,36 @@ export function ModelTokenRatesUnavailable({ className }: { className?: string }
|
|
|
347
348
|
}
|
|
348
349
|
|
|
349
350
|
/** The table's loading footprint: the provider tabs, the header and rows of the boxes the loaded rows use. */
|
|
350
|
-
export function ModelTokenRatesSkeleton(
|
|
351
|
+
export function ModelTokenRatesSkeleton({
|
|
352
|
+
region = true,
|
|
353
|
+
}: {
|
|
354
|
+
/** The loading state announces itself (`LoadingRegion`). `false` inside another loading region. Default `true`. */
|
|
355
|
+
region?: boolean;
|
|
356
|
+
} = {}) {
|
|
351
357
|
const cells = (
|
|
352
358
|
<>
|
|
353
359
|
<div className="flex-1" />
|
|
354
|
-
<
|
|
355
|
-
<
|
|
360
|
+
<UnifiedSkeleton className="h-4 w-12" />
|
|
361
|
+
<UnifiedSkeleton className="h-4 w-12" />
|
|
356
362
|
</>
|
|
357
363
|
);
|
|
358
364
|
return (
|
|
359
|
-
<
|
|
365
|
+
<LoadingRegion label="Loading the model token rates" announce={region} className="min-h-0 flex-1 overflow-hidden">
|
|
360
366
|
<div className={cn('border-b border-ods-border py-[var(--spacing-system-xs)]', PAD_X)}>
|
|
361
|
-
<
|
|
367
|
+
<UnifiedSkeleton className={TABS_SKELETON_CLASS} />
|
|
362
368
|
</div>
|
|
363
369
|
<div className={cn(ROW, PAD_X, 'py-[var(--spacing-system-xs)]')}>
|
|
364
|
-
<
|
|
370
|
+
<UnifiedSkeleton className="h-4 w-14" />
|
|
365
371
|
{cells}
|
|
366
372
|
</div>
|
|
367
373
|
{Array.from({ length: TABLE_SKELETON_ROWS }, (_, index) => (
|
|
368
374
|
// biome-ignore lint/suspicious/noArrayIndexKey: identical placeholder rows
|
|
369
375
|
<div key={index} className={cn(ROW, PAD_X, 'py-[var(--spacing-system-xxs)]')}>
|
|
370
|
-
<
|
|
376
|
+
<UnifiedSkeleton className="h-4 w-36" />
|
|
371
377
|
{cells}
|
|
372
378
|
</div>
|
|
373
379
|
))}
|
|
374
|
-
</
|
|
380
|
+
</LoadingRegion>
|
|
375
381
|
);
|
|
376
382
|
}
|
|
377
383
|
|
|
@@ -418,15 +424,8 @@ export const MODEL_TOKEN_EXCHANGE_RANGE = { min: 1_000_000, max: 50_000_000, ste
|
|
|
418
424
|
/** The provider rows drawn while the providers load: as many as OpenFrame has had. */
|
|
419
425
|
const PROVIDER_PLACEHOLDERS = ['loading-1', 'loading-2', 'loading-3'] as const;
|
|
420
426
|
|
|
421
|
-
/** A
|
|
422
|
-
|
|
423
|
-
return (
|
|
424
|
-
<span
|
|
425
|
-
aria-hidden
|
|
426
|
-
className={cn('inline-block h-[0.8lh] animate-pulse rounded bg-ods-border align-middle', className)}
|
|
427
|
-
/>
|
|
428
|
-
);
|
|
429
|
-
}
|
|
427
|
+
/** A figure while it loads: a bar of the surrounding text's own line, inside its phrasing span. */
|
|
428
|
+
const FIGURE_SKELETON_CLASS = 'inline-block h-[0.8lh] rounded align-middle';
|
|
430
429
|
|
|
431
430
|
/** A model as a picker option: its name, its provider under it, the provider's mark beside it. */
|
|
432
431
|
function modelOption(rate: ModelTokenRate): AutocompleteOption<string> {
|
|
@@ -475,10 +474,14 @@ function ExchangeFigure({
|
|
|
475
474
|
<span
|
|
476
475
|
className={cn('whitespace-nowrap tabular-nums text-ods-text-primary', size === 'hero' ? 'text-h1' : 'text-h2')}
|
|
477
476
|
>
|
|
478
|
-
{loading ? <
|
|
477
|
+
{loading ? <UnifiedSkeleton as="span" aria-hidden className={cn(FIGURE_SKELETON_CLASS, 'w-20')} /> : figure}
|
|
479
478
|
</span>
|
|
480
479
|
<span className="min-h-[2lh] text-ods-text-secondary text-h4">
|
|
481
|
-
{loading ?
|
|
480
|
+
{loading ? (
|
|
481
|
+
<UnifiedSkeleton as="span" aria-hidden className={cn(FIGURE_SKELETON_CLASS, 'w-full max-w-xs')} />
|
|
482
|
+
) : (
|
|
483
|
+
words
|
|
484
|
+
)}
|
|
482
485
|
</span>
|
|
483
486
|
</div>
|
|
484
487
|
);
|
|
@@ -593,7 +596,7 @@ export function ModelTokenExchange({
|
|
|
593
596
|
? PROVIDER_PLACEHOLDERS.map(id => ({
|
|
594
597
|
id,
|
|
595
598
|
name: '\u00a0',
|
|
596
|
-
icon: <
|
|
599
|
+
icon: <UnifiedSkeleton className="size-8 rounded" />,
|
|
597
600
|
disabled: true,
|
|
598
601
|
}))
|
|
599
602
|
: providers.map(providerType => {
|
|
@@ -655,7 +658,7 @@ export function ModelTokenExchange({
|
|
|
655
658
|
>
|
|
656
659
|
<span className="min-h-[2lh] text-ods-text-secondary text-h4">
|
|
657
660
|
{loading || !rate ? (
|
|
658
|
-
<
|
|
661
|
+
<UnifiedSkeleton as="span" aria-hidden className={cn(FIGURE_SKELETON_CLASS, 'w-full max-w-xs')} />
|
|
659
662
|
) : (
|
|
660
663
|
copy.charge.so(balancePrice ?? copy.buy.tokens(tokens), model)
|
|
661
664
|
)}
|
|
@@ -663,7 +666,7 @@ export function ModelTokenExchange({
|
|
|
663
666
|
{/* The number is the headline, alone on its line: a longer number never pushes its unit to a new line and the box taller. */}
|
|
664
667
|
<span className="min-h-[1lh] whitespace-nowrap tabular-nums text-ods-text-primary text-h1">
|
|
665
668
|
{loading || !rate ? (
|
|
666
|
-
<
|
|
669
|
+
<UnifiedSkeleton as="span" aria-hidden className={cn(FIGURE_SKELETON_CLASS, 'w-40')} />
|
|
667
670
|
) : (
|
|
668
671
|
formatTokenAmount(tokensForBalance(balance, rate.inputTokenRate))
|
|
669
672
|
)}
|
|
@@ -671,7 +674,7 @@ export function ModelTokenExchange({
|
|
|
671
674
|
<span className="min-h-[1lh] text-ods-text-primary text-h3">{copy.charge.read}</span>
|
|
672
675
|
<span className="min-h-[1lh] text-ods-text-secondary text-h4">
|
|
673
676
|
{loading || !rate ? (
|
|
674
|
-
<
|
|
677
|
+
<UnifiedSkeleton as="span" aria-hidden className={cn(FIGURE_SKELETON_CLASS, 'w-48')} />
|
|
675
678
|
) : (
|
|
676
679
|
copy.charge.orWritten(formatTokenAmount(tokensForBalance(balance, rate.outputTokenRate)))
|
|
677
680
|
)}
|
|
@@ -2,8 +2,8 @@ export { NotificationsProvider, useNotifications, useOptionalNotifications } fro
|
|
|
2
2
|
export type { NotificationsProviderProps, NotificationsActions } from './notifications-context';
|
|
3
3
|
export { NotificationDrawer } from './notification-drawer';
|
|
4
4
|
export type { NotificationDrawerProps } from './notification-drawer';
|
|
5
|
-
export { NotificationTile } from './notification-tile';
|
|
6
|
-
export type { NotificationTileProps } from './notification-tile';
|
|
5
|
+
export { NotificationTile, NotificationTileSkeleton } from './notification-tile';
|
|
6
|
+
export type { NotificationTileProps, NotificationTileSkeletonProps } from './notification-tile';
|
|
7
7
|
export { NotificationPopups } from './notification-popups';
|
|
8
8
|
export type { NotificationPopupsProps, NotificationPopupsPosition } from './notification-popups';
|
|
9
9
|
export { ApprovalRequestNotificationTile } from './approval-request-notification-tile';
|
|
@@ -5,6 +5,8 @@ import { useNotificationPermission } from '../../../hooks/ui';
|
|
|
5
5
|
import { cn } from '../../../utils/cn';
|
|
6
6
|
import { ClockHistoryIcon, ArrowRightUpIcon } from '../../icons-v2-generated';
|
|
7
7
|
import { BellOffIcon } from '../../icons-v2-generated/interface/bell-off-icon';
|
|
8
|
+
import { LoadingRegion } from '../../loading/loading-region';
|
|
9
|
+
import { UnifiedSkeleton } from '../../loading/unified-skeleton';
|
|
8
10
|
import { useAppLayoutDrawerContainer } from '../../navigation/app-layout-context';
|
|
9
11
|
import { AppLayoutDrawer, AppLayoutDrawerContent } from '../../navigation/app-layout-drawer';
|
|
10
12
|
import { SplitButton } from '../../ui/button';
|
|
@@ -231,16 +233,11 @@ function DrawerScrollList({
|
|
|
231
233
|
|
|
232
234
|
function DrawerLoadingTiles() {
|
|
233
235
|
return (
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
<div
|
|
240
|
-
aria-hidden="true"
|
|
241
|
-
className="h-16 w-full shrink-0 animate-pulse rounded-md border border-ods-border bg-ods-card"
|
|
242
|
-
/>
|
|
243
|
-
</>
|
|
236
|
+
// `contents`: the tiles stay the list's own items; the region adds the one announcement.
|
|
237
|
+
<LoadingRegion label="Loading more notifications" className="contents">
|
|
238
|
+
<UnifiedSkeleton className="h-16 w-full shrink-0 rounded-md border border-ods-border" />
|
|
239
|
+
<UnifiedSkeleton className="h-16 w-full shrink-0 rounded-md border border-ods-border" />
|
|
240
|
+
</LoadingRegion>
|
|
244
241
|
);
|
|
245
242
|
}
|
|
246
243
|
|
|
@@ -6,6 +6,7 @@ import { cn } from '../../../utils/cn';
|
|
|
6
6
|
import { formatTicketRelativeTime } from '../../../utils/date-utils';
|
|
7
7
|
import { CheckCircleIcon } from '../../icons-v2-generated/signs-and-symbols/check-circle-icon';
|
|
8
8
|
import { XmarkIcon } from '../../icons-v2-generated/signs-and-symbols/xmark-icon';
|
|
9
|
+
import { UnifiedSkeleton } from '../../loading/unified-skeleton';
|
|
9
10
|
import { dotColorByVariant, progressColorByVariant as toastProgressColorByVariant } from '../../ui/toaster';
|
|
10
11
|
import type { Notification, NotificationSeverity, NotificationVariant } from './types';
|
|
11
12
|
|
|
@@ -268,3 +269,59 @@ export function NotificationTile({
|
|
|
268
269
|
</output>
|
|
269
270
|
);
|
|
270
271
|
}
|
|
272
|
+
|
|
273
|
+
export interface NotificationTileSkeletonProps {
|
|
274
|
+
/** `approval`: the approval tile, which adds a row of small buttons under the body. */
|
|
275
|
+
variant?: 'default' | 'approval';
|
|
276
|
+
className?: string;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/** One row of the tile: the LINE BOX of the text it stands in for, with its bar centred inside. */
|
|
280
|
+
function TileLine({ box, bar, width }: { box: string; bar: string; width: string }) {
|
|
281
|
+
return (
|
|
282
|
+
<span className={cn('flex items-center', box)}>
|
|
283
|
+
<UnifiedSkeleton as="span" width={width} className={bar} />
|
|
284
|
+
</span>
|
|
285
|
+
);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
/**
|
|
289
|
+
* A tile while its notification is read, box for box: the tile's frame and pad,
|
|
290
|
+
* the header (icon, type, time, trailing control), a one-line title over a
|
|
291
|
+
* TWO-line description (a host that rotates tiles in one cell is as tall as its
|
|
292
|
+
* tallest tile), and for `approval` the button row. Each row is its text's line
|
|
293
|
+
* box (h5/h6 20px, the h4 title 24px), so a host panel sizes itself against the
|
|
294
|
+
* height it will have when loaded.
|
|
295
|
+
*/
|
|
296
|
+
export function NotificationTileSkeleton({ variant = 'default', className }: NotificationTileSkeletonProps) {
|
|
297
|
+
return (
|
|
298
|
+
<output
|
|
299
|
+
aria-hidden
|
|
300
|
+
className={cn(
|
|
301
|
+
'relative block w-full shrink-0 overflow-hidden rounded-md border border-ods-border bg-ods-card',
|
|
302
|
+
className,
|
|
303
|
+
)}
|
|
304
|
+
>
|
|
305
|
+
<span className="relative flex flex-col gap-[var(--spacing-system-xs)] p-[var(--spacing-system-s)]">
|
|
306
|
+
<span className="flex items-center gap-[var(--spacing-system-xs)]">
|
|
307
|
+
<TileLine box="size-4" width="1rem" bar="h-4 rounded-[2px]" />
|
|
308
|
+
<TileLine box="h-5" width="7rem" bar="h-3 rounded" />
|
|
309
|
+
<span className="min-w-0 flex-1" />
|
|
310
|
+
<TileLine box="h-5" width="3.5rem" bar="h-3 rounded" />
|
|
311
|
+
<TileLine box="size-4" width="1rem" bar="h-4 rounded-full" />
|
|
312
|
+
</span>
|
|
313
|
+
<span className="grid min-w-0 grid-cols-1">
|
|
314
|
+
<TileLine box="h-6" width="60%" bar="h-4 rounded" />
|
|
315
|
+
<TileLine box="h-5" width="88%" bar="h-3 rounded" />
|
|
316
|
+
<TileLine box="h-5" width="52%" bar="h-3 rounded" />
|
|
317
|
+
</span>
|
|
318
|
+
{variant === 'approval' && (
|
|
319
|
+
<span className="flex w-full items-center gap-[var(--spacing-system-xs)]">
|
|
320
|
+
<TileLine box="h-6 md:h-8" width="5.5rem" bar="h-6 rounded md:h-8" />
|
|
321
|
+
<TileLine box="h-6 md:h-8" width="4.5rem" bar="h-6 rounded md:h-8" />
|
|
322
|
+
</span>
|
|
323
|
+
)}
|
|
324
|
+
</span>
|
|
325
|
+
</output>
|
|
326
|
+
);
|
|
327
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
3
|
import { formatRelativeTimeFrom } from '../../../utils/date-utils';
|
|
4
|
+
import { UnifiedSkeleton } from '../../loading/unified-skeleton';
|
|
4
5
|
import { DashboardInfoCard } from '../../ui/dashboard-info-card';
|
|
5
|
-
import { Skeleton } from '../../ui/skeleton';
|
|
6
6
|
import type { PolicySummaryStats } from './compute-policy-summary';
|
|
7
7
|
|
|
8
8
|
/** What a card shows when there is no value to show. */
|
|
@@ -31,7 +31,7 @@ export function PolicySummaryCards({ summary, isLoading = false, hasData = true,
|
|
|
31
31
|
{isLoading ? (
|
|
32
32
|
// `h-16 content-md:h-[104px]` is `DashboardInfoCard`'s own height, so the
|
|
33
33
|
// grid does not jump when the real cards replace the placeholders.
|
|
34
|
-
CARD_SKELETON_KEYS.map(key => <
|
|
34
|
+
CARD_SKELETON_KEYS.map(key => <UnifiedSkeleton key={key} className="h-16 w-full content-md:h-[104px]" />)
|
|
35
35
|
) : (
|
|
36
36
|
<>
|
|
37
37
|
<DashboardInfoCard title="Total Policies" value={hasData ? summary.totalPolicies : EMPTY_VALUE} />
|
|
@@ -4,6 +4,7 @@ import { Check } from 'lucide-react';
|
|
|
4
4
|
import type React from 'react';
|
|
5
5
|
import { useEffect, useRef } from 'react';
|
|
6
6
|
import { UnifiedSkeleton } from '../loading';
|
|
7
|
+
import { LoadingRegion } from '../loading/loading-region';
|
|
7
8
|
import { Badge, Input } from '../ui';
|
|
8
9
|
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../ui/tooltip';
|
|
9
10
|
|
|
@@ -78,32 +79,40 @@ interface PushButtonSelectorProps<Id extends SelectableOptionId = string> {
|
|
|
78
79
|
footer?: React.ReactNode;
|
|
79
80
|
}
|
|
80
81
|
|
|
81
|
-
// Composed from the app-wide UnifiedSkeleton system (components/loading)
|
|
82
|
-
//
|
|
83
|
-
// prefers-reduced-motion support, role="status" a11y). Each skeleton row
|
|
82
|
+
// Composed from the app-wide UnifiedSkeleton system (components/loading),
|
|
83
|
+
// announced once by its LoadingRegion. Each skeleton row
|
|
84
84
|
// mirrors a LOADED option row exactly (bg-ods-bg card, p-4, icon + two
|
|
85
85
|
// 20px-tall text lines + selection box) so the list never jumps on load.
|
|
86
|
-
function PushButtonSelectorSkeleton({
|
|
86
|
+
function PushButtonSelectorSkeleton({
|
|
87
|
+
region = true,
|
|
88
|
+
count = 3,
|
|
89
|
+
hasTitle,
|
|
90
|
+
}: {
|
|
91
|
+
/** The loading state announces itself (`LoadingRegion`). `false` inside another loading region. Default `true`. */
|
|
92
|
+
region?: boolean;
|
|
93
|
+
count?: number;
|
|
94
|
+
hasTitle?: boolean;
|
|
95
|
+
}) {
|
|
87
96
|
return (
|
|
88
|
-
<
|
|
89
|
-
{hasTitle && <UnifiedSkeleton className="h-5 w-20"
|
|
97
|
+
<LoadingRegion label="Loading options" announce={region} className="space-y-3">
|
|
98
|
+
{hasTitle && <UnifiedSkeleton className="h-5 w-20" />}
|
|
90
99
|
<div className="space-y-3">
|
|
91
100
|
{Array.from({ length: count }, (_, i) => (
|
|
92
101
|
<div key={i} className="rounded-lg border border-ods-border bg-ods-bg p-4">
|
|
93
102
|
<div className="flex items-center justify-between gap-4">
|
|
94
103
|
<div className="flex items-center gap-3">
|
|
95
|
-
<UnifiedSkeleton className="h-8 w-8"
|
|
104
|
+
<UnifiedSkeleton className="h-8 w-8" />
|
|
96
105
|
<div>
|
|
97
|
-
<UnifiedSkeleton variant="text" className="mb-2 h-4 w-24"
|
|
98
|
-
<UnifiedSkeleton variant="text" className="h-4 w-36"
|
|
106
|
+
<UnifiedSkeleton variant="text" className="mb-2 h-4 w-24" />
|
|
107
|
+
<UnifiedSkeleton variant="text" className="h-4 w-36" />
|
|
99
108
|
</div>
|
|
100
109
|
</div>
|
|
101
|
-
<UnifiedSkeleton className="h-6 w-6"
|
|
110
|
+
<UnifiedSkeleton className="h-6 w-6" />
|
|
102
111
|
</div>
|
|
103
112
|
</div>
|
|
104
113
|
))}
|
|
105
114
|
</div>
|
|
106
|
-
</
|
|
115
|
+
</LoadingRegion>
|
|
107
116
|
);
|
|
108
117
|
}
|
|
109
118
|
|
|
@@ -11,9 +11,10 @@ import {
|
|
|
11
11
|
Settings01Icon,
|
|
12
12
|
} from '../../icons-v2-generated';
|
|
13
13
|
import { PageLayout } from '../../layout/page-layout';
|
|
14
|
+
import { LoadingRegion } from '../../loading/loading-region';
|
|
15
|
+
import { UnifiedSkeleton } from '../../loading/unified-skeleton';
|
|
14
16
|
import { ActionsMenuDropdown, type ActionsMenuGroup } from '../../ui/actions-menu';
|
|
15
17
|
import { Button } from '../../ui/button/button';
|
|
16
|
-
import { Skeleton } from '../../ui/skeleton';
|
|
17
18
|
import { TruncateText } from '../../ui/truncate-text';
|
|
18
19
|
import { RemoteDesktopFullscreenToolbar } from './remote-desktop-fullscreen-toolbar';
|
|
19
20
|
|
|
@@ -206,27 +207,36 @@ export function RemoteDesktopView({
|
|
|
206
207
|
}
|
|
207
208
|
|
|
208
209
|
/** The page while the device is still loading: the header bar as placeholders over an empty screen. */
|
|
209
|
-
export function RemoteDesktopViewSkeleton({
|
|
210
|
+
export function RemoteDesktopViewSkeleton({
|
|
211
|
+
onBack,
|
|
212
|
+
region = true,
|
|
213
|
+
}: Pick<RemoteDesktopViewProps, 'onBack'> & {
|
|
214
|
+
/** The loading state announces itself (`LoadingRegion`). `false` inside another loading region. Default `true`. */
|
|
215
|
+
region?: boolean;
|
|
216
|
+
}) {
|
|
210
217
|
return (
|
|
211
218
|
<PageLayout className={PAGE_CLASS} backButton={onBack ? { label: 'Back', onClick: onBack } : undefined}>
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
<div className="flex min-w-0
|
|
217
|
-
<
|
|
218
|
-
<
|
|
219
|
+
{/* `contents`: the page's own children stay its layout items; the region adds the one announcement. */}
|
|
220
|
+
<LoadingRegion label="Loading the remote session" announce={region} className="contents">
|
|
221
|
+
<div className={CONTROLS_BAR_CLASS}>
|
|
222
|
+
<div className={CONTROLS_ROW_CLASS}>
|
|
223
|
+
<div className="flex min-w-0 items-center gap-[var(--spacing-system-mf)]">
|
|
224
|
+
<UnifiedSkeleton className="h-9 w-9 flex-shrink-0 rounded-md" />
|
|
225
|
+
<div className="flex min-w-0 flex-col gap-[var(--spacing-system-xxs)]">
|
|
226
|
+
<UnifiedSkeleton className="h-5 w-48" />
|
|
227
|
+
<UnifiedSkeleton className="h-4 w-36" />
|
|
228
|
+
</div>
|
|
229
|
+
</div>
|
|
230
|
+
<div className="flex flex-shrink-0 items-center gap-[var(--spacing-system-xs)]">
|
|
231
|
+
<UnifiedSkeleton className="h-11 w-11 rounded-lg md:h-12 md:w-12" />
|
|
232
|
+
<UnifiedSkeleton className="h-11 w-11 rounded-lg md:h-12 md:w-12" />
|
|
233
|
+
<UnifiedSkeleton className="h-11 w-11 rounded-lg md:h-12 md:w-12" />
|
|
219
234
|
</div>
|
|
220
|
-
</div>
|
|
221
|
-
<div className="flex flex-shrink-0 items-center gap-[var(--spacing-system-xs)]">
|
|
222
|
-
<Skeleton className="h-11 w-11 rounded-lg md:h-12 md:w-12" />
|
|
223
|
-
<Skeleton className="h-11 w-11 rounded-lg md:h-12 md:w-12" />
|
|
224
|
-
<Skeleton className="h-11 w-11 rounded-lg md:h-12 md:w-12" />
|
|
225
235
|
</div>
|
|
226
236
|
</div>
|
|
227
|
-
</div>
|
|
228
237
|
|
|
229
|
-
|
|
238
|
+
<div className="min-h-0 min-w-0 flex-1 rounded-lg bg-black" />
|
|
239
|
+
</LoadingRegion>
|
|
230
240
|
</PageLayout>
|
|
231
241
|
);
|
|
232
242
|
}
|
|
@@ -14,6 +14,7 @@ import type { FormRescueDefinition } from '../../utils/form-rescue';
|
|
|
14
14
|
import { hasGenericEmailDomain } from '../../utils/generic-domain-utils';
|
|
15
15
|
import type { HumanitySignals } from '../../utils/humanity-signals';
|
|
16
16
|
import { OpenframeLogoIcon } from '../icons-v2-generated/logos/openframe-logo-icon';
|
|
17
|
+
import { UnifiedSkeleton } from '../loading/unified-skeleton';
|
|
17
18
|
import { Button } from '../ui/button';
|
|
18
19
|
import { CheckboxBlock } from '../ui/checkbox-block';
|
|
19
20
|
import { HoneypotField } from '../ui/honeypot-field';
|
|
@@ -201,16 +202,16 @@ export function WaitlistForm({
|
|
|
201
202
|
)}
|
|
202
203
|
>
|
|
203
204
|
{/* Email input skeleton */}
|
|
204
|
-
<
|
|
205
|
+
<UnifiedSkeleton className="h-12 w-full rounded-[6px] border border-ods-border" />
|
|
205
206
|
{/* Phone input skeleton */}
|
|
206
207
|
<div className="flex w-full gap-[var(--spacing-system-xs)]">
|
|
207
|
-
<
|
|
208
|
-
<
|
|
208
|
+
<UnifiedSkeleton className="h-12 w-[130px] shrink-0 rounded-[6px] border border-ods-border" />
|
|
209
|
+
<UnifiedSkeleton className="h-12 flex-1 rounded-[6px] border border-ods-border" />
|
|
209
210
|
</div>
|
|
210
211
|
{/* Disclaimer + button skeleton */}
|
|
211
212
|
<div className="flex w-full flex-col items-end gap-[var(--spacing-system-m)]">
|
|
212
|
-
<
|
|
213
|
-
<
|
|
213
|
+
<UnifiedSkeleton className="h-auto w-full rounded-[6px] border border-ods-border px-4 py-6" />
|
|
214
|
+
<UnifiedSkeleton className="h-12 w-[200px] rounded-[6px] border border-ods-border" />
|
|
214
215
|
</div>
|
|
215
216
|
</div>
|
|
216
217
|
);
|
|
@@ -59,6 +59,7 @@ import { WindowsLogoGreyIcon } from '../icons-v2-generated/brand-logos/windows-l
|
|
|
59
59
|
import { Download01Icon } from '../icons-v2-generated/interface/download-01-icon';
|
|
60
60
|
import { PageShell } from '../layout/article-detail-layout';
|
|
61
61
|
import { PageLayout } from '../layout/page-layout';
|
|
62
|
+
import { LoadingRegion } from '../loading/loading-region';
|
|
62
63
|
import { UnifiedSkeleton } from '../loading/unified-skeleton';
|
|
63
64
|
import { Button } from '../ui/button/button';
|
|
64
65
|
import { LoadError } from '../ui/error-state';
|
|
@@ -248,7 +249,7 @@ function WebCard({ web }: { web: DownloadAppsWebOption }) {
|
|
|
248
249
|
/** A section's cards while the server's answer loads: the same grid and card frame, a button's box in each. */
|
|
249
250
|
function CardsSkeleton({ label }: { label: string }) {
|
|
250
251
|
return (
|
|
251
|
-
<
|
|
252
|
+
<LoadingRegion label={label} className={CARDS_GRID_CLASS}>
|
|
252
253
|
{[0, 1].map(card => (
|
|
253
254
|
<div key={card} className={CARD_CLASS}>
|
|
254
255
|
<UnifiedSkeleton className="h-6 w-32 rounded" />
|
|
@@ -256,7 +257,7 @@ function CardsSkeleton({ label }: { label: string }) {
|
|
|
256
257
|
<UnifiedSkeleton className="h-14 w-full rounded-md" />
|
|
257
258
|
</div>
|
|
258
259
|
))}
|
|
259
|
-
</
|
|
260
|
+
</LoadingRegion>
|
|
260
261
|
);
|
|
261
262
|
}
|
|
262
263
|
|
|
@@ -376,10 +376,14 @@ export function TrustCenterPageSkeleton({
|
|
|
376
376
|
backButton = false,
|
|
377
377
|
title = TRUST_CENTER_TITLE,
|
|
378
378
|
subtitle = TRUST_CENTER_TAGLINE,
|
|
379
|
-
|
|
379
|
+
region = true,
|
|
380
|
+
}: Pick<TrustCenterPageProps, 'shell' | 'backButton' | 'title' | 'subtitle'> & {
|
|
381
|
+
/** The loading state announces itself (`LoadingRegion`). `false` inside another loading region. Default `true`. */
|
|
382
|
+
region?: boolean;
|
|
383
|
+
}) {
|
|
380
384
|
return (
|
|
381
385
|
<TrustCenterChrome shell={shell} title={title} subtitle={subtitle} backButton={backButton}>
|
|
382
|
-
<TrustCenterSkeleton />
|
|
386
|
+
<TrustCenterSkeleton region={region} />
|
|
383
387
|
</TrustCenterChrome>
|
|
384
388
|
);
|
|
385
389
|
}
|
|
@@ -46,6 +46,7 @@ import { ShieldCheckIcon } from '../icons-v2-generated/security/shield-check-ico
|
|
|
46
46
|
import { CheckIcon } from '../icons-v2-generated/signs-and-symbols/check-icon';
|
|
47
47
|
import { SECTION_HEADING_CLASS } from '../layout/page-heading';
|
|
48
48
|
import { ListEmptyState } from '../list-empty-state';
|
|
49
|
+
import { LoadingRegion } from '../loading/loading-region';
|
|
49
50
|
import { TextSkeleton, UnifiedSkeleton } from '../loading/unified-skeleton';
|
|
50
51
|
import { Button } from '../ui/button/button';
|
|
51
52
|
import { ComplianceLogo } from '../ui/compliance-badge';
|
|
@@ -666,7 +667,12 @@ function SectionRailSkeleton() {
|
|
|
666
667
|
* the content replaces it. The status row, then Compliance, Controls and
|
|
667
668
|
* Documents (what fills the first screens), beside the section rail.
|
|
668
669
|
*/
|
|
669
|
-
export function TrustCenterSkeleton(
|
|
670
|
+
export function TrustCenterSkeleton({
|
|
671
|
+
region = true,
|
|
672
|
+
}: {
|
|
673
|
+
/** The loading state announces itself (`LoadingRegion`). `false` inside another loading region. Default `true`. */
|
|
674
|
+
region?: boolean;
|
|
675
|
+
} = {}) {
|
|
670
676
|
return (
|
|
671
677
|
<>
|
|
672
678
|
<div className={TRUST_STATUS_ROW_CLASS} aria-hidden="true">
|
|
@@ -683,7 +689,7 @@ export function TrustCenterSkeleton() {
|
|
|
683
689
|
<TextSkeleton.Body className="w-44" />
|
|
684
690
|
</div>
|
|
685
691
|
</div>
|
|
686
|
-
<
|
|
692
|
+
<LoadingRegion label="Loading the trust center" announce={region} className={TRUST_BODY_GRID_CLASS}>
|
|
687
693
|
<div className={TRUST_SECTIONS_COLUMN_CLASS}>
|
|
688
694
|
<SkeletonSection id="compliance">
|
|
689
695
|
<StackedRowsPanel rows={skeletonRows(3, { mark: 'logo', action: 'badge' })} />
|
|
@@ -698,7 +704,7 @@ export function TrustCenterSkeleton() {
|
|
|
698
704
|
<aside className="hidden content-lg:block" aria-hidden="true">
|
|
699
705
|
<SectionRailSkeleton />
|
|
700
706
|
</aside>
|
|
701
|
-
</
|
|
707
|
+
</LoadingRegion>
|
|
702
708
|
</>
|
|
703
709
|
);
|
|
704
710
|
}
|
package/src/components/index.ts
CHANGED
|
@@ -18,7 +18,6 @@ export * from './comment-card';
|
|
|
18
18
|
export * from './comment-composer';
|
|
19
19
|
export * from './comment-thread';
|
|
20
20
|
export * from './content-loading-container';
|
|
21
|
-
export * from './dynamic-skeleton';
|
|
22
21
|
export * from './empty-state';
|
|
23
22
|
export * from './list-empty-state';
|
|
24
23
|
export * from './faq-accordion';
|
|
@@ -57,7 +56,6 @@ export * from './social-icon-row';
|
|
|
57
56
|
export * from './user-display';
|
|
58
57
|
export * from './vendor-display-button';
|
|
59
58
|
export * from './vendor-icon';
|
|
60
|
-
export * from './vendor-page-skeleton';
|
|
61
59
|
export * from './vendor-tag';
|
|
62
60
|
export * from './why-it-matters';
|
|
63
61
|
export * from './yes-no-display';
|
|
@@ -84,6 +84,7 @@
|
|
|
84
84
|
import type React from 'react';
|
|
85
85
|
import { useIsTruncated } from '../../hooks/ui/use-is-truncated';
|
|
86
86
|
import { cn } from '../../utils/cn';
|
|
87
|
+
import { UnifiedSkeleton } from '../loading/unified-skeleton';
|
|
87
88
|
import type { ActionsMenuGroup } from '../ui/actions-menu';
|
|
88
89
|
import { EntityImage } from '../ui/entity-image';
|
|
89
90
|
import { FloatingTooltip } from '../ui/floating-tooltip';
|
|
@@ -159,21 +160,14 @@ export interface TitleBlockProps {
|
|
|
159
160
|
}
|
|
160
161
|
|
|
161
162
|
/**
|
|
162
|
-
*
|
|
163
|
-
* `h1`/`p
|
|
164
|
-
* typography line-height,
|
|
163
|
+
* The inline text skeleton, used only in `loading` mode, placed directly inside the real
|
|
164
|
+
* `h1`/`p`: a single `inline-block` `UnifiedSkeleton` span whose height is intentionally SHORTER
|
|
165
|
+
* than the typography line-height, on the default baseline alignment. That way the element's
|
|
165
166
|
* own line-box STRUT (text-h2 → 40px, text-h6 → 20px) sets the height exactly as it would for
|
|
166
|
-
* real text
|
|
167
|
+
* real text: the bar fits within the ascent and never inflates the line. So a loading header
|
|
167
168
|
* is pixel-identical in height to the loaded one. Phrasing-valid (`span` only).
|
|
168
169
|
*/
|
|
169
|
-
|
|
170
|
-
return (
|
|
171
|
-
<span
|
|
172
|
-
aria-hidden
|
|
173
|
-
className={cn('inline-block max-w-full animate-pulse rounded-md bg-ods-border', widthClass, heightClass)}
|
|
174
|
-
/>
|
|
175
|
-
);
|
|
176
|
-
}
|
|
170
|
+
const TITLE_TEXT_SKELETON_CLASS = 'inline-block max-w-full rounded-md';
|
|
177
171
|
|
|
178
172
|
/**
|
|
179
173
|
* Bar geometry per title size, following the ODS type scale across breakpoints
|
|
@@ -184,7 +178,7 @@ function TitleTextSkeleton({ widthClass, heightClass }: { widthClass: string; he
|
|
|
184
178
|
* 32/40 from tablet up. `text-h1` scales at both breakpoints (40 → 48 → 56), so
|
|
185
179
|
* its bar does too — reusing the h2 bar there would leave a stamp-sized smudge
|
|
186
180
|
* inside a 64px line. Heights stay well under the line box's ascent on purpose;
|
|
187
|
-
* see `
|
|
181
|
+
* see `TITLE_TEXT_SKELETON_CLASS` for why that is what keeps the header height honest.
|
|
188
182
|
*/
|
|
189
183
|
const TITLE_SKELETON_SIZE = {
|
|
190
184
|
h1: { width: 'w-56 content-md:w-80 content-lg:w-96', height: 'h-7 content-md:h-8 content-lg:h-9' },
|
|
@@ -226,7 +220,11 @@ export function TitleBlock({
|
|
|
226
220
|
loading ? null : subtitle,
|
|
227
221
|
);
|
|
228
222
|
const titleNode = loading ? (
|
|
229
|
-
<
|
|
223
|
+
<UnifiedSkeleton
|
|
224
|
+
as="span"
|
|
225
|
+
aria-hidden
|
|
226
|
+
className={cn(TITLE_TEXT_SKELETON_CLASS, skeletonSize.width, skeletonSize.height)}
|
|
227
|
+
/>
|
|
230
228
|
) : (
|
|
231
229
|
title
|
|
232
230
|
);
|
|
@@ -307,7 +305,11 @@ export function TitleBlock({
|
|
|
307
305
|
aria-hidden={!loading && !subtitle ? true : undefined}
|
|
308
306
|
>
|
|
309
307
|
{loading ? (
|
|
310
|
-
<
|
|
308
|
+
<UnifiedSkeleton
|
|
309
|
+
as="span"
|
|
310
|
+
aria-hidden
|
|
311
|
+
className={cn(TITLE_TEXT_SKELETON_CLASS, 'h-2.5 w-28 content-md:h-3 content-md:w-36')}
|
|
312
|
+
/>
|
|
311
313
|
) : (
|
|
312
314
|
subtitle || '\u00A0'
|
|
313
315
|
)}
|