@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,118 @@
1
+ 'use client';
2
+
3
+ import type { ReactNode } from 'react';
4
+ import { VolumeUpIcon } from '../../icons-v2-generated/audio-and-visual/volume-up-icon';
5
+ import { ChromeIcon } from '../../icons-v2-generated/brand-logos/chrome-icon';
6
+ import { WindowsIcon } from '../../icons-v2-generated/brand-logos/windows-icon';
7
+ import { PrinterIcon } from '../../icons-v2-generated/devices/printer-icon';
8
+ import { WifiIcon } from '../../icons-v2-generated/devices/wifi-icon';
9
+ import { FolderIcon } from '../../icons-v2-generated/documents/folder-icon';
10
+ import { SearchIcon } from '../../icons-v2-generated/interface/search-icon';
11
+ import { TrashIcon } from '../../icons-v2-generated/interface/trash-icon';
12
+ import { StopIcon } from '../../icons-v2-generated/media-playback/stop-icon';
13
+ import { CheckCircleIcon } from '../../icons-v2-generated/signs-and-symbols/check-circle-icon';
14
+ import { MinusIcon } from '../../icons-v2-generated/signs-and-symbols/minus-icon';
15
+ import { XmarkIcon } from '../../icons-v2-generated/signs-and-symbols/xmark-icon';
16
+ import type { RemoteSessionFixture } from '../fixtures/remote-session';
17
+
18
+ function DesktopShortcut({ icon, label }: { icon: ReactNode; label: string }) {
19
+ return (
20
+ <div className="flex w-20 flex-col items-center gap-[var(--spacing-system-xxs)]">
21
+ <span className="flex size-10 items-center justify-center rounded-md bg-ods-card/70 text-ods-text-primary">
22
+ {icon}
23
+ </span>
24
+ <span className="w-full truncate text-center text-ods-text-primary text-h6">{label}</span>
25
+ </div>
26
+ );
27
+ }
28
+
29
+ function ServiceRow({ name, state }: { name: string; state: string }) {
30
+ return (
31
+ <div className="flex items-center gap-[var(--spacing-system-xs)] py-[var(--spacing-system-xs)]">
32
+ <CheckCircleIcon className="h-5 w-5 flex-shrink-0 text-ods-success" />
33
+ <span className="min-w-0 flex-1 truncate text-ods-text-primary text-h4">{name}</span>
34
+ <span className="flex-shrink-0 text-ods-text-secondary text-h6">{state}</span>
35
+ </div>
36
+ );
37
+ }
38
+
39
+ function TaskbarApp({ icon, active = false }: { icon: ReactNode; active?: boolean }) {
40
+ return (
41
+ <span
42
+ className={`flex size-8 items-center justify-center rounded-md text-ods-text-primary ${
43
+ active ? 'border-b-2 border-ods-accent bg-ods-bg-surface' : ''
44
+ }`}
45
+ >
46
+ {icon}
47
+ </span>
48
+ );
49
+ }
50
+
51
+ /**
52
+ * What the stream shows: the device's own desktop, filling the screen box the
53
+ * way a live session does. A wallpaper with its shortcuts, the printer's
54
+ * settings window open after the spooler was restarted, and the task bar. A
55
+ * drawing, standing in for the host's live canvas.
56
+ */
57
+ export function RemoteDesktopPicture({ desktop }: { desktop: RemoteSessionFixture['desktop'] }) {
58
+ return (
59
+ <div className="absolute inset-0 flex flex-col overflow-hidden bg-gradient-to-br from-ods-flamingo-cyan-secondary via-ods-bg-surface to-ods-flamingo-pink-secondary">
60
+ <div className="relative min-h-0 flex-1">
61
+ {/* A narrow box shows the window alone: the shortcuts would leave it no room. */}
62
+ <div className="absolute left-[var(--spacing-system-sf)] top-[var(--spacing-system-sf)] hidden flex-col gap-[var(--spacing-system-sf)] content-md:flex">
63
+ <DesktopShortcut icon={<TrashIcon className="h-5 w-5" />} label="Recycle Bin" />
64
+ <DesktopShortcut icon={<FolderIcon className="h-5 w-5" />} label="Scans" />
65
+ <DesktopShortcut icon={<ChromeIcon className="h-5 w-5" />} label="Chrome" />
66
+ </div>
67
+
68
+ <div className="absolute bottom-[var(--spacing-system-mf)] left-[var(--spacing-system-mf)] right-[var(--spacing-system-mf)] top-[var(--spacing-system-mf)] flex flex-col overflow-hidden rounded-md border border-ods-border bg-ods-card shadow-lg content-md:left-28">
69
+ <div className="flex flex-shrink-0 items-center gap-[var(--spacing-system-xs)] border-b border-ods-border bg-ods-bg-surface px-[var(--spacing-system-sf)] py-[var(--spacing-system-xs)]">
70
+ <PrinterIcon className="h-4 w-4 flex-shrink-0 text-ods-text-secondary" />
71
+ <span className="min-w-0 flex-1 truncate text-ods-text-primary text-h6">Printers &amp; scanners</span>
72
+ <MinusIcon className="h-4 w-4 flex-shrink-0 text-ods-text-secondary" />
73
+ <StopIcon className="h-3 w-3 flex-shrink-0 text-ods-text-secondary" />
74
+ <XmarkIcon className="h-4 w-4 flex-shrink-0 text-ods-text-secondary" />
75
+ </div>
76
+ <div className="flex min-h-0 flex-1 flex-col gap-[var(--spacing-system-sf)] p-[var(--spacing-system-mf)]">
77
+ <div className="flex items-center gap-[var(--spacing-system-sf)]">
78
+ <span className="flex size-12 flex-shrink-0 items-center justify-center rounded-md border border-ods-border bg-ods-bg text-ods-text-primary">
79
+ <PrinterIcon className="h-6 w-6" />
80
+ </span>
81
+ <div className="flex min-w-0 flex-1 flex-col">
82
+ <span className="truncate text-ods-text-primary text-h3">{desktop.printer}</span>
83
+ <span className="truncate text-ods-text-secondary text-h6">Default printer</span>
84
+ </div>
85
+ <span className="flex-shrink-0 rounded-md bg-ods-success-secondary px-[var(--spacing-system-xs)] py-[var(--spacing-system-xxs)] text-ods-success text-h5">
86
+ Ready
87
+ </span>
88
+ </div>
89
+ <div className="flex flex-col divide-y divide-ods-border border-t border-ods-border">
90
+ <ServiceRow name="Print Spooler" state={`Restarted ${desktop.clock}`} />
91
+ <ServiceRow name="Print queue" state="0 documents waiting" />
92
+ <ServiceRow name="Test page" state="Printed" />
93
+ </div>
94
+ </div>
95
+ </div>
96
+ </div>
97
+
98
+ <div className="flex flex-shrink-0 items-center gap-[var(--spacing-system-xs)] border-t border-ods-border bg-ods-card px-[var(--spacing-system-sf)] py-[var(--spacing-system-xxs)]">
99
+ <TaskbarApp icon={<WindowsIcon className="h-4 w-4" />} />
100
+ <span className="hidden h-8 w-40 items-center gap-[var(--spacing-system-xs)] rounded-md bg-ods-bg-surface px-[var(--spacing-system-xs)] text-ods-text-secondary text-h6 content-md:flex">
101
+ <SearchIcon className="h-4 w-4 flex-shrink-0" />
102
+ Search
103
+ </span>
104
+ <TaskbarApp icon={<FolderIcon className="h-4 w-4" />} />
105
+ <TaskbarApp icon={<ChromeIcon className="h-4 w-4" />} />
106
+ <TaskbarApp icon={<PrinterIcon className="h-4 w-4" />} active />
107
+ <span className="ml-auto flex flex-shrink-0 items-center gap-[var(--spacing-system-xs)] text-ods-text-primary">
108
+ <WifiIcon className="h-4 w-4" />
109
+ <VolumeUpIcon className="h-4 w-4" />
110
+ <span className="flex flex-col items-end leading-tight text-h6">
111
+ <span>{desktop.clock}</span>
112
+ <span className="text-ods-text-secondary">{desktop.date}</span>
113
+ </span>
114
+ </span>
115
+ </div>
116
+ </div>
117
+ );
118
+ }
@@ -0,0 +1,46 @@
1
+ 'use client';
2
+
3
+ import { useMemo } from 'react';
4
+ import { RemoteDesktopChatPanel, RemoteDesktopView } from '../../features/remote-session';
5
+ import { useProductDemoCast } from '../cast';
6
+ import { buildRemoteSessionFixture } from '../fixtures/remote-session';
7
+ import type { ProductScreenViewProps } from '../types';
8
+ import { RemoteDesktopPicture } from './remote-desktop-picture';
9
+
10
+ const noop = () => {};
11
+ const keepDraft = () => Promise.resolve(false);
12
+
13
+ /**
14
+ * The product's remote desktop page mid-session: the device header, the remote
15
+ * desktop filling the screen box, the session chat beside it. No "Back": a
16
+ * picture has nowhere to go back to. The narrow rendering hides the chat.
17
+ */
18
+ export default function RemoteSessionScreen({ compact = false }: ProductScreenViewProps) {
19
+ const cast = useProductDemoCast();
20
+ const fixture = useMemo(() => buildRemoteSessionFixture(cast), [cast]);
21
+ return (
22
+ <div className="flex h-full flex-col bg-ods-bg">
23
+ {/* The page's header row is gone with "Back": the device bar keeps its distance from the top. */}
24
+ <div className="h-[var(--spacing-system-l)] flex-shrink-0" />
25
+ <div className="min-h-0 flex-1">
26
+ <RemoteDesktopView
27
+ {...fixture.view}
28
+ onEnterFullscreen={noop}
29
+ onExitFullscreen={noop}
30
+ onOpenSettings={noop}
31
+ chatOpen={!compact}
32
+ onToggleChat={noop}
33
+ screen={<RemoteDesktopPicture desktop={fixture.desktop} />}
34
+ chat={
35
+ compact ? null : (
36
+ // The side column needs the room of the wide layout; a narrow frame keeps the screen alone.
37
+ <div className="hidden min-h-0 content-md:flex">
38
+ <RemoteDesktopChatPanel {...fixture.chat} sending={false} onSend={keepDraft} variant="side" />
39
+ </div>
40
+ )
41
+ }
42
+ />
43
+ </div>
44
+ </div>
45
+ );
46
+ }
@@ -0,0 +1,97 @@
1
+ 'use client';
2
+
3
+ import { useMemo } from 'react';
4
+ import { DeviceSelector } from '../../features/devices';
5
+ import {
6
+ PACKAGE_SEARCH_LABEL,
7
+ PACKAGE_SEARCH_PLACEHOLDER,
8
+ type PackageSearchSlotProps,
9
+ SoftwareActionForm,
10
+ } from '../../features/software';
11
+ import { Autocomplete } from '../../ui';
12
+ import { useProductDemoCast } from '../cast';
13
+ import { buildSoftwareUpdateFixture } from '../fixtures/software-update';
14
+ import type { ProductScreenViewProps } from '../types';
15
+
16
+ const noop = () => {};
17
+
18
+ const HIDDEN_WHEN_COMPACT = ['organization'];
19
+
20
+ /** "Software Name" with the fixture's package picked: the product's field, minus its catalog search. */
21
+ function StaticPackageField({ value }: PackageSearchSlotProps) {
22
+ return (
23
+ <Autocomplete
24
+ label={PACKAGE_SEARCH_LABEL}
25
+ labelVariant="large"
26
+ options={value ? [{ value: value.id, label: value.name, description: value.description ?? undefined }] : []}
27
+ value={value?.id ?? null}
28
+ onChange={noop}
29
+ placeholder={PACKAGE_SEARCH_PLACEHOLDER}
30
+ />
31
+ );
32
+ }
33
+
34
+ const renderPackageSearch = (field: PackageSearchSlotProps) => <StaticPackageField {...field} />;
35
+
36
+ const NO_NARROWING = { columnFilters: [], tags: [] };
37
+
38
+ /**
39
+ * The product's Update Software page: Chrome through WinGet, scheduled for
40
+ * tonight, with the devices picked for it on the "Selected Devices" tab. The
41
+ * page's title row is left out (the job is named above the picture), so the
42
+ * frame starts at the package. The form is in its densest arrangement (one
43
+ * package, the run choice beside its start, no search row over a fixed list),
44
+ * so the frame reaches the devices: what gets updated is in the picture. The
45
+ * narrow rendering drops the picker's customer column.
46
+ */
47
+ export default function SoftwareUpdateScreen({ compact = false }: ProductScreenViewProps) {
48
+ const cast = useProductDemoCast();
49
+ const fixture = useMemo(() => buildSoftwareUpdateFixture(cast), [cast]);
50
+ const selected = useMemo(
51
+ () => fixture.devices.filter(device => fixture.selectedIds.has(device.id)),
52
+ [fixture.devices, fixture.selectedIds],
53
+ );
54
+ return (
55
+ <div className="h-full bg-ods-bg pt-[var(--spacing-system-l)]">
56
+ <div className="h-full">
57
+ <SoftwareActionForm
58
+ action={fixture.action}
59
+ showHeader={false}
60
+ // The picture's arrangement: one package, the run choice and its start on one row, the devices right under.
61
+ addRows={false}
62
+ runModeLayout="inline"
63
+ showDeviceHeading={false}
64
+ onSubmit={noop}
65
+ timing={fixture.timing}
66
+ initialValues={fixture.initialValues}
67
+ renderPackageSearch={renderPackageSearch}
68
+ renderDevicePicker={() => (
69
+ <DeviceSelector
70
+ devices={selected}
71
+ loading={false}
72
+ selectedIds={fixture.selectedIds}
73
+ showSelectionModeRadio={false}
74
+ showToolbar={false}
75
+ hideColumns={compact ? HIDDEN_WHEN_COMPACT : undefined}
76
+ // The picker's server mode is how a host says which tab is open: the picture shows what was picked.
77
+ server={{
78
+ activeTab: 'selected',
79
+ onTabChange: noop,
80
+ search: '',
81
+ onSearchChange: noop,
82
+ narrowing: NO_NARROWING,
83
+ onNarrowingChange: noop,
84
+ selectedCount: selected.length,
85
+ totalCount: selected.length,
86
+ onAdd: noop,
87
+ onRemove: noop,
88
+ onAddAll: noop,
89
+ onRemoveAll: noop,
90
+ }}
91
+ />
92
+ )}
93
+ />
94
+ </div>
95
+ </div>
96
+ );
97
+ }
@@ -0,0 +1,28 @@
1
+ 'use client';
2
+
3
+ import { useMemo } from 'react';
4
+ import { Board } from '../../features/board';
5
+ import { useProductDemoCast } from '../cast';
6
+ import { buildTicketsBoardFixture } from '../fixtures/tickets-board';
7
+ import type { ProductScreenViewProps } from '../types';
8
+
9
+ const noop = () => {};
10
+
11
+ /**
12
+ * The lanes folded in the wide picture: the two that carry the story (what the
13
+ * agents are on, what waits for a technician) stay open at full width, so no
14
+ * lane is cut by the frame.
15
+ */
16
+ const FOLDED = { ON_HOLD: true, RESOLVED: true };
17
+
18
+ /** The product's ticket board; the narrow rendering shows the lanes that carry the story. */
19
+ export default function TicketsBoardScreen({ compact = false }: ProductScreenViewProps) {
20
+ const cast = useProductDemoCast();
21
+ const board = useMemo(() => buildTicketsBoardFixture(cast), [cast]);
22
+ const columns = compact ? board.filter(column => column.id !== 'ON_HOLD') : board;
23
+ return (
24
+ <div className="h-full bg-ods-bg p-[var(--spacing-system-m)]">
25
+ <Board columns={columns} onChange={noop} initialCollapsed={compact ? undefined : FOLDED} />
26
+ </div>
27
+ );
28
+ }
@@ -0,0 +1,10 @@
1
+ import type { ComponentType } from 'react';
2
+
3
+ /** What every product screen of the registry takes. */
4
+ export interface ProductScreenViewProps {
5
+ /** The narrow rendering: fewer columns, secondary panels hidden. */
6
+ compact?: boolean;
7
+ }
8
+
9
+ /** A product screen module: the product's own view, fed by its fixture. */
10
+ export type ProductScreenComponent = ComponentType<ProductScreenViewProps>;
@@ -234,6 +234,7 @@ export { LazyMount, type LazyMountProps } from './lazy-mount';
234
234
  // Product-demo stage primitives (marketing pages): window + phone chrome, the
