@opengeni/react 4.5.0 → 4.5.1-canary.39832248373001

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 (414) hide show
  1. package/dist/app/app-state.js +24 -24
  2. package/dist/app/components/Composer.js +20 -20
  3. package/dist/app/components/agent/agent-capability-picker.js +4 -4
  4. package/dist/app/components/artifacts/artifact-library.js +17 -17
  5. package/dist/app/components/artifacts/chat-interactive-block.js +15 -15
  6. package/dist/app/components/artifacts/inline-chat-image.js +27 -27
  7. package/dist/app/components/artifacts/retained-file-preview.js +30 -30
  8. package/dist/app/components/artifacts/retained-text-preview.js +3 -3
  9. package/dist/app/components/artifacts/site-audience.js +4 -4
  10. package/dist/app/components/artifacts/site-conversations.js +20 -20
  11. package/dist/app/components/artifacts/site-data.js +19 -19
  12. package/dist/app/components/artifacts/site-publishing.js +36 -36
  13. package/dist/app/components/artifacts/site-settings.js +45 -45
  14. package/dist/app/components/billing-class-mark.js +4 -4
  15. package/dist/app/components/capabilities/capability-detail-sheet.js +9 -9
  16. package/dist/app/components/capabilities/capability-logo-source.js +9 -9
  17. package/dist/app/components/capabilities/connector-tool-permissions.js +3 -3
  18. package/dist/app/components/capabilities/native-connect-setup.js +11 -11
  19. package/dist/app/components/capabilities/perform-capability-action.js +1 -1
  20. package/dist/app/components/capabilities/prepared-mcp-setup-card.js +11 -11
  21. package/dist/app/components/capabilities/session-capability-card.js +71 -71
  22. package/dist/app/components/capabilities/session-chrome-card.js +30 -30
  23. package/dist/app/components/capabilities/session-custom-mcp-card.js +16 -16
  24. package/dist/app/components/capabilities/session-github-card.js +21 -21
  25. package/dist/app/components/capabilities/session-machine-card.js +29 -29
  26. package/dist/app/components/capabilities/use-capabilities-catalog.js +3 -3
  27. package/dist/app/components/capabilities/use-connection-accounts.js +1 -1
  28. package/dist/app/components/command-menu/chat-status.js +14 -14
  29. package/dist/app/components/command-menu/chat-switcher.js +19 -19
  30. package/dist/app/components/command-menu/command-menu.js +28 -28
  31. package/dist/app/components/command-menu/shortcut-sheet.js +10 -10
  32. package/dist/app/components/composer-capabilities-menu-body.js +3 -3
  33. package/dist/app/components/composer-mobile-plus-panel.js +19 -19
  34. package/dist/app/components/composer-mobile-plus.js +1 -1
  35. package/dist/app/components/credit-required-gate.js +1 -1
  36. package/dist/app/components/credit-required-prompt.js +10 -10
  37. package/dist/app/components/desktop/app-shots.js +1 -1
  38. package/dist/app/components/feedback.js +2 -2
  39. package/dist/app/components/follow-up-repository-menu-body.js +5 -5
  40. package/dist/app/components/follow-up-repository-picker.js +1 -1
  41. package/dist/app/components/github-app-connect-launcher.js +1 -1
  42. package/dist/app/components/knowledge/agent-learning-settings.js +3 -3
  43. package/dist/app/components/machines/connect-machine-dialog.js +16 -16
  44. package/dist/app/components/markdown.js +8 -8
  45. package/dist/app/components/message-context-pills.js +2 -2
  46. package/dist/app/components/models/models-ui.js +7 -7
  47. package/dist/app/components/pickers.js +8 -8
  48. package/dist/app/components/rail/rail-context.js +1 -1
  49. package/dist/app/components/rail/rail-sections.js +57 -57
  50. package/dist/app/components/rail/session-header.js +45 -45
  51. package/dist/app/components/rail/session-list.js +55 -55
  52. package/dist/app/components/rail/session-row-hover-details.js +21 -21
  53. package/dist/app/components/rail/session-shell.js +93 -93
  54. package/dist/app/components/rail/site-session-group-heading.js +10 -10
  55. package/dist/app/components/repository-picker.js +5 -5
  56. package/dist/app/components/secrets/session-secrets-panel.js +3 -3
  57. package/dist/app/components/session/agent-configuration-panel.js +32 -32
  58. package/dist/app/components/session/artifact-session-page.js +2 -2
  59. package/dist/app/components/session/banners.js +10 -10
  60. package/dist/app/components/session/codex-account-indicator.js +9 -9
  61. package/dist/app/components/session/editable-artifacts-workspace.js +40 -40
  62. package/dist/app/components/session/failed-session-banner.js +6 -6
  63. package/dist/app/components/session/human-input.js +51 -51
  64. package/dist/app/components/session/inspector.js +80 -80
  65. package/dist/app/components/session/message-actions.js +2 -2
  66. package/dist/app/components/session/message-resource-attachments.js +18 -18
  67. package/dist/app/components/session/model-account-indicator.js +8 -8
  68. package/dist/app/components/session/model-context-inspector.js +2 -2
  69. package/dist/app/components/session/new-session-settings-menu.js +10 -10
  70. package/dist/app/components/session/sandbox-switcher.js +9 -9
  71. package/dist/app/components/session/sandbox-workspace.js +68 -68
  72. package/dist/app/components/session/search-markdown-highlight.js +9 -9
  73. package/dist/app/components/session/search-results-view.js +10 -10
  74. package/dist/app/components/session/session-admin-access.js +9 -9
  75. package/dist/app/components/session/session-admission-notice.js +2 -2
  76. package/dist/app/components/session/session-machine-access-notice.js +2 -2
  77. package/dist/app/components/session/session-retention.js +4 -4
  78. package/dist/app/components/session/session-search-dialog.js +10 -10
  79. package/dist/app/components/session/session-skill-reviews.js +1 -1
  80. package/dist/app/components/session/session-tenancy-control.js +22 -22
  81. package/dist/app/components/session/session-usage-limit-section.js +9 -9
  82. package/dist/app/components/session/session-wait-status.js +9 -9
  83. package/dist/app/components/session/subagents.js +13 -13
  84. package/dist/app/components/session-connectors-menu-body.js +5 -5
  85. package/dist/app/components/settings/row-select.js +1 -1
  86. package/dist/app/components/transcription-settings.js +2 -2
  87. package/dist/app/components/ui/destructive-confirm.js +6 -6
  88. package/dist/app/components/usage/usage-entry.js +4 -4
  89. package/dist/app/components/workspace-composer-plus.js +18 -18
  90. package/dist/app/embed/session-app.js +255 -255
  91. package/dist/app/lib/actions/actions-provider.js +10 -10
  92. package/dist/app/lib/codex-usage-query.js +2 -2
  93. package/dist/app/lib/composer-connectors.js +10 -10
  94. package/dist/app/lib/events.js +14 -14
  95. package/dist/app/lib/session-branch-cache.js +11 -11
  96. package/dist/app/lib/session-create.js +2 -2
  97. package/dist/app/lib/session-group-pagination.js +11 -11
  98. package/dist/app/lib/session-hover-facts.js +12 -12
  99. package/dist/app/lib/session-model.js +3 -3
  100. package/dist/app/lib/session-rail.js +9 -9
  101. package/dist/app/lib/session-rename.js +3 -3
  102. package/dist/app/lib/sessions-group.js +11 -11
  103. package/dist/app/lib/turn-failure-analytics.js +1 -1
  104. package/dist/app/lib/use-duplicate-site.js +2 -2
  105. package/dist/app/lib/use-follow-up-repositories.js +3 -3
  106. package/dist/app/lib/use-workspace-machines.js +2 -2
  107. package/dist/app/lib/use-workspace-model-catalog.js +3 -3
  108. package/dist/app/lib/use-workspace-rigs.js +3 -3
  109. package/dist/app/lib/workspace-navigation-preference.js +1 -1
  110. package/dist/app/lib/workspace-scope-context.js +1 -1
  111. package/dist/app/routes/artifacts.js +125 -125
  112. package/dist/app/routes/retained-artifact.js +64 -64
  113. package/dist/app/routes/session-unavailable.js +3 -3
  114. package/dist/app/routes/session.js +160 -160
  115. package/dist/app/routes/sessions-index-hydration.js +3 -3
  116. package/dist/app/routes/sessions-index.js +112 -112
  117. package/dist/app/routes/site-view.js +83 -83
  118. package/dist/artifacts-document.js +2 -2
  119. package/dist/artifacts-presentation.js +2 -2
  120. package/dist/artifacts-spreadsheet.js +2 -2
  121. package/dist/artifacts.js +36 -36
  122. package/dist/{browser-viewer-QMCNV4RI.js → browser-viewer-VPK3CV2H.js} +6 -6
  123. package/dist/{chat-interactive-block-PMIAUXSO.js → chat-interactive-block-AMDSW656.js} +5 -5
  124. package/dist/{chunk-3STBLX4O.js → chunk-25LWDG5D.js} +5 -5
  125. package/dist/{chunk-MCTTONOW.js → chunk-2CKVVAGP.js} +22 -22
  126. package/dist/{chunk-J7FBBLHF.js → chunk-2DL6NJP5.js} +37 -37
  127. package/dist/{chunk-CFFNT2OY.js → chunk-3GLAPCVI.js} +8 -8
  128. package/dist/{chunk-BXQYAAVE.js → chunk-3XOISKZC.js} +4 -4
  129. package/dist/{chunk-N3ZP4IDU.js → chunk-45WYYFP6.js} +2 -2
  130. package/dist/{chunk-52WK2GGK.js → chunk-4MQLGMV2.js} +7 -7
  131. package/dist/{chunk-MXLKI7BI.js → chunk-4U4GXWXS.js} +2 -2
  132. package/dist/{chunk-3RMKPHBL.js → chunk-5HIOVXOX.js} +2 -2
  133. package/dist/{chunk-5W6ZDKRR.js → chunk-5M23GZA2.js} +4 -4
  134. package/dist/{chunk-S2U4CDAC.js → chunk-6AFSZKZA.js} +149 -149
  135. package/dist/chunk-6AFSZKZA.js.map +1 -0
  136. package/dist/{chunk-UUGR3X5I.js → chunk-6MRY2RUZ.js} +5 -5
  137. package/dist/{chunk-ZVVT72MT.js → chunk-6O4VWKSO.js} +2 -2
  138. package/dist/{chunk-FTX5CNHA.js → chunk-767WCGAX.js} +4 -4
  139. package/dist/{chunk-5JHRMUAZ.js → chunk-7IYAHFPE.js} +11 -11
  140. package/dist/{chunk-EJ7WARW7.js → chunk-7J7PZB4S.js} +2 -2
  141. package/dist/{chunk-RIYZFKIM.js → chunk-7PUFAH4I.js} +38 -38
  142. package/dist/{chunk-KEXYBG7Q.js → chunk-7R2JQHBX.js} +2 -2
  143. package/dist/{chunk-TV6BWONY.js → chunk-7VN6VC3D.js} +2 -2
  144. package/dist/{chunk-5FEN3KYH.js → chunk-A2E3ZF6N.js} +11 -11
  145. package/dist/{chunk-SM5QX6UK.js → chunk-A2EWJQXX.js} +4 -4
  146. package/dist/{chunk-UP7I3W6O.js → chunk-A6CK4ENG.js} +54 -54
  147. package/dist/{chunk-TIQPKOFW.js → chunk-A6T4FGE7.js} +2 -2
  148. package/dist/{chunk-7P4AQMGA.js → chunk-AOUCHCSB.js} +10 -10
  149. package/dist/{chunk-RFLYID6H.js → chunk-AT4K4F6S.js} +4 -4
  150. package/dist/{chunk-YV56F4UP.js → chunk-AW3QEFOF.js} +179 -179
  151. package/dist/chunk-AW3QEFOF.js.map +1 -0
  152. package/dist/{chunk-CMLJSF2F.js → chunk-BLPXOHG6.js} +11 -11
  153. package/dist/{chunk-LF5CBAOS.js → chunk-C535KSTY.js} +4 -4
  154. package/dist/{chunk-4YXAQMTD.js → chunk-CB574ERL.js} +10 -10
  155. package/dist/{chunk-552UYIQ7.js → chunk-CDUDKETD.js} +19 -19
  156. package/dist/{chunk-PCFK7HKD.js → chunk-D3RK3NGM.js} +17 -17
  157. package/dist/{chunk-LHLK7FUA.js → chunk-D64Z4V26.js} +2 -2
  158. package/dist/{chunk-JO6R5EXF.js → chunk-DFXZYNTX.js} +4 -4
  159. package/dist/{chunk-4RMN4E2Y.js → chunk-DKCX643S.js} +13 -13
  160. package/dist/{chunk-CD3MO3IC.js → chunk-E36IC3LU.js} +2 -2
  161. package/dist/{chunk-7XO7YKPC.js → chunk-ECHYJP63.js} +70 -70
  162. package/dist/{chunk-QFMLAT7L.js → chunk-EH7TTYE6.js} +184 -184
  163. package/dist/{chunk-7KIENXRE.js → chunk-EMCB6XKU.js} +1 -1
  164. package/dist/{chunk-FFNPUSVO.js → chunk-ERG355NM.js} +6 -6
  165. package/dist/{chunk-22JFMNMF.js → chunk-F2RMKGDQ.js} +4 -4
  166. package/dist/{chunk-7TCT7KPQ.js → chunk-F33EDYS7.js} +224 -224
  167. package/dist/chunk-F33EDYS7.js.map +1 -0
  168. package/dist/{chunk-4VK2R5QC.js → chunk-F3FN6DO6.js} +2 -2
  169. package/dist/{chunk-62VER7O4.js → chunk-F3NERYBQ.js} +6 -6
  170. package/dist/{chunk-S37GP7LX.js → chunk-FB3B45FP.js} +18 -18
  171. package/dist/{chunk-U6MPB3K6.js → chunk-FVL4B552.js} +7 -7
  172. package/dist/{chunk-WCMG4HYI.js → chunk-G2BX56CN.js} +10 -10
  173. package/dist/{chunk-EQE3MNQN.js → chunk-GFSOXB2K.js} +5 -5
  174. package/dist/{chunk-3X5FKDYQ.js → chunk-GZGQHQI7.js} +24 -24
  175. package/dist/{chunk-GGV4NSG3.js → chunk-H4IE2PYF.js} +6 -6
  176. package/dist/{chunk-J22HD2PB.js → chunk-HNNM2GDN.js} +5 -5
  177. package/dist/{chunk-GXW2I2M2.js → chunk-HPB4KSV3.js} +2 -2
  178. package/dist/{chunk-YEROLKOA.js → chunk-HSQRYJ4P.js} +15 -15
  179. package/dist/{chunk-HU6JTNWF.js → chunk-HUXDGWAN.js} +2 -2
  180. package/dist/{chunk-ITX2TB4K.js → chunk-I66ZB6KD.js} +4 -4
  181. package/dist/{chunk-FDAV72IX.js → chunk-IC7KNOBB.js} +7 -7
  182. package/dist/{chunk-PO3BH3KQ.js → chunk-IIO2MR3B.js} +2 -2
  183. package/dist/{chunk-FWOBNL2A.js → chunk-IPPVX5GF.js} +1 -1
  184. package/dist/{chunk-4SAGYEVB.js → chunk-IUK5QGP5.js} +2 -2
  185. package/dist/{chunk-4XQC7VLT.js → chunk-JWN7SLTO.js} +11 -11
  186. package/dist/{chunk-5Y2FPLZE.js → chunk-KFWVBTUH.js} +7 -7
  187. package/dist/{chunk-JXT5QDJC.js → chunk-KNFDWNCH.js} +5 -5
  188. package/dist/{chunk-5DSKMG2I.js → chunk-LEXPBQ56.js} +4 -4
  189. package/dist/{chunk-LT4J7RHI.js → chunk-LKJ2C7PH.js} +10 -10
  190. package/dist/{chunk-XN7NSPE6.js → chunk-MJQBC7C5.js} +2 -2
  191. package/dist/{chunk-JQCGPTZ6.js → chunk-MM7OKOTE.js} +9 -9
  192. package/dist/{chunk-ULJAOMJA.js → chunk-ND2WCWXI.js} +4 -4
  193. package/dist/{chunk-EYS4ZOF5.js → chunk-NML44AW2.js} +2 -2
  194. package/dist/{chunk-TL7BOFFL.js → chunk-NQQKOJDI.js} +2 -2
  195. package/dist/{chunk-CP7ZQHBW.js → chunk-O4DYOSOL.js} +13 -13
  196. package/dist/{chunk-GRSODLVO.js → chunk-OANSIX34.js} +4 -4
  197. package/dist/{chunk-2QBYDGWO.js → chunk-OFB6TUDC.js} +7 -7
  198. package/dist/{chunk-EPWD4KRA.js → chunk-OOEO4MKY.js} +2 -2
  199. package/dist/{chunk-CDEXRJB6.js → chunk-PEKPWK5M.js} +4 -4
  200. package/dist/{chunk-4GLLWX33.js → chunk-PKEKZ2VA.js} +9 -9
  201. package/dist/{chunk-3RQUWFZT.js → chunk-PMD7V4N7.js} +65 -65
  202. package/dist/{chunk-3RQUWFZT.js.map → chunk-PMD7V4N7.js.map} +1 -1
  203. package/dist/{chunk-7FJMRJDG.js → chunk-PVR5EELP.js} +2 -2
  204. package/dist/{chunk-Y5BSA3I7.js → chunk-QBADR2FO.js} +6 -6
  205. package/dist/{chunk-22FFOHPT.js → chunk-QLIDZGPV.js} +11 -11
  206. package/dist/{chunk-JM4HQPAI.js → chunk-QZRDCFHI.js} +5 -5
  207. package/dist/{chunk-5W7KJ5NQ.js → chunk-R7XCJWCD.js} +37 -37
  208. package/dist/{chunk-GT7JFQ4E.js → chunk-RAMZTZOB.js} +111 -111
  209. package/dist/{chunk-A4BD4ZVB.js → chunk-S7PVL7XH.js} +4 -4
  210. package/dist/{chunk-I6KIQKU6.js → chunk-SCNEQFIW.js} +3 -3
  211. package/dist/{chunk-4LPA25NQ.js → chunk-SD2K5ZN5.js} +4 -4
  212. package/dist/{chunk-IDXTASGN.js → chunk-SD4PPZFB.js} +2 -2
  213. package/dist/{chunk-4HEXNAFI.js → chunk-SFAU5R5S.js} +18 -18
  214. package/dist/chunk-SFAU5R5S.js.map +1 -0
  215. package/dist/{chunk-35BC2FU2.js → chunk-SJORXXLV.js} +18 -18
  216. package/dist/{chunk-ZS2UQ3DV.js → chunk-SOXZ4LGS.js} +4 -4
  217. package/dist/{chunk-ACL2V2KE.js → chunk-SQDPHCK2.js} +19 -19
  218. package/dist/{chunk-YJPKDRI2.js → chunk-TDIOBPLA.js} +13 -13
  219. package/dist/{chunk-RYSRFAHN.js → chunk-TEPPPAJI.js} +19 -19
  220. package/dist/{chunk-FWYEZ3LE.js → chunk-THVIT3PW.js} +37 -37
  221. package/dist/{chunk-MIECLOQC.js → chunk-TN5T5HRZ.js} +6 -6
  222. package/dist/{chunk-RQNZDTKT.js → chunk-TR4HIKJ2.js} +15 -15
  223. package/dist/{chunk-J5MEDX7C.js → chunk-U47YDYLQ.js} +8 -8
  224. package/dist/{chunk-HQWVDQXW.js → chunk-UGEWCWVV.js} +7 -7
  225. package/dist/{chunk-YXA2EKV3.js → chunk-UUSAOIJR.js} +3 -3
  226. package/dist/{chunk-YVBHGMKC.js → chunk-VAIESMPY.js} +4 -4
  227. package/dist/{chunk-SY2AAZNB.js → chunk-VO6RVVP7.js} +1 -1
  228. package/dist/{chunk-3GU7AWG7.js → chunk-VPNXQUUS.js} +17 -17
  229. package/dist/{chunk-WKHUZIOW.js → chunk-VW3BBTMA.js} +1 -1
  230. package/dist/{chunk-7NPCEBZE.js → chunk-VWSFA4LJ.js} +4 -4
  231. package/dist/{chunk-GZS37O3G.js → chunk-WBPQ7OPC.js} +1 -1
  232. package/dist/{chunk-5FA455GR.js → chunk-WNG757ID.js} +4 -4
  233. package/dist/{chunk-G4HQUBO4.js → chunk-WSLPZ43N.js} +12 -12
  234. package/dist/{chunk-73WI7FL2.js → chunk-WUHB422G.js} +18 -18
  235. package/dist/{chunk-Z7IGO5EA.js → chunk-WVX5AQXS.js} +2 -2
  236. package/dist/{chunk-2NC7NZCE.js → chunk-WWOHORRO.js} +5 -5
  237. package/dist/{chunk-SSOO4GWN.js → chunk-WYDZP5F2.js} +114 -114
  238. package/dist/{chunk-SSOO4GWN.js.map → chunk-WYDZP5F2.js.map} +1 -1
  239. package/dist/{chunk-V4QZ7UBK.js → chunk-WYEPUXGL.js} +2 -2
  240. package/dist/{chunk-ZEIFJ6PX.js → chunk-XN6CALYY.js} +8 -8
  241. package/dist/{chunk-VH5EGTH2.js → chunk-XNACICAB.js} +3 -3
  242. package/dist/{chunk-YYCOSTUU.js → chunk-XU4I47IP.js} +16 -16
  243. package/dist/{chunk-GHHM6WN4.js → chunk-YG3IJCM2.js} +3 -3
  244. package/dist/{chunk-NEK4WB5P.js → chunk-YGSJWWT3.js} +2 -2
  245. package/dist/{chunk-IBA5FMRE.js → chunk-YO64YVYL.js} +133 -133
  246. package/dist/{chunk-XMNUZUUA.js → chunk-Z2DAWUO3.js} +6 -6
  247. package/dist/{chunk-BCM7C3MJ.js → chunk-Z4GJB24B.js} +8 -8
  248. package/dist/{chunk-UYNCMZX5.js → chunk-ZX5H7LWD.js} +3 -3
  249. package/dist/composer.js +12 -12
  250. package/dist/{computer-viewer-25AJIDYA.js → computer-viewer-VA5JONUH.js} +6 -6
  251. package/dist/connect.js +8 -8
  252. package/dist/{embedded-new-voice-RZZEJT6M.js → embedded-new-voice-6BILAOUG.js} +6 -6
  253. package/dist/{embedded-voice-6OKSSPLW.js → embedded-voice-UDE4JRKB.js} +6 -6
  254. package/dist/index.js +215 -215
  255. package/dist/interaction.js +8 -8
  256. package/dist/{latest-question-2PFWQSSG.js → latest-question-4WDBECXB.js} +2 -2
  257. package/dist/machines.js +1 -1
  258. package/dist/{model-policy-picker-menu-VVFGGAI6.js → model-policy-picker-menu-NRTO6FRP.js} +5 -5
  259. package/dist/native-previews.js +3 -3
  260. package/dist/{queue-surface-implementation-4SHOQPQQ.js → queue-surface-implementation-H4XSNHZE.js} +4 -4
  261. package/dist/realtime.js +5 -5
  262. package/dist/{sandbox-files-CCOTGXXA.js → sandbox-files-IEHODU35.js} +8 -8
  263. package/dist/session-app.js +255 -255
  264. package/dist/session-list-model.js +2 -2
  265. package/dist/session-ui.js +64 -64
  266. package/dist/session.js +18 -18
  267. package/dist/terminal.js +1 -1
  268. package/dist/{timeline-annotation-markers-KHNYNY2J.js → timeline-annotation-markers-ZSOFW7PG.js} +4 -4
  269. package/dist/{timeline-annotation-selection-AXEDJHBP.js → timeline-annotation-selection-YWV2UC34.js} +6 -6
  270. package/dist/{timeline-annotations-dialog-AV4ZBXRC.js → timeline-annotations-dialog-ZWQVX2HI.js} +7 -7
  271. package/dist/timeline-model.js +27 -27
  272. package/dist/ui/access-list.js +20 -20
  273. package/dist/ui/choice-cards.js +2 -2
  274. package/dist/ui/detail-page.js +2 -2
  275. package/dist/ui/detail-sheet.js +2 -2
  276. package/dist/ui/diff-view.js +2 -2
  277. package/dist/ui/disclosure.js +4 -4
  278. package/dist/ui/flush-form-page.js +3 -3
  279. package/dist/ui/form-dialog.js +2 -2
  280. package/dist/ui/list-row.js +5 -5
  281. package/dist/ui/revision-history.js +11 -11
  282. package/dist/ui/role-select.js +6 -6
  283. package/dist/ui/settings-nav.js +3 -3
  284. package/dist/workbench.js +9 -9
  285. package/package.json +4 -4
  286. package/dist/chunk-4HEXNAFI.js.map +0 -1
  287. package/dist/chunk-7TCT7KPQ.js.map +0 -1
  288. package/dist/chunk-S2U4CDAC.js.map +0 -1
  289. package/dist/chunk-YV56F4UP.js.map +0 -1
  290. /package/dist/{browser-viewer-QMCNV4RI.js.map → browser-viewer-VPK3CV2H.js.map} +0 -0
  291. /package/dist/{chat-interactive-block-PMIAUXSO.js.map → chat-interactive-block-AMDSW656.js.map} +0 -0
  292. /package/dist/{chunk-3STBLX4O.js.map → chunk-25LWDG5D.js.map} +0 -0
  293. /package/dist/{chunk-MCTTONOW.js.map → chunk-2CKVVAGP.js.map} +0 -0
  294. /package/dist/{chunk-J7FBBLHF.js.map → chunk-2DL6NJP5.js.map} +0 -0
  295. /package/dist/{chunk-CFFNT2OY.js.map → chunk-3GLAPCVI.js.map} +0 -0
  296. /package/dist/{chunk-BXQYAAVE.js.map → chunk-3XOISKZC.js.map} +0 -0
  297. /package/dist/{chunk-N3ZP4IDU.js.map → chunk-45WYYFP6.js.map} +0 -0
  298. /package/dist/{chunk-52WK2GGK.js.map → chunk-4MQLGMV2.js.map} +0 -0
  299. /package/dist/{chunk-MXLKI7BI.js.map → chunk-4U4GXWXS.js.map} +0 -0
  300. /package/dist/{chunk-3RMKPHBL.js.map → chunk-5HIOVXOX.js.map} +0 -0
  301. /package/dist/{chunk-5W6ZDKRR.js.map → chunk-5M23GZA2.js.map} +0 -0
  302. /package/dist/{chunk-UUGR3X5I.js.map → chunk-6MRY2RUZ.js.map} +0 -0
  303. /package/dist/{chunk-ZVVT72MT.js.map → chunk-6O4VWKSO.js.map} +0 -0
  304. /package/dist/{chunk-FTX5CNHA.js.map → chunk-767WCGAX.js.map} +0 -0
  305. /package/dist/{chunk-5JHRMUAZ.js.map → chunk-7IYAHFPE.js.map} +0 -0
  306. /package/dist/{chunk-EJ7WARW7.js.map → chunk-7J7PZB4S.js.map} +0 -0
  307. /package/dist/{chunk-RIYZFKIM.js.map → chunk-7PUFAH4I.js.map} +0 -0
  308. /package/dist/{chunk-KEXYBG7Q.js.map → chunk-7R2JQHBX.js.map} +0 -0
  309. /package/dist/{chunk-TV6BWONY.js.map → chunk-7VN6VC3D.js.map} +0 -0
  310. /package/dist/{chunk-5FEN3KYH.js.map → chunk-A2E3ZF6N.js.map} +0 -0
  311. /package/dist/{chunk-SM5QX6UK.js.map → chunk-A2EWJQXX.js.map} +0 -0
  312. /package/dist/{chunk-UP7I3W6O.js.map → chunk-A6CK4ENG.js.map} +0 -0
  313. /package/dist/{chunk-TIQPKOFW.js.map → chunk-A6T4FGE7.js.map} +0 -0
  314. /package/dist/{chunk-7P4AQMGA.js.map → chunk-AOUCHCSB.js.map} +0 -0
  315. /package/dist/{chunk-RFLYID6H.js.map → chunk-AT4K4F6S.js.map} +0 -0
  316. /package/dist/{chunk-CMLJSF2F.js.map → chunk-BLPXOHG6.js.map} +0 -0
  317. /package/dist/{chunk-LF5CBAOS.js.map → chunk-C535KSTY.js.map} +0 -0
  318. /package/dist/{chunk-4YXAQMTD.js.map → chunk-CB574ERL.js.map} +0 -0
  319. /package/dist/{chunk-552UYIQ7.js.map → chunk-CDUDKETD.js.map} +0 -0
  320. /package/dist/{chunk-PCFK7HKD.js.map → chunk-D3RK3NGM.js.map} +0 -0
  321. /package/dist/{chunk-LHLK7FUA.js.map → chunk-D64Z4V26.js.map} +0 -0
  322. /package/dist/{chunk-JO6R5EXF.js.map → chunk-DFXZYNTX.js.map} +0 -0
  323. /package/dist/{chunk-4RMN4E2Y.js.map → chunk-DKCX643S.js.map} +0 -0
  324. /package/dist/{chunk-CD3MO3IC.js.map → chunk-E36IC3LU.js.map} +0 -0
  325. /package/dist/{chunk-7XO7YKPC.js.map → chunk-ECHYJP63.js.map} +0 -0
  326. /package/dist/{chunk-QFMLAT7L.js.map → chunk-EH7TTYE6.js.map} +0 -0
  327. /package/dist/{chunk-7KIENXRE.js.map → chunk-EMCB6XKU.js.map} +0 -0
  328. /package/dist/{chunk-FFNPUSVO.js.map → chunk-ERG355NM.js.map} +0 -0
  329. /package/dist/{chunk-22JFMNMF.js.map → chunk-F2RMKGDQ.js.map} +0 -0
  330. /package/dist/{chunk-4VK2R5QC.js.map → chunk-F3FN6DO6.js.map} +0 -0
  331. /package/dist/{chunk-62VER7O4.js.map → chunk-F3NERYBQ.js.map} +0 -0
  332. /package/dist/{chunk-S37GP7LX.js.map → chunk-FB3B45FP.js.map} +0 -0
  333. /package/dist/{chunk-U6MPB3K6.js.map → chunk-FVL4B552.js.map} +0 -0
  334. /package/dist/{chunk-WCMG4HYI.js.map → chunk-G2BX56CN.js.map} +0 -0
  335. /package/dist/{chunk-EQE3MNQN.js.map → chunk-GFSOXB2K.js.map} +0 -0
  336. /package/dist/{chunk-3X5FKDYQ.js.map → chunk-GZGQHQI7.js.map} +0 -0
  337. /package/dist/{chunk-GGV4NSG3.js.map → chunk-H4IE2PYF.js.map} +0 -0
  338. /package/dist/{chunk-J22HD2PB.js.map → chunk-HNNM2GDN.js.map} +0 -0
  339. /package/dist/{chunk-GXW2I2M2.js.map → chunk-HPB4KSV3.js.map} +0 -0
  340. /package/dist/{chunk-YEROLKOA.js.map → chunk-HSQRYJ4P.js.map} +0 -0
  341. /package/dist/{chunk-HU6JTNWF.js.map → chunk-HUXDGWAN.js.map} +0 -0
  342. /package/dist/{chunk-ITX2TB4K.js.map → chunk-I66ZB6KD.js.map} +0 -0
  343. /package/dist/{chunk-FDAV72IX.js.map → chunk-IC7KNOBB.js.map} +0 -0
  344. /package/dist/{chunk-PO3BH3KQ.js.map → chunk-IIO2MR3B.js.map} +0 -0
  345. /package/dist/{chunk-FWOBNL2A.js.map → chunk-IPPVX5GF.js.map} +0 -0
  346. /package/dist/{chunk-4SAGYEVB.js.map → chunk-IUK5QGP5.js.map} +0 -0
  347. /package/dist/{chunk-4XQC7VLT.js.map → chunk-JWN7SLTO.js.map} +0 -0
  348. /package/dist/{chunk-5Y2FPLZE.js.map → chunk-KFWVBTUH.js.map} +0 -0
  349. /package/dist/{chunk-JXT5QDJC.js.map → chunk-KNFDWNCH.js.map} +0 -0
  350. /package/dist/{chunk-5DSKMG2I.js.map → chunk-LEXPBQ56.js.map} +0 -0
  351. /package/dist/{chunk-LT4J7RHI.js.map → chunk-LKJ2C7PH.js.map} +0 -0
  352. /package/dist/{chunk-XN7NSPE6.js.map → chunk-MJQBC7C5.js.map} +0 -0
  353. /package/dist/{chunk-JQCGPTZ6.js.map → chunk-MM7OKOTE.js.map} +0 -0
  354. /package/dist/{chunk-ULJAOMJA.js.map → chunk-ND2WCWXI.js.map} +0 -0
  355. /package/dist/{chunk-EYS4ZOF5.js.map → chunk-NML44AW2.js.map} +0 -0
  356. /package/dist/{chunk-TL7BOFFL.js.map → chunk-NQQKOJDI.js.map} +0 -0
  357. /package/dist/{chunk-CP7ZQHBW.js.map → chunk-O4DYOSOL.js.map} +0 -0
  358. /package/dist/{chunk-GRSODLVO.js.map → chunk-OANSIX34.js.map} +0 -0
  359. /package/dist/{chunk-2QBYDGWO.js.map → chunk-OFB6TUDC.js.map} +0 -0
  360. /package/dist/{chunk-EPWD4KRA.js.map → chunk-OOEO4MKY.js.map} +0 -0
  361. /package/dist/{chunk-CDEXRJB6.js.map → chunk-PEKPWK5M.js.map} +0 -0
  362. /package/dist/{chunk-4GLLWX33.js.map → chunk-PKEKZ2VA.js.map} +0 -0
  363. /package/dist/{chunk-7FJMRJDG.js.map → chunk-PVR5EELP.js.map} +0 -0
  364. /package/dist/{chunk-Y5BSA3I7.js.map → chunk-QBADR2FO.js.map} +0 -0
  365. /package/dist/{chunk-22FFOHPT.js.map → chunk-QLIDZGPV.js.map} +0 -0
  366. /package/dist/{chunk-JM4HQPAI.js.map → chunk-QZRDCFHI.js.map} +0 -0
  367. /package/dist/{chunk-5W7KJ5NQ.js.map → chunk-R7XCJWCD.js.map} +0 -0
  368. /package/dist/{chunk-GT7JFQ4E.js.map → chunk-RAMZTZOB.js.map} +0 -0
  369. /package/dist/{chunk-A4BD4ZVB.js.map → chunk-S7PVL7XH.js.map} +0 -0
  370. /package/dist/{chunk-I6KIQKU6.js.map → chunk-SCNEQFIW.js.map} +0 -0
  371. /package/dist/{chunk-4LPA25NQ.js.map → chunk-SD2K5ZN5.js.map} +0 -0
  372. /package/dist/{chunk-IDXTASGN.js.map → chunk-SD4PPZFB.js.map} +0 -0
  373. /package/dist/{chunk-35BC2FU2.js.map → chunk-SJORXXLV.js.map} +0 -0
  374. /package/dist/{chunk-ZS2UQ3DV.js.map → chunk-SOXZ4LGS.js.map} +0 -0
  375. /package/dist/{chunk-ACL2V2KE.js.map → chunk-SQDPHCK2.js.map} +0 -0
  376. /package/dist/{chunk-YJPKDRI2.js.map → chunk-TDIOBPLA.js.map} +0 -0
  377. /package/dist/{chunk-RYSRFAHN.js.map → chunk-TEPPPAJI.js.map} +0 -0
  378. /package/dist/{chunk-FWYEZ3LE.js.map → chunk-THVIT3PW.js.map} +0 -0
  379. /package/dist/{chunk-MIECLOQC.js.map → chunk-TN5T5HRZ.js.map} +0 -0
  380. /package/dist/{chunk-RQNZDTKT.js.map → chunk-TR4HIKJ2.js.map} +0 -0
  381. /package/dist/{chunk-J5MEDX7C.js.map → chunk-U47YDYLQ.js.map} +0 -0
  382. /package/dist/{chunk-HQWVDQXW.js.map → chunk-UGEWCWVV.js.map} +0 -0
  383. /package/dist/{chunk-YXA2EKV3.js.map → chunk-UUSAOIJR.js.map} +0 -0
  384. /package/dist/{chunk-YVBHGMKC.js.map → chunk-VAIESMPY.js.map} +0 -0
  385. /package/dist/{chunk-SY2AAZNB.js.map → chunk-VO6RVVP7.js.map} +0 -0
  386. /package/dist/{chunk-3GU7AWG7.js.map → chunk-VPNXQUUS.js.map} +0 -0
  387. /package/dist/{chunk-WKHUZIOW.js.map → chunk-VW3BBTMA.js.map} +0 -0
  388. /package/dist/{chunk-7NPCEBZE.js.map → chunk-VWSFA4LJ.js.map} +0 -0
  389. /package/dist/{chunk-GZS37O3G.js.map → chunk-WBPQ7OPC.js.map} +0 -0
  390. /package/dist/{chunk-5FA455GR.js.map → chunk-WNG757ID.js.map} +0 -0
  391. /package/dist/{chunk-G4HQUBO4.js.map → chunk-WSLPZ43N.js.map} +0 -0
  392. /package/dist/{chunk-73WI7FL2.js.map → chunk-WUHB422G.js.map} +0 -0
  393. /package/dist/{chunk-Z7IGO5EA.js.map → chunk-WVX5AQXS.js.map} +0 -0
  394. /package/dist/{chunk-2NC7NZCE.js.map → chunk-WWOHORRO.js.map} +0 -0
  395. /package/dist/{chunk-V4QZ7UBK.js.map → chunk-WYEPUXGL.js.map} +0 -0
  396. /package/dist/{chunk-ZEIFJ6PX.js.map → chunk-XN6CALYY.js.map} +0 -0
  397. /package/dist/{chunk-VH5EGTH2.js.map → chunk-XNACICAB.js.map} +0 -0
  398. /package/dist/{chunk-YYCOSTUU.js.map → chunk-XU4I47IP.js.map} +0 -0
  399. /package/dist/{chunk-GHHM6WN4.js.map → chunk-YG3IJCM2.js.map} +0 -0
  400. /package/dist/{chunk-NEK4WB5P.js.map → chunk-YGSJWWT3.js.map} +0 -0
  401. /package/dist/{chunk-IBA5FMRE.js.map → chunk-YO64YVYL.js.map} +0 -0
  402. /package/dist/{chunk-XMNUZUUA.js.map → chunk-Z2DAWUO3.js.map} +0 -0
  403. /package/dist/{chunk-BCM7C3MJ.js.map → chunk-Z4GJB24B.js.map} +0 -0
  404. /package/dist/{chunk-UYNCMZX5.js.map → chunk-ZX5H7LWD.js.map} +0 -0
  405. /package/dist/{computer-viewer-25AJIDYA.js.map → computer-viewer-VA5JONUH.js.map} +0 -0
  406. /package/dist/{embedded-new-voice-RZZEJT6M.js.map → embedded-new-voice-6BILAOUG.js.map} +0 -0
  407. /package/dist/{embedded-voice-6OKSSPLW.js.map → embedded-voice-UDE4JRKB.js.map} +0 -0
  408. /package/dist/{latest-question-2PFWQSSG.js.map → latest-question-4WDBECXB.js.map} +0 -0
  409. /package/dist/{model-policy-picker-menu-VVFGGAI6.js.map → model-policy-picker-menu-NRTO6FRP.js.map} +0 -0
  410. /package/dist/{queue-surface-implementation-4SHOQPQQ.js.map → queue-surface-implementation-H4XSNHZE.js.map} +0 -0
  411. /package/dist/{sandbox-files-CCOTGXXA.js.map → sandbox-files-IEHODU35.js.map} +0 -0
  412. /package/dist/{timeline-annotation-markers-KHNYNY2J.js.map → timeline-annotation-markers-ZSOFW7PG.js.map} +0 -0
  413. /package/dist/{timeline-annotation-selection-AXEDJHBP.js.map → timeline-annotation-selection-YWV2UC34.js.map} +0 -0
  414. /package/dist/{timeline-annotations-dialog-AV4ZBXRC.js.map → timeline-annotations-dialog-ZWQVX2HI.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/artifacts/artifact-surface.tsx","../src/components/artifacts/editable-artifact-ui.tsx","../src/components/artifacts/artifact-submissions.tsx","../src/components/artifacts/artifact-download.tsx"],"sourcesContent":["import {\n FileSpreadsheetIcon,\n FileTextIcon,\n LoaderCircleIcon,\n PresentationIcon,\n} from \"lucide-react\";\nimport type { ReactNode } from \"react\";\n\nimport { cn } from \"../../lib/cn\";\nimport { useOpenGeniText, type OpenGeniText } from \"../../messages/runtime\";\n\nexport type ArtifactModality = \"spreadsheet\" | \"document\" | \"presentation\";\n\nexport type ArtifactSurfaceProps = {\n modality: ArtifactModality;\n title: string;\n /** An embedding host may already provide the artifact title and navigation. */\n showHeader?: boolean | undefined;\n subtitle?: ReactNode | undefined;\n actions?: ReactNode | undefined;\n children: ReactNode;\n footer?: ReactNode | undefined;\n busy?: boolean | undefined;\n className?: string | undefined;\n};\n\nconst MODALITY_LABEL = (t: OpenGeniText): Record<ArtifactModality, string> => ({\n spreadsheet: t(\"artifacts.artifactSurface.spreadsheet\"),\n document: t(\"artifacts.artifactSurface.document\"),\n presentation: t(\"artifacts.artifactSurface.presentation\"),\n});\n\nfunction ModalityIcon({ modality }: { modality: ArtifactModality }) {\n switch (modality) {\n case \"spreadsheet\":\n return <FileSpreadsheetIcon className=\"size-4\" />;\n case \"document\":\n return <FileTextIcon className=\"size-4\" />;\n case \"presentation\":\n return <PresentationIcon className=\"size-4\" />;\n }\n}\n\n/**\n * Modality-neutral artifact chrome. It deliberately owns no file, session, or\n * persistence state: hosts can use the same surface for a local draft, a\n * durable Opengeni artifact, or a collaborative projection.\n */\nexport function ArtifactSurface({\n modality,\n title,\n showHeader = true,\n subtitle,\n actions,\n children,\n footer,\n busy = false,\n className,\n}: ArtifactSurfaceProps) {\n const t = useOpenGeniText();\n return (\n <section\n aria-label={`${MODALITY_LABEL(t)[modality]}: ${title}`}\n aria-busy={busy || undefined}\n data-og-artifact-modality={modality}\n className={cn(\n \"og-root flex h-full min-h-0 min-w-0 flex-col overflow-hidden rounded-og-lg border border-og-border bg-og-surface-1 text-og-fg shadow-og-md\",\n className,\n )}\n >\n {showHeader ? (\n <header className=\"flex min-h-11 shrink-0 items-center gap-2 border-b border-og-border bg-og-surface-2 px-3\">\n <span\n aria-hidden\n className=\"grid size-7 shrink-0 place-items-center rounded-og-sm bg-og-surface-3 text-og-fg-muted\"\n >\n <ModalityIcon modality={modality} />\n </span>\n <div className=\"min-w-0 flex-1\">\n <h2 className=\"truncate text-og-base font-medium text-og-fg\">{title}</h2>\n {subtitle ? (\n <div className=\"truncate text-og-xs text-og-fg-muted\">{subtitle}</div>\n ) : null}\n </div>\n {busy ? (\n <LoaderCircleIcon\n aria-label={t(\"artifacts.artifactSurface.updatingArtifact\")}\n className=\"size-4 shrink-0 animate-spin text-og-fg-muted\"\n />\n ) : null}\n {actions ? <div className=\"flex shrink-0 items-center gap-1\">{actions}</div> : null}\n </header>\n ) : (\n <>\n {typeof subtitle === \"string\" || typeof subtitle === \"number\" ? (\n <span role=\"status\" className=\"sr-only\">\n {subtitle}\n </span>\n ) : null}\n {actions ? (\n <div className=\"flex shrink-0 items-center justify-end gap-1 border-b border-og-border px-3 py-1\">\n {actions}\n </div>\n ) : null}\n </>\n )}\n\n <div className=\"min-h-0 min-w-0 flex-1\">{children}</div>\n\n {footer ? (\n <footer className=\"shrink-0 border-t border-og-border bg-og-surface-2\">{footer}</footer>\n ) : null}\n </section>\n );\n}\n","import type {\n EditableArtifactSession,\n EditableArtifactSyncView,\n} from \"@opengeni/sdk/editable-artifacts\";\nimport { useEffect, useState } from \"react\";\nimport { type OpenGeniText } from \"../../messages/runtime\";\nimport { useOpenGeniText } from \"../../messages/runtime\";\n\nexport function useEditableArtifactView(\n session: EditableArtifactSession,\n): EditableArtifactSyncView {\n const [view, setView] = useState(() => session.getView());\n useEffect(() => {\n setView(session.getView());\n return session.subscribe(setView);\n }, [session]);\n return view;\n}\n\n/** Changes whenever the Worker-resident speculative projection may have changed. */\nexport function editableArtifactProjectionKey(view: EditableArtifactSyncView): string {\n return [\n view.state,\n view.cursor,\n view.headSequence,\n view.pendingTransactions,\n view.blockedPending.map((entry) => `${entry.clientTransactionId}:${entry.code}`).join(\",\"),\n ].join(\":\");\n}\n\nexport function editableArtifactStatusLabel(\n t: OpenGeniText,\n view: EditableArtifactSyncView,\n): string {\n switch (view.state) {\n case \"idle\":\n case \"connecting\":\n return t(\"artifacts.editableArtifactUi.connecting\");\n case \"syncing\":\n case \"resyncing\":\n return t(\"artifacts.editableArtifactUi.syncing\");\n case \"reconnecting\":\n return t(\"artifacts.editableArtifactUi.reconnecting\");\n case \"unsupported\":\n return t(\"artifacts.editableArtifactUi.thisArtifactVersionIsNot\");\n case \"failed\":\n if (editableArtifactAccessRevoked(view)) {\n return t(\"artifacts.editableArtifactUi.youNoLongerHaveAccess\");\n }\n return view.lastError?.message ?? t(\"artifacts.editableArtifactUi.couldNotOpenThisArtifact\");\n case \"closed\":\n return t(\"artifacts.editableArtifactUi.artifactSessionClosed\");\n case \"live\":\n return view.writable\n ? t(\"artifacts.editableArtifactUi.live\")\n : t(\"artifacts.editableArtifactUi.liveReadOnly\");\n }\n}\n\n/** Revoked read authority must hide any projection retained before invalidation. */\nexport function editableArtifactAccessRevoked(view: EditableArtifactSyncView): boolean {\n if (view.state !== \"failed\" || !view.lastError) return false;\n return (view.lastError as Error & Readonly<{ code?: unknown }>).code === \"permission_changed\";\n}\n\nexport function EditableArtifactMessage({\n title,\n detail,\n retry,\n retryLabel: retryLabelProp,\n}: {\n title: string;\n detail: string;\n retry?: (() => void) | undefined;\n retryLabel?: string | undefined;\n}) {\n const t = useOpenGeniText();\n const retryLabel =\n retryLabelProp === undefined ? t(\"artifacts.editableArtifactUi.retry\") : retryLabelProp;\n return (\n <div className=\"grid h-full min-h-56 place-items-center bg-og-bg p-6 text-center\">\n <div>\n <p className=\"text-og-base font-medium text-og-fg\">{title}</p>\n <p className=\"mt-1 max-w-lg text-og-sm text-og-fg-muted\">{detail}</p>\n {retry ? (\n <button\n type=\"button\"\n onClick={retry}\n className=\"mt-3 rounded-og-sm border border-og-primary-border bg-og-primary text-og-primary-fg px-3 py-1.5 text-og-sm font-medium hover:bg-og-primary-hover outline-hidden focus-visible:ring-2 focus-visible:ring-og-accent\"\n >\n {retryLabel}\n </button>\n ) : null}\n </div>\n </div>\n );\n}\n\nexport function asEditableArtifactError(cause: unknown, fallback: string): Error {\n return cause instanceof Error ? cause : new Error(fallback);\n}\n","import type { EditableArtifactSession } from \"@opengeni/sdk/editable-artifacts\";\nimport { createContext, useContext, useState, type ReactNode } from \"react\";\n\nfunction createSubmissionQueue() {\n let pending = 0;\n const listeners = new Set<() => void>();\n const emit = () => {\n for (const listener of listeners) listener();\n };\n return {\n getPending: () => pending,\n subscribe: (listener: () => void) => {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n async run<T>(invoke: () => Promise<T>): Promise<T> {\n // The SDK's causal queue and Worker authoring precede pendingTransactions.\n // Latch synchronously so a same-event blur/click cannot export an older head.\n pending++;\n emit();\n try {\n return await invoke();\n } finally {\n pending--;\n emit();\n }\n },\n };\n}\n\nexport type ArtifactSubmissions = Readonly<{\n getPending: () => number;\n subscribe: (listener: () => void) => () => void;\n run: <T>(invoke: () => Promise<T>) => Promise<T>;\n}>;\n\nconst standaloneQueue: ArtifactSubmissions = {\n getPending: () => 0,\n subscribe: (_listener: () => void) => () => {},\n run: <T,>(invoke: () => Promise<T>) => invoke(),\n};\nconst SubmissionContext = createContext<ArtifactSubmissions | null>(null);\n\nexport function ArtifactSubmissionProvider({ children }: { children: ReactNode }) {\n const [queue] = useState(createSubmissionQueue);\n return <SubmissionContext.Provider value={queue}>{children}</SubmissionContext.Provider>;\n}\n\n/** UI authoring submissions not yet visible as SDK pending transactions. */\nexport function useArtifactSubmissions(): ArtifactSubmissions {\n return useContext(SubmissionContext) ?? standaloneQueue;\n}\n\nconst SESSION_KEYS = new WeakMap<EditableArtifactSession, number>();\nlet nextSessionKey = 0;\n\n/** Stable per-session React key so a replaced session never inherits queued state. */\nexport function artifactSubmissionSessionKey(session: EditableArtifactSession): number {\n let key = SESSION_KEYS.get(session);\n if (key === undefined) {\n key = ++nextSessionKey;\n SESSION_KEYS.set(session, key);\n }\n return key;\n}\n","import type { EditableArtifactSession } from \"@opengeni/sdk/editable-artifacts\";\nimport { DownloadIcon, LoaderCircleIcon } from \"lucide-react\";\nimport { useEffect, useRef, useState, useSyncExternalStore } from \"react\";\n\nimport { ArtifactButton } from \"./artifact-chrome\";\nimport { useArtifactSubmissions } from \"./artifact-submissions\";\nimport { useEditableArtifactView } from \"./editable-artifact-ui\";\nimport { useOpenGeniText } from \"../../messages/runtime\";\n\n/** Host-authenticated export of the saved native head as an Office file. */\nexport type EditableArtifactDownload = (signal: AbortSignal) => Promise<Blob>;\nexport type EditableArtifactDownloadFormat = \"xlsx\" | \"docx\" | \"pptx\";\n\nconst LABELS = {\n xlsx: {\n download: \"artifacts.spreadsheetDownload.download\",\n preparing: \"artifacts.spreadsheetDownload.preparing\",\n failed: \"artifacts.spreadsheetDownload.downloadFailedTryAgain\",\n title: \"artifacts.spreadsheetDownload.downloadWorkbookAsXlsx\",\n wait: \"artifacts.spreadsheetDownload.waitForWorkbookChangesTo\",\n fallbackName: \"artifacts.spreadsheetDownload.workbook\",\n },\n docx: {\n download: \"artifacts.artifactDownload.download\",\n preparing: \"artifacts.artifactDownload.preparing\",\n failed: \"artifacts.artifactDownload.downloadFailedTryAgain\",\n title: \"artifacts.artifactDownload.downloadDocumentAsDocx\",\n wait: \"artifacts.artifactDownload.waitForDocumentChangesTo\",\n fallbackName: \"artifacts.artifactDownload.document\",\n },\n pptx: {\n download: \"artifacts.artifactDownload.download\",\n preparing: \"artifacts.artifactDownload.preparing\",\n failed: \"artifacts.artifactDownload.downloadFailedTryAgain\",\n title: \"artifacts.artifactDownload.downloadPresentationAsPptx\",\n wait: \"artifacts.artifactDownload.waitForPresentationChangesTo\",\n fallbackName: \"artifacts.artifactDownload.presentation\",\n },\n} as const;\n\n/**\n * Download action shared by every editable modality. It waits for live sync\n * with no pending or still-submitting edits, so the export is the latest head.\n */\nexport function EditableArtifactDownloadButton({\n session,\n title,\n download,\n format,\n}: {\n session: EditableArtifactSession;\n title: string;\n download: EditableArtifactDownload;\n format: EditableArtifactDownloadFormat;\n}) {\n const t = useOpenGeniText();\n const labels = LABELS[format];\n const view = useEditableArtifactView(session);\n const submissions = useArtifactSubmissions();\n const submitting = useSyncExternalStore(\n submissions.subscribe,\n submissions.getPending,\n submissions.getPending,\n );\n const active = useRef<AbortController | null>(null);\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState(false);\n const ready =\n view.state === \"live\" &&\n submitting === 0 &&\n view.pendingTransactions === 0 &&\n view.blockedPending.length === 0 &&\n !view.authoringBlockedReason;\n useEffect(() => () => active.current?.abort(), [session]);\n useEffect(() => {\n if (view.state === \"failed\" || view.state === \"closed\") {\n active.current?.abort();\n active.current = null;\n setBusy(false);\n }\n }, [view.state]);\n\n const start = async () => {\n if (active.current || !ready || submissions.getPending()) return;\n // Re-read the live view: a just-committed edit may precede React's next render.\n const current = session.getView();\n if (\n current.state !== \"live\" ||\n current.pendingTransactions ||\n current.blockedPending.length ||\n current.authoringBlockedReason\n )\n return;\n const controller = new AbortController();\n active.current = controller;\n setBusy(true);\n setError(false);\n try {\n const blob = await download(controller.signal);\n if (controller.signal.aborted) return;\n const url = URL.createObjectURL(blob);\n try {\n const anchor = document.createElement(\"a\");\n anchor.href = url;\n anchor.download = downloadFileName(title, format, t(labels.fallbackName));\n anchor.rel = \"noopener\";\n anchor.click();\n } finally {\n setTimeout(() => URL.revokeObjectURL(url), 0);\n }\n } catch {\n if (!controller.signal.aborted) setError(true);\n } finally {\n if (!controller.signal.aborted) {\n active.current = null;\n setBusy(false);\n }\n }\n };\n\n return (\n <>\n {error ? (\n <span role=\"alert\" className=\"text-og-xs text-og-fg-muted\">\n {t(labels.failed)}\n </span>\n ) : null}\n <ArtifactButton\n onClick={() => void start()}\n disabled={busy || !ready}\n title={ready ? t(labels.title) : t(labels.wait)}\n >\n {busy ? (\n <LoaderCircleIcon className=\"animate-spin\" aria-hidden />\n ) : (\n <DownloadIcon aria-hidden />\n )}\n {busy ? t(labels.preparing) : t(labels.download)}\n </ArtifactButton>\n </>\n );\n}\n\n/** Safe local file name: the artifact title with exactly one matching extension. */\nexport function downloadFileName(\n title: string,\n format: EditableArtifactDownloadFormat,\n fallback: string,\n): string {\n const base =\n title\n .replace(/[\\\\/:*?\"<>|\\u0000-\\u001f]/g, \"_\")\n .replace(new RegExp(`\\\\.${format}$`, \"i\"), \"\")\n .trim() || fallback;\n return `${base}.${format}`;\n}\n"],"mappings":"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","names":["jsx","jsxs","useState","jsx","LoaderCircleIcon","useEffect","useState","Fragment","jsx","jsxs","useState","useEffect","LoaderCircleIcon"]}
