@marimo-team/islands 0.23.15-dev6 → 0.23.15-dev63

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 (578) hide show
  1. package/dist/{ConnectedDataExplorerComponent-CU4fZJzG.js → ConnectedDataExplorerComponent-CJaUI-S-.js} +85 -84
  2. package/dist/{ErrorBoundary-DE6tzZf-.js → ErrorBoundary-DXlxsrTF.js} +3 -3
  3. package/dist/{ImageComparisonComponent-CHrI72em.js → ImageComparisonComponent-C3y7L3eJ.js} +173 -129
  4. package/dist/{any-language-editor-DN1R-1KZ.js → any-language-editor-P9tjkj4n.js} +21 -21
  5. package/dist/apl-e1B5LPEL.js +4 -0
  6. package/dist/{arc-DfkSnvZm.js → arc-CTIpFoOn.js} +2 -2
  7. package/dist/architecture-7HQA4BMR-DHUrQjL4.js +6 -0
  8. package/dist/{architectureDiagram-VXUJARFQ-CT2SuxNw.js → architectureDiagram-VXUJARFQ-DXwkyAaM.js} +19 -19
  9. package/dist/asciiarmor-B-gwgesP.js +4 -0
  10. package/dist/asn1-DF2ckRB4.js +4 -0
  11. package/dist/assets/__vite-browser-external-CjNAy01L.js +1 -0
  12. package/dist/assets/worker-B3XPCb6y.js +98 -0
  13. package/dist/{blockDiagram-VD42YOAC-Dy7hlFla.js → blockDiagram-VD42YOAC-CIOjvxeD.js} +12 -12
  14. package/dist/brainfuck-4G-7_gq_.js +4 -0
  15. package/dist/{button-BacYv-bE.js → button-BcSml68y.js} +12 -65
  16. package/dist/{c4Diagram-YG6GDRKO-BXlAmZ8Z.js → c4Diagram-YG6GDRKO-B6dZC_oU.js} +6 -6
  17. package/dist/{capabilities-D_4LYhSU.js → capabilities-BYLFYTYv.js} +2 -2
  18. package/dist/{channel-D_PHgcig.js → channel-BN070S0F.js} +1 -1
  19. package/dist/{chat-ui-DinOvbWu.js → chat-ui-BdSDiVjk.js} +3122 -3116
  20. package/dist/{check-C9OoNtR4.js → check-Cs-KV5XY.js} +1 -1
  21. package/dist/{chunk-4BX2VUAB-CzXltWHN.js → chunk-4BX2VUAB-iU5lQTDI.js} +1 -1
  22. package/dist/{chunk-4F5CHEZ2-D9nGEHV8.js → chunk-4F5CHEZ2-VlodlEGo.js} +1 -1
  23. package/dist/{chunk-55IACEB6-B-1mjMMC.js → chunk-55IACEB6-7h71GwyW.js} +1 -1
  24. package/dist/{chunk-5FQGJX7Z-BbqSm5gU.js → chunk-5FQGJX7Z-B9WoXK1R.js} +3 -3
  25. package/dist/{chunk-ABZYJK2D-Dz0-H2B5.js → chunk-ABZYJK2D-BxBDji1u.js} +3 -3
  26. package/dist/{chunk-ATLVNIR6-o0Z5MZLd.js → chunk-ATLVNIR6-qFiszptQ.js} +2 -2
  27. package/dist/{chunk-B2363JML-KEJpLGGP.js → chunk-B2363JML-zL3VngtH.js} +1 -1
  28. package/dist/{chunk-B4BG7PRW-BL98U9B4.js → chunk-B4BG7PRW-B_z2FEHm.js} +7 -7
  29. package/dist/{chunk-CVBHYZKI-B_c5YBcW.js → chunk-CVBHYZKI-CwazXVlJ.js} +1 -1
  30. package/dist/{chunk-DI55MBZ5-Dwkn0LWm.js → chunk-DI55MBZ5-D4Y8yV8B.js} +6 -6
  31. package/dist/{chunk-EXTU4WIE-9sNjmQrB.js → chunk-EXTU4WIE-BQPBhApE.js} +2 -2
  32. package/dist/{chunk-FMBD7UC4-Ie8M9q0W.js → chunk-FMBD7UC4-quJmebXa.js} +1 -1
  33. package/dist/{chunk-FRFDVMJY-DzQqMWrl.js → chunk-FRFDVMJY-BHBqN-vD.js} +1 -1
  34. package/dist/{chunk-HN2XXSSU-E3n-Ys7Z.js → chunk-HN2XXSSU-Bv0QkeMr.js} +1 -1
  35. package/dist/{chunk-JA3XYJ7Z-C32Y7Epf.js → chunk-JA3XYJ7Z-CY4CRbV5.js} +3 -3
  36. package/dist/{chunk-JZLCHNYA-C6ftyVMN.js → chunk-JZLCHNYA-DWIR9m5O.js} +6 -6
  37. package/dist/{chunk-MI3HLSF2-CUYEasXO.js → chunk-MI3HLSF2-HGWI-8Pg.js} +1 -1
  38. package/dist/{chunk-N4CR4FBY-DUhGZhZs.js → chunk-N4CR4FBY-Bw2HcMNc.js} +7 -7
  39. package/dist/{chunk-PL6DKKU2-D7km-08O.js → chunk-PL6DKKU2-CAHKc95s.js} +1 -1
  40. package/dist/{chunk-QN33PNHL-0K6SDYn3.js → chunk-QN33PNHL-DPBNNzpR.js} +2 -2
  41. package/dist/{chunk-QXUST7PY-DMhsRpYK.js → chunk-QXUST7PY-DtC2t9Mk.js} +10 -10
  42. package/dist/{chunk-QZHKN3VN-DRjXVwuJ.js → chunk-QZHKN3VN-Dym5BS7y.js} +1 -1
  43. package/dist/{chunk-S3R3BYOJ-oAe3dEbO.js → chunk-S3R3BYOJ-BdgLc8AM.js} +4 -4
  44. package/dist/{chunk-SJTYNZTY-BkJrPRFC.js → chunk-SJTYNZTY-DnXoKWpW.js} +1 -1
  45. package/dist/{chunk-TCCFYFTB-D58KeXnC.js → chunk-TCCFYFTB-DPWJa9zL.js} +1 -1
  46. package/dist/{chunk-TQ3KTPDO-D_yA_wAb.js → chunk-TQ3KTPDO-CsDx6v37.js} +1 -1
  47. package/dist/{chunk-TZMSLE5B-yBKS_DQU.js → chunk-TZMSLE5B-BzSHcq-K.js} +3 -3
  48. package/dist/{chunk-UMXZTB3W-D7uwvNjd.js → chunk-UMXZTB3W-D1uHz8MN.js} +1 -1
  49. package/dist/classDiagram-2ON5EDUG-BiQPjMNY.js +30 -0
  50. package/dist/classDiagram-v2-WZHVMYZB-YHdR8fqM.js +30 -0
  51. package/dist/{clike-DTxNUn7l.js → clike-7lgyEYRk.js} +1 -1
  52. package/dist/clojure-CUybM11R.js +4 -0
  53. package/dist/cmake-BPjGcuDL.js +4 -0
  54. package/dist/cobol-BETk_nb6.js +4 -0
  55. package/dist/{code-block-37QAKDTI-O6IH6wAi.js → code-block-37QAKDTI-MSxEjskJ.js} +1 -1
  56. package/dist/{code-visibility-Dpab3kCj.js → code-visibility-yIEEWI5w.js} +1554 -1471
  57. package/dist/coffeescript-CManZxXL.js +4 -0
  58. package/dist/commonlisp-DWkn7GW8.js +4 -0
  59. package/dist/{copy-COam1EG7.js → copy-Cs3yt6Vt.js} +2 -2
  60. package/dist/{cose-bilkent-S5V4N54A-kjoZoid4.js → cose-bilkent-S5V4N54A-BYj0aL7z.js} +2 -2
  61. package/dist/crystal-CCbg5EUH.js +4 -0
  62. package/dist/css-By8eo-XS.js +4 -0
  63. package/dist/cypher-DwfHg3nP.js +4 -0
  64. package/dist/d-Brs1wNbw.js +4 -0
  65. package/dist/{dagre-6UL2VRFP-J0JKgwOt.js → dagre-6UL2VRFP-DpYjBqQs.js} +11 -11
  66. package/dist/{data-grid-overlay-editor-C6lxUJp-.js → data-grid-overlay-editor-BWRG2b_o.js} +2 -2
  67. package/dist/{constants-T20xxyNf.js → debounce-BOD3DbfP.js} +1 -24
  68. package/dist/{diagram-PSM6KHXK-DYgJuNk9.js → diagram-PSM6KHXK-D4ftnaua.js} +22 -22
  69. package/dist/{diagram-QEK2KX5R-CKdBR2sb.js → diagram-QEK2KX5R-DVlUOgs1.js} +17 -17
  70. package/dist/{diagram-S2PKOQOG-Dpi7mo5W.js → diagram-S2PKOQOG-CGh4OMEV.js} +17 -17
  71. package/dist/diff-DJIRmJ1g.js +4 -0
  72. package/dist/{dist-DyyjKEYf.js → dist-3NCqaWjt.js} +2 -2
  73. package/dist/{dist-D-W5ny5a.js → dist-4lVIWUT3.js} +1 -1
  74. package/dist/dist-5o9uz19x.js +5 -0
  75. package/dist/{dist-GZXUmt0b.js → dist-B2jmQKKx.js} +2 -2
  76. package/dist/{dist--2Bqjvs0.js → dist-B96tMAst.js} +2 -2
  77. package/dist/{dist-BaoDKvdy.js → dist-BCX980mU.js} +2 -2
  78. package/dist/{dist-DMjWuVs8.js → dist-BIEt-mlF.js} +1 -1
  79. package/dist/{dist-BR_gyG9L.js → dist-BO5HRiTf.js} +2 -2
  80. package/dist/{dist-Dv_Y15yk.js → dist-BOMbzyb3.js} +85 -85
  81. package/dist/{dist-CIYBwstr.js → dist-BP39XM8u.js} +1 -1
  82. package/dist/{dist-DZo4nSS0.js → dist-BPF0gTRZ.js} +6 -6
  83. package/dist/{dist-BSAt6RhH.js → dist-BTdrwBWP.js} +22 -22
  84. package/dist/{dist-BY018Paw.js → dist-BdqCKQ1O.js} +2 -2
  85. package/dist/dist-BpDH0DEP.js +5 -0
  86. package/dist/dist-BpXhbQXO.js +8 -0
  87. package/dist/{dist-CcWX6tmx.js → dist-BpeiYpG2.js} +2 -2
  88. package/dist/{dist-A2846XWO.js → dist-BwhXBwMd.js} +1 -1
  89. package/dist/dist-ByadAk_L.js +5 -0
  90. package/dist/{dist-abid3KgM.js → dist-C18MUWTj.js} +2 -2
  91. package/dist/{dist-DZORgqKY.js → dist-C2_4pjuS.js} +1 -1
  92. package/dist/{dist-BzEzfugY.js → dist-CFSb_Frm.js} +1 -1
  93. package/dist/dist-CK0g7JvP.js +8 -0
  94. package/dist/{dist-C_Y3oV3C.js → dist-CRmSjkLP.js} +2 -2
  95. package/dist/{dist-hT4QzYX-.js → dist-CSlJrrAw.js} +86 -81
  96. package/dist/{dist-Du8WkPuU.js → dist-CV79CsQ0.js} +2 -2
  97. package/dist/dist-CfzCtiq2.js +5 -0
  98. package/dist/{dist-CoXAujgg.js → dist-D3bdsa1d.js} +4 -4
  99. package/dist/dist-D8JtVFrW.js +8 -0
  100. package/dist/dist-DK2Oocpu.js +6 -0
  101. package/dist/{dist-LTU8Hdvn.js → dist-DZwp8lro.js} +3 -3
  102. package/dist/{dist-t9Kf7xqC.js → dist-DaXJPX8F.js} +2 -2
  103. package/dist/{dist-U4F-tbMs.js → dist-De-GlSAs.js} +246 -184
  104. package/dist/{dist-M9Vag9Y0.js → dist-DgjbnqTg.js} +125 -125
  105. package/dist/dist-DnSu977r.js +5 -0
  106. package/dist/{dist-CxJDU6Bh.js → dist-DviUBLUp.js} +4 -4
  107. package/dist/{dist-CpxNdDkw.js → dist-DwqBJ014.js} +2 -2
  108. package/dist/{dist-Bf7SHuNp.js → dist-JGehap7K.js} +5 -5
  109. package/dist/{dist-Bk75fBZA.js → dist-LpLXa9Lb.js} +2 -2
  110. package/dist/{dist-Bf9f8MuT.js → dist-SXNmlE8A.js} +1 -1
  111. package/dist/dist-UmxJm6sW.js +8 -0
  112. package/dist/dist-aYSBQSyM.js +5 -0
  113. package/dist/dist-kkZ1Ztlh.js +6 -0
  114. package/dist/dist-ngPczwNi.js +5 -0
  115. package/dist/{dist-DgGbNavJ.js → dist-pqIwD8VD.js} +2 -2
  116. package/dist/dist-wQRyxyTV.js +5 -0
  117. package/dist/{dist-Dax--nl9.js → dist-w_gWE5Wf.js} +1 -1
  118. package/dist/{dockerfile-twL37N91.js → dockerfile-B82Pkz_V.js} +1 -1
  119. package/dist/dtd-Dyiazv4N.js +4 -0
  120. package/dist/dylan-D8Fcw7NA.js +4 -0
  121. package/dist/ecl-CjKp8Vii.js +4 -0
  122. package/dist/eiffel-K9ViOX5r.js +4 -0
  123. package/dist/elm-B5NVtRco.js +4 -0
  124. package/dist/{erDiagram-Q2GNP2WA-BU-m41EQ.js → erDiagram-Q2GNP2WA-BcKAHFqF.js} +15 -15
  125. package/dist/erlang-BnLzgk7R.js +4 -0
  126. package/dist/{error-banner-DFPfz_Qf.js → error-banner-DR7o3CbX.js} +68 -68
  127. package/dist/{esm-ga2Bf3O2.js → esm-DKOv6P2M.js} +424 -424
  128. package/dist/esm-k8PIvuZW.js +1180 -0
  129. package/dist/{extends-9MVIxxRo.js → extends-Cq2JYHKy.js} +36 -20
  130. package/dist/{factor-CajWS6mS.js → factor-Bq2mGIHt.js} +1 -1
  131. package/dist/factor-C7f9Jz5R.js +4 -0
  132. package/dist/{flowDiagram-NV44I4VS-CRoXKjGq.js → flowDiagram-NV44I4VS-BRhSg-ro.js} +17 -17
  133. package/dist/{formats-Dzx4J_z1.js → formats-BFhkZJwd.js} +3 -3
  134. package/dist/forth-rGM8jLao.js +4 -0
  135. package/dist/fortran-B3acSe0i.js +4 -0
  136. package/dist/{ganttDiagram-JELNMOA3-7mq5f9cO.js → ganttDiagram-JELNMOA3-CXXCN7LN.js} +10 -10
  137. package/dist/gas-Bb1Vmv_N.js +4 -0
  138. package/dist/gherkin-C9Lyidgd.js +4 -0
  139. package/dist/{gitGraph-G5XIXVHT-DiniR35k.js → gitGraph-G5XIXVHT-BjTx0kww.js} +3 -3
  140. package/dist/{gitGraphDiagram-V2S2FVAM-Dfuokq6w.js → gitGraphDiagram-V2S2FVAM-BOlkMSqK.js} +17 -17
  141. package/dist/{glide-data-editor-CjTu7ukN.js → glide-data-editor--CaN-f27.js} +13 -13
  142. package/dist/groovy-DQk6XcGH.js +4 -0
  143. package/dist/haskell-mV0Vw9gv.js +4 -0
  144. package/dist/haxe-DqxN89zH.js +5 -0
  145. package/dist/{html-to-image-_wGfk8V-.js → html-to-image-DDENewl2.js} +2649 -2607
  146. package/dist/idl-ya8W561J.js +4 -0
  147. package/dist/{info-VBDWY6EO-DVZvGhkQ.js → info-VBDWY6EO-CA67FznA.js} +3 -3
  148. package/dist/infoDiagram-HS3SLOUP-D3TyKnL_.js +30 -0
  149. package/dist/{input-DtsN7xm-.js → input-DStQIuqD.js} +51 -51
  150. package/dist/javascript-CgqgptVu.js +4 -0
  151. package/dist/{journeyDiagram-XKPGCS4Q-8XYSU1GI.js → journeyDiagram-XKPGCS4Q-DEal0aT1.js} +7 -7
  152. package/dist/julia-CFQ-HusI.js +4 -0
  153. package/dist/{kanban-definition-3W4ZIXB7--9pT9z1R.js → kanban-definition-3W4ZIXB7-Dl90wENN.js} +12 -12
  154. package/dist/{katex-9-9QRhxz.js → katex-C4t-BmrK.js} +1 -1
  155. package/dist/{label-WfTSU8L4.js → label-DIk0QoFe.js} +2 -2
  156. package/dist/{line-C5s_12ee.js → line-C43FIPBd.js} +3 -3
  157. package/dist/{linear-B5-AFRiR.js → linear-H_vsH9ao.js} +4 -4
  158. package/dist/livescript-D__3TmDo.js +4 -0
  159. package/dist/{loader-Boph2xIS.js → loader-CTHCI-qe.js} +5 -16
  160. package/dist/lua-Bytcgj_W.js +4 -0
  161. package/dist/main.js +2217 -2116
  162. package/dist/mathematica-DJhvVKvl.js +4 -0
  163. package/dist/mbox-IGHPCjfR.js +4 -0
  164. package/dist/{mermaid-4DMBBIKO-Eg3D4FVz.js → mermaid-4DMBBIKO-FXbOziy9.js} +1 -1
  165. package/dist/{mermaid-BYqXy_NE.js → mermaid-CdSvixW2.js} +47 -47
  166. package/dist/{mermaid-parser.core-C3XRsazI.js → mermaid-parser.core-DoivvxPd.js} +8 -8
  167. package/dist/{mhchem-yiCCuiEF.js → mhchem-EGhUZR1V.js} +1 -1
  168. package/dist/{mindmap-definition-VGOIOE7T-B-4mnfFG.js → mindmap-definition-VGOIOE7T-CCDupjWW.js} +14 -14
  169. package/dist/mirc-tcwvVugm.js +4 -0
  170. package/dist/mllike-Dx91i62r.js +6 -0
  171. package/dist/modelica-_SRt-yU5.js +4 -0
  172. package/dist/mscgen-GZrGS9gt.js +6 -0
  173. package/dist/mumps-Cv3ygyod.js +4 -0
  174. package/dist/nsis-BU7GeGbI.js +4 -0
  175. package/dist/{nsis-ClF3r5Tr.js → nsis-i9_sgigf.js} +1 -1
  176. package/dist/ntriples-CL-FCYXb.js +4 -0
  177. package/dist/{number-overlay-editor-BLJXvX9c.js → number-overlay-editor-Ck_mc_gT.js} +1 -1
  178. package/dist/objects-De59twF-.js +56 -0
  179. package/dist/octave-Dc6_3DIu.js +4 -0
  180. package/dist/{ordinal-ArJavP1Q.js → ordinal-Bkv2-veX.js} +1 -1
  181. package/dist/oz-DpUAJCXf.js +4 -0
  182. package/dist/{packet-DYOGHKS2-34raHOiB.js → packet-DYOGHKS2-Bkgofxf3.js} +3 -3
  183. package/dist/pascal-B17mncXs.js +4 -0
  184. package/dist/perl-BTpK97q9.js +4 -0
  185. package/dist/{pie-VRWISCQL-BaLlzZa3.js → pie-VRWISCQL-B1AMhN_7.js} +3 -3
  186. package/dist/{pieDiagram-ADFJNKIX-Cr3cNpZY.js → pieDiagram-ADFJNKIX-JvXG_6hk.js} +22 -22
  187. package/dist/pig-CFb638Ap.js +4 -0
  188. package/dist/powershell-Cxo-_2A5.js +4 -0
  189. package/dist/{precisionRound-Tqb4mg-H.js → precisionRound-CnHPY_5v.js} +1 -1
  190. package/dist/{process-output-Mh4UrjwM.js → process-output-2QPcgBQg.js} +4 -4
  191. package/dist/properties-BPgT1xTB.js +4 -0
  192. package/dist/protobuf-BgHBaIIK.js +4 -0
  193. package/dist/pug-25-oS0SG.js +4 -0
  194. package/dist/{pug-B_rby2yb.js → pug-BhE2JRSg.js} +1 -1
  195. package/dist/puppet-DarIr20S.js +4 -0
  196. package/dist/purify.es-EnR5yhgI.js +783 -0
  197. package/dist/python-BqmOsBsi.js +4 -0
  198. package/dist/q-D3QJCTup.js +4 -0
  199. package/dist/{quadrantDiagram-AYHSOK5B-BuNL8Q93.js → quadrantDiagram-AYHSOK5B-BqDB9tUC.js} +5 -5
  200. package/dist/r-Cz_yBX4z.js +4 -0
  201. package/dist/{radar-ZZBFDIW7-Ci7bfoZa.js → radar-ZZBFDIW7-C2b7A32s.js} +3 -3
  202. package/dist/{react-vega-B0sAlDTL.js → react-vega-BazDALhI.js} +469 -469
  203. package/dist/{requirementDiagram-UZGBJVZJ-BG2lLUN1.js → requirementDiagram-UZGBJVZJ-KbVt8SPH.js} +14 -14
  204. package/dist/{reveal-component-BfYO8h-9.js → reveal-component-CCyp8KHw.js} +629 -622
  205. package/dist/rpm-DGOtYwAI.js +5 -0
  206. package/dist/ruby-DBZu4rPc.js +4 -0
  207. package/dist/{sankeyDiagram-TZEHDZUN-DMal8sps.js → sankeyDiagram-TZEHDZUN-DgkF38jx.js} +5 -5
  208. package/dist/sas-Dd1D9qTq.js +4 -0
  209. package/dist/scheme-BmDjvTHX.js +4 -0
  210. package/dist/{sequenceDiagram-WL72ISMW-DT6Tk-Eo.js → sequenceDiagram-WL72ISMW-BDmx9n95.js} +8 -8
  211. package/dist/shell-BL8zFSaj.js +4 -0
  212. package/dist/sieve-BAx2WqUP.js +4 -0
  213. package/dist/smalltalk-CYRzF7VV.js +4 -0
  214. package/dist/sparql-YWaDRO4A.js +4 -0
  215. package/dist/{spec-Cz-Bj1JI.js → spec-CnaxwDqy.js} +4 -4
  216. package/dist/{src-Bf2iLOlr.js → src-DV3ha_nA.js} +1 -1
  217. package/dist/{stateDiagram-FKZM4ZOC-CB_lodq3.js → stateDiagram-FKZM4ZOC-ByOvQf2n.js} +17 -17
  218. package/dist/stateDiagram-v2-4FDKWEC3-C3xqeavR.js +29 -0
  219. package/dist/{step-CWipAYTY.js → step-BqHnkgWE.js} +1 -1
  220. package/dist/stex-B5O-env2.js +4 -0
  221. package/dist/{strings-Dq_j3Rxw.js → strings-BYAhZnQi.js} +354 -354
  222. package/dist/style.css +1 -1
  223. package/dist/stylus-lYsyLFc1.js +4 -0
  224. package/dist/swift-ClQz9z1n.js +4 -0
  225. package/dist/{swiper-component-5HoSsPi1.js → swiper-component-DE94711u.js} +4 -4
  226. package/dist/tcl-B3jhsfqY.js +4 -0
  227. package/dist/textile-Cb1Dw7Aq.js +4 -0
  228. package/dist/{time-CsmIF9YZ.js → time-Bb4A7I6a.js} +4 -4
  229. package/dist/{timeline-definition-IT6M3QCI-NfSKRvH0.js → timeline-definition-IT6M3QCI-CkD_trIn.js} +4 -4
  230. package/dist/{toDate-CWNNlFEX.js → toDate-B3IRfHhw.js} +16 -7
  231. package/dist/toml-nHZhetdO.js +4 -0
  232. package/dist/{tooltip-Czds6Qr8.js → tooltip-B-qh7UPB.js} +3 -3
  233. package/dist/{treemap-GDKQZRPO-Cl6OQh8D.js → treemap-GDKQZRPO-SDux0AV8.js} +3 -3
  234. package/dist/troff-DuJAGWKH.js +4 -0
  235. package/dist/ttcn-BxrcwP21.js +4 -0
  236. package/dist/ttcn-cfg-BAg_9dcc.js +4 -0
  237. package/dist/turtle-zCq949as.js +4 -0
  238. package/dist/{types-C2Ir191_.js → types-DQl7jVYK.js} +1 -1
  239. package/dist/use-vega-container-remeasure-DGNrIQSk.js +27 -0
  240. package/dist/{useAsyncData-KfHB8wQR.js → useAsyncData-CvO8WUy3.js} +1 -1
  241. package/dist/{useDateFormatter-CMnRuVmN.js → useDateFormatter-BSoGim-G.js} +2 -2
  242. package/dist/{useDeepCompareMemoize-nJMtxhm4.js → useDeepCompareMemoize-J3MKRdA4.js} +1 -1
  243. package/dist/{useIframeCapabilities-DWIYvDh7.js → useIframeCapabilities-POcFXHbw.js} +1 -1
  244. package/dist/{useLifecycle-DegSo0lV.js → useLifecycle-DqPxHgAN.js} +3 -3
  245. package/dist/{useTheme-6eZ3GOTS.js → useTheme-XMq9mNf_.js} +65 -29
  246. package/dist/vb-De5hElus.js +4 -0
  247. package/dist/vbscript-Cypcpv4F.js +4 -0
  248. package/dist/{vega-component-DzyyM9fc.js → vega-component-CrFoZT1S.js} +225 -223
  249. package/dist/vega-embed-container-DAQAMjiO.js +22 -0
  250. package/dist/vega-loader.browser-DmpxCJqx.js +1353 -0
  251. package/dist/velocity-Di7l-yhe.js +4 -0
  252. package/dist/verilog-Bzi-S3g2.js +4 -0
  253. package/dist/vhdl-B0ZZITaW.js +4 -0
  254. package/dist/webidl-0sviiRcN.js +4 -0
  255. package/dist/xquery-B4qMVWaB.js +4 -0
  256. package/dist/{xychartDiagram-PRI3JC2R-BvwftqMA.js → xychartDiagram-PRI3JC2R-BSkNxYNw.js} +13 -13
  257. package/dist/yacas-Jt25Fuv8.js +4 -0
  258. package/dist/z80-CrcbYzmp.js +4 -0
  259. package/dist/{zod-CijjQh4u.js → zod-D0yOqoGe.js} +26 -26
  260. package/package.json +3 -1
  261. package/src/__mocks__/requests.ts +3 -0
  262. package/src/components/charts/lazy.tsx +3 -1
  263. package/src/components/charts/vega-embed-container.tsx +18 -0
  264. package/src/components/chat/__tests__/chat-utils.test.ts +244 -1
  265. package/src/components/chat/__tests__/message-queue.test.tsx +121 -0
  266. package/src/components/chat/chat-panel.tsx +196 -67
  267. package/src/components/chat/chat-utils.ts +111 -2
  268. package/src/components/editor/RecoveryButton.tsx +2 -2
  269. package/src/components/editor/SortableCell.tsx +6 -2
  270. package/src/components/editor/__tests__/output-persistence.test.tsx +241 -0
  271. package/src/components/editor/actions/__tests__/pair-with-agent-commands.test.ts +153 -0
  272. package/src/components/editor/actions/pair-with-agent-commands.ts +109 -0
  273. package/src/components/editor/actions/pair-with-agent-modal.tsx +20 -64
  274. package/src/components/editor/actions/useNotebookActions.tsx +8 -0
  275. package/src/components/editor/ai/add-cell-with-ai.tsx +14 -5
  276. package/src/components/editor/ai/ai-completion-editor.tsx +4 -1
  277. package/src/components/editor/cell/cell-context-menu.tsx +7 -0
  278. package/src/components/editor/chrome/components/__tests__/feedback-button.test.tsx +221 -0
  279. package/src/components/editor/chrome/components/feedback-button.tsx +308 -77
  280. package/src/components/editor/chrome/panels/packages-panel.tsx +11 -1
  281. package/src/components/editor/chrome/panels/write-secret-modal.tsx +3 -2
  282. package/src/components/editor/columns/__tests__/cell-column.test.tsx +105 -0
  283. package/src/components/editor/columns/cell-column.tsx +34 -4
  284. package/src/components/editor/columns/sortable-column.tsx +24 -4
  285. package/src/components/editor/connections/__tests__/secret-combobox.test.ts +134 -0
  286. package/src/components/editor/connections/database/schemas.ts +35 -27
  287. package/src/components/editor/connections/form-renderers.tsx +42 -110
  288. package/src/components/editor/connections/secret-combobox.tsx +253 -0
  289. package/src/components/editor/connections/storage/schemas.ts +12 -6
  290. package/src/components/editor/file-tree/download.ts +46 -0
  291. package/src/components/editor/file-tree/file-explorer.tsx +3 -21
  292. package/src/components/editor/file-tree/file-viewer.tsx +4 -27
  293. package/src/components/editor/navigation/__tests__/navigation.test.ts +33 -0
  294. package/src/components/editor/navigation/navigation.ts +8 -1
  295. package/src/components/editor/notebook-cell.tsx +203 -106
  296. package/src/components/editor/renderers/__tests__/cells-renderer.test.tsx +66 -0
  297. package/src/components/editor/renderers/cell-array.tsx +26 -13
  298. package/src/components/editor/renderers/cells-renderer.tsx +8 -2
  299. package/src/components/editor/renderers/slides-layout/__tests__/plugin.test.ts +29 -0
  300. package/src/components/editor/renderers/slides-layout/types.ts +4 -0
  301. package/src/components/editor/renderers/vertical-layout/vertical-layout.tsx +19 -19
  302. package/src/components/slides/reveal-component.tsx +37 -17
  303. package/src/components/slides/slide-form.tsx +72 -0
  304. package/src/components/ui/toast.tsx +11 -3
  305. package/src/components/ui/toaster.tsx +65 -9
  306. package/src/core/ai/context/providers/error.ts +6 -158
  307. package/src/core/cells/__tests__/utils.test.ts +59 -0
  308. package/src/core/cells/utils.ts +51 -0
  309. package/src/core/codemirror/completion/__tests__/signature-hint.test.ts +97 -3
  310. package/src/core/codemirror/completion/signature-hint.ts +78 -11
  311. package/src/core/constants.ts +8 -0
  312. package/src/core/diagnostics/__tests__/issue-details.test.ts +173 -0
  313. package/src/core/diagnostics/issue-details.ts +139 -0
  314. package/src/core/errors/__tests__/error-entries.test.ts +25 -0
  315. package/src/core/errors/error-entries.ts +176 -0
  316. package/src/core/islands/__tests__/bridge.test.ts +341 -46
  317. package/src/core/islands/__tests__/main.test.ts +176 -0
  318. package/src/core/islands/__tests__/parse.test.ts +105 -0
  319. package/src/core/islands/bootstrap.ts +8 -3
  320. package/src/core/islands/bridge.ts +117 -23
  321. package/src/core/islands/components/__tests__/web-components.test.tsx +214 -0
  322. package/src/core/islands/components/web-components.tsx +76 -15
  323. package/src/core/islands/constants.ts +1 -0
  324. package/src/core/islands/main.ts +69 -3
  325. package/src/core/islands/parse.ts +70 -23
  326. package/src/core/islands/worker/__tests__/controller.test.ts +173 -0
  327. package/src/core/islands/worker/worker.tsx +145 -57
  328. package/src/core/network/__tests__/requests-lazy.test.ts +18 -0
  329. package/src/core/network/__tests__/requests-network.test.ts +7 -0
  330. package/src/core/network/requests-lazy.ts +13 -1
  331. package/src/core/network/requests-network.ts +3 -0
  332. package/src/core/network/requests-static.ts +1 -0
  333. package/src/core/network/requests-toasting.tsx +1 -0
  334. package/src/core/network/types.ts +3 -0
  335. package/src/core/runtime/__tests__/runtime.test.ts +64 -0
  336. package/src/core/runtime/runtime.ts +30 -10
  337. package/src/core/wasm/bridge.ts +8 -0
  338. package/src/core/wasm/worker/bootstrap.ts +113 -20
  339. package/src/core/wasm/worker/types.ts +2 -0
  340. package/src/css/app/Cell.css +10 -0
  341. package/src/hooks/__tests__/useHotkey.test.tsx +88 -0
  342. package/src/hooks/useHotkey.ts +29 -4
  343. package/src/plugins/impl/anywidget/__tests__/host.test.ts +6 -9
  344. package/src/plugins/impl/anywidget/__tests__/registry.test.ts +3 -1
  345. package/src/plugins/impl/anywidget/__tests__/widget-binding.test.ts +32 -61
  346. package/src/plugins/impl/anywidget/model-proxy.ts +0 -13
  347. package/src/plugins/impl/anywidget/runtime.ts +1 -0
  348. package/src/plugins/impl/anywidget/widget-binding.ts +8 -34
  349. package/src/plugins/impl/image-comparison/ImageComparisonComponent.tsx +53 -2
  350. package/src/plugins/impl/image-comparison/__tests__/ImageComparisonComponent.test.tsx +71 -0
  351. package/src/plugins/impl/vega/__tests__/use-vega-container-remeasure.test.ts +102 -0
  352. package/src/plugins/impl/vega/use-vega-container-remeasure.ts +39 -0
  353. package/src/plugins/impl/vega/vega-component.tsx +5 -4
  354. package/src/theme/__tests__/useTheme.test.ts +68 -0
  355. package/src/theme/useTheme.ts +16 -1
  356. package/dist/apl-Bdc61P1y.js +0 -4
  357. package/dist/architecture-7HQA4BMR-Kyc44TmC.js +0 -6
  358. package/dist/asciiarmor-DVRHDGzT.js +0 -4
  359. package/dist/asn1-BmuKfkfu.js +0 -4
  360. package/dist/assets/__vite-browser-external-BQCLNwri.js +0 -1
  361. package/dist/assets/worker-DAWRHcPq.js +0 -73
  362. package/dist/brainfuck-DPrRpyTV.js +0 -4
  363. package/dist/classDiagram-2ON5EDUG-QjoAcuFE.js +0 -30
  364. package/dist/classDiagram-v2-WZHVMYZB-bUCv4gu2.js +0 -30
  365. package/dist/clojure-DEttQW5T.js +0 -4
  366. package/dist/cmake-jNlx_DaM.js +0 -4
  367. package/dist/cobol-BvvIm5MJ.js +0 -4
  368. package/dist/coffeescript-DTpBMyFU.js +0 -4
  369. package/dist/commonlisp-BmmUG8jb.js +0 -4
  370. package/dist/crystal-BxyqmEWC.js +0 -4
  371. package/dist/css-BGoCtuG3.js +0 -4
  372. package/dist/cypher-BmCbdl3u.js +0 -4
  373. package/dist/d-CFrlbjZt.js +0 -4
  374. package/dist/diff-D6XwL6P8.js +0 -4
  375. package/dist/dist-7QfXoMdB.js +0 -5
  376. package/dist/dist-BEXXyZig.js +0 -5
  377. package/dist/dist-BYj57OV4.js +0 -5
  378. package/dist/dist-BlSvQzNr.js +0 -5
  379. package/dist/dist-CCBlxAgS.js +0 -8
  380. package/dist/dist-CIDTVIUf.js +0 -5
  381. package/dist/dist-CqQyhAM8.js +0 -8
  382. package/dist/dist-CwRu2Xzh.js +0 -5
  383. package/dist/dist-D8CDTVgf.js +0 -6
  384. package/dist/dist-D8DNB0nO.js +0 -8
  385. package/dist/dist-DL6N_q-A.js +0 -5
  386. package/dist/dist-DOFbNV_b.js +0 -8
  387. package/dist/dist-DPrYzMY0.js +0 -6
  388. package/dist/dist-cdmMjgsn.js +0 -5
  389. package/dist/dtd-Bw0lRN0-.js +0 -4
  390. package/dist/dylan-B55eBHTt.js +0 -4
  391. package/dist/ecl-C8G4p0wn.js +0 -4
  392. package/dist/eiffel-BmH46VJl.js +0 -4
  393. package/dist/elm-DhzeFqkl.js +0 -4
  394. package/dist/erlang-CY-wdlsU.js +0 -4
  395. package/dist/esm-M837UxV5.js +0 -1171
  396. package/dist/factor-DWkgl0xw.js +0 -4
  397. package/dist/forth-Cij_ie2t.js +0 -4
  398. package/dist/fortran-Br3X9cfm.js +0 -4
  399. package/dist/gas-DYsGcMN2.js +0 -4
  400. package/dist/gherkin-eVgXQ0fQ.js +0 -4
  401. package/dist/groovy-_NFHIXG7.js +0 -4
  402. package/dist/haskell-D6xNG_bH.js +0 -4
  403. package/dist/haxe-sU_rzAwn.js +0 -5
  404. package/dist/idl-Ds_VbrUx.js +0 -4
  405. package/dist/infoDiagram-HS3SLOUP-CEnzWruK.js +0 -30
  406. package/dist/javascript-CztfIl0i.js +0 -4
  407. package/dist/julia-DDv40QMV.js +0 -4
  408. package/dist/livescript-BEOngLLc.js +0 -4
  409. package/dist/lua-9-7BhQ4Y.js +0 -4
  410. package/dist/mathematica-DDa0Pfxm.js +0 -4
  411. package/dist/mbox-iO03mmoE.js +0 -4
  412. package/dist/mirc-C9z5LT4X.js +0 -4
  413. package/dist/mllike-jGJbdm_C.js +0 -6
  414. package/dist/modelica-DzF7oIEL.js +0 -4
  415. package/dist/mscgen-DB-u125o.js +0 -6
  416. package/dist/mumps-CRTFHhzh.js +0 -4
  417. package/dist/nsis-C4NPTuox.js +0 -4
  418. package/dist/ntriples-BCOoGph1.js +0 -4
  419. package/dist/octave-DTwNlazz.js +0 -4
  420. package/dist/oz-DD38AzSz.js +0 -4
  421. package/dist/pascal-BohSp9jV.js +0 -4
  422. package/dist/perl-f5OutoPM.js +0 -4
  423. package/dist/pig-Dv7wSmHb.js +0 -4
  424. package/dist/powershell-rYgjKB39.js +0 -4
  425. package/dist/properties-BFUNLRDN.js +0 -4
  426. package/dist/protobuf-B9QJQPPv.js +0 -4
  427. package/dist/pug-DzvWpaMC.js +0 -4
  428. package/dist/puppet-B_K-n_xK.js +0 -4
  429. package/dist/purify.es-H92eMd9-.js +0 -557
  430. package/dist/python-CAiFcaA2.js +0 -4
  431. package/dist/q-cLeFIBLK.js +0 -4
  432. package/dist/r-04Y-Wco3.js +0 -4
  433. package/dist/react-vega-B6ncY2Tp.js +0 -9
  434. package/dist/rpm-FUdrIia9.js +0 -5
  435. package/dist/ruby-DMjFXuEW.js +0 -4
  436. package/dist/sas-DzHZxjXK.js +0 -4
  437. package/dist/scheme-DxHd_Rb9.js +0 -4
  438. package/dist/shell-C8Kwypgf.js +0 -4
  439. package/dist/sieve-DdyqOKXZ.js +0 -4
  440. package/dist/smalltalk-pB7X1D9y.js +0 -4
  441. package/dist/sparql-NhBO6oOa.js +0 -4
  442. package/dist/stateDiagram-v2-4FDKWEC3-E0RGjKsm.js +0 -29
  443. package/dist/stex-KfRnSHzF.js +0 -4
  444. package/dist/stylus-SfWSnzPv.js +0 -4
  445. package/dist/swift-jRPdq2zR.js +0 -4
  446. package/dist/tcl-_hpTHGX3.js +0 -4
  447. package/dist/textile-C9h8slqH.js +0 -4
  448. package/dist/toml-DWvtinD4.js +0 -4
  449. package/dist/troff-Dwo_A0y7.js +0 -4
  450. package/dist/ttcn-V--CPFKq.js +0 -4
  451. package/dist/ttcn-cfg-CPSMchTG.js +0 -4
  452. package/dist/turtle-B4rPGBWu.js +0 -4
  453. package/dist/vb-DaMBBd4j.js +0 -4
  454. package/dist/vbscript-BMJQqcE2.js +0 -4
  455. package/dist/vega-loader.browser-CZ-J8Py3.js +0 -1321
  456. package/dist/velocity-CGq2QRq2.js +0 -4
  457. package/dist/verilog-CUNo8F5u.js +0 -4
  458. package/dist/vhdl-CCzA0msW.js +0 -4
  459. package/dist/webidl-CqIMDIBL.js +0 -4
  460. package/dist/xquery-XC5Kbr-1.js +0 -4
  461. package/dist/yacas-CGOv7Dzy.js +0 -4
  462. package/dist/z80-CXhVmi-f.js +0 -4
  463. /package/dist/{Plot-CAYS29h9.js → Plot-YQOuVIei.js} +0 -0
  464. /package/dist/{apl-BCgCq9iM.js → apl-99A7dLQe.js} +0 -0
  465. /package/dist/{array-tvvEqPy7.js → array-O78LT16Y.js} +0 -0
  466. /package/dist/{asciiarmor-BtqU-KJQ.js → asciiarmor-DLEhpFDx.js} +0 -0
  467. /package/dist/{asn1-Dmb-dTMx.js → asn1-CMrcTsT4.js} +0 -0
  468. /package/dist/{asterisk-DaVJJDnV.js → asterisk-CqykImq7.js} +0 -0
  469. /package/dist/{brainfuck-C1HoZKlE.js → brainfuck-ChPt5yBe.js} +0 -0
  470. /package/dist/{chunk-DR5Q36YT-BflwErH1.js → chunk-DR5Q36YT-5Yp2GWwR.js} +0 -0
  471. /package/dist/{click-outside-container-BLPjMamz.js → click-outside-container-BSIeYt4y.js} +0 -0
  472. /package/dist/{clike-CdT0yHjt.js → clike-CE0fXfM_.js} +0 -0
  473. /package/dist/{clojure-CdyrCpUv.js → clojure-QkBEMU-g.js} +0 -0
  474. /package/dist/{cmake-BFlPxym7.js → cmake-CU1jX7Mo.js} +0 -0
  475. /package/dist/{cobol-CcJXewp8.js → cobol-DMOKzzky.js} +0 -0
  476. /package/dist/{coffeescript-DnKuIKRo.js → coffeescript-DjnjLyfk.js} +0 -0
  477. /package/dist/{colors-CQAOa8cK.js → colors-DmiH1bIH.js} +0 -0
  478. /package/dist/{common-keywords-FBrXPTcz.js → common-keywords-D3nPJNQP.js} +0 -0
  479. /package/dist/{commonlisp-B-kok83Z.js → commonlisp-CYd9iOSe.js} +0 -0
  480. /package/dist/{crystal-FYRYjI1I.js → crystal-Dy55yoYG.js} +0 -0
  481. /package/dist/{css-B45lc2V3.js → css-CNU8w3HJ.js} +0 -0
  482. /package/dist/{cypher-DZMLyVY_.js → cypher-q47DGzK7.js} +0 -0
  483. /package/dist/{cytoscape.esm-ayF70frT.js → cytoscape.esm-Dr8XzXWK.js} +0 -0
  484. /package/dist/{d-x-VVT4o9.js → d-jEkaLvxX.js} +0 -0
  485. /package/dist/{defaultLocale-u-3osm0P.js → defaultLocale-BpsHxBd7.js} +0 -0
  486. /package/dist/{defaultLocale-BoHTsDG6.js → defaultLocale-DoeErsX2.js} +0 -0
  487. /package/dist/{diff-Dxe2mpXk.js → diff-vb2-unFN.js} +0 -0
  488. /package/dist/{dist-BGdYVvOu.js → dist-DsoKosxi.js} +0 -0
  489. /package/dist/{dtd-C9VM_Wfu.js → dtd-C9kR-bXa.js} +0 -0
  490. /package/dist/{duckdb-keywords-CvJhR_Yd.js → duckdb-keywords-B6HYCMOT.js} +0 -0
  491. /package/dist/{dylan-DTSnEIFO.js → dylan-BLckrK-V.js} +0 -0
  492. /package/dist/{ebnf-2D4Ctp3y.js → ebnf-Cnp3L9jg.js} +0 -0
  493. /package/dist/{ecl-N04ptnRK.js → ecl-CEsf6XVg.js} +0 -0
  494. /package/dist/{eiffel-Dd8rpqr_.js → eiffel-2KGZNzx6.js} +0 -0
  495. /package/dist/{elm-GT2E866W.js → elm-D2s3K5wF.js} +0 -0
  496. /package/dist/{emotion-is-prop-valid.esm-DzSb5hsH.js → emotion-is-prop-valid.esm-DdVSF4FD.js} +0 -0
  497. /package/dist/{erlang-Cf0Bp5pY.js → erlang-0PMFOndk.js} +0 -0
  498. /package/dist/{esm-BaaaPNGl.js → esm-CuQHjs36.js} +0 -0
  499. /package/dist/{fcl-Ccj8Z5Xd.js → fcl-D9nccAWI.js} +0 -0
  500. /package/dist/{forth-wd_XzGTg.js → forth-DG89iUsu.js} +0 -0
  501. /package/dist/{fortran-DcwUTZFe.js → fortran-ytKsAVvu.js} +0 -0
  502. /package/dist/{gas-DeALIER3.js → gas-Cg2Fm0N2.js} +0 -0
  503. /package/dist/{gherkin-CKTqaJNX.js → gherkin-B87FEnZ-.js} +0 -0
  504. /package/dist/{groovy-Bwdp_d8D.js → groovy-Dcs08AWD.js} +0 -0
  505. /package/dist/{haskell-DCdCcPLK.js → haskell-cwkOuhx6.js} +0 -0
  506. /package/dist/{haxe-DAyktQWJ.js → haxe-DWEo4q10.js} +0 -0
  507. /package/dist/{http-_DVAYWoR.js → http-B8jdG64J.js} +0 -0
  508. /package/dist/{idl-CBuZiRYu.js → idl-WWQwDcRV.js} +0 -0
  509. /package/dist/{init-uv0kkh4g.js → init-DNBbYZd_.js} +0 -0
  510. /package/dist/{javascript-DzigE11c.js → javascript-BeR74dxD.js} +0 -0
  511. /package/dist/{julia-PwfB-0Cm.js → julia-UlvCUYGL.js} +0 -0
  512. /package/dist/{katex-C_XRmjAP.js → katex-Bld7b-fk.js} +0 -0
  513. /package/dist/{livescript-BJLz1EbT.js → livescript-GPmFcmYV.js} +0 -0
  514. /package/dist/{lua-ZC-XC2jf.js → lua-DYoT_0zM.js} +0 -0
  515. /package/dist/{main-Tj_-QTyF.js → main-B1Jo_8pC.js} +0 -0
  516. /package/dist/{math-DFcdCCU8.js → math-CBNc2Ib0.js} +0 -0
  517. /package/dist/{mathematica-DCYMx6qB.js → mathematica-DSFIQlbG.js} +0 -0
  518. /package/dist/{mbox-OxMK_9XI.js → mbox-ej8lFMdL.js} +0 -0
  519. /package/dist/{micromark-factory-space-DF2w36zS.js → micromark-factory-space-CwHmg6iz.js} +0 -0
  520. /package/dist/{mirc-nJVyhA0H.js → mirc-CAdIdvHQ.js} +0 -0
  521. /package/dist/{mllike-DRO89bsU.js → mllike-CjTB1lHF.js} +0 -0
  522. /package/dist/{modelica-Don3E6ZD.js → modelica-BB68FYMa.js} +0 -0
  523. /package/dist/{mscgen-DJfqD3bN.js → mscgen-BkbzgGGI.js} +0 -0
  524. /package/dist/{mumps-SjGTvDYL.js → mumps-Cu-28E9F.js} +0 -0
  525. /package/dist/{nginx-DasThI7R.js → nginx-C1ofKPst.js} +0 -0
  526. /package/dist/{node-sql-parser-B8nBD36q.js → node-sql-parser-DLl_zNw0.js} +0 -0
  527. /package/dist/{ntriples-CNBKRl3I.js → ntriples-D9cQiZxZ.js} +0 -0
  528. /package/dist/{octave-DdeVHNlx.js → octave-BvtAnPX0.js} +0 -0
  529. /package/dist/{once-DPuqGUeo.js → once-B60G2fuJ.js} +0 -0
  530. /package/dist/{oz-CcKSoNvN.js → oz-COaVHk2E.js} +0 -0
  531. /package/dist/{pascal-6leftwNj.js → pascal-BFpqVD2x.js} +0 -0
  532. /package/dist/{path-BGaWgPKg.js → path-DwWbhZFI.js} +0 -0
  533. /package/dist/{perl-BhJIwWzN.js → perl-DaiORxHP.js} +0 -0
  534. /package/dist/{pig-r-xDHqRf.js → pig-DFzRhmsF.js} +0 -0
  535. /package/dist/{powershell-D-BELeNi.js → powershell-BG2LQNKN.js} +0 -0
  536. /package/dist/{properties-CnuDhbll.js → properties-CqJJR5QY.js} +0 -0
  537. /package/dist/{protobuf-CO8RBhvX.js → protobuf-WwDYV1yY.js} +0 -0
  538. /package/dist/{puppet-NmXHjLy8.js → puppet-QNY3w_uN.js} +0 -0
  539. /package/dist/{python-DAQXi720.js → python-4QrQ3Ugi.js} +0 -0
  540. /package/dist/{q-DlikXfV0.js → q-DhwXuxE2.js} +0 -0
  541. /package/dist/{r-CuohilwT.js → r-Df-nkR25.js} +0 -0
  542. /package/dist/{range-C-rmrM1O.js → range-BOiA8qqU.js} +0 -0
  543. /package/dist/{rpm-0Pjwp0Pb.js → rpm-Cokue07s.js} +0 -0
  544. /package/dist/{ruby-Dq8NJTDG.js → ruby-DrYcL3qF.js} +0 -0
  545. /package/dist/{sas-CuwonyVP.js → sas-CoiPirA5.js} +0 -0
  546. /package/dist/{scheme-CYU-RRIf.js → scheme-CwFLjzHv.js} +0 -0
  547. /package/dist/{semaphore-CNDGTzkX.js → semaphore-C8rmHdhj.js} +0 -0
  548. /package/dist/{shell-COPmX2qE.js → shell-BFV-R24I.js} +0 -0
  549. /package/dist/{sieve-B_3zyLne.js → sieve-CxwXF5T9.js} +0 -0
  550. /package/dist/{simple-mode-DSBniks8.js → simple-mode-DTaJtKPt.js} +0 -0
  551. /package/dist/{smalltalk-DRft7iPv.js → smalltalk-QivVOCtX.js} +0 -0
  552. /package/dist/{solr-RZ9uTl59.js → solr-BLvysN-c.js} +0 -0
  553. /package/dist/{sparql-CN6qj55H.js → sparql-nKsFk8j7.js} +0 -0
  554. /package/dist/{spreadsheet-BNNUNXA2.js → spreadsheet-BWc8C2FT.js} +0 -0
  555. /package/dist/{sql-B4x8IkwU.js → sql-CWfUjlV1.js} +0 -0
  556. /package/dist/{stex-BIsgBmK4.js → stex-DtMAhV4-.js} +0 -0
  557. /package/dist/{stylus-Bn_ZjOQ3.js → stylus-BLKQAycn.js} +0 -0
  558. /package/dist/{swift-BLUJhMbz.js → swift-CJoKqiKj.js} +0 -0
  559. /package/dist/{tcl-C86fxecl.js → tcl-YTeYFNUc.js} +0 -0
  560. /package/dist/{textile-DmHh2rsK.js → textile-C6rKQqMQ.js} +0 -0
  561. /package/dist/{tiddlywiki-DI0mF2WJ.js → tiddlywiki-ZXwTHGNT.js} +0 -0
  562. /package/dist/{tiki-2HU6XLLn.js → tiki-C628O_u4.js} +0 -0
  563. /package/dist/{timer-YZl28NYN.js → timer-BpI_FKSA.js} +0 -0
  564. /package/dist/{toml-GWANRNAD.js → toml-DxlPGbRy.js} +0 -0
  565. /package/dist/{treemap-D-ka1hvx.js → treemap-DY3NBr79.js} +0 -0
  566. /package/dist/{troff-BHTsomIy.js → troff-DFCfH7Ku.js} +0 -0
  567. /package/dist/{ttcn-DQuhn5Mn.js → ttcn-DAW-ERVP.js} +0 -0
  568. /package/dist/{ttcn-cfg-HjFYtdB-.js → ttcn-cfg-CpJ8b7EN.js} +0 -0
  569. /package/dist/{turtle-nCay33Nv.js → turtle-BneV2f8L.js} +0 -0
  570. /package/dist/{vb-BG-XlqqJ.js → vb-D973Vxxh.js} +0 -0
  571. /package/dist/{vbscript-B6vyW0-D.js → vbscript-Dckaq3YO.js} +0 -0
  572. /package/dist/{velocity-CWegueqO.js → velocity-DKty-GUC.js} +0 -0
  573. /package/dist/{verilog-CzSQm4cG.js → verilog-aNaK_biA.js} +0 -0
  574. /package/dist/{vhdl-DqnNVL7r.js → vhdl-CQuehnQy.js} +0 -0
  575. /package/dist/{webidl-DXEUpDWH.js → webidl-Bhg8vaMr.js} +0 -0
  576. /package/dist/{xquery-Ba_NB5bD.js → xquery-D2q16GaM.js} +0 -0
  577. /package/dist/{yacas-HKQU6hyk.js → yacas-DHGOHnNa.js} +0 -0
  578. /package/dist/{z80-CXkHXLdj.js → z80-BPhTmO22.js} +0 -0
