@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.
Files changed (523) hide show
  1. package/dist/chunk-2NASBO7O.js +1137 -0
  2. package/dist/{chunk-RQRX4YC3.cjs → chunk-2RKFMUNW.cjs} +46 -46
  3. package/dist/chunk-2Y7QZAB2.cjs +158 -0
  4. package/dist/chunk-34I6XI3N.js +136 -0
  5. package/dist/chunk-3K5ZLZE7.js +292 -0
  6. package/dist/chunk-3LU4UFPS.cjs +14 -0
  7. package/dist/{chunk-3UNL26CD.cjs → chunk-3RKBJT6K.cjs} +8 -6
  8. package/dist/{chunk-6GLQLTJI.js → chunk-3SEEGNRE.js} +35 -27
  9. package/dist/{chunk-FEMAJES4.cjs → chunk-3UAJLO5U.cjs} +41 -39
  10. package/dist/chunk-4HJRHEXD.cjs +1612 -0
  11. package/dist/{chunk-JPG7OHEG.js → chunk-4QFWGLZO.js} +1 -1
  12. package/dist/chunk-4R2L3DSA.js +14 -0
  13. package/dist/{chunk-2JTGK64G.js → chunk-4UYKNOZG.js} +12 -10
  14. package/dist/{chunk-TKZXHVBG.js → chunk-5SDELRH3.js} +5 -5
  15. package/dist/{chunk-Q6B35Y7O.js → chunk-5Y72YQEK.js} +22 -113
  16. package/dist/{chunk-KUC673HM.js → chunk-6T3BTD6Q.js} +204 -982
  17. package/dist/{chunk-F57ECE2I.js → chunk-6YPTUHM7.js} +4 -4
  18. package/dist/{chunk-WJUIXU6Y.js → chunk-7HNYYNKE.js} +28 -22
  19. package/dist/{chunk-P6G3JZNC.cjs → chunk-7NSU5EQD.cjs} +57 -148
  20. package/dist/chunk-AAYNCJMW.cjs +48 -0
  21. package/dist/{chunk-FXJ3WWUB.js → chunk-ADBE7QF3.js} +5 -252
  22. package/dist/chunk-AECTRMGQ.cjs +334 -0
  23. package/dist/chunk-AGVXKD4K.js +334 -0
  24. package/dist/chunk-AL2GUHAJ.cjs +18 -0
  25. package/dist/{chunk-WMX26HB5.js → chunk-APJZBDQN.js} +12 -12
  26. package/dist/chunk-AUMKE74M.cjs +16 -0
  27. package/dist/chunk-B4NCVYEQ.cjs +292 -0
  28. package/dist/{chunk-XWEBHS7O.cjs → chunk-BXSRTBLU.cjs} +82 -54
  29. package/dist/chunk-CMGFZHCN.js +233 -0
  30. package/dist/chunk-CMZ3QTFQ.js +1207 -0
  31. package/dist/chunk-CPA2CKRZ.cjs +125 -0
  32. package/dist/{chunk-G47AP6LX.cjs → chunk-CSCJU6YC.cjs} +35 -33
  33. package/dist/chunk-CYUUHFXL.js +41 -0
  34. package/dist/chunk-DC4RTYWK.cjs +1122 -0
  35. package/dist/{chunk-NF7GNGYG.js → chunk-DDWFCWOE.js} +5 -7
  36. package/dist/{chunk-K4PTDK34.js → chunk-EFNKS5W4.js} +322 -428
  37. package/dist/{chunk-QA6TROME.cjs → chunk-EOKSKJSS.cjs} +25 -83
  38. package/dist/{chunk-6NTPY5QA.cjs → chunk-ETYLOZOB.cjs} +978 -2413
  39. package/dist/chunk-F5BPGWGT.cjs +931 -0
  40. package/dist/{chunk-5HB7FLCV.js → chunk-FCAVAEHF.js} +8277 -9990
  41. package/dist/chunk-FFT56TYB.cjs +401 -0
  42. package/dist/chunk-FYEJTF5Y.js +125 -0
  43. package/dist/chunk-G3GRYDMS.js +16 -0
  44. package/dist/{chunk-VWFZRMQR.js → chunk-G3OMVCID.js} +13 -7
  45. package/dist/chunk-G6OHIX5C.cjs +100 -0
  46. package/dist/{chunk-UDFRUKLC.cjs → chunk-GEDY7HQI.cjs} +2 -2
  47. package/dist/chunk-GQ7JJUIT.cjs +1207 -0
  48. package/dist/chunk-H3PKYE4N.js +18 -0
  49. package/dist/{chunk-AGDVEUVL.js → chunk-H5R7U2D2.js} +206 -5
  50. package/dist/{chunk-7AM6C6XH.cjs → chunk-HETQETPV.cjs} +9641 -9678
  51. package/dist/{chunk-Y2GSOUCS.cjs → chunk-HWVUR735.cjs} +2 -2
  52. package/dist/chunk-II4QMH26.cjs +35 -0
  53. package/dist/chunk-ILNN6QRW.js +1612 -0
  54. package/dist/chunk-IYVFSLWJ.js +931 -0
  55. package/dist/{chunk-C4HRRB3V.cjs → chunk-JGCFRTND.cjs} +23 -17
  56. package/dist/chunk-JHQ334WS.js +655 -0
  57. package/dist/{chunk-WCVZCGK5.cjs → chunk-JO5TLJPM.cjs} +129 -907
  58. package/dist/{chunk-PRX7HVLE.cjs → chunk-JVCAK4W3.cjs} +210 -9
  59. package/dist/chunk-KBJJQFYU.js +1122 -0
  60. package/dist/chunk-KEKCQENI.js +48 -0
  61. package/dist/chunk-KHXZFLIN.cjs +41 -0
  62. package/dist/chunk-KT3U3ZRP.cjs +1137 -0
  63. package/dist/chunk-L2VUINHN.js +35 -0
  64. package/dist/{chunk-FYOKS5RI.cjs → chunk-L6ZQGWCX.cjs} +4521 -6234
  65. package/dist/{chunk-PLYEKV3N.cjs → chunk-MA4Q5RBP.cjs} +6 -6
  66. package/dist/{chunk-VMMHJFHG.js → chunk-N67XG5GY.js} +10 -8
  67. package/dist/chunk-NPAQSMRY.js +2087 -0
  68. package/dist/{chunk-IFWLJ66M.js → chunk-NQWJAOHO.js} +6 -4
  69. package/dist/{chunk-6K7QZDA6.cjs → chunk-OBZJICEA.cjs} +8 -8
  70. package/dist/{chunk-62KNLDXK.js → chunk-OPYODNV2.js} +3 -3
  71. package/dist/chunk-P3JMAMHP.js +401 -0
  72. package/dist/chunk-PPXR22YC.cjs +2087 -0
  73. package/dist/chunk-PSVSEN4J.cjs +655 -0
  74. package/dist/{chunk-EQWD4IJE.js → chunk-RBYVFPER.js} +74 -46
  75. package/dist/{chunk-SMAAV3HL.js → chunk-ROBQ5TR7.js} +10541 -10578
  76. package/dist/{chunk-K6Y5NX6L.cjs → chunk-T3CLXR43.cjs} +114 -220
  77. package/dist/{chunk-FI6GMDO7.js → chunk-TTVOLEUS.js} +3605 -5040
  78. package/dist/{chunk-LM7TXMLU.cjs → chunk-ULWVKHSI.cjs} +8 -255
  79. package/dist/{chunk-EX6GGCAC.cjs → chunk-UT3ODMBU.cjs} +15 -15
  80. package/dist/chunk-WANCBTUE.js +71 -0
  81. package/dist/{chunk-BIZNSF3U.cjs → chunk-WBNAEYTQ.cjs} +2 -51
  82. package/dist/chunk-WFPCCBOM.cjs +71 -0
  83. package/dist/chunk-WI6FHKD7.js +158 -0
  84. package/dist/chunk-WMNCVLES.js +100 -0
  85. package/dist/{chunk-UT4YHQZW.js → chunk-WSDT7LYL.js} +0 -49
  86. package/dist/chunk-WVOTC7HW.cjs +136 -0
  87. package/dist/{chunk-6AMIRXKM.cjs → chunk-WWJG4GVG.cjs} +93 -87
  88. package/dist/chunk-XXBLN4BP.cjs +233 -0
  89. package/dist/{chunk-4IBPRIQH.js → chunk-YBQQNDC7.js} +1 -1
  90. package/dist/{chunk-QGZPZ3RL.js → chunk-YBS5QGON.js} +70 -128
  91. package/dist/{chunk-CDM7OSFB.cjs → chunk-Z5SWJW5Q.cjs} +125 -117
  92. package/dist/{chunk-YD4LJZV4.cjs → chunk-ZX7SCPLO.cjs} +6 -8
  93. package/dist/cloud-tenants-KZUZGD4A.cjs +117 -0
  94. package/dist/cloud-tenants-OGLVVQ7X.js +117 -0
  95. package/dist/components/case-studies/index.cjs +45 -29
  96. package/dist/components/case-studies/index.js +32 -16
  97. package/dist/components/chat/ask-prompts.d.ts +64 -0
  98. package/dist/components/chat/ask-prompts.d.ts.map +1 -0
  99. package/dist/components/chat/entity-cards/case-study-card.d.ts +6 -3
  100. package/dist/components/chat/entity-cards/case-study-card.d.ts.map +1 -1
  101. package/dist/components/chat/index.cjs +27 -8
  102. package/dist/components/chat/index.d.ts +1 -0
  103. package/dist/components/chat/index.d.ts.map +1 -1
  104. package/dist/components/chat/index.js +57 -38
  105. package/dist/components/chat/quick-action-chip.d.ts +7 -3
  106. package/dist/components/chat/quick-action-chip.d.ts.map +1 -1
  107. package/dist/components/contact/index.cjs +29 -13
  108. package/dist/components/contact/index.js +28 -12
  109. package/dist/components/docs/index.cjs +33 -16
  110. package/dist/components/docs/index.js +33 -16
  111. package/dist/components/docs/use-scroll-spy.d.ts +23 -1
  112. package/dist/components/docs/use-scroll-spy.d.ts.map +1 -1
  113. package/dist/components/embeds/index.cjs +29 -13
  114. package/dist/components/embeds/index.js +28 -12
  115. package/dist/components/faq/faq-section.d.ts +8 -1
  116. package/dist/components/faq/faq-section.d.ts.map +1 -1
  117. package/dist/components/faq/index.cjs +30 -14
  118. package/dist/components/faq/index.js +29 -13
  119. package/dist/components/features/array-entry-manager.d.ts +5 -1
  120. package/dist/components/features/array-entry-manager.d.ts.map +1 -1
  121. package/dist/components/features/board/board.d.ts +2 -0
  122. package/dist/components/features/board/board.d.ts.map +1 -1
  123. package/dist/components/features/board/ticket-card.d.ts.map +1 -1
  124. package/dist/components/features/board/touch-board.d.ts +1 -1
  125. package/dist/components/features/board/touch-board.d.ts.map +1 -1
  126. package/dist/components/features/board/types.d.ts +3 -0
  127. package/dist/components/features/board/types.d.ts.map +1 -1
  128. package/dist/components/features/board/use-board-collapse.d.ts +6 -1
  129. package/dist/components/features/board/use-board-collapse.d.ts.map +1 -1
  130. package/dist/components/features/capability-explorer.d.ts +94 -0
  131. package/dist/components/features/capability-explorer.d.ts.map +1 -0
  132. package/dist/components/features/cloud-tenants/index.d.ts +14 -0
  133. package/dist/components/features/cloud-tenants/index.d.ts.map +1 -0
  134. package/dist/components/features/cloud-tenants/tenant-access-cell.d.ts +9 -0
  135. package/dist/components/features/cloud-tenants/tenant-access-cell.d.ts.map +1 -0
  136. package/dist/components/features/cloud-tenants/tenant-cell.d.ts +8 -0
  137. package/dist/components/features/cloud-tenants/tenant-cell.d.ts.map +1 -0
  138. package/dist/components/features/cloud-tenants/tenant-customer-cell.d.ts +9 -0
  139. package/dist/components/features/cloud-tenants/tenant-customer-cell.d.ts.map +1 -0
  140. package/dist/components/features/cloud-tenants/tenant-presentation.d.ts +42 -0
  141. package/dist/components/features/cloud-tenants/tenant-presentation.d.ts.map +1 -0
  142. package/dist/components/features/cloud-tenants/tenant-row.d.ts +22 -0
  143. package/dist/components/features/cloud-tenants/tenant-row.d.ts.map +1 -0
  144. package/dist/components/features/cloud-tenants/tenants-table-columns.d.ts +42 -0
  145. package/dist/components/features/cloud-tenants/tenants-table-columns.d.ts.map +1 -0
  146. package/dist/components/features/cloud-tenants/tenants-table-view.d.ts +26 -0
  147. package/dist/components/features/cloud-tenants/tenants-table-view.d.ts.map +1 -0
  148. package/dist/components/features/devices/device-last-online.d.ts +3 -0
  149. package/dist/components/features/devices/device-last-online.d.ts.map +1 -0
  150. package/dist/components/features/devices/device-name.d.ts +42 -0
  151. package/dist/components/features/devices/device-name.d.ts.map +1 -0
  152. package/dist/components/features/devices/device-selector/device-selection-mode-radio.d.ts +26 -0
  153. package/dist/components/features/devices/device-selector/device-selection-mode-radio.d.ts.map +1 -0
  154. package/dist/components/features/devices/device-selector/device-selector-skeleton.d.ts +25 -0
  155. package/dist/components/features/devices/device-selector/device-selector-skeleton.d.ts.map +1 -0
  156. package/dist/components/features/devices/device-selector/device-selector.d.ts +38 -0
  157. package/dist/components/features/devices/device-selector/device-selector.d.ts.map +1 -0
  158. package/dist/components/features/devices/device-selector/device-selector.types.d.ts +133 -0
  159. package/dist/components/features/devices/device-selector/device-selector.types.d.ts.map +1 -0
  160. package/dist/components/features/devices/device-selector/narrowing.d.ts +13 -0
  161. package/dist/components/features/devices/device-selector/narrowing.d.ts.map +1 -0
  162. package/dist/components/features/devices/device-selector/use-device-selector.d.ts +17 -0
  163. package/dist/components/features/devices/device-selector/use-device-selector.d.ts.map +1 -0
  164. package/dist/components/features/devices/device-status.d.ts +23 -0
  165. package/dist/components/features/devices/device-status.d.ts.map +1 -0
  166. package/dist/components/features/devices/device-statuses.d.ts +40 -0
  167. package/dist/components/features/devices/device-statuses.d.ts.map +1 -0
  168. package/dist/components/features/devices/device-tags-filter-button.d.ts +22 -0
  169. package/dist/components/features/devices/device-tags-filter-button.d.ts.map +1 -0
  170. package/dist/components/features/devices/device-type-icon.d.ts +11 -0
  171. package/dist/components/features/devices/device-type-icon.d.ts.map +1 -0
  172. package/dist/components/features/devices/device-type-tile.d.ts +9 -0
  173. package/dist/components/features/devices/device-type-tile.d.ts.map +1 -0
  174. package/dist/components/features/devices/devices-filter-toolbar.d.ts +46 -0
  175. package/dist/components/features/devices/devices-filter-toolbar.d.ts.map +1 -0
  176. package/dist/components/features/devices/devices-grid-filters.d.ts +25 -0
  177. package/dist/components/features/devices/devices-grid-filters.d.ts.map +1 -0
  178. package/dist/components/features/devices/devices-grid.d.ts +12 -0
  179. package/dist/components/features/devices/devices-grid.d.ts.map +1 -0
  180. package/dist/components/features/devices/devices-list.d.ts +131 -0
  181. package/dist/components/features/devices/devices-list.d.ts.map +1 -0
  182. package/dist/components/features/devices/devices-panel-header.d.ts +46 -0
  183. package/dist/components/features/devices/devices-panel-header.d.ts.map +1 -0
  184. package/dist/components/features/devices/devices-panel-view.d.ts +79 -0
  185. package/dist/components/features/devices/devices-panel-view.d.ts.map +1 -0
  186. package/dist/components/features/devices/devices-table-columns.d.ts +76 -0
  187. package/dist/components/features/devices/devices-table-columns.d.ts.map +1 -0
  188. package/dist/components/features/devices/devices-view-config.d.ts +25 -0
  189. package/dist/components/features/devices/devices-view-config.d.ts.map +1 -0
  190. package/dist/components/features/devices/index.d.ts +24 -0
  191. package/dist/components/features/devices/index.d.ts.map +1 -0
  192. package/dist/components/features/devices/types.d.ts +68 -0
  193. package/dist/components/features/devices/types.d.ts.map +1 -0
  194. package/dist/components/features/devices/use-tag-filter-modal.d.ts +50 -0
  195. package/dist/components/features/devices/use-tag-filter-modal.d.ts.map +1 -0
  196. package/dist/components/features/index.cjs +227 -12
  197. package/dist/components/features/index.d.ts +7 -0
  198. package/dist/components/features/index.d.ts.map +1 -1
  199. package/dist/components/features/index.js +266 -51
  200. package/dist/components/features/knowledge-base/index.d.ts +7 -0
  201. package/dist/components/features/knowledge-base/index.d.ts.map +1 -0
  202. package/dist/components/features/knowledge-base/knowledge-base-article-view.d.ts +44 -0
  203. package/dist/components/features/knowledge-base/knowledge-base-article-view.d.ts.map +1 -0
  204. package/dist/components/features/knowledge-base/knowledge-base-item-icon.d.ts +13 -0
  205. package/dist/components/features/knowledge-base/knowledge-base-item-icon.d.ts.map +1 -0
  206. package/dist/components/features/knowledge-base/knowledge-base-status.d.ts +8 -0
  207. package/dist/components/features/knowledge-base/knowledge-base-status.d.ts.map +1 -0
  208. package/dist/components/features/knowledge-base/knowledge-base-table.d.ts +52 -0
  209. package/dist/components/features/knowledge-base/knowledge-base-table.d.ts.map +1 -0
  210. package/dist/components/features/logs/index.d.ts +12 -0
  211. package/dist/components/features/logs/index.d.ts.map +1 -0
  212. package/dist/components/features/logs/log-drawer.d.ts +29 -0
  213. package/dist/components/features/logs/log-drawer.d.ts.map +1 -0
  214. package/dist/components/features/logs/log-source-labels.d.ts +11 -0
  215. package/dist/components/features/logs/log-source-labels.d.ts.map +1 -0
  216. package/dist/components/features/logs/logs-page-view.d.ts +32 -0
  217. package/dist/components/features/logs/logs-page-view.d.ts.map +1 -0
  218. package/dist/components/features/logs/logs-table-columns.d.ts +15 -0
  219. package/dist/components/features/logs/logs-table-columns.d.ts.map +1 -0
  220. package/dist/components/features/logs/logs-table-view.d.ts +64 -0
  221. package/dist/components/features/logs/logs-table-view.d.ts.map +1 -0
  222. package/dist/components/features/logs/types.d.ts +52 -0
  223. package/dist/components/features/logs/types.d.ts.map +1 -0
  224. package/dist/components/features/policies/compute-policy-summary.d.ts +37 -0
  225. package/dist/components/features/policies/compute-policy-summary.d.ts.map +1 -0
  226. package/dist/components/features/policies/index.d.ts +8 -0
  227. package/dist/components/features/policies/index.d.ts.map +1 -0
  228. package/dist/components/features/policies/policies-table.d.ts +34 -0
  229. package/dist/components/features/policies/policies-table.d.ts.map +1 -0
  230. package/dist/components/features/policies/policy-summary-cards.d.ts +17 -0
  231. package/dist/components/features/policies/policy-summary-cards.d.ts.map +1 -0
  232. package/dist/components/features/policies/policy-table-row.d.ts +37 -0
  233. package/dist/components/features/policies/policy-table-row.d.ts.map +1 -0
  234. package/dist/components/features/remote-session/index.d.ts +8 -0
  235. package/dist/components/features/remote-session/index.d.ts.map +1 -1
  236. package/dist/components/features/remote-session/remote-desktop-chat-message-row.d.ts +21 -0
  237. package/dist/components/features/remote-session/remote-desktop-chat-message-row.d.ts.map +1 -0
  238. package/dist/components/features/remote-session/remote-desktop-chat-panel.d.ts +31 -0
  239. package/dist/components/features/remote-session/remote-desktop-chat-panel.d.ts.map +1 -0
  240. package/dist/components/features/remote-session/remote-desktop-fullscreen-toolbar.d.ts +21 -0
  241. package/dist/components/features/remote-session/remote-desktop-fullscreen-toolbar.d.ts.map +1 -0
  242. package/dist/components/features/remote-session/remote-desktop-view.d.ts +50 -0
  243. package/dist/components/features/remote-session/remote-desktop-view.d.ts.map +1 -0
  244. package/dist/components/features/software/index.d.ts +8 -0
  245. package/dist/components/features/software/index.d.ts.map +1 -0
  246. package/dist/components/features/software/package-managers.d.ts +30 -0
  247. package/dist/components/features/software/package-managers.d.ts.map +1 -0
  248. package/dist/components/features/software/package-search-field-placeholder.d.ts +7 -0
  249. package/dist/components/features/software/package-search-field-placeholder.d.ts.map +1 -0
  250. package/dist/components/features/software/schedule-fields.d.ts +34 -0
  251. package/dist/components/features/software/schedule-fields.d.ts.map +1 -0
  252. package/dist/components/features/software/software-action-copy.d.ts +25 -0
  253. package/dist/components/features/software/software-action-copy.d.ts.map +1 -0
  254. package/dist/components/features/software/software-action-form.d.ts +71 -0
  255. package/dist/components/features/software/software-action-form.d.ts.map +1 -0
  256. package/dist/components/features/software/software-row-fields.d.ts +23 -0
  257. package/dist/components/features/software/software-row-fields.d.ts.map +1 -0
  258. package/dist/components/features/software/software-row.d.ts +18 -0
  259. package/dist/components/features/software/software-row.d.ts.map +1 -0
  260. package/dist/components/features/sortable-list/index.d.ts +1 -0
  261. package/dist/components/features/sortable-list/index.d.ts.map +1 -1
  262. package/dist/components/features/sortable-list/sortable-drag-handle.d.ts +21 -0
  263. package/dist/components/features/sortable-list/sortable-drag-handle.d.ts.map +1 -0
  264. package/dist/components/help-center-pages/index.cjs +133 -114
  265. package/dist/components/help-center-pages/index.js +58 -39
  266. package/dist/components/index.cjs +320 -82
  267. package/dist/components/index.js +451 -213
  268. package/dist/components/layout/page-heading.d.ts +12 -3
  269. package/dist/components/layout/page-heading.d.ts.map +1 -1
  270. package/dist/components/meeting-scheduler/index.cjs +120 -98
  271. package/dist/components/meeting-scheduler/index.js +50 -28
  272. package/dist/components/navigation/index.cjs +36 -17
  273. package/dist/components/navigation/index.d.ts +3 -0
  274. package/dist/components/navigation/index.d.ts.map +1 -1
  275. package/dist/components/navigation/index.js +36 -17
  276. package/dist/components/navigation/mingo-ai-button.d.ts +23 -10
  277. package/dist/components/navigation/mingo-ai-button.d.ts.map +1 -1
  278. package/dist/components/navigation/sticky-section-nav.d.ts +14 -1
  279. package/dist/components/navigation/sticky-section-nav.d.ts.map +1 -1
  280. package/dist/components/onboarding-guides/index.cjs +32 -16
  281. package/dist/components/onboarding-guides/index.js +31 -15
  282. package/dist/components/product-demo/cast.d.ts +58 -0
  283. package/dist/components/product-demo/cast.d.ts.map +1 -0
  284. package/dist/components/product-demo/fixtures/cloud-tenants.d.ts +10 -0
  285. package/dist/components/product-demo/fixtures/cloud-tenants.d.ts.map +1 -0
  286. package/dist/components/product-demo/fixtures/devices.d.ts +14 -0
  287. package/dist/components/product-demo/fixtures/devices.d.ts.map +1 -0
  288. package/dist/components/product-demo/fixtures/knowledge.d.ts +14 -0
  289. package/dist/components/product-demo/fixtures/knowledge.d.ts.map +1 -0
  290. package/dist/components/product-demo/fixtures/logs.d.ts +15 -0
  291. package/dist/components/product-demo/fixtures/logs.d.ts.map +1 -0
  292. package/dist/components/product-demo/fixtures/policies.d.ts +13 -0
  293. package/dist/components/product-demo/fixtures/policies.d.ts.map +1 -0
  294. package/dist/components/product-demo/fixtures/remote-session.d.ts +20 -0
  295. package/dist/components/product-demo/fixtures/remote-session.d.ts.map +1 -0
  296. package/dist/components/product-demo/fixtures/shared.d.ts +156 -0
  297. package/dist/components/product-demo/fixtures/shared.d.ts.map +1 -0
  298. package/dist/components/product-demo/fixtures/software-update.d.ts +19 -0
  299. package/dist/components/product-demo/fixtures/software-update.d.ts.map +1 -0
  300. package/dist/components/product-demo/fixtures/tickets-board.d.ts +8 -0
  301. package/dist/components/product-demo/fixtures/tickets-board.d.ts.map +1 -0
  302. package/dist/components/product-demo/index.cjs +112 -0
  303. package/dist/components/product-demo/index.d.ts +6 -0
  304. package/dist/components/product-demo/index.d.ts.map +1 -0
  305. package/dist/components/product-demo/index.js +112 -0
  306. package/dist/components/product-demo/product-screen.d.ts +22 -0
  307. package/dist/components/product-demo/product-screen.d.ts.map +1 -0
  308. package/dist/components/product-demo/registry.d.ts +13 -0
  309. package/dist/components/product-demo/registry.d.ts.map +1 -0
  310. package/dist/components/product-demo/screen-keys.cjs +25 -0
  311. package/dist/components/product-demo/screen-keys.d.ts +27 -0
  312. package/dist/components/product-demo/screen-keys.d.ts.map +1 -0
  313. package/dist/components/product-demo/screen-keys.js +20 -0
  314. package/dist/components/product-demo/screens/cloud-tenants.d.ts +8 -0
  315. package/dist/components/product-demo/screens/cloud-tenants.d.ts.map +1 -0
  316. package/dist/components/product-demo/screens/devices.d.ts +10 -0
  317. package/dist/components/product-demo/screens/devices.d.ts.map +1 -0
  318. package/dist/components/product-demo/screens/knowledge.d.ts +9 -0
  319. package/dist/components/product-demo/screens/knowledge.d.ts.map +1 -0
  320. package/dist/components/product-demo/screens/logs.d.ts +4 -0
  321. package/dist/components/product-demo/screens/logs.d.ts.map +1 -0
  322. package/dist/components/product-demo/screens/policies.d.ts +8 -0
  323. package/dist/components/product-demo/screens/policies.d.ts.map +1 -0
  324. package/dist/components/product-demo/screens/remote-desktop-picture.d.ts +11 -0
  325. package/dist/components/product-demo/screens/remote-desktop-picture.d.ts.map +1 -0
  326. package/dist/components/product-demo/screens/remote-session.d.ts +8 -0
  327. package/dist/components/product-demo/screens/remote-session.d.ts.map +1 -0
  328. package/dist/components/product-demo/screens/software-update.d.ts +12 -0
  329. package/dist/components/product-demo/screens/software-update.d.ts.map +1 -0
  330. package/dist/components/product-demo/screens/tickets-board.d.ts +4 -0
  331. package/dist/components/product-demo/screens/tickets-board.d.ts.map +1 -0
  332. package/dist/components/product-demo/types.d.ts +9 -0
  333. package/dist/components/product-demo/types.d.ts.map +1 -0
  334. package/dist/components/related-content/index.cjs +14 -8
  335. package/dist/components/related-content/index.js +13 -7
  336. package/dist/components/tickets/index.cjs +36 -20
  337. package/dist/components/tickets/index.js +35 -19
  338. package/dist/components/ui/file-manager/index.cjs +38 -34
  339. package/dist/components/ui/file-manager/index.js +8 -4
  340. package/dist/components/ui/index.cjs +57 -17
  341. package/dist/components/ui/index.d.ts +1 -0
  342. package/dist/components/ui/index.d.ts.map +1 -1
  343. package/dist/components/ui/index.js +141 -101
  344. package/dist/components/ui/product-screen-frame.d.ts +45 -0
  345. package/dist/components/ui/product-screen-frame.d.ts.map +1 -0
  346. package/dist/components/ui/radio-group.d.ts +5 -0
  347. package/dist/components/ui/radio-group.d.ts.map +1 -1
  348. package/dist/components/ui/snap-carousel.d.ts +11 -1
  349. package/dist/components/ui/snap-carousel.d.ts.map +1 -1
  350. package/dist/components/ui/tag.d.ts +1 -1
  351. package/dist/components/ui/tag.d.ts.map +1 -1
  352. package/dist/devices-LBMG42K6.js +81 -0
  353. package/dist/devices-YGYJIXQY.cjs +81 -0
  354. package/dist/hooks/index.cjs +17 -8
  355. package/dist/hooks/index.js +32 -23
  356. package/dist/hooks/ui/index.d.ts +1 -0
  357. package/dist/hooks/ui/index.d.ts.map +1 -1
  358. package/dist/hooks/ui/use-header-height.d.ts +12 -0
  359. package/dist/hooks/ui/use-header-height.d.ts.map +1 -1
  360. package/dist/hooks/ui/use-sticky-toolbar.d.ts +29 -0
  361. package/dist/hooks/ui/use-sticky-toolbar.d.ts.map +1 -0
  362. package/dist/hooks/use-location-hash.d.ts +2 -2
  363. package/dist/hooks/use-location-hash.d.ts.map +1 -1
  364. package/dist/hooks/use-scroll-to-hash.d.ts +7 -0
  365. package/dist/hooks/use-scroll-to-hash.d.ts.map +1 -1
  366. package/dist/index.cjs +276 -25
  367. package/dist/index.js +729 -478
  368. package/dist/knowledge-H5BIWJVI.js +108 -0
  369. package/dist/knowledge-KTCVJIWN.cjs +108 -0
  370. package/dist/logs-DB5Z7M5Q.js +216 -0
  371. package/dist/logs-RVCC2UQW.cjs +216 -0
  372. package/dist/policies-EWUULFBR.js +121 -0
  373. package/dist/policies-HV4IQCBV.cjs +121 -0
  374. package/dist/remote-session-GSGZOFDX.js +196 -0
  375. package/dist/remote-session-R6VAFESR.cjs +196 -0
  376. package/dist/software-update-6PXKRKBT.js +179 -0
  377. package/dist/software-update-D4OVSWSG.cjs +179 -0
  378. package/dist/tickets-board-BHLPAVNJ.cjs +137 -0
  379. package/dist/tickets-board-PYDNELSK.js +137 -0
  380. package/dist/types/case-study.d.ts +15 -1
  381. package/dist/types/case-study.d.ts.map +1 -1
  382. package/dist/utils/date-utils.d.ts +5 -0
  383. package/dist/utils/date-utils.d.ts.map +1 -1
  384. package/dist/utils/index.cjs +45 -2
  385. package/dist/utils/index.d.ts +2 -1
  386. package/dist/utils/index.d.ts.map +1 -1
  387. package/dist/utils/index.js +41 -3
  388. package/dist/utils/open-in-new-tab.d.ts +7 -0
  389. package/dist/utils/open-in-new-tab.d.ts.map +1 -0
  390. package/dist/utils/same-page-hash-nav.d.ts +31 -0
  391. package/dist/utils/same-page-hash-nav.d.ts.map +1 -1
  392. package/dist/utils/scroll-into-view.d.ts +14 -1
  393. package/dist/utils/scroll-into-view.d.ts.map +1 -1
  394. package/package.json +13 -1
  395. package/src/components/chat/ask-prompts.tsx +226 -0
  396. package/src/components/chat/embeddable-chat.tsx +36 -2
  397. package/src/components/chat/entity-cards/case-study-card.tsx +122 -46
  398. package/src/components/chat/index.ts +1 -0
  399. package/src/components/chat/quick-action-chip.tsx +33 -9
  400. package/src/components/docs/use-scroll-spy.ts +93 -18
  401. package/src/components/faq/faq-section.tsx +82 -43
  402. package/src/components/features/array-entry-manager.tsx +10 -1
  403. package/src/components/features/board/board.tsx +4 -1
  404. package/src/components/features/board/ticket-card.tsx +11 -1
  405. package/src/components/features/board/touch-board.tsx +2 -1
  406. package/src/components/features/board/types.ts +3 -0
  407. package/src/components/features/board/use-board-collapse.ts +7 -2
  408. package/src/components/features/capability-explorer.tsx +412 -0
  409. package/src/components/features/cloud-tenants/index.ts +28 -0
  410. package/src/components/features/cloud-tenants/tenant-access-cell.tsx +24 -0
  411. package/src/components/features/cloud-tenants/tenant-cell.tsx +26 -0
  412. package/src/components/features/cloud-tenants/tenant-customer-cell.tsx +27 -0
  413. package/src/components/features/cloud-tenants/tenant-presentation.ts +111 -0
  414. package/src/components/features/cloud-tenants/tenant-row.ts +21 -0
  415. package/src/components/features/cloud-tenants/tenants-table-columns.ts +30 -0
  416. package/src/components/features/cloud-tenants/tenants-table-view.tsx +142 -0
  417. package/src/components/features/devices/device-last-online.ts +6 -0
  418. package/src/components/features/devices/device-name.ts +51 -0
  419. package/src/components/features/devices/device-selector/device-selection-mode-radio.tsx +107 -0
  420. package/src/components/features/devices/device-selector/device-selector-skeleton.tsx +32 -0
  421. package/src/components/features/devices/device-selector/device-selector.tsx +799 -0
  422. package/src/components/features/devices/device-selector/device-selector.types.ts +138 -0
  423. package/src/components/features/devices/device-selector/narrowing.ts +33 -0
  424. package/src/components/features/devices/device-selector/use-device-selector.ts +51 -0
  425. package/src/components/features/devices/device-status.ts +102 -0
  426. package/src/components/features/devices/device-statuses.ts +88 -0
  427. package/src/components/features/devices/device-tags-filter-button.tsx +49 -0
  428. package/src/components/features/devices/device-type-icon.tsx +29 -0
  429. package/src/components/features/devices/device-type-tile.tsx +17 -0
  430. package/src/components/features/devices/devices-filter-toolbar.tsx +114 -0
  431. package/src/components/features/devices/devices-grid-filters.tsx +99 -0
  432. package/src/components/features/devices/devices-grid.tsx +86 -0
  433. package/src/components/features/devices/devices-list.tsx +357 -0
  434. package/src/components/features/devices/devices-panel-header.tsx +97 -0
  435. package/src/components/features/devices/devices-panel-view.tsx +261 -0
  436. package/src/components/features/devices/devices-table-columns.tsx +356 -0
  437. package/src/components/features/devices/devices-view-config.tsx +38 -0
  438. package/src/components/features/devices/index.ts +89 -0
  439. package/src/components/features/devices/types.ts +74 -0
  440. package/src/components/features/devices/use-tag-filter-modal.ts +109 -0
  441. package/src/components/features/index.ts +9 -0
  442. package/src/components/features/knowledge-base/index.ts +19 -0
  443. package/src/components/features/knowledge-base/knowledge-base-article-view.tsx +134 -0
  444. package/src/components/features/knowledge-base/knowledge-base-item-icon.ts +14 -0
  445. package/src/components/features/knowledge-base/knowledge-base-status.ts +12 -0
  446. package/src/components/features/knowledge-base/knowledge-base-table.tsx +180 -0
  447. package/src/components/features/logs/index.ts +20 -0
  448. package/src/components/features/logs/log-drawer.tsx +138 -0
  449. package/src/components/features/logs/log-source-labels.ts +25 -0
  450. package/src/components/features/logs/logs-page-view.tsx +100 -0
  451. package/src/components/features/logs/logs-table-columns.ts +16 -0
  452. package/src/components/features/logs/logs-table-view.tsx +509 -0
  453. package/src/components/features/logs/types.ts +71 -0
  454. package/src/components/features/policies/compute-policy-summary.ts +115 -0
  455. package/src/components/features/policies/index.ts +14 -0
  456. package/src/components/features/policies/policies-table.tsx +235 -0
  457. package/src/components/features/policies/policy-summary-cards.tsx +69 -0
  458. package/src/components/features/policies/policy-table-row.ts +37 -0
  459. package/src/components/features/remote-session/index.ts +8 -0
  460. package/src/components/features/remote-session/remote-desktop-chat-message-row.tsx +56 -0
  461. package/src/components/features/remote-session/remote-desktop-chat-panel.tsx +102 -0
  462. package/src/components/features/remote-session/remote-desktop-fullscreen-toolbar.tsx +119 -0
  463. package/src/components/features/remote-session/remote-desktop-view.tsx +209 -0
  464. package/src/components/features/software/index.ts +39 -0
  465. package/src/components/features/software/package-managers.ts +54 -0
  466. package/src/components/features/software/package-search-field-placeholder.tsx +23 -0
  467. package/src/components/features/software/schedule-fields.tsx +105 -0
  468. package/src/components/features/software/software-action-copy.ts +70 -0
  469. package/src/components/features/software/software-action-form.tsx +199 -0
  470. package/src/components/features/software/software-row-fields.tsx +105 -0
  471. package/src/components/features/software/software-row.ts +22 -0
  472. package/src/components/features/sortable-list/index.ts +1 -0
  473. package/src/components/features/sortable-list/sortable-drag-handle.tsx +41 -0
  474. package/src/components/layout/page-heading.tsx +23 -6
  475. package/src/components/navigation/index.ts +5 -0
  476. package/src/components/navigation/mingo-ai-button.tsx +37 -13
  477. package/src/components/navigation/sticky-section-nav.tsx +99 -1
  478. package/src/components/product-demo/cast.tsx +78 -0
  479. package/src/components/product-demo/fixtures/cloud-tenants.ts +63 -0
  480. package/src/components/product-demo/fixtures/devices.ts +87 -0
  481. package/src/components/product-demo/fixtures/knowledge.ts +48 -0
  482. package/src/components/product-demo/fixtures/logs.ts +103 -0
  483. package/src/components/product-demo/fixtures/policies.ts +77 -0
  484. package/src/components/product-demo/fixtures/remote-session.ts +65 -0
  485. package/src/components/product-demo/fixtures/shared.ts +53 -0
  486. package/src/components/product-demo/fixtures/software-update.ts +63 -0
  487. package/src/components/product-demo/fixtures/tickets-board.ts +100 -0
  488. package/src/components/product-demo/index.ts +7 -0
  489. package/src/components/product-demo/product-screen.tsx +94 -0
  490. package/src/components/product-demo/registry.ts +20 -0
  491. package/src/components/product-demo/screen-keys.ts +31 -0
  492. package/src/components/product-demo/screens/cloud-tenants.tsx +23 -0
  493. package/src/components/product-demo/screens/devices.tsx +41 -0
  494. package/src/components/product-demo/screens/knowledge.tsx +27 -0
  495. package/src/components/product-demo/screens/logs.tsx +113 -0
  496. package/src/components/product-demo/screens/policies.tsx +29 -0
  497. package/src/components/product-demo/screens/remote-desktop-picture.tsx +118 -0
  498. package/src/components/product-demo/screens/remote-session.tsx +46 -0
  499. package/src/components/product-demo/screens/software-update.tsx +97 -0
  500. package/src/components/product-demo/screens/tickets-board.tsx +28 -0
  501. package/src/components/product-demo/types.ts +10 -0
  502. package/src/components/ui/index.ts +1 -0
  503. package/src/components/ui/product-screen-frame.tsx +136 -0
  504. package/src/components/ui/radio-group.tsx +16 -4
  505. package/src/components/ui/snap-carousel.tsx +26 -1
  506. package/src/components/ui/tag.tsx +5 -0
  507. package/src/hooks/ui/index.ts +1 -0
  508. package/src/hooks/ui/use-header-height.ts +51 -2
  509. package/src/hooks/ui/use-sticky-toolbar.ts +60 -0
  510. package/src/hooks/use-location-hash.ts +9 -5
  511. package/src/hooks/use-scroll-to-hash.ts +9 -1
  512. package/src/types/case-study.ts +21 -1
  513. package/src/utils/date-utils.ts +8 -1
  514. package/src/utils/index.ts +5 -0
  515. package/src/utils/open-in-new-tab.ts +12 -0
  516. package/src/utils/same-page-hash-nav.ts +57 -0
  517. package/src/utils/scroll-into-view.ts +21 -5
  518. package/dist/chunk-BM5MVGH3.cjs +0 -499
  519. package/dist/chunk-CUME3VTQ.js +0 -144
  520. package/dist/chunk-CZ7Y7UG4.js +0 -732
  521. package/dist/chunk-FLKJYMVB.js +0 -499
  522. package/dist/chunk-OF6GEI5A.cjs +0 -144
  523. package/dist/chunk-UVTD52MD.cjs +0 -732