1
+ {"version":3,"sources":["../src/components/artifacts/artifact-surface.tsx","../src/components/artifacts/artifact-submissions.tsx","../src/components/artifacts/editable-artifact-ui.tsx","../src/components/artifacts/artifact-download.tsx"],"sourcesContent":["import {\n FileSpreadsheetIcon,\n FileTextIcon,\n LoaderCircleIcon,\n PresentationIcon,\n} from \"lucide-react\";\nimport type { ReactNode } from \"react\";\n\nimport { cn } from \"../../lib/cn\";\nimport { useOpenGeniText, type OpenGeniText } from \"../../messages/runtime\";\n\nexport type ArtifactModality = \"spreadsheet\" | \"document\" | \"presentation\";\n\nexport type ArtifactSurfaceProps = {\n modality: ArtifactModality;\n title: string;\n /** An embedding host may already provide the artifact title and navigation. */\n showHeader?: boolean | undefined;\n subtitle?: ReactNode | undefined;\n actions?: ReactNode | undefined;\n children: ReactNode;\n footer?: ReactNode | undefined;\n busy?: boolean | undefined;\n className?: string | undefined;\n};\n\nconst MODALITY_LABEL = (t: OpenGeniText): Record<ArtifactModality, string> => ({\n spreadsheet: t(\"artifacts.artifactSurface.spreadsheet\"),\n document: t(\"artifacts.artifactSurface.document\"),\n presentation: t(\"artifacts.artifactSurface.presentation\"),\n});\n\nfunction ModalityIcon({ modality }: { modality: ArtifactModality }) {\n switch (modality) {\n case \"spreadsheet\":\n return <FileSpreadsheetIcon className=\"size-4\" />;\n case \"document\":\n return <FileTextIcon className=\"size-4\" />;\n case \"presentation\":\n return <PresentationIcon className=\"size-4\" />;\n }\n}\n\n/**\n * Modality-neutral artifact chrome. It deliberately owns no file, session, or\n * persistence state: hosts can use the same surface for a local draft, a\n * durable Opengeni artifact, or a collaborative projection.\n */\nexport function ArtifactSurface({\n modality,\n title,\n showHeader = true,\n subtitle,\n actions,\n children,\n footer,\n busy = false,\n className,\n}: ArtifactSurfaceProps) {\n const t = useOpenGeniText();\n return (\n <section\n aria-label={`${MODALITY_LABEL(t)[modality]}: ${title}`}\n aria-busy={busy || undefined}\n data-og-artifact-modality={modality}\n className={cn(\n \"og-root flex h-full min-h-0 min-w-0 flex-col overflow-hidden rounded-og-lg border border-og-border bg-og-surface-1 text-og-fg shadow-og-md\",\n className,\n )}\n >\n {showHeader ? (\n <header className=\"flex min-h-11 shrink-0 items-center gap-2 border-b border-og-border bg-og-surface-2 px-3\">\n <span\n aria-hidden\n className=\"grid size-7 shrink-0 place-items-center rounded-og-sm bg-og-surface-3 text-og-fg-muted\"\n >\n <ModalityIcon modality={modality} />\n </span>\n <div className=\"min-w-0 flex-1\">\n <h2 className=\"truncate text-og-base font-medium text-og-fg\">{title}</h2>\n {subtitle ? (\n <div className=\"truncate text-og-xs text-og-fg-muted\">{subtitle}</div>\n ) : null}\n </div>\n {busy ? (\n <LoaderCircleIcon\n aria-label={t(\"artifacts.artifactSurface.updatingArtifact\")}\n className=\"size-4 shrink-0 animate-spin text-og-fg-muted\"\n />\n ) : null}\n {actions ? <div className=\"flex shrink-0 items-center gap-1\">{actions}</div> : null}\n </header>\n ) : (\n <>\n {typeof subtitle === \"string\" || typeof subtitle === \"number\" ? (\n <span role=\"status\" className=\"sr-only\">\n {subtitle}\n </span>\n ) : null}\n {actions ? (\n <div className=\"flex shrink-0 items-center justify-end gap-1 border-b border-og-border px-3 py-1\">\n {actions}\n </div>\n ) : null}\n </>\n )}\n\n <div className=\"min-h-0 min-w-0 flex-1\">{children}</div>\n\n {footer ? (\n <footer className=\"shrink-0 border-t border-og-border bg-og-surface-2\">{footer}</footer>\n ) : null}\n </section>\n );\n}\n","import type { EditableArtifactSession } from \"@opengeni/sdk/editable-artifacts\";\nimport { createContext, useContext, useState, type ReactNode } from \"react\";\n\nfunction createSubmissionQueue() {\n let pending = 0;\n const listeners = new Set<() => void>();\n const emit = () => {\n for (const listener of listeners) listener();\n };\n return {\n getPending: () => pending,\n subscribe: (listener: () => void) => {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n async run<T>(invoke: () => Promise<T>): Promise<T> {\n // The SDK's causal queue and Worker authoring precede pendingTransactions.\n // Latch synchronously so a same-event blur/click cannot export an older head.\n pending++;\n emit();\n try {\n return await invoke();\n } finally {\n pending--;\n emit();\n }\n },\n };\n}\n\nexport type ArtifactSubmissions = Readonly<{\n getPending: () => number;\n subscribe: (listener: () => void) => () => void;\n run: <T>(invoke: () => Promise<T>) => Promise<T>;\n}>;\n\nconst standaloneQueue: ArtifactSubmissions = {\n getPending: () => 0,\n subscribe: (_listener: () => void) => () => {},\n run: <T,>(invoke: () => Promise<T>) => invoke(),\n};\nconst SubmissionContext = createContext<ArtifactSubmissions | null>(null);\n\nexport function ArtifactSubmissionProvider({ children }: { children: ReactNode }) {\n const [queue] = useState(createSubmissionQueue);\n return <SubmissionContext.Provider value={queue}>{children}</SubmissionContext.Provider>;\n}\n\n/** UI authoring submissions not yet visible as SDK pending transactions. */\nexport function useArtifactSubmissions(): ArtifactSubmissions {\n return useContext(SubmissionContext) ?? standaloneQueue;\n}\n\nconst SESSION_KEYS = new WeakMap<EditableArtifactSession, number>();\nlet nextSessionKey = 0;\n\n/** Stable per-session React key so a replaced session never inherits queued state. */\nexport function artifactSubmissionSessionKey(session: EditableArtifactSession): number {\n let key = SESSION_KEYS.get(session);\n if (key === undefined) {\n key = ++nextSessionKey;\n SESSION_KEYS.set(session, key);\n }\n return key;\n}\n","import type {\n EditableArtifactSession,\n EditableArtifactSyncView,\n} from \"@opengeni/sdk/editable-artifacts\";\nimport { useEffect, useState } from \"react\";\nimport { type OpenGeniText } from \"../../messages/runtime\";\nimport { useOpenGeniText } from \"../../messages/runtime\";\n\nexport function useEditableArtifactView(\n session: EditableArtifactSession,\n): EditableArtifactSyncView {\n const [view, setView] = useState(() => session.getView());\n useEffect(() => {\n setView(session.getView());\n return session.subscribe(setView);\n }, [session]);\n return view;\n}\n\n/** Changes whenever the Worker-resident speculative projection may have changed. */\nexport function editableArtifactProjectionKey(view: EditableArtifactSyncView): string {\n return [\n view.state,\n view.cursor,\n view.headSequence,\n view.pendingTransactions,\n view.blockedPending.map((entry) => `${entry.clientTransactionId}:${entry.code}`).join(\",\"),\n ].join(\":\");\n}\n\nexport function editableArtifactStatusLabel(\n t: OpenGeniText,\n view: EditableArtifactSyncView,\n): string {\n switch (view.state) {\n case \"idle\":\n case \"connecting\":\n return t(\"artifacts.editableArtifactUi.connecting\");\n case \"syncing\":\n case \"resyncing\":\n return t(\"artifacts.editableArtifactUi.syncing\");\n case \"reconnecting\":\n return t(\"artifacts.editableArtifactUi.reconnecting\");\n case \"unsupported\":\n return t(\"artifacts.editableArtifactUi.thisArtifactVersionIsNot\");\n case \"failed\":\n if (editableArtifactAccessRevoked(view)) {\n return t(\"artifacts.editableArtifactUi.youNoLongerHaveAccess\");\n }\n return view.lastError?.message ?? t(\"artifacts.editableArtifactUi.couldNotOpenThisArtifact\");\n case \"closed\":\n return t(\"artifacts.editableArtifactUi.artifactSessionClosed\");\n case \"live\":\n return view.writable\n ? t(\"artifacts.editableArtifactUi.live\")\n : t(\"artifacts.editableArtifactUi.liveReadOnly\");\n }\n}\n\n/** Revoked read authority must hide any projection retained before invalidation. */\nexport function editableArtifactAccessRevoked(view: EditableArtifactSyncView): boolean {\n if (view.state !== \"failed\" || !view.lastError) return false;\n return (view.lastError as Error & Readonly<{ code?: unknown }>).code === \"permission_changed\";\n}\n\nexport function EditableArtifactMessage({\n title,\n detail,\n retry,\n retryLabel: retryLabelProp,\n}: {\n title: string;\n detail: string;\n retry?: (() => void) | undefined;\n retryLabel?: string | undefined;\n}) {\n const t = useOpenGeniText();\n const retryLabel =\n retryLabelProp === undefined ? t(\"artifacts.editableArtifactUi.retry\") : retryLabelProp;\n return (\n <div className=\"grid h-full min-h-56 place-items-center bg-og-bg p-6 text-center\">\n <div>\n <p className=\"text-og-base font-medium text-og-fg\">{title}</p>\n <p className=\"mt-1 max-w-lg text-og-sm text-og-fg-muted\">{detail}</p>\n {retry ? (\n <button\n type=\"button\"\n onClick={retry}\n className=\"mt-3 rounded-og-sm border border-og-primary-border bg-og-primary text-og-primary-fg px-3 py-1.5 text-og-sm font-medium hover:bg-og-primary-hover outline-hidden focus-visible:ring-2 focus-visible:ring-og-accent\"\n >\n {retryLabel}\n </button>\n ) : null}\n </div>\n </div>\n );\n}\n\nexport function asEditableArtifactError(cause: unknown, fallback: string): Error {\n return cause instanceof Error ? cause : new Error(fallback);\n}\n","import type { EditableArtifactSession } from \"@opengeni/sdk/editable-artifacts\";\nimport { DownloadIcon, LoaderCircleIcon } from \"lucide-react\";\nimport { useEffect, useRef, useState, useSyncExternalStore } from \"react\";\n\nimport { ArtifactButton } from \"./artifact-chrome\";\nimport { useArtifactSubmissions } from \"./artifact-submissions\";\nimport { useEditableArtifactView } from \"./editable-artifact-ui\";\nimport { useOpenGeniText } from \"../../messages/runtime\";\n\n/** Host-authenticated export of the saved native head as an Office file. */\nexport type EditableArtifactDownload = (signal: AbortSignal) => Promise<Blob>;\nexport type EditableArtifactDownloadFormat = \"xlsx\" | \"docx\" | \"pptx\";\n\nconst LABELS = {\n xlsx: {\n download: \"artifacts.spreadsheetDownload.download\",\n preparing: \"artifacts.spreadsheetDownload.preparing\",\n failed: \"artifacts.spreadsheetDownload.downloadFailedTryAgain\",\n title: \"artifacts.spreadsheetDownload.downloadWorkbookAsXlsx\",\n wait: \"artifacts.spreadsheetDownload.waitForWorkbookChangesTo\",\n fallbackName: \"artifacts.spreadsheetDownload.workbook\",\n },\n docx: {\n download: \"artifacts.artifactDownload.download\",\n preparing: \"artifacts.artifactDownload.preparing\",\n failed: \"artifacts.artifactDownload.downloadFailedTryAgain\",\n title: \"artifacts.artifactDownload.downloadDocumentAsDocx\",\n wait: \"artifacts.artifactDownload.waitForDocumentChangesTo\",\n fallbackName: \"artifacts.artifactDownload.document\",\n },\n pptx: {\n download: \"artifacts.artifactDownload.download\",\n preparing: \"artifacts.artifactDownload.preparing\",\n failed: \"artifacts.artifactDownload.downloadFailedTryAgain\",\n title: \"artifacts.artifactDownload.downloadPresentationAsPptx\",\n wait: \"artifacts.artifactDownload.waitForPresentationChangesTo\",\n fallbackName: \"artifacts.artifactDownload.presentation\",\n },\n} as const;\n\n/**\n * Download action shared by every editable modality. It waits for live sync\n * with no pending or still-submitting edits, so the export is the latest head.\n */\nexport function EditableArtifactDownloadButton({\n session,\n title,\n download,\n format,\n}: {\n session: EditableArtifactSession;\n title: string;\n download: EditableArtifactDownload;\n format: EditableArtifactDownloadFormat;\n}) {\n const t = useOpenGeniText();\n const labels = LABELS[format];\n const view = useEditableArtifactView(session);\n const submissions = useArtifactSubmissions();\n const submitting = useSyncExternalStore(\n submissions.subscribe,\n submissions.getPending,\n submissions.getPending,\n );\n const active = useRef<AbortController | null>(null);\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState(false);\n const ready =\n view.state === \"live\" &&\n submitting === 0 &&\n view.pendingTransactions === 0 &&\n view.blockedPending.length === 0 &&\n !view.authoringBlockedReason;\n useEffect(() => () => active.current?.abort(), [session]);\n useEffect(() => {\n if (view.state === \"failed\" || view.state === \"closed\") {\n active.current?.abort();\n active.current = null;\n setBusy(false);\n }\n }, [view.state]);\n\n const start = async () => {\n if (active.current || !ready || submissions.getPending()) return;\n // Re-read the live view: a just-committed edit may precede React's next render.\n const current = session.getView();\n if (\n current.state !== \"live\" ||\n current.pendingTransactions ||\n current.blockedPending.length ||\n current.authoringBlockedReason\n )\n return;\n const controller = new AbortController();\n active.current = controller;\n setBusy(true);\n setError(false);\n try {\n const blob = await download(controller.signal);\n if (controller.signal.aborted) return;\n const url = URL.createObjectURL(blob);\n try {\n const anchor = document.createElement(\"a\");\n anchor.href = url;\n anchor.download = downloadFileName(title, format, t(labels.fallbackName));\n anchor.rel = \"noopener\";\n anchor.click();\n } finally {\n setTimeout(() => URL.revokeObjectURL(url), 0);\n }\n } catch {\n if (!controller.signal.aborted) setError(true);\n } finally {\n if (!controller.signal.aborted) {\n active.current = null;\n setBusy(false);\n }\n }\n };\n\n return (\n <>\n {error ? (\n <span role=\"alert\" className=\"text-og-xs text-og-fg-muted\">\n {t(labels.failed)}\n </span>\n ) : null}\n <ArtifactButton\n onClick={() => void start()}\n disabled={busy || !ready}\n title={ready ? t(labels.title) : t(labels.wait)}\n >\n {busy ? (\n <LoaderCircleIcon className=\"animate-spin\" aria-hidden />\n ) : (\n <DownloadIcon aria-hidden />\n )}\n {busy ? t(labels.preparing) : t(labels.download)}\n </ArtifactButton>\n </>\n );\n}\n\n/** Safe local file name: the artifact title with exactly one matching extension. */\nexport function downloadFileName(\n title: string,\n format: EditableArtifactDownloadFormat,\n fallback: string,\n): string {\n const base =\n title\n .replace(/[\\\\/:*?\"<>|\\u0000-\\u001f]/g, \"_\")\n .replace(new RegExp(`\\\\.${format}$`, \"i\"), \"\")\n .trim() || fallback;\n return `${base}.${format}`;\n}\n"],"mappings":"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","names":["jsx","useState","jsx","jsxs","useState","LoaderCircleIcon","useEffect","useState","Fragment","jsx","jsxs","useState","useEffect","LoaderCircleIcon"]}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  capabilityLogoFallback
4
- } from "./chunk-TIQPKOFW.js";
4
+ } from "./chunk-A6T4FGE7.js";
5
5
 