@@ -12,6 +12,7 @@ import { MockRequestClient } from "@/__mocks__/requests";
12
12
  import { aiCompletionCellAtom } from "@/core/ai/state";
13
13
  import type { CellActions } from "@/core/cells/cells";
14
14
  import { notebookAtom } from "@/core/cells/cells";
15
+ import { signatureHintField } from "@/core/codemirror/completion/signature-hint";
15
16
  import {
16
17
  configOverridesAtom,
17
18
  platformAtom,
@@ -1825,6 +1826,38 @@ describe("useCellEditorNavigationProps", () => {
1825
1826
  expect(focusCell).not.toHaveBeenCalled();
1826
1827
  });
1827
1828
 
1829
+ it("should dismiss the signature hint when Escape is pressed without exiting to command mode", () => {
1830
+ mockSimplifySelection.mockReturnValue(false);
1831
+ mockCompletionStatus.mockReturnValue(null);
1832
+
1833
+ const dispatch = vi.fn();
1834
+ const mockEditorView = {
1835
+ current: {
1836
+ state: {
1837
+ selection: { main: { from: 9, to: 9, empty: true } },
1838
+ field: vi.fn((field: unknown) =>
1839
+ field === signatureHintField ? { pos: 9 } : false,
1840
+ ),
1841
+ },
1842
+ dispatch,
1843
+ } as unknown as EditorView,
1844
+ };
1845
+
1846
+ const { result } = renderWithProvider(() =>
1847
+ useCellEditorNavigationProps(mockCellId, mockEditorView),
1848
+ );
1849
+
1850
+ const mockEvent = Mocks.keyboardEvent({ key: "Escape" });
1851
+
1852
+ act(() => {
1853
+ result.current.onKeyDown?.(mockEvent);
1854
+ });
1855
+
1856
+ // The hint is dismissed (dispatch called) but we stay in edit mode.
1857
+ expect(dispatch).toHaveBeenCalled();
1858
+ expect(focusCell).not.toHaveBeenCalled();
1859
+ });
1860
+
1828
1861
  it("should continue propagation for other keys", () => {
1829
1862
  const mockEditorView = { current: null };
1830
1863
  const { result } = renderWithProvider(() =>
@@ -22,6 +22,10 @@ import {
22
22
  } from "@/core/cells/pending-cut-service";
23
23
  import { usePendingDeleteService } from "@/core/cells/pending-delete-service";
24
24
  import { scrollCellIntoView } from "@/core/cells/scrollCellIntoView";
25
+ import {
26
+ closeSignatureHint,
27
+ signatureHintField,
28
+ } from "@/core/codemirror/completion/signature-hint";
25
29
  import {
26
30
  hotkeysAtom,
27
31
  isAiFeatureEnabled,
@@ -713,7 +717,9 @@ export function useCellEditorNavigationProps(
713
717
  return;
714
718
  }
715
719
 
716
- const hasSignatureHelp = state.field(signatureHelpTooltipField, false);
720
+ const hasSignatureHelp =
721
+ Boolean(state.field(signatureHelpTooltipField, false)) ||
722
+ Boolean(state.field(signatureHintField, false));
717
723
  const hasAutocompletePopup = completionStatus(state) !== null;
718
724
  if (hasSignatureHelp) {
719
725
  closeSignatureHelp(view);
@@ -784,4 +790,5 @@ export function closeSignatureHelp(view: EditorView) {
784
790
  if (view.state.field(signatureHelpTooltipField, false)) {
785
791
  view.dispatch({ effects: setSignatureHelpTooltip.of(null) });
786
792
  }
793
+ closeSignatureHint(view);
787
794
  }
@@ -14,6 +14,7 @@ import {
14
14
  type KeyboardEvent,
15
15
  memo,
16
16
  useCallback,
17
+ useEffect,
17
18
  useImperativeHandle,
18
19
  useMemo,
19
20
  useRef,
@@ -54,6 +55,8 @@ import {
54
55
  cellNeedsRun,
55
56
  cellStatusClasses,
56
57
  isUninstantiated,
58
+ publishedCellClasses,
59
+ shouldHidePublishedCell,
57
60
  } from "../../core/cells/utils";
58
61
  import type { UserConfig } from "../../core/config/config-schema";
59
62
  import { isAppInteractionDisabled } from "../../core/websocket/connection-utils";
@@ -303,7 +306,9 @@ const CellComponent = (props: CellProps) => {
303
306
  );
304
307
  }
305
308
 
306
- if (mode === "edit") {
309
+ // Present mode is handled by EditableCellComponent with the edit chrome
310
+ // hidden, so that the output DOM is not remounted when toggling modes.
311
+ if (mode === "edit" || mode === "present") {
307
312
  return (
308
313
  <EditableCellComponent
309
314
  {...props}
@@ -329,14 +334,14 @@ const ReadonlyCellComponent = forwardRef(
329
334
  published: true,
330
335
  });
331
336
 
332
- const outputIsError = isErrorMime(cellRuntime.output?.mimetype);
333
-
334
337
  // Hide the output if it's an error or stopped.
335
- const hidden =
336
- cellRuntime.errored ||
337
- cellRuntime.interrupted ||
338
- cellRuntime.stopped ||
339
- outputIsError;
338
+ const hidden = shouldHidePublishedCell({
339
+ errored: cellRuntime.errored,
340
+ interrupted: cellRuntime.interrupted,
341
+ stopped: cellRuntime.stopped,
342
+ output: cellRuntime.output,
343
+ showErrorTracebacks: false,
344
+ });
340
345
 
341
346
  if (hidden) {
342
347
  return null;
@@ -368,6 +373,7 @@ const EditableCellComponent = ({
368
373
  theme,
369
374
  showPlaceholder,
370
375
  cellId,
376
+ mode,
371
377
  canDelete,
372
378
  userConfig,
373
379
  isCollapsed,
@@ -415,6 +421,28 @@ const EditableCellComponent = ({
415
421
 
416
422
  const loading = outputIsLoading(cellRuntime.status);
417
423
 
424
+ const isPresenting = mode === "present";
425
+
426
+ // While presenting, the cell may be hidden (matching the read view), but it
427
+ // stays mounted (CSS-hidden) so its DOM survives mode toggles.
428
+ const presentHidden =
429
+ isPresenting &&
430
+ shouldHidePublishedCell({
431
+ errored: cellRuntime.errored,
432
+ interrupted: cellRuntime.interrupted,
433
+ stopped: cellRuntime.stopped,
434
+ output: cellRuntime.output,
435
+ showErrorTracebacks: userConfig.runtime.show_tracebacks ?? false,
436
+ });
437
+
438
+ // CodeMirror cannot measure itself while the tray is display:none, so
439
+ // re-measure when returning to edit mode.
440
+ useEffect(() => {
441
+ if (!isPresenting) {
442
+ editorView.current?.requestMeasure();
443
+ }
444
+ }, [isPresenting, editorView]);
445
+
418
446
  // console output is cleared immediately on run, so check for queued instead
419
447
  // of loading to determine staleness
420
448
  const consoleOutputStale =
@@ -454,7 +482,12 @@ const EditableCellComponent = ({
454
482
  });
455
483
  const canCollapse = canCollapseOutline(cellRuntime.outline);
456
484
  const hasOutput = !isOutputEmpty(cellRuntime.output);
457
- const isStaleCell = outputIsStale(cellRuntime, cellData.edited);
485
+ // While presenting, pending edits do not dim the output as stale,
486
+ // matching the read view.
487
+ const isStaleCell = outputIsStale(
488
+ cellRuntime,
489
+ cellData.edited && !isPresenting,
490
+ );
458
491
  const hasConsoleOutput = cellRuntime.consoleOutputs.length > 0;
459
492
  const cellOutput = userConfig.display.cell_output;
460
493
 
@@ -487,7 +520,8 @@ const EditableCellComponent = ({
487
520
  },
488
521
  });
489
522
 
490
- const emptyMarkdownPlaceholder = isMarkdownCodeHidden &&
523
+ const emptyMarkdownPlaceholder = !isPresenting &&
524
+ isMarkdownCodeHidden &&
491
525
  isEmptyMarkdownContent &&
492
526
  !needsRun && (
493
527
  <div
@@ -509,25 +543,31 @@ const EditableCellComponent = ({
509
543
  );
510
544
 
511
545
  const outputArea = hasOutput && !isEmptyMarkdownContent && (
512
- <div className="relative" onDoubleClick={showHiddenCodeIfMarkdown}>
513
- <div className="absolute top-5 -left-7 z-20 print:hidden">
514
- <CollapseToggle
515
- isCollapsed={isCollapsed}
516
- onClick={() => {
517
- if (isCollapsed) {
518
- actions.expandCell({ cellId });
519
- } else {
520
- actions.collapseCell({ cellId });
521
- }
522
- }}
523
- canCollapse={canCollapse}
524
- />
525
- </div>
546
+ <div
547
+ className="relative"
548
+ onDoubleClick={isPresenting ? undefined : showHiddenCodeIfMarkdown}
549
+ >
550
+ {!isPresenting && (
551
+ <div className="absolute top-5 -left-7 z-20 print:hidden">
552
+ <CollapseToggle
553
+ isCollapsed={isCollapsed}
554
+ onClick={() => {
555
+ if (isCollapsed) {
556
+ actions.expandCell({ cellId });
557
+ } else {
558
+ actions.collapseCell({ cellId });
559
+ }
560
+ }}
561
+ canCollapse={canCollapse}
562
+ />
563
+ </div>
564
+ )}
526
565
  <OutputArea
527
- // Only allow expanding in edit mode
566
+ // `allowExpand` must stay constant across modes: flipping it swaps the
567
+ // output's container component and would remount the output DOM.
528
568
  allowExpand={true}
529
- // Force expand when markdown is hidden
530
- forceExpand={isMarkdownCodeHidden}
569
+ // Force expand when markdown is hidden or when presenting
570
+ forceExpand={isMarkdownCodeHidden || isPresenting}
531
571
  className={CSSClasses.outputArea}
532
572
  cellId={cellId}
533
573
  output={cellRuntime.output}
@@ -537,19 +577,32 @@ const EditableCellComponent = ({
537
577
  </div>
538
578
  );
539
579
 
540
- const className = clsx("marimo-cell", "hover-actions-parent z-10", {
541
- interactive: true,
542
- ...cellStatusClasses({
543
- needsRun,
544
- errored: cellRuntime.errored,
545
- stopped: cellRuntime.stopped,
546
- disabled: cellData.config.disabled,
547
- status: cellRuntime.status,
548
- }),
549
- borderless:
550
- isMarkdownCodeHidden && hasOutput && !navigationProps["data-selected"],
551
- "pending-cut": isPendingCut,
552
- });
580
+ const className = clsx(
581
+ "marimo-cell",
582
+ "hover-actions-parent",
583
+ isPresenting
584
+ ? // Match the published styling of the read view
585
+ publishedCellClasses({
586
+ errored: cellRuntime.errored,
587
+ stopped: cellRuntime.stopped,
588
+ })
589
+ : {
590
+ "z-10": true,
591
+ interactive: true,
592
+ ...cellStatusClasses({
593
+ needsRun,
594
+ errored: cellRuntime.errored,
595
+ stopped: cellRuntime.stopped,
596
+ disabled: cellData.config.disabled,
597
+ status: cellRuntime.status,
598
+ }),
599
+ borderless:
600
+ isMarkdownCodeHidden &&
601
+ hasOutput &&
602
+ !navigationProps["data-selected"],
603
+ "pending-cut": isPendingCut,
604
+ },
605
+ );
553
606
 
554
607
  const handleRefactorWithAI: OnRefactorWithAI = useEvent(
555
608
  (opts: { prompt: string; triggerImmediately: boolean }) => {
@@ -578,7 +631,11 @@ const EditableCellComponent = ({
578
631
 
579
632
  return (
580
633
  <TooltipProvider>
581
- <CellActionsContextMenu cellId={cellId} getEditorView={getEditorView}>
634
+ <CellActionsContextMenu
635
+ cellId={cellId}
636
+ getEditorView={getEditorView}
637
+ disabled={isPresenting}
638
+ >
582
639
  <SortableCell
583
640
  tabIndex={-1}
584
641
  ref={cellRef}
@@ -587,23 +644,34 @@ const EditableCellComponent = ({
587
644
  onKeyDown={resumeCompletionHandler}
588
645
  cellId={cellId}
589
646
  canMoveX={canMoveX}
647
+ disabled={isPresenting}
648
+ hidden={presentHidden}
590
649
  title={renderCellTitle()}
591
650
  >
592
651
  <div
593
652
  tabIndex={-1}
594
- {...navigationProps}
653
+ {...(isPresenting ? undefined : navigationProps)}
595
654
  className={cn(
596
655
  className,
597
- navigationProps.className,
598
- "focus:ring-1 focus:ring-(--slate-8) focus:ring-offset-2",
656
+ !isPresenting && navigationProps.className,
657
+ !isPresenting &&
658
+ "focus:ring-1 focus:ring-(--slate-8) focus:ring-offset-2",
599
659
  )}
600
660
  ref={cellContainerRef}
601
661
  {...cellDomProps(cellId, cellData.name)}
602
662
  >
603
- <CellLeftSideActions cellId={cellId} actions={actions} />
663
+ {!isPresenting && (
664
+ <CellLeftSideActions cellId={cellId} actions={actions} />
665
+ )}
604
666
  {cellOutput === "above" && (outputArea || emptyMarkdownPlaceholder)}
667
+ {/* The tray is hidden-but-mounted while presenting so CodeMirror
668
+ state survives mode toggles. Hide via the `hidden` attribute:
669
+ preflight's `[hidden] { display: none !important }` beats
670
+ `.tray { display: flex }`, which a display class would not. */}
605
671
  <div
606
- className={cn("tray")}
672
+ data-testid="cell-tray"
673
+ className="tray"
674
+ hidden={isPresenting}
607
675
  data-has-output-above={hasOutputAbove}
608
676
  data-hidden={isMarkdownCodeHidden}
609
677
  >
@@ -643,21 +711,25 @@ const EditableCellComponent = ({
643
711
  setLanguageAdapter={setLanguageAdapter}
644
712
  outputArea={cellOutput}
645
713
  />
646
- <CellRightSideActions
647
- className={cn(
648
- isMarkdownCodeHidden && cellOutput === "below" && "top-14",
649
- )}
650
- edited={cellData.edited}
651
- status={cellRuntime.status}
652
- isCellStatusInline={isCellStatusInline}
653
- uninstantiated={uninstantiated}
654
- disabled={cellData.config.disabled}
655
- runElapsedTimeMs={cellRuntime.runElapsedTimeMs}
656
- runStartTimestamp={cellRuntime.runStartTimestamp}
657
- lastRunStartTimestamp={cellRuntime.lastRunStartTimestamp}
658
- staleInputs={cellRuntime.staleInputs}
659
- interrupted={cellRuntime.interrupted}
660
- />
714
+ {/* Unmounted while presenting: the status timer re-renders every
715
+ frame for running cells. */}
716
+ {!isPresenting && (
717
+ <CellRightSideActions
718
+ className={cn(
719
+ isMarkdownCodeHidden && cellOutput === "below" && "top-14",
720
+ )}
721
+ edited={cellData.edited}
722
+ status={cellRuntime.status}
723
+ isCellStatusInline={isCellStatusInline}
724
+ uninstantiated={uninstantiated}
725
+ disabled={cellData.config.disabled}
726
+ runElapsedTimeMs={cellRuntime.runElapsedTimeMs}
727
+ runStartTimestamp={cellRuntime.runStartTimestamp}
728
+ lastRunStartTimestamp={cellRuntime.lastRunStartTimestamp}
729
+ staleInputs={cellRuntime.staleInputs}
730
+ interrupted={cellRuntime.interrupted}
731
+ />
732
+ )}
661
733
  <div className="shoulder-bottom hover-action">
662
734
  {canDelete && isCellCodeShown && (
663
735
  <DeleteButton
@@ -675,12 +747,14 @@ const EditableCellComponent = ({
675
747
  )}
676
748
  </div>
677
749
  </div>
678
- <SqlValidationErrorBanner
679
- cellId={cellId}
680
- hide={cellRuntime.errored && !isStaleCell}
681
- />
750
+ {!isPresenting && (
751
+ <SqlValidationErrorBanner
752
+ cellId={cellId}
753
+ hide={cellRuntime.errored && !isStaleCell}
754
+ />
755
+ )}
682
756
  {cellOutput === "below" && (outputArea || emptyMarkdownPlaceholder)}
683
- {cellRuntime.serialization && (
757
+ {!isPresenting && cellRuntime.serialization && (
684
758
  <div className="py-1 px-2 flex items-center justify-end gap-2 last:rounded-b">
685
759
  {isToplevel && (
686
760
  <a
@@ -738,34 +812,36 @@ const EditableCellComponent = ({
738
812
  </Tooltip>
739
813
  </div>
740
814
  )}
741
- <ConsoleOutput
742
- consoleOutputs={cellRuntime.consoleOutputs}
743
- stale={consoleOutputStale}
744
- interrupted={cellRuntime.interrupted}
745
- // Empty name if serialization triggered
746
- cellName={cellRuntime.serialization ? "_" : cellData.name}
747
- onRefactorWithAI={handleRefactorWithAI}
748
- onClear={() => {
749
- actions.clearCellConsoleOutput({ cellId });
750
- // The debugger "Clear" (trashcan) also drops this cell's
751
- // breakpoints; no-op when none are set.
752
- clearCellBreakpoints(cellId);
753
- }}
754
- onSubmitDebugger={(text, index) => {
755
- actions.setStdinResponse({
756
- cellId,
757
- response: text,
758
- outputIndex: index,
759
- });
760
- sendStdin({ text });
761
- }}
762
- cellId={cellId}
763
- debuggerActive={cellRuntime.debuggerActive}
764
- />
815
+ {!isPresenting && (
816
+ <ConsoleOutput
817
+ consoleOutputs={cellRuntime.consoleOutputs}
818
+ stale={consoleOutputStale}
819
+ interrupted={cellRuntime.interrupted}
820
+ // Empty name if serialization triggered
821
+ cellName={cellRuntime.serialization ? "_" : cellData.name}
822
+ onRefactorWithAI={handleRefactorWithAI}
823
+ onClear={() => {
824
+ actions.clearCellConsoleOutput({ cellId });
825
+ // The debugger "Clear" (trashcan) also drops this cell's
826
+ // breakpoints; no-op when none are set.
827
+ clearCellBreakpoints(cellId);
828
+ }}
829
+ onSubmitDebugger={(text, index) => {
830
+ actions.setStdinResponse({
831
+ cellId,
832
+ response: text,
833
+ outputIndex: index,
834
+ });
835
+ sendStdin({ text });
836
+ }}
837
+ cellId={cellId}
838
+ debuggerActive={cellRuntime.debuggerActive}
839
+ />
840
+ )}
765
841
  <PendingDeleteConfirmation cellId={cellId} />
766
842
  </div>
767
- <StagedAICellFooter cellId={cellId} />
768
- {isCollapsed && (
843
+ {!isPresenting && <StagedAICellFooter cellId={cellId} />}
844
+ {isCollapsed && !isPresenting && (
769
845
  <CollapsedCellBanner
770
846
  onClick={() => actions.expandCell({ cellId })}
771
847
  count={collapseCount}
@@ -970,6 +1046,7 @@ const SetupCellComponent = ({
970
1046
  theme,
971
1047
  showPlaceholder,
972
1048
  cellId,
1049
+ mode,
973
1050
  canDelete,
974
1051
  userConfig,
975
1052
  canMoveX,
@@ -1080,10 +1157,26 @@ const SetupCellComponent = ({
1080
1157
  return undefined;
1081
1158
  };
1082
1159
 
1160
+ const isPresenting = mode === "present";
1161
+
1162
+ // CodeMirror cannot measure itself while its hidden ancestor is display:none,
1163
+ // so re-measure when returning to edit mode. (Mirrors EditableCellComponent.)
1164
+ useEffect(() => {
1165
+ if (!isPresenting) {
1166
+ editorView.current?.requestMeasure();
1167
+ }
1168
+ }, [isPresenting, editorView]);
1169
+
1083
1170
  return (
1084
1171
  <TooltipProvider>
1085
- <CellActionsContextMenu cellId={cellId} getEditorView={getEditorView}>
1086
- <div>
1172
+ <CellActionsContextMenu
1173
+ cellId={cellId}
1174
+ getEditorView={getEditorView}
1175
+ disabled={isPresenting}
1176
+ >
1177
+ {/* The setup cell has no visible output, so it is hidden (but stays
1178
+ mounted) while presenting. */}
1179
+ <div hidden={isPresenting}>
1087
1180
  <div
1088
1181
  data-status={cellRuntime.status}
1089
1182
  ref={cellRef}
@@ -1145,18 +1238,22 @@ const SetupCellComponent = ({
1145
1238
  setLanguageAdapter={Functions.NOOP}
1146
1239
  showLanguageToggles={false}
1147
1240
  />
1148
- <CellRightSideActions
1149
- edited={cellData.edited}
1150
- status={cellRuntime.status}
1151
- isCellStatusInline={false}
1152
- uninstantiated={uninstantiated}
1153
- disabled={cellData.config.disabled}
1154
- runElapsedTimeMs={cellRuntime.runElapsedTimeMs}
1155
- runStartTimestamp={cellRuntime.runStartTimestamp}
1156
- lastRunStartTimestamp={cellRuntime.lastRunStartTimestamp}
1157
- staleInputs={cellRuntime.staleInputs}
1158
- interrupted={cellRuntime.interrupted}
1159
- />
1241
+ {/* Unmounted while presenting: the status timer re-renders every
1242
+ frame for running cells. */}
1243
+ {!isPresenting && (
1244
+ <CellRightSideActions
1245
+ edited={cellData.edited}
1246
+ status={cellRuntime.status}
1247
+ isCellStatusInline={false}
1248
+ uninstantiated={uninstantiated}
1249
+ disabled={cellData.config.disabled}
1250
+ runElapsedTimeMs={cellRuntime.runElapsedTimeMs}
1251
+ runStartTimestamp={cellRuntime.runStartTimestamp}
1252
+ lastRunStartTimestamp={cellRuntime.lastRunStartTimestamp}
1253
+ staleInputs={cellRuntime.staleInputs}
1254
+ interrupted={cellRuntime.interrupted}
1255
+ />
1256
+ )}
1160
1257
  <div className="shoulder-bottom hover-action">
1161
1258
  {canDelete && (
1162
1259
  <DeleteButton
@@ -0,0 +1,66 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+ import { render } from "@testing-library/react";
3
+ import { createStore, Provider } from "jotai";
4
+ import { describe, expect, it } from "vitest";
5
+ import { MockRequestClient } from "@/__mocks__/requests";
6
+ import { parseAppConfig } from "@/core/config/config-schema";
7
+ import { initialLayoutState, layoutStateAtom } from "@/core/layout/layout";
8
+ import { type AppMode, kioskModeAtom } from "@/core/mode";
9
+ import { requestClientAtom } from "@/core/network/requests";
10
+ import { CellsRenderer } from "../cells-renderer";
11
+ import type { LayoutType } from "../types";
12
+
13
+ function renderWithStore(
14
+ mode: AppMode,
15
+ {
16
+ kiosk = false,
17
+ layout = "vertical",
18
+ }: { kiosk?: boolean; layout?: LayoutType } = {},
19
+ ) {
20
+ const store = createStore();
21
+ store.set(requestClientAtom, MockRequestClient.create());
22
+ store.set(kioskModeAtom, kiosk);
23
+ store.set(layoutStateAtom, {
24
+ ...initialLayoutState(),
25
+ selectedLayout: layout,
26
+ });
27
+
28
+ return render(
29
+ <Provider store={store}>
30
+ <CellsRenderer appConfig={parseAppConfig({})} mode={mode}>
31
+ <div data-testid="notebook-children" />
32
+ </CellsRenderer>
33
+ </Provider>,
34
+ );
35
+ }
36
+
37
+ describe("CellsRenderer", () => {
38
+ it("renders children in edit mode", () => {
39
+ const { queryByTestId } = renderWithStore("edit");
40
+ expect(queryByTestId("notebook-children")).toBeTruthy();
41
+ });
42
+
43
+ it("keeps children mounted in present mode with the vertical layout", () => {
44
+ // This preserves cell output DOM across the edit <-> present toggle;
45
+ // swapping to the layout renderer would remount every output.
46
+ const { queryByTestId } = renderWithStore("present");
47
+ expect(queryByTestId("notebook-children")).toBeTruthy();
48
+ });
49
+
50
+ it("uses the layout renderer in present mode with a non-vertical layout", () => {
51
+ // Only present+vertical keeps the editable tree mounted; grid/slides swap
52
+ // to their layout renderer (which remounts outputs) per the toggle logic.
53
+ const { queryByTestId } = renderWithStore("present", { layout: "grid" });
54
+ expect(queryByTestId("notebook-children")).toBeFalsy();
55
+ });
56
+
57
+ it("uses the layout renderer in read mode", () => {
58
+ const { queryByTestId } = renderWithStore("read");
59
+ expect(queryByTestId("notebook-children")).toBeFalsy();
60
+ });
61
+
62
+ it("uses the layout renderer in kiosk mode", () => {
63
+ const { queryByTestId } = renderWithStore("edit", { kiosk: true });
64
+ expect(queryByTestId("notebook-children")).toBeFalsy();
65
+ });
66
+ });
@@ -89,22 +89,32 @@ const CellArrayInternal: React.FC<CellArrayProps> = ({
89
89
  const { theme } = useTheme();
90
90
  const { toggleSidebarPanel } = useChromeActions();
91
91
 
92
+ const isPresenting = mode === "present";
93
+
92
94
  // Side-effects
93
95
  useFocusFirstEditor();
94
96
 
95
97
  // HOTKEYS
96
- useHotkey("global.focusTop", actions.focusTopCell);
97
- useHotkey("global.focusBottom", actions.focusBottomCell);
98
+ // Cell-editing hotkeys are disabled while presenting
99
+ const whilePresenting = { disabled: isPresenting };
100
+ useHotkey("global.focusTop", actions.focusTopCell, whilePresenting);
101
+ useHotkey("global.focusBottom", actions.focusBottomCell, whilePresenting);
98
102
  useHotkey("global.toggleSidebar", toggleSidebarPanel);
99
- useHotkey("global.foldCode", actions.foldAll);
100
- useHotkey("global.unfoldCode", actions.unfoldAll);
101
- useHotkey("global.formatAll", () => {
102
- formatAll();
103
- });
103
+ useHotkey("global.foldCode", actions.foldAll, whilePresenting);
104
+ useHotkey("global.unfoldCode", actions.unfoldAll, whilePresenting);
105
+ useHotkey(
106
+ "global.formatAll",
107
+ () => {
108
+ formatAll();
109
+ },
110
+ whilePresenting,
111
+ );
104
112
  // Catch all to avoid native OS behavior
105
- // Otherwise a user might try to hide a cell and accidentally hide the OS window
106
- useHotkey("cell.hideCode", Functions.NOOP);
107
- useHotkey("cell.format", Functions.NOOP);
113
+ // Otherwise a user might try to hide a cell and accidentally hide the OS
114
+ // window. While presenting, no cell editing is possible, so let the
115
+ // keystrokes reach the browser/OS.
116
+ useHotkey("cell.hideCode", Functions.NOOP, whilePresenting);
117
+ useHotkey("cell.format", Functions.NOOP, whilePresenting);
108
118
 
109
119
  const cellIds = useCellIds();
110
120
  const scrollKey = useScrollKey();
@@ -121,10 +131,11 @@ const CellArrayInternal: React.FC<CellArrayProps> = ({
121
131
  return (
122
132
  <VerticalLayoutWrapper
123
133
  // 'pb' allows the user to put the cell in the middle of the screen
124
- className="pb-[40vh]"
134
+ className={cn(!isPresenting && "pb-[40vh]")}
125
135
  invisible={false}
126
136
  appConfig={appConfig}
127
- innerClassName="pr-4" // For the floating actions
137
+ // 'pr' makes room for the floating actions
138
+ innerClassName={cn(!isPresenting && "pr-4")}
128
139
  >
129
140
  <PackageAlert />
130
141
  <StartupLogsAlert />
@@ -186,6 +197,7 @@ const CellColumn: React.FC<{
186
197
 
187
198
  const hasOnlyOneCell = cellIds.hasOnlyOneId();
188
199
  const hasSetupCell = cellIds.inOrderIds.includes(SETUP_CELL_ID);
200
+ const isPresenting = mode === "present";
189
201
 
190
202
  return (
191
203
  <Column
@@ -195,8 +207,9 @@ const CellColumn: React.FC<{
195
207
  canMoveRight={index < columnsLength - 1}
196
208
  width={appConfig.width}
197
209
  canDelete={columnsLength > 1}
210
+ presenting={isPresenting}
198
211
  footer={
199
- hideControls ? null : (
212
+ hideControls || isPresenting ? null : (
200
213
  <AddCellButtons
201
214
  columnId={columnId}
202
215
  className={cn(