@flamingo-stack/openframe-frontend-core 0.0.711 → 0.0.713

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (528) 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-VWFZRMQR.js → chunk-3BB3IEJI.js} +13 -7
  6. package/dist/chunk-3K5ZLZE7.js +292 -0
  7. package/dist/chunk-3LU4UFPS.cjs +14 -0
  8. package/dist/{chunk-G47AP6LX.cjs → chunk-3QGUDPIH.cjs} +35 -33
  9. package/dist/{chunk-3UNL26CD.cjs → chunk-3RKBJT6K.cjs} +8 -6
  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-VMMHJFHG.js → chunk-6F4QOCGB.js} +10 -8
  14. package/dist/{chunk-Q6B35Y7O.js → chunk-6MNAIQNR.js} +22 -113
  15. package/dist/{chunk-KUC673HM.js → chunk-6T3BTD6Q.js} +204 -982
  16. package/dist/{chunk-F57ECE2I.js → chunk-6YPTUHM7.js} +4 -4
  17. package/dist/chunk-AAYNCJMW.cjs +48 -0
  18. package/dist/{chunk-FXJ3WWUB.js → chunk-ADBE7QF3.js} +5 -252
  19. package/dist/chunk-AECTRMGQ.cjs +334 -0
  20. package/dist/chunk-AGVXKD4K.js +334 -0
  21. package/dist/chunk-AL2GUHAJ.cjs +18 -0
  22. package/dist/{chunk-WMX26HB5.js → chunk-APJZBDQN.js} +12 -12
  23. package/dist/chunk-AUMKE74M.cjs +16 -0
  24. package/dist/chunk-B4NCVYEQ.cjs +292 -0
  25. package/dist/{chunk-WJUIXU6Y.js → chunk-CGHOH3GN.js} +28 -22
  26. package/dist/chunk-CMGFZHCN.js +233 -0
  27. package/dist/chunk-CMZ3QTFQ.js +1207 -0
  28. package/dist/chunk-CPA2CKRZ.cjs +125 -0
  29. package/dist/chunk-CYUUHFXL.js +41 -0
  30. package/dist/chunk-DC4RTYWK.cjs +1122 -0
  31. package/dist/{chunk-NF7GNGYG.js → chunk-DDWFCWOE.js} +5 -7
  32. package/dist/{chunk-QA6TROME.cjs → chunk-EOKSKJSS.cjs} +25 -83
  33. package/dist/{chunk-6NTPY5QA.cjs → chunk-ETYLOZOB.cjs} +978 -2413
  34. package/dist/{chunk-6AMIRXKM.cjs → chunk-F2EACDOR.cjs} +93 -87
  35. package/dist/chunk-F5BPGWGT.cjs +931 -0
  36. package/dist/chunk-FFT56TYB.cjs +401 -0
  37. package/dist/chunk-FYEJTF5Y.js +125 -0
  38. package/dist/chunk-G3GRYDMS.js +16 -0
  39. package/dist/chunk-G6OHIX5C.cjs +100 -0
  40. package/dist/{chunk-UDFRUKLC.cjs → chunk-GEDY7HQI.cjs} +2 -2
  41. package/dist/chunk-GQ7JJUIT.cjs +1207 -0
  42. package/dist/chunk-H3PKYE4N.js +18 -0
  43. package/dist/{chunk-EQWD4IJE.js → chunk-H4J72PRA.js} +74 -46
  44. package/dist/{chunk-AGDVEUVL.js → chunk-H5R7U2D2.js} +206 -5
  45. package/dist/{chunk-7AM6C6XH.cjs → chunk-HETQETPV.cjs} +9641 -9678
  46. package/dist/{chunk-Y2GSOUCS.cjs → chunk-HWVUR735.cjs} +2 -2
  47. package/dist/chunk-II4QMH26.cjs +35 -0
  48. package/dist/{chunk-XWEBHS7O.cjs → chunk-IJKMILMG.cjs} +82 -54
  49. package/dist/chunk-ILNN6QRW.js +1612 -0
  50. package/dist/{chunk-6GLQLTJI.js → chunk-IU4IO3CG.js} +35 -27
  51. package/dist/chunk-IYVFSLWJ.js +931 -0
  52. package/dist/{chunk-EX6GGCAC.cjs → chunk-J7YIQJPS.cjs} +15 -15
  53. package/dist/chunk-JHQ334WS.js +655 -0
  54. package/dist/{chunk-WCVZCGK5.cjs → chunk-JO5TLJPM.cjs} +129 -907
  55. package/dist/{chunk-PRX7HVLE.cjs → chunk-JVCAK4W3.cjs} +210 -9
  56. package/dist/chunk-KBJJQFYU.js +1122 -0
  57. package/dist/chunk-KEKCQENI.js +48 -0
  58. package/dist/{chunk-P6G3JZNC.cjs → chunk-KGAFUXGZ.cjs} +57 -148
  59. package/dist/chunk-KHXZFLIN.cjs +41 -0
  60. package/dist/{chunk-C4HRRB3V.cjs → chunk-KMB7JHGG.cjs} +23 -17
  61. package/dist/{chunk-K4PTDK34.js → chunk-KPUHSVJU.js} +322 -428
  62. package/dist/chunk-KT3U3ZRP.cjs +1137 -0
  63. package/dist/chunk-L2VUINHN.js +35 -0
  64. package/dist/{chunk-PLYEKV3N.cjs → chunk-MA4Q5RBP.cjs} +6 -6
  65. package/dist/chunk-NPAQSMRY.js +2087 -0
  66. package/dist/{chunk-IFWLJ66M.js → chunk-NQWJAOHO.js} +6 -4
  67. package/dist/{chunk-FYOKS5RI.cjs → chunk-OQKRXLTZ.cjs} +4719 -6351
  68. package/dist/chunk-P3JMAMHP.js +401 -0
  69. package/dist/{chunk-62KNLDXK.js → chunk-P6QCJXLD.js} +3 -3
  70. package/dist/chunk-PPXR22YC.cjs +2087 -0
  71. package/dist/chunk-PSVSEN4J.cjs +655 -0
  72. package/dist/{chunk-CDM7OSFB.cjs → chunk-QQQ46DFT.cjs} +125 -117
  73. package/dist/{chunk-FEMAJES4.cjs → chunk-QU4AHNRL.cjs} +41 -39
  74. package/dist/{chunk-2JTGK64G.js → chunk-RBVUIOIM.js} +12 -10
  75. package/dist/{chunk-SMAAV3HL.js → chunk-ROBQ5TR7.js} +10541 -10578
  76. package/dist/{chunk-TKZXHVBG.js → chunk-RRYNHAEL.js} +5 -5
  77. package/dist/{chunk-5HB7FLCV.js → chunk-STPC2AQU.js} +8338 -9970
  78. package/dist/{chunk-6K7QZDA6.cjs → chunk-TC4W7QDC.cjs} +8 -8
  79. package/dist/{chunk-FI6GMDO7.js → chunk-TTVOLEUS.js} +3605 -5040
  80. package/dist/{chunk-LM7TXMLU.cjs → chunk-ULWVKHSI.cjs} +8 -255
  81. package/dist/chunk-WANCBTUE.js +71 -0
  82. package/dist/{chunk-BIZNSF3U.cjs → chunk-WBNAEYTQ.cjs} +2 -51
  83. package/dist/chunk-WFPCCBOM.cjs +71 -0
  84. package/dist/chunk-WI6FHKD7.js +158 -0
  85. package/dist/chunk-WMNCVLES.js +100 -0
  86. package/dist/{chunk-UT4YHQZW.js → chunk-WSDT7LYL.js} +0 -49
  87. package/dist/chunk-WVOTC7HW.cjs +136 -0
  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-K6Y5NX6L.cjs → chunk-YIUSW4DB.cjs} +114 -220
  92. package/dist/{chunk-YD4LJZV4.cjs → chunk-ZX7SCPLO.cjs} +6 -8
  93. package/dist/cloud-tenants-HRJYNUJM.cjs +117 -0
  94. package/dist/cloud-tenants-SM7WLEGG.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/approval-level.d.ts +49 -0
  120. package/dist/components/features/approval-level.d.ts.map +1 -0
  121. package/dist/components/features/array-entry-manager.d.ts +5 -1
  122. package/dist/components/features/array-entry-manager.d.ts.map +1 -1
  123. package/dist/components/features/board/board.d.ts +2 -0
  124. package/dist/components/features/board/board.d.ts.map +1 -1
  125. package/dist/components/features/board/ticket-card.d.ts.map +1 -1
  126. package/dist/components/features/board/touch-board.d.ts +1 -1
  127. package/dist/components/features/board/touch-board.d.ts.map +1 -1
  128. package/dist/components/features/board/types.d.ts +3 -0
  129. package/dist/components/features/board/types.d.ts.map +1 -1
  130. package/dist/components/features/board/use-board-collapse.d.ts +6 -1
  131. package/dist/components/features/board/use-board-collapse.d.ts.map +1 -1
  132. package/dist/components/features/capability-explorer.d.ts +94 -0
  133. package/dist/components/features/capability-explorer.d.ts.map +1 -0
  134. package/dist/components/features/cloud-tenants/index.d.ts +14 -0
  135. package/dist/components/features/cloud-tenants/index.d.ts.map +1 -0
  136. package/dist/components/features/cloud-tenants/tenant-access-cell.d.ts +9 -0
  137. package/dist/components/features/cloud-tenants/tenant-access-cell.d.ts.map +1 -0
  138. package/dist/components/features/cloud-tenants/tenant-cell.d.ts +8 -0
  139. package/dist/components/features/cloud-tenants/tenant-cell.d.ts.map +1 -0
  140. package/dist/components/features/cloud-tenants/tenant-customer-cell.d.ts +9 -0
  141. package/dist/components/features/cloud-tenants/tenant-customer-cell.d.ts.map +1 -0
  142. package/dist/components/features/cloud-tenants/tenant-presentation.d.ts +42 -0
  143. package/dist/components/features/cloud-tenants/tenant-presentation.d.ts.map +1 -0
  144. package/dist/components/features/cloud-tenants/tenant-row.d.ts +22 -0
  145. package/dist/components/features/cloud-tenants/tenant-row.d.ts.map +1 -0
  146. package/dist/components/features/cloud-tenants/tenants-table-columns.d.ts +42 -0
  147. package/dist/components/features/cloud-tenants/tenants-table-columns.d.ts.map +1 -0
  148. package/dist/components/features/cloud-tenants/tenants-table-view.d.ts +26 -0
  149. package/dist/components/features/cloud-tenants/tenants-table-view.d.ts.map +1 -0
  150. package/dist/components/features/devices/device-last-online.d.ts +3 -0
  151. package/dist/components/features/devices/device-last-online.d.ts.map +1 -0
  152. package/dist/components/features/devices/device-name.d.ts +42 -0
  153. package/dist/components/features/devices/device-name.d.ts.map +1 -0
  154. package/dist/components/features/devices/device-selector/device-selection-mode-radio.d.ts +26 -0
  155. package/dist/components/features/devices/device-selector/device-selection-mode-radio.d.ts.map +1 -0
  156. package/dist/components/features/devices/device-selector/device-selector-skeleton.d.ts +25 -0
  157. package/dist/components/features/devices/device-selector/device-selector-skeleton.d.ts.map +1 -0
  158. package/dist/components/features/devices/device-selector/device-selector.d.ts +38 -0
  159. package/dist/components/features/devices/device-selector/device-selector.d.ts.map +1 -0
  160. package/dist/components/features/devices/device-selector/device-selector.types.d.ts +133 -0
  161. package/dist/components/features/devices/device-selector/device-selector.types.d.ts.map +1 -0
  162. package/dist/components/features/devices/device-selector/narrowing.d.ts +13 -0
  163. package/dist/components/features/devices/device-selector/narrowing.d.ts.map +1 -0
  164. package/dist/components/features/devices/device-selector/use-device-selector.d.ts +17 -0
  165. package/dist/components/features/devices/device-selector/use-device-selector.d.ts.map +1 -0
  166. package/dist/components/features/devices/device-status.d.ts +23 -0
  167. package/dist/components/features/devices/device-status.d.ts.map +1 -0
  168. package/dist/components/features/devices/device-statuses.d.ts +40 -0
  169. package/dist/components/features/devices/device-statuses.d.ts.map +1 -0
  170. package/dist/components/features/devices/device-tags-filter-button.d.ts +22 -0
  171. package/dist/components/features/devices/device-tags-filter-button.d.ts.map +1 -0
  172. package/dist/components/features/devices/device-type-icon.d.ts +11 -0
  173. package/dist/components/features/devices/device-type-icon.d.ts.map +1 -0
  174. package/dist/components/features/devices/device-type-tile.d.ts +9 -0
  175. package/dist/components/features/devices/device-type-tile.d.ts.map +1 -0
  176. package/dist/components/features/devices/devices-filter-toolbar.d.ts +46 -0
  177. package/dist/components/features/devices/devices-filter-toolbar.d.ts.map +1 -0
  178. package/dist/components/features/devices/devices-grid-filters.d.ts +25 -0
  179. package/dist/components/features/devices/devices-grid-filters.d.ts.map +1 -0
  180. package/dist/components/features/devices/devices-grid.d.ts +12 -0
  181. package/dist/components/features/devices/devices-grid.d.ts.map +1 -0
  182. package/dist/components/features/devices/devices-list.d.ts +131 -0
  183. package/dist/components/features/devices/devices-list.d.ts.map +1 -0
  184. package/dist/components/features/devices/devices-panel-header.d.ts +46 -0
  185. package/dist/components/features/devices/devices-panel-header.d.ts.map +1 -0
  186. package/dist/components/features/devices/devices-panel-view.d.ts +79 -0
  187. package/dist/components/features/devices/devices-panel-view.d.ts.map +1 -0
  188. package/dist/components/features/devices/devices-table-columns.d.ts +76 -0
  189. package/dist/components/features/devices/devices-table-columns.d.ts.map +1 -0
  190. package/dist/components/features/devices/devices-view-config.d.ts +25 -0
  191. package/dist/components/features/devices/devices-view-config.d.ts.map +1 -0
  192. package/dist/components/features/devices/index.d.ts +24 -0
  193. package/dist/components/features/devices/index.d.ts.map +1 -0
  194. package/dist/components/features/devices/types.d.ts +68 -0
  195. package/dist/components/features/devices/types.d.ts.map +1 -0
  196. package/dist/components/features/devices/use-tag-filter-modal.d.ts +50 -0
  197. package/dist/components/features/devices/use-tag-filter-modal.d.ts.map +1 -0
  198. package/dist/components/features/index.cjs +235 -12
  199. package/dist/components/features/index.d.ts +8 -0
  200. package/dist/components/features/index.d.ts.map +1 -1
  201. package/dist/components/features/index.js +274 -51
  202. package/dist/components/features/knowledge-base/index.d.ts +7 -0
  203. package/dist/components/features/knowledge-base/index.d.ts.map +1 -0
  204. package/dist/components/features/knowledge-base/knowledge-base-article-view.d.ts +44 -0
  205. package/dist/components/features/knowledge-base/knowledge-base-article-view.d.ts.map +1 -0
  206. package/dist/components/features/knowledge-base/knowledge-base-item-icon.d.ts +13 -0
  207. package/dist/components/features/knowledge-base/knowledge-base-item-icon.d.ts.map +1 -0
  208. package/dist/components/features/knowledge-base/knowledge-base-status.d.ts +8 -0
  209. package/dist/components/features/knowledge-base/knowledge-base-status.d.ts.map +1 -0
  210. package/dist/components/features/knowledge-base/knowledge-base-table.d.ts +52 -0
  211. package/dist/components/features/knowledge-base/knowledge-base-table.d.ts.map +1 -0
  212. package/dist/components/features/logs/index.d.ts +12 -0
  213. package/dist/components/features/logs/index.d.ts.map +1 -0
  214. package/dist/components/features/logs/log-drawer.d.ts +29 -0
  215. package/dist/components/features/logs/log-drawer.d.ts.map +1 -0
  216. package/dist/components/features/logs/log-source-labels.d.ts +11 -0
  217. package/dist/components/features/logs/log-source-labels.d.ts.map +1 -0
  218. package/dist/components/features/logs/logs-page-view.d.ts +32 -0
  219. package/dist/components/features/logs/logs-page-view.d.ts.map +1 -0
  220. package/dist/components/features/logs/logs-table-columns.d.ts +15 -0
  221. package/dist/components/features/logs/logs-table-columns.d.ts.map +1 -0
  222. package/dist/components/features/logs/logs-table-view.d.ts +64 -0
  223. package/dist/components/features/logs/logs-table-view.d.ts.map +1 -0
  224. package/dist/components/features/logs/types.d.ts +52 -0
  225. package/dist/components/features/logs/types.d.ts.map +1 -0
  226. package/dist/components/features/policies/compute-policy-summary.d.ts +37 -0
  227. package/dist/components/features/policies/compute-policy-summary.d.ts.map +1 -0
  228. package/dist/components/features/policies/index.d.ts +8 -0
  229. package/dist/components/features/policies/index.d.ts.map +1 -0
  230. package/dist/components/features/policies/policies-table.d.ts +34 -0
  231. package/dist/components/features/policies/policies-table.d.ts.map +1 -0
  232. package/dist/components/features/policies/policy-summary-cards.d.ts +17 -0
  233. package/dist/components/features/policies/policy-summary-cards.d.ts.map +1 -0
  234. package/dist/components/features/policies/policy-table-row.d.ts +37 -0
  235. package/dist/components/features/policies/policy-table-row.d.ts.map +1 -0
  236. package/dist/components/features/policy-configuration-panel.d.ts.map +1 -1
  237. package/dist/components/features/remote-session/index.d.ts +8 -0
  238. package/dist/components/features/remote-session/index.d.ts.map +1 -1
  239. package/dist/components/features/remote-session/remote-desktop-chat-message-row.d.ts +21 -0
  240. package/dist/components/features/remote-session/remote-desktop-chat-message-row.d.ts.map +1 -0
  241. package/dist/components/features/remote-session/remote-desktop-chat-panel.d.ts +31 -0
  242. package/dist/components/features/remote-session/remote-desktop-chat-panel.d.ts.map +1 -0
  243. package/dist/components/features/remote-session/remote-desktop-fullscreen-toolbar.d.ts +21 -0
  244. package/dist/components/features/remote-session/remote-desktop-fullscreen-toolbar.d.ts.map +1 -0
  245. package/dist/components/features/remote-session/remote-desktop-view.d.ts +50 -0
  246. package/dist/components/features/remote-session/remote-desktop-view.d.ts.map +1 -0
  247. package/dist/components/features/software/index.d.ts +8 -0
  248. package/dist/components/features/software/index.d.ts.map +1 -0
  249. package/dist/components/features/software/package-managers.d.ts +30 -0
  250. package/dist/components/features/software/package-managers.d.ts.map +1 -0
  251. package/dist/components/features/software/package-search-field-placeholder.d.ts +7 -0
  252. package/dist/components/features/software/package-search-field-placeholder.d.ts.map +1 -0
  253. package/dist/components/features/software/schedule-fields.d.ts +34 -0
  254. package/dist/components/features/software/schedule-fields.d.ts.map +1 -0
  255. package/dist/components/features/software/software-action-copy.d.ts +25 -0
  256. package/dist/components/features/software/software-action-copy.d.ts.map +1 -0
  257. package/dist/components/features/software/software-action-form.d.ts +71 -0
  258. package/dist/components/features/software/software-action-form.d.ts.map +1 -0
  259. package/dist/components/features/software/software-row-fields.d.ts +23 -0
  260. package/dist/components/features/software/software-row-fields.d.ts.map +1 -0
  261. package/dist/components/features/software/software-row.d.ts +18 -0
  262. package/dist/components/features/software/software-row.d.ts.map +1 -0
  263. package/dist/components/features/sortable-list/index.d.ts +1 -0
  264. package/dist/components/features/sortable-list/index.d.ts.map +1 -1
  265. package/dist/components/features/sortable-list/sortable-drag-handle.d.ts +21 -0
  266. package/dist/components/features/sortable-list/sortable-drag-handle.d.ts.map +1 -0
  267. package/dist/components/help-center-pages/index.cjs +133 -114
  268. package/dist/components/help-center-pages/index.js +58 -39
  269. package/dist/components/index.cjs +328 -82
  270. package/dist/components/index.js +459 -213
  271. package/dist/components/layout/page-heading.d.ts +12 -3
  272. package/dist/components/layout/page-heading.d.ts.map +1 -1
  273. package/dist/components/meeting-scheduler/index.cjs +120 -98
  274. package/dist/components/meeting-scheduler/index.js +50 -28
  275. package/dist/components/navigation/index.cjs +36 -17
  276. package/dist/components/navigation/index.d.ts +3 -0
  277. package/dist/components/navigation/index.d.ts.map +1 -1
  278. package/dist/components/navigation/index.js +36 -17
  279. package/dist/components/navigation/mingo-ai-button.d.ts +23 -10
  280. package/dist/components/navigation/mingo-ai-button.d.ts.map +1 -1
  281. package/dist/components/navigation/sticky-section-nav.d.ts +14 -1
  282. package/dist/components/navigation/sticky-section-nav.d.ts.map +1 -1
  283. package/dist/components/onboarding-guides/index.cjs +32 -16
  284. package/dist/components/onboarding-guides/index.js +31 -15
  285. package/dist/components/product-demo/cast.d.ts +58 -0
  286. package/dist/components/product-demo/cast.d.ts.map +1 -0
  287. package/dist/components/product-demo/fixtures/cloud-tenants.d.ts +10 -0
  288. package/dist/components/product-demo/fixtures/cloud-tenants.d.ts.map +1 -0
  289. package/dist/components/product-demo/fixtures/devices.d.ts +14 -0
  290. package/dist/components/product-demo/fixtures/devices.d.ts.map +1 -0
  291. package/dist/components/product-demo/fixtures/knowledge.d.ts +14 -0
  292. package/dist/components/product-demo/fixtures/knowledge.d.ts.map +1 -0
  293. package/dist/components/product-demo/fixtures/logs.d.ts +15 -0
  294. package/dist/components/product-demo/fixtures/logs.d.ts.map +1 -0
  295. package/dist/components/product-demo/fixtures/policies.d.ts +13 -0
  296. package/dist/components/product-demo/fixtures/policies.d.ts.map +1 -0
  297. package/dist/components/product-demo/fixtures/remote-session.d.ts +20 -0
  298. package/dist/components/product-demo/fixtures/remote-session.d.ts.map +1 -0
  299. package/dist/components/product-demo/fixtures/shared.d.ts +156 -0
  300. package/dist/components/product-demo/fixtures/shared.d.ts.map +1 -0
  301. package/dist/components/product-demo/fixtures/software-update.d.ts +19 -0
  302. package/dist/components/product-demo/fixtures/software-update.d.ts.map +1 -0
  303. package/dist/components/product-demo/fixtures/tickets-board.d.ts +8 -0
  304. package/dist/components/product-demo/fixtures/tickets-board.d.ts.map +1 -0
  305. package/dist/components/product-demo/index.cjs +112 -0
  306. package/dist/components/product-demo/index.d.ts +6 -0
  307. package/dist/components/product-demo/index.d.ts.map +1 -0
  308. package/dist/components/product-demo/index.js +112 -0
  309. package/dist/components/product-demo/product-screen.d.ts +22 -0
  310. package/dist/components/product-demo/product-screen.d.ts.map +1 -0
  311. package/dist/components/product-demo/registry.d.ts +13 -0
  312. package/dist/components/product-demo/registry.d.ts.map +1 -0
  313. package/dist/components/product-demo/screen-keys.cjs +25 -0
  314. package/dist/components/product-demo/screen-keys.d.ts +27 -0
  315. package/dist/components/product-demo/screen-keys.d.ts.map +1 -0
  316. package/dist/components/product-demo/screen-keys.js +20 -0
  317. package/dist/components/product-demo/screens/cloud-tenants.d.ts +8 -0
  318. package/dist/components/product-demo/screens/cloud-tenants.d.ts.map +1 -0
  319. package/dist/components/product-demo/screens/devices.d.ts +10 -0
  320. package/dist/components/product-demo/screens/devices.d.ts.map +1 -0
  321. package/dist/components/product-demo/screens/knowledge.d.ts +9 -0
  322. package/dist/components/product-demo/screens/knowledge.d.ts.map +1 -0
  323. package/dist/components/product-demo/screens/logs.d.ts +4 -0
  324. package/dist/components/product-demo/screens/logs.d.ts.map +1 -0
  325. package/dist/components/product-demo/screens/policies.d.ts +8 -0
  326. package/dist/components/product-demo/screens/policies.d.ts.map +1 -0
  327. package/dist/components/product-demo/screens/remote-desktop-picture.d.ts +11 -0
  328. package/dist/components/product-demo/screens/remote-desktop-picture.d.ts.map +1 -0
  329. package/dist/components/product-demo/screens/remote-session.d.ts +8 -0
  330. package/dist/components/product-demo/screens/remote-session.d.ts.map +1 -0
  331. package/dist/components/product-demo/screens/software-update.d.ts +12 -0
  332. package/dist/components/product-demo/screens/software-update.d.ts.map +1 -0
  333. package/dist/components/product-demo/screens/tickets-board.d.ts +4 -0
  334. package/dist/components/product-demo/screens/tickets-board.d.ts.map +1 -0
  335. package/dist/components/product-demo/types.d.ts +9 -0
  336. package/dist/components/product-demo/types.d.ts.map +1 -0
  337. package/dist/components/related-content/index.cjs +14 -8
  338. package/dist/components/related-content/index.js +13 -7
  339. package/dist/components/tickets/index.cjs +36 -20
  340. package/dist/components/tickets/index.js +35 -19
  341. package/dist/components/ui/file-manager/index.cjs +38 -34
  342. package/dist/components/ui/file-manager/index.js +8 -4
  343. package/dist/components/ui/index.cjs +57 -17
  344. package/dist/components/ui/index.d.ts +1 -0
  345. package/dist/components/ui/index.d.ts.map +1 -1
  346. package/dist/components/ui/index.js +141 -101
  347. package/dist/components/ui/product-screen-frame.d.ts +45 -0
  348. package/dist/components/ui/product-screen-frame.d.ts.map +1 -0
  349. package/dist/components/ui/radio-group.d.ts +5 -0
  350. package/dist/components/ui/radio-group.d.ts.map +1 -1
  351. package/dist/components/ui/snap-carousel.d.ts +11 -1
  352. package/dist/components/ui/snap-carousel.d.ts.map +1 -1
  353. package/dist/components/ui/tag.d.ts +1 -1
  354. package/dist/components/ui/tag.d.ts.map +1 -1
  355. package/dist/devices-6XKQTQM5.cjs +81 -0
  356. package/dist/devices-LXSFGGEZ.js +81 -0
  357. package/dist/hooks/index.cjs +17 -8
  358. package/dist/hooks/index.js +32 -23
  359. package/dist/hooks/ui/index.d.ts +1 -0
  360. package/dist/hooks/ui/index.d.ts.map +1 -1
  361. package/dist/hooks/ui/use-header-height.d.ts +12 -0
  362. package/dist/hooks/ui/use-header-height.d.ts.map +1 -1
  363. package/dist/hooks/ui/use-sticky-toolbar.d.ts +29 -0
  364. package/dist/hooks/ui/use-sticky-toolbar.d.ts.map +1 -0
  365. package/dist/hooks/use-location-hash.d.ts +2 -2
  366. package/dist/hooks/use-location-hash.d.ts.map +1 -1
  367. package/dist/hooks/use-scroll-to-hash.d.ts +7 -0
  368. package/dist/hooks/use-scroll-to-hash.d.ts.map +1 -1
  369. package/dist/index.cjs +284 -25
  370. package/dist/index.js +737 -478
  371. package/dist/knowledge-7PDZLXPO.cjs +108 -0
  372. package/dist/knowledge-Q4SPFOTN.js +108 -0
  373. package/dist/logs-SZ4VB4FE.js +216 -0
  374. package/dist/logs-TO3NELGJ.cjs +216 -0
  375. package/dist/policies-533GQVFM.cjs +121 -0
  376. package/dist/policies-LB7VW2UB.js +121 -0
  377. package/dist/remote-session-GSGZOFDX.js +196 -0
  378. package/dist/remote-session-R6VAFESR.cjs +196 -0
  379. package/dist/software-update-DT2XSG7M.cjs +179 -0
  380. package/dist/software-update-ENZNVGKP.js +179 -0
  381. package/dist/tickets-board-BHLPAVNJ.cjs +137 -0
  382. package/dist/tickets-board-PYDNELSK.js +137 -0
  383. package/dist/types/case-study.d.ts +15 -1
  384. package/dist/types/case-study.d.ts.map +1 -1
  385. package/dist/utils/date-utils.d.ts +5 -0
  386. package/dist/utils/date-utils.d.ts.map +1 -1
  387. package/dist/utils/index.cjs +45 -2
  388. package/dist/utils/index.d.ts +2 -1
  389. package/dist/utils/index.d.ts.map +1 -1
  390. package/dist/utils/index.js +41 -3
  391. package/dist/utils/open-in-new-tab.d.ts +7 -0
  392. package/dist/utils/open-in-new-tab.d.ts.map +1 -0
  393. package/dist/utils/same-page-hash-nav.d.ts +31 -0
  394. package/dist/utils/same-page-hash-nav.d.ts.map +1 -1
  395. package/dist/utils/scroll-into-view.d.ts +14 -1
  396. package/dist/utils/scroll-into-view.d.ts.map +1 -1
  397. package/package.json +13 -1
  398. package/src/components/chat/ask-prompts.tsx +226 -0
  399. package/src/components/chat/embeddable-chat.tsx +36 -2
  400. package/src/components/chat/entity-cards/case-study-card.tsx +122 -46
  401. package/src/components/chat/index.ts +1 -0
  402. package/src/components/chat/quick-action-chip.tsx +33 -9
  403. package/src/components/docs/use-scroll-spy.ts +93 -18
  404. package/src/components/faq/faq-section.tsx +82 -43
  405. package/src/components/features/approval-level.tsx +149 -0
  406. package/src/components/features/array-entry-manager.tsx +10 -1
  407. package/src/components/features/board/board.tsx +4 -1
  408. package/src/components/features/board/ticket-card.tsx +11 -1
  409. package/src/components/features/board/touch-board.tsx +2 -1
  410. package/src/components/features/board/types.ts +3 -0
  411. package/src/components/features/board/use-board-collapse.ts +7 -2
  412. package/src/components/features/capability-explorer.tsx +412 -0
  413. package/src/components/features/cloud-tenants/index.ts +28 -0
  414. package/src/components/features/cloud-tenants/tenant-access-cell.tsx +24 -0
  415. package/src/components/features/cloud-tenants/tenant-cell.tsx +26 -0
  416. package/src/components/features/cloud-tenants/tenant-customer-cell.tsx +27 -0
  417. package/src/components/features/cloud-tenants/tenant-presentation.ts +111 -0
  418. package/src/components/features/cloud-tenants/tenant-row.ts +21 -0
  419. package/src/components/features/cloud-tenants/tenants-table-columns.ts +30 -0
  420. package/src/components/features/cloud-tenants/tenants-table-view.tsx +142 -0
  421. package/src/components/features/devices/device-last-online.ts +6 -0
  422. package/src/components/features/devices/device-name.ts +51 -0
  423. package/src/components/features/devices/device-selector/device-selection-mode-radio.tsx +107 -0
  424. package/src/components/features/devices/device-selector/device-selector-skeleton.tsx +32 -0
  425. package/src/components/features/devices/device-selector/device-selector.tsx +799 -0
  426. package/src/components/features/devices/device-selector/device-selector.types.ts +138 -0
  427. package/src/components/features/devices/device-selector/narrowing.ts +33 -0
  428. package/src/components/features/devices/device-selector/use-device-selector.ts +51 -0
  429. package/src/components/features/devices/device-status.ts +102 -0
  430. package/src/components/features/devices/device-statuses.ts +88 -0
  431. package/src/components/features/devices/device-tags-filter-button.tsx +49 -0
  432. package/src/components/features/devices/device-type-icon.tsx +29 -0
  433. package/src/components/features/devices/device-type-tile.tsx +17 -0
  434. package/src/components/features/devices/devices-filter-toolbar.tsx +114 -0
  435. package/src/components/features/devices/devices-grid-filters.tsx +99 -0
  436. package/src/components/features/devices/devices-grid.tsx +86 -0
  437. package/src/components/features/devices/devices-list.tsx +357 -0
  438. package/src/components/features/devices/devices-panel-header.tsx +97 -0
  439. package/src/components/features/devices/devices-panel-view.tsx +261 -0
  440. package/src/components/features/devices/devices-table-columns.tsx +356 -0
  441. package/src/components/features/devices/devices-view-config.tsx +38 -0
  442. package/src/components/features/devices/index.ts +89 -0
  443. package/src/components/features/devices/types.ts +74 -0
  444. package/src/components/features/devices/use-tag-filter-modal.ts +109 -0
  445. package/src/components/features/index.ts +10 -0
  446. package/src/components/features/knowledge-base/index.ts +19 -0
  447. package/src/components/features/knowledge-base/knowledge-base-article-view.tsx +134 -0
  448. package/src/components/features/knowledge-base/knowledge-base-item-icon.ts +14 -0
  449. package/src/components/features/knowledge-base/knowledge-base-status.ts +12 -0
  450. package/src/components/features/knowledge-base/knowledge-base-table.tsx +180 -0
  451. package/src/components/features/logs/index.ts +20 -0
  452. package/src/components/features/logs/log-drawer.tsx +138 -0
  453. package/src/components/features/logs/log-source-labels.ts +25 -0
  454. package/src/components/features/logs/logs-page-view.tsx +100 -0
  455. package/src/components/features/logs/logs-table-columns.ts +16 -0
  456. package/src/components/features/logs/logs-table-view.tsx +509 -0
  457. package/src/components/features/logs/types.ts +71 -0
  458. package/src/components/features/policies/compute-policy-summary.ts +115 -0
  459. package/src/components/features/policies/index.ts +14 -0
  460. package/src/components/features/policies/policies-table.tsx +235 -0
  461. package/src/components/features/policies/policy-summary-cards.tsx +69 -0
  462. package/src/components/features/policies/policy-table-row.ts +37 -0
  463. package/src/components/features/policy-configuration-panel.tsx +3 -12
  464. package/src/components/features/remote-session/index.ts +8 -0
  465. package/src/components/features/remote-session/remote-desktop-chat-message-row.tsx +56 -0
  466. package/src/components/features/remote-session/remote-desktop-chat-panel.tsx +102 -0
  467. package/src/components/features/remote-session/remote-desktop-fullscreen-toolbar.tsx +119 -0
  468. package/src/components/features/remote-session/remote-desktop-view.tsx +209 -0
  469. package/src/components/features/software/index.ts +39 -0
  470. package/src/components/features/software/package-managers.ts +54 -0
  471. package/src/components/features/software/package-search-field-placeholder.tsx +23 -0
  472. package/src/components/features/software/schedule-fields.tsx +105 -0
  473. package/src/components/features/software/software-action-copy.ts +70 -0
  474. package/src/components/features/software/software-action-form.tsx +199 -0
  475. package/src/components/features/software/software-row-fields.tsx +105 -0
  476. package/src/components/features/software/software-row.ts +22 -0
  477. package/src/components/features/sortable-list/index.ts +1 -0
  478. package/src/components/features/sortable-list/sortable-drag-handle.tsx +41 -0
  479. package/src/components/layout/page-heading.tsx +23 -6
  480. package/src/components/navigation/index.ts +5 -0
  481. package/src/components/navigation/mingo-ai-button.tsx +37 -13
  482. package/src/components/navigation/sticky-section-nav.tsx +99 -1
  483. package/src/components/product-demo/cast.tsx +78 -0
  484. package/src/components/product-demo/fixtures/cloud-tenants.ts +63 -0
  485. package/src/components/product-demo/fixtures/devices.ts +87 -0
  486. package/src/components/product-demo/fixtures/knowledge.ts +48 -0
  487. package/src/components/product-demo/fixtures/logs.ts +103 -0
  488. package/src/components/product-demo/fixtures/policies.ts +77 -0
  489. package/src/components/product-demo/fixtures/remote-session.ts +65 -0
  490. package/src/components/product-demo/fixtures/shared.ts +53 -0
  491. package/src/components/product-demo/fixtures/software-update.ts +63 -0
  492. package/src/components/product-demo/fixtures/tickets-board.ts +100 -0
  493. package/src/components/product-demo/index.ts +7 -0
  494. package/src/components/product-demo/product-screen.tsx +94 -0
  495. package/src/components/product-demo/registry.ts +20 -0
  496. package/src/components/product-demo/screen-keys.ts +31 -0
  497. package/src/components/product-demo/screens/cloud-tenants.tsx +23 -0
  498. package/src/components/product-demo/screens/devices.tsx +41 -0
  499. package/src/components/product-demo/screens/knowledge.tsx +27 -0
  500. package/src/components/product-demo/screens/logs.tsx +113 -0
  501. package/src/components/product-demo/screens/policies.tsx +29 -0
  502. package/src/components/product-demo/screens/remote-desktop-picture.tsx +118 -0
  503. package/src/components/product-demo/screens/remote-session.tsx +46 -0
  504. package/src/components/product-demo/screens/software-update.tsx +97 -0
  505. package/src/components/product-demo/screens/tickets-board.tsx +28 -0
  506. package/src/components/product-demo/types.ts +10 -0
  507. package/src/components/ui/index.ts +1 -0
  508. package/src/components/ui/product-screen-frame.tsx +136 -0
  509. package/src/components/ui/radio-group.tsx +16 -4
  510. package/src/components/ui/snap-carousel.tsx +26 -1
  511. package/src/components/ui/tag.tsx +5 -0
  512. package/src/hooks/ui/index.ts +1 -0
  513. package/src/hooks/ui/use-header-height.ts +51 -2
  514. package/src/hooks/ui/use-sticky-toolbar.ts +60 -0
  515. package/src/hooks/use-location-hash.ts +9 -5
  516. package/src/hooks/use-scroll-to-hash.ts +9 -1
  517. package/src/types/case-study.ts +21 -1
  518. package/src/utils/date-utils.ts +8 -1
  519. package/src/utils/index.ts +5 -0
  520. package/src/utils/open-in-new-tab.ts +12 -0
  521. package/src/utils/same-page-hash-nav.ts +57 -0
  522. package/src/utils/scroll-into-view.ts +21 -5
  523. package/dist/chunk-BM5MVGH3.cjs +0 -499
  524. package/dist/chunk-CUME3VTQ.js +0 -144
  525. package/dist/chunk-CZ7Y7UG4.js +0 -732
  526. package/dist/chunk-FLKJYMVB.js +0 -499
  527. package/dist/chunk-OF6GEI5A.cjs +0 -144
  528. package/dist/chunk-UVTD52MD.cjs +0 -732