6
6
  // src/app/components/capabilities/capability-logo-source.tsx
7
7
  var FIRST_PARTY_CAPABILITY_LOGOS = {
@@ -21,4 +21,4 @@ export {
21
21
  FIRST_PARTY_CAPABILITY_LOGOS,
22
22
  capabilityLogoSource
23
23
  };
24
- //# sourceMappingURL=chunk-7FJMRJDG.js.map
24
+ //# sourceMappingURL=chunk-PVR5EELP.js.map
@@ -1,19 +1,19 @@
1
1
  "use client";
2
- import {
3
- ComposerUsageNotice
4
- } from "./chunk-5Y2FPLZE.js";
5
2
  import {
6
3
  useAppShotTarget
7
4
  } from "./chunk-AIEXYO2X.js";
5
+ import {
6
+ ComposerUsageNotice
7
+ } from "./chunk-KFWVBTUH.js";
8
8
  import {
9
9
  MessageContextPills
10
- } from "./chunk-SM5QX6UK.js";
10
+ } from "./chunk-A2EWJQXX.js";
11
11
  import {
12
12
  useAppContext
13
13
  } from "./chunk-W6KAUGXO.js";
14
14
  import {
15
15
  ChatComposer
16
- } from "./chunk-YXA2EKV3.js";
16
+ } from "./chunk-UUSAOIJR.js";
17
17
  import {
18
18
  useFileAttachments
19
19
  } from "./chunk-I6FIXEL4.js";
