@flamingo-stack/openframe-frontend-core 0.0.711 → 0.0.712
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-3K5ZLZE7.js +292 -0
- package/dist/chunk-3LU4UFPS.cjs +14 -0
- package/dist/{chunk-3UNL26CD.cjs → chunk-3RKBJT6K.cjs} +8 -6
- package/dist/{chunk-6GLQLTJI.js → chunk-3SEEGNRE.js} +35 -27
- package/dist/{chunk-FEMAJES4.cjs → chunk-3UAJLO5U.cjs} +41 -39
- 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-2JTGK64G.js → chunk-4UYKNOZG.js} +12 -10
- package/dist/{chunk-TKZXHVBG.js → chunk-5SDELRH3.js} +5 -5
- package/dist/{chunk-Q6B35Y7O.js → chunk-5Y72YQEK.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-WJUIXU6Y.js → chunk-7HNYYNKE.js} +28 -22
- package/dist/{chunk-P6G3JZNC.cjs → chunk-7NSU5EQD.cjs} +57 -148
- 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-XWEBHS7O.cjs → chunk-BXSRTBLU.cjs} +82 -54
- package/dist/chunk-CMGFZHCN.js +233 -0
- package/dist/chunk-CMZ3QTFQ.js +1207 -0
- package/dist/chunk-CPA2CKRZ.cjs +125 -0
- package/dist/{chunk-G47AP6LX.cjs → chunk-CSCJU6YC.cjs} +35 -33
- 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-K4PTDK34.js → chunk-EFNKS5W4.js} +322 -428
- package/dist/{chunk-QA6TROME.cjs → chunk-EOKSKJSS.cjs} +25 -83
- package/dist/{chunk-6NTPY5QA.cjs → chunk-ETYLOZOB.cjs} +978 -2413
- package/dist/chunk-F5BPGWGT.cjs +931 -0
- package/dist/{chunk-5HB7FLCV.js → chunk-FCAVAEHF.js} +8277 -9990
- package/dist/chunk-FFT56TYB.cjs +401 -0
- package/dist/chunk-FYEJTF5Y.js +125 -0
- package/dist/chunk-G3GRYDMS.js +16 -0
- package/dist/{chunk-VWFZRMQR.js → chunk-G3OMVCID.js} +13 -7
- 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-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-ILNN6QRW.js +1612 -0
- package/dist/chunk-IYVFSLWJ.js +931 -0
- package/dist/{chunk-C4HRRB3V.cjs → chunk-JGCFRTND.cjs} +23 -17
- 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-KHXZFLIN.cjs +41 -0
- package/dist/chunk-KT3U3ZRP.cjs +1137 -0
- package/dist/chunk-L2VUINHN.js +35 -0
- package/dist/{chunk-FYOKS5RI.cjs → chunk-L6ZQGWCX.cjs} +4521 -6234
- package/dist/{chunk-PLYEKV3N.cjs → chunk-MA4Q5RBP.cjs} +6 -6
- package/dist/{chunk-VMMHJFHG.js → chunk-N67XG5GY.js} +10 -8
- package/dist/chunk-NPAQSMRY.js +2087 -0
- package/dist/{chunk-IFWLJ66M.js → chunk-NQWJAOHO.js} +6 -4
- package/dist/{chunk-6K7QZDA6.cjs → chunk-OBZJICEA.cjs} +8 -8
- package/dist/{chunk-62KNLDXK.js → chunk-OPYODNV2.js} +3 -3
- package/dist/chunk-P3JMAMHP.js +401 -0
- package/dist/chunk-PPXR22YC.cjs +2087 -0
- package/dist/chunk-PSVSEN4J.cjs +655 -0
- package/dist/{chunk-EQWD4IJE.js → chunk-RBYVFPER.js} +74 -46
- package/dist/{chunk-SMAAV3HL.js → chunk-ROBQ5TR7.js} +10541 -10578
- package/dist/{chunk-K6Y5NX6L.cjs → chunk-T3CLXR43.cjs} +114 -220
- package/dist/{chunk-FI6GMDO7.js → chunk-TTVOLEUS.js} +3605 -5040
- package/dist/{chunk-LM7TXMLU.cjs → chunk-ULWVKHSI.cjs} +8 -255
- package/dist/{chunk-EX6GGCAC.cjs → chunk-UT3ODMBU.cjs} +15 -15
- 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-6AMIRXKM.cjs → chunk-WWJG4GVG.cjs} +93 -87
- 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-CDM7OSFB.cjs → chunk-Z5SWJW5Q.cjs} +125 -117
- package/dist/{chunk-YD4LJZV4.cjs → chunk-ZX7SCPLO.cjs} +6 -8
- package/dist/cloud-tenants-KZUZGD4A.cjs +117 -0
- package/dist/cloud-tenants-OGLVVQ7X.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/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 +227 -12
- package/dist/components/features/index.d.ts +7 -0
- package/dist/components/features/index.d.ts.map +1 -1
- package/dist/components/features/index.js +266 -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/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 +320 -82
- package/dist/components/index.js +451 -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-LBMG42K6.js +81 -0
- package/dist/devices-YGYJIXQY.cjs +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 +276 -25
- package/dist/index.js +729 -478
- package/dist/knowledge-H5BIWJVI.js +108 -0
- package/dist/knowledge-KTCVJIWN.cjs +108 -0
- package/dist/logs-DB5Z7M5Q.js +216 -0
- package/dist/logs-RVCC2UQW.cjs +216 -0
- package/dist/policies-EWUULFBR.js +121 -0
- package/dist/policies-HV4IQCBV.cjs +121 -0
- package/dist/remote-session-GSGZOFDX.js +196 -0
- package/dist/remote-session-R6VAFESR.cjs +196 -0
- package/dist/software-update-6PXKRKBT.js +179 -0
- package/dist/software-update-D4OVSWSG.cjs +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/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 +9 -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/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,199 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { type ReactNode, useState } from 'react';
|
|
4
|
+
import { PlusCircleIcon } from '../../icons-v2-generated';
|
|
5
|
+
import { Button, type PageActionButton, PageLayout, RadioGroupBlock } from '../../ui';
|
|
6
|
+
import { PACKAGE_MANAGER_OS } from './package-managers';
|
|
7
|
+
import { SoftwareScheduleFields, type SoftwareScheduleTiming } from './schedule-fields';
|
|
8
|
+
import { SOFTWARE_ACTION_COPY, type SoftwareActionKind } from './software-action-copy';
|
|
9
|
+
import { newSoftwareRow, type SoftwareRow } from './software-row';
|
|
10
|
+
import { type PackageSearchSlotProps, SoftwareRowFields } from './software-row-fields';
|
|
11
|
+
|
|
12
|
+
/** Run the packages now, or at a scheduled start. */
|
|
13
|
+
export type SoftwareRunMode = 'now' | 'schedule';
|
|
14
|
+
|
|
15
|
+
/** Everything the form holds: the packages and when they run. The devices are the host's. */
|
|
16
|
+
export interface SoftwareActionFormValues<TRef extends string = string> {
|
|
17
|
+
rows: SoftwareRow[];
|
|
18
|
+
mode: SoftwareRunMode;
|
|
19
|
+
date: Date | null;
|
|
20
|
+
time: string;
|
|
21
|
+
timeReference: TRef;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** What the device picker slot is told: which devices the chosen packages can run on. */
|
|
25
|
+
export interface SoftwareDeviceScope {
|
|
26
|
+
/** The OS of every chosen catalog, sorted, e.g. `['MAC_OS', 'WINDOWS']`. */
|
|
27
|
+
osTypes: string[];
|
|
28
|
+
/**
|
|
29
|
+
* The same list as one string. It changes exactly when the candidate devices
|
|
30
|
+
* do, so it is the key to remount a picker by.
|
|
31
|
+
*/
|
|
32
|
+
osTypesKey: string;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export interface SoftwareActionFormProps<TRef extends string = string> {
|
|
36
|
+
action: SoftwareActionKind;
|
|
37
|
+
/** "Back" over the title and the phone's "Cancel"; left out, the form shows neither (a picture of the form). */
|
|
38
|
+
onBack?: () => void;
|
|
39
|
+
/**
|
|
40
|
+
* Render the page header (the title, "Back" and the primary button). Default
|
|
41
|
+
* true; a host that shows the form under a heading of its own passes false.
|
|
42
|
+
*/
|
|
43
|
+
showHeader?: boolean;
|
|
44
|
+
/** The header's primary button: run now or schedule, by the chosen mode. */
|
|
45
|
+
onSubmit: (values: SoftwareActionFormValues<TRef>) => void;
|
|
46
|
+
submitDisabled?: boolean;
|
|
47
|
+
submitting?: boolean;
|
|
48
|
+
/** How a schedule's start is read. */
|
|
49
|
+
timing: SoftwareScheduleTiming<TRef>;
|
|
50
|
+
/** What the form opens with. `timeReference` is required: the form cannot guess the host's default. */
|
|
51
|
+
initialValues: Partial<SoftwareActionFormValues<TRef>> & { timeReference: TRef };
|
|
52
|
+
/** The "Software Name" field of each row. */
|
|
53
|
+
renderPackageSearch: (field: PackageSearchSlotProps) => ReactNode;
|
|
54
|
+
/** "Device Selection": the host's picker for the given scope. */
|
|
55
|
+
renderDevicePicker: (scope: SoftwareDeviceScope) => ReactNode;
|
|
56
|
+
/** Offer "Add Software" (several packages in one run). Default true; false is a one-package form. */
|
|
57
|
+
addRows?: boolean;
|
|
58
|
+
/**
|
|
59
|
+
* `stacked` (default): the run choice, then the schedule's fields under it.
|
|
60
|
+
* `inline`: on a wide form the two choices sit side by side with the
|
|
61
|
+
* schedule's fields on the same row, so the devices start higher.
|
|
62
|
+
*/
|
|
63
|
+
runModeLayout?: 'stacked' | 'inline';
|
|
64
|
+
/** The "Device Selection" heading over the picker. Default true; a host that titles the picker itself passes false. */
|
|
65
|
+
showDeviceHeading?: boolean;
|
|
66
|
+
className?: string;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const INITIAL_ROWS = (): SoftwareRow[] => [newSoftwareRow('row-0')];
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Install Software (design 591:8524) and Update Software (409:48080 / 409:48175):
|
|
73
|
+
* which catalog packages, now or on a schedule, on which devices. One form for
|
|
74
|
+
* both flows.
|
|
75
|
+
*
|
|
76
|
+
* The packages and the timing are form state; the devices are not. Searching a
|
|
77
|
+
* catalog and picking devices are the host's queries, so both are slots: the
|
|
78
|
+
* product passes its data-bound field and picker, a fixture passes static ones.
|
|
79
|
+
*/
|
|
80
|
+
export function SoftwareActionForm<TRef extends string = string>({
|
|
81
|
+
action,
|
|
82
|
+
onBack,
|
|
83
|
+
showHeader = true,
|
|
84
|
+
onSubmit,
|
|
85
|
+
submitDisabled = false,
|
|
86
|
+
submitting = false,
|
|
87
|
+
timing,
|
|
88
|
+
initialValues,
|
|
89
|
+
renderPackageSearch,
|
|
90
|
+
renderDevicePicker,
|
|
91
|
+
addRows = true,
|
|
92
|
+
runModeLayout = 'stacked',
|
|
93
|
+
showDeviceHeading = true,
|
|
94
|
+
className = 'px-[var(--spacing-system-l)] pb-[var(--spacing-system-l)]',
|
|
95
|
+
}: SoftwareActionFormProps<TRef>) {
|
|
96
|
+
const copy = SOFTWARE_ACTION_COPY[action];
|
|
97
|
+
|
|
98
|
+
const [rows, setRows] = useState<SoftwareRow[]>(() => initialValues.rows ?? INITIAL_ROWS());
|
|
99
|
+
const [mode, setMode] = useState<SoftwareRunMode>(initialValues.mode ?? 'now');
|
|
100
|
+
const [date, setDate] = useState<Date | null>(initialValues.date ?? null);
|
|
101
|
+
const [time, setTime] = useState(initialValues.time ?? '');
|
|
102
|
+
const [timeReference, setTimeReference] = useState<TRef>(initialValues.timeReference);
|
|
103
|
+
|
|
104
|
+
// The picker's frame: devices on the OS the chosen packages install on.
|
|
105
|
+
const osTypesKey = [...new Set(rows.map(row => PACKAGE_MANAGER_OS[row.packageManager]))].sort().join(',');
|
|
106
|
+
|
|
107
|
+
const actions: PageActionButton[] = [
|
|
108
|
+
...(onBack ? [{ label: 'Cancel', onClick: onBack, variant: 'outline' as const, showOnlyMobile: true }] : []),
|
|
109
|
+
{
|
|
110
|
+
label: mode === 'now' ? copy.runLabel : copy.scheduleLabel,
|
|
111
|
+
variant: 'accent',
|
|
112
|
+
onClick: () => onSubmit({ rows, mode, date, time, timeReference }),
|
|
113
|
+
disabled: submitDisabled,
|
|
114
|
+
loading: submitting,
|
|
115
|
+
},
|
|
116
|
+
];
|
|
117
|
+
|
|
118
|
+
const updateRow = (next: SoftwareRow) => setRows(current => current.map(row => (row.key === next.key ? next : row)));
|
|
119
|
+
const removeRow = (key: string) => setRows(current => current.filter(row => row.key !== key));
|
|
120
|
+
const addRow = () => setRows(current => [...current, newSoftwareRow(crypto.randomUUID())]);
|
|
121
|
+
|
|
122
|
+
const inline = runModeLayout === 'inline';
|
|
123
|
+
const runModeField = (
|
|
124
|
+
<RadioGroupBlock
|
|
125
|
+
name="runMode"
|
|
126
|
+
variant="grouped"
|
|
127
|
+
orientation={inline ? 'horizontal' : 'vertical'}
|
|
128
|
+
value={mode}
|
|
129
|
+
onValueChange={value => setMode(value as SoftwareRunMode)}
|
|
130
|
+
options={copy.modes}
|
|
131
|
+
itemClassName="py-[var(--spacing-system-sf)]"
|
|
132
|
+
/>
|
|
133
|
+
);
|
|
134
|
+
const scheduleFields = mode === 'schedule' && (
|
|
135
|
+
<SoftwareScheduleFields
|
|
136
|
+
date={date}
|
|
137
|
+
time={time}
|
|
138
|
+
timeReference={timeReference}
|
|
139
|
+
timing={timing}
|
|
140
|
+
onDateChange={setDate}
|
|
141
|
+
onTimeChange={setTime}
|
|
142
|
+
onTimeReferenceChange={setTimeReference}
|
|
143
|
+
columns={inline ? 'fill' : 'page'}
|
|
144
|
+
/>
|
|
145
|
+
);
|
|
146
|
+
|
|
147
|
+
return (
|
|
148
|
+
<PageLayout
|
|
149
|
+
title={copy.formTitle}
|
|
150
|
+
backButton={onBack ? { label: 'Back', onClick: onBack } : undefined}
|
|
151
|
+
actions={actions}
|
|
152
|
+
actionsVariant="primary-buttons"
|
|
153
|
+
showHeader={showHeader}
|
|
154
|
+
className={className}
|
|
155
|
+
>
|
|
156
|
+
{rows.map(row => (
|
|
157
|
+
<SoftwareRowFields
|
|
158
|
+
key={row.key}
|
|
159
|
+
row={row}
|
|
160
|
+
removable={rows.length > 1}
|
|
161
|
+
onChange={updateRow}
|
|
162
|
+
onRemove={() => removeRow(row.key)}
|
|
163
|
+
renderPackageSearch={renderPackageSearch}
|
|
164
|
+
/>
|
|
165
|
+
))}
|
|
166
|
+
|
|
167
|
+
{addRows && (
|
|
168
|
+
<Button
|
|
169
|
+
type="button"
|
|
170
|
+
variant="outline"
|
|
171
|
+
size="small"
|
|
172
|
+
className="self-start"
|
|
173
|
+
onClick={addRow}
|
|
174
|
+
leftIcon={<PlusCircleIcon size={24} className="text-ods-text-secondary" />}
|
|
175
|
+
>
|
|
176
|
+
Add Software
|
|
177
|
+
</Button>
|
|
178
|
+
)}
|
|
179
|
+
|
|
180
|
+
{inline ? (
|
|
181
|
+
<div className="flex flex-col gap-[var(--spacing-system-l)] content-lg:flex-row content-lg:items-end">
|
|
182
|
+
<div className="min-w-0 content-lg:flex-1">{runModeField}</div>
|
|
183
|
+
{scheduleFields && <div className="min-w-0 content-lg:flex-1">{scheduleFields}</div>}
|
|
184
|
+
</div>
|
|
185
|
+
) : (
|
|
186
|
+
<>
|
|
187
|
+
{runModeField}
|
|
188
|
+
{scheduleFields}
|
|
189
|
+
</>
|
|
190
|
+
)}
|
|
191
|
+
|
|
192
|
+
{showDeviceHeading && (
|
|
193
|
+
<h2 className="pt-[var(--spacing-system-l)] text-ods-text-primary text-h2">Device Selection</h2>
|
|
194
|
+
)}
|
|
195
|
+
|
|
196
|
+
{renderDevicePicker({ osTypes: osTypesKey.split(','), osTypesKey })}
|
|
197
|
+
</PageLayout>
|
|
198
|
+
);
|
|
199
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import type { ReactNode } from 'react';
|
|
4
|
+
import { TrashIcon } from '../../icons-v2-generated';
|
|
5
|
+
import { Button, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, TruncateText } from '../../ui';
|
|
6
|
+
import {
|
|
7
|
+
PACKAGE_MANAGER_ICON,
|
|
8
|
+
PACKAGE_MANAGER_LABEL,
|
|
9
|
+
PACKAGE_MANAGERS,
|
|
10
|
+
type SupportedPackageManager,
|
|
11
|
+
} from './package-managers';
|
|
12
|
+
import type { SelectedPackage, SoftwareRow } from './software-row';
|
|
13
|
+
|
|
14
|
+
/** What the "Software Name" slot is handed: one catalog, the picked package and its writer. */
|
|
15
|
+
export interface PackageSearchSlotProps {
|
|
16
|
+
packageManager: SupportedPackageManager;
|
|
17
|
+
value: SelectedPackage | null;
|
|
18
|
+
onChange: (pkg: SelectedPackage | null) => void;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface SoftwareRowFieldsProps {
|
|
22
|
+
row: SoftwareRow;
|
|
23
|
+
removable: boolean;
|
|
24
|
+
onChange: (row: SoftwareRow) => void;
|
|
25
|
+
onRemove: () => void;
|
|
26
|
+
/**
|
|
27
|
+
* The "Software Name" field. A slot, because searching a catalog is the
|
|
28
|
+
* host's query: the product passes its data-bound picker, a fixture a static one.
|
|
29
|
+
*/
|
|
30
|
+
renderPackageSearch: (field: PackageSearchSlotProps) => ReactNode;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/** A value over its label; a missing value draws the muted empty mark. */
|
|
34
|
+
function InfoCell({ value, label }: { value: string | null | undefined; label: string }) {
|
|
35
|
+
return (
|
|
36
|
+
<div className="flex min-w-0 flex-1 flex-col justify-center">
|
|
37
|
+
<div className="flex min-w-0 items-center gap-[var(--spacing-system-xxs)]">
|
|
38
|
+
{value ? (
|
|
39
|
+
<div className="min-w-0 flex-1">
|
|
40
|
+
<TruncateText>{value}</TruncateText>
|
|
41
|
+
</div>
|
|
42
|
+
) : (
|
|
43
|
+
<div className="min-w-0 flex-1 text-h4">
|
|
44
|
+
<span className="text-ods-text-secondary">—</span>
|
|
45
|
+
</div>
|
|
46
|
+
)}
|
|
47
|
+
</div>
|
|
48
|
+
<p className="truncate text-ods-text-secondary text-h6">{label}</p>
|
|
49
|
+
</div>
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** One package to install or update: its manager, the package, and what the catalog says about it. */
|
|
54
|
+
export function SoftwareRowFields({ row, removable, onChange, onRemove, renderPackageSearch }: SoftwareRowFieldsProps) {
|
|
55
|
+
return (
|
|
56
|
+
<div className="flex flex-col gap-[var(--spacing-system-l)] rounded-md border border-ods-border bg-ods-bg p-[var(--spacing-system-l)] content-lg:flex-row content-lg:items-end">
|
|
57
|
+
<div className="min-w-0 flex-1">
|
|
58
|
+
<Select
|
|
59
|
+
value={row.packageManager}
|
|
60
|
+
onValueChange={value => onChange({ ...row, packageManager: value as SupportedPackageManager, pkg: null })}
|
|
61
|
+
>
|
|
62
|
+
<SelectTrigger label="Package Manager" labelVariant="large">
|
|
63
|
+
<SelectValue />
|
|
64
|
+
</SelectTrigger>
|
|
65
|
+
<SelectContent>
|
|
66
|
+
{PACKAGE_MANAGERS.map(manager => {
|
|
67
|
+
const Icon = PACKAGE_MANAGER_ICON[manager];
|
|
68
|
+
return (
|
|
69
|
+
<SelectItem key={manager} value={manager}>
|
|
70
|
+
<span className="flex items-center gap-[var(--spacing-system-xsf)]">
|
|
71
|
+
<Icon size={20} className="shrink-0 text-ods-text-secondary" />
|
|
72
|
+
{PACKAGE_MANAGER_LABEL[manager]}
|
|
73
|
+
</span>
|
|
74
|
+
</SelectItem>
|
|
75
|
+
);
|
|
76
|
+
})}
|
|
77
|
+
</SelectContent>
|
|
78
|
+
</Select>
|
|
79
|
+
</div>
|
|
80
|
+
|
|
81
|
+
<div className="min-w-0 flex-1">
|
|
82
|
+
{renderPackageSearch({
|
|
83
|
+
packageManager: row.packageManager,
|
|
84
|
+
value: row.pkg,
|
|
85
|
+
onChange: pkg => onChange({ ...row, pkg }),
|
|
86
|
+
})}
|
|
87
|
+
</div>
|
|
88
|
+
|
|
89
|
+
<InfoCell value={row.pkg?.description} label="Description" />
|
|
90
|
+
|
|
91
|
+
<div className="flex min-w-0 flex-1 items-end gap-[var(--spacing-system-lf)]">
|
|
92
|
+
<InfoCell value={row.pkg?.version} label="Current Version" />
|
|
93
|
+
<Button
|
|
94
|
+
type="button"
|
|
95
|
+
variant="outline"
|
|
96
|
+
size="icon"
|
|
97
|
+
aria-label="Remove software"
|
|
98
|
+
onClick={onRemove}
|
|
99
|
+
disabled={!removable}
|
|
100
|
+
leftIcon={<TrashIcon size={24} className="text-ods-error" />}
|
|
101
|
+
/>
|
|
102
|
+
</div>
|
|
103
|
+
</div>
|
|
104
|
+
);
|
|
105
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { SupportedPackageManager } from './package-managers';
|
|
2
|
+
|
|
3
|
+
/** A catalog package the user picked, kept whole so the row can show its description and version. */
|
|
4
|
+
export interface SelectedPackage {
|
|
5
|
+
id: string;
|
|
6
|
+
name: string;
|
|
7
|
+
description: string | null;
|
|
8
|
+
version: string | null;
|
|
9
|
+
/** Homebrew only: a formula and a cask can share a name. */
|
|
10
|
+
packageType: 'FORMULA' | 'CASK' | null;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/** One "Package Manager + Software Name" row of the form. */
|
|
14
|
+
export interface SoftwareRow {
|
|
15
|
+
key: string;
|
|
16
|
+
packageManager: SupportedPackageManager;
|
|
17
|
+
pkg: SelectedPackage | null;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function newSoftwareRow(key: string): SoftwareRow {
|
|
21
|
+
return { key, packageManager: 'BREW', pkg: null };
|
|
22
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { SLOT_STICKINESS } from './slot-geometry';
|
|
2
|
+
export { SortableDragHandle, type SortableGripProps } from './sortable-drag-handle';
|
|
2
3
|
export { SortableList, type SortableListProps } from './sortable-list';
|
|
3
4
|
export { SortableMoveButtons, type SortableMoveButtonsProps } from './sortable-move-buttons';
|
|
4
5
|
export { type SortableDragHandleProps, type SortableItem, useSortableItem } from './use-sortable-item';
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { cn } from '../../../utils/cn';
|
|
4
|
+
import { DraggerIcon } from '../../icons-v2-generated/interface/dragger-icon';
|
|
5
|
+
import { Button } from '../../ui/button';
|
|
6
|
+
import type { SortableDragHandleProps as DragHandleBindings } from './use-sortable-item';
|
|
7
|
+
|
|
8
|
+
export interface SortableGripProps {
|
|
9
|
+
/** `useSortableItem().dragHandleProps` of the row this grip belongs to. */
|
|
10
|
+
handleProps: DragHandleBindings;
|
|
11
|
+
/** Names the row for assistive tech ("Drag Billing to reorder"). */
|
|
12
|
+
label?: string;
|
|
13
|
+
className?: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* THE grip of a {@link SortableList} row: the lib `Button`, so every sortable
|
|
18
|
+
* list has the same handle (size, focus ring, keyboard: Arrow Up / Arrow Down
|
|
19
|
+
* move the row). Render it while `dragAndDropEnabled` is true and
|
|
20
|
+
* `SortableMoveButtons` otherwise:
|
|
21
|
+
*
|
|
22
|
+
* ```tsx
|
|
23
|
+
* const { itemRef, dragHandleProps, dragAndDropEnabled } = useSortableItem();
|
|
24
|
+
* {dragAndDropEnabled ? <SortableDragHandle handleProps={dragHandleProps} /> : <SortableMoveButtons … />}
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export function SortableDragHandle({ handleProps, label, className }: SortableGripProps) {
|
|
28
|
+
return (
|
|
29
|
+
<Button
|
|
30
|
+
type="button"
|
|
31
|
+
variant="transparent"
|
|
32
|
+
size="icon-sm"
|
|
33
|
+
aria-label={label ? `Drag ${label} to reorder` : 'Drag to reorder'}
|
|
34
|
+
// Spread whole, as `useSortableItem` asks: the grip's ref and its arrow keys.
|
|
35
|
+
{...handleProps}
|
|
36
|
+
// `touch-none`: the browser must not take the gesture for a scroll.
|
|
37
|
+
className={cn('shrink-0 cursor-grab touch-none text-ods-text-secondary hover:text-ods-text-primary', className)}
|
|
38
|
+
leftIcon={<DraggerIcon />}
|
|
39
|
+
/>
|
|
40
|
+
);
|
|
41
|
+
}
|
|
@@ -72,13 +72,23 @@ export function PageHeading({
|
|
|
72
72
|
const SENTENCE_MARK = /([.:?!]+)(?=\s|$)/g;
|
|
73
73
|
const ONLY_MARKS = /^\s*[.:?!]+\s*$/;
|
|
74
74
|
|
|
75
|
+
/**
|
|
76
|
+
* Which of a brand's two colours a heading's eyebrow and marks take: its accent
|
|
77
|
+
* (the default) or its secondary colour (`PLATFORM_BRAND`'s `secondaryStem`:
|
|
78
|
+
* OpenFrame's marketing pages are cyan there, its product screens yellow).
|
|
79
|
+
* `secondary` needs a named `platform`.
|
|
80
|
+
*/
|
|
81
|
+
export type HeadingAccentTone = 'accent' | 'secondary';
|
|
82
|
+
|
|
75
83
|
/**
|
|
76
84
|
* The accent a heading's marks take, as an ODS class: a named platform's brand
|
|
77
85
|
* accent (`getPlatformBrandClasses`, the one platform → token table), else the
|
|
78
86
|
* accent of the platform the page runs on (`text-ods-accent`).
|
|
79
87
|
*/
|
|
80
|
-
export function headingAccentClass(platform?: string | null): string {
|
|
81
|
-
|
|
88
|
+
export function headingAccentClass(platform?: string | null, tone: HeadingAccentTone = 'accent'): string {
|
|
89
|
+
if (!platform) return 'text-ods-accent';
|
|
90
|
+
const classes = getPlatformBrandClasses(platform);
|
|
91
|
+
return tone === 'secondary' ? classes.secondaryText : classes.accentText;
|
|
82
92
|
}
|
|
83
93
|
|
|
84
94
|
/**
|
|
@@ -92,8 +102,12 @@ export function headingAccentClass(platform?: string | null): string {
|
|
|
92
102
|
* its own colour for its letters). A mark inside a number or a version
|
|
93
103
|
* (`$6.7M`, `v1.5.0`) is not a sentence mark and is left alone.
|
|
94
104
|
*/
|
|
95
|
-
export function accentSentenceMarks(
|
|
96
|
-
|
|
105
|
+
export function accentSentenceMarks(
|
|
106
|
+
node: ReactNode,
|
|
107
|
+
platform?: string | null,
|
|
108
|
+
tone: HeadingAccentTone = 'accent',
|
|
109
|
+
): ReactNode {
|
|
110
|
+
return accentMarks(node, headingAccentClass(platform, tone));
|
|
97
111
|
}
|
|
98
112
|
|
|
99
113
|
function accentMarks(node: ReactNode, accentClassName: string): ReactNode {
|
|
@@ -157,6 +171,8 @@ export interface SectionHeadingProps {
|
|
|
157
171
|
* that shows ANOTHER product. Omitted: the platform the page runs on.
|
|
158
172
|
*/
|
|
159
173
|
platform?: string | null;
|
|
174
|
+
/** Which of `platform`'s colours: its accent (default) or its secondary colour. */
|
|
175
|
+
tone?: HeadingAccentTone;
|
|
160
176
|
/** Extra classes on the outer row. */
|
|
161
177
|
className?: string;
|
|
162
178
|
}
|
|
@@ -175,16 +191,17 @@ export function SectionHeading({
|
|
|
175
191
|
action,
|
|
176
192
|
level = 'section',
|
|
177
193
|
platform,
|
|
194
|
+
tone = 'accent',
|
|
178
195
|
className,
|
|
179
196
|
}: SectionHeadingProps) {
|
|
180
|
-
const accentClassName = headingAccentClass(platform);
|
|
197
|
+
const accentClassName = headingAccentClass(platform, tone);
|
|
181
198
|
const layout = SECTION_HEADING_LAYOUT[level];
|
|
182
199
|
const Tag = level === 'page' ? 'h1' : 'h2';
|
|
183
200
|
const stack = (
|
|
184
201
|
<div className={layout.stack}>
|
|
185
202
|
{eyebrow ? <span className={`text-h5 ${accentClassName}`}>{eyebrow}</span> : null}
|
|
186
203
|
<Tag className={layout.heading}>
|
|
187
|
-
{accentSentenceMarks(title, platform)}
|
|
204
|
+
{accentSentenceMarks(title, platform, tone)}
|
|
188
205
|
{punctuation ? <span className={accentClassName}>{punctuation}</span> : null}
|
|
189
206
|
</Tag>
|
|
190
207
|
{intro ? <div className={layout.intro}>{intro}</div> : null}
|
|
@@ -9,6 +9,7 @@ export { NavPanel, isMegaMenu } from './nav-panel';
|
|
|
9
9
|
export type { NavPanelProps } from './nav-panel';
|
|
10
10
|
export { NavItemRow } from './nav-item-row';
|
|
11
11
|
export type { NavItemRowProps, NavItemRowVariant } from './nav-item-row';
|
|
12
|
+
export type { AskAiOpenDetail } from './mingo-ai-button';
|
|
12
13
|
export { ASK_AI_OPEN_EVENT, MingoAiButton, openAskAi } from './mingo-ai-button';
|
|
13
14
|
export type { MingoAiButtonProps } from './mingo-ai-button';
|
|
14
15
|
export { MobileNavSheet, MOBILE_NAV_SHEET_ID, siteNavHasMobileMenus } from './mobile-nav-sheet';
|
|
@@ -23,6 +24,10 @@ export type { SlidingSidebarProps } from './sliding-sidebar';
|
|
|
23
24
|
|
|
24
25
|
export { StickySectionNav, useSectionNavigation } from './sticky-section-nav';
|
|
25
26
|
export type { StickyNavSection } from './sticky-section-nav';
|
|
27
|
+
// The scroll spy behind a section nav that keeps the URL on the section being
|
|
28
|
+
// read (`syncHash`, two levels of anchors): the docs and trust-center spy.
|
|
29
|
+
export { useScrollSpy } from '../docs/use-scroll-spy';
|
|
30
|
+
export type { UseScrollSpyOptions } from '../docs/use-scroll-spy';
|
|
26
31
|
|
|
27
32
|
export { NAVIGATION_SIDEBAR_WIDTH_VAR, NavigationSidebar } from './navigation-sidebar';
|
|
28
33
|
export type { NavigationSidebarProps } from './navigation-sidebar';
|
|
@@ -23,10 +23,13 @@ export interface MingoAiButtonProps extends React.ButtonHTMLAttributes<HTMLButto
|
|
|
23
23
|
* key cap beside the label. Default false. */
|
|
24
24
|
shortcutHint?: boolean;
|
|
25
25
|
/** `inline` (default): the header launcher, the height and type of the menu
|
|
26
|
-
* items beside it
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
|
|
26
|
+
* items beside it; its name collapses with the menus below `lg`. `button`:
|
|
27
|
+
* the same launcher inside a page (a card, the head of a row of questions):
|
|
28
|
+
* the name and the key cap always show. `field`: the full-width row that
|
|
29
|
+
* opens the mobile menu (the name reads as the field's prompt). ONE
|
|
30
|
+
* component, so every Mingo launcher carries the same identity, ring and
|
|
31
|
+
* event. */
|
|
32
|
+
variant?: 'inline' | 'button' | 'field';
|
|
30
33
|
}
|
|
31
34
|
|
|
32
35
|
const MINGO_ACCENT = 'var(--ods-flamingo-cyan-base)';
|
|
@@ -34,18 +37,29 @@ const MINGO_ACCENT = 'var(--ods-flamingo-cyan-base)';
|
|
|
34
37
|
/** The event the mounted chat panel (`EmbeddableChat`) opens on. */
|
|
35
38
|
export const ASK_AI_OPEN_EVENT = 'ask-ai:open';
|
|
36
39
|
|
|
40
|
+
/** What an `ask-ai:open` event carries. */
|
|
41
|
+
export interface AskAiOpenDetail {
|
|
42
|
+
source: string;
|
|
43
|
+
/** A question to send as soon as the chat is open. Absent: the chat only opens. */
|
|
44
|
+
prompt?: string;
|
|
45
|
+
}
|
|
46
|
+
|
|
37
47
|
/**
|
|
38
|
-
* Open the chat of `source
|
|
39
|
-
*
|
|
40
|
-
*
|
|
48
|
+
* Open the chat of `source`, and with `prompt` ask it that question once.
|
|
49
|
+
* `source` is coalesced to '' so a source-less call still matches the panel's
|
|
50
|
+
* own `runtime.source ?? ''` comparison (undefined !== '' would make the panel
|
|
51
|
+
* silently ignore the event).
|
|
41
52
|
*/
|
|
42
|
-
export function openAskAi(source?: string): void {
|
|
43
|
-
|
|
53
|
+
export function openAskAi(source?: string, options?: { prompt?: string }): void {
|
|
54
|
+
const prompt = options?.prompt?.trim();
|
|
55
|
+
const detail: AskAiOpenDetail = prompt ? { source: source ?? '', prompt } : { source: source ?? '' };
|
|
56
|
+
window.dispatchEvent(new CustomEvent<AskAiOpenDetail>(ASK_AI_OPEN_EVENT, { detail }));
|
|
44
57
|
}
|
|
45
58
|
|
|
46
59
|
/**
|
|
47
|
-
* THE Mingo AI launcher, in the site header's right cluster
|
|
48
|
-
*
|
|
60
|
+
* THE Mingo AI launcher, in the site header's right cluster, inside a page
|
|
61
|
+
* (`variant="button"`: the FAQ's ask card, the head of a row of questions) and
|
|
62
|
+
* at the top of the mobile menu (`variant="field"`): the round identity glyph, the
|
|
49
63
|
* assistant's name and an optional shortcut hint, sized like the menu items
|
|
50
64
|
* beside it. Stateless: clicking dispatches an `ask-ai:open`
|
|
51
65
|
* CustomEvent (source-filtered) that the mounted `EmbeddableChat` panel
|
|
@@ -75,6 +89,8 @@ export function MingoAiButton({
|
|
|
75
89
|
// Known after hydration only: until then the hint keeps its space, empty.
|
|
76
90
|
const visitor = useVisitorOs();
|
|
77
91
|
const field = variant === 'field';
|
|
92
|
+
// In a page nothing collapses: there is no menu beside it to make room for.
|
|
93
|
+
const inPage = variant === 'button';
|
|
78
94
|
|
|
79
95
|
const commandKey = visitor.known && usesCommandKey(visitor.os);
|
|
80
96
|
|
|
@@ -162,7 +178,10 @@ export function MingoAiButton({
|
|
|
162
178
|
{/* In the header the name collapses below lg, with the menus: on a phone
|
|
163
179
|
the launcher is its glyph alone (the name stays the accessible name). */}
|
|
164
180
|
<span
|
|
165
|
-
className={cn(
|
|
181
|
+
className={cn(
|
|
182
|
+
'relative whitespace-nowrap',
|
|
183
|
+
field ? 'min-w-0 flex-1 truncate' : inPage ? 'text-h6' : 'hidden text-h6 lg:inline',
|
|
184
|
+
)}
|
|
166
185
|
>
|
|
167
186
|
{label}
|
|
168
187
|
</span>
|
|
@@ -170,7 +189,12 @@ export function MingoAiButton({
|
|
|
170
189
|
// A key cap in the label's own type (never smaller: a hint nobody can
|
|
171
190
|
// read is decoration) and the label's colour, which clears 4.5:1 on
|
|
172
191
|
// the bar. It keeps its width before the platform is known.
|
|
173
|
-
<kbd
|
|
192
|
+
<kbd
|
|
193
|
+
className={cn(
|
|
194
|
+
'relative h-6 min-w-9 items-center justify-center rounded border border-ods-border px-[var(--spacing-system-xxs)] text-h6',
|
|
195
|
+
inPage ? 'inline-flex' : 'hidden lg:inline-flex',
|
|
196
|
+
)}
|
|
197
|
+
>
|
|
174
198
|
{visitor.known ? shortcutLabel(visitor.os, 'K') : ''}
|
|
175
199
|
</kbd>
|
|
176
200
|
)}
|