@@ -0,0 +1,89 @@
1
+ 'use client';
2
+
3
+ export { formatLastOnline } from './device-last-online';
4
+ export { type DeviceNameSource, getDeviceName, matchesDeviceName } from './device-name';
5
+ export {
6
+ DeviceSelectionModeRadio,
7
+ type DeviceSelectionModeRadioProps,
8
+ } from './device-selector/device-selection-mode-radio';
9
+ export { DeviceSelector } from './device-selector/device-selector';
10
+ export type {
11
+ DeviceSelectionMode,
12
+ DeviceSelectorInfiniteScroll,
13
+ DeviceSelectorNarrowing,
14
+ DeviceSelectorProps,
15
+ DeviceSelectorServer,
16
+ SubTab,
17
+ } from './device-selector/device-selector.types';
18
+ export { DeviceSelectorSkeleton } from './device-selector/device-selector-skeleton';
19
+ export { EMPTY_NARROWING, narrowingToFilter } from './device-selector/narrowing';
20
+ export {
21
+ type DeviceCardStatus,
22
+ type DeviceStatusConfig,
23
+ type DeviceStatusVariant,
24
+ getDeviceOperatingSystem,
25
+ getDeviceStatusConfig,
26
+ } from './device-status';
27
+ export {
28
+ DEFAULT_DASHBOARD_STATUSES,
29
+ DEFAULT_DEVICES_LIST_STATUSES,
30
+ DEFAULT_VISIBLE_STATUSES,
31
+ type DefaultVisibleStatus,
32
+ DEVICE_ENRICHMENT_FILTER,
33
+ DEVICE_ENRICHMENT_STATUSES,
34
+ DEVICE_STATUS,
35
+ type DeviceStatus,
36
+ HIDDEN_DEVICE_STATUSES,
37
+ type HiddenDeviceStatus,
38
+ } from './device-statuses';
39
+ export { DeviceTagsFilterButton } from './device-tags-filter-button';
40
+ export { renderDeviceTypeIcon } from './device-type-icon';
41
+ export { DeviceTypeTile } from './device-type-tile';
42
+ export { DevicesFilterToolbar, type DevicesFilterToolbarProps } from './devices-filter-toolbar';
43
+ export { DevicesGrid, type DevicesGridProps } from './devices-grid';
44
+ export { DevicesGridFilters, type DevicesGridFiltersProps } from './devices-grid-filters';
45
+ export {
46
+ DevicesList,
47
+ type DevicesListNarrowing,
48
+ type DevicesListProps,
49
+ EMPTY_DEVICES_NARROWING,
50
+ isNarrowed,
51
+ } from './devices-list';
52
+ export {
53
+ buildDevicePanelActions,
54
+ DEVICE_VIEW_MODE_ITEMS,
55
+ type DevicePanelActionsOptions,
56
+ } from './devices-panel-header';
57
+ export {
58
+ DevicesPanelView,
59
+ type DevicesPanelViewProps,
60
+ type DevicesViewMode,
61
+ IDLE_DEVICES_TOOLBAR,
62
+ } from './devices-panel-view';
63
+ export {
64
+ type DeviceFilterColumn,
65
+ type DeviceFilterOption,
66
+ DevicesTableBody,
67
+ type DevicesTableBodyProps,
68
+ getDeviceActionsColumn,
69
+ getDeviceFilterColumns,
70
+ getDeviceOpenColumn,
71
+ getDeviceTableColumns,
72
+ } from './devices-table-columns';
73
+ export {
74
+ type DevicesViewConfig,
75
+ DevicesViewConfigProvider,
76
+ useDeviceImageUrl,
77
+ useDevicesViewConfig,
78
+ } from './devices-view-config';
79
+ export type {
80
+ DeviceFilterInput,
81
+ DeviceFilters,
82
+ DeviceFilterTag,
83
+ DeviceFilterValue,
84
+ DeviceRow,
85
+ DeviceTag,
86
+ TagFilterOption,
87
+ } from './types';
88
+ export { useStickyToolbar } from '../../../hooks/ui/use-sticky-toolbar';
89
+ export { useTagFilterModal } from './use-tag-filter-modal';
@@ -0,0 +1,74 @@
1
+ import type { DeviceNameSource } from './device-name';
2
+
3
+ /** A tag on a device: one key and the values the device carries for it. */
4
+ export interface DeviceTag {
5
+ tagId: string;
6
+ key: string;
7
+ description?: string;
8
+ color?: string;
9
+ values: string[];
10
+ createdAt?: string;
11
+ }
12
+
13
+ /**
14
+ * A device as the list views draw it: the plain fields a row, a card and a
15
+ * picker read, and nothing a details page needs. The product's full device
16
+ * record is a superset of this, so it is passed as is.
17
+ */
18
+ export interface DeviceRow extends DeviceNameSource {
19
+ id: string;
20
+ /** The agent's id. Empty when the agent is not connected. */
21
+ machineId: string;
22
+ status: string;
23
+ /** When the device was last seen, ISO. Two spellings, one per source. */
24
+ last_seen?: string;
25
+ lastSeen?: string;
26
+ /** desktop / laptop / server / mobile / tablet. */
27
+ type?: string;
28
+ osType?: string;
29
+ operating_system?: string;
30
+ organizationId?: string;
31
+ organization?: string;
32
+ /** Primary contact of the customer: the CUSTOMER column's second line in the picker. */
33
+ organizationEmail?: string;
34
+ organizationImageUrl?: string | null;
35
+ organizationImageHash?: string | null;
36
+ tags?: DeviceTag[];
37
+ }
38
+
39
+ export interface DeviceFilterValue {
40
+ value: string;
41
+ count: number;
42
+ }
43
+
44
+ export interface DeviceFilterTag {
45
+ value: string;
46
+ label: string;
47
+ count: number;
48
+ }
49
+
50
+ export interface TagFilterOption {
51
+ key: string;
52
+ value: string;
53
+ count: number;
54
+ }
55
+
56
+ /** The facets behind the device filters, as the server counts them. */
57
+ export interface DeviceFilters {
58
+ statuses: DeviceFilterValue[];
59
+ deviceTypes: DeviceFilterValue[];
60
+ osTypes: DeviceFilterValue[];
61
+ organizationIds: DeviceFilterTag[];
62
+ tagKeys: TagFilterOption[];
63
+ filteredCount: number;
64
+ }
65
+
66
+ /** What narrows a device list, in the backend's field names. */
67
+ export interface DeviceFilterInput {
68
+ statuses?: string[];
69
+ deviceTypes?: string[];
70
+ osTypes?: string[];
71
+ organizationIds?: string[];
72
+ tagKeys?: string[];
73
+ tagValues?: string[];
74
+ }
@@ -0,0 +1,109 @@
1
+ 'use client';
2
+
3
+ import { useCallback, useMemo, useRef, useState } from 'react';
4
+ import { useMdUp } from '../../../hooks/ui/use-media-query';
5
+ import type { DeviceFilters } from './types';
6
+
7
+ function isCompleteTag(tag: string): boolean {
8
+ const i = tag.indexOf(':');
9
+ return i > 0 && i < tag.length - 1;
10
+ }
11
+
12
+ /** One selectable value in a FilterModal group. */
13
+ interface FilterOption {
14
+ id: string;
15
+ label: string;
16
+ count?: number;
17
+ }
18
+
19
+ interface UseTagFilterModalParams {
20
+ tags: string[];
21
+ deviceFilters: DeviceFilters | null;
22
+ columns: Array<{ key: string; label: string; filterable?: boolean; filterOptions?: FilterOption[] }>;
23
+ /** `useApiParams`' setter, each device list param is a list of ids. */
24
+ setParams: (params: Record<string, string[]>) => void;
25
+ /**
26
+ * Runs after the filters are applied, to bring the list back to its top.
27
+ * Default: the page's `<main>` scrolls to the top. A host whose list scrolls
28
+ * in another container passes its own.
29
+ */
30
+ onApplied?: () => void;
31
+ }
32
+
33
+ const scrollMainToTop = () => document.querySelector('main')?.scrollTo({ top: 0, behavior: 'instant' });
34
+
35
+ export function useTagFilterModal({
36
+ tags,
37
+ deviceFilters,
38
+ columns,
39
+ setParams,
40
+ onApplied = scrollMainToTop,
41
+ }: UseTagFilterModalParams) {
42
+ const isMdUp = useMdUp();
43
+ const [isOpen, setIsOpen] = useState(false);
44
+
45
+ // FilterModal calls onFilterChange first, then onTagsChange.
46
+ // We buffer column filters in a ref so onTagsChange can flush everything in one setParams call.
47
+ const pendingFiltersRef = useRef<Record<string, string[]>>({});
48
+
49
+ const open = useCallback(() => setIsOpen(true), []);
50
+ const close = useCallback(() => setIsOpen(false), []);
51
+
52
+ const filterGroups = useMemo(() => {
53
+ if (isMdUp) return [];
54
+ return columns
55
+ .filter(column => column.filterable)
56
+ .map(column => ({
57
+ id: column.key,
58
+ title: column.label,
59
+ options: column.filterOptions || [],
60
+ }));
61
+ }, [columns, isMdUp]);
62
+
63
+ const tagFilterKeys = useMemo(() => {
64
+ if (!deviceFilters?.tagKeys) return [];
65
+ const grouped = new Map<string, { id: string; label: string; count?: number }[]>();
66
+ for (const tag of deviceFilters.tagKeys) {
67
+ if (tag.key === 'null') continue;
68
+ const values = grouped.get(tag.key) ?? [];
69
+ grouped.set(tag.key, values);
70
+ if (tag.value !== 'null') {
71
+ values.push({ id: tag.value, label: tag.value, count: tag.count });
72
+ }
73
+ }
74
+ return Array.from(grouped, ([key, values]) => ({ key, label: key, values }));
75
+ }, [deviceFilters]);
76
+
77
+ // Step 1: buffer column filters (called first by FilterModal)
78
+ const handleFilterChange = useCallback((columnFilters: Record<string, string[]>) => {
79
+ pendingFiltersRef.current = columnFilters;
80
+ }, []);
81
+
82
+ // Step 2: combine with buffered filters and flush (called second by FilterModal)
83
+ const handleTagsChange = useCallback(
84
+ (newTags: string[]) => {
85
+ const cf = pendingFiltersRef.current;
86
+ setParams({
87
+ statuses: cf.status || [],
88
+ osTypes: cf.os || [],
89
+ organizationIds: cf.organization || [],
90
+ tags: newTags.filter(isCompleteTag),
91
+ });
92
+ pendingFiltersRef.current = {};
93
+ onApplied();
94
+ },
95
+ [setParams, onApplied],
96
+ );
97
+
98
+ return {
99
+ isOpen,
100
+ open,
101
+ close,
102
+ isMdUp,
103
+ filterGroups,
104
+ tagFilterKeys,
105
+ handleFilterChange,
106
+ handleTagsChange,
107
+ selectedTags: tags,
108
+ };
109
+ }
@@ -88,13 +88,22 @@ export * from './view-toggle';
88
88
  // AI Enrich components