@@ -0,0 +1,226 @@
1
+ 'use client';
2
+
3
+ import type { ReactNode } from 'react';
4
+ import { cn } from '../../utils/cn';
5
+ import { AgentMark } from '../agent-mark';
6
+ import { MingoAiButton, openAskAi } from '../navigation/mingo-ai-button';
7
+ import { ScrollShadow } from '../ui/scroll-fade';
8
+ import { QuickActionChipButton, QuickActionChipSkeleton, type QuickActionIconSpec } from './quick-action-chip';
9
+
10
+ /** One question a page offers: the chip shows `label` as written, the chat is sent `prompt`. */
11
+ export interface AskPrompt {
12
+ id: string;
13
+ label: string;
14
+ /** What is sent to the chat. Absent: the label itself. */
15
+ prompt?: string;
16
+ icon?: ReactNode | QuickActionIconSpec;
17
+ }
18
+
19
+ export interface AskPromptsProps {
20
+ prompts: readonly AskPrompt[];
21
+ /**
22
+ * How many chips the block shows and reserves room for: the same number in
23
+ * the same slots on every load. Default: the prompts given (while `loading`,
24
+ * when there are none yet, two).
25
+ */
26
+ count?: number;
27
+ /** The questions are still being read: `count` chip skeletons in the chips' own slots. */
28
+ loading?: boolean;
29
+ /** `end`: the rows sit at the far end (a block beside a heading). Default `start`. */
30
+ align?: 'start' | 'end';
31
+ /** The chat source the page's chat panel runs on (the `ask-ai:open` filter). */
32
+ source?: string;
33
+ /** The assistant's configured name: the launcher before the chips ("Ask Mingo").
34
+ * Absent: the launcher's own default name. */
35
+ label?: string;
36
+ /** The assistant's configured glyph. Absent: the packaged Mingo mark. */
37
+ icon?: ReactNode;
38
+ /** After the chat was asked (analytics). */
39
+ onAsk?: (prompt: AskPrompt) => void;
40
+ /** The surface the row sits on, as a CSS colour: what its edge fade dissolves into. Default: the page background. */
41
+ fadeColor?: string;
42
+ className?: string;
43
+ }
44
+
45
+ function AssistantGlyph({ icon, className }: { icon?: ReactNode; className: string }) {
46
+ return (
47
+ <span className={cn('inline-flex shrink-0 items-center justify-center overflow-hidden rounded-full', className)}>
48
+ {icon ?? <AgentMark agent="mingo" className="size-full" />}
49
+ </span>
50
+ );
51
+ }
52
+
53
+ /** How many slots a loading block reserves when its host names no `count`. */
54
+ const DEFAULT_LOADING_SLOTS = 2;
55
+ /** The slots a block shows: the host's `count`; else the prompts it has, or the default while they load. */
56
+ const slotCount = (count: number | undefined, loading: boolean, prompts: readonly AskPrompt[]) =>
57
+ count ?? (loading ? DEFAULT_LOADING_SLOTS : prompts.length);
58
+
59
+ /** A skeleton chip's label width (in `ch`), by slot: a believable spread that is the same on every load. */
60
+ const SKELETON_LABEL_CH = [26, 22, 30, 24, 20, 28] as const;
61
+ /** One chip's slot in a stacked block (a card): the chip's own height, so an empty slot holds the same room. */
62
+ const CHIP_SLOT_CLASS = 'flex h-9 min-w-0 max-w-full';
63
+ /**
64
+ * One chip's slot in `AskPrompts`. In a narrow column the block is ONE row that
65
+ * scrolls sideways, so a chip keeps its question's width and never shrinks;
66
+ * from the content `md` step the block stacks and a long question clips.
67
+ */
68
+ const ROW_CHIP_SLOT_CLASS = 'flex h-9 shrink-0 content-md:min-w-0 content-md:max-w-full content-md:shrink';
69
+ /**
70
+ * `AskPrompts`' block. Narrow (a phone): the launcher and the chips are one row
71
+ * that scrolls sideways and fades where it continues (the lib's `ScrollShadow`),
72
+ * the suggestion-chip row of Material's guidance: one row high whatever the
73
+ * questions are, and no ragged space beside them. From the content `md` step:
74
+ * stacked, one chip per row.
75
+ */
76
+ const ASK_PROMPTS_ROW_CLASS =
77
+ 'flex min-w-0 flex-row items-center gap-2 [scrollbar-width:none] [&::-webkit-scrollbar]:hidden content-md:flex-col content-md:overflow-visible';
78
+
79
+ /**
80
+ * The questions themselves, in `count` fixed slots: a sentence-case chip each
81
+ * (a click opens the chat and sends that question once), a chip skeleton each
82
+ * while loading, and an empty slot where fewer questions exist than slots.
83
+ */
84
+ function QuestionChips({
85
+ prompts,
86
+ count,
87
+ loading,
88
+ source,
89
+ onAsk,
90
+ slotClassName,
91
+ }: Pick<AskPromptsProps, 'prompts' | 'loading' | 'source' | 'onAsk'> & { count: number; slotClassName?: string }) {
92
+ return (
93
+ <>
94
+ {Array.from({ length: count }, (_, slot) => {
95
+ const prompt = loading ? undefined : prompts[slot];
96
+ return (
97
+ <span key={prompt?.id ?? `slot-${slot}`} className={slotClassName ?? CHIP_SLOT_CLASS}>
98
+ {loading ? (
99
+ <QuickActionChipSkeleton
100
+ variant="question"
101
+ labelCh={SKELETON_LABEL_CH[slot % SKELETON_LABEL_CH.length]}
102
+ />
103
+ ) : prompt ? (
104
+ <QuickActionChipButton
105
+ variant="question"
106
+ label={prompt.label}
107
+ icon={prompt.icon}
108
+ onSelect={() => {
109
+ openAskAi(source, { prompt: prompt.prompt ?? prompt.label });
110
+ onAsk?.(prompt);
111
+ }}
112
+ />
113
+ ) : null}
114
+ </span>
115
+ );
116
+ })}
117
+ </>
118
+ );
119
+ }
120
+
121
+ /**
122
+ * A row of questions that open the site chat and ask it: THE assistant
123
+ * launcher (`MingoAiButton`, its in-page variant: the mark and the name), then
124
+ * `count` question chips in fixed slots, so the block's height is known before
125
+ * the questions are: ONE scrolling row on a narrow column, one chip per row
126
+ * from the content `md` step (a chip is one line: a longer question clips there
127
+ * and its tooltip shows it whole). A click on a chip opens the
128
+ * chat and sends that question once (`openAskAi` with a prompt); the launcher
129
+ * only opens it. While `loading` the slots hold chip skeletons and the launcher
130
+ * keeps its place. Loaded with no prompt it renders nothing.
131
+ */
132
+ export function AskPrompts({
133
+ prompts,
134
+ count: countProp,
135
+ loading = false,
136
+ align = 'start',
137
+ source,
138
+ label,
139
+ icon,
140
+ onAsk,
141
+ fadeColor,
142
+ className,
143
+ }: AskPromptsProps) {
144
+ const count = slotCount(countProp, loading, prompts);
145
+ if (!loading && prompts.length === 0) return null;
146
+ const end = align === 'end';
147
+ return (
148
+ <ScrollShadow
149
+ axis="horizontal"
150
+ color={fadeColor}
151
+ className="w-full min-w-0 content-md:w-auto"
152
+ scrollClassName={cn(ASK_PROMPTS_ROW_CLASS, end ? 'content-md:items-end' : 'content-md:items-start', className)}
153
+ >
154
+ <MingoAiButton variant="button" source={source} label={label} icon={icon} className="shrink-0" />
155
+ <QuestionChips
156
+ prompts={prompts}
157
+ count={count}
158
+ loading={loading}
159
+ source={source}
160
+ onAsk={onAsk}
161
+ slotClassName={cn(ROW_CHIP_SLOT_CLASS, end && 'content-md:justify-end')}
162
+ />
163
+ </ScrollShadow>
164
+ );
165
+ }
166
+
167
+ export interface AskCardProps extends Omit<AskPromptsProps, 'label' | 'className' | 'align'> {
168
+ title: string;
169
+ description?: string;
170
+ /** The assistant's configured name: the launcher's label. */
171
+ label: string;
172
+ /** Show the Cmd+K / Ctrl+K key cap on the launcher (and bind it). Default true: the card's launcher reads like the header's. */
173
+ shortcutHint?: boolean;
174
+ className?: string;
175
+ }
176
+
177
+ /**
178
+ * The "still deciding?" card beside a list of questions: the assistant's mark,
179
+ * a title, a line of description, `count` questions (one per row, in fixed
180
+ * slots, chip skeletons while `loading`) and the chat launcher. The card is the
181
+ * same height before and after the questions arrive.
182
+ */
183
+ export function AskCard({
184
+ title,
185
+ description,
186
+ prompts,
187
+ count: countProp,
188
+ loading = false,
189
+ source,
190
+ label,
191
+ icon,
192
+ onAsk,
193
+ shortcutHint = true,
194
+ className,
195
+ }: AskCardProps) {
196
+ const count = slotCount(countProp, loading, prompts);
197
+ return (
198
+ <div
199
+ className={cn(
200
+ 'flex flex-col gap-[var(--spacing-system-m)] rounded-md border border-ods-border bg-ods-card p-[var(--spacing-system-l)]',
201
+ className,
202
+ )}
203
+ >
204
+ <div className="flex items-center gap-3">
205
+ <AssistantGlyph icon={icon} className="size-8" />
206
+ <div className="min-w-0">
207
+ <p className="text-ods-text-primary text-h4">{title}</p>
208
+ {description && <p className="text-ods-text-secondary text-h6">{description}</p>}
209
+ </div>
210
+ </div>
211
+ {(loading || prompts.length > 0) && (
212
+ <div className="flex min-w-0 flex-col items-start gap-2">
213
+ <QuestionChips prompts={prompts} count={count} loading={loading} source={source} onAsk={onAsk} />
214
+ </div>
215
+ )}
216
+ <MingoAiButton
217
+ variant="button"
218
+ source={source}
219
+ label={label}
220
+ icon={icon}
221
+ shortcutHint={shortcutHint}
222
+ className="self-start"
223
+ />
224
+ </div>
225
+ );
226
+ }
@@ -1859,15 +1859,49 @@ function EmbeddableChatInner({
1859
1859
  // Listen for plain "open chat" events (no row context). Fired by the
1860
1860
  // header MingoAiButton. Same strict source filter as `ask-ai:open-with-ref`
1861
1861
  // above: events without a matching source are ignored.
1862
+ // With a `prompt` in the detail (a page's "Ask Mingo" question) the panel
1863
+ // also asks it, once, in Guide mode, in a new conversation. In any other mode
1864
+ // the chat only opens.
1865
+ // A question from the page starts its OWN conversation: it is never appended
1866
+ // to whatever thread was open. An open thread is reset to a new chat first
1867
+ // (`resetToNewChat`: the messages AND the active dialog id; clearing the
1868
+ // messages alone leaves the id set, the draft never comes and the question
1869
+ // would be lost) and the question is sent once that draft is what the panel holds.
1870
+ const pendingAskRef = useRef<string | null>(null);
1871
+ const isDraft = activeDialogId == null && messages.length === 0;
1872
+ const sendAskPrompt = useCallback(
1873
+ (prompt: string) => {
1874
+ if (activeMode !== 'guide') return;
1875
+ if (isDraft) {
1876
+ void sendMessage(prompt).catch((err: unknown) => {
1877
+ console.error('[EmbeddableChat] ask-ai:open prompt failed:', err);
1878
+ });
1879
+ return;
1880
+ }
1881
+ pendingAskRef.current = prompt;
1882
+ resetToNewChat();
1883
+ },
1884
+ [activeMode, isDraft, sendMessage, resetToNewChat],
1885
+ );
1886
+ useEffect(() => {
1887
+ const prompt = pendingAskRef.current;
1888
+ if (!prompt || !isDraft) return;
1889
+ pendingAskRef.current = null;
1890
+ void sendMessage(prompt).catch((err: unknown) => {
1891
+ console.error('[EmbeddableChat] ask-ai:open prompt failed:', err);
1892
+ });
1893
+ }, [isDraft, sendMessage]);
1862
1894
  useEffect(() => {
1863
1895
  const handler = (e: Event) => {
1864
- const detail = (e as CustomEvent<{ source?: string }>).detail;
1896
+ const detail = (e as CustomEvent<{ source?: string; prompt?: unknown }>).detail;
1865
1897
  if (!detail || detail.source !== source) return;
1866
1898
  setIsOpen(true);
1899
+ const prompt = typeof detail.prompt === 'string' ? detail.prompt.trim() : '';
1900
+ if (prompt) setTimeout(() => sendAskPrompt(prompt), 0);
1867
1901
  };
1868
1902
  window.addEventListener('ask-ai:open', handler);
1869
1903
  return () => window.removeEventListener('ask-ai:open', handler);
1870
- }, [source, setIsOpen]);
1904
+ }, [source, setIsOpen, sendAskPrompt]);
1871
1905
 
