@marimo-team/frontend 0.21.1-dev94 → 0.21.1
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-D0IfrfUM.js → CellStatus-CDSBsjjF.js} +1 -1
- package/dist/assets/{Combination-CBJmtdux.js → Combination-Cs9nbinQ.js} +1 -1
- package/dist/assets/ConnectedDataExplorerComponent-Buaffg3u.js +1 -0
- package/dist/assets/{ErrorBoundary-H5EQrcAX.js → ErrorBoundary-Ba0LbbH4.js} +1 -1
- package/dist/assets/{ImperativeModal-b5nJtLod.js → ImperativeModal-qEtcJ95s.js} +1 -1
- package/dist/assets/{JsonOutput-DjokO226.js → JsonOutput-DKXKGKvX.js} +11 -11
- package/dist/assets/LazyAnyLanguageCodeMirror-m8w66E4s.js +2 -0
- package/dist/assets/{MarimoErrorOutput-CimwFZPP.js → MarimoErrorOutput-az74f3Mp.js} +5 -5
- package/dist/assets/RenderHTML-DJ8khuob.js +1 -0
- package/dist/assets/{add-cell-with-ai-Bl1TJ3Bp.js → add-cell-with-ai-DUn4LN4W.js} +17 -17
- package/dist/assets/{add-connection-dialog-CIHDuGfD.js → add-connection-dialog-CBz0AUVX.js} +23 -23
- package/dist/assets/{agent-panel-DFVcMxMV.js → agent-panel-u83dsDsM.js} +3 -3
- package/dist/assets/{ai-model-dropdown-DxpOlTBW.js → ai-model-dropdown-DPTa_EpU.js} +4 -4
- package/dist/assets/{alert-dialog-DbQ_TZC7.js → alert-dialog-9WfvUF7e.js} +1 -1
- package/dist/assets/{any-language-editor-TJ9GwX4u.js → any-language-editor-DwQMnAM3.js} +1 -1
- package/dist/assets/apl-CWQZjEHB.js +1 -0
- package/dist/assets/{app-config-button-zy3OAtTs.js → app-config-button-rDu-lCIB.js} +1 -1
- package/dist/assets/{arc-CTRjCaaq.js → arc-BrTIAGt4.js} +1 -1
- package/dist/assets/{architecture-7HQA4BMR-Czl_30LW.js → architecture-7HQA4BMR-BewjmwdA.js} +1 -1
- package/dist/assets/{architectureDiagram-VXUJARFQ-COwARW7a.js → architectureDiagram-VXUJARFQ-DfMHHFZ3.js} +1 -1
- package/dist/assets/asciiarmor-YkqeOS7J.js +1 -0
- package/dist/assets/asn1-CXKIzj3m.js +1 -0
- package/dist/assets/{assertNever-CTRGz-ul.js → assertNever-DWSyoPEi.js} +1 -1
- package/dist/assets/{azure-Dy9N467C.js → azure-BTXHztTw.js} +1 -1
- package/dist/assets/{blockDiagram-VD42YOAC-bqSy8CKA.js → blockDiagram-VD42YOAC-CuEDwbg7.js} +1 -1
- package/dist/assets/brainfuck-BATyDEza.js +1 -0
- package/dist/assets/{button-BZAv3veu.js → button-Ej3vmCIF.js} +1 -1
- package/dist/assets/{c4Diagram-YG6GDRKO-B4dmQbDY.js → c4Diagram-YG6GDRKO-CD9uz7WG.js} +1 -1
- package/dist/assets/{cache-panel-BfUwEjmW.js → cache-panel-qIxnndwr.js} +1 -1
- package/dist/assets/{capabilities-B1-dYWS8.js → capabilities-D3x_db9Y.js} +1 -1
- package/dist/assets/{capitalize-DcpkQwJe.js → capitalize-BfkXNxmI.js} +1 -1
- package/dist/assets/{cell-editor-CSaoLcvI.js → cell-editor-DX7IcqNr.js} +14 -14
- package/dist/assets/{cell-link-CL9widoN.js → cell-link-Q_UEP94Z.js} +1 -1
- package/dist/assets/{cells-wT6clfi5.js → cells-fq1RMGX_.js} +67 -67
- package/dist/assets/channel-CkT8Qdo2.js +1 -0
- package/dist/assets/{chat-display-CWCYGDhk.js → chat-display-D_Fuuy6r.js} +1 -1
- package/dist/assets/{chat-panel-CYOmGmIc.js → chat-panel-BO-JoQSp.js} +2 -2
- package/dist/assets/{chunk-4BX2VUAB-DxZzAYWS.js → chunk-4BX2VUAB-DOQhLGwX.js} +1 -1
- package/dist/assets/chunk-55IACEB6-D0TKhzEY.js +1 -0
- package/dist/assets/{chunk-5FQGJX7Z-DEi7JZeU.js → chunk-5FQGJX7Z-CM1a_K7I.js} +2 -2
- package/dist/assets/{chunk-ABZYJK2D-DkAtI3pw.js → chunk-ABZYJK2D-D_Wumzom.js} +3 -3
- package/dist/assets/{chunk-ATLVNIR6-ChgKNkyQ.js → chunk-ATLVNIR6-BZ0lTgIn.js} +1 -1
- package/dist/assets/{chunk-B4BG7PRW-BYnYQ8Z8.js → chunk-B4BG7PRW-Dw1S6osV.js} +1 -1
- package/dist/assets/{chunk-CVBHYZKI-C-NWvPQL.js → chunk-CVBHYZKI-BmNXddyI.js} +1 -1
- package/dist/assets/{chunk-DI55MBZ5-DGkjCcnO.js → chunk-DI55MBZ5-Q63FTCPP.js} +1 -1
- package/dist/assets/{chunk-EXTU4WIE-wdzdLMEk.js → chunk-EXTU4WIE-CfkJ_R7W.js} +1 -1
- package/dist/assets/{chunk-FMBD7UC4-DuWsgzwj.js → chunk-FMBD7UC4-BF_CXOnN.js} +1 -1
- package/dist/assets/{chunk-HN2XXSSU-Bcaj5fRB.js → chunk-HN2XXSSU-BstCPYtG.js} +1 -1
- package/dist/assets/{chunk-JA3XYJ7Z-BWPXVwYA.js → chunk-JA3XYJ7Z-B41fGeoj.js} +1 -1
- package/dist/assets/{chunk-JZLCHNYA-CPBgHJG6.js → chunk-JZLCHNYA-D43EJxQw.js} +1 -1
- package/dist/assets/{chunk-MI3HLSF2-DqzZqBCh.js → chunk-MI3HLSF2-BceZdyTR.js} +1 -1
- package/dist/assets/{chunk-N4CR4FBY-forux6m9.js → chunk-N4CR4FBY-DCtw0-ni.js} +2 -2
- package/dist/assets/{chunk-QN33PNHL-CoAvIXQ4.js → chunk-QN33PNHL-CLA2rsaS.js} +1 -1
- package/dist/assets/{chunk-QXUST7PY-CjJQCNsV.js → chunk-QXUST7PY-De1DpbnL.js} +1 -1
- package/dist/assets/{chunk-QZHKN3VN-C5G6HcUv.js → chunk-QZHKN3VN-D3EIvP2i.js} +1 -1
- package/dist/assets/{chunk-S3R3BYOJ-Fevl0fI0.js → chunk-S3R3BYOJ-qrwvlUdq.js} +1 -1
- package/dist/assets/{chunk-TZMSLE5B-D1hA5isA.js → chunk-TZMSLE5B-C4KcThb0.js} +1 -1
- package/dist/assets/classDiagram-2ON5EDUG-BhMT_rTz.js +1 -0
- package/dist/assets/classDiagram-v2-WZHVMYZB-D-F4WEyb.js +1 -0
- package/dist/assets/{clike-DranGnQS.js → clike-C3ewt06X.js} +1 -1
- package/dist/assets/clojure-DSdxtK57.js +1 -0
- package/dist/assets/cmake-b6COJhkL.js +1 -0
- package/dist/assets/cobol-0au-d4Af.js +1 -0
- package/dist/assets/{code-block-37QAKDTI-qwBFemzY.js → code-block-37QAKDTI-D4FF4cnN.js} +1 -1
- package/dist/assets/coffeescript-CO6miDRN.js +1 -0
- package/dist/assets/{column-preview-UqRUB1pJ.js → column-preview-WsubyItX.js} +1 -1
- package/dist/assets/command-palette-Bez4BqJF.js +1 -0
- package/dist/assets/{command-DGKK2-4P.js → command-rfxSsiHU.js} +1 -1
- package/dist/assets/{common-D7Sae5Jl.js → common-BYwO983A.js} +1 -1
- package/dist/assets/commonlisp-ViswrHum.js +1 -0
- package/dist/assets/{components-U5Mj1xiO.js → components-Bpgzv_5_.js} +1 -1
- package/dist/assets/{components-CNlTaOLK.js → components-Ozq0825a.js} +1 -1
- package/dist/assets/{config-DeEqZTX7.js → config-3Aq84phF.js} +1 -1
- package/dist/assets/{context-CRmPPhx9.js → context-CIAP2NOh.js} +1 -1
- package/dist/assets/context-aware-panel-CfsfBlhO.js +3 -0
- package/dist/assets/{copy-BvFGCBvy.js → copy-YwM0Pd7v.js} +1 -1
- package/dist/assets/{copy-icon-HTFh4odu.js → copy-icon-BgmMM9Zg.js} +1 -1
- package/dist/assets/{cose-bilkent-S5V4N54A-CcpcHY0J.js → cose-bilkent-S5V4N54A-Bd5HJPaN.js} +1 -1
- package/dist/assets/{createReducer-DgaMD0B6.js → createReducer-Drh7NmIR.js} +1 -1
- package/dist/assets/crystal-BcOI1XlU.js +1 -0
- package/dist/assets/{css-NN_Gn5Zq.js → css-CCWfM5vT.js} +1 -1
- package/dist/assets/cypher-BKbuDk70.js +1 -0
- package/dist/assets/d-4fbeW9Dj.js +1 -0
- package/dist/assets/{dagre-6UL2VRFP-xpkP9laI.js → dagre-6UL2VRFP-BhMnPhuU.js} +1 -1
- package/dist/assets/{data-grid-overlay-editor-CwkmYIQf.js → data-grid-overlay-editor-kbv73SQ7.js} +1 -1
- package/dist/assets/{datasource-DIETDMi4.js → datasource-F9sJtuof.js} +2 -2
- package/dist/assets/{dates-BcvJrESI.js → dates-CHaNfieI.js} +1 -1
- package/dist/assets/{dependency-graph-panel-Cg4IqU-y.js → dependency-graph-panel-AOBcX2tP.js} +4 -4
- package/dist/assets/{diagram-PSM6KHXK-DkNkLK59.js → diagram-PSM6KHXK-Cr2t4zul.js} +1 -1
- package/dist/assets/{diagram-QEK2KX5R-pGiS0fXO.js → diagram-QEK2KX5R-DLU_hSO4.js} +1 -1
- package/dist/assets/{diagram-S2PKOQOG-ChyqkT53.js → diagram-S2PKOQOG-C7EkNAO3.js} +1 -1
- package/dist/assets/{dialog-DCGn-_Ip.js → dialog-CVN1lcMF.js} +1 -1
- package/dist/assets/diff-CV59_hp-.js +1 -0
- package/dist/assets/{dist-gMRZ7Vz0.js → dist-BTqMkf4j.js} +1 -1
- package/dist/assets/dist-BZeePkbd.js +1 -0
- package/dist/assets/{dist-CWEZ0LAs.js → dist-BhNN2V5a.js} +1 -1
- package/dist/assets/{dist-CnFjzKc0.js → dist-Br306776.js} +1 -1
- package/dist/assets/dist-Br4KMeY4.js +1 -0
- package/dist/assets/{dist-BuvaPNu6.js → dist-CblX3KGI.js} +1 -1
- package/dist/assets/dist-Cp60fE5Z.js +1 -0
- package/dist/assets/{dist-D9ffpjJP.js → dist-CsRbK9-Y.js} +1 -1
- package/dist/assets/{dist-DbaY2Em0.js → dist-DHw9sXeN.js} +1 -1
- package/dist/assets/{dist-D98wU_Qc.js → dist-DJBpXGro.js} +1 -1
- package/dist/assets/dist-DVbTmqCA.js +1 -0
- package/dist/assets/{dist-DQShu5gW.js → dist-Du0qZeXz.js} +1 -1
- package/dist/assets/{dist-jfGyouTb.js → dist-Tk70DR_I.js} +1 -1
- package/dist/assets/{dist-7pyxhBKl.js → dist-a0FfbvMD.js} +1 -1
- package/dist/assets/{dist-wJ27rvH6.js → dist-cfkfP0ni.js} +1 -1
- package/dist/assets/{dist-CcUQ6O5c.js → dist-e6Ho4upI.js} +1 -1
- package/dist/assets/{dist-B6ieTXLS.js → dist-pzQ9JG-p.js} +1 -1
- package/dist/assets/{dockerfile-D57iX-cx.js → dockerfile-ClV2Mqz8.js} +1 -1
- package/dist/assets/documentation-panel-D28MpqbI.js +1 -0
- package/dist/assets/{download-RVcmZh1N.js → download-B9_ToVd4.js} +4 -4
- package/dist/assets/{dropdown-menu-CJ-Wwa2I.js → dropdown-menu-DdPu5Kfu.js} +1 -1
- package/dist/assets/dtd-BAjS2EMD.js +1 -0
- package/dist/assets/dylan-CjAEbzAl.js +1 -0
- package/dist/assets/ecl-DegMF2Uo.js +1 -0
- package/dist/assets/{edit-page-CTVRcSta.js → edit-page-otS-QvnC.js} +7 -7
- package/dist/assets/eiffel-D_UXtJqE.js +1 -0
- package/dist/assets/elm-CV-6VdWh.js +1 -0
- package/dist/assets/{erDiagram-Q2GNP2WA-BXEF-1Zr.js → erDiagram-Q2GNP2WA-DqlEo_Us.js} +1 -1
- package/dist/assets/erlang-C3Vp1oq_.js +1 -0
- package/dist/assets/{error-banner-CAuK5DPN.js → error-banner-BRG6IPhC.js} +1 -1
- package/dist/assets/{error-panel-xO_Uo7Vu.js → error-panel-RRoj_iOR.js} +1 -1
- package/dist/assets/{es-2S6JXj4o.js → es-CzkousWe.js} +1 -1
- package/dist/assets/{esm-BjfXuxxx.js → esm-CBkHtTOV.js} +1 -1
- package/dist/assets/{esm-YHLEEu76.js → esm-DhTsVMLM.js} +1 -1
- package/dist/assets/factor-CBMQHXUW.js +1 -0
- package/dist/assets/{factor-CgxtRDfw.js → factor-CrpY0izf.js} +1 -1
- package/dist/assets/{field-9GctqEPJ.js → field-B1jGbQlH.js} +1 -1
- package/dist/assets/{file-explorer-panel-DclnBp04.js → file-explorer-panel-CB8vF5ob.js} +3 -3
- package/dist/assets/{file-icons-Br3viuqL.js → file-icons-CWLHDa1J.js} +1 -1
- package/dist/assets/floating-outline-BvQKiC0F.js +1 -0
- package/dist/assets/{flowDiagram-NV44I4VS-D2XAWm9D.js → flowDiagram-NV44I4VS-CQlIJ12H.js} +1 -1
- package/dist/assets/{focus-q8oYkLV6.js → focus-DYwTiH9-.js} +1 -1
- package/dist/assets/form-CrQYrsUC.js +2 -0
- package/dist/assets/formats-rhOJovGE.js +1 -0
- package/dist/assets/{formatting-CgyD0Rtn.js → formatting-B4ZCH3ol.js} +1 -1
- package/dist/assets/forth-C_TcrpRK.js +1 -0
- package/dist/assets/fortran-DOs2FQj2.js +1 -0
- package/dist/assets/{gallery-page-D6YeHwse.js → gallery-page-eRea0yic.js} +1 -1
- package/dist/assets/{ganttDiagram-JELNMOA3-xRC3owmu.js → ganttDiagram-JELNMOA3-B3EGIuZL.js} +1 -1
- package/dist/assets/gas-Cg-F3pmb.js +1 -0
- package/dist/assets/gherkin-CaXqq9kA.js +1 -0
- package/dist/assets/{gitGraph-G5XIXVHT-ChWZlkZO.js → gitGraph-G5XIXVHT-iDzw7G2X.js} +1 -1
- package/dist/assets/{gitGraphDiagram-V2S2FVAM-DVYTZhFd.js → gitGraphDiagram-V2S2FVAM-h5SlguJK.js} +1 -1
- package/dist/assets/{glide-data-editor-caCB-p9t.js → glide-data-editor-xt5xNZeV.js} +4 -4
- package/dist/assets/{globals-Bh7qAnqa.js → globals-BsV5fVR-.js} +1 -1
- package/dist/assets/groovy-DmxumoMi.js +1 -0
- package/dist/assets/haskell-BZ-cKqgz.js +1 -0
- package/dist/assets/haxe-x-4elm0t.js +1 -0
- package/dist/assets/{home-page-Cz5JcEtF.js → home-page-itW0tRmv.js} +2 -2
- package/dist/assets/{hooks-BOa-vQTI.js → hooks-CHx5dUUq.js} +1 -1
- package/dist/assets/{html-to-image-DBFAQbWm.js → html-to-image-BnSc-Wa0.js} +1 -1
- package/dist/assets/idl-DNkkzHKH.js +1 -0
- package/dist/assets/{index-CV-Vv3LK.js → index-0n92c_W7.js} +17 -17
- package/dist/assets/{index-CVpJvEAO.css → index-GjXovVsl.css} +1 -1
- package/dist/assets/{info-VBDWY6EO-cojUXphJ.js → info-VBDWY6EO-CPHm9IfG.js} +1 -1
- package/dist/assets/infoDiagram-HS3SLOUP-pzpClObZ.js +2 -0
- package/dist/assets/{input-C5eatTLl.js → input-CUwqpKjd.js} +1 -1
- package/dist/assets/javascript-B0uQ9oZ_.js +1 -0
- package/dist/assets/{journeyDiagram-XKPGCS4Q-DM3Og3fQ.js → journeyDiagram-XKPGCS4Q-BrdRi92v.js} +1 -1
- package/dist/assets/julia-DBflXO9b.js +1 -0
- package/dist/assets/{kanban-definition-3W4ZIXB7-Bysrkfnt.js → kanban-definition-3W4ZIXB7-B6WqgFqh.js} +1 -1
- package/dist/assets/katex-YDobqqVd.js +1 -0
- package/dist/assets/kiosk-mode-DNjEnIWb.js +1 -0
- package/dist/assets/{label-BuJDtc39.js → label-TNNaT1M9.js} +1 -1
- package/dist/assets/{layout-BOEBdVW9.js → layout-CwFtCyW8.js} +4 -4
- package/dist/assets/{line-BtYBewh-.js → line-BBSd2MUH.js} +1 -1
- package/dist/assets/{linear-FMI0WOL9.js → linear-BP9rwmWK.js} +1 -1
- package/dist/assets/{links-XdsYEk97.js → links-CIQwYQ48.js} +1 -1
- package/dist/assets/livescript-DRwwdQDY.js +1 -0
- package/dist/assets/logs-panel-BU1tNEVc.js +1 -0
- package/dist/assets/{loro_wasm_bg-Bs7jcPJg.js → loro_wasm_bg-MY7PmKYj.js} +1 -1
- package/dist/assets/lua-D_CRYz1e.js +1 -0
- package/dist/assets/{maps-CqKCrVZ8.js → maps-OKerBHH8.js} +1 -1
- package/dist/assets/{markdown-renderer-DwRjZSV8.js → markdown-renderer-MR9df58W.js} +5 -5
- package/dist/assets/mathematica-D28k0VAB.js +1 -0
- package/dist/assets/mbox-B74-q1nN.js +1 -0
- package/dist/assets/{menu-items-Z4F08mfP.js → menu-items-UxKrm8hS.js} +1 -1
- package/dist/assets/mermaid-4DMBBIKO-PoHnhmy8.js +1 -0
- package/dist/assets/{mermaid-ZYKil-Dz.js → mermaid-Djr3jUAB.js} +3 -3
- package/dist/assets/{mermaid-parser.core-C4Qn8zpN.js → mermaid-parser.core-DR82IMb2.js} +2 -2
- package/dist/assets/{mhchem-fkHDi4mW.js → mhchem-B98RQJ-y.js} +1 -1
- package/dist/assets/{mindmap-definition-VGOIOE7T-CIpQPwFO.js → mindmap-definition-VGOIOE7T-DAmJpbPM.js} +1 -1
- package/dist/assets/mirc-CW8yiVay.js +1 -0
- package/dist/assets/mllike-BwZpH7CZ.js +1 -0
- package/dist/assets/mode-AcL8c6qH.js +1 -0
- package/dist/assets/modelica-AhRO-ii8.js +1 -0
- package/dist/assets/mscgen-CJZUmlSk.js +1 -0
- package/dist/assets/{multi-map-x_GQgXMS.js → multi-map-Pp1P2DOX.js} +1 -1
- package/dist/assets/mumps-BTPWDvZ1.js +1 -0
- package/dist/assets/{name-cell-input-BhRgpz9L.js → name-cell-input-DVFEv_aO.js} +1 -1
- package/dist/assets/{nsis-nZ2JXCy5.js → nsis-BeaU1Q2K.js} +1 -1
- package/dist/assets/nsis-CuVPiHG5.js +1 -0
- package/dist/assets/ntriples-eNmSbiOL.js +1 -0
- package/dist/assets/{number-overlay-editor-B_1f1JIm.js → number-overlay-editor-D__AflXQ.js} +1 -1
- package/dist/assets/{numbers-BWhcwX6S.js → numbers-CYnquDho.js} +1 -1
- package/dist/assets/octave-BboqqX2Z.js +1 -0
- package/dist/assets/{ordinal-CzDPQmXB.js → ordinal-BjO5SoTk.js} +1 -1
- package/dist/assets/{outline-panel-BXMNkx0G.js → outline-panel-CP0oIuiU.js} +1 -1
- package/dist/assets/oz-eUT9rD_n.js +1 -0
- package/dist/assets/{packages-panel-CPHdKpTu.js → packages-panel-CzRELimG.js} +1 -1
- package/dist/assets/{packet-DYOGHKS2-bayfAAZm.js → packet-DYOGHKS2-0KdzLf9c.js} +1 -1
- package/dist/assets/panels-wTweRyIv.js +1 -0
- package/dist/assets/pascal-Bl9h-Ruv.js +1 -0
- package/dist/assets/perl-B1GdYx3j.js +1 -0
- package/dist/assets/{pie-VRWISCQL-Dh6PVhT_.js → pie-VRWISCQL-C6EIS9iq.js} +1 -1
- package/dist/assets/{pieDiagram-ADFJNKIX-DBOuifje.js → pieDiagram-ADFJNKIX-DbGIFRoq.js} +1 -1
- package/dist/assets/pig-CoZHWNtw.js +1 -0
- package/dist/assets/{popover-JNsSzROl.js → popover-BPGG2gPG.js} +1 -1
- package/dist/assets/powershell-B2p71KcT.js +1 -0
- package/dist/assets/{precisionRound-CCOoIlcP.js → precisionRound-BOmLQIKI.js} +1 -1
- package/dist/assets/process-output-CTVsT--B.js +1 -0
- package/dist/assets/properties-Cs9aaJGK.js +1 -0
- package/dist/assets/protobuf-DFCnQG_o.js +1 -0
- package/dist/assets/pug-BShaWOtD.js +1 -0
- package/dist/assets/{pug-D86EG76d.js → pug-v81J9ytZ.js} +1 -1
- package/dist/assets/puppet-4yIFv98Z.js +1 -0
- package/dist/assets/python-ByMRQ0aE.js +1 -0
- package/dist/assets/q-C7EgGttK.js +1 -0
- package/dist/assets/{quadrantDiagram-AYHSOK5B-DBXBUJRq.js → quadrantDiagram-AYHSOK5B-CLAtyple.js} +1 -1
- package/dist/assets/r-DpLLx5HE.js +1 -0
- package/dist/assets/{radar-ZZBFDIW7-BhZnV5PY.js → radar-ZZBFDIW7-IOV25h32.js} +1 -1
- package/dist/assets/{react-vega-BFWsPELq.js → react-vega-BZav_-2n.js} +1 -1
- package/dist/assets/react-vega-Da-Ps9UW.js +1 -0
- package/dist/assets/{readonly-python-code-Cyn1aSna.js → readonly-python-code-DH-1xZGq.js} +1 -1
- package/dist/assets/{renderShortcut-C3rk7kIN.js → renderShortcut-CnD1Dah5.js} +1 -1
- package/dist/assets/{requirementDiagram-UZGBJVZJ-AqfWr84z.js → requirementDiagram-UZGBJVZJ-DDDTB1LD.js} +1 -1
- package/dist/assets/rpm-DlCq0FVA.js +1 -0
- package/dist/assets/ruby-BGmSEBWH.js +1 -0
- package/dist/assets/run-page-FCvGnICa.js +1 -0
- package/dist/assets/{runs-COLNzLMC.js → runs-Bhy0tbWr.js} +1 -1
- package/dist/assets/{sankeyDiagram-TZEHDZUN-CzhgfkfD.js → sankeyDiagram-TZEHDZUN-DAWPOfBw.js} +1 -1
- package/dist/assets/sas-CFcv5xFe.js +1 -0
- package/dist/assets/scheme-BgRfkNY3.js +1 -0
- package/dist/assets/scratchpad-panel-k9lrm-rC.js +1 -0
- package/dist/assets/{secrets-panel-Bd4T4aNP.js → secrets-panel-B1Z-6dmz.js} +1 -1
- package/dist/assets/{select-Ch6m1k2G.js → select-CxT2Geqr.js} +1 -1
- package/dist/assets/{sequenceDiagram-WL72ISMW-CVS2bn-h.js → sequenceDiagram-WL72ISMW-D_qAidD2.js} +1 -1
- package/dist/assets/{session-CXChHxAw.js → session-BrEm7qNv.js} +1 -1
- package/dist/assets/session-panel-WhN0qilM.js +1 -0
- package/dist/assets/{share-DdWa0mV7.js → share-BdH_5I58.js} +1 -1
- package/dist/assets/shell-CKQz0rkv.js +1 -0
- package/dist/assets/sieve-D0P6XnTD.js +1 -0
- package/dist/assets/{slides-component-_XF5PFrZ.js → slides-component-Brm_TS4x.js} +1 -1
- package/dist/assets/smalltalk-Dcg9QwVr.js +1 -0
- package/dist/assets/snippets-panel-BCDHUuku.js +1 -0
- package/dist/assets/sparql-f01xs6VH.js +1 -0
- package/dist/assets/{spec-CYMZZDXr.js → spec-DbmSqx09.js} +1 -1
- package/dist/assets/{src-BkE2Cvg2.js → src-Bp_72rVO.js} +1 -1
- package/dist/assets/{state-BN6sGgkm.js → state-3V5UxC3B.js} +1 -1
- package/dist/assets/{state-CQzPalvd.js → state-CBmCYWFH.js} +1 -1
- package/dist/assets/{state-C7dZc7Rj.js → state-Ce7CVShi.js} +1 -1
- package/dist/assets/{stateDiagram-FKZM4ZOC-BsAKYqr2.js → stateDiagram-FKZM4ZOC-C7qgDrGA.js} +1 -1
- package/dist/assets/stateDiagram-v2-4FDKWEC3-CEqeIlM0.js +1 -0
- package/dist/assets/{step-vPM7ouyU.js → step-BkfKj3CL.js} +1 -1
- package/dist/assets/stylus-BjzHGGgo.js +1 -0
- package/dist/assets/swift-DOptU29u.js +1 -0
- package/dist/assets/{switch-BHXOZNHf.js → switch-CVKxYu_0.js} +1 -1
- package/dist/assets/tcl-vC8etUeQ.js +1 -0
- package/dist/assets/{terminal-D7RRO5NO.js → terminal-Cr7wbEjz.js} +1 -1
- package/dist/assets/textile-BfLqcKXP.js +1 -0
- package/dist/assets/{time-B-T70weq.js → time-D2GKc0U6.js} +1 -1
- package/dist/assets/{timeline-definition-IT6M3QCI-Dq8uw9c5.js → timeline-definition-IT6M3QCI-hd6uJKGs.js} +1 -1
- package/dist/assets/{toggle-AwCCScbH.js → toggle-RCwU-rnE.js} +1 -1
- package/dist/assets/toml-rX0_Isgp.js +1 -0
- package/dist/assets/{tooltip-CNmaER6z.js → tooltip-D9723Brr.js} +1 -1
- package/dist/assets/{tracing-D_eBhjGe.js → tracing-DUVd0jtl.js} +1 -1
- package/dist/assets/{tracing-panel-adLR9Xcg.js → tracing-panel-CuTxPn_x.js} +2 -2
- package/dist/assets/{tree-IqZcruNX.js → tree-Ch2-GuhG.js} +1 -1
- package/dist/assets/{treemap-GDKQZRPO-4PEl6J44.js → treemap-GDKQZRPO-BUa0eLeZ.js} +1 -1
- package/dist/assets/troff-C1lPb0WN.js +1 -0
- package/dist/assets/ttcn-D5dxusfs.js +1 -0
- package/dist/assets/ttcn-cfg-Dj2ybct-.js +1 -0
- package/dist/assets/turtle-BiTItqZm.js +1 -0
- package/dist/assets/useAddCell-YC7rpcmD.js +1 -0
- package/dist/assets/{useBoolean-COWWzCBr.js → useBoolean-m1e6E3Ao.js} +1 -1
- package/dist/assets/useCellActionButton-GUb2fXU8.js +1 -0
- package/dist/assets/{useDateFormatter-DOoVZUts.js → useDateFormatter-CpE7XQLs.js} +1 -1
- package/dist/assets/{useDeleteCell-CmX8_XRr.js → useDeleteCell-DRUDRiy0.js} +1 -1
- package/dist/assets/{useDependencyPanelTab-Dakjo7fJ.js → useDependencyPanelTab-nFVMlEx0.js} +1 -1
- package/dist/assets/useEventListener-Dy81QR4n.js +1 -0
- package/dist/assets/{useIframeCapabilities-DG-6GyGn.js → useIframeCapabilities-DTN9kFDq.js} +1 -1
- package/dist/assets/{useInstallPackage-CO3hLMle.js → useInstallPackage-C9V-on2J.js} +1 -1
- package/dist/assets/{useInterval-dbfNrGBa.js → useInterval-BJucVdV-.js} +1 -1
- package/dist/assets/{useLifecycle-CWjBWFMI.js → useLifecycle-DA9DjSPo.js} +1 -1
- package/dist/assets/useNotebookActions-ChLHy-0O.js +1 -0
- package/dist/assets/{useNumberFormatter-BXZcbTzH.js → useNumberFormatter-DbDKSvEd.js} +1 -1
- package/dist/assets/{usePress-alQ5Crny.js → usePress-BHGkpw8X.js} +1 -1
- package/dist/assets/useRunCells-5m6jCnyo.js +1 -0
- package/dist/assets/useSplitCell-DGD9smMq.js +1 -0
- package/dist/assets/{useTheme-CM9j8dgy.js → useTheme-BYXBU1of.js} +1 -1
- package/dist/assets/{tooltip-WkrsrB6k.js → utils-CdjCA1J8.js} +3 -3
- package/dist/assets/{utils-BvPM6Bro.js → utils-tNbLd14P.js} +1 -1
- package/dist/assets/vb-roE2hgal.js +1 -0
- package/dist/assets/vbscript-2s97682t.js +1 -0
- package/dist/assets/vega-component-CRbeDmeM.js +1 -0
- package/dist/assets/{vega-loader.browser-BJ9oKrvH.js → vega-loader.browser-CZV6_g2i.js} +1 -1
- package/dist/assets/velocity-D0YPg3VZ.js +1 -0
- package/dist/assets/verilog-Btszgjcd.js +1 -0
- package/dist/assets/vhdl-enS91NZh.js +1 -0
- package/dist/assets/webidl-DQMyFjhm.js +1 -0
- package/dist/assets/{write-secret-modal-s2JWi0j9.js → write-secret-modal-BCvuRAFb.js} +1 -1
- package/dist/assets/xquery-D5Jh9c_Z.js +1 -0
- package/dist/assets/{xychartDiagram-PRI3JC2R-d1PxDaUZ.js → xychartDiagram-PRI3JC2R-CXlUBSbQ.js} +1 -1
- package/dist/assets/yacas-CTzSIaAf.js +1 -0
- package/dist/assets/z80-Dt0hdUwP.js +1 -0
- package/dist/index.html +105 -103
- package/package.json +1 -1
- package/src/components/data-table/charts/lazy-chart.tsx +2 -0
- package/src/components/data-table/column-summary/column-summary.tsx +1 -0
- package/src/components/datasources/column-preview.tsx +1 -0
- package/src/components/editor/Output.tsx +2 -0
- package/src/components/editor/actions/useCellActionButton.tsx +38 -29
- package/src/components/editor/cell/code/cell-editor.tsx +9 -0
- package/src/components/editor/chrome/panels/context-aware-panel/context-aware-panel.tsx +6 -0
- package/src/components/editor/chrome/wrapper/__tests__/utils.test.ts +35 -0
- package/src/components/editor/chrome/wrapper/app-chrome.tsx +12 -14
- package/src/components/editor/chrome/wrapper/utils.ts +5 -1
- package/src/components/editor/header/status.tsx +19 -11
- package/src/components/editor/renderers/grid-layout/grid-layout.tsx +10 -3
- package/src/core/cells/cells.ts +6 -0
- package/src/core/cells/utils.ts +1 -0
- package/src/core/codemirror/__tests__/setup.test.ts +1 -0
- package/src/core/codemirror/cells/state.ts +1 -0
- package/src/core/codemirror/extensions.ts +20 -0
- package/src/core/codemirror/language/utils.ts +16 -1
- package/src/core/codemirror/reactive-references/__tests__/analyzer.test.ts +54 -0
- package/src/core/codemirror/reactive-references/analyzer.ts +14 -0
- package/src/core/dom/outline.ts +1 -1
- package/src/core/hotkeys/hotkeys.ts +8 -0
- package/src/css/md.css +4 -0
- package/src/plugins/core/sanitize-html.ts +50 -0
- package/src/plugins/core/sanitize.ts +3 -49
- package/src/plugins/impl/data-explorer/ConnectedDataExplorerComponent.tsx +6 -3
- package/src/plugins/impl/vega/__tests__/utils.test.ts +36 -0
- package/src/plugins/impl/vega/utils.ts +14 -0
- package/src/plugins/impl/vega/vega-component.tsx +6 -7
- package/src/plugins/impl/vega/vega.css +1 -1
- package/dist/assets/ConnectedDataExplorerComponent-CtWDfp3l.js +0 -1
- package/dist/assets/LazyAnyLanguageCodeMirror-Cqo8_z2X.js +0 -2
- package/dist/assets/RenderHTML-ncKzTdNN.js +0 -1
- package/dist/assets/apl-DtzrFS-s.js +0 -1
- package/dist/assets/asciiarmor-CjQ_xP8X.js +0 -1
- package/dist/assets/asn1-DzUeDjwC.js +0 -1
- package/dist/assets/brainfuck-B05LxEkk.js +0 -1
- package/dist/assets/channel-D0o4XAu5.js +0 -1
- package/dist/assets/chunk-55IACEB6-D_2W-dFX.js +0 -1
- package/dist/assets/classDiagram-2ON5EDUG-De_-Pd1f.js +0 -1
- package/dist/assets/classDiagram-v2-WZHVMYZB-cSqorU_0.js +0 -1
- package/dist/assets/clojure-CZ5Hrv4K.js +0 -1
- package/dist/assets/cmake-CRO8u_BT.js +0 -1
- package/dist/assets/cobol-YaQyb1sB.js +0 -1
- package/dist/assets/coffeescript-CDe5ZZrJ.js +0 -1
- package/dist/assets/command-palette-CQFQWyFs.js +0 -1
- package/dist/assets/commonlisp-Bvv3_QVI.js +0 -1
- package/dist/assets/context-aware-panel-DScGcWey.js +0 -3
- package/dist/assets/crystal-C1rgUhJo.js +0 -1
- package/dist/assets/cypher-DVGmFPtB.js +0 -1
- package/dist/assets/d-CxyOb1er.js +0 -1
- package/dist/assets/diff-Cu1ikL73.js +0 -1
- package/dist/assets/dist-Bt3repfY.js +0 -1
- package/dist/assets/dist-BxHluyex.js +0 -1
- package/dist/assets/dist-C_1SMU54.js +0 -1
- package/dist/assets/dist-e72BZHQB.js +0 -1
- package/dist/assets/documentation-panel-D5CHwsu6.js +0 -1
- package/dist/assets/dtd-BNxHLPn8.js +0 -1
- package/dist/assets/dylan-Bk7leKD1.js +0 -1
- package/dist/assets/ecl-DFa77eRU.js +0 -1
- package/dist/assets/eiffel-DF-wv1kH.js +0 -1
- package/dist/assets/elm-DK5nXI96.js +0 -1
- package/dist/assets/erlang-BkvzuZi_.js +0 -1
- package/dist/assets/factor-BmVitg1M.js +0 -1
- package/dist/assets/floating-outline-jCvD7_Ne.js +0 -1
- package/dist/assets/form-BEIQJWib.js +0 -2
- package/dist/assets/formats-DEgTLsde.js +0 -1
- package/dist/assets/forth-R__8Ih6T.js +0 -1
- package/dist/assets/fortran-bITPBTLl.js +0 -1
- package/dist/assets/gas-BbvsIpHC.js +0 -1
- package/dist/assets/gherkin-BfJ790F6.js +0 -1
- package/dist/assets/groovy-B9_Esdr4.js +0 -1
- package/dist/assets/haskell-DQ_w59wZ.js +0 -1
- package/dist/assets/haxe-Bunimo9Q.js +0 -1
- package/dist/assets/idl-BJmmgkar.js +0 -1
- package/dist/assets/infoDiagram-HS3SLOUP-DwcsyiRx.js +0 -2
- package/dist/assets/javascript-Be6GkklL.js +0 -1
- package/dist/assets/julia-VrX10QP7.js +0 -1
- package/dist/assets/katex-BubCv2pM.js +0 -1
- package/dist/assets/kiosk-mode-DWLXbf9i.js +0 -1
- package/dist/assets/livescript-QnZkA0KN.js +0 -1
- package/dist/assets/logs-panel-Q1OMBsBk.js +0 -1
- package/dist/assets/lua-Brlsyz3v.js +0 -1
- package/dist/assets/mathematica-CkvSnDCc.js +0 -1
- package/dist/assets/mbox-CI3Qi_ZP.js +0 -1
- package/dist/assets/mermaid-4DMBBIKO-AlJ6VDlN.js +0 -1
- package/dist/assets/mirc-DqiQAE_r.js +0 -1
- package/dist/assets/mllike-DhksFVh2.js +0 -1
- package/dist/assets/modelica-B9B8svZx.js +0 -1
- package/dist/assets/mscgen-Baihg9tB.js +0 -1
- package/dist/assets/mumps-CtKrS0yN.js +0 -1
- package/dist/assets/nsis-BmnMVrc-.js +0 -1
- package/dist/assets/ntriples-CJOExAbO.js +0 -1
- package/dist/assets/octave-KQtU50ha.js +0 -1
- package/dist/assets/oz-DpNDJdA6.js +0 -1
- package/dist/assets/panels-BfLG6GHU.js +0 -1
- package/dist/assets/pascal-DL1EmHpV.js +0 -1
- package/dist/assets/perl-KY2iZxe6.js +0 -1
- package/dist/assets/pig-JbIKR_a4.js +0 -1
- package/dist/assets/powershell-gllYeKkx.js +0 -1
- package/dist/assets/process-output-BXIvuDcK.js +0 -1
- package/dist/assets/properties-DgZAnyYl.js +0 -1
- package/dist/assets/protobuf-D2NIlliU.js +0 -1
- package/dist/assets/pug-8twC768a.js +0 -1
- package/dist/assets/puppet-DTiPvfrj.js +0 -1
- package/dist/assets/python-vVnxXYLn.js +0 -1
- package/dist/assets/q-Bg6_K_R8.js +0 -1
- package/dist/assets/r-Be_cW96e.js +0 -1
- package/dist/assets/react-vega-NitEaNxf.js +0 -1
- package/dist/assets/rpm-KwuwzD70.js +0 -1
- package/dist/assets/ruby-BXYAoUDA.js +0 -1
- package/dist/assets/run-page-lC8nyJai.js +0 -1
- package/dist/assets/sas-BK_aozmz.js +0 -1
- package/dist/assets/scheme-Cj5VR8rH.js +0 -1
- package/dist/assets/scratchpad-panel-B1HOh6tu.js +0 -1
- package/dist/assets/session-panel-3pPZOei4.js +0 -1
- package/dist/assets/shell-DU5g2Hb8.js +0 -1
- package/dist/assets/sieve-BjryQhS_.js +0 -1
- package/dist/assets/smalltalk-BH2zgl7j.js +0 -1
- package/dist/assets/snippets-panel-DVBJJk2i.js +0 -1
- package/dist/assets/sparql-BnlpNu1I.js +0 -1
- package/dist/assets/stateDiagram-v2-4FDKWEC3-D8tWrUpT.js +0 -1
- package/dist/assets/stylus-DKVDlNCy.js +0 -1
- package/dist/assets/swift-CvmEquCn.js +0 -1
- package/dist/assets/tcl-5gADzJuk.js +0 -1
- package/dist/assets/textile-DescY3Xo.js +0 -1
- package/dist/assets/toml-Cl1-FJpB.js +0 -1
- package/dist/assets/troff-DtRKKBXs.js +0 -1
- package/dist/assets/ttcn-CH218t1P.js +0 -1
- package/dist/assets/ttcn-cfg-D0A41keJ.js +0 -1
- package/dist/assets/turtle-BynyIhI_.js +0 -1
- package/dist/assets/useAddCell-ErFmQedu.js +0 -1
- package/dist/assets/useCellActionButton-DFS0hpsU.js +0 -1
- package/dist/assets/useEventListener-BGihH8bs.js +0 -1
- package/dist/assets/useNotebookActions-CtiT4Mzf.js +0 -1
- package/dist/assets/useSplitCell-CZQNZZ7B.js +0 -1
- package/dist/assets/vb-C0zeYR2e.js +0 -1
- package/dist/assets/vbscript-CTPmjxQY.js +0 -1
- package/dist/assets/vega-component-tdJ9PJ9x.js +0 -1
- package/dist/assets/velocity-Do0_UbF9.js +0 -1
- package/dist/assets/verilog-CNcKfWDg.js +0 -1
- package/dist/assets/vhdl-BQbO5X-W.js +0 -1
- package/dist/assets/webidl-Cp8jR_0D.js +0 -1
- package/dist/assets/xquery-Bak35NR-.js +0 -1
- package/dist/assets/yacas-gPkjfySO.js +0 -1
- package/dist/assets/z80-D3TsZ0mg.js +0 -1
- /package/dist/assets/{ImageComparisonComponent-CKIayHTu.js → ImageComparisonComponent-DvDPDgw3.js} +0 -0
- /package/dist/assets/{Inputs-BBPHhEky.js → Inputs-D5kI9GwB.js} +0 -0
- /package/dist/assets/{Plot-CRL8IC23.js → Plot-DQQQ-fLA.js} +0 -0
- /package/dist/assets/{SSRProvider-CwqN9FWV.js → SSRProvider-DC7ElCZZ.js} +0 -0
- /package/dist/assets/{alert-DkRmN0_B.js → alert-OQZHipbB.js} +0 -0
- /package/dist/assets/{apl-BgFiXauj.js → apl-CexVE068.js} +0 -0
- /package/dist/assets/{array-9XpbrfQ5.js → array-psg969PF.js} +0 -0
- /package/dist/assets/{asciiarmor-Bb9bgVRL.js → asciiarmor-DzdXFxI-.js} +0 -0
- /package/dist/assets/{asn1-BJZ-nDrD.js → asn1-lKNP6w4p.js} +0 -0
- /package/dist/assets/{asterisk-DIMri3P4.js → asterisk-Bjb62jej.js} +0 -0
- /package/dist/assets/{blob-DgooIGjS.js → blob-CObhN-9g.js} +0 -0
- /package/dist/assets/{brainfuck-JEXXY-xb.js → brainfuck-pTL_9bJ7.js} +0 -0
- /package/dist/assets/{bundle.esm-cfPbrCwe.js → bundle.esm-idScn0w0.js} +0 -0
- /package/dist/assets/{card-zDTDna9R.js → card-C-c-4jyF.js} +0 -0
- /package/dist/assets/{chunk-4F5CHEZ2-Cfs3LZOd.js → chunk-4F5CHEZ2-BGeTOmrq.js} +0 -0
- /package/dist/assets/{chunk-B2363JML-BpKywZ9V.js → chunk-B2363JML-Cmh9TPpj.js} +0 -0
- /package/dist/assets/{chunk-DR5Q36YT-OB6tC_dd.js → chunk-DR5Q36YT-SM9ZwAOv.js} +0 -0
- /package/dist/assets/{chunk-FRFDVMJY-7fBJ5sqD.js → chunk-FRFDVMJY-CUDE-MUX.js} +0 -0
- /package/dist/assets/{chunk-PL6DKKU2-BtJAQbOp.js → chunk-PL6DKKU2-DMqBvHTF.js} +0 -0
- /package/dist/assets/{chunk-SJTYNZTY-Ci4Tz7lH.js → chunk-SJTYNZTY-C9cwtT3h.js} +0 -0
- /package/dist/assets/{chunk-TQ3KTPDO-BRVTYZFE.js → chunk-TQ3KTPDO-CUyT9lNN.js} +0 -0
- /package/dist/assets/{chunk-UMXZTB3W-RJlVDk-Z.js → chunk-UMXZTB3W-Bt-_br31.js} +0 -0
- /package/dist/assets/{clear-button-CB0HP-a8.js → clear-button-DrIF5o__.js} +0 -0
- /package/dist/assets/{click-outside-container-BNVqwewc.js → click-outside-container-CagwJLiG.js} +0 -0
- /package/dist/assets/{clike-BqlNPeeg.js → clike-BCxd7pZ9.js} +0 -0
- /package/dist/assets/{clojure-DJJhEwde.js → clojure-CPAS-74L.js} +0 -0
- /package/dist/assets/{cmake-B0lAo26D.js → cmake-DMONEHtp.js} +0 -0
- /package/dist/assets/{cobol-CPAdfgtV.js → cobol-0rQGzjf0.js} +0 -0
- /package/dist/assets/{coffeescript-BOB8gS0Z.js → coffeescript-BHNUw4aR.js} +0 -0
- /package/dist/assets/{colors-D952IYju.js → colors-WO6MvCS3.js} +0 -0
- /package/dist/assets/{common-keywords-15xBKau4.js → common-keywords-D_14jCw0.js} +0 -0
- /package/dist/assets/{commonlisp-ju8ecBeu.js → commonlisp-Cjiyl45-.js} +0 -0
- /package/dist/assets/{crystal-rVZgODG1.js → crystal-CUMDisY2.js} +0 -0
- /package/dist/assets/{css-mQmF00YG.js → css-B6NFOUor.js} +0 -0
- /package/dist/assets/{cypher-BKJJTP3h.js → cypher-DcWJtLBw.js} +0 -0
- /package/dist/assets/{cytoscape.esm-Dr1GhgW1.js → cytoscape.esm-DuXIsNbY.js} +0 -0
- /package/dist/assets/{d-Bo-m8D8s.js → d-CpNp8oDv.js} +0 -0
- /package/dist/assets/{defaultLocale-CGfP-Ye3.js → defaultLocale-DK1MWd7f.js} +0 -0
- /package/dist/assets/{defaultLocale-CuYNS33t.js → defaultLocale-OkOxlkkM.js} +0 -0
- /package/dist/assets/{diff-BxRzIQ-d.js → diff-BCFJsGHX.js} +0 -0
- /package/dist/assets/{dist-BUnAm6Ws.js → dist-6FIAeDIu.js} +0 -0
- /package/dist/assets/{dist-BpWg9Ixw.js → dist-ASlWkGgG.js} +0 -0
- /package/dist/assets/{dist-CSqc_Sgb.js → dist-BR9zyVPH.js} +0 -0
- /package/dist/assets/{dist-BXRWfNwi.js → dist-COnmrAVZ.js} +0 -0
- /package/dist/assets/{dist-BCD52ijJ.js → dist-CVEvQ1Ex.js} +0 -0
- /package/dist/assets/{dist-OYpQaA59.js → dist-CcGcwrUD.js} +0 -0
- /package/dist/assets/{dist-CASixOSV.js → dist-CgC048vN.js} +0 -0
- /package/dist/assets/{dist-DzY1sWU4.js → dist-ClzRAVN-.js} +0 -0
- /package/dist/assets/{dist-BxbVYUpB.js → dist-D9Vhptds.js} +0 -0
- /package/dist/assets/{dist-D7ZgydNg.js → dist-DBPtheKQ.js} +0 -0
- /package/dist/assets/{dist-DRZEZXzR.js → dist-DbK_4_qo.js} +0 -0
- /package/dist/assets/{dist-E_zJdhI2.js → dist-DlTbNRBn.js} +0 -0
- /package/dist/assets/{dist-Ba1GjgCU.js → dist-DrceDAhM.js} +0 -0
- /package/dist/assets/{dist-CXKsxFgm.js → dist-DxrbvUBv.js} +0 -0
- /package/dist/assets/{dist-Dxx6LCxI.js → dist-OxxI-HeS.js} +0 -0
- /package/dist/assets/{dist-Cq-hSY2t.js → dist-mxGLXOFm.js} +0 -0
- /package/dist/assets/{dist-CazeD6DS.js → dist-sVuk6mkQ.js} +0 -0
- /package/dist/assets/{dtd-9_JVIcTk.js → dtd-D7nO7isU.js} +0 -0
- /package/dist/assets/{duckdb-keywords-CYQ5DEZJ.js → duckdb-keywords-CSySeB8R.js} +0 -0
- /package/dist/assets/{dylan-BnCJT9rR.js → dylan-qEhlQv4l.js} +0 -0
- /package/dist/assets/{ebnf-XMH6KY7E.js → ebnf-KJaLpQez.js} +0 -0
- /package/dist/assets/{ecl-EHfGJ0nT.js → ecl-cXHEjabG.js} +0 -0
- /package/dist/assets/{eiffel-B1ya3rXn.js → eiffel-CUTEIYa-.js} +0 -0
- /package/dist/assets/{elm-DTYW1E0x.js → elm-DOfGHeKn.js} +0 -0
- /package/dist/assets/{emotion-is-prop-valid.esm-lG8j6oqk.js → emotion-is-prop-valid.esm-D1keIaYa.js} +0 -0
- /package/dist/assets/{empty-state-qEnkddw9.js → empty-state-B_US46Us.js} +0 -0
- /package/dist/assets/{erlang-Ef5NK4Qi.js → erlang-B5R7Byby.js} +0 -0
- /package/dist/assets/{errors-0IrrdfSG.js → errors-Bfogio62.js} +0 -0
- /package/dist/assets/{esm-DAVeZ8YU.js → esm-CX-gNDKf.js} +0 -0
- /package/dist/assets/{extends-B9D0JO9U.js → extends-DRbCSry7.js} +0 -0
- /package/dist/assets/{fcl-DyFJAgkq.js → fcl-Cf241iHu.js} +0 -0
- /package/dist/assets/{forth-DlkCTYcI.js → forth-BjV8SV3p.js} +0 -0
- /package/dist/assets/{fortran-DwMj_oVI.js → fortran-CvNblcug.js} +0 -0
- /package/dist/assets/{gas-JJhY92kb.js → gas-D1YrZZUY.js} +0 -0
- /package/dist/assets/{gherkin-DLEuOFao.js → gherkin-CAUl7roi.js} +0 -0
- /package/dist/assets/{groovy-C89Qk13G.js → groovy-CnmCDhLm.js} +0 -0
- /package/dist/assets/{haskell-C_CbCt6A.js → haskell-qdBb4h_7.js} +0 -0
- /package/dist/assets/{haxe-CrpzcVEI.js → haxe-MQhLSFhI.js} +0 -0
- /package/dist/assets/{http-ySzAzH5W.js → http-_roNBajA.js} +0 -0
- /package/dist/assets/{icons-T5yQRjuT.js → icons-CrUXojcA.js} +0 -0
- /package/dist/assets/{idl-B6_fc1en.js → idl-CcZzcWCI.js} +0 -0
- /package/dist/assets/{init-DZ5TV86b.js → init-XMA8CWhh.js} +0 -0
- /package/dist/assets/{javascript-BaaG-Hd6.js → javascript-hE4QNtKl.js} +0 -0
- /package/dist/assets/{julia-DNoFsn7V.js → julia-BjrvvLkp.js} +0 -0
- /package/dist/assets/{katex-0Z75JF53.js → katex-rvFxOCU-.js} +0 -0
- /package/dist/assets/{kbd-wfpi3NfU.js → kbd-DvKpAc6K.js} +0 -0
- /package/dist/assets/{links-CoGM-Inf.js → links-DzgPOFJ-.js} +0 -0
- /package/dist/assets/{livescript-DiAZOLn0.js → livescript-B01pNEzu.js} +0 -0
- /package/dist/assets/{loro_wasm_bg-C5qfEYzW.js → loro_wasm_bg-CcIcmNa3.js} +0 -0
- /package/dist/assets/{lua-CvOqni3z.js → lua-BwfRgSM6.js} +0 -0
- /package/dist/assets/{marimo-icons-D5FuIsqO.js → marimo-icons-C_YDiXeg.js} +0 -0
- /package/dist/assets/{math-BkqINfbU.js → math-CeGhAAgQ.js} +0 -0
- /package/dist/assets/{mathematica-CFRE5rVx.js → mathematica-DLi5eijp.js} +0 -0
- /package/dist/assets/{mbox-B9UqFU9M.js → mbox-QweTYWJQ.js} +0 -0
- /package/dist/assets/{mirc-CLMssi9M.js → mirc-1J5TZ8Tf.js} +0 -0
- /package/dist/assets/{mllike-8SMJwcaT.js → mllike-DRzCrpbj.js} +0 -0
- /package/dist/assets/{modelica-yzbXhFaT.js → modelica-GZKavTLw.js} +0 -0
- /package/dist/assets/{mscgen-2jiNYYYD.js → mscgen-HMNaCHuy.js} +0 -0
- /package/dist/assets/{multi-icon-DpydcgWs.js → multi-icon-DEWnuZs2.js} +0 -0
- /package/dist/assets/{mumps-Bf7RyXk9.js → mumps-CzCxfP2m.js} +0 -0
- /package/dist/assets/{nginx-Cz_XvoTm.js → nginx-Dfd7l9Sj.js} +0 -0
- /package/dist/assets/{node-sql-parser-BRpb-iwO.js → node-sql-parser-BvUFblwL.js} +0 -0
- /package/dist/assets/{ntriples-CHdvKQK4.js → ntriples-DT57g_ZF.js} +0 -0
- /package/dist/assets/{objectWithoutPropertiesLoose-CboCOq4o.js → objectWithoutPropertiesLoose-DP4vAkvg.js} +0 -0
- /package/dist/assets/{octave-pHgy7YQ1.js → octave-CtuTaUjQ.js} +0 -0
- /package/dist/assets/{oz-B2RGFHuF.js → oz-BS8LEqKx.js} +0 -0
- /package/dist/assets/{panel-context-UZhylPLI.js → panel-context-BN0DQXiK.js} +0 -0
- /package/dist/assets/{pascal-CwbVUvc1.js → pascal-Db0ZEHQw.js} +0 -0
- /package/dist/assets/{path-MXGY7b8Y.js → path-CkIaQHJO.js} +0 -0
- /package/dist/assets/{perl-qu-5ZkuC.js → perl-DgJKzgyz.js} +0 -0
- /package/dist/assets/{pig-iG5hc5m3.js → pig-Dk6eYa40.js} +0 -0
- /package/dist/assets/{powershell-DVD15WIk.js → powershell-dW0qpS7j.js} +0 -0
- /package/dist/assets/{prop-types-C638SUfx.js → prop-types-RrUi-pOT.js} +0 -0
- /package/dist/assets/{properties-xtMba4e4.js → properties-oMha4ix2.js} +0 -0
- /package/dist/assets/{protobuf-Dpg2VGRe.js → protobuf-CfWJ4EtB.js} +0 -0
- /package/dist/assets/{puppet-Dzxmyijv.js → puppet-O2K_n-UM.js} +0 -0
- /package/dist/assets/{python-zk1sCR2K.js → python-qMKsSr4L.js} +0 -0
- /package/dist/assets/{q-kox9cJcs.js → q-ewn8d81Q.js} +0 -0
- /package/dist/assets/{r-DyYzVzIO.js → r-CqF-AjDv.js} +0 -0
- /package/dist/assets/{range-ClqUI25v.js → range-DNqFcYmr.js} +0 -0
- /package/dist/assets/{react-resizable-panels.browser.esm-DTuXFbj-.js → react-resizable-panels.browser.esm-DDRqG5ui.js} +0 -0
- /package/dist/assets/{request-registry-C4HbFS_V.js → request-registry-B-7cIM_I.js} +0 -0
- /package/dist/assets/{requests-C_ra5-07.js → requests-CP6q3-4O.js} +0 -0
- /package/dist/assets/{rpm-alFc50xb.js → rpm-BqLq138P.js} +0 -0
- /package/dist/assets/{ruby-DkQm_WRq.js → ruby-CQfbO3YY.js} +0 -0
- /package/dist/assets/{sas-DGSI29of.js → sas-BmpgVn6Q.js} +0 -0
- /package/dist/assets/{scheme-rBV9lbLs.js → scheme-rgyDg_wq.js} +0 -0
- /package/dist/assets/{shell-cLHcJFI_.js → shell-Dndk6Ld6.js} +0 -0
- /package/dist/assets/{sieve-DqVMcV-u.js → sieve-bGgktpLX.js} +0 -0
- /package/dist/assets/{simple-mode-XUC_EnZg.js → simple-mode-oMMOWqWz.js} +0 -0
- /package/dist/assets/{smalltalk-C-I-W4Ke.js → smalltalk-CU43LrKS.js} +0 -0
- /package/dist/assets/{solr-BAO4N63o.js → solr-CJeCgAfj.js} +0 -0
- /package/dist/assets/{sparql-kL9tmY4H.js → sparql-BycKC3X4.js} +0 -0
- /package/dist/assets/{spreadsheet-DWqd5foV.js → spreadsheet-BYYvgLKe.js} +0 -0
- /package/dist/assets/{sql-RBdzBYsM.js → sql-B5I6FC3m.js} +0 -0
- /package/dist/assets/{src-BnrQkOKh.js → src-CW27-Kjl.js} +0 -0
- /package/dist/assets/{stylus-Bhdrsm25.js → stylus-CePwhvgW.js} +0 -0
- /package/dist/assets/{swift-BnlacIgv.js → swift-CfgglXjR.js} +0 -0
- /package/dist/assets/{table-CKtrITeZ.js → table-BhH-Mm8O.js} +0 -0
- /package/dist/assets/{tcl-B27COR2l.js → tcl-D_gYSBm0.js} +0 -0
- /package/dist/assets/{textile-B6TglpCZ.js → textile-BEvFU9wV.js} +0 -0
- /package/dist/assets/{tiddlywiki-BsHUDwie.js → tiddlywiki-hmNzZkq6.js} +0 -0
- /package/dist/assets/{tiki-ZqBe4Kjv.js → tiki-BL1SzuSx.js} +0 -0
- /package/dist/assets/{timer-hW4GGuR0.js → timer-CPT_vXom.js} +0 -0
- /package/dist/assets/{toml-BsWxQYgm.js → toml-DGJRpV2e.js} +0 -0
- /package/dist/assets/{treemap-BY_mNGmB.js → treemap-Cf5pgJDk.js} +0 -0
- /package/dist/assets/{troff-BWLanNR_.js → troff-CUlohIux.js} +0 -0
- /package/dist/assets/{ttcn-cfg-CjyOoZVj.js → ttcn-cfg-DCxdE-sj.js} +0 -0
- /package/dist/assets/{ttcn-D0YGDh5r.js → ttcn-nuQ3wCdy.js} +0 -0
- /package/dist/assets/{turtle-Cvp2UT5f.js → turtle-B2N96QpC.js} +0 -0
- /package/dist/assets/{types-DBNA0l6L.js → types-BfP_kuAY.js} +0 -0
- /package/dist/assets/{useAsyncData-a8f2Q_nk.js → useAsyncData-D-4ifFXh.js} +0 -0
- /package/dist/assets/{useDebounce-DwTO_rGp.js → useDebounce-B0dx2Gp0.js} +0 -0
- /package/dist/assets/{useDeepCompareMemoize-BEmJ3M7I.js → useDeepCompareMemoize-yyiB9aJX.js} +0 -0
- /package/dist/assets/{vb-BhVsVWuo.js → vb-CBiIL_zx.js} +0 -0
- /package/dist/assets/{vbscript-DuoiXXmR.js → vbscript-B3Y69Iw0.js} +0 -0
- /package/dist/assets/{velocity-BKH9W8hw.js → velocity-B5BPA7FX.js} +0 -0
- /package/dist/assets/{verilog-CZQD9eTL.js → verilog-BwmYR8E3.js} +0 -0
- /package/dist/assets/{vhdl-D4SaV93K.js → vhdl-VXFnDy2U.js} +0 -0
- /package/dist/assets/{web-vitals-CpL_P378.js → web-vitals-BaMazlva.js} +0 -0
- /package/dist/assets/{webidl-CNBgKfWl.js → webidl-Bcmf9JWd.js} +0 -0
- /package/dist/assets/{ws-IPvpFhTG.js → ws-CBdPISJL.js} +0 -0
- /package/dist/assets/{xquery-BvBQzy0q.js → xquery-8pWKOyFY.js} +0 -0
- /package/dist/assets/{yacas-C9IPX04z.js → yacas-BFcwo3Cx.js} +0 -0
- /package/dist/assets/{z80-BZqsoEqX.js → z80-t3SBb7Lt.js} +0 -0
|
@@ -41,7 +41,10 @@ import { hasOnlyOneCellAtom, useCellActions } from "@/core/cells/cells";
|
|
|
41
41
|
import { type CellId, SETUP_CELL_ID } from "@/core/cells/ids";
|
|
42
42
|
import type { CellData } from "@/core/cells/types";
|
|
43
43
|
import { formatEditorViews } from "@/core/codemirror/format";
|
|
44
|
-
import {
|
|
44
|
+
import {
|
|
45
|
+
getCurrentLanguageAdapter,
|
|
46
|
+
toggleToLanguage,
|
|
47
|
+
} from "@/core/codemirror/language/commands";
|
|
45
48
|
import { switchLanguage } from "@/core/codemirror/language/extension";
|
|
46
49
|
import { MARKDOWN_INITIAL_HIDE_CODE } from "@/core/codemirror/language/languages/markdown";
|
|
47
50
|
import {
|
|
@@ -235,35 +238,41 @@ export function useCellActionButtons({ cell, closePopover }: Props) {
|
|
|
235
238
|
},
|
|
236
239
|
hidden: isSetupCell,
|
|
237
240
|
},
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
241
|
+
// We need to check this here because the user may have toggled the language
|
|
242
|
+
getCurrentLanguageAdapter(getEditorView()) === "sql"
|
|
243
|
+
? {
|
|
244
|
+
icon: <PythonIcon />,
|
|
245
|
+
label: "View as Python",
|
|
246
|
+
hotkey: "cell.viewAsSQL",
|
|
247
|
+
handle: () => {
|
|
248
|
+
const editorView = getEditorView();
|
|
249
|
+
if (!editorView) {
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
toggleToLanguage(editorView, "python", { force: true });
|
|
253
|
+
},
|
|
254
|
+
hidden: isSetupCell,
|
|
245
255
|
}
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
},
|
|
256
|
+
: {
|
|
257
|
+
icon: <DatabaseIcon size={13} strokeWidth={1.5} />,
|
|
258
|
+
label: "Convert to SQL",
|
|
259
|
+
hotkey: "cell.viewAsSQL",
|
|
260
|
+
handle: () => {
|
|
261
|
+
const editorView = getEditorView();
|
|
262
|
+
if (!editorView) {
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
maybeAddMarimoImport({
|
|
266
|
+
autoInstantiate,
|
|
267
|
+
createNewCell: createCell,
|
|
268
|
+
});
|
|
269
|
+
switchLanguage(editorView, {
|
|
270
|
+
language: "sql",
|
|
271
|
+
keepCodeAsIs: false,
|
|
272
|
+
});
|
|
273
|
+
},
|
|
274
|
+
hidden: isSetupCell,
|
|
275
|
+
},
|
|
267
276
|
],
|
|
268
277
|
|
|
269
278
|
// Movement
|
|
@@ -163,6 +163,13 @@ const CellEditorInternal = ({
|
|
|
163
163
|
}
|
|
164
164
|
});
|
|
165
165
|
|
|
166
|
+
const afterToggleSQL = useEvent(() => {
|
|
167
|
+
maybeAddMarimoImport({
|
|
168
|
+
autoInstantiate,
|
|
169
|
+
createNewCell: cellActions.createNewCell,
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
|
|
166
173
|
const aiEnabled = isAiEnabled(userConfig);
|
|
167
174
|
|
|
168
175
|
const extensions = useMemo(() => {
|
|
@@ -173,6 +180,7 @@ const CellEditorInternal = ({
|
|
|
173
180
|
cellActions: {
|
|
174
181
|
...cellActions,
|
|
175
182
|
afterToggleMarkdown,
|
|
183
|
+
afterToggleSQL,
|
|
176
184
|
onRun: handleRunCell,
|
|
177
185
|
deleteCell: handleDelete,
|
|
178
186
|
saveNotebook: saveOrNameNotebook,
|
|
@@ -267,6 +275,7 @@ const CellEditorInternal = ({
|
|
|
267
275
|
handleRunCell,
|
|
268
276
|
setAiCompletionCell,
|
|
269
277
|
afterToggleMarkdown,
|
|
278
|
+
afterToggleSQL,
|
|
270
279
|
setLanguageAdapter,
|
|
271
280
|
showHiddenCode,
|
|
272
281
|
saveOrNameNotebook,
|
|
@@ -5,6 +5,7 @@ import { useAtom } from "jotai";
|
|
|
5
5
|
import { CrosshairIcon, PinIcon, PinOffIcon, XIcon } from "lucide-react";
|
|
6
6
|
import type { PropsWithChildren } from "react";
|
|
7
7
|
import { Panel, PanelResizeHandle } from "react-resizable-panels";
|
|
8
|
+
import { raf2 } from "@/components/editor/navigation/focus-utils";
|
|
8
9
|
import { Button } from "@/components/ui/button";
|
|
9
10
|
import { Toggle } from "@/components/ui/toggle";
|
|
10
11
|
import { Tooltip } from "@/components/ui/tooltip";
|
|
@@ -151,6 +152,11 @@ const ResizableComponent = ({ children }: ResizableComponentProps) => {
|
|
|
151
152
|
startingWidth: 400,
|
|
152
153
|
minWidth: 300,
|
|
153
154
|
maxWidth: 1500,
|
|
155
|
+
onResize: () => {
|
|
156
|
+
raf2(() => {
|
|
157
|
+
window.dispatchEvent(new Event("resize"));
|
|
158
|
+
});
|
|
159
|
+
},
|
|
154
160
|
});
|
|
155
161
|
|
|
156
162
|
return (
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
+
|
|
3
|
+
import { describe, expect, it, vi } from "vitest";
|
|
4
|
+
import { handleDragging } from "../utils";
|
|
5
|
+
|
|
6
|
+
describe("handleDragging", () => {
|
|
7
|
+
it("should dispatch a resize event after dragging ends", async () => {
|
|
8
|
+
const listener = vi.fn();
|
|
9
|
+
window.addEventListener("resize", listener);
|
|
10
|
+
|
|
11
|
+
handleDragging(false);
|
|
12
|
+
|
|
13
|
+
// raf2: wait two animation frames
|
|
14
|
+
await new Promise((resolve) => requestAnimationFrame(resolve));
|
|
15
|
+
await new Promise((resolve) => requestAnimationFrame(resolve));
|
|
16
|
+
|
|
17
|
+
expect(listener).toHaveBeenCalledTimes(1);
|
|
18
|
+
|
|
19
|
+
window.removeEventListener("resize", listener);
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it("should not dispatch a resize event while dragging", async () => {
|
|
23
|
+
const listener = vi.fn();
|
|
24
|
+
window.addEventListener("resize", listener);
|
|
25
|
+
|
|
26
|
+
handleDragging(true);
|
|
27
|
+
|
|
28
|
+
await new Promise((resolve) => requestAnimationFrame(resolve));
|
|
29
|
+
await new Promise((resolve) => requestAnimationFrame(resolve));
|
|
30
|
+
|
|
31
|
+
expect(listener).not.toHaveBeenCalled();
|
|
32
|
+
|
|
33
|
+
window.removeEventListener("resize", listener);
|
|
34
|
+
});
|
|
35
|
+
});
|
|
@@ -17,6 +17,7 @@ import "./app-chrome.css";
|
|
|
17
17
|
import { TooltipProvider } from "@radix-ui/react-tooltip";
|
|
18
18
|
import { useAtom, useAtomValue } from "jotai";
|
|
19
19
|
import { XIcon } from "lucide-react";
|
|
20
|
+
import useEvent from "react-use-event-hook";
|
|
20
21
|
import { Button } from "@/components/ui/button";
|
|
21
22
|
import { ReorderableList } from "@/components/ui/reorderable-list";
|
|
22
23
|
import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs";
|
|
@@ -26,6 +27,7 @@ import { capabilitiesAtom } from "@/core/config/capabilities";
|
|
|
26
27
|
import { getFeatureFlag } from "@/core/config/feature-flag";
|
|
27
28
|
import { cn } from "@/utils/cn";
|
|
28
29
|
import { ErrorBoundary } from "../../boundary/ErrorBoundary";
|
|
30
|
+
import { raf2 } from "../../navigation/focus-utils";
|
|
29
31
|
import { ContextAwarePanel } from "../panels/context-aware-panel/context-aware-panel";
|
|
30
32
|
import { PanelSectionProvider } from "../panels/panel-context";
|
|
31
33
|
import { panelLayoutAtom, useChromeActions, useChromeState } from "../state";
|
|
@@ -147,6 +149,14 @@ export const AppChrome: React.FC<PropsWithChildren> = ({ children }) => {
|
|
|
147
149
|
});
|
|
148
150
|
}, [panelLayout.sidebar, capabilities]);
|
|
149
151
|
|
|
152
|
+
const emitResizeEvent = useEvent(() => {
|
|
153
|
+
// HACK: Unfortunately, we have to do this twice to make sure the
|
|
154
|
+
// panel is fully expanded before we dispatch the resize event
|
|
155
|
+
raf2(() => {
|
|
156
|
+
window.dispatchEvent(new Event("resize"));
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
|
|
150
160
|
// sync sidebar
|
|
151
161
|
useEffect(() => {
|
|
152
162
|
if (!sidebarRef.current) {
|
|
@@ -162,13 +172,7 @@ export const AppChrome: React.FC<PropsWithChildren> = ({ children }) => {
|
|
|
162
172
|
}
|
|
163
173
|
|
|
164
174
|
// Dispatch a resize event so widgets know to resize
|
|
165
|
-
|
|
166
|
-
// HACK: Unfortunately, we have to do this twice to make sure it the
|
|
167
|
-
// panel is fully expanded before we dispatch the resize event
|
|
168
|
-
requestAnimationFrame(() => {
|
|
169
|
-
window.dispatchEvent(new Event("resize"));
|
|
170
|
-
});
|
|
171
|
-
});
|
|
175
|
+
emitResizeEvent();
|
|
172
176
|
}, [isSidebarOpen]);
|
|
173
177
|
|
|
174
178
|
// sync panel
|
|
@@ -186,13 +190,7 @@ export const AppChrome: React.FC<PropsWithChildren> = ({ children }) => {
|
|
|
186
190
|
}
|
|
187
191
|
|
|
188
192
|
// Dispatch a resize event so widgets know to resize
|
|
189
|
-
|
|
190
|
-
// HACK: Unfortunately, we have to do this twice to make sure it the
|
|
191
|
-
// panel is fully expanded before we dispatch the resize event
|
|
192
|
-
requestAnimationFrame(() => {
|
|
193
|
-
window.dispatchEvent(new Event("resize"));
|
|
194
|
-
});
|
|
195
|
-
});
|
|
193
|
+
emitResizeEvent();
|
|
196
194
|
}, [isDeveloperPanelOpen]);
|
|
197
195
|
|
|
198
196
|
// Auto-correct developer panel selection when the selected tab is no longer available
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
2
|
|
|
3
|
+
import { raf2 } from "../../navigation/focus-utils";
|
|
4
|
+
|
|
3
5
|
export function handleDragging(isDragging: boolean) {
|
|
4
6
|
if (!isDragging) {
|
|
5
7
|
// Once the user is done dragging, dispatch a resize event
|
|
6
|
-
|
|
8
|
+
raf2(() => {
|
|
9
|
+
window.dispatchEvent(new Event("resize"));
|
|
10
|
+
});
|
|
7
11
|
}
|
|
8
12
|
}
|
|
@@ -5,6 +5,7 @@ import { HourglassIcon, LockIcon, UnlinkIcon } from "lucide-react";
|
|
|
5
5
|
import React from "react";
|
|
6
6
|
import { Tooltip } from "@/components/ui/tooltip";
|
|
7
7
|
import { notebookScrollToRunning } from "@/core/cells/actions";
|
|
8
|
+
import { onlyScratchpadIsRunningAtom } from "@/core/cells/cells";
|
|
8
9
|
import { viewStateAtom } from "@/core/mode";
|
|
9
10
|
import { type ConnectionStatus, WebSocketState } from "@/core/websocket/types";
|
|
10
11
|
import { cn } from "@/utils/cn";
|
|
@@ -52,17 +53,24 @@ const LockedIcon = () => (
|
|
|
52
53
|
</Tooltip>
|
|
53
54
|
);
|
|
54
55
|
|
|
55
|
-
const RunningIcon = () =>
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
56
|
+
const RunningIcon = () => {
|
|
57
|
+
const scratchpadOnly = useAtomValue(onlyScratchpadIsRunningAtom);
|
|
58
|
+
const tooltip = scratchpadOnly
|
|
59
|
+
? "Scratchpad is running"
|
|
60
|
+
: "Jump to running cell";
|
|
61
|
+
|
|
62
|
+
return (
|
|
63
|
+
<Tooltip content={tooltip} side="right">
|
|
64
|
+
<div
|
|
65
|
+
className={topLeftStatus}
|
|
66
|
+
data-testid="loading-indicator"
|
|
67
|
+
onClick={scratchpadOnly ? undefined : notebookScrollToRunning}
|
|
68
|
+
>
|
|
69
|
+
<HourglassIcon className="running-app-icon" size={30} strokeWidth={1} />
|
|
70
|
+
</div>
|
|
71
|
+
</Tooltip>
|
|
72
|
+
);
|
|
73
|
+
};
|
|
66
74
|
|
|
67
75
|
const NoiseBackground = () => (
|
|
68
76
|
<>
|
|
@@ -158,12 +158,19 @@ export const GridLayoutRenderer: React.FC<Props> = ({
|
|
|
158
158
|
compactType={null}
|
|
159
159
|
preventCollision={true}
|
|
160
160
|
rowHeight={layout.rowHeight}
|
|
161
|
-
onLayoutChange={(cellLayouts) =>
|
|
161
|
+
onLayoutChange={(cellLayouts) => {
|
|
162
|
+
// Don't update state in read mode — the layout is static and
|
|
163
|
+
// updating triggers a re-render cycle that causes an infinite loop
|
|
164
|
+
// (React error https://react.dev/errors/185 Maximum update depth exceeded).
|
|
165
|
+
// https://github.com/marimo-team/marimo/issues/8644
|
|
166
|
+
if (isReading) {
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
162
169
|
setLayout({
|
|
163
170
|
...layout,
|
|
164
171
|
cells: cellLayouts,
|
|
165
|
-
})
|
|
166
|
-
}
|
|
172
|
+
});
|
|
173
|
+
}}
|
|
167
174
|
droppingItem={
|
|
168
175
|
droppingItem
|
|
169
176
|
? {
|
package/src/core/cells/cells.ts
CHANGED
|
@@ -1640,6 +1640,12 @@ export const cellsRuntimeAtom = atom((get) => get(notebookAtom).cellRuntime);
|
|
|
1640
1640
|
export const notebookIsRunningAtom = atom((get) =>
|
|
1641
1641
|
notebookIsRunning(get(notebookAtom)),
|
|
1642
1642
|
);
|
|
1643
|
+
export const onlyScratchpadIsRunningAtom = atom((get) => {
|
|
1644
|
+
const { cellRuntime } = get(notebookAtom);
|
|
1645
|
+
return Object.entries(cellRuntime).every(
|
|
1646
|
+
([id, rt]) => rt.status !== "running" || id === SCRATCH_CELL_ID,
|
|
1647
|
+
);
|
|
1648
|
+
});
|
|
1643
1649
|
export const notebookQueuedOrRunningCountAtom = atom((get) =>
|
|
1644
1650
|
notebookQueueOrRunningCount(get(notebookAtom)),
|
|
1645
1651
|
);
|
package/src/core/cells/utils.ts
CHANGED
|
@@ -11,6 +11,7 @@ export function notebookIsRunning(state: NotebookState) {
|
|
|
11
11
|
(cell) => cell.status === "running",
|
|
12
12
|
);
|
|
13
13
|
}
|
|
14
|
+
|
|
14
15
|
export function notebookQueueOrRunningCount(state: NotebookState) {
|
|
15
16
|
return Object.values(state.cellRuntime).filter(
|
|
16
17
|
(cell) => cell.status === "running" || cell.status === "queued",
|
|
@@ -45,6 +45,7 @@ function getOpts() {
|
|
|
45
45
|
onRun: namedFunction("onRun"),
|
|
46
46
|
deleteCell: namedFunction("deleteCell"),
|
|
47
47
|
afterToggleMarkdown: namedFunction("afterToggleMarkdown"),
|
|
48
|
+
afterToggleSQL: namedFunction("afterToggleSQL"),
|
|
48
49
|
} as unknown as CodemirrorCellActions,
|
|
49
50
|
completionConfig: {
|
|
50
51
|
activate_on_typing: false,
|
|
@@ -42,6 +42,26 @@ export function formatKeymapExtension(hotkeys: HotkeyProvider) {
|
|
|
42
42
|
actions.afterToggleMarkdown();
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
+
return response !== false;
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
key: hotkeys.getHotkey("cell.viewAsSQL").key,
|
|
50
|
+
preventDefault: true,
|
|
51
|
+
run: (ev) => {
|
|
52
|
+
const currentLanguage = getCurrentLanguageAdapter(ev);
|
|
53
|
+
const destinationLanguage =
|
|
54
|
+
currentLanguage === "sql" ? "python" : "sql";
|
|
55
|
+
|
|
56
|
+
const response = toggleToLanguage(ev, destinationLanguage, {
|
|
57
|
+
force: true,
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
if (response === "sql") {
|
|
61
|
+
const actions = ev.state.facet(cellActionsState);
|
|
62
|
+
actions.afterToggleSQL();
|
|
63
|
+
}
|
|
64
|
+
|
|
45
65
|
return response !== false;
|
|
46
66
|
},
|
|
47
67
|
},
|
|
@@ -3,7 +3,11 @@
|
|
|
3
3
|
import type { EditorState } from "@codemirror/state";
|
|
4
4
|
import type { EditorView } from "@codemirror/view";
|
|
5
5
|
import { replaceEditorContent } from "../replace-editor-content";
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
languageAdapterFromCode,
|
|
8
|
+
languageAdapterState,
|
|
9
|
+
switchLanguage,
|
|
10
|
+
} from "./extension";
|
|
7
11
|
import { languageMetadataField } from "./metadata";
|
|
8
12
|
|
|
9
13
|
/**
|
|
@@ -35,6 +39,17 @@ export function updateEditorCodeFromPython(
|
|
|
35
39
|
editor: EditorView,
|
|
36
40
|
pythonCode: string,
|
|
37
41
|
): string {
|
|
42
|
+
const currentAdapter = editor.state.field(languageAdapterState);
|
|
43
|
+
const correctAdapter = languageAdapterFromCode(pythonCode);
|
|
44
|
+
|
|
45
|
+
// If the language type changed (e.g., markdown → python), switch adapters
|
|
46
|
+
if (correctAdapter.type !== currentAdapter.type) {
|
|
47
|
+
switchLanguage(editor, {
|
|
48
|
+
language: correctAdapter.type,
|
|
49
|
+
keepCodeAsIs: true,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
|
|
38
53
|
const languageAdapter = editor.state.field(languageAdapterState);
|
|
39
54
|
const [code] = languageAdapter.transformIn(pythonCode);
|
|
40
55
|
// Use replaceEditorContent which preserves cursor position when focused
|
|
@@ -1115,6 +1115,60 @@ class Foo:
|
|
|
1115
1115
|
`);
|
|
1116
1116
|
});
|
|
1117
1117
|
|
|
1118
|
+
test("should not highlight attribute access matching a for-loop variable", () => {
|
|
1119
|
+
// When `tool` is used as a for-loop variable, `mcp.tool` (attribute access)
|
|
1120
|
+
// should NOT have `tool` highlighted — it's a property, not a variable reference.
|
|
1121
|
+
expect(
|
|
1122
|
+
runHighlight(
|
|
1123
|
+
["mcp", "client"],
|
|
1124
|
+
`
|
|
1125
|
+
@mcp.tool
|
|
1126
|
+
def roll_dice():
|
|
1127
|
+
pass
|
|
1128
|
+
|
|
1129
|
+
async with client:
|
|
1130
|
+
for tool in await client.list_tools():
|
|
1131
|
+
print(tool)
|
|
1132
|
+
`,
|
|
1133
|
+
),
|
|
1134
|
+
).toMatchInlineSnapshot(`
|
|
1135
|
+
"
|
|
1136
|
+
@mcp.tool
|
|
1137
|
+
^^^
|
|
1138
|
+
def roll_dice():
|
|
1139
|
+
pass
|
|
1140
|
+
|
|
1141
|
+
async with client:
|
|
1142
|
+
^^^^^^
|
|
1143
|
+
for tool in await client.list_tools():
|
|
1144
|
+
^^^^^^
|
|
1145
|
+
print(tool)
|
|
1146
|
+
"
|
|
1147
|
+
`);
|
|
1148
|
+
});
|
|
1149
|
+
|
|
1150
|
+
test("should not highlight property name matching a global variable", () => {
|
|
1151
|
+
// `tool` is a global variable, but `mcp.tool` should not highlight `tool`
|
|
1152
|
+
// because it's a property access, not a variable reference.
|
|
1153
|
+
expect(
|
|
1154
|
+
runHighlight(
|
|
1155
|
+
["mcp", "tool"],
|
|
1156
|
+
`
|
|
1157
|
+
@mcp.tool
|
|
1158
|
+
def roll_dice():
|
|
1159
|
+
pass
|
|
1160
|
+
`,
|
|
1161
|
+
),
|
|
1162
|
+
).toMatchInlineSnapshot(`
|
|
1163
|
+
"
|
|
1164
|
+
@mcp.tool
|
|
1165
|
+
^^^
|
|
1166
|
+
def roll_dice():
|
|
1167
|
+
pass
|
|
1168
|
+
"
|
|
1169
|
+
`);
|
|
1170
|
+
});
|
|
1171
|
+
|
|
1118
1172
|
test("class property self-reference", () => {
|
|
1119
1173
|
expect(
|
|
1120
1174
|
runHighlight(
|
|
@@ -462,6 +462,7 @@ export function findReactiveVariables(options: {
|
|
|
462
462
|
): boolean {
|
|
463
463
|
return (
|
|
464
464
|
allVariableNames.has(varName) &&
|
|
465
|
+
!isPropertyAccess(cursor) &&
|
|
465
466
|
!isKeywordArgumentName(cursor) &&
|
|
466
467
|
!isAssignmentTarget(cursor)
|
|
467
468
|
);
|
|
@@ -529,6 +530,19 @@ function isAssignmentTarget(cursor: TreeCursor): boolean {
|
|
|
529
530
|
return false;
|
|
530
531
|
}
|
|
531
532
|
|
|
533
|
+
/** Checks whether a `VariableName` is a property access (e.g. `tool` in `mcp.tool`). */
|
|
534
|
+
function isPropertyAccess(cursor: TreeCursor): boolean {
|
|
535
|
+
// Check if the previous sibling is a "." node, which means this
|
|
536
|
+
// VariableName is a property access rather than a standalone variable.
|
|
537
|
+
// This handles both MemberExpression (e.g. `obj.attr`) and Decorator
|
|
538
|
+
// (e.g. `@mcp.tool`) where the parser emits flat sibling nodes.
|
|
539
|
+
const temp = cursor.node.cursor();
|
|
540
|
+
if (temp.prevSibling() && temp.name === ".") {
|
|
541
|
+
return true;
|
|
542
|
+
}
|
|
543
|
+
return false;
|
|
544
|
+
}
|
|
545
|
+
|
|
532
546
|
/**
|
|
533
547
|
* Checks if the syntax tree contains any syntax errors.
|
|
534
548
|
* If there are errors, we shouldn't show reactive variable highlighting.
|
package/src/core/dom/outline.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
2
|
|
|
3
|
-
import { sanitizeHtml } from "@/plugins/core/sanitize";
|
|
3
|
+
import { sanitizeHtml } from "@/plugins/core/sanitize-html";
|
|
4
4
|
import { invariant } from "@/utils/invariant";
|
|
5
5
|
import { Logger } from "@/utils/Logger";
|
|
6
6
|
import type { Outline, OutlineItem } from "../cells/outline";
|
|
@@ -142,6 +142,14 @@ const DEFAULT_HOT_KEY = {
|
|
|
142
142
|
group: "Editing",
|
|
143
143
|
key: "Mod-Shift-m",
|
|
144
144
|
},
|
|
145
|
+
"cell.viewAsSQL": {
|
|
146
|
+
name: "Toggle SQL",
|
|
147
|
+
group: "Editing",
|
|
148
|
+
key: {
|
|
149
|
+
windows: "Alt-Shift-l",
|
|
150
|
+
main: "Mod-Shift-l",
|
|
151
|
+
},
|
|
152
|
+
},
|
|
145
153
|
"cell.complete": {
|
|
146
154
|
name: "Code completion",
|
|
147
155
|
group: "Editing",
|
package/src/css/md.css
CHANGED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
+
import DOMPurify, { type Config } from "dompurify";
|
|
3
|
+
|
|
4
|
+
// preserve target=_blank https://github.com/cure53/DOMPurify/issues/317#issuecomment-912474068
|
|
5
|
+
const TEMPORARY_ATTRIBUTE = "data-temp-href-target";
|
|
6
|
+
DOMPurify.addHook("beforeSanitizeAttributes", (node) => {
|
|
7
|
+
if (node.tagName === "A") {
|
|
8
|
+
if (!node.hasAttribute("target")) {
|
|
9
|
+
node.setAttribute("target", "_self");
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
if (node.hasAttribute("target")) {
|
|
13
|
+
node.setAttribute(TEMPORARY_ATTRIBUTE, node.getAttribute("target") || "");
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
DOMPurify.addHook("afterSanitizeAttributes", (node) => {
|
|
19
|
+
if (node.tagName === "A" && node.hasAttribute(TEMPORARY_ATTRIBUTE)) {
|
|
20
|
+
node.setAttribute("target", node.getAttribute(TEMPORARY_ATTRIBUTE) || "");
|
|
21
|
+
node.removeAttribute(TEMPORARY_ATTRIBUTE);
|
|
22
|
+
if (node.getAttribute("target") === "_blank") {
|
|
23
|
+
node.setAttribute("rel", "noopener noreferrer");
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* This removes script tags, form tags, iframe tags, and other potentially dangerous tags
|
|
30
|
+
*/
|
|
31
|
+
export function sanitizeHtml(html: string) {
|
|
32
|
+
const sanitizationOptions: Config = {
|
|
33
|
+
// Default to permit HTML, SVG and MathML, this limits to HTML only
|
|
34
|
+
USE_PROFILES: { html: true, svg: true, mathMl: true },
|
|
35
|
+
// Allow SVG <use> elements and their href attributes, which are needed
|
|
36
|
+
// for SVGs that reference <defs> (e.g., Matplotlib SVG output).
|
|
37
|
+
ADD_TAGS: ["use"],
|
|
38
|
+
ADD_ATTR: ["href", "xlink:href"],
|
|
39
|
+
// glue elements like style, script or others to document.body and prevent unintuitive browser behavior in several edge-cases
|
|
40
|
+
FORCE_BODY: true,
|
|
41
|
+
CUSTOM_ELEMENT_HANDLING: {
|
|
42
|
+
tagNameCheck: /^(marimo-[A-Za-z][\w-]*|iconify-icon)$/,
|
|
43
|
+
attributeNameCheck: /^[A-Za-z][\w-]*$/,
|
|
44
|
+
},
|
|
45
|
+
// This flag means we should sanitize such that is it safe for XML,
|
|
46
|
+
// but this is only used for HTML content.
|
|
47
|
+
SAFE_FOR_XML: !html.includes("marimo-mermaid"),
|
|
48
|
+
};
|
|
49
|
+
return DOMPurify.sanitize(html, sanitizationOptions);
|
|
50
|
+
}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
-
import DOMPurify, { type Config } from "dompurify";
|
|
3
2
|
import { atom, useAtomValue } from "jotai";
|
|
4
3
|
import { hasRunAnyCellAtom } from "@/components/editor/cell/useRunCells";
|
|
5
4
|
import { autoInstantiateAtom } from "@/core/config/config";
|
|
6
5
|
import { getInitialAppMode } from "@/core/mode";
|
|
7
6
|
|
|
7
|
+
// Re-export so existing consumers don't break.
|
|
8
|
+
export { sanitizeHtml } from "./sanitize-html";
|
|
9
|
+
|
|
8
10
|
/**
|
|
9
11
|
* Whether to sanitize the html.
|
|
10
12
|
* When running as an app or with auto_instantiate enabled
|
|
@@ -42,51 +44,3 @@ const sanitizeHtmlAtom = atom<boolean>((get) => {
|
|
|
42
44
|
export function useSanitizeHtml() {
|
|
43
45
|
return useAtomValue(sanitizeHtmlAtom);
|
|
44
46
|
}
|
|
45
|
-
|
|
46
|
-
// preserve target=_blank https://github.com/cure53/DOMPurify/issues/317#issuecomment-912474068
|
|
47
|
-
const TEMPORARY_ATTRIBUTE = "data-temp-href-target";
|
|
48
|
-
DOMPurify.addHook("beforeSanitizeAttributes", (node) => {
|
|
49
|
-
if (node.tagName === "A") {
|
|
50
|
-
if (!node.hasAttribute("target")) {
|
|
51
|
-
node.setAttribute("target", "_self");
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
if (node.hasAttribute("target")) {
|
|
55
|
-
node.setAttribute(TEMPORARY_ATTRIBUTE, node.getAttribute("target") || "");
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
DOMPurify.addHook("afterSanitizeAttributes", (node) => {
|
|
61
|
-
if (node.tagName === "A" && node.hasAttribute(TEMPORARY_ATTRIBUTE)) {
|
|
62
|
-
node.setAttribute("target", node.getAttribute(TEMPORARY_ATTRIBUTE) || "");
|
|
63
|
-
node.removeAttribute(TEMPORARY_ATTRIBUTE);
|
|
64
|
-
if (node.getAttribute("target") === "_blank") {
|
|
65
|
-
node.setAttribute("rel", "noopener noreferrer");
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* This removes script tags, form tags, iframe tags, and other potentially dangerous tags
|
|
72
|
-
*/
|
|
73
|
-
export function sanitizeHtml(html: string) {
|
|
74
|
-
const sanitizationOptions: Config = {
|
|
75
|
-
// Default to permit HTML, SVG and MathML, this limits to HTML only
|
|
76
|
-
USE_PROFILES: { html: true, svg: true, mathMl: true },
|
|
77
|
-
// Allow SVG <use> elements and their href attributes, which are needed
|
|
78
|
-
// for SVGs that reference <defs> (e.g., Matplotlib SVG output).
|
|
79
|
-
ADD_TAGS: ["use"],
|
|
80
|
-
ADD_ATTR: ["href", "xlink:href"],
|
|
81
|
-
// glue elements like style, script or others to document.body and prevent unintuitive browser behavior in several edge-cases
|
|
82
|
-
FORCE_BODY: true,
|
|
83
|
-
CUSTOM_ELEMENT_HANDLING: {
|
|
84
|
-
tagNameCheck: /^(marimo-[A-Za-z][\w-]*|iconify-icon)$/,
|
|
85
|
-
attributeNameCheck: /^[A-Za-z][\w-]*$/,
|
|
86
|
-
},
|
|
87
|
-
// This flag means we should sanitize such that is it safe for XML,
|
|
88
|
-
// but this is only used for HTML content.
|
|
89
|
-
SAFE_FOR_XML: !html.includes("marimo-mermaid"),
|
|
90
|
-
};
|
|
91
|
-
return DOMPurify.sanitize(html, sanitizationOptions);
|
|
92
|
-
}
|