235
235
  // incident feed, the swipe carousel and the sticky call-to-action bar.
236
236
  export * from './app-window-frame';
237
+ export * from './product-screen-frame';
237
238
  export * from './phone-frame';
238
239
  export * from './incident-feed';
239
240
  export * from './status-line';
@@ -0,0 +1,136 @@
1
+ 'use client';
2
+
3
+ import { type CSSProperties, type ReactNode, useLayoutEffect, useRef, useState } from 'react';
4
+ import { LAYOUT_STEPS } from '../../styles/layout-steps';
5
+ import { cn } from '../../utils/cn';
6
+ import { CollisionBoundaryContext, PortalContainerContext } from './portal-container';
7
+
8
+ /** The widest content step: a product screen is drawn at this width and scaled to its frame. */
9
+ export const PRODUCT_SCREEN_DESIGN_WIDTH = LAYOUT_STEPS['2xl'].content;
10
+
11
+ /**
12
+ * A narrower layout width for a frame that is itself narrow (a hero's window, a
13
+ * tab panel): the product's desktop layout at its smallest, so the scaled text
14
+ * stays readable.
15
+ */
16
+ export const PRODUCT_SCREEN_READABLE_WIDTH = LAYOUT_STEPS.lg.content;
17
+
18
+ /** Under this frame width the screen is not scaled: it takes the product's own narrow layout. */
19
+ export const PRODUCT_SCREEN_SCALE_FROM = LAYOUT_STEPS.md.content;
20
+
21
+ /** The frame's CSS variable that carries the screen's scale. */
22
+ const SCALE_VAR = '--product-screen-scale';
23
+
24
+ export interface ProductScreenFrameProps {
25
+ /** The product screen: the product's own component with fixture data. */
26
+ children: ReactNode;
27
+ /** What the picture shows, for assistive tech (the content itself is hidden from it). */
28
+ label: string;
29
+ /** Height of the frame; the screen is cropped to it. A number is px. */
30
+ height: number | string;
31
+ /** Whose accent the screen carries. Default `openframe`. */
32
+ appType?: string;
33
+ /** Width the screen is laid out at before scaling. Default the widest content step. */
34
+ designWidth?: number;
35
+ /** The frame width from which the screen is scaled; under it the product's narrow layout renders. Default the content `md` step. */
36
+ scaleFrom?: number;
37
+ /** Fade the cropped bottom edge into the surface behind the frame. Default true. */
38
+ fade?: boolean;
39
+ className?: string;
40
+ }
41
+
42
+ /**
43
+ * A product screen shown as a picture on a marketing page.
44
+ *
45
+ * The child is the real product component. The frame is a content area, so
46
+ * every `content-*` layout switch inside reads the FRAME's width, never the
47
+ * window's. From the content `md` step up the child is laid out at
48
+ * `designWidth` and scaled down to the frame (a transform does not change the
49
+ * width a container query reads, so it keeps its desktop layout); under that
50
+ * step it is not scaled and renders the product's own narrow layout.
51
+ *
52
+ * It is a picture: the content is `inert` and hidden from assistive tech, and
53
+ * the frame is `role="img"` with `label`. Overlays the content opens (a menu a
54
+ * fixture shows open) portal into the frame and collide with its edges, and
55
+ * the frame's `data-app-type` gives them the product's accent too.
56
+ */
57
+ export function ProductScreenFrame({
58
+ children,
59
+ label,
60
+ height,
61
+ appType = 'openframe',
62
+ designWidth = PRODUCT_SCREEN_DESIGN_WIDTH,
63
+ scaleFrom = PRODUCT_SCREEN_SCALE_FROM,
64
+ fade = true,
65
+ className,
66
+ }: ProductScreenFrameProps) {
67
+ const frameRef = useRef<HTMLDivElement>(null);
68
+ const [frame, setFrame] = useState<HTMLDivElement | null>(null);
69
+ const [portalHost, setPortalHost] = useState<HTMLDivElement | null>(null);
70
+ // Which layout the screen takes. `pending` until measured: the frame keeps its
71
+ // box and shows nothing, so the first paint is never the unscaled screen.
72
+ // React holds only this (it changes at two widths); the scale itself changes
73
+ // with every pixel of a resize, so it is written to a CSS variable on the
74
+ // frame and never re-renders the screen.
75
+ const [mode, setMode] = useState<'pending' | 'scaled' | 'native'>('pending');
76
+
77
+ useLayoutEffect(() => {
78
+ const element = frameRef.current;
79
+ if (!element) return undefined;
80
+ setFrame(element);
81
+ const measure = () => {
82
+ const width = element.clientWidth;
83
+ const scaled = width >= scaleFrom && width < designWidth;
84
+ element.style.setProperty(SCALE_VAR, String(scaled ? width / designWidth : 1));
85
+ setMode(scaled ? 'scaled' : 'native');
86
+ };
87
+ measure();
88
+ const observer = new ResizeObserver(measure);
89
+ observer.observe(element);
90
+ return () => observer.disconnect();
91
+ }, [designWidth, scaleFrom]);
92
+
93
+ const screenStyle: CSSProperties =
94
+ mode === 'scaled'
95
+ ? {
96
+ width: designWidth,
97
+ // The crop is in frame pixels, so the unscaled box is taller by the same factor.
98
+ height: `calc(100% / var(${SCALE_VAR}))`,
99
+ transform: `scale(var(${SCALE_VAR}))`,
100
+ transformOrigin: 'top left',
101
+ }
102
+ : // Unscaled, the screen still needs to be the containing block of anything the
103
+ // product pins with `position: fixed` (a form's action bar), or it escapes to the window.
104
+ { width: '100%', height: '100%', transform: 'translateZ(0)' };
105
+
106
+ return (
107
+ <div
108
+ ref={frameRef}
109
+ role="img"
110
+ aria-label={label}
111
+ data-app-type={appType}
112
+ className={cn('relative overflow-hidden', className)}
113
+ style={{ height }}
114
+ >
115
+ <PortalContainerContext.Provider value={portalHost}>
116
+ <CollisionBoundaryContext.Provider value={frame}>
117
+ <div
118
+ inert
119
+ aria-hidden
120
+ className={cn('ods-content-area', mode === 'pending' && 'invisible')}
121
+ style={screenStyle}
122
+ >
123
+ <div className="ods-content-scope">{children}</div>
124
+ <div ref={setPortalHost} style={{ display: 'contents' }} />
125
+ </div>
126
+ </CollisionBoundaryContext.Provider>
127
+ </PortalContainerContext.Provider>
128
+ {fade && (
129
+ <div
130
+ aria-hidden
131
+ className="pointer-events-none absolute inset-x-0 bottom-0 h-16 bg-gradient-to-t from-ods-bg to-transparent"
132
+ />
133
+ )}
134
+ </div>
135
+ );
136
+ }
@@ -56,14 +56,23 @@ interface RadioGroupBlockProps extends Omit<ComponentPropsWithoutRef<typeof Radi
56
56
  * - `grouped`: options share a single outer border with dividers between rows.
