@marimo-team/frontend 0.21.2-dev56 → 0.21.2-dev58
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.
- package/dist/assets/CellStatus-C-nDPVVw.js +1 -0
- package/dist/assets/{ConnectedDataExplorerComponent-7yXYooWG.js → ConnectedDataExplorerComponent-B5igOqdA.js} +1 -1
- package/dist/assets/FiraMono-Bold-C6PDArdf.woff2 +0 -0
- package/dist/assets/FiraMono-Medium-D5MAsWEG.woff2 +0 -0
- package/dist/assets/FiraMono-Regular-CEsLFVD9.woff2 +0 -0
- package/dist/assets/{ImperativeModal-C3CD5-Aq.js → ImperativeModal-C5ZzjCQG.js} +1 -1
- package/dist/assets/{JsonOutput-DqjAyzM8.js → JsonOutput-bhD4i0Fm.js} +8 -8
- package/dist/assets/LazyAnyLanguageCodeMirror-C58z97yX.js +2 -0
- package/dist/assets/Lora-VariableFont_wght-CZceb_kH.woff2 +0 -0
- package/dist/assets/{MarimoErrorOutput-Dat_S09q.js → MarimoErrorOutput-BIh0hMl8.js} +5 -5
- package/dist/assets/PTSans-Bold-C_DwAp7Z.woff2 +0 -0
- package/dist/assets/PTSans-Regular-Bam3NpBI.woff2 +0 -0
- package/dist/assets/RenderHTML-CRY6pZVc.js +1 -0
- package/dist/assets/{add-cell-with-ai-y2xroEGf.js → add-cell-with-ai-BvN8AbcB.js} +15 -15
- package/dist/assets/{add-connection-dialog-CaIQ6Jta.js → add-connection-dialog-BvzGJCV7.js} +23 -23
- package/dist/assets/{agent-panel-DziFrEjJ.js → agent-panel-DLrLHhZB.js} +5 -5
- package/dist/assets/ai-model-dropdown-CQDhHQ1r.js +5 -0
- package/dist/assets/{any-language-editor-DZYnKlJB.js → any-language-editor-DwTh8fpE.js} +1 -1
- package/dist/assets/apl-BvMImcFf.js +1 -0
- package/dist/assets/{app-config-button-CpAv9Tiu.js → app-config-button-CnR7XJXP.js} +1 -1
- package/dist/assets/{arc-BrTIAGt4.js → arc-DUSwcTI9.js} +1 -1
- package/dist/assets/{architecture-7HQA4BMR-BewjmwdA.js → architecture-7HQA4BMR-DoF6afh3.js} +1 -1
- package/dist/assets/{architectureDiagram-VXUJARFQ-DKmk99ac.js → architectureDiagram-VXUJARFQ-d3bjsML7.js} +1 -1
- package/dist/assets/asciiarmor-BYYwBbrl.js +1 -0
- package/dist/assets/asn1-Dlt8rkAb.js +1 -0
- package/dist/assets/{azure-Dw5gKmUz.js → azure-DMJRLvDT.js} +1 -1
- package/dist/assets/{blockDiagram-VD42YOAC-TpAhP5OQ.js → blockDiagram-VD42YOAC-CjpBwM9S.js} +1 -1
- package/dist/assets/brainfuck-B1Z5ou__.js +1 -0
- package/dist/assets/{c4Diagram-YG6GDRKO-Dg8hCyKf.js → c4Diagram-YG6GDRKO-BsB04ueE.js} +1 -1
- package/dist/assets/{cache-panel-D0OsHk_D.js → cache-panel-B9gltP7l.js} +1 -1
- package/dist/assets/{cell-editor-RbAVpSFb.js → cell-editor-D5XEomtX.js} +11 -11
- package/dist/assets/{cell-link-CNgO3c-T.js → cell-link-Cp4c28Yf.js} +1 -1
- package/dist/assets/cells-DiVpbkA6.js +230 -0
- package/dist/assets/channel-BjUuxbyU.js +1 -0
- package/dist/assets/{chat-display-BPUVrlA6.js → chat-display-DhUQL9pu.js} +1 -1
- package/dist/assets/{chat-panel-esz5TfF-.js → chat-panel-fxitp0Hy.js} +2 -2
- package/dist/assets/{chunk-4BX2VUAB-DOQhLGwX.js → chunk-4BX2VUAB-DhvNmHH5.js} +1 -1
- package/dist/assets/chunk-55IACEB6-DPm6ES7n.js +1 -0
- package/dist/assets/{chunk-5FQGJX7Z-sGWxL7Ey.js → chunk-5FQGJX7Z-BSe8eGYF.js} +2 -2
- package/dist/assets/{chunk-ABZYJK2D-DXJ7hnjx.js → chunk-ABZYJK2D-Cw3YveaS.js} +3 -3
- package/dist/assets/{chunk-ATLVNIR6-CTEqcLEc.js → chunk-ATLVNIR6-ChKiaY37.js} +1 -1
- package/dist/assets/{chunk-B4BG7PRW-CkAIqtPf.js → chunk-B4BG7PRW-CjzWXMFh.js} +1 -1
- package/dist/assets/{chunk-CVBHYZKI-BmNXddyI.js → chunk-CVBHYZKI-BX0N_ipT.js} +1 -1
- package/dist/assets/{chunk-DI55MBZ5-C4F9vu8o.js → chunk-DI55MBZ5-BLrTiPQ-.js} +1 -1
- package/dist/assets/{chunk-EXTU4WIE-BT0Py-4P.js → chunk-EXTU4WIE-DEQUOsSM.js} +1 -1
- package/dist/assets/{chunk-FMBD7UC4-BF_CXOnN.js → chunk-FMBD7UC4-BDlH9XLH.js} +1 -1
- package/dist/assets/{chunk-HN2XXSSU-BstCPYtG.js → chunk-HN2XXSSU-ujlBpRMF.js} +1 -1
- package/dist/assets/{chunk-JA3XYJ7Z-CGd7jja_.js → chunk-JA3XYJ7Z-DVg9ra4h.js} +1 -1
- package/dist/assets/{chunk-JZLCHNYA-CqY-RYTj.js → chunk-JZLCHNYA-BTjSP-Yu.js} +1 -1
- package/dist/assets/{chunk-MI3HLSF2-BceZdyTR.js → chunk-MI3HLSF2-D9JXkg6-.js} +1 -1
- package/dist/assets/{chunk-N4CR4FBY-aUDjVzN7.js → chunk-N4CR4FBY-U_urcDYs.js} +2 -2
- package/dist/assets/{chunk-QN33PNHL-DHnCb5-U.js → chunk-QN33PNHL-rFbjvOIx.js} +1 -1
- package/dist/assets/{chunk-QXUST7PY-CRO5kYCE.js → chunk-QXUST7PY-BQj8er3i.js} +1 -1
- package/dist/assets/{chunk-QZHKN3VN-D3EIvP2i.js → chunk-QZHKN3VN-zZhG5AHT.js} +1 -1
- package/dist/assets/{chunk-S3R3BYOJ-CSHQgcuP.js → chunk-S3R3BYOJ-ZHSbXnZr.js} +1 -1
- package/dist/assets/{chunk-TZMSLE5B-CE7o9asH.js → chunk-TZMSLE5B-BAOCWmWp.js} +1 -1
- package/dist/assets/classDiagram-2ON5EDUG-Dk_A06Wi.js +1 -0
- package/dist/assets/classDiagram-v2-WZHVMYZB-CI0Lejhn.js +1 -0
- package/dist/assets/{clike-C3ewt06X.js → clike-D1aNLn0X.js} +1 -1
- package/dist/assets/clojure-DjNF1_gb.js +1 -0
- package/dist/assets/cmake-BDQMYLKM.js +1 -0
- package/dist/assets/cobol-DuPGAg14.js +1 -0
- package/dist/assets/{code-block-37QAKDTI-DMpe1jNG.js → code-block-37QAKDTI-BU3oxVk6.js} +1 -1
- package/dist/assets/coffeescript-Cpt7RKvC.js +1 -0
- package/dist/assets/{column-preview-BUKHsglA.js → column-preview-CWToI8XM.js} +1 -1
- package/dist/assets/{command-DmzEbs6L.js → command-B9VNhm0p.js} +1 -1
- package/dist/assets/{command-palette-AKdHOsJP.js → command-palette-ur_xyrxX.js} +1 -1
- package/dist/assets/{common-B4yshY-H.js → common-BqZ5L0i8.js} +1 -1
- package/dist/assets/commonlisp-BRjl0xya.js +1 -0
- package/dist/assets/{components-DCqJqyys.js → components-BouDP-tv.js} +1 -1
- package/dist/assets/{components-oKCjx6cN.js → components-CUetByBv.js} +1 -1
- package/dist/assets/{context-CRmPPhx9.js → context-CqNy_uER.js} +1 -1
- package/dist/assets/context-aware-panel-CD_txOWw.js +3 -0
- package/dist/assets/{copy-icon-P0kzz1Pr.js → copy-icon-WvgZ60QO.js} +1 -1
- package/dist/assets/{cose-bilkent-S5V4N54A-Bd5HJPaN.js → cose-bilkent-S5V4N54A-C4qI5Omf.js} +1 -1
- package/dist/assets/createReducer-Dvh64vBW.js +1 -0
- package/dist/assets/crystal-BJ72BOy1.js +1 -0
- package/dist/assets/{css-CCWfM5vT.js → css-D-8RA_n9.js} +1 -1
- package/dist/assets/cypher-qOLKQlRB.js +1 -0
- package/dist/assets/d-iOURkVzR.js +1 -0
- package/dist/assets/{dagre-6UL2VRFP-XqoNLMQ3.js → dagre-6UL2VRFP-CoEAbEhB.js} +1 -1
- package/dist/assets/{data-grid-overlay-editor-Cus1-BFN.js → data-grid-overlay-editor-DXzdnLZF.js} +1 -1
- package/dist/assets/{datasource-DKHG39NV.js → datasource-C5fKDIEK.js} +2 -2
- package/dist/assets/{dependency-graph-panel-7GKT3dyD.js → dependency-graph-panel-BCYRlR0F.js} +4 -4
- package/dist/assets/{diagram-PSM6KHXK-BuzKNNcN.js → diagram-PSM6KHXK-CzPUkhGz.js} +1 -1
- package/dist/assets/{diagram-QEK2KX5R-A5LBQS11.js → diagram-QEK2KX5R-D5RBmWAK.js} +1 -1
- package/dist/assets/{diagram-S2PKOQOG-dkJE8SA0.js → diagram-S2PKOQOG-C8PeRX7S.js} +1 -1
- package/dist/assets/{dialog-1_jIyAb_.js → dialog-C_NcD2pn.js} +1 -1
- package/dist/assets/diff-Cdd81Zxl.js +1 -0
- package/dist/assets/{dist-e6Ho4upI.js → dist-1u2or7ID.js} +1 -1
- package/dist/assets/{dist-DSlq5ZeQ.js → dist-BWa7crGu.js} +1 -1
- package/dist/assets/{dist-CsRbK9-Y.js → dist-BZOFXjSq.js} +1 -1
- package/dist/assets/dist-BgRFL8FO.js +1 -0
- package/dist/assets/{dist-Br306776.js → dist-Cj6Bv4PM.js} +1 -1
- package/dist/assets/dist-D6IRobNQ.js +1 -0
- package/dist/assets/{dist-Tk70DR_I.js → dist-DBaxVoPL.js} +1 -1
- package/dist/assets/{dist-f9b2H4q_.js → dist-DQg1jiNa.js} +1 -1
- package/dist/assets/{dist-_TwZ4tIe.js → dist-DZurUgwR.js} +1 -1
- package/dist/assets/{dist-C3AnARPE.js → dist-D_QUx5Gn.js} +1 -1
- package/dist/assets/{dist-B_buFm3B.js → dist-Dq1aTs7B.js} +1 -1
- package/dist/assets/{dist-ZM59OWYL.js → dist-NoS9f1Fr.js} +1 -1
- package/dist/assets/dist-i55eG_gB.js +1 -0
- package/dist/assets/dist-vu0dYsZ6.js +1 -0
- package/dist/assets/{dist-BWGxTsTP.js → dist-wAlLVqgL.js} +1 -1
- package/dist/assets/{dockerfile-ClV2Mqz8.js → dockerfile-t2fxOBWV.js} +1 -1
- package/dist/assets/documentation-panel-B-pPPA6b.js +1 -0
- package/dist/assets/{download-B1vXaivj.js → download-UmTPygP7.js} +1 -1
- package/dist/assets/dtd-CXebdwLo.js +1 -0
- package/dist/assets/dylan-YUx5_Nke.js +1 -0
- package/dist/assets/ecl-CktOv__x.js +1 -0
- package/dist/assets/{edit-page-Dt-k7cUh.js → edit-page-DKTQKmQY.js} +7 -7
- package/dist/assets/eiffel-Cwa25B6x.js +1 -0
- package/dist/assets/elm-COtRRWOj.js +1 -0
- package/dist/assets/{erDiagram-Q2GNP2WA-CgH6udOW.js → erDiagram-Q2GNP2WA-Bvb9X3rD.js} +1 -1
- package/dist/assets/erlang-Ir3c4mPd.js +1 -0
- package/dist/assets/{error-banner-J5F3weEj.js → error-banner-BYG94WiL.js} +1 -1
- package/dist/assets/{error-panel-DnhKJ5Ou.js → error-panel-CpC5W_ax.js} +1 -1
- package/dist/assets/{es-DYI7U61K.js → es-DKHH3Swu.js} +1 -1
- package/dist/assets/{esm-DKLLCu3N.js → esm-Clp2XqMu.js} +1 -1
- package/dist/assets/{esm-BC1J92im.js → esm-DnSMDF4m.js} +1 -1
- package/dist/assets/{factor-CrpY0izf.js → factor-CwMUgBOu.js} +1 -1
- package/dist/assets/factor-DLUSHz6o.js +1 -0
- package/dist/assets/{field-B08lvxnl.js → field-BEgvDIrV.js} +1 -1
- package/dist/assets/{file-explorer-panel-DyUl_ws9.js → file-explorer-panel-PTcIZ1Da.js} +3 -3
- package/dist/assets/{file-icons-3DTS8ZM7.js → file-icons-BTQcwa4T.js} +1 -1
- package/dist/assets/floating-outline-Dz5Wcbfw.js +1 -0
- package/dist/assets/{flowDiagram-NV44I4VS-D85BL4rA.js → flowDiagram-NV44I4VS-CF0XcGrZ.js} +1 -1
- package/dist/assets/{focus-DlJH7sfh.js → focus-BRTg8M44.js} +1 -1
- package/dist/assets/{form-760_EqmF.js → form-qtFXuhlh.js} +1 -1
- package/dist/assets/{formats-wYuh1bqp.js → formats-CQWEZHk-.js} +1 -1
- package/dist/assets/{formatting-CraOPe94.js → formatting-DBrNlcJ6.js} +1 -1
- package/dist/assets/forth-DdV4URDJ.js +1 -0
- package/dist/assets/fortran-rTDtSjFc.js +1 -0
- package/dist/assets/{gallery-page--paiPvYX.js → gallery-page-DhOJHDwV.js} +1 -1
- package/dist/assets/{ganttDiagram-JELNMOA3-DzCOXWlF.js → ganttDiagram-JELNMOA3-BXfHO6g0.js} +1 -1
- package/dist/assets/gas-B20k3keQ.js +1 -0
- package/dist/assets/gherkin-DdH6eiN0.js +1 -0
- package/dist/assets/{gitGraph-G5XIXVHT-iDzw7G2X.js → gitGraph-G5XIXVHT-D3o7km_A.js} +1 -1
- package/dist/assets/{gitGraphDiagram-V2S2FVAM-BUHURX6t.js → gitGraphDiagram-V2S2FVAM-Blhov9dO.js} +1 -1
- package/dist/assets/{glide-data-editor-DYdoQTO5.js → glide-data-editor-CO6jMjYm.js} +4 -4
- package/dist/assets/{globals-7M5DRsIb.js → globals-DD4XdbWe.js} +1 -1
- package/dist/assets/groovy-k_2ke765.js +1 -0
- package/dist/assets/haskell-JTqAy6cw.js +1 -0
- package/dist/assets/haxe-g4mjq9YQ.js +1 -0
- package/dist/assets/{home-page-CxQ1e98h.js → home-page-CwgtN9Ku.js} +1 -1
- package/dist/assets/{hooks-C3jEff2O.js → hooks-CLoML3Pf.js} +1 -1
- package/dist/assets/{html-to-image-DTFXm6_Z.js → html-to-image-CRCamxYo.js} +1 -1
- package/dist/assets/idl-CQEReZIk.js +1 -0
- package/dist/assets/{index-DqvjhTaJ.js → index-DC6PpQWW.js} +17 -17
- package/dist/assets/{index-BmoocKR0.css → index-DtdvIKY3.css} +1 -1
- package/dist/assets/{info-VBDWY6EO-CPHm9IfG.js → info-VBDWY6EO-CPJvjUKi.js} +1 -1
- package/dist/assets/infoDiagram-HS3SLOUP-CCrt0lHA.js +2 -0
- package/dist/assets/{input-CN1ZeRYm.js → input-lyDIN6R6.js} +1 -1
- package/dist/assets/javascript-Th71hKcK.js +1 -0
- package/dist/assets/{journeyDiagram-XKPGCS4Q-B1dvnV4D.js → journeyDiagram-XKPGCS4Q-Bs_9B9e_.js} +1 -1
- package/dist/assets/julia-KdjfFIx7.js +1 -0
- package/dist/assets/{kanban-definition-3W4ZIXB7-CefbrXQv.js → kanban-definition-3W4ZIXB7-_GEp627b.js} +1 -1
- package/dist/assets/katex-BalO4WMU.js +1 -0
- package/dist/assets/kiosk-mode-Di6uNlNd.js +1 -0
- package/dist/assets/{label-TNNaT1M9.js → label-CNWsXpEn.js} +1 -1
- package/dist/assets/{layout-3b3tzmbb.js → layout-OxzkS5En.js} +4 -4
- package/dist/assets/{line-BBSd2MUH.js → line-BKm-YkCh.js} +1 -1
- package/dist/assets/{linear-BDnrHGYO.js → linear-DG7yljSg.js} +1 -1
- package/dist/assets/livescript-OIMP9q9l.js +1 -0
- package/dist/assets/{logs-panel-C4k_2IHW.js → logs-panel-Dt4wzfgH.js} +1 -1
- package/dist/assets/{loro_wasm_bg-MY7PmKYj.js → loro_wasm_bg-CvVVQqkx.js} +1 -1
- package/dist/assets/lua-blzLZg7R.js +1 -0
- package/dist/assets/{markdown-renderer-DSy5IuAx.js → markdown-renderer-nMv2xwHt.js} +3 -3
- package/dist/assets/mathematica-CMJa84MS.js +1 -0
- package/dist/assets/mbox-DVlt9Sx8.js +1 -0
- package/dist/assets/mermaid-4DMBBIKO-gmMzGFR4.js +1 -0
- package/dist/assets/{mermaid-C43VbdrM.js → mermaid-DEOW_c2X.js} +3 -3
- package/dist/assets/{mermaid-parser.core-CdM8D_p_.js → mermaid-parser.core-ChpHatjH.js} +2 -2
- package/dist/assets/{mhchem-B98RQJ-y.js → mhchem-DqNBdKjC.js} +1 -1
- package/dist/assets/{mindmap-definition-VGOIOE7T-CcV7D-wF.js → mindmap-definition-VGOIOE7T-CsErmnfz.js} +1 -1
- package/dist/assets/mirc-CE9zFxnR.js +1 -0
- package/dist/assets/mllike-UPrOWD4R.js +1 -0
- package/dist/assets/modelica-CXEKMd0n.js +1 -0
- package/dist/assets/mscgen-CzEcWkMH.js +1 -0
- package/dist/assets/mumps-DNi45Qjm.js +1 -0
- package/dist/assets/name-cell-input-CwvGCJkg.js +1 -0
- package/dist/assets/{nsis-BeaU1Q2K.js → nsis-10Du03KF.js} +1 -1
- package/dist/assets/nsis-Cjsw1q_J.js +1 -0
- package/dist/assets/ntriples-ByafJqO3.js +1 -0
- package/dist/assets/{number-overlay-editor-BBJO1mf8.js → number-overlay-editor-zZDGu9D2.js} +1 -1
- package/dist/assets/octave-Bg9NfY8T.js +1 -0
- package/dist/assets/{ordinal-CMAUv8ku.js → ordinal-CIVqSC4M.js} +1 -1
- package/dist/assets/{outline-panel-D7CJwO8u.js → outline-panel-CCmk1ERZ.js} +1 -1
- package/dist/assets/oz-BqUh_R9x.js +1 -0
- package/dist/assets/{packages-panel-Bp1SYjgc.js → packages-panel-BzayhsFC.js} +1 -1
- package/dist/assets/{packet-DYOGHKS2-0KdzLf9c.js → packet-DYOGHKS2-0_hZggkb.js} +1 -1
- package/dist/assets/panels-B7hsDiui.js +1 -0
- package/dist/assets/pascal-T5LJ_IPG.js +1 -0
- package/dist/assets/perl-QB_H1sT2.js +1 -0
- package/dist/assets/{pie-VRWISCQL-C6EIS9iq.js → pie-VRWISCQL-QeXFV_RN.js} +1 -1
- package/dist/assets/{pieDiagram-ADFJNKIX-C1fBf15W.js → pieDiagram-ADFJNKIX-CHFQxGML.js} +1 -1
- package/dist/assets/pig-BX8GE3n0.js +1 -0
- package/dist/assets/powershell-CgQaEAdZ.js +1 -0
- package/dist/assets/{precisionRound-CCOoIlcP.js → precisionRound-NX56vp6K.js} +1 -1
- package/dist/assets/{process-output-BxPWHcIi.js → process-output-D_zUglHE.js} +1 -1
- package/dist/assets/properties-obn8TWyy.js +1 -0
- package/dist/assets/protobuf-C-zxlF8D.js +1 -0
- package/dist/assets/pug--0L5ulw9.js +1 -0
- package/dist/assets/{pug-v81J9ytZ.js → pug-C9pOca2F.js} +1 -1
- package/dist/assets/puppet-05PW0eq8.js +1 -0
- package/dist/assets/python-DTi_lJAD.js +1 -0
- package/dist/assets/q-DDewC_-L.js +1 -0
- package/dist/assets/{quadrantDiagram-AYHSOK5B-RVooN-fX.js → quadrantDiagram-AYHSOK5B-BWfhvbIs.js} +1 -1
- package/dist/assets/r-BP2yA_lV.js +1 -0
- package/dist/assets/{radar-ZZBFDIW7-IOV25h32.js → radar-ZZBFDIW7-CPk9iUBG.js} +1 -1
- package/dist/assets/{react-vega-BKRQSy0g.js → react-vega-BbTMwpa-.js} +1 -1
- package/dist/assets/react-vega-_CJceHW7.js +1 -0
- package/dist/assets/{readonly-python-code-D95oshJa.js → readonly-python-code-BQo0UqCJ.js} +1 -1
- package/dist/assets/{renderShortcut-BYvKm38e.js → renderShortcut-DG5sXSxr.js} +1 -1
- package/dist/assets/{requirementDiagram-UZGBJVZJ-DtqOYJpH.js → requirementDiagram-UZGBJVZJ-DdZsVZPu.js} +1 -1
- package/dist/assets/rpm-BTpPEnAJ.js +1 -0
- package/dist/assets/ruby-_km6sWpH.js +1 -0
- package/dist/assets/{run-page-B7CASued.js → run-page-BN0QZ7-c.js} +1 -1
- package/dist/assets/{runs-Bhy0tbWr.js → runs-CtxlyzdZ.js} +1 -1
- package/dist/assets/{sankeyDiagram-TZEHDZUN-DmcooLA8.js → sankeyDiagram-TZEHDZUN-BiKMK7q3.js} +1 -1
- package/dist/assets/sas-BV0z5M7P.js +1 -0
- package/dist/assets/scheme-AMw7OHvW.js +1 -0
- package/dist/assets/{scratchpad-panel-BIVRgYOU.js → scratchpad-panel-BpM3Nxzw.js} +1 -1
- package/dist/assets/{secrets-panel-C24hZEiO.js → secrets-panel-BVJ1G2-2.js} +1 -1
- package/dist/assets/{sequenceDiagram-WL72ISMW-S2qeLb7J.js → sequenceDiagram-WL72ISMW-B1m5IqrQ.js} +1 -1
- package/dist/assets/session-panel-CUtOop5w.js +1 -0
- package/dist/assets/shell-BepJCs0S.js +1 -0
- package/dist/assets/sieve-YvKFjNqY.js +1 -0
- package/dist/assets/{slides-component-Brm_TS4x.js → slides-component-Bg8T1XwW.js} +1 -1
- package/dist/assets/smalltalk-e8puLVxg.js +1 -0
- package/dist/assets/{snippets-panel-D1JAeJj1.js → snippets-panel-CND2QIaH.js} +1 -1
- package/dist/assets/sparql-IwwbUejm.js +1 -0
- package/dist/assets/{src-Bp_72rVO.js → src-lcGySDV2.js} +1 -1
- package/dist/assets/{state-Cz_wrzCz.js → state-C-thupmq.js} +1 -1
- package/dist/assets/{state-BagvlaEz.js → state-Cm3zkTs2.js} +1 -1
- package/dist/assets/{state-DMQXxemS.js → state-Dxl7WjW3.js} +1 -1
- package/dist/assets/{stateDiagram-FKZM4ZOC-uuQ60pIl.js → stateDiagram-FKZM4ZOC-B_fZr0Jz.js} +1 -1
- package/dist/assets/stateDiagram-v2-4FDKWEC3-CnaooVt9.js +1 -0
- package/dist/assets/{step-BkfKj3CL.js → step-B5y1YzZ4.js} +1 -1
- package/dist/assets/stylus-C5qHDsoA.js +1 -0
- package/dist/assets/swift-CD6FyF1F.js +1 -0
- package/dist/assets/{switch-Bwpd2AFq.js → switch-C2PmTLIx.js} +1 -1
- package/dist/assets/tcl-189LoKbJ.js +1 -0
- package/dist/assets/{terminal-Gl8Fi44y.js → terminal-8keBq1HC.js} +1 -1
- package/dist/assets/textile-dSHgbtG8.js +1 -0
- package/dist/assets/{time-Bw8f15NM.js → time-D8_flTb-.js} +1 -1
- package/dist/assets/{timeline-definition-IT6M3QCI-TKWeDnSQ.js → timeline-definition-IT6M3QCI-CiMZB-_n.js} +1 -1
- package/dist/assets/toml-CWUvzxNs.js +1 -0
- package/dist/assets/{tracing-DwAC7DWN.js → tracing-Cab2_N64.js} +1 -1
- package/dist/assets/{tracing-panel-D1iNgclL.js → tracing-panel-h6SS64Fd.js} +2 -2
- package/dist/assets/{tree-WVrWjdwv.js → tree-Duf22i7P.js} +1 -1
- package/dist/assets/{treemap-GDKQZRPO-BUa0eLeZ.js → treemap-GDKQZRPO-BqT6xXWn.js} +1 -1
- package/dist/assets/troff-CkFGw7sb.js +1 -0
- package/dist/assets/ttcn-B71Rl_FP.js +1 -0
- package/dist/assets/ttcn-cfg-BsJCQ8Pc.js +1 -0
- package/dist/assets/turtle-AJRCjN1N.js +1 -0
- package/dist/assets/{useAddCell-D6Q7JziZ.js → useAddCell-fzJF_CdR.js} +1 -1
- package/dist/assets/{useBoolean-CrltYVhE.js → useBoolean-DJdaVVhu.js} +1 -1
- package/dist/assets/useCellActionButton-C-mIavMW.js +1 -0
- package/dist/assets/{useDateFormatter-DOoVZUts.js → useDateFormatter-CYAwsqZA.js} +1 -1
- package/dist/assets/{useDeleteCell-d8veThW7.js → useDeleteCell-lfqkVcrN.js} +1 -1
- package/dist/assets/{useDependencyPanelTab-B3iIj3MO.js → useDependencyPanelTab-Nq81zNNI.js} +1 -1
- package/dist/assets/{useInstallPackage-CQEr5429.js → useInstallPackage-BVUUWUU8.js} +1 -1
- package/dist/assets/useNotebookActions-BAw99pt_.js +1 -0
- package/dist/assets/{useNumberFormatter-BXZcbTzH.js → useNumberFormatter-D5CeG3Kn.js} +1 -1
- package/dist/assets/{usePress-alQ5Crny.js → usePress-CHKiC-9E.js} +1 -1
- package/dist/assets/useRunCells-6ne-1pJW.js +1 -0
- package/dist/assets/useSplitCell-D8a8QoYd.js +1 -0
- package/dist/assets/{utils-C24l2A1T.js → utils-DnNnBV1N.js} +1 -1
- package/dist/assets/vb-gPFTxjZr.js +1 -0
- package/dist/assets/vbscript-CMzdZB2G.js +1 -0
- package/dist/assets/{vega-component-9Pf4pVZL.js → vega-component-DnJzUfQO.js} +1 -1
- package/dist/assets/{vega-loader.browser-BJ9oKrvH.js → vega-loader.browser-xq8miGHn.js} +1 -1
- package/dist/assets/velocity-DBHzqIXP.js +1 -0
- package/dist/assets/verilog-CrrLE4DH.js +1 -0
- package/dist/assets/vhdl-CcYUxt_-.js +1 -0
- package/dist/assets/webidl-Cx4I26Tn.js +1 -0
- package/dist/assets/{write-secret-modal-BFCsWMoW.js → write-secret-modal-5AT0ZoJv.js} +1 -1
- package/dist/assets/xquery-Cu7k_x_s.js +1 -0
- package/dist/assets/{xychartDiagram-PRI3JC2R-CIp-yeSa.js → xychartDiagram-PRI3JC2R-B3F_v5OL.js} +1 -1
- package/dist/assets/yacas-DEQ-2nrM.js +1 -0
- package/dist/assets/z80-D9sXBSXs.js +1 -0
- package/dist/index.html +90 -91
- package/package.json +1 -1
- package/src/__mocks__/requests.ts +1 -0
- package/src/core/cells/__tests__/apply-transaction.test.ts +279 -0
- package/src/core/cells/__tests__/cells.test.ts +6 -0
- package/src/core/cells/__tests__/document-changes.test.ts +575 -0
- package/src/core/cells/__tests__/document-roundtrip.test.ts +376 -0
- package/src/core/cells/cells.ts +28 -3
- package/src/core/cells/document-changes.ts +644 -0
- package/src/core/islands/bridge.ts +1 -0
- package/src/core/islands/main.ts +2 -0
- package/src/core/network/requests-lazy.ts +1 -0
- package/src/core/network/requests-network.ts +9 -0
- package/src/core/network/requests-static.ts +1 -0
- package/src/core/network/requests-toasting.tsx +1 -0
- package/src/core/network/types.ts +5 -0
- package/src/core/wasm/bridge.ts +1 -0
- package/src/core/websocket/useMarimoKernelConnection.tsx +19 -1
- package/src/css/app/fonts.css +6 -6
- package/src/fonts/Fira_Mono/FiraMono-Bold.woff2 +0 -0
- package/src/fonts/Fira_Mono/FiraMono-Medium.woff2 +0 -0
- package/src/fonts/Fira_Mono/FiraMono-Regular.woff2 +0 -0
- package/src/fonts/Lora/Lora-VariableFont_wght.woff2 +0 -0
- package/src/fonts/PT_Sans/PTSans-Bold.woff2 +0 -0
- package/src/fonts/PT_Sans/PTSans-Regular.woff2 +0 -0
- package/src/utils/createReducer.ts +26 -11
- package/dist/assets/CellStatus-DX8MnBMk.js +0 -1
- package/dist/assets/FiraMono-Bold-CLVRCuM9.ttf +0 -0
- package/dist/assets/FiraMono-Medium-DU3aDxX5.ttf +0 -0
- package/dist/assets/FiraMono-Regular-BTCkDNvf.ttf +0 -0
- package/dist/assets/LazyAnyLanguageCodeMirror-CcCHIX38.js +0 -2
- package/dist/assets/Lora-VariableFont_wght-B2ootaw-.ttf +0 -0
- package/dist/assets/PTSans-Bold-D9fedIX3.ttf +0 -0
- package/dist/assets/PTSans-Regular-CxL0S8W7.ttf +0 -0
- package/dist/assets/RenderHTML-C7XM39M2.js +0 -1
- package/dist/assets/ai-model-dropdown-CiJpv5wN.js +0 -5
- package/dist/assets/apl-CWQZjEHB.js +0 -1
- package/dist/assets/asciiarmor-YkqeOS7J.js +0 -1
- package/dist/assets/asn1-CXKIzj3m.js +0 -1
- package/dist/assets/brainfuck-BATyDEza.js +0 -1
- package/dist/assets/cells-39RE4UzS.js +0 -230
- package/dist/assets/channel-D1wPYhc9.js +0 -1
- package/dist/assets/chunk-55IACEB6-D0TKhzEY.js +0 -1
- package/dist/assets/classDiagram-2ON5EDUG-BDIQSKYv.js +0 -1
- package/dist/assets/classDiagram-v2-WZHVMYZB-Cdh4cVOB.js +0 -1
- package/dist/assets/clojure-DSdxtK57.js +0 -1
- package/dist/assets/cmake-b6COJhkL.js +0 -1
- package/dist/assets/cobol-0au-d4Af.js +0 -1
- package/dist/assets/coffeescript-CO6miDRN.js +0 -1
- package/dist/assets/commonlisp-ViswrHum.js +0 -1
- package/dist/assets/context-aware-panel-DC0Te9Hj.js +0 -3
- package/dist/assets/createReducer-Drh7NmIR.js +0 -1
- package/dist/assets/crystal-BcOI1XlU.js +0 -1
- package/dist/assets/cypher-BKbuDk70.js +0 -1
- package/dist/assets/d-4fbeW9Dj.js +0 -1
- package/dist/assets/diff-CV59_hp-.js +0 -1
- package/dist/assets/dist-BZeePkbd.js +0 -1
- package/dist/assets/dist-Br4KMeY4.js +0 -1
- package/dist/assets/dist-Cp60fE5Z.js +0 -1
- package/dist/assets/dist-DVbTmqCA.js +0 -1
- package/dist/assets/documentation-panel-D5d_BbHV.js +0 -1
- package/dist/assets/dtd-BAjS2EMD.js +0 -1
- package/dist/assets/dylan-CjAEbzAl.js +0 -1
- package/dist/assets/ecl-DegMF2Uo.js +0 -1
- package/dist/assets/eiffel-D_UXtJqE.js +0 -1
- package/dist/assets/elm-CV-6VdWh.js +0 -1
- package/dist/assets/erlang-C3Vp1oq_.js +0 -1
- package/dist/assets/factor-CBMQHXUW.js +0 -1
- package/dist/assets/floating-outline-DmugATcB.js +0 -1
- package/dist/assets/forth-C_TcrpRK.js +0 -1
- package/dist/assets/fortran-DOs2FQj2.js +0 -1
- package/dist/assets/gas-Cg-F3pmb.js +0 -1
- package/dist/assets/gherkin-CaXqq9kA.js +0 -1
- package/dist/assets/groovy-DmxumoMi.js +0 -1
- package/dist/assets/haskell-BZ-cKqgz.js +0 -1
- package/dist/assets/haxe-x-4elm0t.js +0 -1
- package/dist/assets/idl-DNkkzHKH.js +0 -1
- package/dist/assets/infoDiagram-HS3SLOUP-GG5r0Y5G.js +0 -2
- package/dist/assets/javascript-B0uQ9oZ_.js +0 -1
- package/dist/assets/julia-DBflXO9b.js +0 -1
- package/dist/assets/katex-YDobqqVd.js +0 -1
- package/dist/assets/kiosk-mode-CyTnrzwK.js +0 -1
- package/dist/assets/livescript-DRwwdQDY.js +0 -1
- package/dist/assets/lua-D_CRYz1e.js +0 -1
- package/dist/assets/mathematica-D28k0VAB.js +0 -1
- package/dist/assets/mbox-B74-q1nN.js +0 -1
- package/dist/assets/mermaid-4DMBBIKO-g7AL4SLJ.js +0 -1
- package/dist/assets/mirc-CW8yiVay.js +0 -1
- package/dist/assets/mllike-BwZpH7CZ.js +0 -1
- package/dist/assets/mode-D-iRbN9x.js +0 -1
- package/dist/assets/modelica-AhRO-ii8.js +0 -1
- package/dist/assets/mscgen-CJZUmlSk.js +0 -1
- package/dist/assets/mumps-BTPWDvZ1.js +0 -1
- package/dist/assets/name-cell-input-Dyb0ZO4X.js +0 -1
- package/dist/assets/nsis-CuVPiHG5.js +0 -1
- package/dist/assets/ntriples-eNmSbiOL.js +0 -1
- package/dist/assets/octave-BboqqX2Z.js +0 -1
- package/dist/assets/oz-eUT9rD_n.js +0 -1
- package/dist/assets/panels-D0aw6jdc.js +0 -1
- package/dist/assets/pascal-Bl9h-Ruv.js +0 -1
- package/dist/assets/perl-B1GdYx3j.js +0 -1
- package/dist/assets/pig-CoZHWNtw.js +0 -1
- package/dist/assets/powershell-B2p71KcT.js +0 -1
- package/dist/assets/properties-Cs9aaJGK.js +0 -1
- package/dist/assets/protobuf-DFCnQG_o.js +0 -1
- package/dist/assets/pug-BShaWOtD.js +0 -1
- package/dist/assets/puppet-4yIFv98Z.js +0 -1
- package/dist/assets/python-ByMRQ0aE.js +0 -1
- package/dist/assets/q-C7EgGttK.js +0 -1
- package/dist/assets/r-DpLLx5HE.js +0 -1
- package/dist/assets/react-vega-DXESF7qN.js +0 -1
- package/dist/assets/rpm-DlCq0FVA.js +0 -1
- package/dist/assets/ruby-BGmSEBWH.js +0 -1
- package/dist/assets/sas-CFcv5xFe.js +0 -1
- package/dist/assets/scheme-BgRfkNY3.js +0 -1
- package/dist/assets/session-panel-O68V-tv4.js +0 -1
- package/dist/assets/shell-CKQz0rkv.js +0 -1
- package/dist/assets/sieve-D0P6XnTD.js +0 -1
- package/dist/assets/smalltalk-Dcg9QwVr.js +0 -1
- package/dist/assets/sparql-f01xs6VH.js +0 -1
- package/dist/assets/stateDiagram-v2-4FDKWEC3-D-GWhQTG.js +0 -1
- package/dist/assets/stylus-BjzHGGgo.js +0 -1
- package/dist/assets/swift-DOptU29u.js +0 -1
- package/dist/assets/tcl-vC8etUeQ.js +0 -1
- package/dist/assets/textile-BfLqcKXP.js +0 -1
- package/dist/assets/toml-rX0_Isgp.js +0 -1
- package/dist/assets/troff-C1lPb0WN.js +0 -1
- package/dist/assets/ttcn-D5dxusfs.js +0 -1
- package/dist/assets/ttcn-cfg-Dj2ybct-.js +0 -1
- package/dist/assets/turtle-BiTItqZm.js +0 -1
- package/dist/assets/useCellActionButton-B2G9OaX9.js +0 -1
- package/dist/assets/useNotebookActions-CdAfjuOC.js +0 -1
- package/dist/assets/useRunCells-Dhl8ZTGh.js +0 -1
- package/dist/assets/useSplitCell-BSnFazbH.js +0 -1
- package/dist/assets/vb-roE2hgal.js +0 -1
- package/dist/assets/vbscript-2s97682t.js +0 -1
- package/dist/assets/velocity-D0YPg3VZ.js +0 -1
- package/dist/assets/verilog-Btszgjcd.js +0 -1
- package/dist/assets/vhdl-enS91NZh.js +0 -1
- package/dist/assets/webidl-DQMyFjhm.js +0 -1
- package/dist/assets/xquery-D5Jh9c_Z.js +0 -1
- package/dist/assets/yacas-CTzSIaAf.js +0 -1
- package/dist/assets/z80-Dt0hdUwP.js +0 -1
- package/src/fonts/Fira_Mono/FiraMono-Bold.ttf +0 -0
- package/src/fonts/Fira_Mono/FiraMono-Medium.ttf +0 -0
- package/src/fonts/Fira_Mono/FiraMono-Regular.ttf +0 -0
- package/src/fonts/Lora/Lora-Italic-VariableFont_wght.ttf +0 -0
- package/src/fonts/Lora/Lora-VariableFont_wght.ttf +0 -0
- package/src/fonts/Lora/static/Lora-Bold.ttf +0 -0
- package/src/fonts/Lora/static/Lora-BoldItalic.ttf +0 -0
- package/src/fonts/Lora/static/Lora-Italic.ttf +0 -0
- package/src/fonts/Lora/static/Lora-Medium.ttf +0 -0
- package/src/fonts/Lora/static/Lora-MediumItalic.ttf +0 -0
- package/src/fonts/Lora/static/Lora-Regular.ttf +0 -0
- package/src/fonts/Lora/static/Lora-SemiBold.ttf +0 -0
- package/src/fonts/Lora/static/Lora-SemiBoldItalic.ttf +0 -0
- package/src/fonts/PT_Sans/PTSans-Bold.ttf +0 -0
- package/src/fonts/PT_Sans/PTSans-BoldItalic.ttf +0 -0
- package/src/fonts/PT_Sans/PTSans-Italic.ttf +0 -0
- package/src/fonts/PT_Sans/PTSans-Regular.ttf +0 -0
- /package/dist/assets/{ImageComparisonComponent-DvDPDgw3.js → ImageComparisonComponent-Cw3aoN3z.js} +0 -0
- /package/dist/assets/{Inputs-D5kI9GwB.js → Inputs-CsxDtqlI.js} +0 -0
- /package/dist/assets/{Plot-DQQQ-fLA.js → Plot-eiPFedH2.js} +0 -0
- /package/dist/assets/{SSRProvider-CwqN9FWV.js → SSRProvider-BkypbMcb.js} +0 -0
- /package/dist/assets/{alert-OQZHipbB.js → alert-NjVFesQm.js} +0 -0
- /package/dist/assets/{alert-dialog-ebk_-wsU.js → alert-dialog-Baw3WWPa.js} +0 -0
- /package/dist/assets/{apl-CexVE068.js → apl-D8X_E6Wh.js} +0 -0
- /package/dist/assets/{array-psg969PF.js → array-CEZNxKGf.js} +0 -0
- /package/dist/assets/{asciiarmor-DzdXFxI-.js → asciiarmor-DeecVuRW.js} +0 -0
- /package/dist/assets/{asn1-lKNP6w4p.js → asn1-C9WWFN1p.js} +0 -0
- /package/dist/assets/{asterisk-Bjb62jej.js → asterisk-Dykb_Qas.js} +0 -0
- /package/dist/assets/{blob-DgooIGjS.js → blob-C3EfaMOb.js} +0 -0
- /package/dist/assets/{brainfuck-pTL_9bJ7.js → brainfuck-Cl6gOsOa.js} +0 -0
- /package/dist/assets/{bundle.esm-idScn0w0.js → bundle.esm-_LzfhNmX.js} +0 -0
- /package/dist/assets/{card-C-c-4jyF.js → card-OaQlvpSl.js} +0 -0
- /package/dist/assets/{chunk-4F5CHEZ2-BGeTOmrq.js → chunk-4F5CHEZ2-Bghwh3ep.js} +0 -0
- /package/dist/assets/{chunk-B2363JML-Cmh9TPpj.js → chunk-B2363JML-B3wWt_gr.js} +0 -0
- /package/dist/assets/{chunk-DR5Q36YT-SM9ZwAOv.js → chunk-DR5Q36YT-DOSR70sR.js} +0 -0
- /package/dist/assets/{chunk-FRFDVMJY-CUDE-MUX.js → chunk-FRFDVMJY-D9fs6vlF.js} +0 -0
- /package/dist/assets/{chunk-PL6DKKU2-DMqBvHTF.js → chunk-PL6DKKU2-CdtxnIBd.js} +0 -0
- /package/dist/assets/{chunk-SJTYNZTY-C9cwtT3h.js → chunk-SJTYNZTY-CMwkFD7U.js} +0 -0
- /package/dist/assets/{chunk-TQ3KTPDO-CUyT9lNN.js → chunk-TQ3KTPDO-0Us1NWXT.js} +0 -0
- /package/dist/assets/{chunk-UMXZTB3W-Bt-_br31.js → chunk-UMXZTB3W-zYd--p4q.js} +0 -0
- /package/dist/assets/{clear-button-DrIF5o__.js → clear-button-CsNT-Tql.js} +0 -0
- /package/dist/assets/{click-outside-container-CagwJLiG.js → click-outside-container-gHk0jCel.js} +0 -0
- /package/dist/assets/{clike-BCxd7pZ9.js → clike-BuY5U60j.js} +0 -0
- /package/dist/assets/{clojure-CPAS-74L.js → clojure-C8jGLyPy.js} +0 -0
- /package/dist/assets/{cmake-DMONEHtp.js → cmake-DcjYbevD.js} +0 -0
- /package/dist/assets/{cobol-0rQGzjf0.js → cobol-C-nFr8y5.js} +0 -0
- /package/dist/assets/{coffeescript-BHNUw4aR.js → coffeescript-VbbBP-Cm.js} +0 -0
- /package/dist/assets/{colors-WO6MvCS3.js → colors-Dm6L93c7.js} +0 -0
- /package/dist/assets/{common-keywords-D_14jCw0.js → common-keywords-sop6vXJR.js} +0 -0
- /package/dist/assets/{commonlisp-Cjiyl45-.js → commonlisp-mLMub2u_.js} +0 -0
- /package/dist/assets/{copy-KjcPgPw9.js → copy-CcUDATFX.js} +0 -0
- /package/dist/assets/{crystal-CUMDisY2.js → crystal-Buc8hu84.js} +0 -0
- /package/dist/assets/{css-B6NFOUor.js → css-DtNg2SPz.js} +0 -0
- /package/dist/assets/{cypher-DcWJtLBw.js → cypher-wyT0Afvt.js} +0 -0
- /package/dist/assets/{cytoscape.esm-DuXIsNbY.js → cytoscape.esm-CuwfIk-V.js} +0 -0
- /package/dist/assets/{d-CpNp8oDv.js → d-KzUzEnwn.js} +0 -0
- /package/dist/assets/{defaultLocale-CuYNS33t.js → defaultLocale-DPBdGRrH.js} +0 -0
- /package/dist/assets/{defaultLocale-CGfP-Ye3.js → defaultLocale-Lfi0pexn.js} +0 -0
- /package/dist/assets/{diff-BCFJsGHX.js → diff-zZX_BZ60.js} +0 -0
- /package/dist/assets/{dist-D9Vhptds.js → dist-2yYHES7B.js} +0 -0
- /package/dist/assets/{dist-CVEvQ1Ex.js → dist-4adVoHKM.js} +0 -0
- /package/dist/assets/{dist-ASlWkGgG.js → dist-8B3AWTCv.js} +0 -0
- /package/dist/assets/{dist-sVuk6mkQ.js → dist-AkjWZMeV.js} +0 -0
- /package/dist/assets/{dist-BhNN2V5a.js → dist-BKm9wJTB.js} +0 -0
- /package/dist/assets/{dist-BR9zyVPH.js → dist-BacKBlEY.js} +0 -0
- /package/dist/assets/{dist-OxxI-HeS.js → dist-Bi4JuBeU.js} +0 -0
- /package/dist/assets/{dist-COnmrAVZ.js → dist-BjCIGEdQ.js} +0 -0
- /package/dist/assets/{dist-Dxov2ltb.js → dist-C8sUhiRj.js} +0 -0
- /package/dist/assets/{dist-DxrbvUBv.js → dist-CKX5rwHQ.js} +0 -0
- /package/dist/assets/{dist-DkaderFA.js → dist-Cd9M8gLO.js} +0 -0
- /package/dist/assets/{dist-DD9ZJMK5.js → dist-CjkJ83NO.js} +0 -0
- /package/dist/assets/{dist-DBPtheKQ.js → dist-CybQbPjb.js} +0 -0
- /package/dist/assets/{dist-CYs1oP7g.js → dist-DVCqT940.js} +0 -0
- /package/dist/assets/{dist-feWVQ4dq.js → dist-DXjL2dGI.js} +0 -0
- /package/dist/assets/{dist-DXyIIB32.js → dist-DgEPWvX2.js} +0 -0
- /package/dist/assets/{dist-CgC048vN.js → dist-DzjL8iiW.js} +0 -0
- /package/dist/assets/{dist-DReDpc2z.js → dist-rrswzGsS.js} +0 -0
- /package/dist/assets/{dtd-D7nO7isU.js → dtd-DrorhQz9.js} +0 -0
- /package/dist/assets/{duckdb-keywords-CSySeB8R.js → duckdb-keywords-CEWQs1NJ.js} +0 -0
- /package/dist/assets/{dylan-qEhlQv4l.js → dylan-B4r5umK9.js} +0 -0
- /package/dist/assets/{ebnf-KJaLpQez.js → ebnf-BoS8ZFT2.js} +0 -0
- /package/dist/assets/{ecl-cXHEjabG.js → ecl-Chc_DmTY.js} +0 -0
- /package/dist/assets/{eiffel-CUTEIYa-.js → eiffel-CIYqf7wj.js} +0 -0
- /package/dist/assets/{elm-DOfGHeKn.js → elm-Baq4wI8e.js} +0 -0
- /package/dist/assets/{emotion-is-prop-valid.esm-D7FeWASw.js → emotion-is-prop-valid.esm-lG8j6oqk.js} +0 -0
- /package/dist/assets/{empty-state-B_US46Us.js → empty-state-BBWqzODS.js} +0 -0
- /package/dist/assets/{erlang-B5R7Byby.js → erlang-xHcM8uVi.js} +0 -0
- /package/dist/assets/{errors-0IrrdfSG.js → errors-iwK4b4VF.js} +0 -0
- /package/dist/assets/{esm-CX-gNDKf.js → esm-DM72gy9Q.js} +0 -0
- /package/dist/assets/{extends-aq1t6BkR.js → extends-B9D0JO9U.js} +0 -0
- /package/dist/assets/{fcl-Cf241iHu.js → fcl-JwfU5Rr4.js} +0 -0
- /package/dist/assets/{forth-BjV8SV3p.js → forth-j6RT-cy6.js} +0 -0
- /package/dist/assets/{fortran-CvNblcug.js → fortran-Z7A59UbQ.js} +0 -0
- /package/dist/assets/{gas-D1YrZZUY.js → gas-5kgpLqGg.js} +0 -0
- /package/dist/assets/{gherkin-CAUl7roi.js → gherkin-KECBIOSQ.js} +0 -0
- /package/dist/assets/{groovy-CnmCDhLm.js → groovy-CocWwvHR.js} +0 -0
- /package/dist/assets/{haskell-qdBb4h_7.js → haskell-BVRegKDO.js} +0 -0
- /package/dist/assets/{haxe-MQhLSFhI.js → haxe-U6x7KK2i.js} +0 -0
- /package/dist/assets/{http-_roNBajA.js → http-BSf7msSy.js} +0 -0
- /package/dist/assets/{icons-CrUXojcA.js → icons-D4U3iRHj.js} +0 -0
- /package/dist/assets/{idl-CcZzcWCI.js → idl-Byd3Qhyl.js} +0 -0
- /package/dist/assets/{init-XMA8CWhh.js → init-BpLL1fe9.js} +0 -0
- /package/dist/assets/{javascript-hE4QNtKl.js → javascript-D0a_TZzL.js} +0 -0
- /package/dist/assets/{julia-BjrvvLkp.js → julia-CaxV2pJw.js} +0 -0
- /package/dist/assets/{katex-rvFxOCU-.js → katex-FSdXOW5Y.js} +0 -0
- /package/dist/assets/{kbd-DvKpAc6K.js → kbd-zZCuQN_1.js} +0 -0
- /package/dist/assets/{links-DzgPOFJ-.js → links-BQHNKE3J.js} +0 -0
- /package/dist/assets/{links-CptYD1FP.js → links-Bfp-iNRX.js} +0 -0
- /package/dist/assets/{livescript-B01pNEzu.js → livescript-CfGHFsX-.js} +0 -0
- /package/dist/assets/{loro_wasm_bg-CcIcmNa3.js → loro_wasm_bg-Bj93RhA2.js} +0 -0
- /package/dist/assets/{lua-BwfRgSM6.js → lua-DwgMJ83W.js} +0 -0
- /package/dist/assets/{marimo-icons-C_YDiXeg.js → marimo-icons-Cb4NA8Cp.js} +0 -0
- /package/dist/assets/{math-CeGhAAgQ.js → math-CpvW-dlE.js} +0 -0
- /package/dist/assets/{mathematica-DLi5eijp.js → mathematica-CUcY8E3Z.js} +0 -0
- /package/dist/assets/{mbox-QweTYWJQ.js → mbox-QWIxg89f.js} +0 -0
- /package/dist/assets/{mirc-1J5TZ8Tf.js → mirc-PcCLOR2R.js} +0 -0
- /package/dist/assets/{mllike-DRzCrpbj.js → mllike-JiC27gOy.js} +0 -0
- /package/dist/assets/{modelica-GZKavTLw.js → modelica-BcfhGWp8.js} +0 -0
- /package/dist/assets/{mscgen-HMNaCHuy.js → mscgen-C2sdz_zX.js} +0 -0
- /package/dist/assets/{multi-icon-DEWnuZs2.js → multi-icon-BIYBHgCy.js} +0 -0
- /package/dist/assets/{multi-map-C8RbwBrw.js → multi-map-0vmox9BD.js} +0 -0
- /package/dist/assets/{mumps-CzCxfP2m.js → mumps-DTtlu7TY.js} +0 -0
- /package/dist/assets/{nginx-Dfd7l9Sj.js → nginx-CNcs7tVC.js} +0 -0
- /package/dist/assets/{node-sql-parser-BvUFblwL.js → node-sql-parser-fWuidk6P.js} +0 -0
- /package/dist/assets/{ntriples-DT57g_ZF.js → ntriples-CHcftTy8.js} +0 -0
- /package/dist/assets/{numbers-Cno6K0UF.js → numbers-Bv8m4sHE.js} +0 -0
- /package/dist/assets/{objectWithoutPropertiesLoose-Dxmp_Bd_.js → objectWithoutPropertiesLoose-CboCOq4o.js} +0 -0
- /package/dist/assets/{octave-CtuTaUjQ.js → octave-D7F4qXl_.js} +0 -0
- /package/dist/assets/{oz-BS8LEqKx.js → oz-VftS117C.js} +0 -0
- /package/dist/assets/{panel-context-BN0DQXiK.js → panel-context-CcwYw5Eq.js} +0 -0
- /package/dist/assets/{pascal-Db0ZEHQw.js → pascal-CxVKwA9u.js} +0 -0
- /package/dist/assets/{path-CkIaQHJO.js → path-DtYs9Dst.js} +0 -0
- /package/dist/assets/{perl-DgJKzgyz.js → perl-x4BFnPib.js} +0 -0
- /package/dist/assets/{pig-Dk6eYa40.js → pig-Dmhj3J78.js} +0 -0
- /package/dist/assets/{popover-Bvoif-Mg.js → popover-BzqPa2Au.js} +0 -0
- /package/dist/assets/{powershell-dW0qpS7j.js → powershell-Bg32vFxB.js} +0 -0
- /package/dist/assets/{prop-types-DRf51_gT.js → prop-types-C638SUfx.js} +0 -0
- /package/dist/assets/{properties-oMha4ix2.js → properties-DQbiKM_q.js} +0 -0
- /package/dist/assets/{protobuf-CfWJ4EtB.js → protobuf-Sa3BXDQ1.js} +0 -0
- /package/dist/assets/{puppet-O2K_n-UM.js → puppet-CnXWm8bo.js} +0 -0
- /package/dist/assets/{python-qMKsSr4L.js → python-B1WBAJzp.js} +0 -0
- /package/dist/assets/{q-ewn8d81Q.js → q-BqOVUYF0.js} +0 -0
- /package/dist/assets/{r-CqF-AjDv.js → r-BNvjQBjW.js} +0 -0
- /package/dist/assets/{range-ClqUI25v.js → range-Dk7lXDev.js} +0 -0
- /package/dist/assets/{react-resizable-panels.browser.esm-DDRqG5ui.js → react-resizable-panels.browser.esm-RgA6v8U3.js} +0 -0
- /package/dist/assets/{request-registry-XB2EzJHm.js → request-registry-BPNvKw5y.js} +0 -0
- /package/dist/assets/{requests-CP6q3-4O.js → requests-xhM8i_W9.js} +0 -0
- /package/dist/assets/{rpm-BqLq138P.js → rpm-Cdb8SyEx.js} +0 -0
- /package/dist/assets/{ruby-CQfbO3YY.js → ruby-Csu3wroo.js} +0 -0
- /package/dist/assets/{sas-BmpgVn6Q.js → sas-NClU0xuj.js} +0 -0
- /package/dist/assets/{scheme-rgyDg_wq.js → scheme-Hpx9xPN-.js} +0 -0
- /package/dist/assets/{share-NjpZ54PJ.js → share-T-ETw2Yt.js} +0 -0
- /package/dist/assets/{shell-Dndk6Ld6.js → shell-Cd99saJE.js} +0 -0
- /package/dist/assets/{sieve-bGgktpLX.js → sieve-D0zJ8TZ9.js} +0 -0
- /package/dist/assets/{simple-mode-oMMOWqWz.js → simple-mode-DpDBSVll.js} +0 -0
- /package/dist/assets/{smalltalk-CU43LrKS.js → smalltalk-BBBJczpn.js} +0 -0
- /package/dist/assets/{solr-CJeCgAfj.js → solr-B928KjNx.js} +0 -0
- /package/dist/assets/{sparql-BycKC3X4.js → sparql-uAF7_Z2_.js} +0 -0
- /package/dist/assets/{spreadsheet-BYYvgLKe.js → spreadsheet-CAG48M_e.js} +0 -0
- /package/dist/assets/{sql-B5I6FC3m.js → sql-nk70rjN1.js} +0 -0
- /package/dist/assets/{src-CW27-Kjl.js → src-BRLtyMKi.js} +0 -0
- /package/dist/assets/{stylus-CePwhvgW.js → stylus-fMZU8VtG.js} +0 -0
- /package/dist/assets/{swift-CfgglXjR.js → swift-CkY7kBhf.js} +0 -0
- /package/dist/assets/{table-BhH-Mm8O.js → table-CA8eU1EB.js} +0 -0
- /package/dist/assets/{tcl-D_gYSBm0.js → tcl-CS15Nqmn.js} +0 -0
- /package/dist/assets/{textile-BEvFU9wV.js → textile-BQsumqly.js} +0 -0
- /package/dist/assets/{tiddlywiki-hmNzZkq6.js → tiddlywiki-BiHxc-2_.js} +0 -0
- /package/dist/assets/{tiki-BL1SzuSx.js → tiki-Cwip62d7.js} +0 -0
- /package/dist/assets/{timer-CPT_vXom.js → timer-BEJidwwG.js} +0 -0
- /package/dist/assets/{toggle-C_gNjXg8.js → toggle-DjUKacjU.js} +0 -0
- /package/dist/assets/{toml-DGJRpV2e.js → toml-CoHiT08x.js} +0 -0
- /package/dist/assets/{treemap-Cf5pgJDk.js → treemap-qinQgXo1.js} +0 -0
- /package/dist/assets/{troff-CUlohIux.js → troff-CpFvF7Eq.js} +0 -0
- /package/dist/assets/{ttcn-nuQ3wCdy.js → ttcn-BjnqPnO0.js} +0 -0
- /package/dist/assets/{ttcn-cfg-DCxdE-sj.js → ttcn-cfg-D29EWwwv.js} +0 -0
- /package/dist/assets/{turtle-B2N96QpC.js → turtle-mWsfmaJW.js} +0 -0
- /package/dist/assets/{types-BfP_kuAY.js → types-Myu7G9iV.js} +0 -0
- /package/dist/assets/{useAsyncData-D-4ifFXh.js → useAsyncData-D-z1U8-c.js} +0 -0
- /package/dist/assets/{useDebounce-DwTO_rGp.js → useDebounce-Ccai5RO4.js} +0 -0
- /package/dist/assets/{useDeepCompareMemoize-yyiB9aJX.js → useDeepCompareMemoize-D1hTncYV.js} +0 -0
- /package/dist/assets/{useIframeCapabilities-DTN9kFDq.js → useIframeCapabilities-CouCDnwL.js} +0 -0
- /package/dist/assets/{useInterval-BJucVdV-.js → useInterval-BckTGVbf.js} +0 -0
- /package/dist/assets/{vb-CBiIL_zx.js → vb-E2EKvwgc.js} +0 -0
- /package/dist/assets/{vbscript-B3Y69Iw0.js → vbscript-98sn9Pr4.js} +0 -0
- /package/dist/assets/{velocity-B5BPA7FX.js → velocity-DUbAzJtM.js} +0 -0
- /package/dist/assets/{verilog-BwmYR8E3.js → verilog-DK7zLFMr.js} +0 -0
- /package/dist/assets/{vhdl-VXFnDy2U.js → vhdl-B9Tq3stB.js} +0 -0
- /package/dist/assets/{web-vitals-BaMazlva.js → web-vitals-CJ8ovao_.js} +0 -0
- /package/dist/assets/{webidl-Bcmf9JWd.js → webidl-C5qiIEir.js} +0 -0
- /package/dist/assets/{ws-CBdPISJL.js → ws-D2eS61zr.js} +0 -0
- /package/dist/assets/{xquery-8pWKOyFY.js → xquery-CmGczatZ.js} +0 -0
- /package/dist/assets/{yacas-BFcwo3Cx.js → yacas-BbepBpsT.js} +0 -0
- /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;
|
package/src/core/islands/main.ts
CHANGED
|
@@ -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",
|