@flamingo-stack/openframe-frontend-core 0.0.711 → 0.0.713
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/chunk-2NASBO7O.js +1137 -0
- package/dist/{chunk-RQRX4YC3.cjs → chunk-2RKFMUNW.cjs} +46 -46
- package/dist/chunk-2Y7QZAB2.cjs +158 -0
- package/dist/chunk-34I6XI3N.js +136 -0
- package/dist/{chunk-VWFZRMQR.js → chunk-3BB3IEJI.js} +13 -7
- package/dist/chunk-3K5ZLZE7.js +292 -0
- package/dist/chunk-3LU4UFPS.cjs +14 -0
- package/dist/{chunk-G47AP6LX.cjs → chunk-3QGUDPIH.cjs} +35 -33
- package/dist/{chunk-3UNL26CD.cjs → chunk-3RKBJT6K.cjs} +8 -6
- package/dist/chunk-4HJRHEXD.cjs +1612 -0
- package/dist/{chunk-JPG7OHEG.js → chunk-4QFWGLZO.js} +1 -1
- package/dist/chunk-4R2L3DSA.js +14 -0
- package/dist/{chunk-VMMHJFHG.js → chunk-6F4QOCGB.js} +10 -8
- package/dist/{chunk-Q6B35Y7O.js → chunk-6MNAIQNR.js} +22 -113
- package/dist/{chunk-KUC673HM.js → chunk-6T3BTD6Q.js} +204 -982
- package/dist/{chunk-F57ECE2I.js → chunk-6YPTUHM7.js} +4 -4
- package/dist/chunk-AAYNCJMW.cjs +48 -0
- package/dist/{chunk-FXJ3WWUB.js → chunk-ADBE7QF3.js} +5 -252
- package/dist/chunk-AECTRMGQ.cjs +334 -0
- package/dist/chunk-AGVXKD4K.js +334 -0
- package/dist/chunk-AL2GUHAJ.cjs +18 -0
- package/dist/{chunk-WMX26HB5.js → chunk-APJZBDQN.js} +12 -12
- package/dist/chunk-AUMKE74M.cjs +16 -0
- package/dist/chunk-B4NCVYEQ.cjs +292 -0
- package/dist/{chunk-WJUIXU6Y.js → chunk-CGHOH3GN.js} +28 -22
- package/dist/chunk-CMGFZHCN.js +233 -0
- package/dist/chunk-CMZ3QTFQ.js +1207 -0
- package/dist/chunk-CPA2CKRZ.cjs +125 -0
- package/dist/chunk-CYUUHFXL.js +41 -0
- package/dist/chunk-DC4RTYWK.cjs +1122 -0
- package/dist/{chunk-NF7GNGYG.js → chunk-DDWFCWOE.js} +5 -7
- package/dist/{chunk-QA6TROME.cjs → chunk-EOKSKJSS.cjs} +25 -83
- package/dist/{chunk-6NTPY5QA.cjs → chunk-ETYLOZOB.cjs} +978 -2413
- package/dist/{chunk-6AMIRXKM.cjs → chunk-F2EACDOR.cjs} +93 -87
- package/dist/chunk-F5BPGWGT.cjs +931 -0
- package/dist/chunk-FFT56TYB.cjs +401 -0
- package/dist/chunk-FYEJTF5Y.js +125 -0
- package/dist/chunk-G3GRYDMS.js +16 -0
- package/dist/chunk-G6OHIX5C.cjs +100 -0
- package/dist/{chunk-UDFRUKLC.cjs → chunk-GEDY7HQI.cjs} +2 -2
- package/dist/chunk-GQ7JJUIT.cjs +1207 -0
- package/dist/chunk-H3PKYE4N.js +18 -0
- package/dist/{chunk-EQWD4IJE.js → chunk-H4J72PRA.js} +74 -46
- package/dist/{chunk-AGDVEUVL.js → chunk-H5R7U2D2.js} +206 -5
- package/dist/{chunk-7AM6C6XH.cjs → chunk-HETQETPV.cjs} +9641 -9678
- package/dist/{chunk-Y2GSOUCS.cjs → chunk-HWVUR735.cjs} +2 -2
- package/dist/chunk-II4QMH26.cjs +35 -0
- package/dist/{chunk-XWEBHS7O.cjs → chunk-IJKMILMG.cjs} +82 -54
- package/dist/chunk-ILNN6QRW.js +1612 -0
- package/dist/{chunk-6GLQLTJI.js → chunk-IU4IO3CG.js} +35 -27
- package/dist/chunk-IYVFSLWJ.js +931 -0
- package/dist/{chunk-EX6GGCAC.cjs → chunk-J7YIQJPS.cjs} +15 -15
- package/dist/chunk-JHQ334WS.js +655 -0
- package/dist/{chunk-WCVZCGK5.cjs → chunk-JO5TLJPM.cjs} +129 -907
- package/dist/{chunk-PRX7HVLE.cjs → chunk-JVCAK4W3.cjs} +210 -9
- package/dist/chunk-KBJJQFYU.js +1122 -0
- package/dist/chunk-KEKCQENI.js +48 -0
- package/dist/{chunk-P6G3JZNC.cjs → chunk-KGAFUXGZ.cjs} +57 -148
- package/dist/chunk-KHXZFLIN.cjs +41 -0
- package/dist/{chunk-C4HRRB3V.cjs → chunk-KMB7JHGG.cjs} +23 -17
- package/dist/{chunk-K4PTDK34.js → chunk-KPUHSVJU.js} +322 -428
- package/dist/chunk-KT3U3ZRP.cjs +1137 -0
- package/dist/chunk-L2VUINHN.js +35 -0
- package/dist/{chunk-PLYEKV3N.cjs → chunk-MA4Q5RBP.cjs} +6 -6
- package/dist/chunk-NPAQSMRY.js +2087 -0
- package/dist/{chunk-IFWLJ66M.js → chunk-NQWJAOHO.js} +6 -4
- package/dist/{chunk-FYOKS5RI.cjs → chunk-OQKRXLTZ.cjs} +4719 -6351
- package/dist/chunk-P3JMAMHP.js +401 -0
- package/dist/{chunk-62KNLDXK.js → chunk-P6QCJXLD.js} +3 -3
- package/dist/chunk-PPXR22YC.cjs +2087 -0
- package/dist/chunk-PSVSEN4J.cjs +655 -0
- package/dist/{chunk-CDM7OSFB.cjs → chunk-QQQ46DFT.cjs} +125 -117
- package/dist/{chunk-FEMAJES4.cjs → chunk-QU4AHNRL.cjs} +41 -39
- package/dist/{chunk-2JTGK64G.js → chunk-RBVUIOIM.js} +12 -10
- package/dist/{chunk-SMAAV3HL.js → chunk-ROBQ5TR7.js} +10541 -10578
- package/dist/{chunk-TKZXHVBG.js → chunk-RRYNHAEL.js} +5 -5
- package/dist/{chunk-5HB7FLCV.js → chunk-STPC2AQU.js} +8338 -9970
- package/dist/{chunk-6K7QZDA6.cjs → chunk-TC4W7QDC.cjs} +8 -8
- package/dist/{chunk-FI6GMDO7.js → chunk-TTVOLEUS.js} +3605 -5040
- package/dist/{chunk-LM7TXMLU.cjs → chunk-ULWVKHSI.cjs} +8 -255
- package/dist/chunk-WANCBTUE.js +71 -0
- package/dist/{chunk-BIZNSF3U.cjs → chunk-WBNAEYTQ.cjs} +2 -51
- package/dist/chunk-WFPCCBOM.cjs +71 -0
- package/dist/chunk-WI6FHKD7.js +158 -0
- package/dist/chunk-WMNCVLES.js +100 -0
- package/dist/{chunk-UT4YHQZW.js → chunk-WSDT7LYL.js} +0 -49
- package/dist/chunk-WVOTC7HW.cjs +136 -0
- package/dist/chunk-XXBLN4BP.cjs +233 -0
- package/dist/{chunk-4IBPRIQH.js → chunk-YBQQNDC7.js} +1 -1
- package/dist/{chunk-QGZPZ3RL.js → chunk-YBS5QGON.js} +70 -128
- package/dist/{chunk-K6Y5NX6L.cjs → chunk-YIUSW4DB.cjs} +114 -220
- package/dist/{chunk-YD4LJZV4.cjs → chunk-ZX7SCPLO.cjs} +6 -8
- package/dist/cloud-tenants-HRJYNUJM.cjs +117 -0
- package/dist/cloud-tenants-SM7WLEGG.js +117 -0
- package/dist/components/case-studies/index.cjs +45 -29
- package/dist/components/case-studies/index.js +32 -16
- package/dist/components/chat/ask-prompts.d.ts +64 -0
- package/dist/components/chat/ask-prompts.d.ts.map +1 -0
- package/dist/components/chat/entity-cards/case-study-card.d.ts +6 -3
- package/dist/components/chat/entity-cards/case-study-card.d.ts.map +1 -1
- package/dist/components/chat/index.cjs +27 -8
- package/dist/components/chat/index.d.ts +1 -0
- package/dist/components/chat/index.d.ts.map +1 -1
- package/dist/components/chat/index.js +57 -38
- package/dist/components/chat/quick-action-chip.d.ts +7 -3
- package/dist/components/chat/quick-action-chip.d.ts.map +1 -1
- package/dist/components/contact/index.cjs +29 -13
- package/dist/components/contact/index.js +28 -12
- package/dist/components/docs/index.cjs +33 -16
- package/dist/components/docs/index.js +33 -16
- package/dist/components/docs/use-scroll-spy.d.ts +23 -1
- package/dist/components/docs/use-scroll-spy.d.ts.map +1 -1
- package/dist/components/embeds/index.cjs +29 -13
- package/dist/components/embeds/index.js +28 -12
- package/dist/components/faq/faq-section.d.ts +8 -1
- package/dist/components/faq/faq-section.d.ts.map +1 -1
- package/dist/components/faq/index.cjs +30 -14
- package/dist/components/faq/index.js +29 -13
- package/dist/components/features/approval-level.d.ts +49 -0
- package/dist/components/features/approval-level.d.ts.map +1 -0
- package/dist/components/features/array-entry-manager.d.ts +5 -1
- package/dist/components/features/array-entry-manager.d.ts.map +1 -1
- package/dist/components/features/board/board.d.ts +2 -0
- package/dist/components/features/board/board.d.ts.map +1 -1
- package/dist/components/features/board/ticket-card.d.ts.map +1 -1
- package/dist/components/features/board/touch-board.d.ts +1 -1
- package/dist/components/features/board/touch-board.d.ts.map +1 -1
- package/dist/components/features/board/types.d.ts +3 -0
- package/dist/components/features/board/types.d.ts.map +1 -1
- package/dist/components/features/board/use-board-collapse.d.ts +6 -1
- package/dist/components/features/board/use-board-collapse.d.ts.map +1 -1
- package/dist/components/features/capability-explorer.d.ts +94 -0
- package/dist/components/features/capability-explorer.d.ts.map +1 -0
- package/dist/components/features/cloud-tenants/index.d.ts +14 -0
- package/dist/components/features/cloud-tenants/index.d.ts.map +1 -0
- package/dist/components/features/cloud-tenants/tenant-access-cell.d.ts +9 -0
- package/dist/components/features/cloud-tenants/tenant-access-cell.d.ts.map +1 -0
- package/dist/components/features/cloud-tenants/tenant-cell.d.ts +8 -0
- package/dist/components/features/cloud-tenants/tenant-cell.d.ts.map +1 -0
- package/dist/components/features/cloud-tenants/tenant-customer-cell.d.ts +9 -0
- package/dist/components/features/cloud-tenants/tenant-customer-cell.d.ts.map +1 -0
- package/dist/components/features/cloud-tenants/tenant-presentation.d.ts +42 -0
- package/dist/components/features/cloud-tenants/tenant-presentation.d.ts.map +1 -0
- package/dist/components/features/cloud-tenants/tenant-row.d.ts +22 -0
- package/dist/components/features/cloud-tenants/tenant-row.d.ts.map +1 -0
- package/dist/components/features/cloud-tenants/tenants-table-columns.d.ts +42 -0
- package/dist/components/features/cloud-tenants/tenants-table-columns.d.ts.map +1 -0
- package/dist/components/features/cloud-tenants/tenants-table-view.d.ts +26 -0
- package/dist/components/features/cloud-tenants/tenants-table-view.d.ts.map +1 -0
- package/dist/components/features/devices/device-last-online.d.ts +3 -0
- package/dist/components/features/devices/device-last-online.d.ts.map +1 -0
- package/dist/components/features/devices/device-name.d.ts +42 -0
- package/dist/components/features/devices/device-name.d.ts.map +1 -0
- package/dist/components/features/devices/device-selector/device-selection-mode-radio.d.ts +26 -0
- package/dist/components/features/devices/device-selector/device-selection-mode-radio.d.ts.map +1 -0
- package/dist/components/features/devices/device-selector/device-selector-skeleton.d.ts +25 -0
- package/dist/components/features/devices/device-selector/device-selector-skeleton.d.ts.map +1 -0
- package/dist/components/features/devices/device-selector/device-selector.d.ts +38 -0
- package/dist/components/features/devices/device-selector/device-selector.d.ts.map +1 -0
- package/dist/components/features/devices/device-selector/device-selector.types.d.ts +133 -0
- package/dist/components/features/devices/device-selector/device-selector.types.d.ts.map +1 -0
- package/dist/components/features/devices/device-selector/narrowing.d.ts +13 -0
- package/dist/components/features/devices/device-selector/narrowing.d.ts.map +1 -0
- package/dist/components/features/devices/device-selector/use-device-selector.d.ts +17 -0
- package/dist/components/features/devices/device-selector/use-device-selector.d.ts.map +1 -0
- package/dist/components/features/devices/device-status.d.ts +23 -0
- package/dist/components/features/devices/device-status.d.ts.map +1 -0
- package/dist/components/features/devices/device-statuses.d.ts +40 -0
- package/dist/components/features/devices/device-statuses.d.ts.map +1 -0
- package/dist/components/features/devices/device-tags-filter-button.d.ts +22 -0
- package/dist/components/features/devices/device-tags-filter-button.d.ts.map +1 -0
- package/dist/components/features/devices/device-type-icon.d.ts +11 -0
- package/dist/components/features/devices/device-type-icon.d.ts.map +1 -0
- package/dist/components/features/devices/device-type-tile.d.ts +9 -0
- package/dist/components/features/devices/device-type-tile.d.ts.map +1 -0
- package/dist/components/features/devices/devices-filter-toolbar.d.ts +46 -0
- package/dist/components/features/devices/devices-filter-toolbar.d.ts.map +1 -0
- package/dist/components/features/devices/devices-grid-filters.d.ts +25 -0
- package/dist/components/features/devices/devices-grid-filters.d.ts.map +1 -0
- package/dist/components/features/devices/devices-grid.d.ts +12 -0
- package/dist/components/features/devices/devices-grid.d.ts.map +1 -0
- package/dist/components/features/devices/devices-list.d.ts +131 -0
- package/dist/components/features/devices/devices-list.d.ts.map +1 -0
- package/dist/components/features/devices/devices-panel-header.d.ts +46 -0
- package/dist/components/features/devices/devices-panel-header.d.ts.map +1 -0
- package/dist/components/features/devices/devices-panel-view.d.ts +79 -0
- package/dist/components/features/devices/devices-panel-view.d.ts.map +1 -0
- package/dist/components/features/devices/devices-table-columns.d.ts +76 -0
- package/dist/components/features/devices/devices-table-columns.d.ts.map +1 -0
- package/dist/components/features/devices/devices-view-config.d.ts +25 -0
- package/dist/components/features/devices/devices-view-config.d.ts.map +1 -0
- package/dist/components/features/devices/index.d.ts +24 -0
- package/dist/components/features/devices/index.d.ts.map +1 -0
- package/dist/components/features/devices/types.d.ts +68 -0
- package/dist/components/features/devices/types.d.ts.map +1 -0
- package/dist/components/features/devices/use-tag-filter-modal.d.ts +50 -0
- package/dist/components/features/devices/use-tag-filter-modal.d.ts.map +1 -0
- package/dist/components/features/index.cjs +235 -12
- package/dist/components/features/index.d.ts +8 -0
- package/dist/components/features/index.d.ts.map +1 -1
- package/dist/components/features/index.js +274 -51
- package/dist/components/features/knowledge-base/index.d.ts +7 -0
- package/dist/components/features/knowledge-base/index.d.ts.map +1 -0
- package/dist/components/features/knowledge-base/knowledge-base-article-view.d.ts +44 -0
- package/dist/components/features/knowledge-base/knowledge-base-article-view.d.ts.map +1 -0
- package/dist/components/features/knowledge-base/knowledge-base-item-icon.d.ts +13 -0
- package/dist/components/features/knowledge-base/knowledge-base-item-icon.d.ts.map +1 -0
- package/dist/components/features/knowledge-base/knowledge-base-status.d.ts +8 -0
- package/dist/components/features/knowledge-base/knowledge-base-status.d.ts.map +1 -0
- package/dist/components/features/knowledge-base/knowledge-base-table.d.ts +52 -0
- package/dist/components/features/knowledge-base/knowledge-base-table.d.ts.map +1 -0
- package/dist/components/features/logs/index.d.ts +12 -0
- package/dist/components/features/logs/index.d.ts.map +1 -0
- package/dist/components/features/logs/log-drawer.d.ts +29 -0
- package/dist/components/features/logs/log-drawer.d.ts.map +1 -0
- package/dist/components/features/logs/log-source-labels.d.ts +11 -0
- package/dist/components/features/logs/log-source-labels.d.ts.map +1 -0
- package/dist/components/features/logs/logs-page-view.d.ts +32 -0
- package/dist/components/features/logs/logs-page-view.d.ts.map +1 -0
- package/dist/components/features/logs/logs-table-columns.d.ts +15 -0
- package/dist/components/features/logs/logs-table-columns.d.ts.map +1 -0
- package/dist/components/features/logs/logs-table-view.d.ts +64 -0
- package/dist/components/features/logs/logs-table-view.d.ts.map +1 -0
- package/dist/components/features/logs/types.d.ts +52 -0
- package/dist/components/features/logs/types.d.ts.map +1 -0
- package/dist/components/features/policies/compute-policy-summary.d.ts +37 -0
- package/dist/components/features/policies/compute-policy-summary.d.ts.map +1 -0
- package/dist/components/features/policies/index.d.ts +8 -0
- package/dist/components/features/policies/index.d.ts.map +1 -0
- package/dist/components/features/policies/policies-table.d.ts +34 -0
- package/dist/components/features/policies/policies-table.d.ts.map +1 -0
- package/dist/components/features/policies/policy-summary-cards.d.ts +17 -0
- package/dist/components/features/policies/policy-summary-cards.d.ts.map +1 -0
- package/dist/components/features/policies/policy-table-row.d.ts +37 -0
- package/dist/components/features/policies/policy-table-row.d.ts.map +1 -0
- package/dist/components/features/policy-configuration-panel.d.ts.map +1 -1
- package/dist/components/features/remote-session/index.d.ts +8 -0
- package/dist/components/features/remote-session/index.d.ts.map +1 -1
- package/dist/components/features/remote-session/remote-desktop-chat-message-row.d.ts +21 -0
- package/dist/components/features/remote-session/remote-desktop-chat-message-row.d.ts.map +1 -0
- package/dist/components/features/remote-session/remote-desktop-chat-panel.d.ts +31 -0
- package/dist/components/features/remote-session/remote-desktop-chat-panel.d.ts.map +1 -0
- package/dist/components/features/remote-session/remote-desktop-fullscreen-toolbar.d.ts +21 -0
- package/dist/components/features/remote-session/remote-desktop-fullscreen-toolbar.d.ts.map +1 -0
- package/dist/components/features/remote-session/remote-desktop-view.d.ts +50 -0
- package/dist/components/features/remote-session/remote-desktop-view.d.ts.map +1 -0
- package/dist/components/features/software/index.d.ts +8 -0
- package/dist/components/features/software/index.d.ts.map +1 -0
- package/dist/components/features/software/package-managers.d.ts +30 -0
- package/dist/components/features/software/package-managers.d.ts.map +1 -0
- package/dist/components/features/software/package-search-field-placeholder.d.ts +7 -0
- package/dist/components/features/software/package-search-field-placeholder.d.ts.map +1 -0
- package/dist/components/features/software/schedule-fields.d.ts +34 -0
- package/dist/components/features/software/schedule-fields.d.ts.map +1 -0
- package/dist/components/features/software/software-action-copy.d.ts +25 -0
- package/dist/components/features/software/software-action-copy.d.ts.map +1 -0
- package/dist/components/features/software/software-action-form.d.ts +71 -0
- package/dist/components/features/software/software-action-form.d.ts.map +1 -0
- package/dist/components/features/software/software-row-fields.d.ts +23 -0
- package/dist/components/features/software/software-row-fields.d.ts.map +1 -0
- package/dist/components/features/software/software-row.d.ts +18 -0
- package/dist/components/features/software/software-row.d.ts.map +1 -0
- package/dist/components/features/sortable-list/index.d.ts +1 -0
- package/dist/components/features/sortable-list/index.d.ts.map +1 -1
- package/dist/components/features/sortable-list/sortable-drag-handle.d.ts +21 -0
- package/dist/components/features/sortable-list/sortable-drag-handle.d.ts.map +1 -0
- package/dist/components/help-center-pages/index.cjs +133 -114
- package/dist/components/help-center-pages/index.js +58 -39
- package/dist/components/index.cjs +328 -82
- package/dist/components/index.js +459 -213
- package/dist/components/layout/page-heading.d.ts +12 -3
- package/dist/components/layout/page-heading.d.ts.map +1 -1
- package/dist/components/meeting-scheduler/index.cjs +120 -98
- package/dist/components/meeting-scheduler/index.js +50 -28
- package/dist/components/navigation/index.cjs +36 -17
- package/dist/components/navigation/index.d.ts +3 -0
- package/dist/components/navigation/index.d.ts.map +1 -1
- package/dist/components/navigation/index.js +36 -17
- package/dist/components/navigation/mingo-ai-button.d.ts +23 -10
- package/dist/components/navigation/mingo-ai-button.d.ts.map +1 -1
- package/dist/components/navigation/sticky-section-nav.d.ts +14 -1
- package/dist/components/navigation/sticky-section-nav.d.ts.map +1 -1
- package/dist/components/onboarding-guides/index.cjs +32 -16
- package/dist/components/onboarding-guides/index.js +31 -15
- package/dist/components/product-demo/cast.d.ts +58 -0
- package/dist/components/product-demo/cast.d.ts.map +1 -0
- package/dist/components/product-demo/fixtures/cloud-tenants.d.ts +10 -0
- package/dist/components/product-demo/fixtures/cloud-tenants.d.ts.map +1 -0
- package/dist/components/product-demo/fixtures/devices.d.ts +14 -0
- package/dist/components/product-demo/fixtures/devices.d.ts.map +1 -0
- package/dist/components/product-demo/fixtures/knowledge.d.ts +14 -0
- package/dist/components/product-demo/fixtures/knowledge.d.ts.map +1 -0
- package/dist/components/product-demo/fixtures/logs.d.ts +15 -0
- package/dist/components/product-demo/fixtures/logs.d.ts.map +1 -0
- package/dist/components/product-demo/fixtures/policies.d.ts +13 -0
- package/dist/components/product-demo/fixtures/policies.d.ts.map +1 -0
- package/dist/components/product-demo/fixtures/remote-session.d.ts +20 -0
- package/dist/components/product-demo/fixtures/remote-session.d.ts.map +1 -0
- package/dist/components/product-demo/fixtures/shared.d.ts +156 -0
- package/dist/components/product-demo/fixtures/shared.d.ts.map +1 -0
- package/dist/components/product-demo/fixtures/software-update.d.ts +19 -0
- package/dist/components/product-demo/fixtures/software-update.d.ts.map +1 -0
- package/dist/components/product-demo/fixtures/tickets-board.d.ts +8 -0
- package/dist/components/product-demo/fixtures/tickets-board.d.ts.map +1 -0
- package/dist/components/product-demo/index.cjs +112 -0
- package/dist/components/product-demo/index.d.ts +6 -0
- package/dist/components/product-demo/index.d.ts.map +1 -0
- package/dist/components/product-demo/index.js +112 -0
- package/dist/components/product-demo/product-screen.d.ts +22 -0
- package/dist/components/product-demo/product-screen.d.ts.map +1 -0
- package/dist/components/product-demo/registry.d.ts +13 -0
- package/dist/components/product-demo/registry.d.ts.map +1 -0
- package/dist/components/product-demo/screen-keys.cjs +25 -0
- package/dist/components/product-demo/screen-keys.d.ts +27 -0
- package/dist/components/product-demo/screen-keys.d.ts.map +1 -0
- package/dist/components/product-demo/screen-keys.js +20 -0
- package/dist/components/product-demo/screens/cloud-tenants.d.ts +8 -0
- package/dist/components/product-demo/screens/cloud-tenants.d.ts.map +1 -0
- package/dist/components/product-demo/screens/devices.d.ts +10 -0
- package/dist/components/product-demo/screens/devices.d.ts.map +1 -0
- package/dist/components/product-demo/screens/knowledge.d.ts +9 -0
- package/dist/components/product-demo/screens/knowledge.d.ts.map +1 -0
- package/dist/components/product-demo/screens/logs.d.ts +4 -0
- package/dist/components/product-demo/screens/logs.d.ts.map +1 -0
- package/dist/components/product-demo/screens/policies.d.ts +8 -0
- package/dist/components/product-demo/screens/policies.d.ts.map +1 -0
- package/dist/components/product-demo/screens/remote-desktop-picture.d.ts +11 -0
- package/dist/components/product-demo/screens/remote-desktop-picture.d.ts.map +1 -0
- package/dist/components/product-demo/screens/remote-session.d.ts +8 -0
- package/dist/components/product-demo/screens/remote-session.d.ts.map +1 -0
- package/dist/components/product-demo/screens/software-update.d.ts +12 -0
- package/dist/components/product-demo/screens/software-update.d.ts.map +1 -0
- package/dist/components/product-demo/screens/tickets-board.d.ts +4 -0
- package/dist/components/product-demo/screens/tickets-board.d.ts.map +1 -0
- package/dist/components/product-demo/types.d.ts +9 -0
- package/dist/components/product-demo/types.d.ts.map +1 -0
- package/dist/components/related-content/index.cjs +14 -8
- package/dist/components/related-content/index.js +13 -7
- package/dist/components/tickets/index.cjs +36 -20
- package/dist/components/tickets/index.js +35 -19
- package/dist/components/ui/file-manager/index.cjs +38 -34
- package/dist/components/ui/file-manager/index.js +8 -4
- package/dist/components/ui/index.cjs +57 -17
- package/dist/components/ui/index.d.ts +1 -0
- package/dist/components/ui/index.d.ts.map +1 -1
- package/dist/components/ui/index.js +141 -101
- package/dist/components/ui/product-screen-frame.d.ts +45 -0
- package/dist/components/ui/product-screen-frame.d.ts.map +1 -0
- package/dist/components/ui/radio-group.d.ts +5 -0
- package/dist/components/ui/radio-group.d.ts.map +1 -1
- package/dist/components/ui/snap-carousel.d.ts +11 -1
- package/dist/components/ui/snap-carousel.d.ts.map +1 -1
- package/dist/components/ui/tag.d.ts +1 -1
- package/dist/components/ui/tag.d.ts.map +1 -1
- package/dist/devices-6XKQTQM5.cjs +81 -0
- package/dist/devices-LXSFGGEZ.js +81 -0
- package/dist/hooks/index.cjs +17 -8
- package/dist/hooks/index.js +32 -23
- package/dist/hooks/ui/index.d.ts +1 -0
- package/dist/hooks/ui/index.d.ts.map +1 -1
- package/dist/hooks/ui/use-header-height.d.ts +12 -0
- package/dist/hooks/ui/use-header-height.d.ts.map +1 -1
- package/dist/hooks/ui/use-sticky-toolbar.d.ts +29 -0
- package/dist/hooks/ui/use-sticky-toolbar.d.ts.map +1 -0
- package/dist/hooks/use-location-hash.d.ts +2 -2
- package/dist/hooks/use-location-hash.d.ts.map +1 -1
- package/dist/hooks/use-scroll-to-hash.d.ts +7 -0
- package/dist/hooks/use-scroll-to-hash.d.ts.map +1 -1
- package/dist/index.cjs +284 -25
- package/dist/index.js +737 -478
- package/dist/knowledge-7PDZLXPO.cjs +108 -0
- package/dist/knowledge-Q4SPFOTN.js +108 -0
- package/dist/logs-SZ4VB4FE.js +216 -0
- package/dist/logs-TO3NELGJ.cjs +216 -0
- package/dist/policies-533GQVFM.cjs +121 -0
- package/dist/policies-LB7VW2UB.js +121 -0
- package/dist/remote-session-GSGZOFDX.js +196 -0
- package/dist/remote-session-R6VAFESR.cjs +196 -0
- package/dist/software-update-DT2XSG7M.cjs +179 -0
- package/dist/software-update-ENZNVGKP.js +179 -0
- package/dist/tickets-board-BHLPAVNJ.cjs +137 -0
- package/dist/tickets-board-PYDNELSK.js +137 -0
- package/dist/types/case-study.d.ts +15 -1
- package/dist/types/case-study.d.ts.map +1 -1
- package/dist/utils/date-utils.d.ts +5 -0
- package/dist/utils/date-utils.d.ts.map +1 -1
- package/dist/utils/index.cjs +45 -2
- package/dist/utils/index.d.ts +2 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +41 -3
- package/dist/utils/open-in-new-tab.d.ts +7 -0
- package/dist/utils/open-in-new-tab.d.ts.map +1 -0
- package/dist/utils/same-page-hash-nav.d.ts +31 -0
- package/dist/utils/same-page-hash-nav.d.ts.map +1 -1
- package/dist/utils/scroll-into-view.d.ts +14 -1
- package/dist/utils/scroll-into-view.d.ts.map +1 -1
- package/package.json +13 -1
- package/src/components/chat/ask-prompts.tsx +226 -0
- package/src/components/chat/embeddable-chat.tsx +36 -2
- package/src/components/chat/entity-cards/case-study-card.tsx +122 -46
- package/src/components/chat/index.ts +1 -0
- package/src/components/chat/quick-action-chip.tsx +33 -9
- package/src/components/docs/use-scroll-spy.ts +93 -18
- package/src/components/faq/faq-section.tsx +82 -43
- package/src/components/features/approval-level.tsx +149 -0
- package/src/components/features/array-entry-manager.tsx +10 -1
- package/src/components/features/board/board.tsx +4 -1
- package/src/components/features/board/ticket-card.tsx +11 -1
- package/src/components/features/board/touch-board.tsx +2 -1
- package/src/components/features/board/types.ts +3 -0
- package/src/components/features/board/use-board-collapse.ts +7 -2
- package/src/components/features/capability-explorer.tsx +412 -0
- package/src/components/features/cloud-tenants/index.ts +28 -0
- package/src/components/features/cloud-tenants/tenant-access-cell.tsx +24 -0
- package/src/components/features/cloud-tenants/tenant-cell.tsx +26 -0
- package/src/components/features/cloud-tenants/tenant-customer-cell.tsx +27 -0
- package/src/components/features/cloud-tenants/tenant-presentation.ts +111 -0
- package/src/components/features/cloud-tenants/tenant-row.ts +21 -0
- package/src/components/features/cloud-tenants/tenants-table-columns.ts +30 -0
- package/src/components/features/cloud-tenants/tenants-table-view.tsx +142 -0
- package/src/components/features/devices/device-last-online.ts +6 -0
- package/src/components/features/devices/device-name.ts +51 -0
- package/src/components/features/devices/device-selector/device-selection-mode-radio.tsx +107 -0
- package/src/components/features/devices/device-selector/device-selector-skeleton.tsx +32 -0
- package/src/components/features/devices/device-selector/device-selector.tsx +799 -0
- package/src/components/features/devices/device-selector/device-selector.types.ts +138 -0
- package/src/components/features/devices/device-selector/narrowing.ts +33 -0
- package/src/components/features/devices/device-selector/use-device-selector.ts +51 -0
- package/src/components/features/devices/device-status.ts +102 -0
- package/src/components/features/devices/device-statuses.ts +88 -0
- package/src/components/features/devices/device-tags-filter-button.tsx +49 -0
- package/src/components/features/devices/device-type-icon.tsx +29 -0
- package/src/components/features/devices/device-type-tile.tsx +17 -0
- package/src/components/features/devices/devices-filter-toolbar.tsx +114 -0
- package/src/components/features/devices/devices-grid-filters.tsx +99 -0
- package/src/components/features/devices/devices-grid.tsx +86 -0
- package/src/components/features/devices/devices-list.tsx +357 -0
- package/src/components/features/devices/devices-panel-header.tsx +97 -0
- package/src/components/features/devices/devices-panel-view.tsx +261 -0
- package/src/components/features/devices/devices-table-columns.tsx +356 -0
- package/src/components/features/devices/devices-view-config.tsx +38 -0
- package/src/components/features/devices/index.ts +89 -0
- package/src/components/features/devices/types.ts +74 -0
- package/src/components/features/devices/use-tag-filter-modal.ts +109 -0
- package/src/components/features/index.ts +10 -0
- package/src/components/features/knowledge-base/index.ts +19 -0
- package/src/components/features/knowledge-base/knowledge-base-article-view.tsx +134 -0
- package/src/components/features/knowledge-base/knowledge-base-item-icon.ts +14 -0
- package/src/components/features/knowledge-base/knowledge-base-status.ts +12 -0
- package/src/components/features/knowledge-base/knowledge-base-table.tsx +180 -0
- package/src/components/features/logs/index.ts +20 -0
- package/src/components/features/logs/log-drawer.tsx +138 -0
- package/src/components/features/logs/log-source-labels.ts +25 -0
- package/src/components/features/logs/logs-page-view.tsx +100 -0
- package/src/components/features/logs/logs-table-columns.ts +16 -0
- package/src/components/features/logs/logs-table-view.tsx +509 -0
- package/src/components/features/logs/types.ts +71 -0
- package/src/components/features/policies/compute-policy-summary.ts +115 -0
- package/src/components/features/policies/index.ts +14 -0
- package/src/components/features/policies/policies-table.tsx +235 -0
- package/src/components/features/policies/policy-summary-cards.tsx +69 -0
- package/src/components/features/policies/policy-table-row.ts +37 -0
- package/src/components/features/policy-configuration-panel.tsx +3 -12
- package/src/components/features/remote-session/index.ts +8 -0
- package/src/components/features/remote-session/remote-desktop-chat-message-row.tsx +56 -0
- package/src/components/features/remote-session/remote-desktop-chat-panel.tsx +102 -0
- package/src/components/features/remote-session/remote-desktop-fullscreen-toolbar.tsx +119 -0
- package/src/components/features/remote-session/remote-desktop-view.tsx +209 -0
- package/src/components/features/software/index.ts +39 -0
- package/src/components/features/software/package-managers.ts +54 -0
- package/src/components/features/software/package-search-field-placeholder.tsx +23 -0
- package/src/components/features/software/schedule-fields.tsx +105 -0
- package/src/components/features/software/software-action-copy.ts +70 -0
- package/src/components/features/software/software-action-form.tsx +199 -0
- package/src/components/features/software/software-row-fields.tsx +105 -0
- package/src/components/features/software/software-row.ts +22 -0
- package/src/components/features/sortable-list/index.ts +1 -0
- package/src/components/features/sortable-list/sortable-drag-handle.tsx +41 -0
- package/src/components/layout/page-heading.tsx +23 -6
- package/src/components/navigation/index.ts +5 -0
- package/src/components/navigation/mingo-ai-button.tsx +37 -13
- package/src/components/navigation/sticky-section-nav.tsx +99 -1
- package/src/components/product-demo/cast.tsx +78 -0
- package/src/components/product-demo/fixtures/cloud-tenants.ts +63 -0
- package/src/components/product-demo/fixtures/devices.ts +87 -0
- package/src/components/product-demo/fixtures/knowledge.ts +48 -0
- package/src/components/product-demo/fixtures/logs.ts +103 -0
- package/src/components/product-demo/fixtures/policies.ts +77 -0
- package/src/components/product-demo/fixtures/remote-session.ts +65 -0
- package/src/components/product-demo/fixtures/shared.ts +53 -0
- package/src/components/product-demo/fixtures/software-update.ts +63 -0
- package/src/components/product-demo/fixtures/tickets-board.ts +100 -0
- package/src/components/product-demo/index.ts +7 -0
- package/src/components/product-demo/product-screen.tsx +94 -0
- package/src/components/product-demo/registry.ts +20 -0
- package/src/components/product-demo/screen-keys.ts +31 -0
- package/src/components/product-demo/screens/cloud-tenants.tsx +23 -0
- package/src/components/product-demo/screens/devices.tsx +41 -0
- package/src/components/product-demo/screens/knowledge.tsx +27 -0
- package/src/components/product-demo/screens/logs.tsx +113 -0
- package/src/components/product-demo/screens/policies.tsx +29 -0
- package/src/components/product-demo/screens/remote-desktop-picture.tsx +118 -0
- package/src/components/product-demo/screens/remote-session.tsx +46 -0
- package/src/components/product-demo/screens/software-update.tsx +97 -0
- package/src/components/product-demo/screens/tickets-board.tsx +28 -0
- package/src/components/product-demo/types.ts +10 -0
- package/src/components/ui/index.ts +1 -0
- package/src/components/ui/product-screen-frame.tsx +136 -0
- package/src/components/ui/radio-group.tsx +16 -4
- package/src/components/ui/snap-carousel.tsx +26 -1
- package/src/components/ui/tag.tsx +5 -0
- package/src/hooks/ui/index.ts +1 -0
- package/src/hooks/ui/use-header-height.ts +51 -2
- package/src/hooks/ui/use-sticky-toolbar.ts +60 -0
- package/src/hooks/use-location-hash.ts +9 -5
- package/src/hooks/use-scroll-to-hash.ts +9 -1
- package/src/types/case-study.ts +21 -1
- package/src/utils/date-utils.ts +8 -1
- package/src/utils/index.ts +5 -0
- package/src/utils/open-in-new-tab.ts +12 -0
- package/src/utils/same-page-hash-nav.ts +57 -0
- package/src/utils/scroll-into-view.ts +21 -5
- package/dist/chunk-BM5MVGH3.cjs +0 -499
- package/dist/chunk-CUME3VTQ.js +0 -144
- package/dist/chunk-CZ7Y7UG4.js +0 -732
- package/dist/chunk-FLKJYMVB.js +0 -499
- package/dist/chunk-OF6GEI5A.cjs +0 -144
- package/dist/chunk-UVTD52MD.cjs +0 -732
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The cast every product-screen fixture draws from, so the screens of one page
|
|
3
|
+
* tell one story. The people are the hub's demo personas (invented names); the
|
|
4
|
+
* organizations and devices are invented too.
|
|
5
|
+
*/
|
|
6
|
+
export const DEMO_ORGANIZATIONS = {
|
|
7
|
+
acme: { id: 'org-acme', name: 'Acme Logistics', initials: 'AL', domain: 'acmelogistics.example' },
|
|
8
|
+
northbridge: { id: 'org-northbridge', name: 'Northbridge Legal', initials: 'NL', domain: 'northbridgelegal.example' },
|
|
9
|
+
harbor: { id: 'org-harbor', name: 'Harbor Dental', initials: 'HD', domain: 'harbordental.example' },
|
|
10
|
+
} as const;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* `slug` is the persona's slug at the host (the key its portrait arrives by,
|
|
14
|
+
* see `ProductDemoCastProvider`; the host's own technician is `tech`); `role` decides how the product draws the
|
|
15
|
+
* person: a technician works in the product, an end user is the customer's
|
|
16
|
+
* employee on the other end.
|
|
17
|
+
*/
|
|
18
|
+
export const DEMO_PEOPLE = {
|
|
19
|
+
jen: { id: 'user-jen', slug: 'jen', name: 'Jen Park', initials: 'JP', role: 'end_user' },
|
|
20
|
+
leo: { id: 'user-leo', slug: 'leo', name: 'Leo Martin', initials: 'LM', role: 'end_user' },
|
|
21
|
+
maya: { id: 'user-maya', slug: 'maya', name: 'Maya Lopez', initials: 'ML', role: 'end_user' },
|
|
22
|
+
priya: { id: 'user-priya', slug: 'priya', name: 'Priya Shah', initials: 'PS', role: 'end_user' },
|
|
23
|
+
sam: { id: 'user-sam', slug: 'sam', name: 'Sam Okafor', initials: 'SO', role: 'end_user' },
|
|
24
|
+
dana: { id: 'user-dana', slug: 'tech', name: 'Dana Reyes', initials: 'DR', role: 'technician' },
|
|
25
|
+
alex: { id: 'user-alex', slug: 'alex-reed', name: 'Alex Reed', initials: 'AR', role: 'technician' },
|
|
26
|
+
roman: { id: 'user-roman', slug: 'roman-smith', name: 'Roman Smith', initials: 'RS', role: 'technician' },
|
|
27
|
+
sara: { id: 'user-sara', slug: 'sara-kim', name: 'Sara Kim', initials: 'SK', role: 'technician' },
|
|
28
|
+
} as const;
|
|
29
|
+
|
|
30
|
+
export type DemoPersonKey = keyof typeof DEMO_PEOPLE;
|
|
31
|
+
export type DemoOrganizationKey = keyof typeof DEMO_ORGANIZATIONS;
|
|
32
|
+
|
|
33
|
+
export const DEMO_DEVICES = {
|
|
34
|
+
frontDesk: { id: 'device-frontdesk', hostname: 'FRONTDESK-LT02', os: 'WINDOWS', organization: 'harbor' },
|
|
35
|
+
mayaAir: { id: 'device-maya', hostname: 'MAYA-MBA', os: 'MAC_OS', organization: 'northbridge' },
|
|
36
|
+
samT14: { id: 'device-sam', hostname: 'SAM-T14', os: 'WINDOWS', organization: 'northbridge' },
|
|
37
|
+
reception: { id: 'device-reception', hostname: 'RECEPTION-01', os: 'WINDOWS', organization: 'acme' },
|
|
38
|
+
leoThinkPad: { id: 'device-leo', hostname: 'LEO-THINKPAD', os: 'WINDOWS', organization: 'harbor' },
|
|
39
|
+
buildServer: { id: 'device-build', hostname: 'BUILD-SRV-01', os: 'LINUX', organization: 'acme' },
|
|
40
|
+
jenSurface: { id: 'device-jen', hostname: 'JEN-SURFACE', os: 'WINDOWS', organization: 'acme' },
|
|
41
|
+
priyaXps: { id: 'device-priya', hostname: 'PRIYA-XPS', os: 'WINDOWS', organization: 'northbridge' },
|
|
42
|
+
} as const;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* A fixed "now" for relative times, so a screen reads the same on every render
|
|
46
|
+
* and never drifts between the server and the browser.
|
|
47
|
+
*/
|
|
48
|
+
export const DEMO_NOW = '2026-10-06T14:05:00.000Z';
|
|
49
|
+
|
|
50
|
+
/** An instant `minutes` before {@link DEMO_NOW}. */
|
|
51
|
+
export function demoMinutesAgo(minutes: number): string {
|
|
52
|
+
return new Date(Date.parse(DEMO_NOW) - minutes * 60_000).toISOString();
|
|
53
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { DeviceRow } from '../../features/devices';
|
|
2
|
+
import type { SelectedPackage, SoftwareActionFormProps, SoftwareScheduleTiming } from '../../features/software';
|
|
3
|
+
import type { DemoCast } from '../cast';
|
|
4
|
+
import { buildDevicesFixture } from './devices';
|
|
5
|
+
import { DEMO_DEVICES, DEMO_NOW } from './shared';
|
|
6
|
+
|
|
7
|
+
/** The catalog entry the row holds: WinGet's Google Chrome. */
|
|
8
|
+
const chrome: SelectedPackage = {
|
|
9
|
+
id: 'Google.Chrome',
|
|
10
|
+
name: 'Google Chrome',
|
|
11
|
+
description: 'A fast, secure web browser built for the modern web',
|
|
12
|
+
version: '141.0.7390.66',
|
|
13
|
+
packageType: null,
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
/** The demo day as a local calendar day, so the date field reads the same in every timezone. */
|
|
17
|
+
function demoDay(): Date {
|
|
18
|
+
const [year, month, day] = DEMO_NOW.slice(0, 10).split('-').map(Number);
|
|
19
|
+
return new Date(year, month - 1, day);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const TONIGHT_11_PM = { value: '23:00', label: '11:00 PM' };
|
|
23
|
+
|
|
24
|
+
/** A fixed reading of the schedule fields: tonight's late slots, nothing in the past. */
|
|
25
|
+
const timing: SoftwareScheduleTiming = {
|
|
26
|
+
timeReferenceOptions: [
|
|
27
|
+
{ value: 'SERVER', label: 'Your account timezone' },
|
|
28
|
+
{ value: 'DEVICE_LOCAL', label: 'Device local timezone' },
|
|
29
|
+
],
|
|
30
|
+
getTimeOptions: () => [
|
|
31
|
+
{ value: '22:00', label: '10:00 PM' },
|
|
32
|
+
{ value: '22:30', label: '10:30 PM' },
|
|
33
|
+
TONIGHT_11_PM,
|
|
34
|
+
{ value: '23:30', label: '11:30 PM' },
|
|
35
|
+
],
|
|
36
|
+
getEarliestDay: demoDay,
|
|
37
|
+
getStartError: () => undefined,
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
const initialValues: SoftwareActionFormProps['initialValues'] = {
|
|
41
|
+
rows: [{ key: 'row-0', packageManager: 'WINGET', pkg: chrome }],
|
|
42
|
+
mode: 'schedule',
|
|
43
|
+
date: demoDay(),
|
|
44
|
+
time: TONIGHT_11_PM.value,
|
|
45
|
+
timeReference: 'SERVER',
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Chrome updated tonight at 11 PM on the Windows devices picked for it (WinGet
|
|
50
|
+
* installs on Windows, so the picker offers the fleet's Windows devices), one
|
|
51
|
+
* of them offline until it reconnects.
|
|
52
|
+
*/
|
|
53
|
+
export function buildSoftwareUpdateFixture(cast: DemoCast) {
|
|
54
|
+
const devices: DeviceRow[] = buildDevicesFixture(cast).devices.filter(device => device.osType === 'WINDOWS');
|
|
55
|
+
return {
|
|
56
|
+
action: 'UPDATE',
|
|
57
|
+
package: chrome,
|
|
58
|
+
timing,
|
|
59
|
+
initialValues,
|
|
60
|
+
devices,
|
|
61
|
+
selectedIds: new Set<string>([DEMO_DEVICES.reception.id, DEMO_DEVICES.samT14.id, DEMO_DEVICES.frontDesk.id]),
|
|
62
|
+
} as const;
|
|
63
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { columnFromTicketStatus, type BoardColumnDef, type BoardTicket } from '../../features/board';
|
|
2
|
+
import type { DemoCast, DemoPerson } from '../cast';
|
|
3
|
+
import { DEMO_DEVICES, DEMO_ORGANIZATIONS } from './shared';
|
|
4
|
+
|
|
5
|
+
function ticket(
|
|
6
|
+
id: string,
|
|
7
|
+
title: string,
|
|
8
|
+
status: string,
|
|
9
|
+
rest: Omit<BoardTicket, 'id' | 'title' | 'status' | 'ticketNumber'> & { ticketNumber?: string },
|
|
10
|
+
): BoardTicket {
|
|
11
|
+
return { id, title, status, ticketNumber: rest.ticketNumber ?? '', ...rest };
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const assignee = ({ id, name, initials, avatarUrl }: DemoPerson) => ({ id, name, initials, avatarUrl });
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* A help desk mid-morning: Fae opened and closed most of it, one ticket waits
|
|
18
|
+
* for a technician's approval, and the technicians hold what needs a person.
|
|
19
|
+
*/
|
|
20
|
+
export function buildTicketsBoardFixture(cast: DemoCast): BoardColumnDef[] {
|
|
21
|
+
const dana = assignee(cast.person('dana'));
|
|
22
|
+
const alex = assignee(cast.person('alex'));
|
|
23
|
+
return [
|
|
24
|
+
columnFromTicketStatus('ACTIVE', [
|
|
25
|
+
ticket('tk-1051', 'Printer offline at the front desk', 'ACTIVE', {
|
|
26
|
+
ticketNumber: '1051',
|
|
27
|
+
agent: 'fae',
|
|
28
|
+
deviceHostnames: [DEMO_DEVICES.frontDesk.hostname],
|
|
29
|
+
organizationName: DEMO_ORGANIZATIONS.harbor.name,
|
|
30
|
+
priority: 'medium',
|
|
31
|
+
hasNewMessage: true,
|
|
32
|
+
activity: { kind: 'ai-working' },
|
|
33
|
+
}),
|
|
34
|
+
ticket('tk-1052', 'New hire starts Monday', 'ACTIVE', {
|
|
35
|
+
ticketNumber: '1052',
|
|
36
|
+
agent: 'mingo',
|
|
37
|
+
organizationName: DEMO_ORGANIZATIONS.acme.name,
|
|
38
|
+
priority: 'low',
|
|
39
|
+
tags: ['onboarding'],
|
|
40
|
+
}),
|
|
41
|
+
]),
|
|
42
|
+
columnFromTicketStatus('TECH_REQUIRED', [
|
|
43
|
+
ticket('tk-1049', 'Acrobat Pro for Maya', 'TECH_REQUIRED', {
|
|
44
|
+
ticketNumber: '1049',
|
|
45
|
+
agent: 'fae',
|
|
46
|
+
deviceHostnames: [DEMO_DEVICES.mayaAir.hostname],
|
|
47
|
+
organizationName: DEMO_ORGANIZATIONS.northbridge.name,
|
|
48
|
+
priority: 'high',
|
|
49
|
+
assignees: [dana],
|
|
50
|
+
pendingApproval: {
|
|
51
|
+
id: 'approval-1049',
|
|
52
|
+
approvalType: 'INSTALL',
|
|
53
|
+
explanation: 'Install Adobe Acrobat Pro (paid license)',
|
|
54
|
+
},
|
|
55
|
+
}),
|
|
56
|
+
ticket('tk-1050', 'VPN keeps dropping on the train', 'TECH_REQUIRED', {
|
|
57
|
+
ticketNumber: '1050',
|
|
58
|
+
agent: 'fae',
|
|
59
|
+
deviceHostnames: [DEMO_DEVICES.samT14.hostname],
|
|
60
|
+
organizationName: DEMO_ORGANIZATIONS.northbridge.name,
|
|
61
|
+
priority: 'medium',
|
|
62
|
+
assignees: [alex],
|
|
63
|
+
escalatedByUser: true,
|
|
64
|
+
}),
|
|
65
|
+
]),
|
|
66
|
+
columnFromTicketStatus('ON_HOLD', [
|
|
67
|
+
ticket('tk-1046', 'Replace the conference room display', 'ON_HOLD', {
|
|
68
|
+
ticketNumber: '1046',
|
|
69
|
+
organizationName: DEMO_ORGANIZATIONS.acme.name,
|
|
70
|
+
priority: 'low',
|
|
71
|
+
assignees: [alex],
|
|
72
|
+
activity: { kind: 'waiting-external' },
|
|
73
|
+
}),
|
|
74
|
+
]),
|
|
75
|
+
columnFromTicketStatus(
|
|
76
|
+
'RESOLVED',
|
|
77
|
+
[
|
|
78
|
+
ticket('tk-1048', 'Slow laptop', 'RESOLVED', {
|
|
79
|
+
ticketNumber: '1048',
|
|
80
|
+
agent: 'fae',
|
|
81
|
+
deviceHostnames: [DEMO_DEVICES.samT14.hostname],
|
|
82
|
+
organizationName: DEMO_ORGANIZATIONS.northbridge.name,
|
|
83
|
+
}),
|
|
84
|
+
ticket('tk-1047', 'Teams will not open', 'RESOLVED', {
|
|
85
|
+
ticketNumber: '1047',
|
|
86
|
+
agent: 'fae',
|
|
87
|
+
deviceHostnames: [DEMO_DEVICES.mayaAir.hostname],
|
|
88
|
+
organizationName: DEMO_ORGANIZATIONS.northbridge.name,
|
|
89
|
+
}),
|
|
90
|
+
ticket('tk-1045', 'Turned the firewall back on', 'RESOLVED', {
|
|
91
|
+
ticketNumber: '1045',
|
|
92
|
+
agent: 'mingo',
|
|
93
|
+
deviceHostnames: [DEMO_DEVICES.leoThinkPad.hostname],
|
|
94
|
+
organizationName: DEMO_ORGANIZATIONS.harbor.name,
|
|
95
|
+
}),
|
|
96
|
+
],
|
|
97
|
+
{ total: 14 },
|
|
98
|
+
),
|
|
99
|
+
];
|
|
100
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
export { ProductDemoCastProvider, resolveProductDemoCast, useProductDemoCast } from './cast';
|
|
4
|
+
export type { DemoCast, DemoOrganization, DemoPerson, ProductDemoCast } from './cast';
|
|
5
|
+
export * from './product-screen';
|
|
6
|
+
export * from './screen-keys';
|
|
7
|
+
export type { ProductScreenComponent, ProductScreenViewProps } from './types';
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { lazy, type LazyExoticComponent, Suspense } from 'react';
|
|
4
|
+
import { ProductScreenFrame, type ProductScreenFrameProps } from '../ui/product-screen-frame';
|
|
5
|
+
import { Skeleton } from '../ui/skeleton';
|
|
6
|
+
import { PRODUCT_SCREEN_LOADERS } from './registry';
|
|
7
|
+
import { PRODUCT_SCREEN_KEYS, PRODUCT_SCREEN_LABELS, type ProductScreenKey } from './screen-keys';
|
|
8
|
+
import type { ProductScreenComponent } from './types';
|
|
9
|
+
|
|
10
|
+
/** One lazy component per screen, made once: a screen's code is fetched the first time it renders. */
|
|
11
|
+
const LAZY_SCREENS = Object.fromEntries(
|
|
12
|
+
PRODUCT_SCREEN_KEYS.map(key => [key, lazy(PRODUCT_SCREEN_LOADERS[key])]),
|
|
13
|
+
) as Record<ProductScreenKey, LazyExoticComponent<ProductScreenComponent>>;
|
|
14
|
+
|
|
15
|
+
/** Frame heights of the two renderings: constants, so a skeleton and the loaded screen are one box. */
|
|
16
|
+
export const PRODUCT_SCREEN_HEIGHT = 440;
|
|
17
|
+
export const PRODUCT_SCREEN_COMPACT_HEIGHT = 300;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* The narrowest layout a screen reads well at, where that is wider than a
|
|
21
|
+
* host's readable width: the device list's customer column breaks a name
|
|
22
|
+
* mid-word below it, and the logs table beside its open drawer has no room
|
|
23
|
+
* for the message; the software form is laid out wide so the package, the
|
|
24
|
+
* schedule and the picked devices all fit the frame's height. A frame never
|
|
25
|
+
* lays such a screen out narrower.
|
|
26
|
+
*/
|
|
27
|
+
const MIN_LAYOUT_WIDTH: Partial<Record<ProductScreenKey, number>> = {
|
|
28
|
+
devices: 1120,
|
|
29
|
+
logs: 1120,
|
|
30
|
+
'software-update': 1400,
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* A compact screen that has no layout of its own for a card's width: the
|
|
35
|
+
* remote desktop's control bar needs more room than a phone's card gives, so
|
|
36
|
+
* its compact rendering is laid out at this width and scaled to the card, the
|
|
37
|
+
* way a wide frame scales the full page.
|
|
38
|
+
*/
|
|
39
|
+
const COMPACT_LAYOUT_WIDTH: Partial<Record<ProductScreenKey, number>> = {
|
|
40
|
+
'remote-session': 380,
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export interface ProductScreenProps extends Omit<ProductScreenFrameProps, 'children' | 'label' | 'height'> {
|
|
44
|
+
screen: ProductScreenKey;
|
|
45
|
+
/** The narrow rendering in the short frame. */
|
|
46
|
+
compact?: boolean;
|
|
47
|
+
/** Overrides the registry's label. */
|
|
48
|
+
label?: string;
|
|
49
|
+
/** Overrides the frame height of the rendering. */
|
|
50
|
+
height?: number | string;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** The box a product screen occupies while it loads. */
|
|
54
|
+
export function ProductScreenSkeleton({
|
|
55
|
+
compact = false,
|
|
56
|
+
height,
|
|
57
|
+
className,
|
|
58
|
+
}: Pick<ProductScreenProps, 'compact' | 'height' | 'className'>) {
|
|
59
|
+
return (
|
|
60
|
+
<Skeleton
|
|
61
|
+
className={className}
|
|
62
|
+
style={{ height: height ?? (compact ? PRODUCT_SCREEN_COMPACT_HEIGHT : PRODUCT_SCREEN_HEIGHT) }}
|
|
63
|
+
/>
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* One product screen of the registry, in its frame. The screen's code is
|
|
69
|
+
* downloaded when this mounts; until then the frame holds its box.
|
|
70
|
+
*/
|
|
71
|
+
export function ProductScreen({ screen, compact = false, label, height, designWidth, ...frame }: ProductScreenProps) {
|
|
72
|
+
const Screen = LAZY_SCREENS[screen];
|
|
73
|
+
const frameHeight = height ?? (compact ? PRODUCT_SCREEN_COMPACT_HEIGHT : PRODUCT_SCREEN_HEIGHT);
|
|
74
|
+
const minWidth = compact ? undefined : MIN_LAYOUT_WIDTH[screen];
|
|
75
|
+
const compactWidth = compact ? COMPACT_LAYOUT_WIDTH[screen] : undefined;
|
|
76
|
+
const layoutWidth =
|
|
77
|
+
compactWidth ??
|
|
78
|
+
// A screen with a minimum keeps it whether or not the host names a width (the frame's default is narrower).
|
|
79
|
+
(minWidth !== undefined ? Math.max(designWidth ?? minWidth, minWidth) : designWidth);
|
|
80
|
+
return (
|
|
81
|
+
<ProductScreenFrame
|
|
82
|
+
{...frame}
|
|
83
|
+
designWidth={layoutWidth}
|
|
84
|
+
// Scaled at every width below its layout width: there is no narrower layout to fall to.
|
|
85
|
+
{...(compactWidth !== undefined && { scaleFrom: 0 })}
|
|
86
|
+
label={label ?? PRODUCT_SCREEN_LABELS[screen]}
|
|
87
|
+
height={frameHeight}
|
|
88
|
+
>
|
|
89
|
+
<Suspense fallback={<Skeleton className="h-full w-full" />}>
|
|
90
|
+
<Screen compact={compact} />
|
|
91
|
+
</Suspense>
|
|
92
|
+
</ProductScreenFrame>
|
|
93
|
+
);
|
|
94
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ProductScreenKey } from './screen-keys';
|
|
2
|
+
import type { ProductScreenComponent } from './types';
|
|
3
|
+
|
|
4
|
+
type ProductScreenLoader = () => Promise<{ default: ProductScreenComponent }>;
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* How each screen of `screen-keys` is loaded: the product's own view rendered
|
|
8
|
+
* with a fixture from `./fixtures`, one chunk per screen. The `Record` type
|
|
9
|
+
* makes a key without a loader a compile error.
|
|
10
|
+
*/
|
|
11
|
+
export const PRODUCT_SCREEN_LOADERS: Record<ProductScreenKey, ProductScreenLoader> = {
|
|
12
|
+
'remote-session': () => import('./screens/remote-session'),
|
|
13
|
+
'software-update': () => import('./screens/software-update'),
|
|
14
|
+
devices: () => import('./screens/devices'),
|
|
15
|
+
policies: () => import('./screens/policies'),
|
|
16
|
+
'cloud-tenants': () => import('./screens/cloud-tenants'),
|
|
17
|
+
'tickets-board': () => import('./screens/tickets-board'),
|
|
18
|
+
logs: () => import('./screens/logs'),
|
|
19
|
+
knowledge: () => import('./screens/knowledge'),
|
|
20
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The product screens a marketing page can show: key and label. A key is
|
|
3
|
+
* stored by hosts (the hub keeps one per capability), so it is a contract:
|
|
4
|
+
* never rename one, add a new one instead.
|
|
5
|
+
*
|
|
6
|
+
* Leaf module with no React and no loaders, so a host reads it on the server
|
|
7
|
+
* (to validate a stored key, to fill a picker). The loaders are in `registry`.
|
|
8
|
+
*/
|
|
9
|
+
export const PRODUCT_SCREEN_LABELS = {
|
|
10
|
+
'remote-session': 'Remote desktop session',
|
|
11
|
+
'software-update': 'Update software',
|
|
12
|
+
devices: 'Devices',
|
|
13
|
+
policies: 'Policies',
|
|
14
|
+
'cloud-tenants': 'Cloud tenants',
|
|
15
|
+
'tickets-board': 'Ticket board',
|
|
16
|
+
logs: 'Logs with a log open',
|
|
17
|
+
knowledge: 'Knowledge base',
|
|
18
|
+
} as const;
|
|
19
|
+
|
|
20
|
+
export type ProductScreenKey = keyof typeof PRODUCT_SCREEN_LABELS;
|
|
21
|
+
|
|
22
|
+
export const PRODUCT_SCREEN_KEYS = Object.keys(PRODUCT_SCREEN_LABELS) as ProductScreenKey[];
|
|
23
|
+
|
|
24
|
+
export function isProductScreenKey(value: unknown): value is ProductScreenKey {
|
|
25
|
+
return typeof value === 'string' && Object.prototype.hasOwnProperty.call(PRODUCT_SCREEN_LABELS, value);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/** Key and label of every screen, for a picker. */
|
|
29
|
+
export const PRODUCT_SCREEN_OPTIONS: readonly { value: ProductScreenKey; label: string }[] = PRODUCT_SCREEN_KEYS.map(
|
|
30
|
+
key => ({ value: key, label: PRODUCT_SCREEN_LABELS[key] }),
|
|
31
|
+
);
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useMemo } from 'react';
|
|
4
|
+
import { TenantsTableView } from '../../features/cloud-tenants';
|
|
5
|
+
import { useProductDemoCast } from '../cast';
|
|
6
|
+
import { buildCloudTenantsFixture } from '../fixtures/cloud-tenants';
|
|
7
|
+
import type { ProductScreenViewProps } from '../types';
|
|
8
|
+
|
|
9
|
+
/** A picture has nowhere to go: every row leads to the same inert address. */
|
|
10
|
+
const getHref = () => '#';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* The product's Cloud Tenant Management list without its title row and its
|
|
14
|
+
* empty search field (the job is named above the picture): the tenants table,
|
|
15
|
+
* each with its directory, its customer and what the last access probe found.
|
|
16
|
+
*/
|
|
17
|
+
export default function CloudTenantsScreen(_props: ProductScreenViewProps) {
|
|
18
|
+
const cast = useProductDemoCast();
|
|
19
|
+
const fixture = useMemo(() => buildCloudTenantsFixture(cast), [cast]);
|
|
20
|
+
const table = <TenantsTableView rows={fixture.rows} getHref={getHref} now={fixture.now} />;
|
|
21
|
+
|
|
22
|
+
return <div className="h-full bg-ods-bg p-[var(--spacing-system-l)]">{table}</div>;
|
|
23
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useMemo } from 'react';
|
|
4
|
+
import { DevicesPanelView, IDLE_DEVICES_TOOLBAR } from '../../features/devices';
|
|
5
|
+
import { useProductDemoCast } from '../cast';
|
|
6
|
+
import { buildWindowsDevicesFixture, DEVICES_SEARCH_QUERY } from '../fixtures/devices';
|
|
7
|
+
import type { ProductScreenViewProps } from '../types';
|
|
8
|
+
|
|
9
|
+
/** The toolbar with the search the rows answer: chrome that shows state. */
|
|
10
|
+
const TOOLBAR = { ...IDLE_DEVICES_TOOLBAR, searchValue: DEVICES_SEARCH_QUERY };
|
|
11
|
+
|
|
12
|
+
/** Stands in for the page header (title, view switch, buttons): the job is named above the picture. */
|
|
13
|
+
const NO_HEADER = <></>;
|
|
14
|
+
|
|
15
|
+
const HIDDEN_WHEN_COMPACT = ['organization'];
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* The product's Devices page in its table view, answering a search: the query
|
|
19
|
+
* in the toolbar, the rows that match. No title row (the job is named above the
|
|
20
|
+
* picture) and no row menu (a closed menu carries nothing and the customer
|
|
21
|
+
* needs the room). The narrow rendering drops the customer column and keeps
|
|
22
|
+
* device, status and OS.
|
|
23
|
+
*/
|
|
24
|
+
export default function DevicesScreen({ compact = false }: ProductScreenViewProps) {
|
|
25
|
+
const cast = useProductDemoCast();
|
|
26
|
+
const fixture = useMemo(() => buildWindowsDevicesFixture(cast), [cast]);
|
|
27
|
+
return (
|
|
28
|
+
<div className="h-full bg-ods-bg">
|
|
29
|
+
<DevicesPanelView
|
|
30
|
+
className="p-[var(--spacing-system-l)]"
|
|
31
|
+
headerSlot={NO_HEADER}
|
|
32
|
+
toolbar={TOOLBAR}
|
|
33
|
+
viewMode="table"
|
|
34
|
+
devices={fixture.devices}
|
|
35
|
+
deviceFilters={fixture.deviceFilters}
|
|
36
|
+
totalCount={fixture.totalCount}
|
|
37
|
+
hideColumns={compact ? HIDDEN_WHEN_COMPACT : undefined}
|
|
38
|
+
/>
|
|
39
|
+
</div>
|
|
40
|
+
);
|
|
41
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useMemo } from 'react';
|
|
4
|
+
import { KnowledgeBaseArticleView } from '../../features/knowledge-base';
|
|
5
|
+
import { SimpleMarkdownRenderer } from '../../ui/markdown/simple-markdown-renderer';
|
|
6
|
+
import { useProductDemoCast } from '../cast';
|
|
7
|
+
import { buildKnowledgeFixture } from '../fixtures/knowledge';
|
|
8
|
+
import type { ProductScreenViewProps } from '../types';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* The product's Knowledge Base with one article open: a client's runbook, its
|
|
12
|
+
* author and status, and the steps. A list of file names says nothing about
|
|
13
|
+
* the job; an open runbook does. The title is the article's own name, the one
|
|
14
|
+
* line that says what is open; the page's buttons are left out.
|
|
15
|
+
*/
|
|
16
|
+
export default function KnowledgeScreen(_props: ProductScreenViewProps) {
|
|
17
|
+
const cast = useProductDemoCast();
|
|
18
|
+
const fixture = useMemo(() => buildKnowledgeFixture(cast), [cast]);
|
|
19
|
+
return (
|
|
20
|
+
<div className="h-full bg-ods-bg">
|
|
21
|
+
<KnowledgeBaseArticleView
|
|
22
|
+
{...fixture.article}
|
|
23
|
+
content={<SimpleMarkdownRenderer content={fixture.content} textSize="compact" />}
|
|
24
|
+
/>
|
|
25
|
+
</div>
|
|
26
|
+
);
|
|
27
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
import { normalizeToolTypeWithFallback } from '../../../utils/tool-utils';
|
|
5
|
+
import {
|
|
6
|
+
LogCopyIconButton,
|
|
7
|
+
LogDrawer,
|
|
8
|
+
logSourceLabels,
|
|
9
|
+
LogsPageView,
|
|
10
|
+
type LogsTableColumnId,
|
|
11
|
+
LogsTableView,
|
|
12
|
+
} from '../../features/logs';
|
|
13
|
+
import { AppLayoutDrawerContainerContext } from '../../navigation/app-layout-context';
|
|
14
|
+
import { ToolBadge } from '../../platform/ToolBadge';
|
|
15
|
+
import { Button } from '../../ui/button';
|
|
16
|
+
import { DeviceCard } from '../../ui/device-card';
|
|
17
|
+
import {
|
|
18
|
+
LOGS_FIXTURE_DEVICE,
|
|
19
|
+
LOGS_FIXTURE_ENTRIES,
|
|
20
|
+
LOGS_FIXTURE_FACETS,
|
|
21
|
+
LOGS_FIXTURE_SEARCH,
|
|
22
|
+
LOGS_FIXTURE_SELECTED,
|
|
23
|
+
LOGS_FIXTURE_SELECTED_DETAILS,
|
|
24
|
+
} from '../fixtures/logs';
|
|
25
|
+
import type { ProductScreenViewProps } from '../types';
|
|
26
|
+
|
|
27
|
+
const noop = () => {};
|
|
28
|
+
const NO_FILTERS: Record<string, string[]> = {};
|
|
29
|
+
/** A row's action buttons carry nothing in a picture and squeeze what the row is about: both renderings drop them. */
|
|
30
|
+
const ACTION_COLUMNS: LogsTableColumnId[] = ['copy', 'quickView', 'open'];
|
|
31
|
+
/**
|
|
32
|
+
* Beside the open drawer the table keeps when, how bad and what happened: the
|
|
33
|
+
* tool and the device are in the drawer, and their fixed widths would leave
|
|
34
|
+
* the message no room.
|
|
35
|
+
*/
|
|
36
|
+
const BESIDE_DRAWER_HIDDEN: LogsTableColumnId[] = [...ACTION_COLUMNS, 'tool', 'source'];
|
|
37
|
+
const logHref = () => '#';
|
|
38
|
+
const copyAction = () => <LogCopyIconButton />;
|
|
39
|
+
|
|
40
|
+
/** The product's Logs page with one entry open in the Log Details drawer; the narrow rendering is the table alone. */
|
|
41
|
+
export default function LogsScreen({ compact = false }: ProductScreenViewProps) {
|
|
42
|
+
// The drawer portals into this box, so it stays inside the screen, docked beside the table.
|
|
43
|
+
const [dock, setDock] = useState<HTMLDivElement | null>(null);
|
|
44
|
+
const selected = LOGS_FIXTURE_SELECTED;
|
|
45
|
+
|
|
46
|
+
return (
|
|
47
|
+
<div className="flex h-full bg-ods-bg">
|
|
48
|
+
{/* Clipped, not a scroll container: the page's sticky toolbar and table header measure from the frame, as they do from the product's page. */}
|
|
49
|
+
<div className="min-w-0 flex-1 overflow-clip">
|
|
50
|
+
{/* No title row: the job is named above the picture. The search shows the query the rows answer. */}
|
|
51
|
+
<LogsPageView
|
|
52
|
+
showHeader={false}
|
|
53
|
+
className="p-[var(--spacing-system-l)]"
|
|
54
|
+
search={LOGS_FIXTURE_SEARCH}
|
|
55
|
+
onSearchChange={noop}
|
|
56
|
+
onOpenFilters={noop}
|
|
57
|
+
>
|
|
58
|
+
<LogsTableView
|
|
59
|
+
logs={LOGS_FIXTURE_ENTRIES}
|
|
60
|
+
facets={LOGS_FIXTURE_FACETS}
|
|
61
|
+
filters={NO_FILTERS}
|
|
62
|
+
onFilterChange={noop}
|
|
63
|
+
getLogHref={logHref}
|
|
64
|
+
renderCopyAction={copyAction}
|
|
65
|
+
onQuickView={noop}
|
|
66
|
+
hiddenColumns={compact ? ACTION_COLUMNS : BESIDE_DRAWER_HIDDEN}
|
|
67
|
+
/>
|
|
68
|
+
</LogsPageView>
|
|
69
|
+
</div>
|
|
70
|
+
|
|
71
|
+
{!compact && (
|
|
72
|
+
<div ref={setDock} className="relative w-[calc(400px+var(--spacing-system-m))] shrink-0">
|
|
73
|
+
{dock && (
|
|
74
|
+
<AppLayoutDrawerContainerContext.Provider value={dock}>
|
|
75
|
+
<LogDrawer
|
|
76
|
+
docked
|
|
77
|
+
isOpen
|
|
78
|
+
onClose={noop}
|
|
79
|
+
description={<div className="whitespace-pre-wrap break-words">{LOGS_FIXTURE_SELECTED_DETAILS}</div>}
|
|
80
|
+
statusTag={selected.status}
|
|
81
|
+
timestamp={selected.timestamp}
|
|
82
|
+
infoFields={[
|
|
83
|
+
{ label: 'Log ID', value: selected.logId },
|
|
84
|
+
{
|
|
85
|
+
label: 'Source',
|
|
86
|
+
value: <ToolBadge toolType={normalizeToolTypeWithFallback(selected.source.toolType)} />,
|
|
87
|
+
},
|
|
88
|
+
{ label: 'Device', value: logSourceLabels(selected.device).deviceName },
|
|
89
|
+
]}
|
|
90
|
+
deviceCard={
|
|
91
|
+
<DeviceCard
|
|
92
|
+
{...LOGS_FIXTURE_DEVICE}
|
|
93
|
+
actions={{
|
|
94
|
+
moreButton: { visible: false },
|
|
95
|
+
detailsButton: {
|
|
96
|
+
visible: true,
|
|
97
|
+
component: (
|
|
98
|
+
<Button variant="outline" className="shrink-0">
|
|
99
|
+
Details
|
|
100
|
+
</Button>
|
|
101
|
+
),
|
|
102
|
+
},
|
|
103
|
+
}}
|
|
104
|
+
/>
|
|
105
|
+
}
|
|
106
|
+
/>
|
|
107
|
+
</AppLayoutDrawerContainerContext.Provider>
|
|
108
|
+
)}
|
|
109
|
+
</div>
|
|
110
|
+
)}
|
|
111
|
+
</div>
|
|
112
|
+
);
|
|
113
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { PoliciesTable, PolicySummaryCards } from '../../features/policies';
|
|
4
|
+
import { DataTable } from '../../ui/data-table';
|
|
5
|
+
import { POLICIES_FIXTURE } from '../fixtures/policies';
|
|
6
|
+
import type { ProductScreenViewProps } from '../types';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* The product's fleet-wide Policies page without its title row and its empty
|
|
10
|
+
* search field (the job is named above the picture): the compliance counters
|
|
11
|
+
* and the table. The narrow rendering is the table alone.
|
|
12
|
+
*/
|
|
13
|
+
export default function PoliciesScreen({ compact = false }: ProductScreenViewProps) {
|
|
14
|
+
const table = (
|
|
15
|
+
<PoliciesTable
|
|
16
|
+
rows={POLICIES_FIXTURE.rows}
|
|
17
|
+
rowAsLink
|
|
18
|
+
rightSlot={compact ? undefined : <DataTable.RowCount />}
|
|
19
|
+
emptyMessage="No policies found."
|
|
20
|
+
/>
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
return (
|
|
24
|
+
<div className="flex h-full flex-col gap-[var(--spacing-system-l)] bg-ods-bg p-[var(--spacing-system-l)]">
|
|
25
|
+
{!compact && <PolicySummaryCards summary={POLICIES_FIXTURE.summary} now={POLICIES_FIXTURE.now} />}
|
|
26
|
+
{table}
|
|
27
|
+
</div>
|
|
28
|
+
);
|
|
29
|
+
}
|