@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
|
@@ -2,6 +2,7 @@ import type { ReactNode } from 'react';
|
|
|
2
2
|
import Link from '../../embed-shims/next-link';
|
|
3
3
|
import { cn } from '../../utils/cn';
|
|
4
4
|
import { QuestionCircleIcon } from '../icons-v2-generated/signs-and-symbols/question-circle-icon';
|
|
5
|
+
import { UnifiedSkeleton } from '../loading/unified-skeleton';
|
|
5
6
|
import { CircularProgress, type CircularProgressOverflow, type CircularProgressVariant } from './circular-progress';
|
|
6
7
|
import { FloatingTooltip } from './floating-tooltip';
|
|
7
8
|
import { Tag } from './tag';
|
|
@@ -84,10 +85,24 @@ export interface DashboardInfoCardProps {
|
|
|
84
85
|
*/
|
|
85
86
|
caption?: ReactNode;
|
|
86
87
|
/**
|
|
87
|
-
* The figure is still being fetched: the SAME card,
|
|
88
|
-
*
|
|
88
|
+
* The figure is still being fetched: the SAME card, so the loaded card replaces it in
|
|
89
|
+
* place. `title` / `titleSlot` / `titleTag` / `icon` are drawn as they are (they are known
|
|
90
|
+
* before the data; with neither title a bar holds the title line), the value and caption are
|
|
91
|
+
* bars of their own line heights, the progress ring is held when `showProgress` is set, and
|
|
92
|
+
* the percentage when `loadingShowsPercentage` is set, the sub-value when `loadingShowsSubValue` is set.
|
|
89
93
|
*/
|
|
90
94
|
loading?: boolean;
|
|
95
|
+
/**
|
|
96
|
+
* While `loading`: hold the percentage's box (plain "(NN%)" text, or a `Tag` when
|
|
97
|
+
* `percentageDisplay` / `progressVariant` would draw one), because the loaded card will show
|
|
98
|
+
* a percentage. Default `false`.
|
|
99
|
+
*/
|
|
100
|
+
loadingShowsPercentage?: boolean;
|
|
101
|
+
/**
|
|
102
|
+
* While `loading`: hold the `subValue`'s box (one `text-h6` line beside the value) for a card
|
|
103
|
+
* whose loaded state will carry one. Default `false`.
|
|
104
|
+
*/
|
|
105
|
+
loadingShowsSubValue?: boolean;
|
|
91
106
|
}
|
|
92
107
|
|
|
93
108
|
export function DashboardInfoCard({
|
|
@@ -109,17 +124,30 @@ export function DashboardInfoCard({
|
|
|
109
124
|
subValue,
|
|
110
125
|
caption,
|
|
111
126
|
loading = false,
|
|
127
|
+
loadingShowsPercentage = false,
|
|
128
|
+
loadingShowsSubValue = false,
|
|
112
129
|
}: DashboardInfoCardProps) {
|
|
113
130
|
const formattedValue = typeof value === 'number' ? value.toLocaleString() : value;
|
|
114
131
|
|
|
132
|
+
const percentageAsTag =
|
|
133
|
+
percentageDisplay === 'tag' ||
|
|
134
|
+
(percentageDisplay === 'auto' && (progressVariant === 'warning' || progressVariant === 'error'));
|
|
135
|
+
|
|
115
136
|
const renderPercentage = () => {
|
|
137
|
+
if (loading) {
|
|
138
|
+
if (!loadingShowsPercentage) return null;
|
|
139
|
+
// The box the loaded percentage takes: a `Tag` (h-8) or one `text-h4` line.
|
|
140
|
+
return percentageAsTag ? (
|
|
141
|
+
<UnifiedSkeleton className="h-8 w-12 shrink-0 rounded-md" />
|
|
142
|
+
) : (
|
|
143
|
+
<p className="text-h4">
|
|
144
|
+
<UnifiedSkeleton as="span" className="block h-[1lh] w-12 rounded" />
|
|
145
|
+
</p>
|
|
146
|
+
);
|
|
147
|
+
}
|
|
116
148
|
if (percentage === undefined) return null;
|
|
117
149
|
|
|
118
|
-
|
|
119
|
-
percentageDisplay === 'tag' ||
|
|
120
|
-
(percentageDisplay === 'auto' && (progressVariant === 'warning' || progressVariant === 'error'));
|
|
121
|
-
|
|
122
|
-
if (asTag) {
|
|
150
|
+
if (percentageAsTag) {
|
|
123
151
|
const tagVariant =
|
|
124
152
|
progressVariant === 'warning' || progressVariant === 'error'
|
|
125
153
|
? progressVariant
|
|
@@ -133,13 +161,13 @@ export function DashboardInfoCard({
|
|
|
133
161
|
};
|
|
134
162
|
|
|
135
163
|
const renderProgress = () => {
|
|
136
|
-
if (!showProgress || percentage === undefined) return null;
|
|
164
|
+
if (!showProgress || (percentage === undefined && !loading)) return null;
|
|
137
165
|
|
|
138
166
|
// Keep the ring proportionally weighted (10px stroke at the 56px default).
|
|
139
167
|
const strokeFor = (size: number) => Math.max(2, Math.round((size * 10) / 56));
|
|
140
168
|
|
|
141
169
|
const common = {
|
|
142
|
-
percentage,
|
|
170
|
+
percentage: percentage ?? 0,
|
|
143
171
|
variant: progressVariant,
|
|
144
172
|
overflow: progressOverflow,
|
|
145
173
|
showLabel: false,
|
|
@@ -174,6 +202,23 @@ export function DashboardInfoCard({
|
|
|
174
202
|
rings.push({ key: 'lg', size: lg, className: 'hidden content-lg:block' });
|
|
175
203
|
}
|
|
176
204
|
|
|
205
|
+
if (loading) {
|
|
206
|
+
// The ring's own box at each breakpoint, as a circle.
|
|
207
|
+
return (
|
|
208
|
+
<>
|
|
209
|
+
{rings.map(ring => (
|
|
210
|
+
<UnifiedSkeleton
|
|
211
|
+
key={ring.key}
|
|
212
|
+
variant="circular"
|
|
213
|
+
width={ring.size}
|
|
214
|
+
height={ring.size}
|
|
215
|
+
className={cn('shrink-0', ring.className)}
|
|
216
|
+
/>
|
|
217
|
+
))}
|
|
218
|
+
</>
|
|
219
|
+
);
|
|
220
|
+
}
|
|
221
|
+
|
|
177
222
|
return (
|
|
178
223
|
<>
|
|
179
224
|
{rings.map(ring => (
|
|
@@ -203,22 +248,31 @@ export function DashboardInfoCard({
|
|
|
203
248
|
<div className="flex min-w-0 flex-1 flex-col">
|
|
204
249
|
{/* Title row: caption and/or tag (Figma "status" variant) */}
|
|
205
250
|
<div className="flex items-center gap-[var(--spacing-system-xxs)]">
|
|
206
|
-
{
|
|
207
|
-
|
|
208
|
-
<
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
251
|
+
{titleSlot ??
|
|
252
|
+
(title !== undefined ? (
|
|
253
|
+
<p className="truncate text-ods-text-secondary text-h5">{title}</p>
|
|
254
|
+
) : (
|
|
255
|
+
loading && (
|
|
256
|
+
<p className="text-h5">
|
|
257
|
+
<UnifiedSkeleton as="span" className="block h-[1lh] w-20 rounded" />
|
|
258
|
+
</p>
|
|
259
|
+
)
|
|
260
|
+
))}
|
|
213
261
|
{titleTag}
|
|
214
262
|
</div>
|
|
215
263
|
|
|
216
264
|
{/* Value and percentage */}
|
|
217
265
|
<div className="flex items-center gap-[var(--spacing-system-xs)]">
|
|
218
266
|
<p className={cn('truncate text-ods-text-primary text-h3 content-md:text-h2', valueClassName)}>
|
|
219
|
-
{loading ? <span className="block h-[1lh] w-24
|
|
267
|
+
{loading ? <UnifiedSkeleton as="span" className="block h-[1lh] w-24 rounded" /> : formattedValue}
|
|
220
268
|
</p>
|
|
221
|
-
{
|
|
269
|
+
{loading
|
|
270
|
+
? loadingShowsSubValue && (
|
|
271
|
+
<p className="text-h6">
|
|
272
|
+
<UnifiedSkeleton as="span" className="block h-[1lh] w-16 rounded" />
|
|
273
|
+
</p>
|
|
274
|
+
)
|
|
275
|
+
: subValue && <p className="text-ods-text-secondary text-h6">{subValue}</p>}
|
|
222
276
|
{renderPercentage()}
|
|
223
277
|
{tooltip && (
|
|
224
278
|
<FloatingTooltip content={tooltip} side="top">
|
|
@@ -232,7 +286,7 @@ export function DashboardInfoCard({
|
|
|
232
286
|
{/* Two lines kept for the caption, loading or loaded, so a narrow tile is one height. */}
|
|
233
287
|
{caption && (
|
|
234
288
|
<p className="line-clamp-2 min-h-[2lh] text-ods-text-secondary text-h6">
|
|
235
|
-
{loading ? <span className="block h-[1lh] w-32
|
|
289
|
+
{loading ? <UnifiedSkeleton as="span" className="block h-[1lh] w-32 rounded" /> : caption}
|
|
236
290
|
</p>
|
|
237
291
|
)}
|
|
238
292
|
</div>
|
|
@@ -256,6 +310,7 @@ export function DashboardInfoCard({
|
|
|
256
310
|
return (
|
|
257
311
|
<Link
|
|
258
312
|
href={href}
|
|
313
|
+
aria-busy={loading || undefined}
|
|
259
314
|
className={cn(
|
|
260
315
|
baseClassName,
|
|
261
316
|
captionClassName,
|
|
@@ -269,5 +324,11 @@ export function DashboardInfoCard({
|
|
|
269
324
|
);
|
|
270
325
|
}
|
|
271
326
|
|
|
272
|
-
|
|
327
|
+
// Loading, the card is busy: one card announces nothing of its own (a grid of them would say it once per
|
|
328
|
+
// card); the region it sits in does.
|
|
329
|
+
return (
|
|
330
|
+
<div aria-busy={loading || undefined} className={cn(baseClassName, captionClassName, className)}>
|
|
331
|
+
{cardContent}
|
|
332
|
+
</div>
|
|
333
|
+
);
|
|
273
334
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ReactNode } from 'react';
|
|
2
2
|
import { formatDate } from '../../utils/format';
|
|
3
|
+
import { TextSkeleton, UnifiedSkeleton } from '../loading/unified-skeleton';
|
|
3
4
|
|
|
4
5
|
export interface DataAttributionProps {
|
|
5
6
|
/** The source's mark, sized by the caller (e.g. `<CartaIcon className="h-4 w-4" />`). */
|
|
@@ -43,3 +44,20 @@ export function DataAttribution({ icon, source, lastUpdated, action }: DataAttri
|
|
|
43
44
|
</div>
|
|
44
45
|
);
|
|
45
46
|
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* `DataAttribution` while its date loads: the same line (two lines below
|
|
50
|
+
* `content-sm`, one row above it) with text bars, so the line does not move
|
|
51
|
+
* when it fills in.
|
|
52
|
+
*/
|
|
53
|
+
export function DataAttributionSkeleton() {
|
|
54
|
+
return (
|
|
55
|
+
<div className={LINE_CLASS} aria-hidden="true">
|
|
56
|
+
<div className={ITEM_CLASS}>
|
|
57
|
+
<UnifiedSkeleton className="size-4 rounded" />
|
|
58
|
+
<TextSkeleton.Body className="w-40" />
|
|
59
|
+
</div>
|
|
60
|
+
<TextSkeleton.Body className="w-52" />
|
|
61
|
+
</div>
|
|
62
|
+
);
|
|
63
|
+
}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import { useSyncExternalStore, type ReactNode } from 'react';
|
|
4
4
|
import { useIsomorphicLayoutEffect } from '../../../hooks/ui/use-isomorphic-layout-effect';
|
|
5
5
|
import { cn } from '../../../utils/cn';
|
|
6
|
+
import { LoadingRegion } from '../../loading/loading-region';
|
|
6
7
|
import type { NoDataProps } from '../no-data';
|
|
7
8
|
import { useDataTableContext } from './data-table';
|
|
8
9
|
import { DataTableEmpty } from './data-table-empty';
|
|
@@ -19,6 +20,11 @@ export interface DataTableBodyProps<T = unknown> {
|
|
|
19
20
|
emptyState?: NoDataProps;
|
|
20
21
|
/** Skeleton row count when loading. Default `10`. */
|
|
21
22
|
skeletonRows?: number;
|
|
23
|
+
/**
|
|
24
|
+
* The loading state announces itself (`LoadingRegion`: aria-busy plus one "Loading results" status).
|
|
25
|
+
* `false` when the table sits inside a loading region of its own (a page skeleton). Default `true`.
|
|
26
|
+
*/
|
|
27
|
+
loadingRegion?: boolean;
|
|
22
28
|
className?: string;
|
|
23
29
|
/**
|
|
24
30
|
* Per-row class name. Prefer `useCallback` for function form to avoid
|
|
@@ -95,6 +101,7 @@ export function DataTableBody<T = unknown>({
|
|
|
95
101
|
emptyMessage,
|
|
96
102
|
emptyState,
|
|
97
103
|
skeletonRows = 10,
|
|
104
|
+
loadingRegion = true,
|
|
98
105
|
className,
|
|
99
106
|
rowClassName,
|
|
100
107
|
compact,
|
|
@@ -121,13 +128,13 @@ export function DataTableBody<T = unknown>({
|
|
|
121
128
|
|
|
122
129
|
if (loading && !hasRows) {
|
|
123
130
|
return (
|
|
124
|
-
<
|
|
131
|
+
<LoadingRegion label="Loading results" announce={loadingRegion} className={cn(ROW_STACK_CLASSES, className)}>
|
|
125
132
|
<DataTableSkeleton
|
|
126
133
|
rows={skeletonRows}
|
|
127
134
|
className={skeletonRowClassName}
|
|
128
135
|
rowHeightClassName={rowHeightClassName}
|
|
129
136
|
/>
|
|
130
|
-
</
|
|
137
|
+
</LoadingRegion>
|
|
131
138
|
);
|
|
132
139
|
}
|
|
133
140
|
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { useEffect, useRef, useState, useSyncExternalStore } from 'react';
|
|
4
4
|
import { useIsomorphicLayoutEffect } from '../../../hooks/ui/use-isomorphic-layout-effect';
|
|
5
|
+
import { LoadingRegion } from '../../loading/loading-region';
|
|
5
6
|
import { Button } from '../button';
|
|
6
7
|
import { useOptionalDataTableContext } from './data-table';
|
|
7
8
|
import { useDataTableLoadMoreStore } from './data-table-load-more';
|
|
@@ -163,9 +164,10 @@ export function DataTableInfiniteFooter({
|
|
|
163
164
|
return (
|
|
164
165
|
<>
|
|
165
166
|
{isFetchingNextPage && !bodyDrawsRows && (
|
|
166
|
-
|
|
167
|
+
// Busy, without a second status: the footer's own one below says "Loading more results".
|
|
168
|
+
<LoadingRegion status={false} className={ROW_STACK_CLASSES}>
|
|
167
169
|
<DataTableSkeleton rows={skeletonRows} />
|
|
168
|
-
</
|
|
170
|
+
</LoadingRegion>
|
|
169
171
|
)}
|
|
170
172
|
{isStalled && (
|
|
171
173
|
<div className="flex justify-center pt-[var(--spacing-system-mf)]">
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import type { ReactNode } from 'react';
|
|
4
4
|
import { cn } from '../../../utils/cn';
|
|
5
|
+
import { UnifiedSkeleton } from '../../loading/unified-skeleton';
|
|
5
6
|
import { useDataTableContext } from './data-table';
|
|
6
7
|
import { getHideClasses } from './utils';
|
|
7
8
|
|
|
@@ -60,8 +61,10 @@ export function DataTableSkeleton({ rows = 10, className, rowClassName, rowHeigh
|
|
|
60
61
|
{Array.from({ length: rows }).map((_, index) => (
|
|
61
62
|
<div
|
|
62
63
|
key={index}
|
|
64
|
+
// Decoration: the table's own status line says it is loading.
|
|
65
|
+
aria-hidden="true"
|
|
63
66
|
className={cn(
|
|
64
|
-
'relative
|
|
67
|
+
'relative overflow-hidden rounded-md border border-ods-border bg-ods-card',
|
|
65
68
|
// The slot height sits on the card, matching a real row.
|
|
66
69
|
rowHeightClassName,
|
|
67
70
|
className,
|
|
@@ -91,9 +94,9 @@ export function DataTableSkeleton({ rows = 10, className, rowClassName, rowHeigh
|
|
|
91
94
|
getHideClasses(meta?.hideAt),
|
|
92
95
|
)}
|
|
93
96
|
>
|
|
94
|
-
<
|
|
97
|
+
<UnifiedSkeleton className="mb-[var(--spacing-system-xxs)] h-5 w-3/4 rounded-sm" />
|
|
95
98
|
{index % 2 === 0 && column.id === firstColumnId && (
|
|
96
|
-
<
|
|
99
|
+
<UnifiedSkeleton className="h-4 w-1/2 rounded-sm opacity-60" />
|
|
97
100
|
)}
|
|
98
101
|
</div>
|
|
99
102
|
);
|
|
@@ -108,8 +111,8 @@ export function DataTableSkeleton({ rows = 10, className, rowClassName, rowHeigh
|
|
|
108
111
|
)}
|
|
109
112
|
>
|
|
110
113
|
<div className="flex min-w-0 flex-1 flex-col justify-center py-[var(--spacing-system-sf)]">
|
|
111
|
-
<
|
|
112
|
-
<
|
|
114
|
+
<UnifiedSkeleton className="mb-[var(--spacing-system-xsf)] h-4 w-3/4 rounded-sm" />
|
|
115
|
+
<UnifiedSkeleton className="h-3 w-1/2 rounded-sm opacity-60" />
|
|
113
116
|
</div>
|
|
114
117
|
</div>
|
|
115
118
|
</div>
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
3
|
import type React from 'react';
|
|
4
|
+
import { UnifiedSkeleton } from '../loading/unified-skeleton';
|
|
4
5
|
import { Card } from './card';
|
|
5
6
|
import { StatusBadge } from './status-badge';
|
|
6
7
|
|
|
@@ -82,11 +83,6 @@ function fourColumnBorders(index: number, count: number): string {
|
|
|
82
83
|
return ` ${classes.join(' ')}`;
|
|
83
84
|
}
|
|
84
85
|
|
|
85
|
-
/** A text row's placeholder: a bar exactly one line of its element's own typography tall. */
|
|
86
|
-
function LineBar({ width }: { width: string }) {
|
|
87
|
-
return <span className={`block h-[1lh] ${width} animate-pulse rounded bg-ods-border`} />;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
86
|
export function FeatureCardGrid({
|
|
91
87
|
items,
|
|
92
88
|
columns = 3,
|
|
@@ -230,15 +226,27 @@ export function FeatureCardGrid({
|
|
|
230
226
|
<div className="flex min-w-0 flex-1 flex-col gap-[var(--spacing-system-xsf)]">
|
|
231
227
|
{item.eyebrow && (
|
|
232
228
|
<span className="text-ods-text-secondary text-h5">
|
|
233
|
-
{loading ?
|
|
229
|
+
{loading ? (
|
|
230
|
+
<UnifiedSkeleton as="span" className="block h-[1lh] w-6 rounded" />
|
|
231
|
+
) : (
|
|
232
|
+
item.eyebrow
|
|
233
|
+
)}
|
|
234
234
|
</span>
|
|
235
235
|
)}
|
|
236
236
|
<h3 className={`text-ods-text-primary text-h2 ${titleClassName}`}>
|
|
237
|
-
{loading ?
|
|
237
|
+
{loading ? (
|
|
238
|
+
<UnifiedSkeleton as="span" className="block h-[1lh] w-1/2 rounded" />
|
|
239
|
+
) : (
|
|
240
|
+
item.title
|
|
241
|
+
)}
|
|
238
242
|
</h3>
|
|
239
243
|
{item.subtitle && (
|
|
240
244
|
<p className={`text-h4 ${accentClassName} ${subtitleClassName}`}>
|
|
241
|
-
{loading ?
|
|
245
|
+
{loading ? (
|
|
246
|
+
<UnifiedSkeleton as="span" className="block h-[1lh] w-3/4 rounded" />
|
|
247
|
+
) : (
|
|
248
|
+
item.subtitle
|
|
249
|
+
)}
|
|
242
250
|
</p>
|
|
243
251
|
)}
|
|
244
252
|
{item.content}
|
|
@@ -248,15 +256,23 @@ export function FeatureCardGrid({
|
|
|
248
256
|
<div className="flex flex-col gap-[var(--spacing-system-xsf)]">
|
|
249
257
|
{item.eyebrow && (
|
|
250
258
|
<span className="text-ods-text-secondary text-h5">
|
|
251
|
-
{loading ?
|
|
259
|
+
{loading ? (
|
|
260
|
+
<UnifiedSkeleton as="span" className="block h-[1lh] w-6 rounded" />
|
|
261
|
+
) : (
|
|
262
|
+
item.eyebrow
|
|
263
|
+
)}
|
|
252
264
|
</span>
|
|
253
265
|
)}
|
|
254
266
|
<h3 className={`whitespace-pre-line text-ods-text-primary text-h2 ${titleClassName}`}>
|
|
255
|
-
{loading ? <
|
|
267
|
+
{loading ? <UnifiedSkeleton as="span" className="block h-[1lh] w-1/2 rounded" /> : item.title}
|
|
256
268
|
</h3>
|
|
257
269
|
{item.subtitle && (
|
|
258
270
|
<p className={`text-h4 ${accentClassName} ${subtitleClassName}`}>
|
|
259
|
-
{loading ?
|
|
271
|
+
{loading ? (
|
|
272
|
+
<UnifiedSkeleton as="span" className="block h-[1lh] w-3/4 rounded" />
|
|
273
|
+
) : (
|
|
274
|
+
item.subtitle
|
|
275
|
+
)}
|
|
260
276
|
</p>
|
|
261
277
|
)}
|
|
262
278
|
</div>
|
|
@@ -1,43 +1,51 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { LoadingRegion } from '../../loading/loading-region';
|
|
4
|
+
import { UnifiedSkeleton } from '../../loading/unified-skeleton';
|
|
4
5
|
|
|
5
6
|
interface FileManagerSkeletonProps {
|
|
7
|
+
/** The loading state announces itself (`LoadingRegion`). `false` inside another loading region. Default `true`. */
|
|
8
|
+
region?: boolean;
|
|
6
9
|
rows?: number;
|
|
7
10
|
showSearch?: boolean;
|
|
8
11
|
showActions?: boolean;
|
|
9
12
|
}
|
|
10
13
|
|
|
11
|
-
export function FileManagerSkeleton({
|
|
14
|
+
export function FileManagerSkeleton({
|
|
15
|
+
region = true,
|
|
16
|
+
rows = 8,
|
|
17
|
+
showSearch = true,
|
|
18
|
+
showActions = true,
|
|
19
|
+
}: FileManagerSkeletonProps) {
|
|
12
20
|
const rowPlaceholders = Array.from({ length: rows });
|
|
13
21
|
|
|
14
22
|
return (
|
|
15
|
-
<
|
|
23
|
+
<LoadingRegion label="Loading files" announce={region} className="flex h-full flex-col bg-ods-bg">
|
|
16
24
|
<div className="flex min-h-0 flex-1 flex-col space-y-6 py-6">
|
|
17
25
|
{/* Breadcrumb and Action Bar */}
|
|
18
26
|
<div className="flex flex-wrap items-start justify-between gap-4">
|
|
19
27
|
{/* Breadcrumb skeleton */}
|
|
20
28
|
<div className="flex min-w-0 flex-1 items-center gap-2">
|
|
21
|
-
<
|
|
22
|
-
<
|
|
23
|
-
<
|
|
24
|
-
<
|
|
25
|
-
<
|
|
29
|
+
<UnifiedSkeleton className="h-5 w-12" />
|
|
30
|
+
<UnifiedSkeleton className="h-4 w-4 rounded-full" />
|
|
31
|
+
<UnifiedSkeleton className="h-5 w-20" />
|
|
32
|
+
<UnifiedSkeleton className="h-4 w-4 rounded-full" />
|
|
33
|
+
<UnifiedSkeleton className="h-5 w-24" />
|
|
26
34
|
</div>
|
|
27
35
|
|
|
28
36
|
{/* Action buttons skeleton */}
|
|
29
37
|
{showActions && (
|
|
30
38
|
<div className="flex flex-shrink-0 items-center gap-2">
|
|
31
|
-
<
|
|
32
|
-
<
|
|
33
|
-
<
|
|
34
|
-
<
|
|
39
|
+
<UnifiedSkeleton className="h-9 w-24" />
|
|
40
|
+
<UnifiedSkeleton className="h-9 w-20" />
|
|
41
|
+
<UnifiedSkeleton className="h-9 w-20" />
|
|
42
|
+
<UnifiedSkeleton className="h-9 w-28" />
|
|
35
43
|
</div>
|
|
36
44
|
)}
|
|
37
45
|
</div>
|
|
38
46
|
|
|
39
47
|
{/* Search bar skeleton */}
|
|
40
|
-
{showSearch && <
|
|
48
|
+
{showSearch && <UnifiedSkeleton className="h-10 w-full rounded-lg" />}
|
|
41
49
|
|
|
42
50
|
{/* Table skeleton */}
|
|
43
51
|
<div className="min-h-0 flex-1">
|
|
@@ -46,7 +54,7 @@ export function FileManagerSkeleton({ rows = 8, showSearch = true, showActions =
|
|
|
46
54
|
<div className="flex h-12 items-center rounded-t-lg border-b border-ods-border bg-ods-bg-surface px-4">
|
|
47
55
|
{/* Checkbox */}
|
|
48
56
|
<div className="mr-4">
|
|
49
|
-
<
|
|
57
|
+
<UnifiedSkeleton className="h-5 w-5 rounded" />
|
|
50
58
|
</div>
|
|
51
59
|
|
|
52
60
|
{/* Column headers */}
|
|
@@ -65,31 +73,31 @@ export function FileManagerSkeleton({ rows = 8, showSearch = true, showActions =
|
|
|
65
73
|
<div key={idx} className="flex h-16 items-center border-ods-border bg-ods-card px-4">
|
|
66
74
|
{/* Checkbox */}
|
|
67
75
|
<div className="mr-4">
|
|
68
|
-
<
|
|
76
|
+
<UnifiedSkeleton className="h-5 w-5 rounded" />
|
|
69
77
|
</div>
|
|
70
78
|
|
|
71
79
|
{/* File icon and name */}
|
|
72
80
|
<div className="flex min-w-0 flex-1 items-center gap-3">
|
|
73
|
-
<
|
|
81
|
+
<UnifiedSkeleton className="h-6 w-6 rounded" />
|
|
74
82
|
<div className="flex min-w-0 flex-col">
|
|
75
|
-
<
|
|
83
|
+
<UnifiedSkeleton className="h-4 w-32" />
|
|
76
84
|
</div>
|
|
77
85
|
</div>
|
|
78
86
|
|
|
79
87
|
{/* Size */}
|
|
80
88
|
<div className="w-24 shrink-0 pr-4">
|
|
81
|
-
<
|
|
89
|
+
<UnifiedSkeleton className="h-4 w-16" />
|
|
82
90
|
</div>
|
|
83
91
|
|
|
84
92
|
{/* Modified date */}
|
|
85
93
|
<div className="w-36 shrink-0 pl-4">
|
|
86
|
-
<
|
|
94
|
+
<UnifiedSkeleton className="h-4 w-24" />
|
|
87
95
|
</div>
|
|
88
96
|
|
|
89
97
|
{/* Action buttons */}
|
|
90
98
|
<div className="flex w-48 shrink-0 items-center justify-end gap-1 pl-4">
|
|
91
|
-
<
|
|
92
|
-
<
|
|
99
|
+
<UnifiedSkeleton className="h-8 w-8 rounded" />
|
|
100
|
+
<UnifiedSkeleton className="h-8 w-8 rounded" />
|
|
93
101
|
</div>
|
|
94
102
|
</div>
|
|
95
103
|
))}
|
|
@@ -97,6 +105,6 @@ export function FileManagerSkeleton({ rows = 8, showSearch = true, showActions =
|
|
|
97
105
|
</div>
|
|
98
106
|
</div>
|
|
99
107
|
</div>
|
|
100
|
-
</
|
|
108
|
+
</LoadingRegion>
|
|
101
109
|
);
|
|
102
110
|
}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
import { useLayoutEffect, useMemo, useRef, useState } from 'react';
|
|
4
4
|
import { cn } from '../../../utils/cn';
|
|
5
|
+
import { UnifiedSkeleton } from '../../loading/unified-skeleton';
|
|
5
6
|
import { Checkbox } from '../checkbox';
|
|
6
|
-
import { Skeleton } from '../skeleton';
|
|
7
7
|
import { FileManagerEmpty } from './file-manager-empty';
|
|
8
8
|
import { FileManagerTableRow } from './file-manager-table-row';
|
|
9
9
|
import type { FileManagerTableProps } from './types';
|
|
@@ -81,7 +81,7 @@ export function FileManagerTable({
|
|
|
81
81
|
<div className="flex h-12 items-center rounded-t-lg border-b border-ods-border bg-ods-bg-surface px-4">
|
|
82
82
|
{showCheckboxes && (
|
|
83
83
|
<div className="mr-4">
|
|
84
|
-
<
|
|
84
|
+
<UnifiedSkeleton className="h-5 w-5 rounded" />
|
|
85
85
|
</div>
|
|
86
86
|
)}
|
|
87
87
|
|
|
@@ -100,33 +100,33 @@ export function FileManagerTable({
|
|
|
100
100
|
<div key={idx} className="group flex h-16 items-center border-ods-border bg-ods-card px-4">
|
|
101
101
|
{showCheckboxes && (
|
|
102
102
|
<div className="mr-4">
|
|
103
|
-
<
|
|
103
|
+
<UnifiedSkeleton className="h-5 w-5 rounded" />
|
|
104
104
|
</div>
|
|
105
105
|
)}
|
|
106
106
|
|
|
107
107
|
{/* File icon and name column */}
|
|
108
108
|
<div className="flex min-w-0 flex-1 items-center gap-3">
|
|
109
|
-
<
|
|
109
|
+
<UnifiedSkeleton className="h-6 w-6 rounded" />
|
|
110
110
|
<div className="flex min-w-0 flex-col">
|
|
111
|
-
<
|
|
112
|
-
{isSearchResult && <
|
|
111
|
+
<UnifiedSkeleton className="h-4 w-32" />
|
|
112
|
+
{isSearchResult && <UnifiedSkeleton className="mt-1 h-3 w-48" />}
|
|
113
113
|
</div>
|
|
114
114
|
</div>
|
|
115
115
|
|
|
116
116
|
{/* Size column */}
|
|
117
117
|
<div className="w-24 shrink-0 pr-4">
|
|
118
|
-
<
|
|
118
|
+
<UnifiedSkeleton className="h-4 w-16" />
|
|
119
119
|
</div>
|
|
120
120
|
|
|
121
121
|
{/* Modified date column */}
|
|
122
122
|
<div className="w-36 shrink-0 pl-4">
|
|
123
|
-
<
|
|
123
|
+
<UnifiedSkeleton className="h-4 w-24" />
|
|
124
124
|
</div>
|
|
125
125
|
|
|
126
126
|
{/* Action buttons column */}
|
|
127
127
|
<div className="flex w-48 shrink-0 items-center justify-end gap-1 pl-4">
|
|
128
|
-
<
|
|
129
|
-
<
|
|
128
|
+
<UnifiedSkeleton className="h-8 w-8 rounded" />
|
|
129
|
+
<UnifiedSkeleton className="h-8 w-8 rounded" />
|
|
130
130
|
</div>
|
|
131
131
|
</div>
|
|
132
132
|
))}
|
|
@@ -4,12 +4,12 @@ import { useEffect, useRef, useState } from 'react';
|
|
|
4
4
|
|
|
5
5
|
import { cn } from '../../utils/cn';
|
|
6
6
|
import { Filter02Icon } from '../icons-v2-generated/sort-and-filter/filter-02-icon';
|
|
7
|
+
import { UnifiedSkeleton } from '../loading/unified-skeleton';
|
|
7
8
|
import { Button } from './button';
|
|
8
9
|
import { DateFilterPanel, type DateFilterResult, type DateRange } from './date-picker';
|
|
9
10
|
import { FilterCheckboxItem } from './filter-checkbox-item';
|
|
10
11
|
import { ModalV2, ModalV2Content, ModalV2Footer, ModalV2Header, ModalV2Title } from './modal-v2';
|
|
11
12
|
import { ScrollFadeOverlay, useScrollFade } from './scroll-fade';
|
|
12
|
-
import { Skeleton } from './skeleton';
|
|
13
13
|
import { SortColumnItem, type SortConfig, type SortDirection } from './sort-column-item';
|
|
14
14
|
import type { TableFilters } from './table/types';
|
|
15
15
|
import { TagKeyValueFilter, type TagKeyConfig } from './tag-key-value-filter';
|
|
@@ -203,16 +203,16 @@ export function FilterModal({
|
|
|
203
203
|
<>
|
|
204
204
|
{[0, 1].map(group => (
|
|
205
205
|
<div key={group} className="flex flex-col gap-1">
|
|
206
|
-
<
|
|
206
|
+
<UnifiedSkeleton className="h-5 w-24" />
|
|
207
207
|
<div className="overflow-hidden rounded-md border border-ods-border">
|
|
208
208
|
{[0, 1, 2].map(row => (
|
|
209
209
|
<div
|
|
210
210
|
key={row}
|
|
211
211
|
className="flex items-center gap-3 border-b border-ods-border bg-ods-card px-4 py-3 last:border-b-0"
|
|
212
212
|
>
|
|
213
|
-
<
|
|
214
|
-
<
|
|
215
|
-
<
|
|
213
|
+
<UnifiedSkeleton className="h-6 w-6 shrink-0 rounded-[6px]" />
|
|
214
|
+
<UnifiedSkeleton className="h-4 max-w-[60%] flex-1" />
|
|
215
|
+
<UnifiedSkeleton className="h-4 w-10 shrink-0" />
|
|
216
216
|
</div>
|
|
217
217
|
))}
|
|
218
218
|
</div>
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
import { Filter } from 'lucide-react';
|
|
16
16
|
import type { ReactNode } from 'react';
|
|
17
|
+
import { UnifiedSkeleton } from '../loading/unified-skeleton';
|
|
17
18
|
import { Button } from './button';
|
|
18
19
|
|
|
19
20
|
export interface FilterPillRowOption {
|
|
@@ -67,3 +68,21 @@ export function FilterPillRow({
|
|
|
67
68
|
</div>
|
|
68
69
|
);
|
|
69
70
|
}
|
|
71
|
+
|
|
72
|
+
const noop = () => {};
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* The loading state of a SERVED pill row (facets that arrive with the data):
|
|
76
|
+
* the same row shell with placeholder pills, so the filters never pop in under
|
|
77
|
+
* the content. The row renders its children INSTEAD of options, which is
|
|
78
|
+
* exactly what a skeleton wants.
|
|
79
|
+
*/
|
|
80
|
+
export function FilterPillRowSkeleton({ label, pills = 5 }: { label: string; pills?: number }) {
|
|
81
|
+
return (
|
|
82
|
+
<FilterPillRow label={label} selectedValue="" onValueChange={noop} options={[]}>
|
|
83
|
+
{Array.from({ length: pills }, (_, i) => (
|
|
84
|
+
<UnifiedSkeleton key={i} className="h-8 w-24 rounded" />
|
|
85
|
+
))}
|
|
86
|
+
</FilterPillRow>
|
|
87
|
+
);
|
|
88
|
+
}
|
|
@@ -77,7 +77,6 @@ export * from './mobile-app-qr';
|
|
|
77
77
|
export * from './status-indicator';
|
|
78
78
|
export * from './toaster';
|
|
79
79
|
// TODO: Add other UI components as they are moved to ui-kit
|
|
80
|
-
export * from './skeleton';
|
|
81
80
|
export * from './hover-dropdown';
|
|
82
81
|
// Chat components
|
|
83
82
|
export * from '../chat';
|