1872
1906
  const hasMessages = messages.length > 0;
1873
1907
  // First dialog page in flight and nothing cached yet — we don't yet know if
@@ -1,9 +1,14 @@
1
1
  'use client';
2
2
 
3
3
  /**
4
- * CaseStudyCard (pure presentation). Four densities — `default` (vertical
4
+ * CaseStudyCard (pure presentation). Five densities — `default` (vertical
5
5
  * detail), `sm` (compact horizontal for chat-inline), `portrait` (rails and
6
- * strips) and `menu` (the site menu's card, hover-plays the highlight cut).
6
+ * strips), `menu` (the site menu's card, hover-plays the highlight cut) and
7
+ * `result` (a customer result: who, the headline metric large, the story's
8
+ * title and a link to read it; no cover).
9
+ *
10
+ * Only `result` shows a metric (the story's FIRST one). Every other density is
11
+ * the story's regular card and never changes its box for one.
7
12
  *
8
13
  * The card writes NO click logic — callers wrap with their own anchor
9
14
  * and pass the resolved detail URL via `href`.
@@ -16,7 +21,7 @@
16
21
  import { useState } from 'react';
17
22
  import Image from '../../../embed-shims/next-image';
18
23
  import Link from '../../../embed-shims/next-link';
19
- import type { CaseStudyCardData } from '../../../types/case-study';
24
+ import type { CaseStudyCardData, CaseStudyMetric } from '../../../types/case-study';
20
25
  import { cn } from '../../../utils/cn';
21
26
  import { sortBitesByFeaturedAtDesc } from '../../features/video-bites-shared';
22
27
  import { CardHoverPlay } from '../../features/video-center-badge';
@@ -55,7 +60,10 @@ export interface CaseStudyCardProps {
55
60
  placeholderUrl?: string | null;
56
61
  /** `menu` is the site menu's card: the story's video plays muted on hover or
57
62
  * focus (the video bites' hover grammar), then who it is about and who tells it. */