@@ -79,4 +79,4 @@ export {
79
79
  useDraftAttachments,
80
80
  ConsoleComposer
81
81
  };
82
- //# sourceMappingURL=chunk-Y5BSA3I7.js.map
82
+ //# sourceMappingURL=chunk-QBADR2FO.js.map
@@ -1,11 +1,11 @@
1
1
  "use client";
2
- import {
3
- openGeniGroupPresentation
4
- } from "./chunk-PO3BH3KQ.js";
5
2
  import {
6
3
  capabilityGroupSelection,
7
4
  sessionCapabilityGroupsFor
8
5
  } from "./chunk-4NTPH5M6.js";
6
+ import {
7
+ openGeniGroupPresentation
8
+ } from "./chunk-IIO2MR3B.js";
9
9
  import {
10
10
  cn
11
11
  } from "./chunk-A3MTTRCX.js";
@@ -15,23 +15,23 @@ import {
15
15
  ComposerMenuRowsSkeleton,
16
16
  lazyComposerPanel
17
17
  } from "./chunk-O2LGEYG4.js";
18
+ import {
19
+ isComposerConnector
20
+ } from "./chunk-L6Y4ALSM.js";
18
21
  import {
19
22
  DropdownMenu,
20
23
  DropdownMenuContent,
21
24
  DropdownMenuTrigger
22
25
  } from "./chunk-TREHTIBD.js";
