@marimo-team/frontend 0.21.2-dev57 → 0.21.2-dev59

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 (584) hide show
  1. package/dist/assets/CellStatus-C-nDPVVw.js +1 -0
  2. package/dist/assets/{ConnectedDataExplorerComponent-7yXYooWG.js → ConnectedDataExplorerComponent-B5igOqdA.js} +1 -1
  3. package/dist/assets/{ImperativeModal-C3CD5-Aq.js → ImperativeModal-C5ZzjCQG.js} +1 -1
  4. package/dist/assets/{JsonOutput-DqjAyzM8.js → JsonOutput-bhD4i0Fm.js} +8 -8
  5. package/dist/assets/LazyAnyLanguageCodeMirror-C58z97yX.js +2 -0
  6. package/dist/assets/{MarimoErrorOutput-Dat_S09q.js → MarimoErrorOutput-BIh0hMl8.js} +5 -5
  7. package/dist/assets/RenderHTML-CRY6pZVc.js +1 -0
  8. package/dist/assets/{add-cell-with-ai-y2xroEGf.js → add-cell-with-ai-BvN8AbcB.js} +15 -15
  9. package/dist/assets/{add-connection-dialog-CaIQ6Jta.js → add-connection-dialog-BvzGJCV7.js} +23 -23
  10. package/dist/assets/{agent-panel-DziFrEjJ.js → agent-panel-DLrLHhZB.js} +5 -5
  11. package/dist/assets/ai-model-dropdown-CQDhHQ1r.js +5 -0
  12. package/dist/assets/{any-language-editor-DZYnKlJB.js → any-language-editor-DwTh8fpE.js} +1 -1
  13. package/dist/assets/apl-BvMImcFf.js +1 -0
  14. package/dist/assets/{app-config-button-CpAv9Tiu.js → app-config-button-CnR7XJXP.js} +1 -1
  15. package/dist/assets/{arc-BrTIAGt4.js → arc-DUSwcTI9.js} +1 -1
  16. package/dist/assets/{architecture-7HQA4BMR-BewjmwdA.js → architecture-7HQA4BMR-DoF6afh3.js} +1 -1
  17. package/dist/assets/{architectureDiagram-VXUJARFQ-DKmk99ac.js → architectureDiagram-VXUJARFQ-d3bjsML7.js} +1 -1
  18. package/dist/assets/asciiarmor-BYYwBbrl.js +1 -0
  19. package/dist/assets/asn1-Dlt8rkAb.js +1 -0
  20. package/dist/assets/{azure-Dw5gKmUz.js → azure-DMJRLvDT.js} +1 -1
  21. package/dist/assets/{blockDiagram-VD42YOAC-TpAhP5OQ.js → blockDiagram-VD42YOAC-CjpBwM9S.js} +1 -1
  22. package/dist/assets/brainfuck-B1Z5ou__.js +1 -0
  23. package/dist/assets/{c4Diagram-YG6GDRKO-Dg8hCyKf.js → c4Diagram-YG6GDRKO-BsB04ueE.js} +1 -1
  24. package/dist/assets/{cache-panel-D0OsHk_D.js → cache-panel-B9gltP7l.js} +1 -1
  25. package/dist/assets/{cell-editor-RbAVpSFb.js → cell-editor-D5XEomtX.js} +11 -11
  26. package/dist/assets/{cell-link-CNgO3c-T.js → cell-link-Cp4c28Yf.js} +1 -1
  27. package/dist/assets/cells-DiVpbkA6.js +230 -0
  28. package/dist/assets/channel-BjUuxbyU.js +1 -0
  29. package/dist/assets/{chat-display-BPUVrlA6.js → chat-display-DhUQL9pu.js} +1 -1
  30. package/dist/assets/{chat-panel-esz5TfF-.js → chat-panel-fxitp0Hy.js} +2 -2
  31. package/dist/assets/{chunk-4BX2VUAB-DOQhLGwX.js → chunk-4BX2VUAB-DhvNmHH5.js} +1 -1
  32. package/dist/assets/chunk-55IACEB6-DPm6ES7n.js +1 -0
  33. package/dist/assets/{chunk-5FQGJX7Z-sGWxL7Ey.js → chunk-5FQGJX7Z-BSe8eGYF.js} +2 -2
  34. package/dist/assets/{chunk-ABZYJK2D-DXJ7hnjx.js → chunk-ABZYJK2D-Cw3YveaS.js} +3 -3
  35. package/dist/assets/{chunk-ATLVNIR6-CTEqcLEc.js → chunk-ATLVNIR6-ChKiaY37.js} +1 -1
  36. package/dist/assets/{chunk-B4BG7PRW-CkAIqtPf.js → chunk-B4BG7PRW-CjzWXMFh.js} +1 -1
  37. package/dist/assets/{chunk-CVBHYZKI-BmNXddyI.js → chunk-CVBHYZKI-BX0N_ipT.js} +1 -1
  38. package/dist/assets/{chunk-DI55MBZ5-C4F9vu8o.js → chunk-DI55MBZ5-BLrTiPQ-.js} +1 -1
  39. package/dist/assets/{chunk-EXTU4WIE-BT0Py-4P.js → chunk-EXTU4WIE-DEQUOsSM.js} +1 -1
  40. package/dist/assets/{chunk-FMBD7UC4-BF_CXOnN.js → chunk-FMBD7UC4-BDlH9XLH.js} +1 -1
  41. package/dist/assets/{chunk-HN2XXSSU-BstCPYtG.js → chunk-HN2XXSSU-ujlBpRMF.js} +1 -1
  42. package/dist/assets/{chunk-JA3XYJ7Z-CGd7jja_.js → chunk-JA3XYJ7Z-DVg9ra4h.js} +1 -1
  43. package/dist/assets/{chunk-JZLCHNYA-CqY-RYTj.js → chunk-JZLCHNYA-BTjSP-Yu.js} +1 -1
  44. package/dist/assets/{chunk-MI3HLSF2-BceZdyTR.js → chunk-MI3HLSF2-D9JXkg6-.js} +1 -1
  45. package/dist/assets/{chunk-N4CR4FBY-aUDjVzN7.js → chunk-N4CR4FBY-U_urcDYs.js} +2 -2
  46. package/dist/assets/{chunk-QN33PNHL-DHnCb5-U.js → chunk-QN33PNHL-rFbjvOIx.js} +1 -1
  47. package/dist/assets/{chunk-QXUST7PY-CRO5kYCE.js → chunk-QXUST7PY-BQj8er3i.js} +1 -1
  48. package/dist/assets/{chunk-QZHKN3VN-D3EIvP2i.js → chunk-QZHKN3VN-zZhG5AHT.js} +1 -1
  49. package/dist/assets/{chunk-S3R3BYOJ-CSHQgcuP.js → chunk-S3R3BYOJ-ZHSbXnZr.js} +1 -1
  50. package/dist/assets/{chunk-TZMSLE5B-CE7o9asH.js → chunk-TZMSLE5B-BAOCWmWp.js} +1 -1
  51. package/dist/assets/classDiagram-2ON5EDUG-Dk_A06Wi.js +1 -0
  52. package/dist/assets/classDiagram-v2-WZHVMYZB-CI0Lejhn.js +1 -0
  53. package/dist/assets/{clike-C3ewt06X.js → clike-D1aNLn0X.js} +1 -1
  54. package/dist/assets/clojure-DjNF1_gb.js +1 -0
  55. package/dist/assets/cmake-BDQMYLKM.js +1 -0
  56. package/dist/assets/cobol-DuPGAg14.js +1 -0
  57. package/dist/assets/{code-block-37QAKDTI-DMpe1jNG.js → code-block-37QAKDTI-BU3oxVk6.js} +1 -1
  58. package/dist/assets/coffeescript-Cpt7RKvC.js +1 -0
  59. package/dist/assets/{column-preview-BUKHsglA.js → column-preview-CWToI8XM.js} +1 -1
  60. package/dist/assets/{command-DmzEbs6L.js → command-B9VNhm0p.js} +1 -1
  61. package/dist/assets/{command-palette-AKdHOsJP.js → command-palette-ur_xyrxX.js} +1 -1
  62. package/dist/assets/{common-B4yshY-H.js → common-BqZ5L0i8.js} +1 -1
  63. package/dist/assets/commonlisp-BRjl0xya.js +1 -0
  64. package/dist/assets/{components-DCqJqyys.js → components-BouDP-tv.js} +1 -1
  65. package/dist/assets/{components-oKCjx6cN.js → components-CUetByBv.js} +1 -1
  66. package/dist/assets/{context-CRmPPhx9.js → context-CqNy_uER.js} +1 -1
  67. package/dist/assets/context-aware-panel-CD_txOWw.js +3 -0
  68. package/dist/assets/{copy-icon-P0kzz1Pr.js → copy-icon-WvgZ60QO.js} +1 -1
  69. package/dist/assets/{cose-bilkent-S5V4N54A-Bd5HJPaN.js → cose-bilkent-S5V4N54A-C4qI5Omf.js} +1 -1
  70. package/dist/assets/createReducer-Dvh64vBW.js +1 -0
  71. package/dist/assets/crystal-BJ72BOy1.js +1 -0
  72. package/dist/assets/{css-CCWfM5vT.js → css-D-8RA_n9.js} +1 -1
  73. package/dist/assets/cypher-qOLKQlRB.js +1 -0
  74. package/dist/assets/d-iOURkVzR.js +1 -0
  75. package/dist/assets/{dagre-6UL2VRFP-XqoNLMQ3.js → dagre-6UL2VRFP-CoEAbEhB.js} +1 -1
  76. package/dist/assets/{data-grid-overlay-editor-Cus1-BFN.js → data-grid-overlay-editor-DXzdnLZF.js} +1 -1
  77. package/dist/assets/{datasource-DKHG39NV.js → datasource-C5fKDIEK.js} +2 -2
  78. package/dist/assets/{dependency-graph-panel-7GKT3dyD.js → dependency-graph-panel-BCYRlR0F.js} +4 -4
  79. package/dist/assets/{diagram-PSM6KHXK-BuzKNNcN.js → diagram-PSM6KHXK-CzPUkhGz.js} +1 -1
  80. package/dist/assets/{diagram-QEK2KX5R-A5LBQS11.js → diagram-QEK2KX5R-D5RBmWAK.js} +1 -1
  81. package/dist/assets/{diagram-S2PKOQOG-dkJE8SA0.js → diagram-S2PKOQOG-C8PeRX7S.js} +1 -1
  82. package/dist/assets/{dialog-1_jIyAb_.js → dialog-C_NcD2pn.js} +1 -1
  83. package/dist/assets/diff-Cdd81Zxl.js +1 -0
  84. package/dist/assets/{dist-e6Ho4upI.js → dist-1u2or7ID.js} +1 -1
  85. package/dist/assets/{dist-DSlq5ZeQ.js → dist-BWa7crGu.js} +1 -1
  86. package/dist/assets/{dist-CsRbK9-Y.js → dist-BZOFXjSq.js} +1 -1
  87. package/dist/assets/dist-BgRFL8FO.js +1 -0
  88. package/dist/assets/{dist-Br306776.js → dist-Cj6Bv4PM.js} +1 -1
  89. package/dist/assets/dist-D6IRobNQ.js +1 -0
  90. package/dist/assets/{dist-Tk70DR_I.js → dist-DBaxVoPL.js} +1 -1
  91. package/dist/assets/{dist-f9b2H4q_.js → dist-DQg1jiNa.js} +1 -1
  92. package/dist/assets/{dist-_TwZ4tIe.js → dist-DZurUgwR.js} +1 -1
  93. package/dist/assets/{dist-C3AnARPE.js → dist-D_QUx5Gn.js} +1 -1
  94. package/dist/assets/{dist-B_buFm3B.js → dist-Dq1aTs7B.js} +1 -1
  95. package/dist/assets/{dist-ZM59OWYL.js → dist-NoS9f1Fr.js} +1 -1
  96. package/dist/assets/dist-i55eG_gB.js +1 -0
  97. package/dist/assets/dist-vu0dYsZ6.js +1 -0
  98. package/dist/assets/{dist-BWGxTsTP.js → dist-wAlLVqgL.js} +1 -1
  99. package/dist/assets/{dockerfile-ClV2Mqz8.js → dockerfile-t2fxOBWV.js} +1 -1
  100. package/dist/assets/documentation-panel-B-pPPA6b.js +1 -0
  101. package/dist/assets/{download-B1vXaivj.js → download-UmTPygP7.js} +1 -1
  102. package/dist/assets/dtd-CXebdwLo.js +1 -0
  103. package/dist/assets/dylan-YUx5_Nke.js +1 -0
  104. package/dist/assets/ecl-CktOv__x.js +1 -0
  105. package/dist/assets/{edit-page-Dt-k7cUh.js → edit-page-CxaQclsT.js} +7 -7
  106. package/dist/assets/eiffel-Cwa25B6x.js +1 -0
  107. package/dist/assets/elm-COtRRWOj.js +1 -0
  108. package/dist/assets/{erDiagram-Q2GNP2WA-CgH6udOW.js → erDiagram-Q2GNP2WA-Bvb9X3rD.js} +1 -1
  109. package/dist/assets/erlang-Ir3c4mPd.js +1 -0
  110. package/dist/assets/{error-banner-J5F3weEj.js → error-banner-BYG94WiL.js} +1 -1
  111. package/dist/assets/{error-panel-DnhKJ5Ou.js → error-panel-CpC5W_ax.js} +1 -1
  112. package/dist/assets/{es-DYI7U61K.js → es-DKHH3Swu.js} +1 -1
  113. package/dist/assets/{esm-DKLLCu3N.js → esm-Clp2XqMu.js} +1 -1
  114. package/dist/assets/{esm-BC1J92im.js → esm-DnSMDF4m.js} +1 -1
  115. package/dist/assets/{factor-CrpY0izf.js → factor-CwMUgBOu.js} +1 -1
  116. package/dist/assets/factor-DLUSHz6o.js +1 -0
  117. package/dist/assets/{field-B08lvxnl.js → field-BEgvDIrV.js} +1 -1
  118. package/dist/assets/file-explorer-panel-CrD6YkZ_.js +26 -0
  119. package/dist/assets/{file-icons-3DTS8ZM7.js → file-icons-BTQcwa4T.js} +1 -1
  120. package/dist/assets/floating-outline-Dz5Wcbfw.js +1 -0
  121. package/dist/assets/{flowDiagram-NV44I4VS-D85BL4rA.js → flowDiagram-NV44I4VS-CF0XcGrZ.js} +1 -1
  122. package/dist/assets/{focus-DlJH7sfh.js → focus-BRTg8M44.js} +1 -1
  123. package/dist/assets/{form-760_EqmF.js → form-qtFXuhlh.js} +1 -1
  124. package/dist/assets/{formats-wYuh1bqp.js → formats-CQWEZHk-.js} +1 -1
  125. package/dist/assets/{formatting-CraOPe94.js → formatting-DBrNlcJ6.js} +1 -1
  126. package/dist/assets/forth-DdV4URDJ.js +1 -0
  127. package/dist/assets/fortran-rTDtSjFc.js +1 -0
  128. package/dist/assets/{gallery-page--paiPvYX.js → gallery-page-DhOJHDwV.js} +1 -1
  129. package/dist/assets/{ganttDiagram-JELNMOA3-DzCOXWlF.js → ganttDiagram-JELNMOA3-BXfHO6g0.js} +1 -1
  130. package/dist/assets/gas-B20k3keQ.js +1 -0
  131. package/dist/assets/gherkin-DdH6eiN0.js +1 -0
  132. package/dist/assets/{gitGraph-G5XIXVHT-iDzw7G2X.js → gitGraph-G5XIXVHT-D3o7km_A.js} +1 -1
  133. package/dist/assets/{gitGraphDiagram-V2S2FVAM-BUHURX6t.js → gitGraphDiagram-V2S2FVAM-Blhov9dO.js} +1 -1
  134. package/dist/assets/{glide-data-editor-DYdoQTO5.js → glide-data-editor-CO6jMjYm.js} +4 -4
  135. package/dist/assets/{globals-7M5DRsIb.js → globals-DD4XdbWe.js} +1 -1
  136. package/dist/assets/groovy-k_2ke765.js +1 -0
  137. package/dist/assets/haskell-JTqAy6cw.js +1 -0
  138. package/dist/assets/haxe-g4mjq9YQ.js +1 -0
  139. package/dist/assets/{home-page-CxQ1e98h.js → home-page-CwgtN9Ku.js} +1 -1
  140. package/dist/assets/{hooks-C3jEff2O.js → hooks-CLoML3Pf.js} +1 -1
  141. package/dist/assets/{html-to-image-DTFXm6_Z.js → html-to-image-CRCamxYo.js} +1 -1
  142. package/dist/assets/idl-CQEReZIk.js +1 -0
  143. package/dist/assets/{index-7PDAWVlZ.js → index-BrQynBQn.js} +17 -17
  144. package/dist/assets/{info-VBDWY6EO-CPHm9IfG.js → info-VBDWY6EO-CPJvjUKi.js} +1 -1
  145. package/dist/assets/infoDiagram-HS3SLOUP-CCrt0lHA.js +2 -0
  146. package/dist/assets/{input-CN1ZeRYm.js → input-lyDIN6R6.js} +1 -1
  147. package/dist/assets/javascript-Th71hKcK.js +1 -0
  148. package/dist/assets/{journeyDiagram-XKPGCS4Q-B1dvnV4D.js → journeyDiagram-XKPGCS4Q-Bs_9B9e_.js} +1 -1
  149. package/dist/assets/julia-KdjfFIx7.js +1 -0
  150. package/dist/assets/{kanban-definition-3W4ZIXB7-CefbrXQv.js → kanban-definition-3W4ZIXB7-_GEp627b.js} +1 -1
  151. package/dist/assets/katex-BalO4WMU.js +1 -0
  152. package/dist/assets/kiosk-mode-Di6uNlNd.js +1 -0
  153. package/dist/assets/{label-TNNaT1M9.js → label-CNWsXpEn.js} +1 -1
  154. package/dist/assets/{layout-3b3tzmbb.js → layout-OxzkS5En.js} +4 -4
  155. package/dist/assets/{line-BBSd2MUH.js → line-BKm-YkCh.js} +1 -1
  156. package/dist/assets/{linear-BDnrHGYO.js → linear-DG7yljSg.js} +1 -1
  157. package/dist/assets/livescript-OIMP9q9l.js +1 -0
  158. package/dist/assets/{logs-panel-C4k_2IHW.js → logs-panel-Dt4wzfgH.js} +1 -1
  159. package/dist/assets/{loro_wasm_bg-MY7PmKYj.js → loro_wasm_bg-CvVVQqkx.js} +1 -1
  160. package/dist/assets/lua-blzLZg7R.js +1 -0
  161. package/dist/assets/{markdown-renderer-DSy5IuAx.js → markdown-renderer-nMv2xwHt.js} +3 -3
  162. package/dist/assets/mathematica-CMJa84MS.js +1 -0
  163. package/dist/assets/mbox-DVlt9Sx8.js +1 -0
  164. package/dist/assets/mermaid-4DMBBIKO-gmMzGFR4.js +1 -0
  165. package/dist/assets/{mermaid-C43VbdrM.js → mermaid-DEOW_c2X.js} +3 -3
  166. package/dist/assets/{mermaid-parser.core-CdM8D_p_.js → mermaid-parser.core-ChpHatjH.js} +2 -2
  167. package/dist/assets/{mhchem-B98RQJ-y.js → mhchem-DqNBdKjC.js} +1 -1
  168. package/dist/assets/{mindmap-definition-VGOIOE7T-CcV7D-wF.js → mindmap-definition-VGOIOE7T-CsErmnfz.js} +1 -1
  169. package/dist/assets/mirc-CE9zFxnR.js +1 -0
  170. package/dist/assets/mllike-UPrOWD4R.js +1 -0
  171. package/dist/assets/modelica-CXEKMd0n.js +1 -0
  172. package/dist/assets/mscgen-CzEcWkMH.js +1 -0
  173. package/dist/assets/mumps-DNi45Qjm.js +1 -0
  174. package/dist/assets/name-cell-input-CwvGCJkg.js +1 -0
  175. package/dist/assets/{nsis-BeaU1Q2K.js → nsis-10Du03KF.js} +1 -1
  176. package/dist/assets/nsis-Cjsw1q_J.js +1 -0
  177. package/dist/assets/ntriples-ByafJqO3.js +1 -0
  178. package/dist/assets/{number-overlay-editor-BBJO1mf8.js → number-overlay-editor-zZDGu9D2.js} +1 -1
  179. package/dist/assets/octave-Bg9NfY8T.js +1 -0
  180. package/dist/assets/{ordinal-CMAUv8ku.js → ordinal-CIVqSC4M.js} +1 -1
  181. package/dist/assets/{outline-panel-D7CJwO8u.js → outline-panel-CCmk1ERZ.js} +1 -1
  182. package/dist/assets/oz-BqUh_R9x.js +1 -0
  183. package/dist/assets/{packages-panel-Bp1SYjgc.js → packages-panel-BzayhsFC.js} +1 -1
  184. package/dist/assets/{packet-DYOGHKS2-0KdzLf9c.js → packet-DYOGHKS2-0_hZggkb.js} +1 -1
  185. package/dist/assets/panels-B7hsDiui.js +1 -0
  186. package/dist/assets/pascal-T5LJ_IPG.js +1 -0
  187. package/dist/assets/perl-QB_H1sT2.js +1 -0
  188. package/dist/assets/{pie-VRWISCQL-C6EIS9iq.js → pie-VRWISCQL-QeXFV_RN.js} +1 -1
  189. package/dist/assets/{pieDiagram-ADFJNKIX-C1fBf15W.js → pieDiagram-ADFJNKIX-CHFQxGML.js} +1 -1
  190. package/dist/assets/pig-BX8GE3n0.js +1 -0
  191. package/dist/assets/powershell-CgQaEAdZ.js +1 -0
  192. package/dist/assets/{precisionRound-CCOoIlcP.js → precisionRound-NX56vp6K.js} +1 -1
  193. package/dist/assets/{process-output-BxPWHcIi.js → process-output-D_zUglHE.js} +1 -1
  194. package/dist/assets/properties-obn8TWyy.js +1 -0
  195. package/dist/assets/protobuf-C-zxlF8D.js +1 -0
  196. package/dist/assets/pug--0L5ulw9.js +1 -0
  197. package/dist/assets/{pug-v81J9ytZ.js → pug-C9pOca2F.js} +1 -1
  198. package/dist/assets/puppet-05PW0eq8.js +1 -0
  199. package/dist/assets/python-DTi_lJAD.js +1 -0
  200. package/dist/assets/q-DDewC_-L.js +1 -0
  201. package/dist/assets/{quadrantDiagram-AYHSOK5B-RVooN-fX.js → quadrantDiagram-AYHSOK5B-BWfhvbIs.js} +1 -1
  202. package/dist/assets/r-BP2yA_lV.js +1 -0
  203. package/dist/assets/{radar-ZZBFDIW7-IOV25h32.js → radar-ZZBFDIW7-CPk9iUBG.js} +1 -1
  204. package/dist/assets/{react-vega-BKRQSy0g.js → react-vega-BbTMwpa-.js} +1 -1
  205. package/dist/assets/react-vega-_CJceHW7.js +1 -0
  206. package/dist/assets/{readonly-python-code-D95oshJa.js → readonly-python-code-BQo0UqCJ.js} +1 -1
  207. package/dist/assets/{renderShortcut-BYvKm38e.js → renderShortcut-DG5sXSxr.js} +1 -1
  208. package/dist/assets/{requirementDiagram-UZGBJVZJ-DtqOYJpH.js → requirementDiagram-UZGBJVZJ-DdZsVZPu.js} +1 -1
  209. package/dist/assets/rpm-BTpPEnAJ.js +1 -0
  210. package/dist/assets/ruby-_km6sWpH.js +1 -0
  211. package/dist/assets/{run-page-B7CASued.js → run-page-BN0QZ7-c.js} +1 -1
  212. package/dist/assets/{runs-Bhy0tbWr.js → runs-CtxlyzdZ.js} +1 -1
  213. package/dist/assets/{sankeyDiagram-TZEHDZUN-DmcooLA8.js → sankeyDiagram-TZEHDZUN-BiKMK7q3.js} +1 -1
  214. package/dist/assets/sas-BV0z5M7P.js +1 -0
  215. package/dist/assets/scheme-AMw7OHvW.js +1 -0
  216. package/dist/assets/{scratchpad-panel-BIVRgYOU.js → scratchpad-panel-BpM3Nxzw.js} +1 -1
  217. package/dist/assets/{secrets-panel-C24hZEiO.js → secrets-panel-BVJ1G2-2.js} +1 -1
  218. package/dist/assets/{sequenceDiagram-WL72ISMW-S2qeLb7J.js → sequenceDiagram-WL72ISMW-B1m5IqrQ.js} +1 -1
  219. package/dist/assets/session-panel-CUtOop5w.js +1 -0
  220. package/dist/assets/shell-BepJCs0S.js +1 -0
  221. package/dist/assets/sieve-YvKFjNqY.js +1 -0
  222. package/dist/assets/{slides-component-Brm_TS4x.js → slides-component-Bg8T1XwW.js} +1 -1
  223. package/dist/assets/smalltalk-e8puLVxg.js +1 -0
  224. package/dist/assets/{snippets-panel-D1JAeJj1.js → snippets-panel-CND2QIaH.js} +1 -1
  225. package/dist/assets/sparql-IwwbUejm.js +1 -0
  226. package/dist/assets/{src-Bp_72rVO.js → src-lcGySDV2.js} +1 -1
  227. package/dist/assets/{state-Cz_wrzCz.js → state-C-thupmq.js} +1 -1
  228. package/dist/assets/{state-BagvlaEz.js → state-Cm3zkTs2.js} +1 -1
  229. package/dist/assets/{state-DMQXxemS.js → state-Dxl7WjW3.js} +1 -1
  230. package/dist/assets/{stateDiagram-FKZM4ZOC-uuQ60pIl.js → stateDiagram-FKZM4ZOC-B_fZr0Jz.js} +1 -1
  231. package/dist/assets/stateDiagram-v2-4FDKWEC3-CnaooVt9.js +1 -0
  232. package/dist/assets/{step-BkfKj3CL.js → step-B5y1YzZ4.js} +1 -1
  233. package/dist/assets/stylus-C5qHDsoA.js +1 -0
  234. package/dist/assets/swift-CD6FyF1F.js +1 -0
  235. package/dist/assets/{switch-Bwpd2AFq.js → switch-C2PmTLIx.js} +1 -1
  236. package/dist/assets/tcl-189LoKbJ.js +1 -0
  237. package/dist/assets/{terminal-Gl8Fi44y.js → terminal-8keBq1HC.js} +1 -1
  238. package/dist/assets/textile-dSHgbtG8.js +1 -0
  239. package/dist/assets/{time-Bw8f15NM.js → time-D8_flTb-.js} +1 -1
  240. package/dist/assets/{timeline-definition-IT6M3QCI-TKWeDnSQ.js → timeline-definition-IT6M3QCI-CiMZB-_n.js} +1 -1
  241. package/dist/assets/toml-CWUvzxNs.js +1 -0
  242. package/dist/assets/{tracing-DwAC7DWN.js → tracing-Cab2_N64.js} +1 -1
  243. package/dist/assets/{tracing-panel-D1iNgclL.js → tracing-panel-h6SS64Fd.js} +2 -2
  244. package/dist/assets/{tree-WVrWjdwv.js → tree-Duf22i7P.js} +1 -1
  245. package/dist/assets/{treemap-GDKQZRPO-BUa0eLeZ.js → treemap-GDKQZRPO-BqT6xXWn.js} +1 -1
  246. package/dist/assets/troff-CkFGw7sb.js +1 -0
  247. package/dist/assets/ttcn-B71Rl_FP.js +1 -0
  248. package/dist/assets/ttcn-cfg-BsJCQ8Pc.js +1 -0
  249. package/dist/assets/turtle-AJRCjN1N.js +1 -0
  250. package/dist/assets/{useAddCell-D6Q7JziZ.js → useAddCell-fzJF_CdR.js} +1 -1
  251. package/dist/assets/{useBoolean-CrltYVhE.js → useBoolean-DJdaVVhu.js} +1 -1
  252. package/dist/assets/useCellActionButton-C-mIavMW.js +1 -0
  253. package/dist/assets/{useDateFormatter-DOoVZUts.js → useDateFormatter-CYAwsqZA.js} +1 -1
  254. package/dist/assets/{useDeleteCell-d8veThW7.js → useDeleteCell-lfqkVcrN.js} +1 -1
  255. package/dist/assets/{useDependencyPanelTab-B3iIj3MO.js → useDependencyPanelTab-Nq81zNNI.js} +1 -1
  256. package/dist/assets/{useInstallPackage-CQEr5429.js → useInstallPackage-BVUUWUU8.js} +1 -1
  257. package/dist/assets/useNotebookActions-BAw99pt_.js +1 -0
  258. package/dist/assets/{useNumberFormatter-BXZcbTzH.js → useNumberFormatter-D5CeG3Kn.js} +1 -1
  259. package/dist/assets/{usePress-alQ5Crny.js → usePress-CHKiC-9E.js} +1 -1
  260. package/dist/assets/useRunCells-6ne-1pJW.js +1 -0
  261. package/dist/assets/useSplitCell-D8a8QoYd.js +1 -0
  262. package/dist/assets/{utils-C24l2A1T.js → utils-DnNnBV1N.js} +1 -1
  263. package/dist/assets/vb-gPFTxjZr.js +1 -0
  264. package/dist/assets/vbscript-CMzdZB2G.js +1 -0
  265. package/dist/assets/{vega-component-9Pf4pVZL.js → vega-component-DnJzUfQO.js} +1 -1
  266. package/dist/assets/{vega-loader.browser-BJ9oKrvH.js → vega-loader.browser-xq8miGHn.js} +1 -1
  267. package/dist/assets/velocity-DBHzqIXP.js +1 -0
  268. package/dist/assets/verilog-CrrLE4DH.js +1 -0
  269. package/dist/assets/vhdl-CcYUxt_-.js +1 -0
  270. package/dist/assets/webidl-Cx4I26Tn.js +1 -0
  271. package/dist/assets/{write-secret-modal-BFCsWMoW.js → write-secret-modal-5AT0ZoJv.js} +1 -1
  272. package/dist/assets/xquery-Cu7k_x_s.js +1 -0
  273. package/dist/assets/{xychartDiagram-PRI3JC2R-CIp-yeSa.js → xychartDiagram-PRI3JC2R-B3F_v5OL.js} +1 -1
  274. package/dist/assets/yacas-DEQ-2nrM.js +1 -0
  275. package/dist/assets/z80-D9sXBSXs.js +1 -0
  276. package/dist/index.html +83 -84
  277. package/package.json +1 -1
  278. package/src/__mocks__/requests.ts +1 -0
  279. package/src/components/editor/file-tree/file-explorer.tsx +16 -2
  280. package/src/components/editor/file-tree/file-viewer.tsx +17 -3
  281. package/src/core/cells/__tests__/apply-transaction.test.ts +279 -0
  282. package/src/core/cells/__tests__/cells.test.ts +6 -0
  283. package/src/core/cells/__tests__/document-changes.test.ts +575 -0
  284. package/src/core/cells/__tests__/document-roundtrip.test.ts +376 -0
  285. package/src/core/cells/cells.ts +28 -3
  286. package/src/core/cells/document-changes.ts +644 -0
  287. package/src/core/islands/bridge.ts +1 -0
  288. package/src/core/islands/main.ts +2 -0
  289. package/src/core/network/requests-lazy.ts +1 -0
  290. package/src/core/network/requests-network.ts +9 -0
  291. package/src/core/network/requests-static.ts +1 -0
  292. package/src/core/network/requests-toasting.tsx +1 -0
  293. package/src/core/network/types.ts +5 -0
  294. package/src/core/wasm/bridge.ts +1 -0
  295. package/src/core/websocket/useMarimoKernelConnection.tsx +19 -1
  296. package/src/utils/createReducer.ts +26 -11
  297. package/dist/assets/CellStatus-DX8MnBMk.js +0 -1
  298. package/dist/assets/LazyAnyLanguageCodeMirror-CcCHIX38.js +0 -2
  299. package/dist/assets/RenderHTML-C7XM39M2.js +0 -1
  300. package/dist/assets/ai-model-dropdown-CiJpv5wN.js +0 -5
  301. package/dist/assets/apl-CWQZjEHB.js +0 -1
  302. package/dist/assets/asciiarmor-YkqeOS7J.js +0 -1
  303. package/dist/assets/asn1-CXKIzj3m.js +0 -1
  304. package/dist/assets/brainfuck-BATyDEza.js +0 -1
  305. package/dist/assets/cells-39RE4UzS.js +0 -230
  306. package/dist/assets/channel-D1wPYhc9.js +0 -1
  307. package/dist/assets/chunk-55IACEB6-D0TKhzEY.js +0 -1
  308. package/dist/assets/classDiagram-2ON5EDUG-BDIQSKYv.js +0 -1
  309. package/dist/assets/classDiagram-v2-WZHVMYZB-Cdh4cVOB.js +0 -1
  310. package/dist/assets/clojure-DSdxtK57.js +0 -1
  311. package/dist/assets/cmake-b6COJhkL.js +0 -1
  312. package/dist/assets/cobol-0au-d4Af.js +0 -1
  313. package/dist/assets/coffeescript-CO6miDRN.js +0 -1
  314. package/dist/assets/commonlisp-ViswrHum.js +0 -1
  315. package/dist/assets/context-aware-panel-DC0Te9Hj.js +0 -3
  316. package/dist/assets/createReducer-Drh7NmIR.js +0 -1
  317. package/dist/assets/crystal-BcOI1XlU.js +0 -1
  318. package/dist/assets/cypher-BKbuDk70.js +0 -1
  319. package/dist/assets/d-4fbeW9Dj.js +0 -1
  320. package/dist/assets/diff-CV59_hp-.js +0 -1
  321. package/dist/assets/dist-BZeePkbd.js +0 -1
  322. package/dist/assets/dist-Br4KMeY4.js +0 -1
  323. package/dist/assets/dist-Cp60fE5Z.js +0 -1
  324. package/dist/assets/dist-DVbTmqCA.js +0 -1
  325. package/dist/assets/documentation-panel-D5d_BbHV.js +0 -1
  326. package/dist/assets/dtd-BAjS2EMD.js +0 -1
  327. package/dist/assets/dylan-CjAEbzAl.js +0 -1
  328. package/dist/assets/ecl-DegMF2Uo.js +0 -1
  329. package/dist/assets/eiffel-D_UXtJqE.js +0 -1
  330. package/dist/assets/elm-CV-6VdWh.js +0 -1
  331. package/dist/assets/erlang-C3Vp1oq_.js +0 -1
  332. package/dist/assets/factor-CBMQHXUW.js +0 -1
  333. package/dist/assets/file-explorer-panel-DyUl_ws9.js +0 -26
  334. package/dist/assets/floating-outline-DmugATcB.js +0 -1
  335. package/dist/assets/forth-C_TcrpRK.js +0 -1
  336. package/dist/assets/fortran-DOs2FQj2.js +0 -1
  337. package/dist/assets/gas-Cg-F3pmb.js +0 -1
  338. package/dist/assets/gherkin-CaXqq9kA.js +0 -1
  339. package/dist/assets/groovy-DmxumoMi.js +0 -1
  340. package/dist/assets/haskell-BZ-cKqgz.js +0 -1
  341. package/dist/assets/haxe-x-4elm0t.js +0 -1
  342. package/dist/assets/idl-DNkkzHKH.js +0 -1
  343. package/dist/assets/infoDiagram-HS3SLOUP-GG5r0Y5G.js +0 -2
  344. package/dist/assets/javascript-B0uQ9oZ_.js +0 -1
  345. package/dist/assets/julia-DBflXO9b.js +0 -1
  346. package/dist/assets/katex-YDobqqVd.js +0 -1
  347. package/dist/assets/kiosk-mode-CyTnrzwK.js +0 -1
  348. package/dist/assets/livescript-DRwwdQDY.js +0 -1
  349. package/dist/assets/lua-D_CRYz1e.js +0 -1
  350. package/dist/assets/mathematica-D28k0VAB.js +0 -1
  351. package/dist/assets/mbox-B74-q1nN.js +0 -1
  352. package/dist/assets/mermaid-4DMBBIKO-g7AL4SLJ.js +0 -1
  353. package/dist/assets/mirc-CW8yiVay.js +0 -1
  354. package/dist/assets/mllike-BwZpH7CZ.js +0 -1
  355. package/dist/assets/mode-D-iRbN9x.js +0 -1
  356. package/dist/assets/modelica-AhRO-ii8.js +0 -1
  357. package/dist/assets/mscgen-CJZUmlSk.js +0 -1
  358. package/dist/assets/mumps-BTPWDvZ1.js +0 -1
  359. package/dist/assets/name-cell-input-Dyb0ZO4X.js +0 -1
  360. package/dist/assets/nsis-CuVPiHG5.js +0 -1
  361. package/dist/assets/ntriples-eNmSbiOL.js +0 -1
  362. package/dist/assets/octave-BboqqX2Z.js +0 -1
  363. package/dist/assets/oz-eUT9rD_n.js +0 -1
  364. package/dist/assets/panels-D0aw6jdc.js +0 -1
  365. package/dist/assets/pascal-Bl9h-Ruv.js +0 -1
  366. package/dist/assets/perl-B1GdYx3j.js +0 -1
  367. package/dist/assets/pig-CoZHWNtw.js +0 -1
  368. package/dist/assets/powershell-B2p71KcT.js +0 -1
  369. package/dist/assets/properties-Cs9aaJGK.js +0 -1
  370. package/dist/assets/protobuf-DFCnQG_o.js +0 -1
  371. package/dist/assets/pug-BShaWOtD.js +0 -1
  372. package/dist/assets/puppet-4yIFv98Z.js +0 -1
  373. package/dist/assets/python-ByMRQ0aE.js +0 -1
  374. package/dist/assets/q-C7EgGttK.js +0 -1
  375. package/dist/assets/r-DpLLx5HE.js +0 -1
  376. package/dist/assets/react-vega-DXESF7qN.js +0 -1
  377. package/dist/assets/rpm-DlCq0FVA.js +0 -1
  378. package/dist/assets/ruby-BGmSEBWH.js +0 -1
  379. package/dist/assets/sas-CFcv5xFe.js +0 -1
  380. package/dist/assets/scheme-BgRfkNY3.js +0 -1
  381. package/dist/assets/session-panel-O68V-tv4.js +0 -1
  382. package/dist/assets/shell-CKQz0rkv.js +0 -1
  383. package/dist/assets/sieve-D0P6XnTD.js +0 -1
  384. package/dist/assets/smalltalk-Dcg9QwVr.js +0 -1
  385. package/dist/assets/sparql-f01xs6VH.js +0 -1
  386. package/dist/assets/stateDiagram-v2-4FDKWEC3-D-GWhQTG.js +0 -1
  387. package/dist/assets/stylus-BjzHGGgo.js +0 -1
  388. package/dist/assets/swift-DOptU29u.js +0 -1
  389. package/dist/assets/tcl-vC8etUeQ.js +0 -1
  390. package/dist/assets/textile-BfLqcKXP.js +0 -1
  391. package/dist/assets/toml-rX0_Isgp.js +0 -1
  392. package/dist/assets/troff-C1lPb0WN.js +0 -1
  393. package/dist/assets/ttcn-D5dxusfs.js +0 -1
  394. package/dist/assets/ttcn-cfg-Dj2ybct-.js +0 -1
  395. package/dist/assets/turtle-BiTItqZm.js +0 -1
  396. package/dist/assets/useCellActionButton-B2G9OaX9.js +0 -1
  397. package/dist/assets/useNotebookActions-CdAfjuOC.js +0 -1
  398. package/dist/assets/useRunCells-Dhl8ZTGh.js +0 -1
  399. package/dist/assets/useSplitCell-BSnFazbH.js +0 -1
  400. package/dist/assets/vb-roE2hgal.js +0 -1
  401. package/dist/assets/vbscript-2s97682t.js +0 -1
  402. package/dist/assets/velocity-D0YPg3VZ.js +0 -1
  403. package/dist/assets/verilog-Btszgjcd.js +0 -1
  404. package/dist/assets/vhdl-enS91NZh.js +0 -1
  405. package/dist/assets/webidl-DQMyFjhm.js +0 -1
  406. package/dist/assets/xquery-D5Jh9c_Z.js +0 -1
  407. package/dist/assets/yacas-CTzSIaAf.js +0 -1
  408. package/dist/assets/z80-Dt0hdUwP.js +0 -1
  409. /package/dist/assets/{ImageComparisonComponent-DvDPDgw3.js → ImageComparisonComponent-Cw3aoN3z.js} +0 -0
  410. /package/dist/assets/{Inputs-D5kI9GwB.js → Inputs-CsxDtqlI.js} +0 -0
  411. /package/dist/assets/{Plot-DQQQ-fLA.js → Plot-eiPFedH2.js} +0 -0
  412. /package/dist/assets/{SSRProvider-CwqN9FWV.js → SSRProvider-BkypbMcb.js} +0 -0
  413. /package/dist/assets/{alert-OQZHipbB.js → alert-NjVFesQm.js} +0 -0
  414. /package/dist/assets/{alert-dialog-ebk_-wsU.js → alert-dialog-Baw3WWPa.js} +0 -0
  415. /package/dist/assets/{apl-CexVE068.js → apl-D8X_E6Wh.js} +0 -0
  416. /package/dist/assets/{array-psg969PF.js → array-CEZNxKGf.js} +0 -0
  417. /package/dist/assets/{asciiarmor-DzdXFxI-.js → asciiarmor-DeecVuRW.js} +0 -0
  418. /package/dist/assets/{asn1-lKNP6w4p.js → asn1-C9WWFN1p.js} +0 -0
  419. /package/dist/assets/{asterisk-Bjb62jej.js → asterisk-Dykb_Qas.js} +0 -0
  420. /package/dist/assets/{blob-DgooIGjS.js → blob-C3EfaMOb.js} +0 -0
  421. /package/dist/assets/{brainfuck-pTL_9bJ7.js → brainfuck-Cl6gOsOa.js} +0 -0
  422. /package/dist/assets/{bundle.esm-idScn0w0.js → bundle.esm-_LzfhNmX.js} +0 -0
  423. /package/dist/assets/{card-C-c-4jyF.js → card-OaQlvpSl.js} +0 -0
  424. /package/dist/assets/{chunk-4F5CHEZ2-BGeTOmrq.js → chunk-4F5CHEZ2-Bghwh3ep.js} +0 -0
  425. /package/dist/assets/{chunk-B2363JML-Cmh9TPpj.js → chunk-B2363JML-B3wWt_gr.js} +0 -0
  426. /package/dist/assets/{chunk-DR5Q36YT-SM9ZwAOv.js → chunk-DR5Q36YT-DOSR70sR.js} +0 -0
  427. /package/dist/assets/{chunk-FRFDVMJY-CUDE-MUX.js → chunk-FRFDVMJY-D9fs6vlF.js} +0 -0
  428. /package/dist/assets/{chunk-PL6DKKU2-DMqBvHTF.js → chunk-PL6DKKU2-CdtxnIBd.js} +0 -0
  429. /package/dist/assets/{chunk-SJTYNZTY-C9cwtT3h.js → chunk-SJTYNZTY-CMwkFD7U.js} +0 -0
  430. /package/dist/assets/{chunk-TQ3KTPDO-CUyT9lNN.js → chunk-TQ3KTPDO-0Us1NWXT.js} +0 -0
  431. /package/dist/assets/{chunk-UMXZTB3W-Bt-_br31.js → chunk-UMXZTB3W-zYd--p4q.js} +0 -0
  432. /package/dist/assets/{clear-button-DrIF5o__.js → clear-button-CsNT-Tql.js} +0 -0
  433. /package/dist/assets/{click-outside-container-CagwJLiG.js → click-outside-container-gHk0jCel.js} +0 -0
  434. /package/dist/assets/{clike-BCxd7pZ9.js → clike-BuY5U60j.js} +0 -0
  435. /package/dist/assets/{clojure-CPAS-74L.js → clojure-C8jGLyPy.js} +0 -0
  436. /package/dist/assets/{cmake-DMONEHtp.js → cmake-DcjYbevD.js} +0 -0
  437. /package/dist/assets/{cobol-0rQGzjf0.js → cobol-C-nFr8y5.js} +0 -0
  438. /package/dist/assets/{coffeescript-BHNUw4aR.js → coffeescript-VbbBP-Cm.js} +0 -0
  439. /package/dist/assets/{colors-WO6MvCS3.js → colors-Dm6L93c7.js} +0 -0
  440. /package/dist/assets/{common-keywords-D_14jCw0.js → common-keywords-sop6vXJR.js} +0 -0
  441. /package/dist/assets/{commonlisp-Cjiyl45-.js → commonlisp-mLMub2u_.js} +0 -0
  442. /package/dist/assets/{copy-KjcPgPw9.js → copy-CcUDATFX.js} +0 -0
  443. /package/dist/assets/{crystal-CUMDisY2.js → crystal-Buc8hu84.js} +0 -0
  444. /package/dist/assets/{css-B6NFOUor.js → css-DtNg2SPz.js} +0 -0
  445. /package/dist/assets/{cypher-DcWJtLBw.js → cypher-wyT0Afvt.js} +0 -0
  446. /package/dist/assets/{cytoscape.esm-DuXIsNbY.js → cytoscape.esm-CuwfIk-V.js} +0 -0
  447. /package/dist/assets/{d-CpNp8oDv.js → d-KzUzEnwn.js} +0 -0
  448. /package/dist/assets/{defaultLocale-CuYNS33t.js → defaultLocale-DPBdGRrH.js} +0 -0
  449. /package/dist/assets/{defaultLocale-CGfP-Ye3.js → defaultLocale-Lfi0pexn.js} +0 -0
  450. /package/dist/assets/{diff-BCFJsGHX.js → diff-zZX_BZ60.js} +0 -0
  451. /package/dist/assets/{dist-D9Vhptds.js → dist-2yYHES7B.js} +0 -0
  452. /package/dist/assets/{dist-CVEvQ1Ex.js → dist-4adVoHKM.js} +0 -0
  453. /package/dist/assets/{dist-ASlWkGgG.js → dist-8B3AWTCv.js} +0 -0
  454. /package/dist/assets/{dist-sVuk6mkQ.js → dist-AkjWZMeV.js} +0 -0
  455. /package/dist/assets/{dist-BhNN2V5a.js → dist-BKm9wJTB.js} +0 -0
  456. /package/dist/assets/{dist-BR9zyVPH.js → dist-BacKBlEY.js} +0 -0
  457. /package/dist/assets/{dist-OxxI-HeS.js → dist-Bi4JuBeU.js} +0 -0
  458. /package/dist/assets/{dist-COnmrAVZ.js → dist-BjCIGEdQ.js} +0 -0
  459. /package/dist/assets/{dist-Dxov2ltb.js → dist-C8sUhiRj.js} +0 -0
  460. /package/dist/assets/{dist-DxrbvUBv.js → dist-CKX5rwHQ.js} +0 -0
  461. /package/dist/assets/{dist-DkaderFA.js → dist-Cd9M8gLO.js} +0 -0
  462. /package/dist/assets/{dist-DD9ZJMK5.js → dist-CjkJ83NO.js} +0 -0
  463. /package/dist/assets/{dist-DBPtheKQ.js → dist-CybQbPjb.js} +0 -0
  464. /package/dist/assets/{dist-CYs1oP7g.js → dist-DVCqT940.js} +0 -0
  465. /package/dist/assets/{dist-feWVQ4dq.js → dist-DXjL2dGI.js} +0 -0
  466. /package/dist/assets/{dist-DXyIIB32.js → dist-DgEPWvX2.js} +0 -0
  467. /package/dist/assets/{dist-CgC048vN.js → dist-DzjL8iiW.js} +0 -0
  468. /package/dist/assets/{dist-DReDpc2z.js → dist-rrswzGsS.js} +0 -0
  469. /package/dist/assets/{dtd-D7nO7isU.js → dtd-DrorhQz9.js} +0 -0
  470. /package/dist/assets/{duckdb-keywords-CSySeB8R.js → duckdb-keywords-CEWQs1NJ.js} +0 -0
  471. /package/dist/assets/{dylan-qEhlQv4l.js → dylan-B4r5umK9.js} +0 -0
  472. /package/dist/assets/{ebnf-KJaLpQez.js → ebnf-BoS8ZFT2.js} +0 -0
  473. /package/dist/assets/{ecl-cXHEjabG.js → ecl-Chc_DmTY.js} +0 -0
  474. /package/dist/assets/{eiffel-CUTEIYa-.js → eiffel-CIYqf7wj.js} +0 -0
  475. /package/dist/assets/{elm-DOfGHeKn.js → elm-Baq4wI8e.js} +0 -0
  476. /package/dist/assets/{emotion-is-prop-valid.esm-D7FeWASw.js → emotion-is-prop-valid.esm-lG8j6oqk.js} +0 -0
  477. /package/dist/assets/{empty-state-B_US46Us.js → empty-state-BBWqzODS.js} +0 -0
  478. /package/dist/assets/{erlang-B5R7Byby.js → erlang-xHcM8uVi.js} +0 -0
  479. /package/dist/assets/{errors-0IrrdfSG.js → errors-iwK4b4VF.js} +0 -0
  480. /package/dist/assets/{esm-CX-gNDKf.js → esm-DM72gy9Q.js} +0 -0
  481. /package/dist/assets/{extends-aq1t6BkR.js → extends-B9D0JO9U.js} +0 -0
  482. /package/dist/assets/{fcl-Cf241iHu.js → fcl-JwfU5Rr4.js} +0 -0
  483. /package/dist/assets/{forth-BjV8SV3p.js → forth-j6RT-cy6.js} +0 -0
  484. /package/dist/assets/{fortran-CvNblcug.js → fortran-Z7A59UbQ.js} +0 -0
  485. /package/dist/assets/{gas-D1YrZZUY.js → gas-5kgpLqGg.js} +0 -0
  486. /package/dist/assets/{gherkin-CAUl7roi.js → gherkin-KECBIOSQ.js} +0 -0
  487. /package/dist/assets/{groovy-CnmCDhLm.js → groovy-CocWwvHR.js} +0 -0
  488. /package/dist/assets/{haskell-qdBb4h_7.js → haskell-BVRegKDO.js} +0 -0
  489. /package/dist/assets/{haxe-MQhLSFhI.js → haxe-U6x7KK2i.js} +0 -0
  490. /package/dist/assets/{http-_roNBajA.js → http-BSf7msSy.js} +0 -0
  491. /package/dist/assets/{icons-CrUXojcA.js → icons-D4U3iRHj.js} +0 -0
  492. /package/dist/assets/{idl-CcZzcWCI.js → idl-Byd3Qhyl.js} +0 -0
  493. /package/dist/assets/{init-XMA8CWhh.js → init-BpLL1fe9.js} +0 -0
  494. /package/dist/assets/{javascript-hE4QNtKl.js → javascript-D0a_TZzL.js} +0 -0
  495. /package/dist/assets/{julia-BjrvvLkp.js → julia-CaxV2pJw.js} +0 -0
  496. /package/dist/assets/{katex-rvFxOCU-.js → katex-FSdXOW5Y.js} +0 -0
  497. /package/dist/assets/{kbd-DvKpAc6K.js → kbd-zZCuQN_1.js} +0 -0
  498. /package/dist/assets/{links-DzgPOFJ-.js → links-BQHNKE3J.js} +0 -0
  499. /package/dist/assets/{links-CptYD1FP.js → links-Bfp-iNRX.js} +0 -0
  500. /package/dist/assets/{livescript-B01pNEzu.js → livescript-CfGHFsX-.js} +0 -0
  501. /package/dist/assets/{loro_wasm_bg-CcIcmNa3.js → loro_wasm_bg-Bj93RhA2.js} +0 -0
  502. /package/dist/assets/{lua-BwfRgSM6.js → lua-DwgMJ83W.js} +0 -0
  503. /package/dist/assets/{marimo-icons-C_YDiXeg.js → marimo-icons-Cb4NA8Cp.js} +0 -0
  504. /package/dist/assets/{math-CeGhAAgQ.js → math-CpvW-dlE.js} +0 -0
  505. /package/dist/assets/{mathematica-DLi5eijp.js → mathematica-CUcY8E3Z.js} +0 -0
  506. /package/dist/assets/{mbox-QweTYWJQ.js → mbox-QWIxg89f.js} +0 -0
  507. /package/dist/assets/{mirc-1J5TZ8Tf.js → mirc-PcCLOR2R.js} +0 -0
  508. /package/dist/assets/{mllike-DRzCrpbj.js → mllike-JiC27gOy.js} +0 -0
  509. /package/dist/assets/{modelica-GZKavTLw.js → modelica-BcfhGWp8.js} +0 -0
  510. /package/dist/assets/{mscgen-HMNaCHuy.js → mscgen-C2sdz_zX.js} +0 -0
  511. /package/dist/assets/{multi-icon-DEWnuZs2.js → multi-icon-BIYBHgCy.js} +0 -0
  512. /package/dist/assets/{multi-map-C8RbwBrw.js → multi-map-0vmox9BD.js} +0 -0
  513. /package/dist/assets/{mumps-CzCxfP2m.js → mumps-DTtlu7TY.js} +0 -0
  514. /package/dist/assets/{nginx-Dfd7l9Sj.js → nginx-CNcs7tVC.js} +0 -0
  515. /package/dist/assets/{node-sql-parser-BvUFblwL.js → node-sql-parser-fWuidk6P.js} +0 -0
  516. /package/dist/assets/{ntriples-DT57g_ZF.js → ntriples-CHcftTy8.js} +0 -0
  517. /package/dist/assets/{numbers-Cno6K0UF.js → numbers-Bv8m4sHE.js} +0 -0
  518. /package/dist/assets/{objectWithoutPropertiesLoose-Dxmp_Bd_.js → objectWithoutPropertiesLoose-CboCOq4o.js} +0 -0
  519. /package/dist/assets/{octave-CtuTaUjQ.js → octave-D7F4qXl_.js} +0 -0
  520. /package/dist/assets/{oz-BS8LEqKx.js → oz-VftS117C.js} +0 -0
  521. /package/dist/assets/{panel-context-BN0DQXiK.js → panel-context-CcwYw5Eq.js} +0 -0
  522. /package/dist/assets/{pascal-Db0ZEHQw.js → pascal-CxVKwA9u.js} +0 -0
  523. /package/dist/assets/{path-CkIaQHJO.js → path-DtYs9Dst.js} +0 -0
  524. /package/dist/assets/{perl-DgJKzgyz.js → perl-x4BFnPib.js} +0 -0
  525. /package/dist/assets/{pig-Dk6eYa40.js → pig-Dmhj3J78.js} +0 -0
  526. /package/dist/assets/{popover-Bvoif-Mg.js → popover-BzqPa2Au.js} +0 -0
  527. /package/dist/assets/{powershell-dW0qpS7j.js → powershell-Bg32vFxB.js} +0 -0
  528. /package/dist/assets/{prop-types-DRf51_gT.js → prop-types-C638SUfx.js} +0 -0
  529. /package/dist/assets/{properties-oMha4ix2.js → properties-DQbiKM_q.js} +0 -0
  530. /package/dist/assets/{protobuf-CfWJ4EtB.js → protobuf-Sa3BXDQ1.js} +0 -0
  531. /package/dist/assets/{puppet-O2K_n-UM.js → puppet-CnXWm8bo.js} +0 -0
  532. /package/dist/assets/{python-qMKsSr4L.js → python-B1WBAJzp.js} +0 -0
  533. /package/dist/assets/{q-ewn8d81Q.js → q-BqOVUYF0.js} +0 -0
  534. /package/dist/assets/{r-CqF-AjDv.js → r-BNvjQBjW.js} +0 -0
  535. /package/dist/assets/{range-ClqUI25v.js → range-Dk7lXDev.js} +0 -0
  536. /package/dist/assets/{react-resizable-panels.browser.esm-DDRqG5ui.js → react-resizable-panels.browser.esm-RgA6v8U3.js} +0 -0
  537. /package/dist/assets/{request-registry-XB2EzJHm.js → request-registry-BPNvKw5y.js} +0 -0
  538. /package/dist/assets/{requests-CP6q3-4O.js → requests-xhM8i_W9.js} +0 -0
  539. /package/dist/assets/{rpm-BqLq138P.js → rpm-Cdb8SyEx.js} +0 -0
  540. /package/dist/assets/{ruby-CQfbO3YY.js → ruby-Csu3wroo.js} +0 -0
  541. /package/dist/assets/{sas-BmpgVn6Q.js → sas-NClU0xuj.js} +0 -0
  542. /package/dist/assets/{scheme-rgyDg_wq.js → scheme-Hpx9xPN-.js} +0 -0
  543. /package/dist/assets/{share-NjpZ54PJ.js → share-T-ETw2Yt.js} +0 -0
  544. /package/dist/assets/{shell-Dndk6Ld6.js → shell-Cd99saJE.js} +0 -0
  545. /package/dist/assets/{sieve-bGgktpLX.js → sieve-D0zJ8TZ9.js} +0 -0
  546. /package/dist/assets/{simple-mode-oMMOWqWz.js → simple-mode-DpDBSVll.js} +0 -0
  547. /package/dist/assets/{smalltalk-CU43LrKS.js → smalltalk-BBBJczpn.js} +0 -0
  548. /package/dist/assets/{solr-CJeCgAfj.js → solr-B928KjNx.js} +0 -0
  549. /package/dist/assets/{sparql-BycKC3X4.js → sparql-uAF7_Z2_.js} +0 -0
  550. /package/dist/assets/{spreadsheet-BYYvgLKe.js → spreadsheet-CAG48M_e.js} +0 -0
  551. /package/dist/assets/{sql-B5I6FC3m.js → sql-nk70rjN1.js} +0 -0
  552. /package/dist/assets/{src-CW27-Kjl.js → src-BRLtyMKi.js} +0 -0
  553. /package/dist/assets/{stylus-CePwhvgW.js → stylus-fMZU8VtG.js} +0 -0
  554. /package/dist/assets/{swift-CfgglXjR.js → swift-CkY7kBhf.js} +0 -0
  555. /package/dist/assets/{table-BhH-Mm8O.js → table-CA8eU1EB.js} +0 -0
  556. /package/dist/assets/{tcl-D_gYSBm0.js → tcl-CS15Nqmn.js} +0 -0
  557. /package/dist/assets/{textile-BEvFU9wV.js → textile-BQsumqly.js} +0 -0
  558. /package/dist/assets/{tiddlywiki-hmNzZkq6.js → tiddlywiki-BiHxc-2_.js} +0 -0
  559. /package/dist/assets/{tiki-BL1SzuSx.js → tiki-Cwip62d7.js} +0 -0
  560. /package/dist/assets/{timer-CPT_vXom.js → timer-BEJidwwG.js} +0 -0
  561. /package/dist/assets/{toggle-C_gNjXg8.js → toggle-DjUKacjU.js} +0 -0
  562. /package/dist/assets/{toml-DGJRpV2e.js → toml-CoHiT08x.js} +0 -0
  563. /package/dist/assets/{treemap-Cf5pgJDk.js → treemap-qinQgXo1.js} +0 -0
  564. /package/dist/assets/{troff-CUlohIux.js → troff-CpFvF7Eq.js} +0 -0
  565. /package/dist/assets/{ttcn-nuQ3wCdy.js → ttcn-BjnqPnO0.js} +0 -0
  566. /package/dist/assets/{ttcn-cfg-DCxdE-sj.js → ttcn-cfg-D29EWwwv.js} +0 -0
  567. /package/dist/assets/{turtle-B2N96QpC.js → turtle-mWsfmaJW.js} +0 -0
  568. /package/dist/assets/{types-BfP_kuAY.js → types-Myu7G9iV.js} +0 -0
  569. /package/dist/assets/{useAsyncData-D-4ifFXh.js → useAsyncData-D-z1U8-c.js} +0 -0
  570. /package/dist/assets/{useDebounce-DwTO_rGp.js → useDebounce-Ccai5RO4.js} +0 -0
  571. /package/dist/assets/{useDeepCompareMemoize-yyiB9aJX.js → useDeepCompareMemoize-D1hTncYV.js} +0 -0
  572. /package/dist/assets/{useIframeCapabilities-DTN9kFDq.js → useIframeCapabilities-CouCDnwL.js} +0 -0
  573. /package/dist/assets/{useInterval-BJucVdV-.js → useInterval-BckTGVbf.js} +0 -0
  574. /package/dist/assets/{vb-CBiIL_zx.js → vb-E2EKvwgc.js} +0 -0
  575. /package/dist/assets/{vbscript-B3Y69Iw0.js → vbscript-98sn9Pr4.js} +0 -0
  576. /package/dist/assets/{velocity-B5BPA7FX.js → velocity-DUbAzJtM.js} +0 -0
  577. /package/dist/assets/{verilog-BwmYR8E3.js → verilog-DK7zLFMr.js} +0 -0
  578. /package/dist/assets/{vhdl-VXFnDy2U.js → vhdl-B9Tq3stB.js} +0 -0
  579. /package/dist/assets/{web-vitals-BaMazlva.js → web-vitals-CJ8ovao_.js} +0 -0
  580. /package/dist/assets/{webidl-Bcmf9JWd.js → webidl-C5qiIEir.js} +0 -0
  581. /package/dist/assets/{ws-CBdPISJL.js → ws-D2eS61zr.js} +0 -0
  582. /package/dist/assets/{xquery-8pWKOyFY.js → xquery-CmGczatZ.js} +0 -0
  583. /package/dist/assets/{yacas-BFcwo3Cx.js → yacas-BbepBpsT.js} +0 -0
  584. /package/dist/assets/{z80-t3SBb7Lt.js → z80-C2f-3LU8.js} +0 -0
