@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,644 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+
3
+ /**
4
+ * Document changes: the bridge between notebook reducer actions and the
5
+ * document transaction wire format.
6
+ *
7
+ * Pure functions:
8
+ * - toDocumentChanges: reducer action + state diff → document changes
9
+ * - fromDocumentChanges: document changes → reducer actions
10
+ * - cancelledCellIds: detect create+delete cancellations
11
+ *
12
+ * Impure wrappers (for use by the reducer middleware and websocket):
13
+ * - documentTransactionMiddleware: debounces and sends changes to the server
14
+ * - applyTransactionChanges: dispatches actions from incoming changes
15
+ */
16
+
17
+ import { debounce } from "lodash-es";
18
+ import { assertNever } from "@/utils/assertNever";
19
+ import type { DispatchedActionOf } from "@/utils/createReducer";
20
+ import { Logger } from "@/utils/Logger";
21
+ import type { NotificationMessageData } from "../kernel/messages";
22
+ import { kioskModeAtom } from "../mode";
23
+ import { getRequestClient } from "../network/requests";
24
+ import type { NotebookDocumentTransactionRequest } from "../network/types";
25
+ import { store } from "../state/jotai";
26
+ import type { CellActions, NotebookState } from "./cells";
27
+ import type { CellId } from "./ids";
28
+ import type { CellData } from "./types";
29
+
30
+ export type DocumentChange =
31
+ NotebookDocumentTransactionRequest["changes"][number];
32
+
33
+ type Transaction =
34
+ NotificationMessageData<"notebook-document-transaction">["transaction"];
35
+ type TransactionChange = Transaction["changes"][number];
36
+
37
+ export type CellAction = DispatchedActionOf<CellActions>;
38
+
39
+ // ---------------------------------------------------------------------------
40
+ // Helpers
41
+ // ---------------------------------------------------------------------------
42
+
43
+ /**
44
+ * Look up a cell in state by ID. Logs a warning and returns undefined
45
+ * if the cell doesn't exist.
46
+ */
47
+ function getCell(
48
+ cellId: CellId | undefined,
49
+ state: NotebookState,
50
+ ): CellData | undefined {
51
+ if (!cellId) {
52
+ Logger.warn("getCell: cellId is undefined");
53
+ return undefined;
54
+ }
55
+ const cell = state.cellData[cellId];
56
+ if (!cell) {
57
+ Logger.warn(`getCell: cell ${cellId} not found in state`);
58
+ return undefined;
59
+ }
60
+ return cell;
61
+ }
62
+
63
+ /**
64
+ * Derive the position anchor for a cell from the notebook state.
65
+ * Returns `{ after: prevId }` if there's a cell before it,
66
+ * `{ before: nextId }` if it's the first cell, or `undefined` if it's alone.
67
+ */
68
+ function anchorOf(
69
+ cellId: CellId,
70
+ state: NotebookState,
71
+ ): { after: CellId } | { before: CellId } | undefined {
72
+ const ids = state.cellIds.inOrderIds;
73
+ const idx = ids.indexOf(cellId);
74
+ if (idx > 0) {
75
+ return { after: ids[idx - 1] };
76
+ }
77
+ if (idx === 0 && ids.length > 1) {
78
+ return { before: ids[1] };
79
+ }
80
+ return undefined;
81
+ }
82
+
83
+ /**
84
+ * Build a map from cellId → column index for all cells in the state.
85
+ */
86
+ function columnIndexMap(state: NotebookState): Map<CellId, number> {
87
+ const map = new Map<CellId, number>();
88
+ const columns = state.cellIds.getColumns();
89
+ for (const [col, column] of columns.entries()) {
90
+ for (const id of column.inOrderIds) {
91
+ map.set(id, col);
92
+ }
93
+ }
94
+ return map;
95
+ }
96
+
97
+ /**
98
+ * Find cells that were added between prevState and newState and return
99
+ * create-cell changes for each, with position derived from newState.
100
+ */
101
+ function newCellChanges(
102
+ prevState: NotebookState,
103
+ newState: NotebookState,
104
+ ): DocumentChange[] {
105
+ const prevIds = new Set(prevState.cellIds.inOrderIds);
106
+ const changes: DocumentChange[] = [];
107
+ for (const id of newState.cellIds.inOrderIds) {
108
+ if (!prevIds.has(id)) {
109
+ const cell = getCell(id, newState);
110
+ if (cell) {
111
+ changes.push({
112
+ type: "create-cell",
113
+ cellId: cell.id,
114
+ code: cell.code,
115
+ name: cell.name,
116
+ config: cell.config,
117
+ ...anchorOf(cell.id, newState),
118
+ });
119
+ }
120
+ }
121
+ }
122
+ return changes;
123
+ }
124
+
125
+ /**
126
+ * Find cells that were removed between prevState and newState and return
127
+ * delete-cell changes for each.
128
+ */
129
+ function deletedCellChanges(
130
+ prevState: NotebookState,
131
+ newState: NotebookState,
132
+ ): DocumentChange[] {
133
+ const newIds = new Set(newState.cellIds.inOrderIds);
134
+ const changes: DocumentChange[] = [];
135
+ for (const id of prevState.cellIds.inOrderIds) {
136
+ if (!newIds.has(id)) {
137
+ changes.push({ type: "delete-cell", cellId: id });
138
+ }
139
+ }
140
+ return changes;
141
+ }
142
+
143
+ /**
144
+ * Produce set-config changes for cells whose column index changed between
145
+ * prevState and newState, plus a reorder-cells change for the new ordering.
146
+ */
147
+ function columnChanges(
148
+ prevState: NotebookState,
149
+ newState: NotebookState,
150
+ ): DocumentChange[] {
151
+ const prevColumns = columnIndexMap(prevState);
152
+ const newColumns = columnIndexMap(newState);
153
+ const changes: DocumentChange[] = [];
154
+
155
+ for (const [cellId, newCol] of newColumns) {
156
+ const prevCol = prevColumns.get(cellId);
157
+ if (prevCol !== newCol) {
158
+ changes.push({
159
+ type: "set-config",
160
+ cellId: cellId,
161
+ column: newCol,
162
+ });
163
+ }
164
+ }
165
+
166
+ changes.push({
167
+ type: "reorder-cells",
168
+ cellIds: newState.cellIds.inOrderIds,
169
+ });
170
+
171
+ return changes;
172
+ }
173
+
174
+ // ---------------------------------------------------------------------------
175
+ // toDocumentChanges: action + state → changes
176
+ // ---------------------------------------------------------------------------
177
+
178
+ /**
179
+ * Given a reducer action and the before/after notebook state, return the
180
+ * document changes that represent the diff. Returns an empty array for
181
+ * actions that don't affect document structure.
182
+ */
183
+ export function toDocumentChanges(
184
+ prevState: NotebookState,
185
+ newState: NotebookState,
186
+ action: DispatchedActionOf<CellActions>,
187
+ ): DocumentChange[] {
188
+ switch (action.type) {
189
+ // createNewCell → create-cell
190
+ // Reads code, name, and config from the newly created cell in newState.
191
+ // Position is derived from newState via anchorOf (after or before neighbor).
192
+ case "createNewCell":
193
+ return newCellChanges(prevState, newState);
194
+
195
+ // deleteCell → delete-cell
196
+ // Direct 1:1 mapping. Only the cellId is needed.
197
+ case "deleteCell":
198
+ return [{ type: "delete-cell", cellId: action.payload.cellId }];
199
+
200
+ // moveCell/sendToTop/sendToBottom → move-cell
201
+ // All three change a single cell's position. We derive the final
202
+ // position from newState via anchorOf rather than interpreting the
203
+ // action's before/direction payload.
204
+ case "moveCell":
205
+ case "sendToTop":
206
+ case "sendToBottom": {
207
+ const { cellId } = action.payload;
208
+ return [
209
+ {
210
+ type: "move-cell",
211
+ cellId: cellId,
212
+ ...anchorOf(cellId, newState),
213
+ },
214
+ ];
215
+ }
216
+
217
+ // dropCellOverCell/dropCellOverColumn → set-config + reorder-cells
218
+ // Drag-and-drop reorders can move cells within or across columns.
219
+ // We emit config changes for cells whose column changed, then
220
+ // the full ordering.
221
+ case "dropCellOverCell":
222
+ case "dropCellOverColumn":
223
+ return columnChanges(prevState, newState);
224
+
225
+ // updateCellCode → set-code
226
+ // Reads the code from newState via getCell.
227
+ case "updateCellCode": {
228
+ const cell = getCell(action.payload.cellId, newState);
229
+ if (!cell) {
230
+ return [];
231
+ }
232
+ return [
233
+ {
234
+ type: "set-code",
235
+ cellId: cell.id,
236
+ code: cell.code,
237
+ },
238
+ ];
239
+ }
240
+
241
+ // updateCellName → set-name
242
+ // Reads the name from newState via getCell.
243
+ case "updateCellName": {
244
+ const cell = getCell(action.payload.cellId, newState);
245
+ if (!cell) {
246
+ return [];
247
+ }
248
+ return [
249
+ {
250
+ type: "set-name",
251
+ cellId: cell.id,
252
+ name: cell.name,
253
+ },
254
+ ];
255
+ }
256
+
257
+ // updateCellConfig → set-config
258
+ // Maps CellConfig's snake_case hide_code to the change's camelCase hideCode.
259
+ // Only includes fields that were actually specified in the partial config
260
+ // (from the action payload, not the full cell config).
261
+ case "updateCellConfig": {
262
+ const { cellId, config } = action.payload;
263
+ return [
264
+ {
265
+ type: "set-config",
266
+ cellId: cellId,
267
+ ...(config.hide_code != null && { hideCode: config.hide_code }),
268
+ ...(config.disabled != null && { disabled: config.disabled }),
269
+ ...(config.column != null && { column: config.column }),
270
+ },
271
+ ];
272
+ }
273
+
274
+ // Column structure changes → set-config + reorder-cells
275
+ // All of these change column layout. We emit config changes for
276
+ // cells whose column index changed, then the full ordering.
277
+ case "dropOverNewColumn":
278
+ case "moveColumn":
279
+ case "addColumnBreakpoint":
280
+ case "deleteColumn":
281
+ case "mergeAllColumns":
282
+ case "compactColumns":
283
+ return columnChanges(prevState, newState);
284
+
285
+ // addColumn creates a new column with a new empty cell.
286
+ // Emits create-cell for the new cell plus column layout changes.
287
+ case "addColumn":
288
+ return [
289
+ ...newCellChanges(prevState, newState),
290
+ ...columnChanges(prevState, newState),
291
+ ];
292
+
293
+ // undoDeleteCell restores a deleted cell from history.
294
+ case "undoDeleteCell": {
295
+ const changes = newCellChanges(prevState, newState);
296
+ const colChanges = columnChanges(prevState, newState);
297
+ // Only include column changes if layout actually changed
298
+ // (colChanges always has at least a reorder-cells change)
299
+ return colChanges.length > 1 ? [...changes, ...colChanges] : changes;
300
+ }
301
+
302
+ // splitCell: original cell gets truncated code, new cell gets remainder.
303
+ case "splitCell": {
304
+ const { cellId } = action.payload;
305
+ const cell = getCell(cellId, newState);
306
+ if (!cell) {
307
+ return [];
308
+ }
309
+ return [
310
+ { type: "set-code", cellId, code: cell.code },
311
+ ...newCellChanges(prevState, newState),
312
+ ];
313
+ }
314
+
315
+ // undoSplitCell: merge next cell back into current, delete the next cell.
316
+ case "undoSplitCell": {
317
+ const { cellId } = action.payload;
318
+ const cell = getCell(cellId, newState);
319
+ if (!cell) {
320
+ return [];
321
+ }
322
+ return [
323
+ { type: "set-code", cellId, code: cell.code },
324
+ ...deletedCellChanges(prevState, newState),
325
+ ];
326
+ }
327
+
328
+ // moveToNextCell: may create a new cell at boundary.
329
+ case "moveToNextCell":
330
+ return newCellChanges(prevState, newState);
331
+
332
+ // addSetupCellIfDoesntExist: creates setup cell if missing.
333
+ case "addSetupCellIfDoesntExist":
334
+ return newCellChanges(prevState, newState);
335
+
336
+ // UI-only actions — no document changes.
337
+ case "focusCell":
338
+ case "focusTopCell":
339
+ case "focusBottomCell":
340
+ case "scrollToTarget":
341
+ case "showCellIfHidden":
342
+ case "markTouched":
343
+ case "markUntouched":
344
+ return [];
345
+
346
+ // Kernel/runtime state — never produces document changes.
347
+ case "prepareForRun":
348
+ case "handleCellMessage":
349
+ case "setCellIds":
350
+ case "setCellCodes":
351
+ case "setCells":
352
+ case "setStdinResponse":
353
+ case "clearSerializedEditorState":
354
+ case "clearCellOutput":
355
+ case "clearCellConsoleOutput":
356
+ case "clearAllCellOutputs":
357
+ case "clearLogs":
358
+ return [];
359
+
360
+ // Editor UI state — no document changes.
361
+ case "foldAll":
362
+ case "unfoldAll":
363
+ case "collapseCell":
364
+ case "expandCell":
365
+ case "collapseAllCells":
366
+ case "expandAllCells":
367
+ return [];
368
+
369
+ default:
370
+ assertNever(action);
371
+ }
372
+ }
373
+
374
+ // ---------------------------------------------------------------------------
375
+ // fromDocumentChanges: changes → actions
376
+ // ---------------------------------------------------------------------------
377
+
378
+ /**
379
+ * Find cell IDs that are both created and deleted in a set of changes.
380
+ * These cancel out and should be skipped.
381
+ */
382
+ export function cancelledCellIds(changes: TransactionChange[]): Set<string> {
383
+ const created = new Set<string>();
384
+ const deleted = new Set<string>();
385
+ for (const change of changes) {
386
+ if (change.type === "create-cell") {
387
+ created.add(change.cellId);
388
+ } else if (change.type === "delete-cell") {
389
+ deleted.add(change.cellId);
390
+ }
391
+ }
392
+ return created.intersection(deleted);
393
+ }
394
+
395
+ /**
396
+ * Given document changes (from the server) and the current cell ordering,
397
+ * return the reducer actions that apply them to frontend state.
398
+ */
399
+ export function fromDocumentChanges(
400
+ changes: TransactionChange[],
401
+ getCurrentCellIds: () => CellId[],
402
+ ): CellAction[] {
403
+ const actions: CellAction[] = [];
404
+
405
+ for (const change of changes) {
406
+ switch (change.type) {
407
+ // create-cell → createNewCell + updateCellName + updateCellConfig
408
+ // Translates the change's before/after anchor into createNewCell's
409
+ // cellId+before pair. The change carries code, name, and a full CellConfig.
410
+ // createNewCell only accepts hideCode, so name and remaining config
411
+ // (disabled, column) are applied as separate follow-up actions.
412
+ case "create-cell": {
413
+ let cellId: CellId | "__end__" = "__end__";
414
+ let before = false;
415
+ if (change.after) {
416
+ cellId = change.after;
417
+ before = false;
418
+ } else if (change.before) {
419
+ cellId = change.before;
420
+ before = true;
421
+ }
422
+ actions.push({
423
+ type: "createNewCell",
424
+ payload: {
425
+ cellId,
426
+ before,
427
+ code: change.code,
428
+ newCellId: change.cellId as CellId,
429
+ autoFocus: false,
430
+ hideCode: change.config?.hide_code ?? false,
431
+ },
432
+ });
433
+ if (change.name) {
434
+ actions.push({
435
+ type: "updateCellName",
436
+ payload: { cellId: change.cellId as CellId, name: change.name },
437
+ });
438
+ }
439
+ if (change.config?.disabled != null || change.config?.column != null) {
440
+ actions.push({
441
+ type: "updateCellConfig",
442
+ payload: {
443
+ cellId: change.cellId as CellId,
444
+ config: {
445
+ ...(change.config.disabled != null && {
446
+ disabled: change.config.disabled,
447
+ }),
448
+ ...(change.config.column != null && {
449
+ column: change.config.column,
450
+ }),
451
+ },
452
+ },
453
+ });
454
+ }
455
+ break;
456
+ }
457
+
458
+ // delete-cell → deleteCell
459
+ // Direct 1:1 mapping.
460
+ case "delete-cell":
461
+ actions.push({
462
+ type: "deleteCell",
463
+ payload: { cellId: change.cellId as CellId },
464
+ });
465
+ break;
466
+
467
+ // move-cell → setCellIds
468
+ // Reconstructs the full ordering by splicing the cell out and
469
+ // reinserting it relative to the before/after anchor. Falls back
470
+ // to appending (after) or prepending (before) if the anchor is
471
+ // missing. No-ops if the cell itself doesn't exist.
472
+ case "move-cell": {
473
+ const ids = [...getCurrentCellIds()];
474
+ const cellId = change.cellId as CellId;
475
+ const idx = ids.indexOf(cellId);
476
+ if (idx < 0) {
477
+ break;
478
+ }
479
+ ids.splice(idx, 1);
480
+ if (change.after) {
481
+ const afterIdx = ids.indexOf(change.after);
482
+ if (afterIdx >= 0) {
483
+ ids.splice(afterIdx + 1, 0, cellId);
484
+ } else {
485
+ ids.push(cellId);
486
+ }
487
+ } else if (change.before) {
488
+ const beforeIdx = ids.indexOf(change.before);
489
+ if (beforeIdx >= 0) {
490
+ ids.splice(beforeIdx, 0, cellId);
491
+ } else {
492
+ ids.unshift(cellId);
493
+ }
494
+ } else {
495
+ ids.push(cellId);
496
+ }
497
+ actions.push({
498
+ type: "setCellIds",
499
+ payload: { cellIds: ids },
500
+ });
501
+ break;
502
+ }
503
+
504
+ // reorder-cells → setCellIds
505
+ // Replaces the full cell ordering. Used for drag-and-drop and
506
+ // bulk reorders where expressing individual moves is impractical.
507
+ case "reorder-cells":
508
+ actions.push({
509
+ type: "setCellIds",
510
+ payload: { cellIds: change.cellIds as CellId[] },
511
+ });
512
+ break;
513
+
514
+ // set-code → setCellCodes
515
+ // Marks the code as stale (codeIsStale: true) since it came from
516
+ // an external source and hasn't been executed yet.
517
+ case "set-code":
518
+ actions.push({
519
+ type: "setCellCodes",
520
+ payload: {
521
+ ids: [change.cellId as CellId],
522
+ codes: [change.code],
523
+ codeIsStale: true,
524
+ },
525
+ });
526
+ break;
527
+
528
+ // set-name → updateCellName
529
+ // Direct 1:1 mapping.
530
+ case "set-name":
531
+ actions.push({
532
+ type: "updateCellName",
533
+ payload: { cellId: change.cellId as CellId, name: change.name },
534
+ });
535
+ break;
536
+
537
+ // set-config → updateCellConfig
538
+ // Maps the change's camelCase hideCode back to CellConfig's snake_case
539
+ // hide_code. Only includes fields that are non-null (null means
540
+ // "not specified" on the wire, not "clear the value").
541
+ case "set-config":
542
+ actions.push({
543
+ type: "updateCellConfig",
544
+ payload: {
545
+ cellId: change.cellId as CellId,
546
+ config: {
547
+ ...(change.hideCode != null && { hide_code: change.hideCode }),
548
+ ...(change.disabled != null && { disabled: change.disabled }),
549
+ ...(change.column != null && { column: change.column }),
550
+ },
551
+ },
552
+ });
553
+ break;
554
+ }
555
+ }
556
+
557
+ return actions;
558
+ }
559
+
560
+ // ---------------------------------------------------------------------------
561
+ // Middleware: debounced change dispatch to the server
562
+ // ---------------------------------------------------------------------------
563
+
564
+ let pendingChanges: DocumentChange[] = [];
565
+
566
+ const flushChanges = debounce(() => {
567
+ if (pendingChanges.length === 0) {
568
+ return;
569
+ }
570
+ const changes = pendingChanges;
571
+ pendingChanges = [];
572
+ void getRequestClient().sendDocumentTransaction({ changes });
573
+ }, 400);
574
+
575
+ function enqueue(change: DocumentChange) {
576
+ if (store.get(kioskModeAtom)) {
577
+ return;
578
+ }
579
+ pendingChanges.push(change);
580
+ flushChanges();
581
+ }
582
+
583
+ /**
584
+ * Middleware for the notebook reducer. Converts actions to document changes
585
+ * via toDocumentChanges and enqueues them for debounced dispatch.
586
+ */
587
+ export function documentTransactionMiddleware(
588
+ prevState: NotebookState,
589
+ newState: NotebookState,
590
+ action: CellAction,
591
+ ): void {
592
+ for (const change of toDocumentChanges(prevState, newState, action)) {
593
+ enqueue(change);
594
+ }
595
+ }
596
+
597
+ // ---------------------------------------------------------------------------
598
+ // Apply: dispatch incoming changes as reducer actions
599
+ // ---------------------------------------------------------------------------
600
+
601
+ /**
602
+ * Apply document transaction changes to the frontend cell state.
603
+ *
604
+ * Each change is applied immediately and in order so that subsequent changes
605
+ * see the state produced by earlier changes (e.g. move-cell after create-cell).
606
+ */
607
+ export function applyTransactionChanges(
608
+ changes: TransactionChange[],
609
+ actions: CellActions,
610
+ getCurrentCellIds: () => CellId[],
611
+ ): void {
612
+ const cancelled = cancelledCellIds(changes);
613
+
614
+ for (const change of changes) {
615
+ if (
616
+ cancelled.size > 0 &&
617
+ "cellId" in change &&
618
+ cancelled.has(change.cellId)
619
+ ) {
620
+ continue;
621
+ }
622
+ for (const action of fromDocumentChanges([change], getCurrentCellIds)) {
623
+ // @ts-expect-error - TypeScript is not smart enough to know we have correctly mapped type -> payload
624
+ actions[action.type](action.payload);
625
+ }
626
+ }
627
+ }
628
+
629
+ // ---------------------------------------------------------------------------
630
+ // Test helpers
631
+ // ---------------------------------------------------------------------------
632
+
633
+ export const exportedForTesting = {
634
+ cancelPendingChanges: () => {
635
+ flushChanges.cancel();
636
+ pendingChanges = [];
637
+ },
638
+ drainChanges: (): DocumentChange[] => {
639
+ flushChanges.cancel();
640
+ const drained = pendingChanges;
641
+ pendingChanges = [];
642
+ return drained;
643
+ },
644
+ };
@@ -163,6 +163,7 @@ export class IslandsPyodideBridge implements RunRequests, EditRequests {
163
163
  saveCellConfig = throwNotImplemented;
164
164
  sendRestart = throwNotImplemented;
165
165
  syncCellIds = throwNotImplemented;
166
+ sendDocumentTransaction = throwNotImplemented;
166
167
  readCode = throwNotImplemented;
167
168
  readSnippets = throwNotImplemented;
168
169
  previewDatasetColumn = throwNotImplemented;
@@ -196,6 +196,8 @@ export async function initialize() {
196
196
  return;
197
197
  case "kernel-startup-error":
198
198
  return;
199
+ case "notebook-document-transaction":
200
+ return;
199
201
  case "model-lifecycle":
200
202
  handleWidgetMessage(MODEL_MANAGER, msg.data);
201
203
  return;
@@ -119,6 +119,7 @@ const ACTIONS: Record<keyof AllRequests, Action> = {
119
119
 
120
120
  // Sync operations that wait for connection
121
121
  syncCellIds: "waitForConnectionOpen",
122
+ sendDocumentTransaction: "waitForConnectionOpen",
122
123
  sendCodeCompletionRequest: "waitForConnectionOpen",
123
124
  };
124
125
 
@@ -58,6 +58,15 @@ export function createNetworkRequests(): EditRequests & RunRequests {
58
58
  })
59
59
  .then(handleResponseReturnNull);
60
60
  },
