@flamingo-stack/openframe-frontend-core 0.0.747 → 0.0.749
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-4DT5YXTM.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-O6QQ44I3.cjs → chunk-45YRDD7W.cjs} +22 -19
- package/dist/{chunk-U6XWGK53.cjs → chunk-ALPRQ3ZX.cjs} +56 -46
- package/dist/{chunk-4AWI6CCU.cjs → chunk-BN6NA5RM.cjs} +56 -53
- package/dist/{chunk-HNLI4OU5.cjs → chunk-C6LPOYDM.cjs} +24 -24
- package/dist/{chunk-4MGZYY6U.cjs → chunk-CLAJIQ7E.cjs} +26 -18
- package/dist/{chunk-WY4FKKCV.cjs → chunk-CXV7VBSI.cjs} +104 -118
- package/dist/{chunk-QPSQ5WLG.cjs → chunk-DGEB5GUZ.cjs} +2 -2
- package/dist/{chunk-6RTHHU3S.cjs → chunk-E3KFEOFA.cjs} +9 -6
- package/dist/{chunk-PSSGIZXZ.cjs → chunk-FHT7SMA7.cjs} +49 -46
- package/dist/{chunk-TYW7NBP7.cjs → chunk-GOFEOCQN.cjs} +44 -27
- package/dist/{chunk-HTMHDEIV.cjs → chunk-HOEVD6EN.cjs} +4 -4
- package/dist/{chunk-2CEQGGRN.cjs → chunk-KRAQEZPB.cjs} +48 -40
- package/dist/{chunk-AKTPO2DN.cjs → chunk-L4UI63K6.cjs} +2 -2
- package/dist/{chunk-FCQCEQBY.cjs → chunk-LQT2ITMG.cjs} +6 -6
- 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-IJA3OZWF.cjs → chunk-OZLIKBKC.cjs} +24 -24
- package/dist/{chunk-B27QEHYR.cjs → chunk-P6F6PHVK.cjs} +9 -9
- package/dist/chunk-RB6BSE3O.cjs +21 -0
- package/dist/{chunk-R3FXJXSQ.cjs → chunk-SECT4H34.cjs} +1780 -2076
- package/dist/{chunk-LLAKQT3B.cjs → chunk-SGL47BS2.cjs} +12 -12
- package/dist/{chunk-PIQRV4EQ.cjs → chunk-SOPVUD2Y.cjs} +3 -3
- package/dist/chunk-UGCRLRCT.cjs +25 -0
- package/dist/{chunk-7Y5U3Y4S.cjs → chunk-V3UJ6NDR.cjs} +281 -462
- package/dist/{chunk-JPSMPXCH.cjs → chunk-VEVIMDNK.cjs} +137 -122
- package/dist/{chunk-C7NTL2GV.cjs → chunk-WZX26ODJ.cjs} +121 -121
- package/dist/{chunk-YIRX6C7V.cjs → chunk-XJ3J4UIS.cjs} +57 -22
- package/dist/{chunk-MA7T36JY.cjs → chunk-ZLF55RDR.cjs} +103 -98
- package/dist/{cloud-tenants-QJZIF2JS.cjs → cloud-tenants-2MYFHEYY.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/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-V55KQCAL.cjs → devices-FVXAGKVX.cjs} +17 -15
- package/dist/{embeddable-chat-5CDR4I6E.cjs → embeddable-chat-SNYQSMS7.cjs} +79 -77
- package/dist/index.cjs +24 -31
- package/dist/{knowledge-S3VGDRKR.cjs → knowledge-ZL3ZHBSL.cjs} +17 -15
- package/dist/{logs-K5E2BGZE.cjs → logs-KQCWDIOB.cjs} +24 -22
- package/dist/{policies-BWU4FRFE.cjs → policies-ARDCZ3CT.cjs} +20 -18
- package/dist/{remote-session-IYT4LWJC.cjs → remote-session-ZKP2W3IS.cjs} +9 -7
- package/dist/{scripts-25UPGXZU.cjs → scripts-ZAMVWCY4.cjs} +23 -21
- package/dist/{software-update-F6UC7ULZ.cjs → software-update-6F7BIYS3.cjs} +20 -18
- package/dist/{tickets-board-4MT6ZB4F.cjs → tickets-board-BNW4AYFL.cjs} +11 -10
- package/dist/utils/index.cjs +49 -48
- package/dist/utils/markdown-to-plain.d.ts.map +1 -1
- package/dist/utils/markdown-to-plain.js +12 -7
- package/package.json +7 -2
- 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/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/src/utils/markdown-to-plain.ts +25 -16
- 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
|
@@ -6,7 +6,8 @@ import { cn } from '../../utils/cn';
|
|
|
6
6
|
import { EntityIcon } from '../icon-display';
|
|
7
7
|
import { Chevron02RightIcon } from '../icons-v2-generated/arrows/chevron-02-right-icon';
|
|
8
8
|
import { CheckIcon } from '../icons-v2-generated/signs-and-symbols/check-icon';
|
|
9
|
-
import {
|
|
9
|
+
import { LoadingRegion } from '../loading/loading-region';
|
|
10
|
+
import { UnifiedSkeleton } from '../loading/unified-skeleton';
|
|
10
11
|
import { SnapCarousel, SnapCarouselControlsSkeleton } from '../ui/snap-carousel';
|
|
11
12
|
import { TruncateText } from '../ui/truncate-text';
|
|
12
13
|
|
|
@@ -167,25 +168,28 @@ function Example({
|
|
|
167
168
|
);
|
|
168
169
|
}
|
|
169
170
|
|
|
170
|
-
/**
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
</div>
|
|
176
|
-
);
|
|
177
|
-
}
|
|
171
|
+
/**
|
|
172
|
+
* A text placeholder in its line's own box (`text-h…` on the line, the bar inline in it), so a
|
|
173
|
+
* placeholder line is the loaded line's height.
|
|
174
|
+
*/
|
|
175
|
+
const LINE_SKELETON_CLASS = 'inline-block h-[0.7em] rounded align-middle';
|
|
178
176
|
|
|
179
177
|
/** The example's two turns, in the loaded example's own box. */
|
|
180
178
|
function ExampleSkeleton({ className }: { className?: string }) {
|
|
181
179
|
const turn = (first: boolean) => (
|
|
182
180
|
<div className={cn('flex min-w-0 gap-2.5', !first && 'border-t border-ods-border pt-3')}>
|
|
183
|
-
<
|
|
181
|
+
<UnifiedSkeleton className="size-6 shrink-0 rounded-full" />
|
|
184
182
|
<div className="flex min-w-0 flex-1 flex-col gap-1">
|
|
185
|
-
<
|
|
183
|
+
<div className="text-h6">
|
|
184
|
+
<UnifiedSkeleton as="span" className={cn(LINE_SKELETON_CLASS, 'w-28')} />
|
|
185
|
+
</div>
|
|
186
186
|
<div className="min-h-[2lh] text-h4">
|
|
187
|
-
<
|
|
188
|
-
|
|
187
|
+
<div className="text-h4">
|
|
188
|
+
<UnifiedSkeleton as="span" className={cn(LINE_SKELETON_CLASS, 'w-full')} />
|
|
189
|
+
</div>
|
|
190
|
+
<div className="text-h4">
|
|
191
|
+
<UnifiedSkeleton as="span" className={cn(LINE_SKELETON_CLASS, 'w-2/3')} />
|
|
192
|
+
</div>
|
|
189
193
|
</div>
|
|
190
194
|
</div>
|
|
191
195
|
</div>
|
|
@@ -207,11 +211,15 @@ function ExampleSkeleton({ className }: { className?: string }) {
|
|
|
207
211
|
function JobHeadSkeleton() {
|
|
208
212
|
return (
|
|
209
213
|
<>
|
|
210
|
-
<
|
|
214
|
+
<UnifiedSkeleton className="size-9 shrink-0 rounded-lg" />
|
|
211
215
|
<div className="flex min-w-0 flex-1 flex-col">
|
|
212
|
-
<
|
|
216
|
+
<div className="text-h4">
|
|
217
|
+
<UnifiedSkeleton as="span" className={cn(LINE_SKELETON_CLASS, 'w-32')} />
|
|
218
|
+
</div>
|
|
213
219
|
<div className="mt-0.5">
|
|
214
|
-
<
|
|
220
|
+
<div className="text-h6">
|
|
221
|
+
<UnifiedSkeleton as="span" className={cn(LINE_SKELETON_CLASS, 'w-40')} />
|
|
222
|
+
</div>
|
|
215
223
|
</div>
|
|
216
224
|
</div>
|
|
217
225
|
</>
|
|
@@ -225,9 +233,18 @@ function JobHeadSkeleton() {
|
|
|
225
233
|
* first card over the carousel's controls. Every box is the loaded one's, so
|
|
226
234
|
* nothing moves when the jobs arrive.
|
|
227
235
|
*/
|
|
228
|
-
export function CapabilityExplorerSkeleton({
|
|
236
|
+
export function CapabilityExplorerSkeleton({
|
|
237
|
+
region = true,
|
|
238
|
+
className,
|
|
239
|
+
count = 8,
|
|
240
|
+
}: {
|
|
241
|
+
/** The loading state announces itself (`LoadingRegion`). `false` inside another loading region. Default `true`. */
|
|
242
|
+
region?: boolean;
|
|
243
|
+
className?: string;
|
|
244
|
+
count?: number;
|
|
245
|
+
}) {
|
|
229
246
|
return (
|
|
230
|
-
<
|
|
247
|
+
<LoadingRegion label="Loading capabilities" announce={region} className={className}>
|
|
231
248
|
<div className="content-lg:hidden">
|
|
232
249
|
<div className="flex gap-[var(--spacing-system-sf)] overflow-hidden">
|
|
233
250
|
<div
|
|
@@ -240,10 +257,14 @@ export function CapabilityExplorerSkeleton({ className, count = 8 }: { className
|
|
|
240
257
|
<JobHeadSkeleton />
|
|
241
258
|
</div>
|
|
242
259
|
<div className="min-h-[3lh] text-h6">
|
|
243
|
-
<
|
|
244
|
-
|
|
260
|
+
<div className="text-h6">
|
|
261
|
+
<UnifiedSkeleton as="span" className={cn(LINE_SKELETON_CLASS, 'w-full')} />
|
|
262
|
+
</div>
|
|
263
|
+
<div className="text-h6">
|
|
264
|
+
<UnifiedSkeleton as="span" className={cn(LINE_SKELETON_CLASS, 'w-5/6')} />
|
|
265
|
+
</div>
|
|
245
266
|
</div>
|
|
246
|
-
<
|
|
267
|
+
<UnifiedSkeleton className="h-[300px] shrink-0 rounded-lg" />
|
|
247
268
|
<ExampleSkeleton className="shrink-0" />
|
|
248
269
|
</div>
|
|
249
270
|
</div>
|
|
@@ -273,36 +294,46 @@ export function CapabilityExplorerSkeleton({ className, count = 8 }: { className
|
|
|
273
294
|
<div className={cn('grid shrink-0 grid-cols-[minmax(0,1fr)_minmax(0,380px)] gap-8', PANEL_TOP_HEIGHT_CLASS)}>
|
|
274
295
|
<div className="flex min-w-0 flex-col overflow-hidden">
|
|
275
296
|
<div className="mb-2">
|
|
276
|
-
<
|
|
297
|
+
<div className="text-h2">
|
|
298
|
+
<UnifiedSkeleton as="span" className={cn(LINE_SKELETON_CLASS, 'w-64')} />
|
|
299
|
+
</div>
|
|
277
300
|
</div>
|
|
278
301
|
<div className="min-h-[3lh] text-h4">
|
|
279
|
-
<
|
|
280
|
-
|
|
302
|
+
<div className="text-h4">
|
|
303
|
+
<UnifiedSkeleton as="span" className={cn(LINE_SKELETON_CLASS, 'w-full')} />
|
|
304
|
+
</div>
|
|
305
|
+
<div className="text-h4">
|
|
306
|
+
<UnifiedSkeleton as="span" className={cn(LINE_SKELETON_CLASS, 'w-4/5')} />
|
|
307
|
+
</div>
|
|
281
308
|
</div>
|
|
282
309
|
<div className="mt-auto grid grid-cols-1 gap-2">
|
|
283
310
|
{[0, 1, 2].map(i => (
|
|
284
311
|
<div key={i} className="flex min-w-0 items-center gap-2.5">
|
|
285
|
-
<
|
|
286
|
-
<
|
|
312
|
+
<UnifiedSkeleton className="size-4 shrink-0 rounded-full" />
|
|
313
|
+
<div className="text-h6">
|
|
314
|
+
<UnifiedSkeleton as="span" className={cn(LINE_SKELETON_CLASS, i === 1 ? 'w-56' : 'w-48')} />
|
|
315
|
+
</div>
|
|
287
316
|
</div>
|
|
288
317
|
))}
|
|
289
318
|
</div>
|
|
290
319
|
</div>
|
|
291
320
|
<ExampleSkeleton />
|
|
292
321
|
</div>
|
|
293
|
-
<
|
|
322
|
+
<UnifiedSkeleton className={cn('shrink-0 rounded-xl', PANEL_SCREEN_HEIGHT_CLASS)} />
|
|
294
323
|
<div
|
|
295
324
|
className={cn(
|
|
296
325
|
'flex min-w-0 shrink-0 items-center gap-[var(--spacing-system-sf)]',
|
|
297
326
|
PANEL_FOOTER_HEIGHT_CLASS,
|
|
298
327
|
)}
|
|
299
328
|
>
|
|
300
|
-
<
|
|
301
|
-
|
|
329
|
+
<div className="text-h5">
|
|
330
|
+
<UnifiedSkeleton as="span" className={cn(LINE_SKELETON_CLASS, 'w-16')} />
|
|
331
|
+
</div>
|
|
332
|
+
<UnifiedSkeleton className="h-7 w-36 rounded-md" />
|
|
302
333
|
</div>
|
|
303
334
|
</div>
|
|
304
335
|
</div>
|
|
305
|
-
</
|
|
336
|
+
</LoadingRegion>
|
|
306
337
|
);
|
|
307
338
|
}
|
|
308
339
|
|
|
@@ -10,7 +10,13 @@ const NO_DEVICES: never[] = [];
|
|
|
10
10
|
* whichever the caller hands its real `DeviceSelector` it must hand this one too,
|
|
11
11
|
* or the two disagree on how tall the block is.
|
|
12
12
|
*/
|
|
13
|
-
type DeviceSelectorSkeletonProps = Pick<
|
|
13
|
+
type DeviceSelectorSkeletonProps = Pick<
|
|
14
|
+
DeviceSelectorProps,
|
|
15
|
+
'showSelectionModeRadio' | 'singleSelect' | 'hideColumns'
|
|
16
|
+
> & {
|
|
17
|
+
/** The loading state announces itself (`LoadingRegion`). `false` inside another loading region. Default `true`. */
|
|
18
|
+
region?: boolean;
|
|
19
|
+
};
|
|
14
20
|
|
|
15
21
|
/**
|
|
16
22
|
* Suspense fallback for a `DeviceSelector` whose devices come from a suspending
|
|
@@ -27,6 +33,6 @@ type DeviceSelectorSkeletonProps = Pick<DeviceSelectorProps, 'showSelectionModeR
|
|
|
27
33
|
* stands in for, and everything below it jumped down the moment the devices
|
|
28
34
|
* landed.
|
|
29
35
|
*/
|
|
30
|
-
export function DeviceSelectorSkeleton(props: DeviceSelectorSkeletonProps) {
|
|
31
|
-
return <DeviceSelector {...props} devices={NO_DEVICES} loading disabled />;
|
|
36
|
+
export function DeviceSelectorSkeleton({ region = true, ...props }: DeviceSelectorSkeletonProps) {
|
|
37
|
+
return <DeviceSelector {...props} devices={NO_DEVICES} loading loadingRegion={region} disabled />;
|
|
32
38
|
}
|
|
@@ -94,6 +94,7 @@ function CustomerCell({ device }: { device: DeviceRow }) {
|
|
|
94
94
|
export function DeviceSelector<T extends DeviceRow = DeviceRow>({
|
|
95
95
|
devices,
|
|
96
96
|
loading,
|
|
97
|
+
loadingRegion,
|
|
97
98
|
selectedIds: selectedIdsProp,
|
|
98
99
|
onSelectionChange: onSelectionChangeProp,
|
|
99
100
|
getDeviceKey: getDeviceKeyProp,
|
|
@@ -708,6 +709,7 @@ export function DeviceSelector<T extends DeviceRow = DeviceRow>({
|
|
|
708
709
|
)}
|
|
709
710
|
<DataTable.Body
|
|
710
711
|
loading={loading}
|
|
712
|
+
loadingRegion={loadingRegion}
|
|
711
713
|
skeletonRows={8}
|
|
712
714
|
emptyMessage={
|
|
713
715
|
isCriteria
|
|
@@ -68,6 +68,8 @@ export interface DeviceSelectorProps<T extends DeviceRow = DeviceRow> {
|
|
|
68
68
|
devices: T[];
|
|
69
69
|
/** Whether the device list is loading. */
|
|
70
70
|
loading: boolean;
|
|
71
|
+
/** The loading state announces itself ("Loading results"). `false` inside another loading region. Default `true`. */
|
|
72
|
+
loadingRegion?: boolean;
|
|
71
73
|
/**
|
|
72
74
|
* Currently selected device keys. Optional so a skeleton can render the real
|
|
73
75
|
* picker with nothing selected, the component falls back to an empty set and
|
|
@@ -16,6 +16,8 @@ export interface DevicesGridProps<T extends DeviceRow = DeviceRow> {
|
|
|
16
16
|
isFetchingNextPage?: boolean;
|
|
17
17
|
sentinelRef?: React.RefObject<HTMLDivElement | null>;
|
|
18
18
|
emptyMessage?: string;
|
|
19
|
+
/** The loading state announces itself ("Loading devices"). `false` inside another loading region. Default `true`. */
|
|
20
|
+
loadingRegion?: boolean;
|
|
19
21
|
}
|
|
20
22
|
|
|
21
23
|
export function DevicesGrid<T extends DeviceRow = DeviceRow>({
|
|
@@ -25,6 +27,7 @@ export function DevicesGrid<T extends DeviceRow = DeviceRow>({
|
|
|
25
27
|
isFetchingNextPage,
|
|
26
28
|
sentinelRef,
|
|
27
29
|
emptyMessage = 'No devices found. Try adjusting your search or filters.',
|
|
30
|
+
loadingRegion = true,
|
|
28
31
|
}: DevicesGridProps<T>) {
|
|
29
32
|
const router = useRouter();
|
|
30
33
|
const { getDeviceHref } = useDevicesViewConfig();
|
|
@@ -37,7 +40,7 @@ export function DevicesGrid<T extends DeviceRow = DeviceRow>({
|
|
|
37
40
|
return (
|
|
38
41
|
<div className="space-y-4">
|
|
39
42
|
{isLoading && devices.length === 0 ? (
|
|
40
|
-
<DeviceCardSkeletonGrid count={12} />
|
|
43
|
+
<DeviceCardSkeletonGrid count={12} region={loadingRegion} />
|
|
41
44
|
) : devices.length === 0 ? (
|
|
42
45
|
<div className="flex h-64 items-center justify-center rounded-[6px] border border-ods-border bg-ods-card">
|
|
43
46
|
<p className="text-ods-text-secondary">{emptyMessage}</p>
|
|
@@ -70,6 +70,11 @@ export interface DevicesPanelViewProps<T extends DeviceRow = DeviceRow> {
|
|
|
70
70
|
* are the real ones, locked, and only the rows are skeletons.
|
|
71
71
|
*/
|
|
72
72
|
loading?: boolean;
|
|
73
|
+
/**
|
|
74
|
+
* The loading state announces itself, once ("Loading devices…"; the table or grid inside it stays quiet).
|
|
75
|
+
* `false` inside another loading region. Default `true`.
|
|
76
|
+
*/
|
|
77
|
+
loadingRegion?: boolean;
|
|
73
78
|
/** The rows on screen answer the previous narrowing while the next loads: dimmed, not replaced. */
|
|
74
79
|
isNarrowing?: boolean;
|
|
75
80
|
/** Server-side total for the current narrowing. */
|
|
@@ -127,6 +132,7 @@ export function DevicesPanelView<T extends DeviceRow = DeviceRow>({
|
|
|
127
132
|
actions,
|
|
128
133
|
devices,
|
|
129
134
|
loading = false,
|
|
135
|
+
loadingRegion = true,
|
|
130
136
|
isNarrowing = false,
|
|
131
137
|
totalCount,
|
|
132
138
|
deviceFilters = null,
|
|
@@ -157,6 +163,7 @@ export function DevicesPanelView<T extends DeviceRow = DeviceRow>({
|
|
|
157
163
|
<DevicesTableBody
|
|
158
164
|
devices={devices}
|
|
159
165
|
isLoading={loading}
|
|
166
|
+
loadingRegion={false}
|
|
160
167
|
emptyMessage={loading ? '' : emptyMessage}
|
|
161
168
|
skeletonRows={10}
|
|
162
169
|
stickyHeaderOffset="top-[96px]"
|
|
@@ -198,6 +205,7 @@ export function DevicesPanelView<T extends DeviceRow = DeviceRow>({
|
|
|
198
205
|
<DevicesGrid
|
|
199
206
|
devices={devices}
|
|
200
207
|
isLoading={loading}
|
|
208
|
+
loadingRegion={false}
|
|
201
209
|
hasNextPage={hasNextPage}
|
|
202
210
|
isFetchingNextPage={isFetchingNextPage}
|
|
203
211
|
sentinelRef={gridSentinelRef}
|
|
@@ -227,7 +235,7 @@ export function DevicesPanelView<T extends DeviceRow = DeviceRow>({
|
|
|
227
235
|
contentClassName="flex flex-col"
|
|
228
236
|
>
|
|
229
237
|
{headerSlot}
|
|
230
|
-
{loading && (
|
|
238
|
+
{loading && loadingRegion && (
|
|
231
239
|
<span role="status" className="sr-only">
|
|
232
240
|
Loading devices…
|
|
233
241
|
</span>
|
|
@@ -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} />
|