@@ -0,0 +1,376 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+
3
+ /**
4
+ * Round-trip tests: perform actions on a primary notebook (producing changes
5
+ * via the middleware), then apply those changes to a replica notebook via
6
+ * applyTransactionChanges. The two should converge to identical document state.
7
+ *
8
+ * This catches drift between what the middleware emits and what
9
+ * apply-transaction consumes.
10
+ */
11
+
12
+ import { python } from "@codemirror/lang-python";
13
+ import { EditorState } from "@codemirror/state";
14
+ import { EditorView } from "@codemirror/view";
15
+ import {
16
+ afterAll,
17
+ afterEach,
18
+ beforeAll,
19
+ beforeEach,
20
+ describe,
21
+ expect,
22
+ it,
23
+ } from "vitest";
24
+ import { cellId } from "@/__tests__/branded";
25
+ import type { CellHandle } from "@/components/editor/notebook-cell";
26
+ import { adaptiveLanguageConfiguration } from "@/core/codemirror/language/extension";
27
+ import { OverridingHotkeyProvider } from "@/core/hotkeys/hotkeys";
28
+ import { MultiColumn } from "@/utils/id-tree";
29
+ import { exportedForTesting, type NotebookState } from "../cells";
30
+ import {
31
+ applyTransactionChanges,
32
+ exportedForTesting as middlewareExports,
33
+ } from "../document-changes";
34
+ import { CellId } from "../ids";
35
+
36
+ const { initialNotebookState, reducer, createActions } = exportedForTesting;
37
+ const { drainChanges } = middlewareExports;
38
+
39
+ function createEditor(code: string) {
40
+ const state = EditorState.create({
41
+ doc: code,
42
+ extensions: [
43
+ python(),
44
+ adaptiveLanguageConfiguration({
45
+ cellId: cellId("cell1"),
46
+ completionConfig: {
47
+ activate_on_typing: true,
48
+ signature_hint_on_typing: false,
49
+ copilot: false,
50
+ codeium_api_key: null,
51
+ },
52
+ hotkeys: new OverridingHotkeyProvider({}),
53
+ placeholderType: "marimo-import",
54
+ lspConfig: {},
55
+ }),
56
+ ],
57
+ });
58
+ return new EditorView({ state, parent: document.body });
59
+ }
60
+
61
+ // --- Primary notebook: performs actions, middleware produces changes ---
62
+
63
+ let primary: NotebookState;
64
+
65
+ const primaryActions = createActions((action) => {
66
+ primary = reducer(primary, action);
67
+ for (const [cellIdString, handle] of Object.entries(primary.cellHandles)) {
68
+ // @ts-expect-error - Object.entries doesn't know keys are CellId
69
+ const cid: CellId = cellIdString;
70
+ if (!handle.current) {
71
+ const view = createEditor(primary.cellData[cid].code);
72
+ const h: CellHandle = { editorView: view, editorViewOrNull: view };
73
+ primary.cellHandles[cid] = { current: h };
74
+ }
75
+ }
76
+ });
77
+
78
+ // --- Replica notebook: receives changes via applyTransactionChanges ---
79
+
80
+ let replica: NotebookState;
81
+
82
+ const replicaActions = createActions((action) => {
83
+ replica = reducer(replica, action);
84
+ for (const [cellIdString, handle] of Object.entries(replica.cellHandles)) {
85
+ // @ts-expect-error - Object.entries doesn't know keys are CellId
86
+ const cid: CellId = cellIdString;
87
+ if (!handle.current) {
88
+ const view = createEditor(replica.cellData[cid].code);
89
+ const h: CellHandle = { editorView: view, editorViewOrNull: view };
90
+ replica.cellHandles[cid] = { current: h };
91
+ }
92
+ }
93
+ });
94
+
95
+ let i = 0;
96
+ const originalCreate = CellId.create.bind(CellId);
97
+
98
+ beforeAll(() => {
99
+ CellId.create = () => cellId(`${i++}`);
100
+ });
101
+
102
+ beforeEach(() => {
103
+ i = 0;
104
+ primary = initialNotebookState();
105
+ primary.cellIds = MultiColumn.from([]);
106
+ drainChanges();
107
+ });
108
+
109
+ afterEach(() => {
110
+ middlewareExports.cancelPendingChanges();
111
+ });
112
+
113
+ afterAll(() => {
114
+ CellId.create = originalCreate;
115
+ });
116
+
117
+ /** Set up both notebooks with the same initial cells. */
118
+ function setup(...codes: string[]) {
119
+ for (const code of codes) {
120
+ primaryActions.createNewCell({
121
+ cellId: "__end__",
122
+ before: false,
123
+ code,
124
+ newCellId: CellId.create(),
125
+ });
126
+ }
127
+
128
+ // Apply the setup changes to the replica so both start identical
129
+ const setupChanges = drainChanges();
130
+ replica = initialNotebookState();
131
+ replica.cellIds = MultiColumn.from([]);
132
+ applyTransactionChanges(
133
+ setupChanges,
134
+ replicaActions,
135
+ () => replica.cellIds.inOrderIds,
136
+ );
137
+ // Drain any changes the replica's middleware produced
138
+ drainChanges();
139
+ }
140
+
141
+ /**
142
+ * Drain changes from the primary's middleware and apply them to the replica.
143
+ */
144
+ function sync() {
145
+ const changes = drainChanges();
146
+ applyTransactionChanges(
147
+ changes,
148
+ replicaActions,
149
+ () => replica.cellIds.inOrderIds,
150
+ );
151
+ // Drain any changes the replica's middleware produced (we don't want those)
152
+ drainChanges();
153
+ }
154
+
155
+ /**
156
+ * Extract the document-relevant state: cell ordering, code, name, config.
157
+ * This is the "NotebookDocument" equivalent — what the Python side tracks.
158
+ *
159
+ * TODO(column-config): config.column is excluded because the column
160
+ * reducers (addColumnBreakpoint, dropOverNewColumn, moveColumn, etc.)
161
+ * update cellIds (MultiColumn structure) but don't sync config.column
162
+ * on affected cells. The middleware correctly emits set-config changes with
163
+ * the new column index, but the primary's config.column stays stale,
164
+ * causing a mismatch with the replica. Fix: have the column reducers
165
+ * update config.column as part of their state transition, then remove
166
+ * the { column: _, ...config } exclusion here.
167
+ */
168
+ function documentSnapshot(state: NotebookState) {
169
+ return state.cellIds.inOrderIds.map((id) => {
170
+ const { column: _, ...config } = state.cellData[id].config;
171
+ return {
172
+ id,
173
+ code: state.cellData[id].code,
174
+ name: state.cellData[id].name,
175
+ config,
176
+ };
177
+ });
178
+ }
179
+
180
+ describe("document round-trip", () => {
181
+ it("initial setup converges", () => {
182
+ setup("a", "b", "c");
183
+ expect(documentSnapshot(primary)).toEqual(documentSnapshot(replica));
184
+ });
185
+
186
+ it("createNewCell at end", () => {
187
+ setup("a", "b");
188
+ primaryActions.createNewCell({
189
+ cellId: "__end__",
190
+ before: false,
191
+ code: "c",
192
+ newCellId: CellId.create(),
193
+ });
194
+ sync();
195
+ expect(documentSnapshot(primary)).toEqual(documentSnapshot(replica));
196
+ });
197
+
198
+ it("createNewCell before first cell", () => {
199
+ setup("a", "b");
200
+ const [a] = primary.cellIds.inOrderIds;
201
+ primaryActions.createNewCell({
202
+ cellId: a,
203
+ before: true,
204
+ code: "before-a",
205
+ newCellId: CellId.create(),
206
+ });
207
+ sync();
208
+ expect(documentSnapshot(primary)).toEqual(documentSnapshot(replica));
209
+ });
210
+
211
+ it("createNewCell between cells", () => {
212
+ setup("a", "b", "c");
213
+ const [a] = primary.cellIds.inOrderIds;
214
+ primaryActions.createNewCell({
215
+ cellId: a,
216
+ before: false,
217
+ code: "between",
218
+ newCellId: CellId.create(),
219
+ });
220
+ sync();
221
+ expect(documentSnapshot(primary)).toEqual(documentSnapshot(replica));
222
+ });
223
+
224
+ it("createNewCell with hideCode config", () => {
225
+ setup("a");
226
+ primaryActions.createNewCell({
227
+ cellId: "__end__",
228
+ before: false,
229
+ code: "hidden",
230
+ newCellId: CellId.create(),
231
+ hideCode: true,
232
+ });
233
+ sync();
234
+ expect(documentSnapshot(primary)).toEqual(documentSnapshot(replica));
235
+ });
236
+
237
+ it("deleteCell", () => {
238
+ setup("a", "b", "c");
239
+ const [, b] = primary.cellIds.inOrderIds;
240
+ primaryActions.deleteCell({ cellId: b });
241
+ sync();
242
+ expect(documentSnapshot(primary)).toEqual(documentSnapshot(replica));
243
+ });
244
+
245
+ it("updateCellCode", () => {
246
+ setup("a", "b");
247
+ const [a] = primary.cellIds.inOrderIds;
248
+ primaryActions.updateCellCode({
249
+ cellId: a,
250
+ code: "updated",
251
+ formattingChange: false,
252
+ });
253
+ sync();
254
+ expect(documentSnapshot(primary)).toEqual(documentSnapshot(replica));
255
+ });
256
+
257
+ it("updateCellName", () => {
258
+ setup("a");
259
+ const [a] = primary.cellIds.inOrderIds;
260
+ primaryActions.updateCellName({ cellId: a, name: "my_var" });
261
+ sync();
262
+ expect(documentSnapshot(primary)).toEqual(documentSnapshot(replica));
263
+ });
264
+
265
+ it("updateCellConfig", () => {
266
+ setup("a");
267
+ const [a] = primary.cellIds.inOrderIds;
268
+ primaryActions.updateCellConfig({
269
+ cellId: a,
270
+ config: { hide_code: true, disabled: true },
271
+ });
272
+ sync();
273
+ expect(documentSnapshot(primary)).toEqual(documentSnapshot(replica));
274
+ });
275
+
276
+ it("moveCell down", () => {
277
+ setup("a", "b", "c");
278
+ const [a] = primary.cellIds.inOrderIds;
279
+ primaryActions.moveCell({ cellId: a, before: false });
280
+ sync();
281
+ expect(documentSnapshot(primary)).toEqual(documentSnapshot(replica));
282
+ });
283
+
284
+ it("sendToTop", () => {
285
+ setup("a", "b", "c");
286
+ const c = primary.cellIds.inOrderIds[2];
287
+ primaryActions.sendToTop({ cellId: c });
288
+ sync();
289
+ expect(documentSnapshot(primary)).toEqual(documentSnapshot(replica));
290
+ });
291
+
292
+ it("sendToBottom", () => {
293
+ setup("a", "b", "c");
294
+ const [a] = primary.cellIds.inOrderIds;
295
+ primaryActions.sendToBottom({ cellId: a });
296
+ sync();
297
+ expect(documentSnapshot(primary)).toEqual(documentSnapshot(replica));
298
+ });
299
+
300
+ it("dropCellOverCell", () => {
301
+ setup("a", "b", "c");
302
+ const [a, , c] = primary.cellIds.inOrderIds;
303
+ primaryActions.dropCellOverCell({ cellId: c, overCellId: a });
304
+ sync();
305
+ expect(documentSnapshot(primary)).toEqual(documentSnapshot(replica));
306
+ });
307
+
308
+ it("multiple operations in sequence", () => {
309
+ setup("a", "b", "c");
310
+
311
+ // Add a cell
312
+ const [a] = primary.cellIds.inOrderIds;
313
+ primaryActions.createNewCell({
314
+ cellId: a,
315
+ before: false,
316
+ code: "new",
317
+ newCellId: CellId.create(),
318
+ });
319
+ sync();
320
+
321
+ // Rename it
322
+ const newId = primary.cellIds.inOrderIds[1];
323
+ primaryActions.updateCellName({ cellId: newId, name: "inserted" });
324
+ sync();
325
+
326
+ // Move it to top
327
+ primaryActions.sendToTop({ cellId: newId });
328
+ sync();
329
+
330
+ // Update code on another cell
331
+ const last =
332
+ primary.cellIds.inOrderIds[primary.cellIds.inOrderIds.length - 1];
333
+ primaryActions.updateCellCode({
334
+ cellId: last,
335
+ code: "modified",
336
+ formattingChange: false,
337
+ });
338
+ sync();
339
+
340
+ expect(documentSnapshot(primary)).toEqual(documentSnapshot(replica));
341
+ });
342
+
343
+ it("create then delete", () => {
344
+ setup("a", "b");
345
+ primaryActions.createNewCell({
346
+ cellId: "__end__",
347
+ before: false,
348
+ code: "temporary",
349
+ newCellId: CellId.create(),
350
+ });
351
+ sync();
352
+
353
+ const newId =
354
+ primary.cellIds.inOrderIds[primary.cellIds.inOrderIds.length - 1];
355
+ primaryActions.deleteCell({ cellId: newId });
356
+ sync();
357
+
358
+ expect(documentSnapshot(primary)).toEqual(documentSnapshot(replica));
359
+ });
360
+
361
+ it("addColumnBreakpoint", () => {
362
+ setup("a", "b", "c");
363
+ const [, b] = primary.cellIds.inOrderIds;
364
+ primaryActions.addColumnBreakpoint({ cellId: b });
365
+ sync();
366
+ expect(documentSnapshot(primary)).toEqual(documentSnapshot(replica));
367
+ });
368
+
369
+ it("dropOverNewColumn", () => {
370
+ setup("a", "b", "c");
371
+ const [, b] = primary.cellIds.inOrderIds;
372
+ primaryActions.dropOverNewColumn({ cellId: b });
373
+ sync();
374
+ expect(documentSnapshot(primary)).toEqual(documentSnapshot(replica));
375
+ });
376
+ });
@@ -29,6 +29,7 @@ import type { CellConfig } from "../network/types";
29
29
  import { isRtcEnabled } from "../rtc/state";
