@flamingo-stack/openframe-frontend-core 0.0.710 → 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-YBUT4AMG.cjs → chunk-3RKBJT6K.cjs} +8 -6
- package/dist/{chunk-LNW45N2C.js → chunk-3SEEGNRE.js} +35 -27
- package/dist/{chunk-L6Y6OOKG.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-36BCTE7D.js → chunk-4UYKNOZG.js} +12 -10
- package/dist/{chunk-DA5UDTLG.js → chunk-5SDELRH3.js} +5 -5
- package/dist/{chunk-CZSZSDD4.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-TDYIREDJ.js → chunk-7HNYYNKE.js} +28 -22
- package/dist/{chunk-2G7UYK35.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-2RNB5DTN.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-B73373AG.cjs → chunk-CSCJU6YC.cjs} +35 -33
- package/dist/chunk-CYUUHFXL.js +41 -0
- package/dist/chunk-DC4RTYWK.cjs +1122 -0
- package/dist/{chunk-6YKAT7NV.js → chunk-DDWFCWOE.js} +5 -7
- package/dist/{chunk-F5FF4DME.js → chunk-EFNKS5W4.js} +322 -428
- package/dist/{chunk-2KXTOP6G.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-4L6XCMOU.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-MR3A4MZV.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-CNWOMQQJ.js → chunk-H5R7U2D2.js} +206 -5
- package/dist/{chunk-SEXWHIMS.cjs → chunk-HETQETPV.cjs} +9648 -9680
- 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-3AHTOSXJ.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-JRU2CXLB.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-P42V6N34.cjs → chunk-L6ZQGWCX.cjs} +4521 -6234
- package/dist/{chunk-PLYEKV3N.cjs → chunk-MA4Q5RBP.cjs} +6 -6
- package/dist/{chunk-SS5MBHDP.js → chunk-N67XG5GY.js} +10 -8
- package/dist/chunk-NPAQSMRY.js +2087 -0
- package/dist/{chunk-I3ST4PLM.js → chunk-NQWJAOHO.js} +6 -4
- package/dist/{chunk-QAOFMK2A.cjs → chunk-OBZJICEA.cjs} +8 -8
- package/dist/{chunk-6IW7TWPV.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-4UM2ETLM.js → chunk-RBYVFPER.js} +74 -46
- package/dist/{chunk-PO33GZVY.js → chunk-ROBQ5TR7.js} +10549 -10581
- package/dist/{chunk-ZCLBYT2V.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-6I4ZAFO2.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-AOWDNSTM.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-LFFB6EMB.js → chunk-YBS5QGON.js} +70 -128
- package/dist/{chunk-NSGXARGJ.cjs → chunk-Z5SWJW5Q.cjs} +125 -117
- package/dist/{chunk-OJLR5MEO.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/hooks/use-chat-dialog-manager.d.ts +4 -1
- package/dist/components/chat/hooks/use-chat-dialog-manager.d.ts.map +1 -1
- package/dist/components/chat/hooks/use-unified-chat.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/chat/types/component.types.d.ts +4 -0
- package/dist/components/chat/types/component.types.d.ts.map +1 -1
- package/dist/components/chat/types/unified-chat-state.types.d.ts +12 -0
- package/dist/components/chat/types/unified-chat-state.types.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 +38 -2
- package/src/components/chat/entity-cards/case-study-card.tsx +122 -46
- package/src/components/chat/hooks/use-chat-dialog-manager.ts +22 -4
- package/src/components/chat/hooks/use-unified-chat.ts +1 -0
- package/src/components/chat/index.ts +1 -0
- package/src/components/chat/quick-action-chip.tsx +33 -9
- package/src/components/chat/types/component.types.ts +4 -0
- package/src/components/chat/types/unified-chat-state.types.ts +13 -0
- 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
|
@@ -714,6 +714,10 @@ export interface DialogItem {
|
|
|
714
714
|
/** Absolute avatar URL; falls back to initials when absent or failing. */
|
|
715
715
|
avatarUrl?: string | null;
|
|
716
716
|
};
|
|
717
|
+
/** The conversation is archived - read-only until restored. Read off
|
|
718
|
+
* `UnifiedChatState.activeDialog`, the host's own record of the open
|
|
719
|
+
* conversation; rows of the active list never carry it. */
|
|
720
|
+
archived?: boolean;
|
|
717
721
|
}
|
|
718
722
|
|
|
719
723
|
// ========== Chat Sidebar Props ==========
|
|
@@ -430,6 +430,19 @@ export interface UnifiedChatState {
|
|
|
430
430
|
* (draft state — "start a new conversation"). */
|
|
431
431
|
activeDialogId: string | null;
|
|
432
432
|
|
|
433
|
+
/**
|
|
434
|
+
* The open conversation's own record, when the host resolves one. A
|
|
435
|
+
* conversation reached by link, notification or reload is not necessarily in
|
|
436
|
+
* `dialogs` - it may be archived, or past the pages loaded so far - and
|
|
437
|
+
* without its record the panel has no title, owner or restore action for it,
|
|
438
|
+
* and no way to know it is archived: `archived` on it makes the conversation
|
|
439
|
+
* read-only exactly as opening it from the Chat Archive does. Keyed on `id`:
|
|
440
|
+
* a record for another dialog than `activeDialogId` is ignored. The host
|
|
441
|
+
* keeps it current - once its `unarchiveDialog` resolves, the record must no
|
|
442
|
+
* longer say archived.
|
|
443
|
+
*/
|
|
444
|
+
activeDialog?: DialogItem | null;
|
|
445
|
+
|
|
433
446
|
/** Switch the panel to an existing dialog. Idempotent — selecting the
|
|
434
447
|
* active id is a no-op. Pass `null` to drop back to draft state. */
|
|
435
448
|
selectDialog: (id: string | null) => void;
|
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
3
|
import { useState, useRef, useCallback, useEffect, useMemo } from 'react';
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
ACTIVE_ANCHOR_ATTRIBUTE,
|
|
6
|
+
getHashTargetElement,
|
|
7
|
+
isScrollSyncedHash,
|
|
8
|
+
normalizeHashFragment,
|
|
9
|
+
replaceLocationHash,
|
|
10
|
+
} from '../../utils/same-page-hash-nav';
|
|
11
|
+
import { declaredScrollMarginTop, getScrollableAncestor, scrollElementIntoView } from '../../utils/scroll-into-view';
|
|
5
12
|
|
|
6
13
|
// Default sticky-chrome height. Used for BOTH the scroll target offset (where a
|
|
7
14
|
// clicked section lands) AND the active-section detection threshold (where the
|
|
@@ -15,6 +22,11 @@ const SCROLL_OFFSET = 100;
|
|
|
15
22
|
// so the join is unambiguous and the key can be split back apart.
|
|
16
23
|
const ID_SEPARATOR = '\n';
|
|
17
24
|
|
|
25
|
+
// A section that a link just landed on sits ON the line, give or take a
|
|
26
|
+
// sub-pixel of layout rounding: without this it reads as "not reached yet" and
|
|
27
|
+
// the section above stays active (and, with `syncHash`, takes the URL back).
|
|
28
|
+
const LINE_TOLERANCE_PX = 1;
|
|
29
|
+
|
|
18
30
|
interface ScrollSpySection {
|
|
19
31
|
id: string;
|
|
20
32
|
title?: string;
|
|
@@ -23,13 +35,35 @@ interface ScrollSpySection {
|
|
|
23
35
|
|
|
24
36
|
export interface UseScrollSpyOptions {
|
|
25
37
|
/**
|
|
26
|
-
* Keep the URL's `#hash` on the
|
|
38
|
+
* Keep the URL's `#hash` on where the reader IS (`replaceLocationHash`: no
|
|
27
39
|
* history entry, and no `hashchange`, so `useScrollToHash` never re-scrolls
|
|
28
40
|
* to it) — as the user SCROLLS, and when a rail click scrolls for them.
|
|
29
41
|
* Above the first section the hash is cleared. Only a scroll or a click
|
|
30
42
|
* writes it — mounting a page never adds a hash.
|
|
43
|
+
*
|
|
44
|
+
* TWO LEVELS. The hash names the section being read, or an anchor INSIDE it:
|
|
45
|
+
* - a section that marks one of its descendants with
|
|
46
|
+
* `ACTIVE_ANCHOR_ATTRIBUTE` (and an `id`) is named by that child: a tab
|
|
47
|
+
* group whose open tab has its own anchor. The section remembers its
|
|
48
|
+
* child while the reader is elsewhere, so coming back restores it;
|
|
49
|
+
* - otherwise a hash that already names something inside the section (a
|
|
50
|
+
* card, a question a link landed on) is finer than the section's own and
|
|
51
|
+
* is kept until the reader leaves the section.
|
|
52
|
+
*
|
|
53
|
+
* RELOAD. The browser restores the exact scroll position and the hash only
|
|
54
|
+
* mirrors it, so nothing scrolls (`useScrollToHash` stands down for a synced
|
|
55
|
+
* hash). When the two disagree (the position was not restored: a scroll
|
|
56
|
+
* container, a layout that changed), the hash wins and the spy scrolls to
|
|
57
|
+
* it, once, without a tween.
|
|
31
58
|
*/
|
|
32
59
|
syncHash?: boolean;
|
|
60
|
+
/**
|
|
61
|
+
* What is active above the first section. `'first'` (default): the first
|
|
62
|
+
* section, a table of contents that always has a current entry. `'none'`:
|
|
63
|
+
* nothing (`activeSection` is `''`), for a page with a hero above its
|
|
64
|
+
* sections, so the nav and the URL (no hash there) say the same thing.
|
|
65
|
+
*/
|
|
66
|
+
aboveFirst?: 'first' | 'none';
|
|
33
67
|
/**
|
|
34
68
|
* Sticky-chrome height in px: where a clicked section lands AND the line a
|
|
35
69
|
* section's top must pass to become the active one. One number for both, so
|
|
@@ -38,12 +72,29 @@ export interface UseScrollSpyOptions {
|
|
|
38
72
|
headerOffset?: number;
|
|
39
73
|
}
|
|
40
74
|
|
|
41
|
-
/**
|
|
42
|
-
function
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
75
|
+
/** The id the URL's hash names, or `''`. */
|
|
76
|
+
function currentHashId(): string {
|
|
77
|
+
return normalizeHashFragment(window.location.hash).slice(1);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/** The child anchor a section declares as its active one, if any (`ACTIVE_ANCHOR_ATTRIBUTE`). */
|
|
81
|
+
function activeChildAnchor(section: HTMLElement): string | null {
|
|
82
|
+
return section.querySelector<HTMLElement>(`[${ACTIVE_ANCHOR_ATTRIBUTE}][id]`)?.id ?? null;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/** Whether the URL's hash names `section` or something inside it. */
|
|
86
|
+
function hashIsWithin(section: HTMLElement): boolean {
|
|
87
|
+
return section.contains(getHashTargetElement(currentHashId()));
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* The hash for a section being READ: its active child, else the hash already
|
|
92
|
+
* in the URL when it names something inside the section, else the section.
|
|
93
|
+
*/
|
|
94
|
+
function hashForSection(sectionId: string): string {
|
|
95
|
+
const section = document.getElementById(sectionId);
|
|
96
|
+
if (!section) return sectionId;
|
|
97
|
+
return activeChildAnchor(section) ?? (hashIsWithin(section) ? currentHashId() : sectionId);
|
|
47
98
|
}
|
|
48
99
|
|
|
49
100
|
/**
|
|
@@ -108,9 +159,11 @@ export function useScrollSpy(
|
|
|
108
159
|
sections: ScrollSpySection[] | undefined,
|
|
109
160
|
options: UseScrollSpyOptions = {},
|
|
110
161
|
): UseScrollSpyReturn {
|
|
111
|
-
const { syncHash = false, headerOffset = SCROLL_OFFSET } = options;
|
|
162
|
+
const { syncHash = false, headerOffset = SCROLL_OFFSET, aboveFirst = 'first' } = options;
|
|
112
163
|
const [activeSection, setActiveSection] = useState('');
|
|
113
164
|
const isScrollingFromClick = useRef(false);
|
|
165
|
+
// The restored-position check (see `syncHash`) runs once per page, not on every re-subscription.
|
|
166
|
+
const restoredChecked = useRef(false);
|
|
114
167
|
|
|
115
168
|
// The scroll listener only ever needs the section IDS, and callers rebuild
|
|
116
169
|
// the `sections` array on every render — so the value-stable joined key IS
|
|
@@ -128,7 +181,9 @@ export function useScrollSpy(
|
|
|
128
181
|
setActiveSection(sectionId);
|
|
129
182
|
// The click IS the reader's position now: say so in the URL right away
|
|
130
183
|
// rather than waiting for a scroll event the click guard below swallows.
|
|
131
|
-
|
|
184
|
+
// A click on a section's own entry goes to its head: its active child
|
|
185
|
+
// still names it, a finer hash from an earlier link does not.
|
|
186
|
+
if (syncHash) replaceLocationHash(activeChildAnchor(targetElement) ?? sectionId);
|
|
132
187
|
|
|
133
188
|
scrollElementIntoView(targetElement, { headerOffset });
|
|
134
189
|
|
|
@@ -154,12 +209,17 @@ export function useScrollSpy(
|
|
|
154
209
|
|
|
155
210
|
const scrollTop = scroller.scrollTop();
|
|
156
211
|
const viewportTop = scroller.viewportTop();
|
|
157
|
-
const scrollPosition = scrollTop + headerOffset;
|
|
158
212
|
// A section's top in the scroller's coordinates. `offsetTop` is relative
|
|
159
213
|
// to the nearest POSITIONED ancestor, which is neither the document nor
|
|
160
214
|
// the scroll container inside most layouts — measure from the viewport
|
|
161
215
|
// and translate.
|
|
162
216
|
const sectionTop = (element: HTMLElement) => element.getBoundingClientRect().top - viewportTop + scrollTop;
|
|
217
|
+
// The line a section's top must reach is where a link LANDS it: the
|
|
218
|
+
// offset, or the section's own larger `scroll-margin-top` (the rule
|
|
219
|
+
// `scrollElementIntoView` lands by). One number for both, per section.
|
|
220
|
+
const reached = (element: HTMLElement) =>
|
|
221
|
+
scrollTop + Math.max(headerOffset, declaredScrollMarginTop(element)) + LINE_TOLERANCE_PX >= sectionTop(element);
|
|
222
|
+
const first = document.getElementById(sectionIds[0] ?? '');
|
|
163
223
|
let currentSection = sectionIds[0] ?? '';
|
|
164
224
|
|
|
165
225
|
// At the bottom of the page the last sections can never reach the offset
|
|
@@ -175,20 +235,35 @@ export function useScrollSpy(
|
|
|
175
235
|
} else {
|
|
176
236
|
for (let i = sectionIds.length - 1; i >= 0; i--) {
|
|
177
237
|
const element = document.getElementById(sectionIds[i]);
|
|
178
|
-
if (element &&
|
|
238
|
+
if (element && reached(element)) {
|
|
179
239
|
currentSection = sectionIds[i];
|
|
180
240
|
break;
|
|
181
241
|
}
|
|
182
242
|
}
|
|
183
243
|
}
|
|
184
244
|
|
|
185
|
-
|
|
245
|
+
const isAboveFirst = !atBottom && first !== null && !reached(first);
|
|
246
|
+
const active = isAboveFirst && aboveFirst === 'none' ? '' : currentSection;
|
|
247
|
+
setActiveSection(prev => (prev !== active ? active : prev));
|
|
186
248
|
|
|
187
|
-
if (syncHash
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
249
|
+
if (!syncHash) return;
|
|
250
|
+
if (fromScroll) {
|
|
251
|
+
replaceLocationHash(isAboveFirst ? null : hashForSection(currentSection));
|
|
252
|
+
return;
|
|
191
253
|
}
|
|
254
|
+
// First pass with the sections on the page: a hash the reader's scrolling
|
|
255
|
+
// left behind (a reload) must agree with where the browser restored the
|
|
256
|
+
// page. It agrees when it names the section at the line or something
|
|
257
|
+
// inside it; otherwise the hash wins, in one instant write. A hash that
|
|
258
|
+
// names nothing in the sections known so far waits for the next set (a
|
|
259
|
+
// section that joins the nav after hydration).
|
|
260
|
+
if (restoredChecked.current || !isScrollSyncedHash()) return;
|
|
261
|
+
const target = getHashTargetElement(currentHashId());
|
|
262
|
+
const tracked = sectionIds.some(id => document.getElementById(id)?.contains(target) ?? false);
|
|
263
|
+
if (!target || !tracked) return;
|
|
264
|
+
restoredChecked.current = true;
|
|
265
|
+
const section = isAboveFirst ? null : document.getElementById(currentSection);
|
|
266
|
+
if (!section?.contains(target)) scrollElementIntoView(target, { headerOffset, behavior: 'instant' });
|
|
192
267
|
};
|
|
193
268
|
|
|
194
269
|
let scrollTimer: ReturnType<typeof setTimeout>;
|
|
@@ -204,7 +279,7 @@ export function useScrollSpy(
|
|
|
204
279
|
scroller.target.removeEventListener('scroll', throttledScroll);
|
|
205
280
|
clearTimeout(scrollTimer);
|
|
206
281
|
};
|
|
207
|
-
}, [sectionIdsKey, syncHash, headerOffset]);
|
|
282
|
+
}, [sectionIdsKey, syncHash, headerOffset, aboveFirst]);
|
|
208
283
|
|
|
209
284
|
return { activeSection, handleSectionClick };
|
|
210
285
|
}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import type React from 'react';
|
|
4
4
|
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
5
|
+
import Link from '../../embed-shims/next-link';
|
|
5
6
|
import { useScrollToHash } from '../../hooks/use-scroll-to-hash';
|
|
6
7
|
import { useSelfFetch } from '../../hooks/use-self-fetch';
|
|
7
8
|
import type { Faq } from '../../types/faq';
|
|
@@ -46,6 +47,13 @@ export interface FaqSectionProps {
|
|
|
46
47
|
/** Fetch-URL prefix for third-party embeds / reverse proxies
|
|
47
48
|
* ('' = same-origin relative). */
|
|
48
49
|
apiBaseUrl?: string;
|
|
50
|
+
/**
|
|
51
|
+
* A block beside the questions (an "ask the assistant" card). From the
|
|
52
|
+
* content `lg` step the heading, the category nav and this block form a left
|
|
53
|
+
* column and the questions the right one; below it the block follows the
|
|
54
|
+
* questions. Absent: the single-column layout, unchanged.
|
|
55
|
+
*/
|
|
56
|
+
aside?: React.ReactNode;
|
|
49
57
|
}
|
|
50
58
|
|
|
51
59
|
const DEFAULT_HEADING_TEXT = 'Frequently Asked Questions';
|
|
@@ -114,7 +122,12 @@ const groupKey = (g: FaqGroup): string => g.slug ?? UNCATEGORIZED_KEY;
|
|
|
114
122
|
function GroupedFaqList({
|
|
115
123
|
groups,
|
|
116
124
|
categoryHeadingAs,
|
|
125
|
+
heading,
|
|
126
|
+
aside,
|
|
117
127
|
}: {
|
|
128
|
+
/** With `aside`, the section heading: it sits in the left column above the category nav. */
|
|
129
|
+
heading?: React.ReactNode;
|
|
130
|
+
aside?: React.ReactNode;
|
|
118
131
|
groups: FaqGroup[];
|
|
119
132
|
/** Heading tag for each category, so the document outline nests correctly
|
|
120
133
|
* under whatever owns the heading above this block: `h2` on the standalone
|
|
@@ -265,49 +278,69 @@ function GroupedFaqList({
|
|
|
265
278
|
});
|
|
266
279
|
}, []);
|
|
267
280
|
|
|
281
|
+
const categoryNav = navGroups.length > 1 && (
|
|
282
|
+
<nav aria-label="FAQ categories" className="flex flex-wrap gap-2">
|
|
283
|
+
{navGroups.map(group => {
|
|
284
|
+
const isActive = group.slug === activeSlug;
|
|
285
|
+
return (
|
|
286
|
+
<Link
|
|
287
|
+
key={group.slug}
|
|
288
|
+
href={`#${group.slug}`}
|
|
289
|
+
aria-current={isActive ? 'true' : undefined}
|
|
290
|
+
onClick={e => handleJump(e, group.slug as string)}
|
|
291
|
+
className={cn(
|
|
292
|
+
'rounded-full border px-4 py-2 transition-colors text-h6',
|
|
293
|
+
isActive
|
|
294
|
+
? 'border-ods-text-primary bg-ods-card text-ods-text-primary'
|
|
295
|
+
: 'border-ods-border bg-ods-card text-ods-text-secondary hover:border-ods-text-secondary hover:text-ods-text-primary',
|
|
296
|
+
)}
|
|
297
|
+
>
|
|
298
|
+
{group.section}
|
|
299
|
+
</Link>
|
|
300
|
+
);
|
|
301
|
+
})}
|
|
302
|
+
</nav>
|
|
303
|
+
);
|
|
304
|
+
const questions = (
|
|
305
|
+
<div className="space-y-10">
|
|
306
|
+
{groups.map(group => {
|
|
307
|
+
const key = groupKey(group);
|
|
308
|
+
return (
|
|
309
|
+
<section key={key} id={group.slug ?? undefined} className="scroll-mt-24 space-y-4">
|
|
310
|
+
{group.section && <CategoryHeading className={SECTION_HEADING_CLASS}>{group.section}</CategoryHeading>}
|
|
311
|
+
<FaqAccordion
|
|
312
|
+
// Re-key on item-hash changes so the remount picks up the new
|
|
313
|
+
// `defaultOpenIds` (the accordion is uncontrolled). Stable for
|
|
314
|
+
// section hashes — category navigation doesn't disturb state.
|
|
315
|
+
key={`${key}:${accordionKeySuffix}`}
|
|
316
|
+
items={group.items}
|
|
317
|
+
defaultOpenIds={defaultOpenByGroupKey?.get(key)}
|
|
318
|
+
/>
|
|
319
|
+
</section>
|
|
320
|
+
);
|
|
321
|
+
})}
|
|
322
|
+
</div>
|
|
323
|
+
);
|
|
324
|
+
|
|
325
|
+
if (!aside) {
|
|
326
|
+
return (
|
|
327
|
+
<div className="space-y-8">
|
|
328
|
+
{categoryNav}
|
|
329
|
+
{questions}
|
|
330
|
+
</div>
|
|
331
|
+
);
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
// One instance of each block, placed by the grid: questions second in the
|
|
335
|
+
// document (and on a narrow area), in the right column from `lg`.
|
|
268
336
|
return (
|
|
269
|
-
<div className="
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
const isActive = group.slug === activeSlug;
|
|
274
|
-
return (
|
|
275
|
-
<a
|
|
276
|
-
key={group.slug}
|
|
277
|
-
href={`#${group.slug}`}
|
|
278
|
-
aria-current={isActive ? 'true' : undefined}
|
|
279
|
-
onClick={e => handleJump(e, group.slug as string)}
|
|
280
|
-
className={cn(
|
|
281
|
-
'rounded-full border px-4 py-2 transition-colors text-h6',
|
|
282
|
-
isActive
|
|
283
|
-
? 'border-ods-text-primary bg-ods-card text-ods-text-primary'
|
|
284
|
-
: 'border-ods-border bg-ods-card text-ods-text-secondary hover:border-ods-text-secondary hover:text-ods-text-primary',
|
|
285
|
-
)}
|
|
286
|
-
>
|
|
287
|
-
{group.section}
|
|
288
|
-
</a>
|
|
289
|
-
);
|
|
290
|
-
})}
|
|
291
|
-
</nav>
|
|
292
|
-
)}
|
|
293
|
-
<div className="space-y-10">
|
|
294
|
-
{groups.map(group => {
|
|
295
|
-
const key = groupKey(group);
|
|
296
|
-
return (
|
|
297
|
-
<section key={key} id={group.slug ?? undefined} className="scroll-mt-24 space-y-4">
|
|
298
|
-
{group.section && <CategoryHeading className={SECTION_HEADING_CLASS}>{group.section}</CategoryHeading>}
|
|
299
|
-
<FaqAccordion
|
|
300
|
-
// Re-key on item-hash changes so the remount picks up the new
|
|
301
|
-
// `defaultOpenIds` (the accordion is uncontrolled). Stable for
|
|
302
|
-
// section hashes — category navigation doesn't disturb state.
|
|
303
|
-
key={`${key}:${accordionKeySuffix}`}
|
|
304
|
-
items={group.items}
|
|
305
|
-
defaultOpenIds={defaultOpenByGroupKey?.get(key)}
|
|
306
|
-
/>
|
|
307
|
-
</section>
|
|
308
|
-
);
|
|
309
|
-
})}
|
|
337
|
+
<div className="grid gap-10 content-lg:grid-cols-[minmax(0,1fr)_minmax(0,2fr)] content-lg:grid-rows-[auto_1fr] content-lg:gap-x-16">
|
|
338
|
+
<div className="space-y-8">
|
|
339
|
+
{heading}
|
|
340
|
+
{categoryNav}
|
|
310
341
|
</div>
|
|
342
|
+
<div className="content-lg:col-start-2 content-lg:row-span-2 content-lg:row-start-1">{questions}</div>
|
|
343
|
+
<div className="content-lg:col-start-1 content-lg:row-start-2">{aside}</div>
|
|
311
344
|
</div>
|
|
312
345
|
);
|
|
313
346
|
}
|
|
@@ -359,6 +392,7 @@ export function FaqSection({
|
|
|
359
392
|
className,
|
|
360
393
|
minResults,
|
|
361
394
|
apiBaseUrl = '',
|
|
395
|
+
aside,
|
|
362
396
|
}: FaqSectionProps) {
|
|
363
397
|
const url = buildFaqsUrl(entityType, entityId, minResults, apiBaseUrl);
|
|
364
398
|
// Memoized — useSelfFetch re-syncs on [initialData]; a fresh per-render
|
|
@@ -398,8 +432,13 @@ export function FaqSection({
|
|
|
398
432
|
return (
|
|
399
433
|
<>
|
|
400
434
|
<section className={className ?? 'space-y-10'}>
|
|
401
|
-
{headingNode}
|
|
402
|
-
<GroupedFaqList
|
|
435
|
+
{!aside && headingNode}
|
|
436
|
+
<GroupedFaqList
|
|
437
|
+
groups={groups}
|
|
438
|
+
categoryHeadingAs={heading === null ? 'h2' : 'h3'}
|
|
439
|
+
heading={aside ? headingNode : undefined}
|
|
440
|
+
aside={aside}
|
|
441
|
+
/>
|
|
403
442
|
</section>
|
|
404
443
|
{schema && (
|
|
405
444
|
<script
|
|
@@ -38,6 +38,10 @@ interface ArrayEntryManagerProps<T extends object> {
|
|
|
38
38
|
titleFieldKey?: keyof T;
|
|
39
39
|
titlePlaceholder?: string;
|
|
40
40
|
isSaving?: boolean; // Loading state for save button
|
|
41
|
+
/** The most entries the list holds; at the cap the add button is disabled. Omitted: no cap. */
|
|
42
|
+
maxItems?: number;
|
|
43
|
+
/** Where a new entry lands. Default `start` (the newest on top); `end` for a list whose ORDER is its meaning. */
|
|
44
|
+
addPosition?: 'start' | 'end';
|
|
41
45
|
}
|
|
42
46
|
|
|
43
47
|
export function ArrayEntryManager<T extends object>({
|
|
@@ -57,6 +61,8 @@ export function ArrayEntryManager<T extends object>({
|
|
|
57
61
|
titleFieldKey,
|
|
58
62
|
titlePlaceholder,
|
|
59
63
|
isSaving = false,
|
|
64
|
+
maxItems,
|
|
65
|
+
addPosition = 'start',
|
|
60
66
|
}: ArrayEntryManagerProps<T>) {
|
|
61
67
|
// Local state for draft changes (when requireSave=true)
|
|
62
68
|
const [draftItems, setDraftItems] = useState<T[]>(items);
|
|
@@ -100,7 +106,9 @@ export function ArrayEntryManager<T extends object>({
|
|
|
100
106
|
|
|
101
107
|
const addItem = () => {
|
|
102
108
|
const newItem = { [fieldKey]: '' } as T;
|
|
103
|
-
|
|
109
|
+
if (maxItems !== undefined && workingItems.length >= maxItems) return;
|
|
110
|
+
// On top by default (the newest is what is being typed); at the end for an ordered list.
|
|
111
|
+
setWorkingItems(addPosition === 'end' ? [...workingItems, newItem] : [newItem, ...workingItems]);
|
|
104
112
|
};
|
|
105
113
|
|
|
106
114
|
const removeItem = (index: number) => {
|
|
@@ -180,6 +188,7 @@ export function ArrayEntryManager<T extends object>({
|
|
|
180
188
|
variant="outline"
|
|
181
189
|
size="small-legacy"
|
|
182
190
|
onClick={addItem}
|
|
191
|
+
disabled={maxItems !== undefined && workingItems.length >= maxItems}
|
|
183
192
|
leftIcon={<Plus className="h-4 w-4" />}
|
|
184
193
|
className="text-h6"
|
|
185
194
|
>
|
|
@@ -83,6 +83,8 @@ export interface BoardProps {
|
|
|
83
83
|
onApprove?: (ticketId: string, requestId?: string) => void | Promise<void>;
|
|
84
84
|
onReject?: (ticketId: string, requestId?: string) => void | Promise<void>;
|
|
85
85
|
collapseStorageKey?: string;
|
|
86
|
+
/** The lanes folded when the board mounts, by column id. Read only without `collapseStorageKey`. */
|
|
87
|
+
initialCollapsed?: Record<string, boolean>;
|
|
86
88
|
loadMoreRootMargin?: string;
|
|
87
89
|
className?: string;
|
|
88
90
|
}
|
|
@@ -138,10 +140,11 @@ function DragBoard({
|
|
|
138
140
|
onApprove,
|
|
139
141
|
onReject,
|
|
140
142
|
collapseStorageKey,
|
|
143
|
+
initialCollapsed,
|
|
141
144
|
loadMoreRootMargin,
|
|
142
145
|
className,
|
|
143
146
|
}: BoardProps) {
|
|
144
|
-
const { collapsed, toggle } = useBoardCollapse(collapseStorageKey);
|
|
147
|
+
const { collapsed, toggle } = useBoardCollapse(collapseStorageKey, initialCollapsed);
|
|
145
148
|
|
|
146
149
|
const {
|
|
147
150
|
scrollRef,
|
|
@@ -22,6 +22,7 @@ import { cn } from '../../../utils/cn';
|
|
|
22
22
|
import { formatTicketRelativeTime, formatTicketFullTimestamp } from '../../../utils/date-utils';
|
|
23
23
|
import { holdMoveDragEffect } from '../../../utils/drag-effect';
|
|
24
24
|
import { getReadableTextColor } from '../../../utils/ods-color-utils';
|
|
25
|
+
import { AgentMark } from '../../agent-mark';
|
|
25
26
|
import {
|
|
26
27
|
ClockIcon,
|
|
27
28
|
DotsLoaderIcon,
|
|
@@ -110,7 +111,7 @@ export function TicketCardBody({
|
|
|
110
111
|
const showDeviceRow = !!(ticket.deviceHostnames?.length || ticket.organizationName);
|
|
111
112
|
const deviceText = [ticket.deviceHostnames?.join(', '), ticket.organizationName].filter(Boolean).join(', ');
|
|
112
113
|
|
|
113
|
-
const hasRightSection = !!(ticket.priority || ticket.assignees?.length || renderAssignSlot);
|
|
114
|
+
const hasRightSection = !!(ticket.priority || ticket.agent || ticket.assignees?.length || renderAssignSlot);
|
|
114
115
|
const rightSection = hasRightSection ? (
|
|
115
116
|
<div className="pointer-events-auto flex shrink-0 items-center gap-[var(--spacing-system-xsf)]">
|
|
116
117
|
{ticket.priority && (
|
|
@@ -119,6 +120,15 @@ export function TicketCardBody({
|
|
|
119
120
|
aria-label={`Priority: ${ticket.priority}`}
|
|
120
121
|
/>
|
|
121
122
|
)}
|
|
123
|
+
{ticket.agent && (
|
|
124
|
+
<span
|
|
125
|
+
role="img"
|
|
126
|
+
aria-label={`Owned by ${ticket.agent === 'fae' ? 'Fae' : 'Mingo'}`}
|
|
127
|
+
className="flex size-8 shrink-0 items-center justify-center overflow-hidden rounded-full border border-ods-border bg-ods-bg"
|
|
128
|
+
>
|
|
129
|
+
<AgentMark agent={ticket.agent} className={ticket.agent === 'fae' ? 'size-full' : 'size-5'} />
|
|
130
|
+
</span>
|
|
131
|
+
)}
|
|
122
132
|
{renderAssignSlot ? (
|
|
123
133
|
renderAssignSlot(ticket)
|
|
124
134
|
) : ticket.assignees?.length ? (
|
|
@@ -33,10 +33,11 @@ export function TouchBoard({
|
|
|
33
33
|
onApprove,
|
|
34
34
|
onReject,
|
|
35
35
|
collapseStorageKey,
|
|
36
|
+
initialCollapsed,
|
|
36
37
|
loadMoreRootMargin,
|
|
37
38
|
className,
|
|
38
39
|
}: BoardProps) {
|
|
39
|
-
const { collapsed, toggle } = useBoardCollapse(collapseStorageKey);
|
|
40
|
+
const { collapsed, toggle } = useBoardCollapse(collapseStorageKey, initialCollapsed);
|
|
40
41
|
|
|
41
42
|
return (
|
|
42
43
|
<div className={cn('flex h-full min-h-0 flex-col', className)}>
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { AgentName } from '../../agent-mark';
|
|
1
2
|
import type { PendingToolCallData } from '../../chat/types';
|
|
2
3
|
import type { TicketStatus } from '../../ui/ticket-status-tag';
|
|
3
4
|
|
|
@@ -68,6 +69,8 @@ export interface BoardTicket {
|
|
|
68
69
|
escalatedByUser?: boolean;
|
|
69
70
|
/** Single live-activity indicator rendered as the card's footer row. */
|
|
70
71
|
activity?: BoardTicketActivity;
|
|
72
|
+
/** The AI agent that owns the ticket: its mark is shown with the assignees. */
|
|
73
|
+
agent?: AgentName;
|
|
71
74
|
}
|
|
72
75
|
|
|
73
76
|
export interface BoardColumnDef {
|
|
@@ -11,9 +11,14 @@ export interface UseBoardCollapseReturn {
|
|
|
11
11
|
setCollapsed: (columnId: string, value: boolean) => void;
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
/**
|
|
15
|
+
* Which lanes are collapsed. With a `storageKey` the map is the user's, kept in
|
|
16
|
+
* local storage; without one it lives in memory and starts from `initial` (a
|
|
17
|
+
* host that shows a board with some lanes already folded).
|
|
18
|
+
*/
|
|
19
|
+
export function useBoardCollapse(storageKey?: string, initial?: BoardCollapseMap): UseBoardCollapseReturn {
|
|
15
20
|
const [persisted, setPersisted] = useLocalStorage<BoardCollapseMap>(storageKey ?? '__board_collapse_unused__', {});
|
|
16
|
-
const [memory, setMemory] = useState<BoardCollapseMap>({});
|
|
21
|
+
const [memory, setMemory] = useState<BoardCollapseMap>(initial ?? {});
|
|
17
22
|
|
|
18
23
|
const collapsed = storageKey ? persisted : memory;
|
|
19
24
|
const setMap = storageKey ? setPersisted : setMemory;
|