23
- import {
24
- isComposerConnector
25
- } from "./chunk-L6Y4ALSM.js";
26
- import {
27
- ModelPolicyPickerMenu
28
- } from "./chunk-2NC7NZCE.js";
29
26
  import {
30
27
  Button
31
28
  } from "./chunk-HMU5IELG.js";
29
+ import {
30
+ ModelPolicyPickerMenu
31
+ } from "./chunk-WWOHORRO.js";
32
32
  import {
33
33
  ModelPolicyPicker
34
- } from "./chunk-FFNPUSVO.js";
34
+ } from "./chunk-ERG355NM.js";
35
35
 
36
36
  // src/app/components/pickers.tsx
37
37
  import { ChevronDownIcon, PlugIcon } from "lucide-react";
@@ -175,4 +175,4 @@ export {
175
175
  sessionToolSelectionSummary,
176
176
  SessionToolPicker
177
177
  };
178
- //# sourceMappingURL=chunk-22FFOHPT.js.map
178
+ //# sourceMappingURL=chunk-QLIDZGPV.js.map
@@ -7,15 +7,15 @@ import {
7
7
  DetailSheet,
8
8
  DetailSheetContent,
9
9
  DetailSheetTrigger
10
- } from "./chunk-5DSKMG2I.js";
10
+ } from "./chunk-LEXPBQ56.js";
11
+ import {
12
+ SheetClose
13
+ } from "./chunk-6KELG2EG.js";
11
14
  import {
12
15
  Collapsible,
13
16
  CollapsibleContent,
14
17
  CollapsibleTrigger
15
18
  } from "./chunk-T6KM63FZ.js";