57
57
  */
58
58
  variant?: 'separated' | 'grouped';
59
+ /**
60
+ * `vertical` (default): one option per row. `horizontal`: the options side
61
+ * by side in equal columns, for a short choice on a wide form.
62
+ */
63
+ orientation?: 'vertical' | 'horizontal';
59
64
  /** Error message displayed below the group (also triggers red borders) */
60
65
  error?: string;
61
66
  itemClassName?: string;
62
67
  }
63
68
 
64
69
  const RadioGroupBlock = forwardRef<ComponentRef<typeof RadioGroupPrimitive.Root>, RadioGroupBlockProps>(
65
- ({ className, options, variant = 'separated', error, itemClassName, disabled, ...props }, ref) => {
70
+ (
71
+ { className, options, variant = 'separated', orientation = 'vertical', error, itemClassName, disabled, ...props },
72
+ ref,
73
+ ) => {
66
74
  const isGrouped = variant === 'grouped';
75
+ const isHorizontal = orientation === 'horizontal';
67
76
  return (
68
77
  <div className={cn('relative flex w-full flex-col', className)}>
69
78
  <RadioGroupPrimitive.Root
@@ -72,14 +81,16 @@ const RadioGroupBlock = forwardRef<ComponentRef<typeof RadioGroupPrimitive.Root>
72
81
  // scrolls to) the first control that failed validation. The GROUP is
73
82
  // the field here; the individual options are not separately invalid.
74
83
  data-invalid={error ? true : undefined}
84
+ orientation={orientation}
75
85
  className={cn(
76
86
  'w-full',
77
87
  isGrouped
78
88
  ? cn(
79
- 'flex flex-col overflow-hidden rounded-[6px] border bg-ods-card',
89
+ 'flex overflow-hidden rounded-[6px] border bg-ods-card',
90
+ isHorizontal ? 'flex-row items-stretch' : 'flex-col',
80
91
  error ? 'border-ods-error' : 'border-ods-border',
81
92
  )
82
- : 'grid gap-2',
93
+ : cn('grid gap-2', isHorizontal && 'auto-cols-fr grid-flow-col'),
83
94
  )}
84
95
  disabled={disabled}
85
96
  {...props}
@@ -95,6 +106,7 @@ const RadioGroupBlock = forwardRef<ComponentRef<typeof RadioGroupPrimitive.Root>
95
106
  aria-disabled={isDisabled || undefined}
96
107
  className={cn(
97
108
  'flex w-full items-center gap-3',
109
+ isHorizontal && 'min-w-0 flex-1',
98
110
  'transition-colors duration-200',
99
111
  isDisabled ? 'cursor-not-allowed' : 'cursor-pointer',
100
112
  // Hover / active move the BACKGROUND only, like Input and
@@ -104,7 +116,7 @@ const RadioGroupBlock = forwardRef<ComponentRef<typeof RadioGroupPrimitive.Root>
104
116
  isGrouped
105
117
  ? cn(
106
118
  'bg-ods-card px-[var(--spacing-system-sf)] py-[var(--spacing-system-xs,8px)]',
107
- !isLast && 'border-b',
119
+ !isLast && (isHorizontal ? 'border-r' : 'border-b'),
108
120
  error ? 'border-ods-error' : 'border-ods-border',
109
121
  )
110
122
  : cn(
@@ -8,6 +8,18 @@ import { Chevron02LeftIcon } from '../icons-v2-generated/arrows/chevron-02-left-
8
8
  import { Chevron02RightIcon } from '../icons-v2-generated/arrows/chevron-02-right-icon';
9
9
  import { PlaybackToggle } from './playback-toggle';
10
10
 
11
+ /** The row under the track: the dots, the counter, the pause and the two arrows (the arrows set its height). */
12
+ const SNAP_CAROUSEL_CONTROLS_CLASS = 'mt-3 flex items-center gap-2';
13
+
14
+ /**
15
+ * The carousel's controls row while its slides load: the same box (margin and
16
+ * height), empty. A skeleton of a carousel is its slides' skeleton over this,
17
+ * so the block keeps its height when the slides land.
18
+ */
19
+ export function SnapCarouselControlsSkeleton({ className }: { className?: string }) {
20
+ return <div aria-hidden className={cn(SNAP_CAROUSEL_CONTROLS_CLASS, 'h-11', className)} />;
21
+ }
22
+
11
23
  export interface SnapCarouselProps<T> {
12
24
  items: readonly T[];
13
25
  renderItem: (item: T, index: number) => ReactNode;
@@ -23,6 +35,8 @@ export interface SnapCarouselProps<T> {
23
35
  slideClassName?: string;
24
36
  prevLabel?: string;
25
37
  nextLabel?: string;
38
+ /** A slide to bring into view whenever this value changes (a link that names it). Only the track moves, never the page. */
39
+ focusIndex?: number;
26
40
  className?: string;
27
41
  }
28
42
 
@@ -69,6 +83,7 @@ export function SnapCarousel<T>({
69
83
  slideClassName = 'basis-[300px]',
70
84
  prevLabel = 'Previous',
71
85
  nextLabel = 'Next',
86
+ focusIndex,
72
87
  className,
73
88
  }: SnapCarouselProps<T>) {
74
89
  const trackRef = useRef<HTMLDivElement | null>(null);
@@ -95,6 +110,16 @@ export function SnapCarousel<T>({
95
110
  [count, slideStep],
96
111
  );
97
112
 
113
+ // Only a change of `focusIndex` moves the track: `goTo` is read through a ref,
114
+ // so more items arriving never pulls a visitor back to a slide named earlier.
115
+ const goToRef = useRef(goTo);
116
+ useEffect(() => {
117
+ goToRef.current = goTo;
118
+ }, [goTo]);
119
+ useEffect(() => {
120
+ if (focusIndex !== undefined && focusIndex >= 0) goToRef.current(focusIndex);
121
+ }, [focusIndex]);
122
+
98
123
  const onScroll = useCallback(() => {
99
124
  const track = trackRef.current;
100
125
  const step = slideStep();
@@ -162,7 +187,7 @@ export function SnapCarousel<T>({
162
187
  </div>
163
188
  ))}
164
189
  </div>
165
- <div className="mt-3 flex items-center gap-2">
190
+ <div className={SNAP_CAROUSEL_CONTROLS_CLASS}>
166
191
  <span className="flex gap-1.5" aria-hidden>
167
192
  {items.map((_, dotIndex) => (
168
193
  <span
@@ -15,6 +15,11 @@ const tagVariants = cva(['inline-flex items-center justify-center rounded-md', '
15
15
  size: {
16
16
  default: 'h-8 gap-[var(--spacing-system-xs)] p-[var(--spacing-system-xsf)] text-h5',
17
17
  large: 'h-12 gap-[var(--spacing-system-xs)] p-[var(--spacing-system-s)] font-bold text-h3',
18
+ // A sentence, not a label: body type in the case it was written in (a
19
+ // question a visitor can ask), on the same chip surface. One line, always:
20
+ // a longer sentence clips and shows whole in the label's tooltip.
21
+ sentence:
22
+ 'h-9 gap-[var(--spacing-system-xs)] px-[var(--spacing-system-sf)] py-[var(--spacing-system-xsf)] text-h6',
18
23
  },
19
24
  variant: {
20
25
  primary: ['bg-ods-accent text-ods-text-on-accent', 'hover:bg-ods-accent-hover active:bg-ods-accent-active'],
@@ -6,6 +6,7 @@ export * from './use-deferred-error';
6
6
  export * from './use-drag-and-drop-enabled';
7
7
  export * from './use-focus-trap';
8
8
  export * from './use-header-height';
9
+ export * from './use-sticky-toolbar';
9
10
  export * from './use-horizontal-scrollbar';
10
11
  export * from './use-image-edge-color';
11
12
  export * from './use-is-truncated';