@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.
Files changed (534) 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-YBUT4AMG.cjs → chunk-3RKBJT6K.cjs} +8 -6
  8. package/dist/{chunk-LNW45N2C.js → chunk-3SEEGNRE.js} +35 -27
  9. package/dist/{chunk-L6Y6OOKG.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-36BCTE7D.js → chunk-4UYKNOZG.js} +12 -10
  14. package/dist/{chunk-DA5UDTLG.js → chunk-5SDELRH3.js} +5 -5
  15. package/dist/{chunk-CZSZSDD4.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-TDYIREDJ.js → chunk-7HNYYNKE.js} +28 -22
  19. package/dist/{chunk-2G7UYK35.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-2RNB5DTN.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-B73373AG.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-6YKAT7NV.js → chunk-DDWFCWOE.js} +5 -7
  36. package/dist/{chunk-F5FF4DME.js → chunk-EFNKS5W4.js} +322 -428
  37. package/dist/{chunk-2KXTOP6G.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-4L6XCMOU.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-MR3A4MZV.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-CNWOMQQJ.js → chunk-H5R7U2D2.js} +206 -5
  50. package/dist/{chunk-SEXWHIMS.cjs → chunk-HETQETPV.cjs} +9648 -9680
  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-3AHTOSXJ.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-JRU2CXLB.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-P42V6N34.cjs → chunk-L6ZQGWCX.cjs} +4521 -6234
  65. package/dist/{chunk-PLYEKV3N.cjs → chunk-MA4Q5RBP.cjs} +6 -6
  66. package/dist/{chunk-SS5MBHDP.js → chunk-N67XG5GY.js} +10 -8
  67. package/dist/chunk-NPAQSMRY.js +2087 -0
  68. package/dist/{chunk-I3ST4PLM.js → chunk-NQWJAOHO.js} +6 -4
  69. package/dist/{chunk-QAOFMK2A.cjs → chunk-OBZJICEA.cjs} +8 -8
  70. package/dist/{chunk-6IW7TWPV.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-4UM2ETLM.js → chunk-RBYVFPER.js} +74 -46
  75. package/dist/{chunk-PO33GZVY.js → chunk-ROBQ5TR7.js} +10549 -10581
  76. package/dist/{chunk-ZCLBYT2V.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-6I4ZAFO2.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-AOWDNSTM.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-LFFB6EMB.js → chunk-YBS5QGON.js} +70 -128
  91. package/dist/{chunk-NSGXARGJ.cjs → chunk-Z5SWJW5Q.cjs} +125 -117
  92. package/dist/{chunk-OJLR5MEO.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/hooks/use-chat-dialog-manager.d.ts +4 -1
  102. package/dist/components/chat/hooks/use-chat-dialog-manager.d.ts.map +1 -1
  103. package/dist/components/chat/hooks/use-unified-chat.d.ts.map +1 -1
  104. package/dist/components/chat/index.cjs +27 -8
  105. package/dist/components/chat/index.d.ts +1 -0
  106. package/dist/components/chat/index.d.ts.map +1 -1
  107. package/dist/components/chat/index.js +57 -38
  108. package/dist/components/chat/quick-action-chip.d.ts +7 -3
  109. package/dist/components/chat/quick-action-chip.d.ts.map +1 -1
  110. package/dist/components/chat/types/component.types.d.ts +4 -0
  111. package/dist/components/chat/types/component.types.d.ts.map +1 -1
  112. package/dist/components/chat/types/unified-chat-state.types.d.ts +12 -0
  113. package/dist/components/chat/types/unified-chat-state.types.d.ts.map +1 -1
  114. package/dist/components/contact/index.cjs +29 -13
  115. package/dist/components/contact/index.js +28 -12
  116. package/dist/components/docs/index.cjs +33 -16
  117. package/dist/components/docs/index.js +33 -16
  118. package/dist/components/docs/use-scroll-spy.d.ts +23 -1
  119. package/dist/components/docs/use-scroll-spy.d.ts.map +1 -1
  120. package/dist/components/embeds/index.cjs +29 -13
  121. package/dist/components/embeds/index.js +28 -12
  122. package/dist/components/faq/faq-section.d.ts +8 -1
  123. package/dist/components/faq/faq-section.d.ts.map +1 -1
  124. package/dist/components/faq/index.cjs +30 -14
  125. package/dist/components/faq/index.js +29 -13
  126. package/dist/components/features/array-entry-manager.d.ts +5 -1
  127. package/dist/components/features/array-entry-manager.d.ts.map +1 -1
  128. package/dist/components/features/board/board.d.ts +2 -0
  129. package/dist/components/features/board/board.d.ts.map +1 -1
  130. package/dist/components/features/board/ticket-card.d.ts.map +1 -1
  131. package/dist/components/features/board/touch-board.d.ts +1 -1
  132. package/dist/components/features/board/touch-board.d.ts.map +1 -1
  133. package/dist/components/features/board/types.d.ts +3 -0
  134. package/dist/components/features/board/types.d.ts.map +1 -1
  135. package/dist/components/features/board/use-board-collapse.d.ts +6 -1
  136. package/dist/components/features/board/use-board-collapse.d.ts.map +1 -1
  137. package/dist/components/features/capability-explorer.d.ts +94 -0
  138. package/dist/components/features/capability-explorer.d.ts.map +1 -0
  139. package/dist/components/features/cloud-tenants/index.d.ts +14 -0
  140. package/dist/components/features/cloud-tenants/index.d.ts.map +1 -0
  141. package/dist/components/features/cloud-tenants/tenant-access-cell.d.ts +9 -0
  142. package/dist/components/features/cloud-tenants/tenant-access-cell.d.ts.map +1 -0
  143. package/dist/components/features/cloud-tenants/tenant-cell.d.ts +8 -0
  144. package/dist/components/features/cloud-tenants/tenant-cell.d.ts.map +1 -0
  145. package/dist/components/features/cloud-tenants/tenant-customer-cell.d.ts +9 -0
  146. package/dist/components/features/cloud-tenants/tenant-customer-cell.d.ts.map +1 -0
  147. package/dist/components/features/cloud-tenants/tenant-presentation.d.ts +42 -0
  148. package/dist/components/features/cloud-tenants/tenant-presentation.d.ts.map +1 -0
  149. package/dist/components/features/cloud-tenants/tenant-row.d.ts +22 -0
  150. package/dist/components/features/cloud-tenants/tenant-row.d.ts.map +1 -0
  151. package/dist/components/features/cloud-tenants/tenants-table-columns.d.ts +42 -0
  152. package/dist/components/features/cloud-tenants/tenants-table-columns.d.ts.map +1 -0
  153. package/dist/components/features/cloud-tenants/tenants-table-view.d.ts +26 -0
  154. package/dist/components/features/cloud-tenants/tenants-table-view.d.ts.map +1 -0
  155. package/dist/components/features/devices/device-last-online.d.ts +3 -0
  156. package/dist/components/features/devices/device-last-online.d.ts.map +1 -0
  157. package/dist/components/features/devices/device-name.d.ts +42 -0
  158. package/dist/components/features/devices/device-name.d.ts.map +1 -0
  159. package/dist/components/features/devices/device-selector/device-selection-mode-radio.d.ts +26 -0
  160. package/dist/components/features/devices/device-selector/device-selection-mode-radio.d.ts.map +1 -0
  161. package/dist/components/features/devices/device-selector/device-selector-skeleton.d.ts +25 -0
  162. package/dist/components/features/devices/device-selector/device-selector-skeleton.d.ts.map +1 -0
  163. package/dist/components/features/devices/device-selector/device-selector.d.ts +38 -0
  164. package/dist/components/features/devices/device-selector/device-selector.d.ts.map +1 -0
  165. package/dist/components/features/devices/device-selector/device-selector.types.d.ts +133 -0
  166. package/dist/components/features/devices/device-selector/device-selector.types.d.ts.map +1 -0
  167. package/dist/components/features/devices/device-selector/narrowing.d.ts +13 -0
  168. package/dist/components/features/devices/device-selector/narrowing.d.ts.map +1 -0
  169. package/dist/components/features/devices/device-selector/use-device-selector.d.ts +17 -0
  170. package/dist/components/features/devices/device-selector/use-device-selector.d.ts.map +1 -0
  171. package/dist/components/features/devices/device-status.d.ts +23 -0
  172. package/dist/components/features/devices/device-status.d.ts.map +1 -0
  173. package/dist/components/features/devices/device-statuses.d.ts +40 -0
  174. package/dist/components/features/devices/device-statuses.d.ts.map +1 -0
  175. package/dist/components/features/devices/device-tags-filter-button.d.ts +22 -0
  176. package/dist/components/features/devices/device-tags-filter-button.d.ts.map +1 -0
  177. package/dist/components/features/devices/device-type-icon.d.ts +11 -0
  178. package/dist/components/features/devices/device-type-icon.d.ts.map +1 -0
  179. package/dist/components/features/devices/device-type-tile.d.ts +9 -0
  180. package/dist/components/features/devices/device-type-tile.d.ts.map +1 -0
  181. package/dist/components/features/devices/devices-filter-toolbar.d.ts +46 -0
  182. package/dist/components/features/devices/devices-filter-toolbar.d.ts.map +1 -0
  183. package/dist/components/features/devices/devices-grid-filters.d.ts +25 -0
  184. package/dist/components/features/devices/devices-grid-filters.d.ts.map +1 -0
  185. package/dist/components/features/devices/devices-grid.d.ts +12 -0
  186. package/dist/components/features/devices/devices-grid.d.ts.map +1 -0
  187. package/dist/components/features/devices/devices-list.d.ts +131 -0
  188. package/dist/components/features/devices/devices-list.d.ts.map +1 -0
  189. package/dist/components/features/devices/devices-panel-header.d.ts +46 -0
  190. package/dist/components/features/devices/devices-panel-header.d.ts.map +1 -0
  191. package/dist/components/features/devices/devices-panel-view.d.ts +79 -0
  192. package/dist/components/features/devices/devices-panel-view.d.ts.map +1 -0
  193. package/dist/components/features/devices/devices-table-columns.d.ts +76 -0
  194. package/dist/components/features/devices/devices-table-columns.d.ts.map +1 -0
  195. package/dist/components/features/devices/devices-view-config.d.ts +25 -0
  196. package/dist/components/features/devices/devices-view-config.d.ts.map +1 -0
  197. package/dist/components/features/devices/index.d.ts +24 -0
  198. package/dist/components/features/devices/index.d.ts.map +1 -0
  199. package/dist/components/features/devices/types.d.ts +68 -0
  200. package/dist/components/features/devices/types.d.ts.map +1 -0
  201. package/dist/components/features/devices/use-tag-filter-modal.d.ts +50 -0
  202. package/dist/components/features/devices/use-tag-filter-modal.d.ts.map +1 -0
  203. package/dist/components/features/index.cjs +227 -12
  204. package/dist/components/features/index.d.ts +7 -0
  205. package/dist/components/features/index.d.ts.map +1 -1
  206. package/dist/components/features/index.js +266 -51
  207. package/dist/components/features/knowledge-base/index.d.ts +7 -0
  208. package/dist/components/features/knowledge-base/index.d.ts.map +1 -0
  209. package/dist/components/features/knowledge-base/knowledge-base-article-view.d.ts +44 -0
  210. package/dist/components/features/knowledge-base/knowledge-base-article-view.d.ts.map +1 -0
  211. package/dist/components/features/knowledge-base/knowledge-base-item-icon.d.ts +13 -0
  212. package/dist/components/features/knowledge-base/knowledge-base-item-icon.d.ts.map +1 -0
  213. package/dist/components/features/knowledge-base/knowledge-base-status.d.ts +8 -0
  214. package/dist/components/features/knowledge-base/knowledge-base-status.d.ts.map +1 -0
  215. package/dist/components/features/knowledge-base/knowledge-base-table.d.ts +52 -0
  216. package/dist/components/features/knowledge-base/knowledge-base-table.d.ts.map +1 -0
  217. package/dist/components/features/logs/index.d.ts +12 -0
  218. package/dist/components/features/logs/index.d.ts.map +1 -0
  219. package/dist/components/features/logs/log-drawer.d.ts +29 -0
  220. package/dist/components/features/logs/log-drawer.d.ts.map +1 -0
  221. package/dist/components/features/logs/log-source-labels.d.ts +11 -0
  222. package/dist/components/features/logs/log-source-labels.d.ts.map +1 -0
  223. package/dist/components/features/logs/logs-page-view.d.ts +32 -0
  224. package/dist/components/features/logs/logs-page-view.d.ts.map +1 -0
  225. package/dist/components/features/logs/logs-table-columns.d.ts +15 -0
  226. package/dist/components/features/logs/logs-table-columns.d.ts.map +1 -0
  227. package/dist/components/features/logs/logs-table-view.d.ts +64 -0
  228. package/dist/components/features/logs/logs-table-view.d.ts.map +1 -0
  229. package/dist/components/features/logs/types.d.ts +52 -0
  230. package/dist/components/features/logs/types.d.ts.map +1 -0
  231. package/dist/components/features/policies/compute-policy-summary.d.ts +37 -0
  232. package/dist/components/features/policies/compute-policy-summary.d.ts.map +1 -0
  233. package/dist/components/features/policies/index.d.ts +8 -0
  234. package/dist/components/features/policies/index.d.ts.map +1 -0
  235. package/dist/components/features/policies/policies-table.d.ts +34 -0
  236. package/dist/components/features/policies/policies-table.d.ts.map +1 -0
  237. package/dist/components/features/policies/policy-summary-cards.d.ts +17 -0
  238. package/dist/components/features/policies/policy-summary-cards.d.ts.map +1 -0
  239. package/dist/components/features/policies/policy-table-row.d.ts +37 -0
  240. package/dist/components/features/policies/policy-table-row.d.ts.map +1 -0
  241. package/dist/components/features/remote-session/index.d.ts +8 -0
  242. package/dist/components/features/remote-session/index.d.ts.map +1 -1
  243. package/dist/components/features/remote-session/remote-desktop-chat-message-row.d.ts +21 -0
  244. package/dist/components/features/remote-session/remote-desktop-chat-message-row.d.ts.map +1 -0
  245. package/dist/components/features/remote-session/remote-desktop-chat-panel.d.ts +31 -0
  246. package/dist/components/features/remote-session/remote-desktop-chat-panel.d.ts.map +1 -0
  247. package/dist/components/features/remote-session/remote-desktop-fullscreen-toolbar.d.ts +21 -0
  248. package/dist/components/features/remote-session/remote-desktop-fullscreen-toolbar.d.ts.map +1 -0
  249. package/dist/components/features/remote-session/remote-desktop-view.d.ts +50 -0
  250. package/dist/components/features/remote-session/remote-desktop-view.d.ts.map +1 -0
  251. package/dist/components/features/software/index.d.ts +8 -0
  252. package/dist/components/features/software/index.d.ts.map +1 -0
  253. package/dist/components/features/software/package-managers.d.ts +30 -0
  254. package/dist/components/features/software/package-managers.d.ts.map +1 -0
  255. package/dist/components/features/software/package-search-field-placeholder.d.ts +7 -0
  256. package/dist/components/features/software/package-search-field-placeholder.d.ts.map +1 -0
  257. package/dist/components/features/software/schedule-fields.d.ts +34 -0
  258. package/dist/components/features/software/schedule-fields.d.ts.map +1 -0
  259. package/dist/components/features/software/software-action-copy.d.ts +25 -0
  260. package/dist/components/features/software/software-action-copy.d.ts.map +1 -0
  261. package/dist/components/features/software/software-action-form.d.ts +71 -0
  262. package/dist/components/features/software/software-action-form.d.ts.map +1 -0
  263. package/dist/components/features/software/software-row-fields.d.ts +23 -0
  264. package/dist/components/features/software/software-row-fields.d.ts.map +1 -0
  265. package/dist/components/features/software/software-row.d.ts +18 -0
  266. package/dist/components/features/software/software-row.d.ts.map +1 -0
  267. package/dist/components/features/sortable-list/index.d.ts +1 -0
  268. package/dist/components/features/sortable-list/index.d.ts.map +1 -1
  269. package/dist/components/features/sortable-list/sortable-drag-handle.d.ts +21 -0
  270. package/dist/components/features/sortable-list/sortable-drag-handle.d.ts.map +1 -0
  271. package/dist/components/help-center-pages/index.cjs +133 -114
  272. package/dist/components/help-center-pages/index.js +58 -39
  273. package/dist/components/index.cjs +320 -82
  274. package/dist/components/index.js +451 -213
  275. package/dist/components/layout/page-heading.d.ts +12 -3
  276. package/dist/components/layout/page-heading.d.ts.map +1 -1
  277. package/dist/components/meeting-scheduler/index.cjs +120 -98
  278. package/dist/components/meeting-scheduler/index.js +50 -28
  279. package/dist/components/navigation/index.cjs +36 -17
  280. package/dist/components/navigation/index.d.ts +3 -0
  281. package/dist/components/navigation/index.d.ts.map +1 -1
  282. package/dist/components/navigation/index.js +36 -17
  283. package/dist/components/navigation/mingo-ai-button.d.ts +23 -10
  284. package/dist/components/navigation/mingo-ai-button.d.ts.map +1 -1
  285. package/dist/components/navigation/sticky-section-nav.d.ts +14 -1
  286. package/dist/components/navigation/sticky-section-nav.d.ts.map +1 -1
  287. package/dist/components/onboarding-guides/index.cjs +32 -16
  288. package/dist/components/onboarding-guides/index.js +31 -15
  289. package/dist/components/product-demo/cast.d.ts +58 -0
  290. package/dist/components/product-demo/cast.d.ts.map +1 -0
  291. package/dist/components/product-demo/fixtures/cloud-tenants.d.ts +10 -0
  292. package/dist/components/product-demo/fixtures/cloud-tenants.d.ts.map +1 -0
  293. package/dist/components/product-demo/fixtures/devices.d.ts +14 -0
  294. package/dist/components/product-demo/fixtures/devices.d.ts.map +1 -0
  295. package/dist/components/product-demo/fixtures/knowledge.d.ts +14 -0
  296. package/dist/components/product-demo/fixtures/knowledge.d.ts.map +1 -0
  297. package/dist/components/product-demo/fixtures/logs.d.ts +15 -0
  298. package/dist/components/product-demo/fixtures/logs.d.ts.map +1 -0
  299. package/dist/components/product-demo/fixtures/policies.d.ts +13 -0
  300. package/dist/components/product-demo/fixtures/policies.d.ts.map +1 -0
  301. package/dist/components/product-demo/fixtures/remote-session.d.ts +20 -0
  302. package/dist/components/product-demo/fixtures/remote-session.d.ts.map +1 -0
  303. package/dist/components/product-demo/fixtures/shared.d.ts +156 -0
  304. package/dist/components/product-demo/fixtures/shared.d.ts.map +1 -0
  305. package/dist/components/product-demo/fixtures/software-update.d.ts +19 -0
  306. package/dist/components/product-demo/fixtures/software-update.d.ts.map +1 -0
  307. package/dist/components/product-demo/fixtures/tickets-board.d.ts +8 -0
  308. package/dist/components/product-demo/fixtures/tickets-board.d.ts.map +1 -0
  309. package/dist/components/product-demo/index.cjs +112 -0
  310. package/dist/components/product-demo/index.d.ts +6 -0
  311. package/dist/components/product-demo/index.d.ts.map +1 -0
  312. package/dist/components/product-demo/index.js +112 -0
  313. package/dist/components/product-demo/product-screen.d.ts +22 -0
  314. package/dist/components/product-demo/product-screen.d.ts.map +1 -0
  315. package/dist/components/product-demo/registry.d.ts +13 -0
  316. package/dist/components/product-demo/registry.d.ts.map +1 -0
  317. package/dist/components/product-demo/screen-keys.cjs +25 -0
  318. package/dist/components/product-demo/screen-keys.d.ts +27 -0
  319. package/dist/components/product-demo/screen-keys.d.ts.map +1 -0
  320. package/dist/components/product-demo/screen-keys.js +20 -0
  321. package/dist/components/product-demo/screens/cloud-tenants.d.ts +8 -0
  322. package/dist/components/product-demo/screens/cloud-tenants.d.ts.map +1 -0
  323. package/dist/components/product-demo/screens/devices.d.ts +10 -0
  324. package/dist/components/product-demo/screens/devices.d.ts.map +1 -0
  325. package/dist/components/product-demo/screens/knowledge.d.ts +9 -0
  326. package/dist/components/product-demo/screens/knowledge.d.ts.map +1 -0
  327. package/dist/components/product-demo/screens/logs.d.ts +4 -0
  328. package/dist/components/product-demo/screens/logs.d.ts.map +1 -0
  329. package/dist/components/product-demo/screens/policies.d.ts +8 -0
  330. package/dist/components/product-demo/screens/policies.d.ts.map +1 -0
  331. package/dist/components/product-demo/screens/remote-desktop-picture.d.ts +11 -0
  332. package/dist/components/product-demo/screens/remote-desktop-picture.d.ts.map +1 -0
  333. package/dist/components/product-demo/screens/remote-session.d.ts +8 -0
  334. package/dist/components/product-demo/screens/remote-session.d.ts.map +1 -0
  335. package/dist/components/product-demo/screens/software-update.d.ts +12 -0
  336. package/dist/components/product-demo/screens/software-update.d.ts.map +1 -0
  337. package/dist/components/product-demo/screens/tickets-board.d.ts +4 -0
  338. package/dist/components/product-demo/screens/tickets-board.d.ts.map +1 -0
  339. package/dist/components/product-demo/types.d.ts +9 -0
  340. package/dist/components/product-demo/types.d.ts.map +1 -0
  341. package/dist/components/related-content/index.cjs +14 -8
  342. package/dist/components/related-content/index.js +13 -7
  343. package/dist/components/tickets/index.cjs +36 -20
  344. package/dist/components/tickets/index.js +35 -19
  345. package/dist/components/ui/file-manager/index.cjs +38 -34
  346. package/dist/components/ui/file-manager/index.js +8 -4
  347. package/dist/components/ui/index.cjs +57 -17
  348. package/dist/components/ui/index.d.ts +1 -0
  349. package/dist/components/ui/index.d.ts.map +1 -1
  350. package/dist/components/ui/index.js +141 -101
  351. package/dist/components/ui/product-screen-frame.d.ts +45 -0
  352. package/dist/components/ui/product-screen-frame.d.ts.map +1 -0
  353. package/dist/components/ui/radio-group.d.ts +5 -0
  354. package/dist/components/ui/radio-group.d.ts.map +1 -1
  355. package/dist/components/ui/snap-carousel.d.ts +11 -1
  356. package/dist/components/ui/snap-carousel.d.ts.map +1 -1
  357. package/dist/components/ui/tag.d.ts +1 -1
  358. package/dist/components/ui/tag.d.ts.map +1 -1
  359. package/dist/devices-LBMG42K6.js +81 -0
  360. package/dist/devices-YGYJIXQY.cjs +81 -0
  361. package/dist/hooks/index.cjs +17 -8
  362. package/dist/hooks/index.js +32 -23
  363. package/dist/hooks/ui/index.d.ts +1 -0
  364. package/dist/hooks/ui/index.d.ts.map +1 -1
  365. package/dist/hooks/ui/use-header-height.d.ts +12 -0
  366. package/dist/hooks/ui/use-header-height.d.ts.map +1 -1
  367. package/dist/hooks/ui/use-sticky-toolbar.d.ts +29 -0
  368. package/dist/hooks/ui/use-sticky-toolbar.d.ts.map +1 -0
  369. package/dist/hooks/use-location-hash.d.ts +2 -2
  370. package/dist/hooks/use-location-hash.d.ts.map +1 -1
  371. package/dist/hooks/use-scroll-to-hash.d.ts +7 -0
  372. package/dist/hooks/use-scroll-to-hash.d.ts.map +1 -1
  373. package/dist/index.cjs +276 -25
  374. package/dist/index.js +729 -478
  375. package/dist/knowledge-H5BIWJVI.js +108 -0
  376. package/dist/knowledge-KTCVJIWN.cjs +108 -0
  377. package/dist/logs-DB5Z7M5Q.js +216 -0
  378. package/dist/logs-RVCC2UQW.cjs +216 -0
  379. package/dist/policies-EWUULFBR.js +121 -0
  380. package/dist/policies-HV4IQCBV.cjs +121 -0
  381. package/dist/remote-session-GSGZOFDX.js +196 -0
  382. package/dist/remote-session-R6VAFESR.cjs +196 -0
  383. package/dist/software-update-6PXKRKBT.js +179 -0
  384. package/dist/software-update-D4OVSWSG.cjs +179 -0
  385. package/dist/tickets-board-BHLPAVNJ.cjs +137 -0
  386. package/dist/tickets-board-PYDNELSK.js +137 -0
  387. package/dist/types/case-study.d.ts +15 -1
  388. package/dist/types/case-study.d.ts.map +1 -1
  389. package/dist/utils/date-utils.d.ts +5 -0
  390. package/dist/utils/date-utils.d.ts.map +1 -1
  391. package/dist/utils/index.cjs +45 -2
  392. package/dist/utils/index.d.ts +2 -1
  393. package/dist/utils/index.d.ts.map +1 -1
  394. package/dist/utils/index.js +41 -3
  395. package/dist/utils/open-in-new-tab.d.ts +7 -0
  396. package/dist/utils/open-in-new-tab.d.ts.map +1 -0
  397. package/dist/utils/same-page-hash-nav.d.ts +31 -0
  398. package/dist/utils/same-page-hash-nav.d.ts.map +1 -1
  399. package/dist/utils/scroll-into-view.d.ts +14 -1
  400. package/dist/utils/scroll-into-view.d.ts.map +1 -1
  401. package/package.json +13 -1
  402. package/src/components/chat/ask-prompts.tsx +226 -0
  403. package/src/components/chat/embeddable-chat.tsx +38 -2
  404. package/src/components/chat/entity-cards/case-study-card.tsx +122 -46
  405. package/src/components/chat/hooks/use-chat-dialog-manager.ts +22 -4
  406. package/src/components/chat/hooks/use-unified-chat.ts +1 -0
  407. package/src/components/chat/index.ts +1 -0
  408. package/src/components/chat/quick-action-chip.tsx +33 -9
  409. package/src/components/chat/types/component.types.ts +4 -0
  410. package/src/components/chat/types/unified-chat-state.types.ts +13 -0
  411. package/src/components/docs/use-scroll-spy.ts +93 -18
  412. package/src/components/faq/faq-section.tsx +82 -43
  413. package/src/components/features/array-entry-manager.tsx +10 -1
  414. package/src/components/features/board/board.tsx +4 -1
  415. package/src/components/features/board/ticket-card.tsx +11 -1
  416. package/src/components/features/board/touch-board.tsx +2 -1
  417. package/src/components/features/board/types.ts +3 -0
  418. package/src/components/features/board/use-board-collapse.ts +7 -2
  419. package/src/components/features/capability-explorer.tsx +412 -0
  420. package/src/components/features/cloud-tenants/index.ts +28 -0
  421. package/src/components/features/cloud-tenants/tenant-access-cell.tsx +24 -0
  422. package/src/components/features/cloud-tenants/tenant-cell.tsx +26 -0
  423. package/src/components/features/cloud-tenants/tenant-customer-cell.tsx +27 -0
  424. package/src/components/features/cloud-tenants/tenant-presentation.ts +111 -0
  425. package/src/components/features/cloud-tenants/tenant-row.ts +21 -0
  426. package/src/components/features/cloud-tenants/tenants-table-columns.ts +30 -0
  427. package/src/components/features/cloud-tenants/tenants-table-view.tsx +142 -0
  428. package/src/components/features/devices/device-last-online.ts +6 -0
  429. package/src/components/features/devices/device-name.ts +51 -0
  430. package/src/components/features/devices/device-selector/device-selection-mode-radio.tsx +107 -0
  431. package/src/components/features/devices/device-selector/device-selector-skeleton.tsx +32 -0
  432. package/src/components/features/devices/device-selector/device-selector.tsx +799 -0
  433. package/src/components/features/devices/device-selector/device-selector.types.ts +138 -0
  434. package/src/components/features/devices/device-selector/narrowing.ts +33 -0
  435. package/src/components/features/devices/device-selector/use-device-selector.ts +51 -0
  436. package/src/components/features/devices/device-status.ts +102 -0
  437. package/src/components/features/devices/device-statuses.ts +88 -0
  438. package/src/components/features/devices/device-tags-filter-button.tsx +49 -0
  439. package/src/components/features/devices/device-type-icon.tsx +29 -0
  440. package/src/components/features/devices/device-type-tile.tsx +17 -0
  441. package/src/components/features/devices/devices-filter-toolbar.tsx +114 -0
  442. package/src/components/features/devices/devices-grid-filters.tsx +99 -0
  443. package/src/components/features/devices/devices-grid.tsx +86 -0
  444. package/src/components/features/devices/devices-list.tsx +357 -0
  445. package/src/components/features/devices/devices-panel-header.tsx +97 -0
  446. package/src/components/features/devices/devices-panel-view.tsx +261 -0
  447. package/src/components/features/devices/devices-table-columns.tsx +356 -0
  448. package/src/components/features/devices/devices-view-config.tsx +38 -0
  449. package/src/components/features/devices/index.ts +89 -0
  450. package/src/components/features/devices/types.ts +74 -0
  451. package/src/components/features/devices/use-tag-filter-modal.ts +109 -0
  452. package/src/components/features/index.ts +9 -0
  453. package/src/components/features/knowledge-base/index.ts +19 -0
  454. package/src/components/features/knowledge-base/knowledge-base-article-view.tsx +134 -0
  455. package/src/components/features/knowledge-base/knowledge-base-item-icon.ts +14 -0
  456. package/src/components/features/knowledge-base/knowledge-base-status.ts +12 -0
  457. package/src/components/features/knowledge-base/knowledge-base-table.tsx +180 -0
  458. package/src/components/features/logs/index.ts +20 -0
  459. package/src/components/features/logs/log-drawer.tsx +138 -0
  460. package/src/components/features/logs/log-source-labels.ts +25 -0
  461. package/src/components/features/logs/logs-page-view.tsx +100 -0
  462. package/src/components/features/logs/logs-table-columns.ts +16 -0
  463. package/src/components/features/logs/logs-table-view.tsx +509 -0
  464. package/src/components/features/logs/types.ts +71 -0
  465. package/src/components/features/policies/compute-policy-summary.ts +115 -0
  466. package/src/components/features/policies/index.ts +14 -0
  467. package/src/components/features/policies/policies-table.tsx +235 -0
  468. package/src/components/features/policies/policy-summary-cards.tsx +69 -0
  469. package/src/components/features/policies/policy-table-row.ts +37 -0
  470. package/src/components/features/remote-session/index.ts +8 -0
  471. package/src/components/features/remote-session/remote-desktop-chat-message-row.tsx +56 -0
  472. package/src/components/features/remote-session/remote-desktop-chat-panel.tsx +102 -0
  473. package/src/components/features/remote-session/remote-desktop-fullscreen-toolbar.tsx +119 -0
  474. package/src/components/features/remote-session/remote-desktop-view.tsx +209 -0
  475. package/src/components/features/software/index.ts +39 -0
  476. package/src/components/features/software/package-managers.ts +54 -0
  477. package/src/components/features/software/package-search-field-placeholder.tsx +23 -0
  478. package/src/components/features/software/schedule-fields.tsx +105 -0
  479. package/src/components/features/software/software-action-copy.ts +70 -0
  480. package/src/components/features/software/software-action-form.tsx +199 -0
  481. package/src/components/features/software/software-row-fields.tsx +105 -0
  482. package/src/components/features/software/software-row.ts +22 -0
  483. package/src/components/features/sortable-list/index.ts +1 -0
  484. package/src/components/features/sortable-list/sortable-drag-handle.tsx +41 -0
  485. package/src/components/layout/page-heading.tsx +23 -6
  486. package/src/components/navigation/index.ts +5 -0
  487. package/src/components/navigation/mingo-ai-button.tsx +37 -13
  488. package/src/components/navigation/sticky-section-nav.tsx +99 -1
  489. package/src/components/product-demo/cast.tsx +78 -0
  490. package/src/components/product-demo/fixtures/cloud-tenants.ts +63 -0
  491. package/src/components/product-demo/fixtures/devices.ts +87 -0
  492. package/src/components/product-demo/fixtures/knowledge.ts +48 -0
  493. package/src/components/product-demo/fixtures/logs.ts +103 -0
  494. package/src/components/product-demo/fixtures/policies.ts +77 -0
  495. package/src/components/product-demo/fixtures/remote-session.ts +65 -0
  496. package/src/components/product-demo/fixtures/shared.ts +53 -0
  497. package/src/components/product-demo/fixtures/software-update.ts +63 -0
  498. package/src/components/product-demo/fixtures/tickets-board.ts +100 -0
  499. package/src/components/product-demo/index.ts +7 -0
  500. package/src/components/product-demo/product-screen.tsx +94 -0
  501. package/src/components/product-demo/registry.ts +20 -0
  502. package/src/components/product-demo/screen-keys.ts +31 -0
  503. package/src/components/product-demo/screens/cloud-tenants.tsx +23 -0
  504. package/src/components/product-demo/screens/devices.tsx +41 -0
  505. package/src/components/product-demo/screens/knowledge.tsx +27 -0
  506. package/src/components/product-demo/screens/logs.tsx +113 -0
  507. package/src/components/product-demo/screens/policies.tsx +29 -0
  508. package/src/components/product-demo/screens/remote-desktop-picture.tsx +118 -0
  509. package/src/components/product-demo/screens/remote-session.tsx +46 -0
  510. package/src/components/product-demo/screens/software-update.tsx +97 -0
  511. package/src/components/product-demo/screens/tickets-board.tsx +28 -0
  512. package/src/components/product-demo/types.ts +10 -0
  513. package/src/components/ui/index.ts +1 -0
  514. package/src/components/ui/product-screen-frame.tsx +136 -0
  515. package/src/components/ui/radio-group.tsx +16 -4
  516. package/src/components/ui/snap-carousel.tsx +26 -1
  517. package/src/components/ui/tag.tsx +5 -0
  518. package/src/hooks/ui/index.ts +1 -0
  519. package/src/hooks/ui/use-header-height.ts +51 -2
  520. package/src/hooks/ui/use-sticky-toolbar.ts +60 -0
  521. package/src/hooks/use-location-hash.ts +9 -5
  522. package/src/hooks/use-scroll-to-hash.ts +9 -1
  523. package/src/types/case-study.ts +21 -1
  524. package/src/utils/date-utils.ts +8 -1
  525. package/src/utils/index.ts +5 -0
  526. package/src/utils/open-in-new-tab.ts +12 -0
  527. package/src/utils/same-page-hash-nav.ts +57 -0
  528. package/src/utils/scroll-into-view.ts +21 -5
  529. package/dist/chunk-BM5MVGH3.cjs +0 -499
  530. package/dist/chunk-CUME3VTQ.js +0 -144
  531. package/dist/chunk-CZ7Y7UG4.js +0 -732
  532. package/dist/chunk-FLKJYMVB.js +0 -499
  533. package/dist/chunk-OF6GEI5A.cjs +0 -144
  534. package/dist/chunk-UVTD52MD.cjs +0 -732
@@ -0,0 +1,199 @@
1
+ 'use client';
2
+
3
+ import { type ReactNode, useState } from 'react';
4
+ import { PlusCircleIcon } from '../../icons-v2-generated';
5
+ import { Button, type PageActionButton, PageLayout, RadioGroupBlock } from '../../ui';
6
+ import { PACKAGE_MANAGER_OS } from './package-managers';
7
+ import { SoftwareScheduleFields, type SoftwareScheduleTiming } from './schedule-fields';
8
+ import { SOFTWARE_ACTION_COPY, type SoftwareActionKind } from './software-action-copy';
9
+ import { newSoftwareRow, type SoftwareRow } from './software-row';
10
+ import { type PackageSearchSlotProps, SoftwareRowFields } from './software-row-fields';
11
+
12
+ /** Run the packages now, or at a scheduled start. */
13
+ export type SoftwareRunMode = 'now' | 'schedule';
14
+
15
+ /** Everything the form holds: the packages and when they run. The devices are the host's. */
16
+ export interface SoftwareActionFormValues<TRef extends string = string> {
17
+ rows: SoftwareRow[];
18
+ mode: SoftwareRunMode;
19
+ date: Date | null;
20
+ time: string;
21
+ timeReference: TRef;
22
+ }
23
+
24
+ /** What the device picker slot is told: which devices the chosen packages can run on. */
25
+ export interface SoftwareDeviceScope {
26
+ /** The OS of every chosen catalog, sorted, e.g. `['MAC_OS', 'WINDOWS']`. */
27
+ osTypes: string[];
28
+ /**
29
+ * The same list as one string. It changes exactly when the candidate devices
30
+ * do, so it is the key to remount a picker by.
31
+ */
32
+ osTypesKey: string;
33
+ }
34
+
35
+ export interface SoftwareActionFormProps<TRef extends string = string> {
36
+ action: SoftwareActionKind;
37
+ /** "Back" over the title and the phone's "Cancel"; left out, the form shows neither (a picture of the form). */
38
+ onBack?: () => void;
39
+ /**
40
+ * Render the page header (the title, "Back" and the primary button). Default
41
+ * true; a host that shows the form under a heading of its own passes false.
42
+ */
43
+ showHeader?: boolean;
44
+ /** The header's primary button: run now or schedule, by the chosen mode. */
45
+ onSubmit: (values: SoftwareActionFormValues<TRef>) => void;
46
+ submitDisabled?: boolean;
47
+ submitting?: boolean;
48
+ /** How a schedule's start is read. */
49
+ timing: SoftwareScheduleTiming<TRef>;
50
+ /** What the form opens with. `timeReference` is required: the form cannot guess the host's default. */
51
+ initialValues: Partial<SoftwareActionFormValues<TRef>> & { timeReference: TRef };
52
+ /** The "Software Name" field of each row. */
53
+ renderPackageSearch: (field: PackageSearchSlotProps) => ReactNode;
54
+ /** "Device Selection": the host's picker for the given scope. */
55
+ renderDevicePicker: (scope: SoftwareDeviceScope) => ReactNode;
56
+ /** Offer "Add Software" (several packages in one run). Default true; false is a one-package form. */
57
+ addRows?: boolean;
58
+ /**
59
+ * `stacked` (default): the run choice, then the schedule's fields under it.
60
+ * `inline`: on a wide form the two choices sit side by side with the
61
+ * schedule's fields on the same row, so the devices start higher.
62
+ */
63
+ runModeLayout?: 'stacked' | 'inline';
64
+ /** The "Device Selection" heading over the picker. Default true; a host that titles the picker itself passes false. */
65
+ showDeviceHeading?: boolean;
66
+ className?: string;
67
+ }
68
+
69
+ const INITIAL_ROWS = (): SoftwareRow[] => [newSoftwareRow('row-0')];
70
+
71
+ /**
72
+ * Install Software (design 591:8524) and Update Software (409:48080 / 409:48175):
73
+ * which catalog packages, now or on a schedule, on which devices. One form for
74
+ * both flows.
75
+ *
76
+ * The packages and the timing are form state; the devices are not. Searching a
77
+ * catalog and picking devices are the host's queries, so both are slots: the
78
+ * product passes its data-bound field and picker, a fixture passes static ones.
79
+ */
80
+ export function SoftwareActionForm<TRef extends string = string>({
81
+ action,
82
+ onBack,
83
+ showHeader = true,
84
+ onSubmit,
85
+ submitDisabled = false,
86
+ submitting = false,
87
+ timing,
88
+ initialValues,
89
+ renderPackageSearch,
90
+ renderDevicePicker,
91
+ addRows = true,
92
+ runModeLayout = 'stacked',
93
+ showDeviceHeading = true,
94
+ className = 'px-[var(--spacing-system-l)] pb-[var(--spacing-system-l)]',
95
+ }: SoftwareActionFormProps<TRef>) {
96
+ const copy = SOFTWARE_ACTION_COPY[action];
97
+
98
+ const [rows, setRows] = useState<SoftwareRow[]>(() => initialValues.rows ?? INITIAL_ROWS());
99
+ const [mode, setMode] = useState<SoftwareRunMode>(initialValues.mode ?? 'now');
100
+ const [date, setDate] = useState<Date | null>(initialValues.date ?? null);
101
+ const [time, setTime] = useState(initialValues.time ?? '');
102
+ const [timeReference, setTimeReference] = useState<TRef>(initialValues.timeReference);
103
+
104
+ // The picker's frame: devices on the OS the chosen packages install on.
105
+ const osTypesKey = [...new Set(rows.map(row => PACKAGE_MANAGER_OS[row.packageManager]))].sort().join(',');
106
+
107
+ const actions: PageActionButton[] = [
108
+ ...(onBack ? [{ label: 'Cancel', onClick: onBack, variant: 'outline' as const, showOnlyMobile: true }] : []),
109
+ {
110
+ label: mode === 'now' ? copy.runLabel : copy.scheduleLabel,
111
+ variant: 'accent',
112
+ onClick: () => onSubmit({ rows, mode, date, time, timeReference }),
113
+ disabled: submitDisabled,
114
+ loading: submitting,
115
+ },
116
+ ];
117
+
118
+ const updateRow = (next: SoftwareRow) => setRows(current => current.map(row => (row.key === next.key ? next : row)));
119
+ const removeRow = (key: string) => setRows(current => current.filter(row => row.key !== key));
120
+ const addRow = () => setRows(current => [...current, newSoftwareRow(crypto.randomUUID())]);
121
+
122
+ const inline = runModeLayout === 'inline';
123
+ const runModeField = (
124
+ <RadioGroupBlock
125
+ name="runMode"
126
+ variant="grouped"
127
+ orientation={inline ? 'horizontal' : 'vertical'}
128
+ value={mode}
129
+ onValueChange={value => setMode(value as SoftwareRunMode)}
130
+ options={copy.modes}
131
+ itemClassName="py-[var(--spacing-system-sf)]"
132
+ />
133
+ );
134
+ const scheduleFields = mode === 'schedule' && (
135
+ <SoftwareScheduleFields
136
+ date={date}
137
+ time={time}
138
+ timeReference={timeReference}
139
+ timing={timing}
140
+ onDateChange={setDate}
141
+ onTimeChange={setTime}
142
+ onTimeReferenceChange={setTimeReference}
143
+ columns={inline ? 'fill' : 'page'}
144
+ />
145
+ );
146
+
147
+ return (
148
+ <PageLayout
149
+ title={copy.formTitle}
150
+ backButton={onBack ? { label: 'Back', onClick: onBack } : undefined}
151
+ actions={actions}
152
+ actionsVariant="primary-buttons"
153
+ showHeader={showHeader}
154
+ className={className}
155
+ >
156
+ {rows.map(row => (
157
+ <SoftwareRowFields
158
+ key={row.key}
159
+ row={row}
160
+ removable={rows.length > 1}
161
+ onChange={updateRow}
162
+ onRemove={() => removeRow(row.key)}
163
+ renderPackageSearch={renderPackageSearch}
164
+ />
165
+ ))}
166
+
167
+ {addRows && (
168
+ <Button
169
+ type="button"
170
+ variant="outline"
171
+ size="small"
172
+ className="self-start"
173
+ onClick={addRow}
174
+ leftIcon={<PlusCircleIcon size={24} className="text-ods-text-secondary" />}
175
+ >
176
+ Add Software
177
+ </Button>
178
+ )}
179
+
180
+ {inline ? (
181
+ <div className="flex flex-col gap-[var(--spacing-system-l)] content-lg:flex-row content-lg:items-end">
182
+ <div className="min-w-0 content-lg:flex-1">{runModeField}</div>
183
+ {scheduleFields && <div className="min-w-0 content-lg:flex-1">{scheduleFields}</div>}
184
+ </div>
185
+ ) : (
186
+ <>
187
+ {runModeField}
188
+ {scheduleFields}
189
+ </>
190
+ )}
191
+
192
+ {showDeviceHeading && (
193
+ <h2 className="pt-[var(--spacing-system-l)] text-ods-text-primary text-h2">Device Selection</h2>
194
+ )}
195
+
196
+ {renderDevicePicker({ osTypes: osTypesKey.split(','), osTypesKey })}
197
+ </PageLayout>
198
+ );
199
+ }
@@ -0,0 +1,105 @@
1
+ 'use client';
2
+
3
+ import type { ReactNode } from 'react';
4
+ import { TrashIcon } from '../../icons-v2-generated';
5
+ import { Button, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, TruncateText } from '../../ui';
6
+ import {
7
+ PACKAGE_MANAGER_ICON,
8
+ PACKAGE_MANAGER_LABEL,
9
+ PACKAGE_MANAGERS,
10
+ type SupportedPackageManager,
11
+ } from './package-managers';
12
+ import type { SelectedPackage, SoftwareRow } from './software-row';
13
+
14
+ /** What the "Software Name" slot is handed: one catalog, the picked package and its writer. */
15
+ export interface PackageSearchSlotProps {
16
+ packageManager: SupportedPackageManager;
17
+ value: SelectedPackage | null;
18
+ onChange: (pkg: SelectedPackage | null) => void;
19
+ }
20
+
21
+ export interface SoftwareRowFieldsProps {
22
+ row: SoftwareRow;
23
+ removable: boolean;
24
+ onChange: (row: SoftwareRow) => void;
25
+ onRemove: () => void;
26
+ /**
27
+ * The "Software Name" field. A slot, because searching a catalog is the
28
+ * host's query: the product passes its data-bound picker, a fixture a static one.
29
+ */
30
+ renderPackageSearch: (field: PackageSearchSlotProps) => ReactNode;
31
+ }
32
+
33
+ /** A value over its label; a missing value draws the muted empty mark. */
34
+ function InfoCell({ value, label }: { value: string | null | undefined; label: string }) {
35
+ return (
36
+ <div className="flex min-w-0 flex-1 flex-col justify-center">
37
+ <div className="flex min-w-0 items-center gap-[var(--spacing-system-xxs)]">
38
+ {value ? (
39
+ <div className="min-w-0 flex-1">
40
+ <TruncateText>{value}</TruncateText>
41
+ </div>
42
+ ) : (
43
+ <div className="min-w-0 flex-1 text-h4">
44
+ <span className="text-ods-text-secondary">—</span>
45
+ </div>
46
+ )}
47
+ </div>
48
+ <p className="truncate text-ods-text-secondary text-h6">{label}</p>
49
+ </div>
50
+ );
51
+ }
52
+
53
+ /** One package to install or update: its manager, the package, and what the catalog says about it. */
54
+ export function SoftwareRowFields({ row, removable, onChange, onRemove, renderPackageSearch }: SoftwareRowFieldsProps) {
55
+ return (
56
+ <div className="flex flex-col gap-[var(--spacing-system-l)] rounded-md border border-ods-border bg-ods-bg p-[var(--spacing-system-l)] content-lg:flex-row content-lg:items-end">
57
+ <div className="min-w-0 flex-1">
58
+ <Select
59
+ value={row.packageManager}
60
+ onValueChange={value => onChange({ ...row, packageManager: value as SupportedPackageManager, pkg: null })}
61
+ >
62
+ <SelectTrigger label="Package Manager" labelVariant="large">
63
+ <SelectValue />
64
+ </SelectTrigger>
65
+ <SelectContent>
66
+ {PACKAGE_MANAGERS.map(manager => {
67
+ const Icon = PACKAGE_MANAGER_ICON[manager];
68
+ return (
69
+ <SelectItem key={manager} value={manager}>
70
+ <span className="flex items-center gap-[var(--spacing-system-xsf)]">
71
+ <Icon size={20} className="shrink-0 text-ods-text-secondary" />
72
+ {PACKAGE_MANAGER_LABEL[manager]}
73
+ </span>
74
+ </SelectItem>
75
+ );
76
+ })}
77
+ </SelectContent>
78
+ </Select>
79
+ </div>
80
+
81
+ <div className="min-w-0 flex-1">
82
+ {renderPackageSearch({
83
+ packageManager: row.packageManager,
84
+ value: row.pkg,
85
+ onChange: pkg => onChange({ ...row, pkg }),
86
+ })}
87
+ </div>
88
+
89
+ <InfoCell value={row.pkg?.description} label="Description" />
90
+
91
+ <div className="flex min-w-0 flex-1 items-end gap-[var(--spacing-system-lf)]">
92
+ <InfoCell value={row.pkg?.version} label="Current Version" />
93
+ <Button
94
+ type="button"
95
+ variant="outline"
96
+ size="icon"
97
+ aria-label="Remove software"
98
+ onClick={onRemove}
99
+ disabled={!removable}
100
+ leftIcon={<TrashIcon size={24} className="text-ods-error" />}
101
+ />
102
+ </div>
103
+ </div>
104
+ );
105
+ }
@@ -0,0 +1,22 @@
1
+ import type { SupportedPackageManager } from './package-managers';
2
+
3
+ /** A catalog package the user picked, kept whole so the row can show its description and version. */
4
+ export interface SelectedPackage {
5
+ id: string;
6
+ name: string;
7
+ description: string | null;
8
+ version: string | null;
9
+ /** Homebrew only: a formula and a cask can share a name. */
10
+ packageType: 'FORMULA' | 'CASK' | null;
11
+ }
12
+
13
+ /** One "Package Manager + Software Name" row of the form. */
14
+ export interface SoftwareRow {
15
+ key: string;
16
+ packageManager: SupportedPackageManager;
17
+ pkg: SelectedPackage | null;
18
+ }
19
+
20
+ export function newSoftwareRow(key: string): SoftwareRow {
21
+ return { key, packageManager: 'BREW', pkg: null };
22
+ }
@@ -1,4 +1,5 @@
1
1
  export { SLOT_STICKINESS } from './slot-geometry';
2
+ export { SortableDragHandle, type SortableGripProps } from './sortable-drag-handle';
2
3
  export { SortableList, type SortableListProps } from './sortable-list';
3
4
  export { SortableMoveButtons, type SortableMoveButtonsProps } from './sortable-move-buttons';
4
5
  export { type SortableDragHandleProps, type SortableItem, useSortableItem } from './use-sortable-item';
@@ -0,0 +1,41 @@
1
+ 'use client';
2
+
3
+ import { cn } from '../../../utils/cn';
4
+ import { DraggerIcon } from '../../icons-v2-generated/interface/dragger-icon';
5
+ import { Button } from '../../ui/button';
6
+ import type { SortableDragHandleProps as DragHandleBindings } from './use-sortable-item';
7
+
8
+ export interface SortableGripProps {
9
+ /** `useSortableItem().dragHandleProps` of the row this grip belongs to. */
10
+ handleProps: DragHandleBindings;
11
+ /** Names the row for assistive tech ("Drag Billing to reorder"). */
12
+ label?: string;
13
+ className?: string;
14
+ }
15
+
16
+ /**
17
+ * THE grip of a {@link SortableList} row: the lib `Button`, so every sortable
18
+ * list has the same handle (size, focus ring, keyboard: Arrow Up / Arrow Down
19
+ * move the row). Render it while `dragAndDropEnabled` is true and
20
+ * `SortableMoveButtons` otherwise:
21
+ *
22
+ * ```tsx
23
+ * const { itemRef, dragHandleProps, dragAndDropEnabled } = useSortableItem();
24
+ * {dragAndDropEnabled ? <SortableDragHandle handleProps={dragHandleProps} /> : <SortableMoveButtons … />}
25
+ * ```
26
+ */
27
+ export function SortableDragHandle({ handleProps, label, className }: SortableGripProps) {
28
+ return (
29
+ <Button
30
+ type="button"
31
+ variant="transparent"
32
+ size="icon-sm"
33
+ aria-label={label ? `Drag ${label} to reorder` : 'Drag to reorder'}
34
+ // Spread whole, as `useSortableItem` asks: the grip's ref and its arrow keys.
35
+ {...handleProps}
36
+ // `touch-none`: the browser must not take the gesture for a scroll.
37
+ className={cn('shrink-0 cursor-grab touch-none text-ods-text-secondary hover:text-ods-text-primary', className)}
38
+ leftIcon={<DraggerIcon />}
39
+ />
40
+ );
41
+ }
@@ -72,13 +72,23 @@ export function PageHeading({
72
72
  const SENTENCE_MARK = /([.:?!]+)(?=\s|$)/g;
73
73
  const ONLY_MARKS = /^\s*[.:?!]+\s*$/;
74
74
 
75
+ /**
76
+ * Which of a brand's two colours a heading's eyebrow and marks take: its accent
77
+ * (the default) or its secondary colour (`PLATFORM_BRAND`'s `secondaryStem`:
78
+ * OpenFrame's marketing pages are cyan there, its product screens yellow).
79
+ * `secondary` needs a named `platform`.
80
+ */
81
+ export type HeadingAccentTone = 'accent' | 'secondary';
82
+
75
83
  /**
76
84
  * The accent a heading's marks take, as an ODS class: a named platform's brand
77
85
  * accent (`getPlatformBrandClasses`, the one platform → token table), else the
78
86
  * accent of the platform the page runs on (`text-ods-accent`).
79
87
  */
80
- export function headingAccentClass(platform?: string | null): string {
81
- return platform ? getPlatformBrandClasses(platform).accentText : 'text-ods-accent';
88
+ export function headingAccentClass(platform?: string | null, tone: HeadingAccentTone = 'accent'): string {
89
+ if (!platform) return 'text-ods-accent';
90
+ const classes = getPlatformBrandClasses(platform);
91
+ return tone === 'secondary' ? classes.secondaryText : classes.accentText;
82
92
  }
83
93
 
84
94
  /**
@@ -92,8 +102,12 @@ export function headingAccentClass(platform?: string | null): string {
92
102
  * its own colour for its letters). A mark inside a number or a version
93
103
  * (`$6.7M`, `v1.5.0`) is not a sentence mark and is left alone.
94
104
  */
95
- export function accentSentenceMarks(node: ReactNode, platform?: string | null): ReactNode {
96
- return accentMarks(node, headingAccentClass(platform));
105
+ export function accentSentenceMarks(
106
+ node: ReactNode,
107
+ platform?: string | null,
108
+ tone: HeadingAccentTone = 'accent',
109
+ ): ReactNode {
110
+ return accentMarks(node, headingAccentClass(platform, tone));
97
111
  }
98
112
 
99
113
  function accentMarks(node: ReactNode, accentClassName: string): ReactNode {
@@ -157,6 +171,8 @@ export interface SectionHeadingProps {
157
171
  * that shows ANOTHER product. Omitted: the platform the page runs on.
158
172
  */
159
173
  platform?: string | null;
174
+ /** Which of `platform`'s colours: its accent (default) or its secondary colour. */
175
+ tone?: HeadingAccentTone;
160
176
  /** Extra classes on the outer row. */
161
177
  className?: string;
162
178
  }
@@ -175,16 +191,17 @@ export function SectionHeading({
175
191
  action,
176
192
  level = 'section',
177
193
  platform,
194
+ tone = 'accent',
178
195
  className,
179
196
  }: SectionHeadingProps) {
180
- const accentClassName = headingAccentClass(platform);
197
+ const accentClassName = headingAccentClass(platform, tone);
181
198
  const layout = SECTION_HEADING_LAYOUT[level];
182
199
  const Tag = level === 'page' ? 'h1' : 'h2';
183
200
  const stack = (
184
201
  <div className={layout.stack}>
185
202
  {eyebrow ? <span className={`text-h5 ${accentClassName}`}>{eyebrow}</span> : null}
186
203
  <Tag className={layout.heading}>
187
- {accentSentenceMarks(title, platform)}
204
+ {accentSentenceMarks(title, platform, tone)}
188
205
  {punctuation ? <span className={accentClassName}>{punctuation}</span> : null}
189
206
  </Tag>
190
207
  {intro ? <div className={layout.intro}>{intro}</div> : null}
@@ -9,6 +9,7 @@ export { NavPanel, isMegaMenu } from './nav-panel';
9
9
  export type { NavPanelProps } from './nav-panel';
10
10
  export { NavItemRow } from './nav-item-row';
11
11
  export type { NavItemRowProps, NavItemRowVariant } from './nav-item-row';
12
+ export type { AskAiOpenDetail } from './mingo-ai-button';
12
13
  export { ASK_AI_OPEN_EVENT, MingoAiButton, openAskAi } from './mingo-ai-button';
13
14
  export type { MingoAiButtonProps } from './mingo-ai-button';
14
15
  export { MobileNavSheet, MOBILE_NAV_SHEET_ID, siteNavHasMobileMenus } from './mobile-nav-sheet';
@@ -23,6 +24,10 @@ export type { SlidingSidebarProps } from './sliding-sidebar';
23
24
 
24
25
  export { StickySectionNav, useSectionNavigation } from './sticky-section-nav';
25
26
  export type { StickyNavSection } from './sticky-section-nav';
27
+ // The scroll spy behind a section nav that keeps the URL on the section being
28
+ // read (`syncHash`, two levels of anchors): the docs and trust-center spy.
29
+ export { useScrollSpy } from '../docs/use-scroll-spy';
30
+ export type { UseScrollSpyOptions } from '../docs/use-scroll-spy';
26
31
 
27
32
  export { NAVIGATION_SIDEBAR_WIDTH_VAR, NavigationSidebar } from './navigation-sidebar';
28
33
  export type { NavigationSidebarProps } from './navigation-sidebar';
@@ -23,10 +23,13 @@ export interface MingoAiButtonProps extends React.ButtonHTMLAttributes<HTMLButto
23
23
  * key cap beside the label. Default false. */
24
24
  shortcutHint?: boolean;
25
25
  /** `inline` (default): the header launcher, the height and type of the menu
26
- * items beside it. `field`: the full-width row that opens the mobile menu
27
- * (the name reads as the field's prompt). ONE component, so every Mingo
28
- * launcher carries the same identity, ring and event. */
29
- variant?: 'inline' | 'field';
26
+ * items beside it; its name collapses with the menus below `lg`. `button`:
27
+ * the same launcher inside a page (a card, the head of a row of questions):
28
+ * the name and the key cap always show. `field`: the full-width row that
29
+ * opens the mobile menu (the name reads as the field's prompt). ONE
30
+ * component, so every Mingo launcher carries the same identity, ring and
31
+ * event. */
32
+ variant?: 'inline' | 'button' | 'field';
30
33
  }
31
34
 
32
35
  const MINGO_ACCENT = 'var(--ods-flamingo-cyan-base)';
@@ -34,18 +37,29 @@ const MINGO_ACCENT = 'var(--ods-flamingo-cyan-base)';
34
37
  /** The event the mounted chat panel (`EmbeddableChat`) opens on. */
35
38
  export const ASK_AI_OPEN_EVENT = 'ask-ai:open';
36
39
 
40
+ /** What an `ask-ai:open` event carries. */
41
+ export interface AskAiOpenDetail {
42
+ source: string;
43
+ /** A question to send as soon as the chat is open. Absent: the chat only opens. */
44
+ prompt?: string;
45
+ }
46
+
37
47
  /**
38
- * Open the chat of `source`. Coalesced to '' so a source-less call still
39
- * matches the panel's own `runtime.source ?? ''` comparison (undefined !== ''
40
- * would make the panel silently ignore the event).
48
+ * Open the chat of `source`, and with `prompt` ask it that question once.
49
+ * `source` is coalesced to '' so a source-less call still matches the panel's
50
+ * own `runtime.source ?? ''` comparison (undefined !== '' would make the panel
51
+ * silently ignore the event).
41
52
  */
42
- export function openAskAi(source?: string): void {
43
- window.dispatchEvent(new CustomEvent(ASK_AI_OPEN_EVENT, { detail: { source: source ?? '' } }));
53
+ export function openAskAi(source?: string, options?: { prompt?: string }): void {
54
+ const prompt = options?.prompt?.trim();
55
+ const detail: AskAiOpenDetail = prompt ? { source: source ?? '', prompt } : { source: source ?? '' };
56
+ window.dispatchEvent(new CustomEvent<AskAiOpenDetail>(ASK_AI_OPEN_EVENT, { detail }));
44
57
  }
45
58
 
46
59
  /**
47
- * THE Mingo AI launcher, in the site header's right cluster and at the top of
48
- * the mobile menu (`variant="field"`): the round identity glyph, the
60
+ * THE Mingo AI launcher, in the site header's right cluster, inside a page
61
+ * (`variant="button"`: the FAQ's ask card, the head of a row of questions) and
62
+ * at the top of the mobile menu (`variant="field"`): the round identity glyph, the
49
63
  * assistant's name and an optional shortcut hint, sized like the menu items
50
64
  * beside it. Stateless: clicking dispatches an `ask-ai:open`
51
65
  * CustomEvent (source-filtered) that the mounted `EmbeddableChat` panel
@@ -75,6 +89,8 @@ export function MingoAiButton({
75
89
  // Known after hydration only: until then the hint keeps its space, empty.
76
90
  const visitor = useVisitorOs();
77
91
  const field = variant === 'field';
92
+ // In a page nothing collapses: there is no menu beside it to make room for.
93
+ const inPage = variant === 'button';
78
94
 
79
95
  const commandKey = visitor.known && usesCommandKey(visitor.os);
80
96
 
@@ -162,7 +178,10 @@ export function MingoAiButton({
162
178
  {/* In the header the name collapses below lg, with the menus: on a phone
163
179
  the launcher is its glyph alone (the name stays the accessible name). */}
164
180
  <span
165
- className={cn('relative whitespace-nowrap', field ? 'min-w-0 flex-1 truncate' : 'hidden text-h6 lg:inline')}
181
+ className={cn(
182
+ 'relative whitespace-nowrap',
183
+ field ? 'min-w-0 flex-1 truncate' : inPage ? 'text-h6' : 'hidden text-h6 lg:inline',
184
+ )}
166
185
  >
167
186
  {label}
168
187
  </span>
@@ -170,7 +189,12 @@ export function MingoAiButton({
170
189
  // A key cap in the label's own type (never smaller: a hint nobody can
171
190
  // read is decoration) and the label's colour, which clears 4.5:1 on
172
191
  // the bar. It keeps its width before the platform is known.
173
- <kbd className="relative hidden h-6 min-w-9 items-center justify-center rounded border border-ods-border px-[var(--spacing-system-xxs)] text-h6 lg:inline-flex">
192
+ <kbd
193
+ className={cn(
194
+ 'relative h-6 min-w-9 items-center justify-center rounded border border-ods-border px-[var(--spacing-system-xxs)] text-h6',
195
+ inPage ? 'inline-flex' : 'hidden lg:inline-flex',
196
+ )}
197
+ >
174
198
  {visitor.known ? shortcutLabel(visitor.os, 'K') : ''}
175
199
  </kbd>
176
200
  )}