61
+ sendDocumentTransaction: async (request) => {
62
+ await waitForConnectionOpen();
63
+ return getClient()
64
+ .POST("/api/document/transaction", {
65
+ body: request,
66
+ params: getParams(),
67
+ })
68
+ .then(handleResponseReturnNull);
69
+ },
61
70
  sendRename: (request) => {
62
71
  return getClient()
63
72
  .POST("/api/kernel/rename", {
@@ -37,6 +37,7 @@ export function createStaticRequests(): EditRequests & RunRequests {
37
37
  },
38
38
  sendRestart: throwNotInEditMode,
39
39
  syncCellIds: throwNotInEditMode,
40
+ sendDocumentTransaction: throwNotInEditMode,
40
41
  sendRun: throwNotInEditMode,
41
42
  sendRunScratchpad: throwNotInEditMode,
42
43
  sendRename: throwNotInEditMode,
@@ -22,6 +22,7 @@ export function createErrorToastingRequests(
22
22
  sendFunctionRequest: "Failed to send function request",
23
23
  sendRestart: "Failed to restart",
24
24
  syncCellIds: "Failed to sync cell IDs",
25
+ sendDocumentTransaction: "Failed to sync document transaction",
25
26
  sendRun: "Failed to run",
26
27
  sendRunScratchpad: "Failed to run scratchpad",
27
28
  sendRename: "Failed to rename",