16
- import {
17
- SheetClose
18
- } from "./chunk-6KELG2EG.js";
19
19
  import {
20
20
  Button
21
21
  } from "./chunk-HMU5IELG.js";
@@ -278,4 +278,4 @@ function Disclosure({
278
278
  export {
279
279
  Disclosure
280
280
  };
281
- //# sourceMappingURL=chunk-JM4HQPAI.js.map
281
+ //# sourceMappingURL=chunk-QZRDCFHI.js.map
@@ -1,10 +1,10 @@
1
1
  "use client";
2
- import {
3
- showUndoToast
4
- } from "./chunk-CFFNT2OY.js";
5
2
  import {
6
3
  payerShortLabel
7
- } from "./chunk-BCM7C3MJ.js";
4
+ } from "./chunk-Z4GJB24B.js";
5
+ import {
6
+ showUndoToast
7
+ } from "./chunk-3GLAPCVI.js";
8
8
  import {
9
9
  ACCESS_CHOICES,
10
10
  SPEND_PERIOD_OPTIONS,
@@ -29,22 +29,19 @@ import {
29
29
  viewAsVisitorUrl
30
30
  } from "./chunk-MXIHJ4UI.js";
31
31
  import {
32
- Disclosure
33
- } from "./chunk-JM4HQPAI.js";
34
- import {
35
- EmailChipsInput
36
- } from "./chunk-MBYVEZOH.js";
37
- import {
38
- ListRow,
39
- RowList
40
- } from "./chunk-JQCGPTZ6.js";
32
+ ChoiceCard,
33
+ ChoiceCards
34
+ } from "./chunk-VAIESMPY.js";
41
35
  import {
42
36
  useCopyToClipboard
43
37
  } from "./chunk-MK63VRBR.js";
44
38
  import {
45
- ChoiceCard,
46
- ChoiceCards
47
- } from "./chunk-YVBHGMKC.js";
39
+ Disclosure
40
+ } from "./chunk-QZRDCFHI.js";
41
+ import {
42
+ ListRow,
43
+ RowList
44
+ } from "./chunk-MM7OKOTE.js";
48
45
  import {
49
46
  Section
50
47
  } from "./chunk-J6WRB3VZ.js";