30
30
  import { createDeepEqualAtom, store } from "../state/jotai";
31
31
  import { prepareCellForExecution, transitionCell } from "./cell";
32
+ import { documentTransactionMiddleware } from "./document-changes";
32
33
  import { CellId, SCRATCH_CELL_ID, SETUP_CELL_ID } from "./ids";
33
34
  import { type CellLog, getCellLogsForMessage } from "./logs";
34
35
  import {
@@ -174,6 +175,7 @@ export interface CreateNewCellAction {
174
175
  */
175
176
  const {
176
177
  reducer,
178
+ addMiddleware,
177
179
  createActions,
178
180
  useActions,
179
181
  valueAtom: notebookAtom,
@@ -756,13 +758,28 @@ const {
756
758
  },
757
759
  handleCellMessage: (state, message: CellMessage) => {
758
760
  const cellId = message.cell_id;
759
- const nextState = updateCellRuntimeState({
761
+ let nextState = updateCellRuntimeState({
760
762
  state,
761
763
  cellId,
762
764
  cellReducer: (cell) => {
763
765
  return transitionCell(cell, message);
764
766
  },
765
767
  });
768
+ // When a cell is queued for execution, snapshot the current code
769
+ // as lastCodeRun. This clears staleness for cells executed by the
770
+ // kernel (e.g. via code_mode). If the user edits during execution,
771
+ // code !== lastCodeRun keeps the cell stale.
772
+ if (message.status === "queued") {
773
+ nextState = updateCellData({
774
+ state: nextState,
775
+ cellId,
776
+ cellReducer: (cell) => ({
777
+ ...cell,
778
+ lastCodeRun: cell.code.trim(),
779
+ edited: false,
780
+ }),
781
+ });
782
+ }
766
783
  return {
767
784
  ...nextState,
768
785
  cellLogs: [...nextState.cellLogs, ...getCellLogsForMessage(message)],
@@ -1405,6 +1422,12 @@ const {
1405
1422
  },
1406
1423
  });
1407
1424
 
1425
+ // We apply the middleware here (rather than inline in createReducerAndAtoms)
1426
+ // so that the document transaction middleware can import CellActions and
1427
+ // strictly type the dispatched actions without creating a circular dependency.
1428
+ // @ts-expect-error - TODO: We should have better types for the middleware that are strict
1429
+ addMiddleware(documentTransactionMiddleware);
1430
+
1408
1431
  function isCellCodeHidden(state: NotebookState, cellId: CellId): boolean {
1409
1432
  return (
1410
1433
  Boolean(state.cellData[cellId].config.hide_code) &&
@@ -1789,8 +1812,10 @@ export function createTracebackInfoAtom(
1789
1812
  * Use this hook to dispatch cell actions. This hook will not cause a re-render
1790
1813
  * when cells change.
1791
1814
  */
1792
- export function useCellActions(): CellActions {
1793
- return useActions();
1815
+ export function useCellActions(
1816
+ options: { skipMiddleware?: boolean } = {},
1817
+ ): CellActions {
1818
+ return useActions(options);
1794
1819
  }
1795
1820
 
1796
1821
  /**