89
89
  export * from './ai-enrich';
90
90
  export * from './policy-configuration-panel';
91
+ export * from './policies';
92
+ export * from './cloud-tenants';
91
93
  export * from './waitlist-form';
92
94
  export * from './notifications';
93
95
  export * from './time-tracker';
94
96
  export * from './remote-session';
95
97
  export * from './board';
98
+ export * from './devices';
99
+ export * from './software';
100
+ export * from './logs';
101
+ export * from './knowledge-base';
96
102
  export * from './sortable-list';
97
103
  export * from './ticket-status-config-list';
98
104
 
99
105
  // A request and its outcome as two turns and a "your part" footer
100
106
  export * from './conversation-card';
107
+
108
+ // The jobs a product does, one at a time with its real screen (marketing pages)
109
+ export * from './capability-explorer';
@@ -0,0 +1,19 @@
1
+ 'use client';
2
+
3
+ export { KNOWLEDGE_BASE_ITEM_ICON } from './knowledge-base-item-icon';
4
+ export type { KnowledgeBaseItemType } from './knowledge-base-item-icon';
5
+ export { getKnowledgeBaseColumns, getKnowledgeBaseOpenColumn, KnowledgeBaseTableBody } from './knowledge-base-table';
6
+ export type {
7
+ KnowledgeBaseRow,
8
+ KnowledgeBaseRowHref,
9
+ KnowledgeBaseRowStatus,
10
+ KnowledgeBaseRowType,
11
+ KnowledgeBaseTableBodyProps,
12
+ KnowledgeBaseTableMode,
13
+ } from './knowledge-base-table';
14
+ export { KnowledgeBaseArticleView } from './knowledge-base-article-view';
15
+ export type {
16
+ KnowledgeBaseArticleAuthor,
17
+ KnowledgeBaseArticleStatus,
18
+ KnowledgeBaseArticleViewProps,
19
+ } from './knowledge-base-article-view';
@@ -0,0 +1,134 @@
1
+ 'use client';
2
+
3
+ import type { ReactNode } from 'react';
4
+ import { PageLayout } from '../../layout/page-layout';
5
+ import type { ActionsMenuGroup } from '../../ui/actions-menu';
6
+ import { Card } from '../../ui/card';
7
+ import { DeletedUserAvatar } from '../../ui/deleted-user-avatar';
8
+ import type { PageActionButton } from '../../ui/page-actions';
9
+ import { SquareAvatar } from '../../ui/square-avatar';
10
+ import { Tag } from '../../ui/tag';
11
+ import { type TicketAttachment, TicketAttachmentsList } from '../../ui/ticket-attachments-list';
12
+ import { TicketDetailSection } from '../../ui/ticket-detail-section';
13
+ import { TruncateText } from '../../ui/truncate-text';
14
+ import { KNOWLEDGE_BASE_STATUS_VARIANT, type KnowledgeBaseArticleStatus } from './knowledge-base-status';
15
+
16
+ export type { KnowledgeBaseArticleStatus };
17
+
18
+ export interface KnowledgeBaseArticleAuthor {
19
+ /** Display name; null: "Unknown". */
20
+ name: string | null;
21
+ /** A URL the browser can load as is. */
22
+ imageUrl?: string;
23
+ /** A deleted account: the red placeholder instead of the avatar, the name in the error colour. */
24
+ deleted?: boolean;
25
+ }
26
+
27
+ export interface KnowledgeBaseArticleViewProps {
28
+ title: string;
29
+ /** "Back" over the title; left out, the page has none (a picture of the page). */
30
+ onBack?: () => void;
31
+ /** The header's buttons and the menu behind them, built by the host from the article's state. */
32
+ actions?: PageActionButton[];
33
+ menuActions?: ActionsMenuGroup[];
34
+ tags?: readonly { id: string; label: string }[];
35
+ author: KnowledgeBaseArticleAuthor;
36
+ /** When the article last changed, already formatted by the host. */
37
+ updatedLabel: string;
38
+ status: KnowledgeBaseArticleStatus;
39
+ /** The article's body: the host's markdown renderer over the content. */
40
+ content: ReactNode;
41
+ attachments?: TicketAttachment[];
42
+ /** What the host adds under the article (assigned items, its dialogs). */
43
+ children?: ReactNode;
44
+ className?: string;
45
+ }
46
+
47
+ /**
48
+ * One knowledge base article, open: its title and tags, who wrote it, when it
49
+ * changed and its status, then the body and its attachments. Everything that
50
+ * reads or changes the article (the query, publish, archive, move) is the
51
+ * host's: it passes the article's fields, the buttons and the rendered body.
52
+ */
53
+ export function KnowledgeBaseArticleView({
54
+ title,
55
+ onBack,
56
+ actions,
57
+ menuActions,
58
+ tags = [],
59
+ author,
60
+ updatedLabel,
61
+ status,
62
+ content,
63
+ attachments = [],
64
+ children,
65
+ className = 'px-[var(--spacing-system-l)] pb-[var(--spacing-system-l)]',
66
+ }: KnowledgeBaseArticleViewProps) {
67
+ return (
68
+ <PageLayout
69
+ title={title}
70
+ backButton={onBack ? { label: 'Back', onClick: onBack } : undefined}
71
+ actionsVariant="menu-primary"
72
+ actions={actions}
73
+ menuActions={menuActions}
74
+ className={className}
75
+ >
76
+ {tags.length > 0 && (
77
+ <div className="flex flex-wrap gap-[var(--spacing-system-xsf)]">
78
+ {tags.map(tag => (
79
+ <Tag key={tag.id} label={tag.label} variant="outline" className="max-w-full" />
80
+ ))}
81
+ </div>
82
+ )}
83
+
84
+ <Card className="border-ods-border px-[var(--spacing-system-mf)] py-0">
85
+ <div className="grid grid-cols-2 gap-x-[var(--spacing-system-mf)] content-lg:grid-cols-3">
86
+ <div className="flex h-20 min-w-0 items-center gap-[var(--spacing-system-xsf)]">
87
+ {author.deleted ? (
88
+ <DeletedUserAvatar size="md" />
89
+ ) : (
90
+ <SquareAvatar
91
+ src={author.imageUrl}
92
+ fallback={author.name ?? 'A'}
93
+ alt={author.name ?? 'Author'}
94
+ size="md"
95
+ variant="round"
96
+ />
97
+ )}
98
+ <div className="flex min-w-0 flex-1 flex-col">
99
+ <TruncateText className={author.deleted ? 'text-ods-error' : undefined}>
100
+ {author.name ?? 'Unknown'}
101
+ </TruncateText>
102
+ <p className="truncate text-heading-5 text-ods-text-secondary">Author</p>
103
+ </div>
104
+ </div>
105
+
106
+ <div className="flex h-20 min-w-0 flex-col justify-center">
107
+ <TruncateText>{updatedLabel}</TruncateText>
108
+ <p className="truncate text-heading-5 text-ods-text-secondary">Updated</p>
109
+ </div>
110
+
111
+ <div
112
+ className="col-span-2 -mx-[var(--spacing-system-mf)] border-t border-ods-border content-lg:hidden"
113
+ aria-hidden
114
+ />
115
+
116
+ <div className="flex h-20 min-w-0 flex-col items-start justify-center gap-[var(--spacing-system-xxs)]">
117
+ <Tag variant={KNOWLEDGE_BASE_STATUS_VARIANT[status]} label={status} />
118
+ <p className="truncate text-heading-5 text-ods-text-secondary">Status</p>
119
+ </div>
120
+ </div>
121
+ </Card>
122
+
123
+ {content}
124
+
125
+ {attachments.length > 0 && (
126
+ <TicketDetailSection label="Attachments">
127
+ <TicketAttachmentsList attachments={attachments} />
128
+ </TicketDetailSection>
129
+ )}
130
+
131
+ {children}
132
+ </PageLayout>
133
+ );
134
+ }
@@ -0,0 +1,14 @@
1
+ import { BookTextIcon, FolderIcon } from '../../icons-v2-generated';
2
+
3
+ /** What a Knowledge Base item is. */
4
+ export type KnowledgeBaseItemType = 'ARTICLE' | 'FOLDER';
5
+
6
+ /**
7
+ * The glyph for each Knowledge Base item type. Single source for the KB table
8
+ * and Mingo's `@kb` / `@kbFolder` mention chips, so an article or folder reads
9
+ * the same in the chat as on the Knowledge Base page.
10
+ */
11
+ export const KNOWLEDGE_BASE_ITEM_ICON = {
12
+ ARTICLE: BookTextIcon,
13
+ FOLDER: FolderIcon,
14
+ } satisfies Record<KnowledgeBaseItemType, typeof BookTextIcon>;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * THE status vocabulary of a knowledge base article and the tag each status
3
+ * wears. The article view and the table both read it: a new status is added
4
+ * here, once.
5
+ */
6
+ export type KnowledgeBaseArticleStatus = 'DRAFT' | 'PUBLISHED' | 'ARCHIVED';
7
+
8
+ export const KNOWLEDGE_BASE_STATUS_VARIANT: Record<KnowledgeBaseArticleStatus, 'success' | 'warning' | 'grey'> = {
9
+ PUBLISHED: 'success',
10
+ DRAFT: 'warning',
11
+ ARCHIVED: 'grey',
12
+ };
@@ -0,0 +1,180 @@
1
+ 'use client';
2
+
3
+ import { type ReactNode, useMemo } from 'react';
4
+ import { formatDate, formatTime } from '../../../utils/format-date';
5
+ import { openInNewTab } from '../../../utils/open-in-new-tab';
6
+ import { ArrowRightUpIcon } from '../../icons-v2-generated';
7
+ import { Button } from '../../ui/button/button';
8
+ import { type ColumnDef, DataTable, type Row, useDataTable } from '../../ui/data-table';
9
+ import { Tag as StatusTag } from '../../ui/tag';
10
+ import { TruncateText } from '../../ui/truncate-text';
11
+ import { KNOWLEDGE_BASE_ITEM_ICON } from './knowledge-base-item-icon';
12
+ import { KNOWLEDGE_BASE_STATUS_VARIANT, type KnowledgeBaseArticleStatus } from './knowledge-base-status';
13
+
14
+ export type KnowledgeBaseRowType = 'ARTICLE' | 'FOLDER' | string;
15
+ export type KnowledgeBaseRowStatus = KnowledgeBaseArticleStatus | string | null | undefined;
16
+
17
+ export interface KnowledgeBaseRow {
18
+ readonly id: string;
19
+ readonly type: KnowledgeBaseRowType;
20
+ readonly name: string;
21
+ readonly parentId?: string | null;
22
+ readonly status?: KnowledgeBaseRowStatus;
23
+ readonly summary?: string | null;
24
+ readonly createdAt?: string | null;
25
+ readonly updatedAt?: string | null;
26
+ readonly tags?: ReadonlyArray<{ readonly id: string; readonly key: string; readonly color?: string | null }>;
27
+ }
28
+
29
+ export type KnowledgeBaseTableMode = 'standard' | 'archive';
30
+
31
+ /** Where a row leads: the article's page, or the folder's listing. */
32
+ export type KnowledgeBaseRowHref = (item: KnowledgeBaseRow) => string;
33
+
34
+ /**
35
+ * Click handler that opens `href` in a new tab. The button sits inside a row
36
+ * that renders as a link, and `<a>` cannot be nested inside `<a>`, so it is a
37
+ * `<button>` that opens the tab itself.
38
+ */
39
+ /** The trailing "open in new tab" column. */
40
+ export function getKnowledgeBaseOpenColumn(getHref: KnowledgeBaseRowHref): ColumnDef<KnowledgeBaseRow> {
41
+ return {
42
+ id: 'open',
43
+ cell: ({ row }: { row: Row<KnowledgeBaseRow> }) => (
44
+ <div data-no-row-click className="pointer-events-auto flex items-center justify-end">
45
+ <Button
46
+ onClick={openInNewTab(getHref(row.original))}
47
+ variant="outline"
48
+ size="icon"
49
+ leftIcon={<ArrowRightUpIcon className="h-5 w-5" />}
50
+ aria-label="Open in new tab"
51
+ className="bg-ods-card"
52
+ />
53
+ </div>
54
+ ),
55
+ enableSorting: false,
56
+ meta: { width: 'w-12 shrink-0 flex-none', hideAt: 'md', align: 'right' },
57
+ };
58
+ }
59
+
60
+ export function getKnowledgeBaseColumns(mode: KnowledgeBaseTableMode): ColumnDef<KnowledgeBaseRow>[] {
61
+ return [
62
+ {
63
+ accessorKey: 'name',
64
+ header: 'Name',
65
+ cell: ({ row }: { row: Row<KnowledgeBaseRow> }) => {
66
+ const item = row.original;
67
+ const Icon = item.type === 'FOLDER' ? KNOWLEDGE_BASE_ITEM_ICON.FOLDER : KNOWLEDGE_BASE_ITEM_ICON.ARTICLE;
68
+ const status = item.status as 'DRAFT' | 'PUBLISHED' | 'ARCHIVED' | null | undefined;
69
+ const tagStatus = status === 'DRAFT' || status === 'ARCHIVED' ? status : null;
70
+ return (
71
+ <div className="relative box-border flex h-20 w-full shrink-0 content-stretch items-center justify-start gap-[var(--spacing-system-m)] py-0">
72
+ <div className="relative flex h-8 w-8 shrink-0 items-center justify-center rounded-[6px] border border-ods-border">
73
+ <Icon size={16} className="shrink-0 text-ods-text-secondary" />
74
+ </div>
75
+ <div className="flex min-w-0 flex-1 flex-col">
76
+ <div className="flex min-w-0 items-center gap-[var(--spacing-system-xsf)]">
77
+ {/* min-w-0 wrapper so the FloatingTooltip trigger div can shrink and the name ellipsizes. */}
78
+ <div className="min-w-0">
79
+ <TruncateText>{item.name}</TruncateText>
80
+ </div>
81
+ {tagStatus && (
82
+ <StatusTag
83
+ variant={KNOWLEDGE_BASE_STATUS_VARIANT[tagStatus]}
84
+ label={tagStatus}
85
+ className="shrink-0"
86
+ />
87
+ )}
88
+ </div>
89
+ {item.type === 'ARTICLE' && item.summary && (
90
+ <TruncateText variant="h6" tone="secondary">
91
+ {item.summary}
92
+ </TruncateText>
93
+ )}
94
+ </div>
95
+ </div>
96
+ );
97
+ },
98
+ enableSorting: false,
99
+ meta: { width: 'flex-1 min-w-0' },
100
+ },
101
+ {
102
+ accessorKey: mode === 'archive' ? 'updatedAt' : 'createdAt',
103
+ header: mode === 'archive' ? 'Archived' : 'Created',
104
+ cell: ({ row }: { row: Row<KnowledgeBaseRow> }) => {
105
+ if (row.original.type !== 'ARTICLE') return null;
106
+ const ts = mode === 'archive' ? (row.original.updatedAt ?? row.original.createdAt) : row.original.createdAt;
107
+ if (!ts) return null;
108
+ return (
109
+ <div className="flex flex-col whitespace-nowrap">
110
+ <span className="text-ods-text-primary text-h4">{formatDate(ts)}</span>
111
+ <span className="text-heading-5 text-ods-text-secondary">{formatTime(ts)}</span>
112
+ </div>
113
+ );
114
+ },
115
+ enableSorting: false,
116
+ meta: { width: 'w-[140px]', hideAt: 'lg' },
117
+ },
118
+ ];
119
+ }
120
+
121
+ export interface KnowledgeBaseTableBodyProps {
122
+ items: KnowledgeBaseRow[];
123
+ /**
124
+ * Where a row leads, for the row link and the "open in new tab" button.
125
+ * Pass a stable function (module level or `useCallback`): the columns and
126
+ * the rows are memoized on it.
127
+ */
128
+ getHref: KnowledgeBaseRowHref;
129
+ mode?: KnowledgeBaseTableMode;
130
+ isLoading?: boolean;
131
+ emptyMessage?: string;
132
+ skeletonRows?: number;
133
+ stickyHeaderOffset?: string;
134
+ footerSlot?: ReactNode;
135
+ actionsColumn?: ColumnDef<KnowledgeBaseRow>;
136
+ // Server-side total. Without it, RowCount shows only currently-loaded rows.
137
+ totalCount?: number;
138
+ /** The narrow rendering: the name column and the row actions only (no date, no "open in new tab"). */
139
+ compact?: boolean;
140
+ }
141
+
142
+ export function KnowledgeBaseTableBody({
143
+ items,
144
+ getHref,
145
+ mode = 'standard',
146
+ isLoading,
147
+ emptyMessage = 'No items found.',
148
+ skeletonRows,
149
+ stickyHeaderOffset,
150
+ footerSlot,
151
+ actionsColumn,
152
+ totalCount,
153
+ compact = false,
154
+ }: KnowledgeBaseTableBodyProps) {
155
+ const columns = useMemo<ColumnDef<KnowledgeBaseRow>[]>(() => {
156
+ const base = getKnowledgeBaseColumns(mode);
157
+ const leading = compact ? base.slice(0, 1) : base;
158
+ const trailing = compact ? [] : [getKnowledgeBaseOpenColumn(getHref)];
159
+ return actionsColumn ? [...leading, actionsColumn, ...trailing] : [...leading, ...trailing];
160
+ }, [mode, actionsColumn, getHref, compact]);
161
+
162
+ const table = useDataTable<KnowledgeBaseRow>({
163
+ data: items,
164
+ columns,
165
+ getRowId: row => row.id,
166
+ enableSorting: false,
167
+ });
168
+
169
+ return (
170
+ <DataTable table={table}>
171
+ <DataTable.Header
172
+ stickyHeader={!!stickyHeaderOffset}
173
+ stickyHeaderOffset={stickyHeaderOffset}
174
+ rightSlot={<DataTable.RowCount itemName={mode === 'archive' ? 'article' : 'item'} totalCount={totalCount} />}
175
+ />
176
+ <DataTable.Body loading={isLoading} skeletonRows={skeletonRows} emptyMessage={emptyMessage} rowHref={getHref} />
177
+ {footerSlot}
178
+ </DataTable>
179
+ );
180
+ }
@@ -0,0 +1,20 @@
1
+ 'use client';
2
+
3
+ export { LogDrawer } from './log-drawer';
4
+ export type { LogDrawerInfoField, LogDrawerProps } from './log-drawer';
5
+ export { logSourceLabels, SYSTEM_SOURCE_LABEL } from './log-source-labels';
6
+ export type { LogSourceLabels } from './log-source-labels';
7
+ export { LogCopyIconButton, LogsPageView } from './logs-page-view';
8
+ export type { LogCopyIconButtonProps, LogsPageViewProps } from './logs-page-view';
9
+ export { LOG_COLUMN_WIDTHS } from './logs-table-columns';
10
+ export { LogsTableSkeleton, LogsTableView } from './logs-table-view';
11
+ export type { LogsTableGuideButton, LogsTableSkeletonProps, LogsTableViewProps } from './logs-table-view';
12
+ export { logSeverityVariant } from './types';
13
+ export type {
14
+ LogsTableColumnId,
15
+ LogsTableDateFilter,
16
+ LogsTableFacets,
17
+ LogsTableFilterOption,
18
+ LogStatusVariant,
19
+ UiLogEntry,
20
+ } from './types';