@@ -52,14 +49,23 @@ import {
52
49
  SelectMenu
53
50
  } from "./chunk-TFK4KFKA.js";
54
51
  import {
55
- ModelPicker
56
- } from "./chunk-22FFOHPT.js";
52
+ EmailChipsInput
53
+ } from "./chunk-MBYVEZOH.js";
57
54
  import {
58
55
  useWorkspaceModelCatalog
59
- } from "./chunk-5W6ZDKRR.js";
56
+ } from "./chunk-5M23GZA2.js";
57
+ import {
58
+ ModelPicker
59
+ } from "./chunk-QLIDZGPV.js";
60
60
  import {
61
61
  cn
62
62
  } from "./chunk-A3MTTRCX.js";
63
+ import {
64
+ StatusBadge
65
+ } from "./chunk-EPCPGUIF.js";
66
+ import {
67
+ LogoTile
68
+ } from "./chunk-FQQEZUSN.js";
63
69
  import {
64
70
  Switch
65
71
  } from "./chunk-IZMUUUYD.js";
@@ -67,11 +73,16 @@ import {
67
73
  SettingRow
68
74
  } from "./chunk-XSOPQZGH.js";
69
75
  import {
70
- DropdownMenuItem
71
- } from "./chunk-TREHTIBD.js";
76
+ FormDialog,
77
+ FormInline,
78
+ FormPage
79
+ } from "./chunk-S7PVL7XH.js";
72
80
  import {
73
- LogoTile
74
- } from "./chunk-FQQEZUSN.js";
81
+ toast
82
+ } from "./chunk-YG6NARQY.js";
83
+ import {
84
+ userErrorText
85
+ } from "./chunk-L4OF77LE.js";
75
86
  import {
76
87
  CheckboxField,
77
88
  Field,
@@ -79,23 +90,12 @@ import {
79
90
  TextArea,
80
91
  TextInput
81
92
  } from "./chunk-XNTW77T6.js";
82
- import {
83
- StatusBadge
84
- } from "./chunk-EPCPGUIF.js";
85
- import {
86
- toast
87
- } from "./chunk-YG6NARQY.js";
88
93
  import {
89
94
  RelativeTime
90
95
  } from "./chunk-XG57V2BN.js";
91
96
  import {
92
- FormDialog,
93
- FormInline,
94
- FormPage
95
- } from "./chunk-A4BD4ZVB.js";
96
- import {
97
- userErrorText
98
- } from "./chunk-L4OF77LE.js";
97
+ DropdownMenuItem
98
+ } from "./chunk-TREHTIBD.js";
99
99
  import {
100
100
  Notice
101
101
  } from "./chunk-WLEDGIVS.js";
@@ -1054,4 +1054,4 @@ export {
1054
1054
  sitePublicationHeader,
1055
1055
  SitePublishPage
1056
1056
  };
1057
- //# sourceMappingURL=chunk-5W7KJ5NQ.js.map
1057
+ //# sourceMappingURL=chunk-R7XCJWCD.js.map