58
- size?: 'default' | 'sm' | 'portrait' | 'menu';
63
+ size?: 'default' | 'sm' | 'portrait' | 'menu' | 'result';
64
+ /** `result`: the colour of the metric and the read link, as a text class
65
+ * (a page that shows another product's brand). Default: the theme accent. */
66
+ accentClassName?: string;
59
67
  /** `menu`: mount the hover player (the host passes whether its panel is open,
60
68
  * so a closed menu holds no player). Omitted: the card's own viewport gate. */
61
69
  mediaMounted?: boolean;
@@ -66,9 +74,88 @@ export interface CaseStudyCardProps {
66
74
  className?: string;
67
75
  }
68
76
 
77
+ /** The `result` card's boxes: the card and its skeleton share them, so they are one height. */
78
+ const CASE_STUDY_RESULT_STACK = 'flex h-full flex-col gap-5 p-6';
79
+ const CASE_STUDY_RESULT_METRIC_BOX = 'flex h-[112px] shrink-0 flex-col justify-start gap-1 overflow-hidden';
80
+ const CASE_STUDY_RESULT_FOOTER_BOX =
81
+ 'mt-auto flex h-[60px] shrink-0 items-center justify-between gap-3 border-t border-ods-border pt-4';
82
+
83
+ /** The metric a card shows: the story's first one, when it has both halves. */
84
+ function headlineMetric(study: CaseStudyCardData): CaseStudyMetric | null {
85
+ const metric = study.metrics?.[0];
86
+ return metric?.value && metric.label ? metric : null;
87
+ }
88
+
89
+ /** Who tells the story: the portrait with the MSP's mark on it, the name and MSP, the job title. A fixed 60px zone. */
90
+ function CaseStudyPersonRow({ study }: { study: CaseStudyCardData }) {
91
+ return (
92
+ <div className="flex h-[60px] shrink-0 items-center">
93
+ <div className="flex w-full min-w-0 items-center gap-3">
94
+ <div className="relative h-12 w-12 shrink-0">
95
+ {study.user?.avatar_url ? (
96
+ <Image
97
+ src={study.user.avatar_url}
98
+ alt={study.user?.full_name || 'User'}
99
+ className="h-12 w-12 rounded-full border border-ods-border bg-ods-bg object-cover"
100
+ width={48}
101
+ height={48}
102
+ unoptimized
103
+ />
104
+ ) : (
105
+ <div className="flex h-12 w-12 items-center justify-center rounded-full border border-ods-border bg-ods-bg">
106
+ <span className="text-ods-text-secondary text-h4">
107
+ {(study.user?.full_name || 'A').charAt(0).toUpperCase()}
108
+ </span>
109
+ </div>
110
+ )}
111
+ {study.msp?.icon_url && (
112
+ <div className="absolute -bottom-1 -right-1 flex h-6 w-6 items-center justify-center overflow-hidden rounded-full bg-ods-text-primary ring-1 ring-ods-bg">
113
+ <Image
114
+ src={study.msp.icon_url}
115
+ alt={study.msp.name || 'MSP'}
116
+ className="h-full w-full object-cover"
117
+ width={24}
118
+ height={24}
119
+ unoptimized
120
+ />
121
+ </div>
122
+ )}
123
+ </div>
124
+ <div className="min-w-0 flex-1">
125
+ <p className="truncate text-ods-text-primary text-h6">
126
+ {study.user?.full_name || 'Anonymous'}
127
+ {study.msp?.name && <span className="text-ods-text-secondary"> • {study.msp.name}</span>}
128
+ </p>
129
+ <p className="truncate text-ods-text-secondary text-h6">{study.user?.job_title || ' '}</p>
130
+ </div>
131
+ </div>
132
+ </div>
133
+ );
134
+ }
135
+
69
136
  /** `portrait` shares the default skeleton shape — the portrait anatomy uses the
70
137
  * same zone boxes (media aspect → 72px title → 60px person footer). */
71
- export function CaseStudyCardSkeleton({ size = 'default' }: { size?: 'default' | 'sm' | 'portrait' }) {
138
+ export function CaseStudyCardSkeleton({ size = 'default' }: { size?: 'default' | 'sm' | 'portrait' | 'result' }) {
139
+ if (size === 'result') {
140
+ return (
141
+ <div className={cn(CONTENT_CARD_SKELETON_FRAME_CLASS, CASE_STUDY_RESULT_STACK, 'animate-pulse')}>
142
+ <div className="flex h-[60px] shrink-0 items-center gap-3">
143
+ <div className="h-12 w-12 rounded-full bg-ods-border" />
144
+ <div className="flex-1 space-y-2">
145
+ <div className="h-4 w-2/3 rounded bg-ods-border" />
146
+ <div className="h-3 w-1/2 rounded bg-ods-border" />
147
+ </div>
148
+ </div>
149
+ <div className={CASE_STUDY_RESULT_METRIC_BOX} data-testid="case-study-result-skeleton-metric">
150
+ <div className="h-10 w-1/3 rounded bg-ods-border" />
151
+ <div className="h-4 w-3/4 rounded bg-ods-border" />
152
+ </div>
153
+ <div className={CASE_STUDY_RESULT_FOOTER_BOX}>
154
+ <div className="h-4 w-2/3 rounded bg-ods-border" />
155
+ </div>
156
+ </div>
157
+ );
158
+ }
72
159
  if (size === 'sm') {
73
160
  return (
74
161
  <span className={COMPACT_CARD_SKELETON_OUTER}>
@@ -131,6 +218,7 @@ export function CaseStudyCard({
131
218
  placeholderUrl: placeholderUrlProp,
132
219
  size = 'default',
133
220
  showTypeBadge = true,
221
+ accentClassName = 'text-ods-accent',
134
222
  mediaMounted,
135
223
  onNavigate,
136
224
  className,
@@ -259,6 +347,34 @@ export function CaseStudyCard({
259
347
  );
260
348
  }
261
349
 
350
+ if (size === 'result') {
351
+ // A customer result: the person, the headline metric large, then the story's
352
+ // title and the way in. A story with no metric has no result to show.
353
+ const metric = headlineMetric(study);
354
+ if (!metric) return null;
355
+ return (
356
+ <Link
357
+ href={href}
358
+ target={target}
359
+ rel={rel}
360
+ className={cn('block h-full', className)}
361
+ aria-label={`Read ${study.title}`}
362
+ >
363
+ <Card className={cn(CONTENT_CARD_FRAME_CLASS, CASE_STUDY_RESULT_STACK)}>
364
+ <CaseStudyPersonRow study={study} />
365
+ <div className={CASE_STUDY_RESULT_METRIC_BOX} data-testid="case-study-metric">
366
+ <span className={cn('truncate text-h1', accentClassName)}>{metric.value}</span>
367
+ <span className="line-clamp-2 text-ods-text-secondary text-h4">{metric.label}</span>
368
+ </div>
369
+ <div className={CASE_STUDY_RESULT_FOOTER_BOX}>
370
+ <span className="line-clamp-2 min-w-0 text-ods-text-secondary text-h6">{study.title}</span>
371
+ <span className={cn('shrink-0 text-h6', accentClassName)}>Read</span>
372
+ </div>
373
+ </Card>
374
+ </Link>
375
+ );
376
+ }
377
+
262
378
  if (size === 'portrait') {
263
379
  // Rail/strip density — shared <EntityPortraitCard> shell.
264
380
  return (
@@ -309,47 +425,7 @@ export function CaseStudyCard({
309
425
  <p className="line-clamp-3 break-words text-ods-text-primary text-h4">{study.title}</p>
310
426
  </div>
311
427
 
312
- <div className="flex h-[60px] shrink-0 items-center">
313
- <div className="flex w-full min-w-0 items-center gap-3">
314
- <div className="relative h-12 w-12 shrink-0">
315
- {study.user?.avatar_url ? (
316
- <Image
317
- src={study.user.avatar_url}
318
- alt={study.user?.full_name || 'User'}
319
- className="h-12 w-12 rounded-full border border-ods-border bg-ods-bg object-cover"
320
- width={48}
321
- height={48}
322
- unoptimized
323
- />
324
- ) : (
325
- <div className="flex h-12 w-12 items-center justify-center rounded-full border border-ods-border bg-ods-bg">
326
- <span className="text-ods-text-secondary text-h4">
327
- {(study.user?.full_name || 'A').charAt(0).toUpperCase()}
328
- </span>
329
- </div>
330
- )}
331
- {study.msp?.icon_url && (
332
- <div className="absolute -bottom-1 -right-1 flex h-6 w-6 items-center justify-center overflow-hidden rounded-full bg-ods-text-primary ring-1 ring-ods-bg">
333
- <Image
334
- src={study.msp.icon_url}
335
- alt={study.msp.name || 'MSP'}
336
- className="h-full w-full object-cover"
337
- width={24}
338
- height={24}
339
- unoptimized
340
- />
341
- </div>
342
- )}
343
- </div>
344
- <div className="min-w-0 flex-1">
345
- <p className="truncate text-ods-text-primary text-h6">
346
- {study.user?.full_name || 'Anonymous'}
347
- {study.msp?.name && <span className="text-ods-text-secondary"> • {study.msp.name}</span>}
348
- </p>
349
- <p className="truncate text-ods-text-secondary text-h6">{study.user?.job_title || ' '}</p>
350
- </div>
351
- </div>
352
- </div>
428
+ <CaseStudyPersonRow study={study} />
353
429
  </Card>
354
430
  </a>
355
431
  );
@@ -23,6 +23,7 @@ export * from './chat-message-row';
23
23
  export * from './chat-message-skeleton';
24
24
 
25
25
  export * from './quick-action-chip';
26
+ export * from './ask-prompts';
26
27
  export * from './quick-action-marquee';
27
28
  export * from './quick-action-wall';
28
29
  export * from './chat-ticket-list';
@@ -156,8 +156,10 @@ export interface QuickActionChipButtonProps {
156
156
  /** {@link QuickActionChipLozenge} at the label's leading edge (e.g. an
157
157
  * IT/SEC classification affix). `true` renders the `theme`'s lozenge. */
158
158
  lozenge?: QuickActionChipLozenge | boolean;
159
- /** `'primary'` = accent (yellow) chip, `'outline'` = bordered chip (default). */
160
- variant?: 'primary' | 'outline';
159
+ /** `'primary'` = accent (yellow) chip, `'outline'` = bordered chip (default),
160
+ * `'question'` = a bordered chip whose label is a SENTENCE in the case it was
161
+ * written in (a question to ask the assistant), not an uppercase task label. */
162
+ variant?: 'primary' | 'outline' | 'question';
161
163
  /** Active single-select state (Figma "Feature Item" active): renders the
162
164
  * Tag's `selected` variant (pink border + pink-secondary fill), overriding
163
165
  * `variant`. Used by chip groups acting as tabs (OpenFrame categories). */
@@ -194,6 +196,8 @@ export interface QuickActionChipSkeletonProps {
194
196
  lozenge?: boolean;
195
197
  /** Chip scale — MUST match the loaded chips' `size` or the swap jumps. */
196
198
  size?: 'default' | 'large';
199
+ /** `'question'`: the placeholder of a `variant="question"` chip (its height and padding). */
200
+ variant?: 'outline' | 'question';
197
201
  className?: string;
198
202
  }
199
203
 
@@ -217,14 +221,18 @@ export function QuickActionChipSkeleton({
217
221
  icon = true,
218
222
  lozenge = false,
219
223
  size = 'default',
224
+ variant = 'outline',
220
225
  className,
221
226
  }: QuickActionChipSkeletonProps) {
227
+ const question = variant === 'question';
222
228
  return (
223
229
  <Tag
224
230
  variant="outline"
225
- size={size}
226
- className={className}
227
- icon={icon ? <ChipSkelBar className={size === 'large' ? 'block size-5' : 'block size-4'} /> : undefined}
231
+ size={question ? 'sentence' : size}
232
+ className={cn(question && 'max-w-full', className)}
233
+ icon={
234
+ icon && !question ? <ChipSkelBar className={size === 'large' ? 'block size-5' : 'block size-4'} /> : undefined
235
+ }
228
236
  label={
229
237
  <>
230
238
  {lozenge && <ChipSkelBar className="mr-2 inline-block h-[16px] w-[26px] translate-y-[2px]" />}
@@ -268,9 +276,17 @@ export function QuickActionChipButton({
268
276
  const resolvedLozenge = lozenge === true ? theme?.lozenge : lozenge === false ? undefined : lozenge;
269
277
  const resolvedIcon = renderQuickActionIcon(themedIcon);
270
278
  const resolvedLabel = composeChipLabel(label, resolvedLozenge);
271
- const tagVariant = selected ? (selectedAccent === 'cyan' ? 'selectedCyan' : 'selected') : variant;
279
+ const question = variant === 'question';
280
+ const tagVariant = selected
281
+ ? selectedAccent === 'cyan'
282
+ ? 'selectedCyan'
283
+ : 'selected'
284
+ : question
285
+ ? 'outline'
286
+ : variant;
287
+ const tagSize = question ? 'sentence' : size;
272
288
  if (!interactive) {
273
- return <Tag variant={tagVariant} size={size} icon={resolvedIcon} label={resolvedLabel} className={className} />;
289
+ return <Tag variant={tagVariant} size={tagSize} icon={resolvedIcon} label={resolvedLabel} className={className} />;
274
290
  }
275
291
  return (
276
292
  <button
@@ -282,11 +298,19 @@ export function QuickActionChipButton({
282
298
  onBlur={onHoverEnd}
283
299
  aria-pressed={selected || undefined}
284
300
  className={cn(
285
- 'shrink-0 rounded-md focus:outline-none focus-visible:ring-2 focus-visible:ring-ods-accent',
301
+ 'rounded-md focus:outline-none focus-visible:ring-2 focus-visible:ring-ods-accent',
302
+ // A question may be longer than a narrow column: it shrinks and clips there, read from its start.
303
+ question ? 'min-w-0 max-w-full text-left' : 'shrink-0',
286
304
  className,
287
305
  )}
288
306
  >
289
- <Tag variant={tagVariant} size={size} icon={resolvedIcon} label={resolvedLabel} />
307
+ <Tag
308
+ variant={tagVariant}
309
+ size={tagSize}
310
+ icon={resolvedIcon}
311
+ label={resolvedLabel}
312
+ className={question ? 'max-w-full' : undefined}
313
+ />
290
314
  </button>
291
315
  );
292
316
  }