@marimo-team/islands 0.16.4 → 0.17.0
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/{ConnectedDataExplorerComponent-CCjhPKMy.js → ConnectedDataExplorerComponent-DJEUH6Bb.js} +78 -100
- package/dist/{_baseIsEqual-oN7pRNcM.js → _baseIsEqual-CN4oFUZ4.js} +20 -20
- package/dist/{_basePickBy-CYvzhRjy.js → _basePickBy-CzSvE_-f.js} +3 -3
- package/dist/{_baseProperty-DGUdIBuu.js → _baseProperty-DbbUiyUD.js} +5 -5
- package/dist/{_baseUniq-B5gfSl8S.js → _baseUniq-DwoC-LVO.js} +4 -4
- package/dist/any-language-editor-CEXn1vFs.js +156 -0
- package/dist/apl-DuVfHsPc.js +4 -0
- package/dist/architecture-O4VJ6CD3-lp-opOaL.js +21 -0
- package/dist/{architectureDiagram-W76B3OCA-DkEhipkW.js → architectureDiagram-W76B3OCA-CoBORy6u.js} +34 -34
- package/dist/asciiarmor-qIVWsi4F.js +4 -0
- package/dist/asn1-BjPqARr7.js +4 -0
- package/dist/assets/__vite-browser-external-lX-sn9m2.js +1 -0
- package/dist/assets/worker-vPn7gxWj.js +54 -0
- package/dist/{blockDiagram-QIGZ2CNN-DZOqLMYa.js → blockDiagram-QIGZ2CNN-0yzoLIar.js} +75 -86
- package/dist/brainfuck-DPGTVfkE.js +4 -0
- package/dist/{button-CEcjneWG.js → button-DcnBVpVa.js} +11 -14
- package/dist/{c4Diagram-FPNF74CW-DVaR7c9q.js → c4Diagram-FPNF74CW-CKsIA_DD.js} +27 -51
- package/dist/{channel-Uh0KpgGW.js → channel-3LVvQZcD.js} +1 -1
- package/dist/{check-BK9zDfQk.js → check-D7ifz5op.js} +1 -1
- package/dist/{chunk-3AY6CYHV-Dk2R2-S1.js → chunk-3AY6CYHV-B2C-aVc3.js} +35 -35
- package/dist/{chunk-4BX2VUAB-CqO6zUIz.js → chunk-4BX2VUAB-DEd4VI9L.js} +1 -1
- package/dist/{chunk-4KMFLZZN-CloTfTwP.js → chunk-4KMFLZZN-DnvP3O4K.js} +216 -325
- package/dist/{chunk-55IACEB6-I0rmqTua.js → chunk-55IACEB6-BcCzwOOl.js} +1 -1
- package/dist/{chunk-6OXUPJBA-BuROSTmo.js → chunk-6OXUPJBA-eNAAfJ3Q.js} +7 -7
- package/dist/{chunk-7GE3RBXV-B1-tsIPP.js → chunk-7GE3RBXV-CSAeQvLz.js} +1 -1
- package/dist/{chunk-ABZYJK2D-CLlso8tj.js → chunk-ABZYJK2D-CZcb_1iM.js} +16 -20
- package/dist/{chunk-BN7GFLIU-Db2-FjLn.js → chunk-BN7GFLIU-pBc5O5Rh.js} +1 -1
- package/dist/{chunk-CVBHYZKI-BONeiloK.js → chunk-CVBHYZKI-CivHZg9P.js} +3 -3
- package/dist/{chunk-CXMOBAN2-U9GJSP1d.js → chunk-CXMOBAN2-Dd0E6qb0.js} +46 -54
- package/dist/chunk-EXTU4WIE-GQ2ZWfJo.js +10 -0
- package/dist/{chunk-FMBD7UC4-DyV3BR_I.js → chunk-FMBD7UC4-C6YcisV6.js} +1 -1
- package/dist/{chunk-JA3XYJ7Z-C9A1076P.js → chunk-JA3XYJ7Z-DYeQaT57.js} +21 -25
- package/dist/{chunk-JEIROHC2-BGnFkSVq.js → chunk-JEIROHC2-B-EZMP4V.js} +1 -1
- package/dist/{chunk-K7UQS3LO-033LOsjK.js → chunk-K7UQS3LO-DENzlS-M.js} +7 -7
- package/dist/{chunk-KMC2YHZD-DT4Sq4Ld.js → chunk-KMC2YHZD-SckhHdEh.js} +1 -1
- package/dist/{chunk-QN33PNHL-gs44MZla.js → chunk-QN33PNHL-Cjq5b604.js} +2 -2
- package/dist/{chunk-QYVHNE3D-B8BO1AnT.js → chunk-QYVHNE3D-CNUuivie.js} +3 -4
- package/dist/{chunk-QZHKN3VN-CeN_GkU6.js → chunk-QZHKN3VN-DugEU_bA.js} +1 -1
- package/dist/chunk-S3R3BYOJ-itCT6Vif.js +380 -0
- package/dist/{chunk-T44TD3VJ-BwzD6YE0.js → chunk-T44TD3VJ-BLdfTX8J.js} +1 -1
- package/dist/{chunk-TVAH2DTR-Bi6jpQJQ.js → chunk-TVAH2DTR-BOnwF9d8.js} +7 -8
- package/dist/{chunk-TZMSLE5B-D8klz2H_.js → chunk-TZMSLE5B-DGs66AlL.js} +4 -5
- package/dist/{chunk-WFRQ32O7-CzSwSlN0.js → chunk-WFRQ32O7-CPsipkmJ.js} +1 -1
- package/dist/{chunk-WFWHJNB7-DN_cavM6.js → chunk-WFWHJNB7-Cmed18Pk.js} +1 -1
- package/dist/{chunk-XRWGC2XP-Bb5eGNM2.js → chunk-XRWGC2XP-DH5GDaY8.js} +1 -1
- package/dist/{chunk-ZPAFE4SF-S5UYNb0V.js → chunk-ZPAFE4SF-DPDwaqZm.js} +22 -22
- package/dist/classDiagram-KNZD7YFC-azuS_99k.js +39 -0
- package/dist/classDiagram-v2-RKCZMP56-CQpyQQOR.js +39 -0
- package/dist/{click-outside-container-DE4e7p1p.js → click-outside-container-CL_FkgGY.js} +7 -12
- package/dist/{clike-CxAz4p9E.js → clike-DYfRWWXk.js} +1 -1
- package/dist/{clike-Cg_DBrJ0.js → clike-bzZTreP4.js} +1 -1
- package/dist/clojure-ATksAecl.js +4 -0
- package/dist/{clone-Dk4FkKH0.js → clone-Msbhmn2a.js} +1 -1
- package/dist/cmake-CWylaz2C.js +4 -0
- package/dist/cobol-BiLLCZIQ.js +4 -0
- package/dist/coffeescript-Ca4jipi8.js +4 -0
- package/dist/commonlisp-BwFjyEC7.js +4 -0
- package/dist/{constants-Cjd_3kwd.js → constants-BCOEQoEQ.js} +3 -3
- package/dist/{copy-C5RFg7ok.js → copy-BkZ8PkBM.js} +6 -2
- package/dist/{cose-bilkent-S5V4N54A-B3iOTGu5.js → cose-bilkent-S5V4N54A-BZnbwyVD.js} +20 -20
- package/dist/crystal-BhUsQHbh.js +4 -0
- package/dist/css-Cf4wlIyV.js +5 -0
- package/dist/cypher-Dj8Hzgxa.js +4 -0
- package/dist/{cytoscape.esm-DTDV0Nbj.js → cytoscape.esm-BTpRoPd2.js} +586 -661
- package/dist/d-DZI7tbTy.js +4 -0
- package/dist/{dagre-5GWH7T2D-KM4Z11yT.js → dagre-5GWH7T2D-BGaiSZZO.js} +32 -37
- package/dist/{dagre-B0u1urxE.js → dagre-pyfDIOWJ.js} +57 -76
- package/dist/data-grid-overlay-editor-867aBz0Y.js +133 -0
- package/dist/{diagram-N5W7TBWH-CtO7az4G.js → diagram-N5W7TBWH-CzLE0jZB.js} +35 -51
- package/dist/diagram-QEK2KX5R-AGS60xEZ.js +245 -0
- package/dist/{diagram-S2PKOQOG-CiXElLNQ.js → diagram-S2PKOQOG-BxRoG6yW.js} +28 -28
- package/dist/diff-WQISUHG5.js +4 -0
- package/dist/{dist-CdE2C2In.js → dist-2Ne-33Xy.js} +15 -20
- package/dist/{dist-DKFaZRVk.js → dist-B0YD1aXi.js} +2 -2
- package/dist/{dist-DBhzmFyH.js → dist-B1Dv8Sdk.js} +3 -3
- package/dist/{dist-CGIZPq3J.js → dist-BFkr6kAQ.js} +2 -2
- package/dist/{dist-DL_ci7Yc.js → dist-BL2DSY0P.js} +1 -1
- package/dist/dist-BawZu0ix.js +10 -0
- package/dist/{dist-Bar1QnNM.js → dist-BhVFggab.js} +3 -3
- package/dist/{textile-Cy55fYGC.js → dist-BiOF7987.js} +4 -2
- package/dist/{dist-BQmQQqFH.js → dist-BpzZrRd6.js} +1 -1
- package/dist/{dist-CxD5E6Sh.js → dist-C7zhQ7K0.js} +24 -22
- package/dist/{dist-BqgkUnEN.js → dist-CBhnQKQ4.js} +3 -3
- package/dist/{dist-Dzk1C8l5.js → dist-CId4IPXu.js} +10 -13
- package/dist/{dist-CUnh_3Ii.js → dist-CYhQCVru.js} +2 -2
- package/dist/{dist-BBlFk9ki.js → dist-CZq5-ZyD.js} +1 -1
- package/dist/{dist-elblfNXO.js → dist-Cacac5HV.js} +2 -2
- package/dist/{dist-CChOkSUg.js → dist-CfQHSIQC.js} +3 -3
- package/dist/{dist-JCAky9ND.js → dist-CkvGMBAS.js} +17 -22
- package/dist/dist-Cs3McXEj.js +6 -0
- package/dist/{dist-o7fhJC7U.js → dist-CvyfRaIr.js} +3 -3
- package/dist/{dist-CZfRM7pE.js → dist-D-3fICwh.js} +2 -2
- package/dist/dist-D3aaithT.js +6 -0
- package/dist/{dist-CutXTm8t.js → dist-DBhEu3-F.js} +1 -1
- package/dist/dist-DELcMSpJ.js +6 -0
- package/dist/{dist-C7ASiFxI.js → dist-DMxl6Qbu.js} +273 -263
- package/dist/{dist-CLvpViod.js → dist-DS6nuHYK.js} +2 -3
- package/dist/dist-Dgts3WXd.js +6 -0
- package/dist/{dist--I6Htnlv.js → dist-DlHkZUnY.js} +5 -5
- package/dist/dist-Doiq_KIP.js +15 -0
- package/dist/dist-DtpUiDG_.js +6 -0
- package/dist/{dist-DzOpMdwb.js → dist-NUdHX0XE.js} +4 -4
- package/dist/{dist-C3WYsf4K.js → dist-PGgOcwbF.js} +4 -10
- package/dist/{dist-DNnYAdRE.js → dist-RdxOJbBw.js} +2 -2
- package/dist/{dist-BEvIw5Nh.js → dist-RwqAqkpG.js} +1 -1
- package/dist/dist-ZjnJq_jD.js +10 -0
- package/dist/{dist-CbRkrKrP.js → dist-biZ846D9.js} +5 -5
- package/dist/{dist-DW9er3Zq.js → dist-d5NxvX2s.js} +44 -23
- package/dist/{dist-C3QUag__.js → dist-ivwkJchV.js} +3 -3
- package/dist/dist-mof3iuBu.js +12 -0
- package/dist/{dist-Cib4sGDA.js → dist-reo2kYlN.js} +2 -2
- package/dist/{dist-BZBitvuL.js → dist-wHVprCkn.js} +1 -1
- package/dist/{dist-C5zMs_n5.js → dist-y8uoXYaE.js} +3 -3
- package/dist/{dist-DPF5TTUg.js → dist-z_iuDES7.js} +126 -115
- package/dist/{dockerfile-Dum_1b-5.js → dockerfile-sZMPcXVY.js} +1 -1
- package/dist/dtd-B2M8dhfC.js +4 -0
- package/dist/dylan-CU3Vt8SC.js +4 -0
- package/dist/ecl-B8ESAVq4.js +4 -0
- package/dist/eiffel-DDfMIKeA.js +4 -0
- package/dist/elm-Bj6rj8jf.js +4 -0
- package/dist/{erDiagram-AWTI2OKA-ZTIl9iQO.js → erDiagram-AWTI2OKA-CTxzb-U8.js} +20 -20
- package/dist/erlang-BxyshZUq.js +4 -0
- package/dist/{error-banner-OQIGTqFR.js → error-banner-npbEfanI.js} +13 -13
- package/dist/{esm-DxFkg7a6.js → esm-BdiY4QsX.js} +1528 -1492
- package/dist/{esm-d0g2RsOH.js → esm-CAWW9sum.js} +6 -8
- package/dist/{esm-1_Mp6VD2.js → esm-YY5zh7KV.js} +324 -395
- package/dist/{esm-BO9n_s6u.js → esm-svAVli9f.js} +5 -5
- package/dist/{factor-CdgiDGiu.js → factor-CRFTmP_a.js} +1 -1
- package/dist/factor-CYk6XT8r.js +5 -0
- package/dist/{flowDiagram-PVAE7QVJ-DsbofOzu.js → flowDiagram-PVAE7QVJ-Dck2hiJe.js} +22 -22
- package/dist/{formats-D5C6JAJf.js → formats-BnqXUb1V.js} +13 -17
- package/dist/forth-fcoJkd-f.js +4 -0
- package/dist/fortran-IxZHu4wc.js +4 -0
- package/dist/{fullscreen-D1yTiBlu.js → fullscreen-blsKUrtN.js} +741 -744
- package/dist/{ganttDiagram-OWAHRB6G-FnCH1Yj3.js → ganttDiagram-OWAHRB6G-AWzfzpup.js} +9 -9
- package/dist/gas-B8rmKcim.js +4 -0
- package/dist/gherkin-BTm-jIdJ.js +4 -0
- package/dist/gitGraph-ZV4HHKMB-DFg_OLQb.js +21 -0
- package/dist/{gitGraphDiagram-NY62KEGX-B0wvMNqU.js → gitGraphDiagram-NY62KEGX-GyNboWSV.js} +31 -34
- package/dist/{glide-data-editor-CYfKmSNp.js → glide-data-editor-DHuN8kQ8.js} +1701 -1771
- package/dist/{graphlib-BGmr7CYF.js → graphlib-hb3zmtVD.js} +5 -5
- package/dist/groovy-01kRHFMD.js +4 -0
- package/dist/haskell-B3PhE05w.js +4 -0
- package/dist/haxe-DEoAm8oA.js +5 -0
- package/dist/{hotkeys-yFrUwyJK.js → hotkeys-Ct2T3e9O.js} +4 -7
- package/dist/idl-DsDJU9cV.js +4 -0
- package/dist/info-63CPKGFF-D3DZmDBa.js +21 -0
- package/dist/infoDiagram-STP46IZ2-ec08vi_U.js +44 -0
- package/dist/{isArrayLikeObject-DiDsNamC.js → isArrayLikeObject-BlvK28do.js} +3 -5
- package/dist/{isEmpty-BBG-u1GM.js → isEmpty--odfYjh1.js} +2 -2
- package/dist/{isSymbol-BxF-_8BA.js → isSymbol-Cb1f2HgO.js} +1 -1
- package/dist/{javascript-Dfq1qI35.js → javascript-BfCTmOnk.js} +2 -2
- package/dist/javascript-gwczVhuU.js +5 -0
- package/dist/jinja2-AkZRdFk3.js +4 -0
- package/dist/{journeyDiagram-BIP6EPQ6-B3PotfAW.js → journeyDiagram-BIP6EPQ6-TmXYCUbT.js} +23 -24
- package/dist/julia-_s6qe3bf.js +4 -0
- package/dist/{kanban-definition-6OIFK2YF-BTrQZ3LN.js → kanban-definition-6OIFK2YF-B6ozleHo.js} +15 -15
- package/dist/{katex-dN__NFdn.js → katex-mPzRsXEy.js} +1 -1
- package/dist/{katex-BE4xflfm.js → katex-mkWmhPUh.js} +149 -173
- package/dist/{label-BinTsX-u.js → label-VVRKZmrP.js} +21 -24
- package/dist/{linear-DyTdUIqX.js → linear-iebAbJVD.js} +1 -1
- package/dist/livescript-CwPHQdv5.js +4 -0
- package/dist/{loader-Dijti3y4.js → loader-CM0VALo9.js} +19 -26
- package/dist/lua-s7nRxkCP.js +4 -0
- package/dist/main.js +8234 -8633
- package/dist/{marked.esm-3RjvXPoO.js → marked.esm-DJM8la36.js} +5 -5
- package/dist/mathematica-Ci36yd1q.js +4 -0
- package/dist/mbox-DbOYMNCO.js +4 -0
- package/dist/{memoize-Dq87l1O_.js → memoize-DYoRBSLn.js} +1 -1
- package/dist/{merge-BPDCIm8P.js → merge-BjuR6j_w.js} +1 -1
- package/dist/{mermaid-BlJDcO4M.js → mermaid-YPPMBmhk.js} +58 -76
- package/dist/{mermaid-parser.core-CSFx6MQ7.js → mermaid-parser.core-BLkyTSZj.js} +8 -8
- package/dist/{mhchem-DZ68WS0G.js → mhchem-Dw7wvXtr.js} +1 -1
- package/dist/{min-BzhKOmZo.js → min-B_i2ahn4.js} +7 -7
- package/dist/{mindmap-definition-Q6HEUPPD-9hhnrO1k.js → mindmap-definition-Q6HEUPPD-F6-JnXwq.js} +17 -17
- package/dist/mirc-VmNe8AwF.js +4 -0
- package/dist/mllike-BdD7SJEa.js +6 -0
- package/dist/modelica-BA4VqzC3.js +4 -0
- package/dist/mscgen-DF-5WHJm.js +6 -0
- package/dist/mumps-c_Uia_QN.js +4 -0
- package/dist/{node-sql-parser-13oju30e.js → node-sql-parser-BqKV-TpL.js} +14343 -14351
- package/dist/{now-DVBcRCoE.js → now-CwRqw0nS.js} +1 -1
- package/dist/nsis-BAANGODV.js +5 -0
- package/dist/{nsis-BW6_XagK.js → nsis-BWJEeUyS.js} +1 -1
- package/dist/ntriples-Bslqh2Ki.js +4 -0
- package/dist/{number-overlay-editor-D1YdiOrm.js → number-overlay-editor-CeyruAX4.js} +17 -23
- package/dist/octave-DYn5ltia.js +4 -0
- package/dist/oz-B_N-StZq.js +4 -0
- package/dist/packet-HUATNLJX-CkqjFdAv.js +21 -0
- package/dist/pascal-DU4CtAUu.js +4 -0
- package/dist/perl-Bae6k32u.js +4 -0
- package/dist/pie-WTHONI2E-D0rWwX5P.js +21 -0
- package/dist/{pieDiagram-ADFJNKIX-CSBC0ZgF.js → pieDiagram-ADFJNKIX-C5dSQVCn.js} +28 -28
- package/dist/pig-DSIxUEgX.js +4 -0
- package/dist/powershell-31lcPgIF.js +4 -0
- package/dist/powershell-BZx53Ujw.js +236 -0
- package/dist/properties-lmYbntDG.js +4 -0
- package/dist/protobuf-BTYoCEpV.js +4 -0
- package/dist/pug-DMFM7zzO.js +5 -0
- package/dist/{pug-Bmups_z0.js → pug-PJh82u1M.js} +1 -1
- package/dist/puppet-B0ub07d-.js +4 -0
- package/dist/python-C4jT87Nt.js +5 -0
- package/dist/{q-BzWcnVri.js → q-CMoUHJ5Q.js} +3 -2
- package/dist/q-YbPYlqRI.js +4 -0
- package/dist/{quadrantDiagram-LMRXKWRM-h7nHf8xG.js → quadrantDiagram-LMRXKWRM-DlahxNiy.js} +7 -7
- package/dist/r-OfNu6HAI.js +4 -0
- package/dist/radar-NJJJXTRR-Bxqv4O5a.js +21 -0
- package/dist/{range-CgK0-PEw.js → range-DxfkexCE.js} +3 -3
- package/dist/{react-plotly-BZakcxdv.js → react-plotly-D_IAfR8f.js} +4364 -4705
- package/dist/{requirementDiagram-4UW4RH46-BGEurQYq.js → requirementDiagram-4UW4RH46-DTkinyvU.js} +17 -17
- package/dist/rpm-D_3b5peD.js +5 -0
- package/dist/ruby-CehsJy_T.js +4 -0
- package/dist/{sankeyDiagram-GR3RE2ED-CxeJ_jfl.js → sankeyDiagram-GR3RE2ED-CsLnEnnq.js} +3 -3
- package/dist/sas-DwQHzPoF.js +4 -0
- package/dist/scheme-B6ArxiQu.js +4 -0
- package/dist/{sequenceDiagram-C3RYC4MD-CbFxwyr_.js → sequenceDiagram-C3RYC4MD-BdEOR6SC.js} +20 -30
- package/dist/shell-AHmQgDfc.js +4 -0
- package/dist/sieve-CgodKOcx.js +4 -0
- package/dist/{simple-mode-Cgyya8F-.js → simple-mode-BP3Jd4vf.js} +1 -1
- package/dist/{slides-component-BEyG25AH.js → slides-component-2bbal1YJ.js} +24 -46
- package/dist/smalltalk-BeFzDkbo.js +4 -0
- package/dist/sparql-BWxq-Lnx.js +4 -0
- package/dist/{src-BNNJRxz3.js → src-DZkaBUmt.js} +6 -6
- package/dist/{stateDiagram-KXAO66HF-A61bMf29.js → stateDiagram-KXAO66HF-DQLH2jhP.js} +39 -41
- package/dist/stateDiagram-v2-UMBNRL4Z-D9v8fKjF.js +38 -0
- package/dist/stex-Dvaq0qsm.js +5 -0
- package/dist/style.css +1 -1
- package/dist/stylus-Ge0ofWlZ.js +4 -0
- package/dist/swift-CjQfbVxV.js +4 -0
- package/dist/tcl-CAGDF11K.js +4 -0
- package/dist/textile-CrXreJtf.js +4 -0
- package/dist/{time-D3tzCqJ6.js → time-CFkXkVrt.js} +1 -1
- package/dist/{timeline-definition-XQNQX7LJ-BwdsB7CR.js → timeline-definition-XQNQX7LJ-bToVq14i.js} +4 -5
- package/dist/{timer-D3Zlu9ow.js → timer-CzOhIJuk.js} +2 -2
- package/dist/{toNumber-efKT08hh.js → toNumber-EFF1Z9T1.js} +2 -2
- package/dist/{toString-BvCd3yJc.js → toString-C2mCkasT.js} +2 -2
- package/dist/toml-AdLXKwEi.js +4 -0
- package/dist/{toml-CIUkU1CP.js → toml-eSl4PUAH.js} +6 -2
- package/dist/treemap-75Q7IDZK-Da9Jv6a_.js +21 -0
- package/dist/troff-C-LaM2ex.js +4 -0
- package/dist/ttcn-DTclUi6T.js +4 -0
- package/dist/ttcn-cfg-BtBPbmLX.js +4 -0
- package/dist/turtle-BODDDg5O.js +4 -0
- package/dist/{types-Dcb1hf55.js → types-CRXV0KD5.js} +385 -252
- package/dist/{useAsyncData-DAtPzJzP.js → useAsyncData-uMVTsDI9.js} +1 -1
- package/dist/{useDateFormatter-CiUlIu7v.js → useDateFormatter-Dcz7jstn.js} +6 -6
- package/dist/{useTheme-CmsvrO5o.js → useTheme-NbEx-ZNV.js} +14 -10
- package/dist/vb-Cb1HQHii.js +4 -0
- package/dist/vbscript-CpXOP4wZ.js +4 -0
- package/dist/{vega-component-B3LA6qbm.js → vega-component-hegVmfuS.js} +21 -21
- package/dist/{vega-loader.browser.module-Bi3ttvdj.js → vega-loader.browser.module-DcW8jnKp.js} +1 -2
- package/dist/velocity-Dz0rBQIk.js +4 -0
- package/dist/verilog-6Di9aLKw.js +4 -0
- package/dist/vhdl-BRNesXYc.js +4 -0
- package/dist/webidl-BpRNYIYn.js +4 -0
- package/dist/xquery-DXWcJ7b6.js +4 -0
- package/dist/{xychartDiagram-6GGTOJPD-BJRRi5HC.js → xychartDiagram-6GGTOJPD-C7Bhm_yt.js} +12 -13
- package/dist/yacas-DbSARPz4.js +4 -0
- package/dist/z80-DzslPj_l.js +4 -0
- package/dist/{zod-UPQf9SGn.js → zod-ChY6miG5.js} +71 -81
- package/package.json +12 -12
- package/src/__mocks__/requests.ts +2 -0
- package/src/__tests__/chat-history.test.ts +123 -0
- package/src/components/app-config/ai-config.tsx +23 -0
- package/src/components/app-config/mcp-config.tsx +42 -2
- package/src/components/app-config/user-config-form.tsx +29 -49
- package/src/components/chat/acp/__tests__/context-utils.test.ts +1 -1
- package/src/components/chat/acp/agent-panel.tsx +1 -1
- package/src/components/chat/acp/blocks.tsx +46 -53
- package/src/components/chat/acp/common.tsx +1 -1
- package/src/components/chat/acp/context-utils.ts +1 -1
- package/src/components/chat/acp/session-tabs.tsx +1 -1
- package/src/components/chat/chat-history-popover.tsx +125 -0
- package/src/components/chat/chat-history-utils.ts +69 -0
- package/src/components/chat/chat-panel.tsx +9 -57
- package/src/components/chat/chat-utils.ts +11 -4
- package/src/components/data-table/__tests__/header-items.test.tsx +117 -0
- package/src/components/data-table/column-header.tsx +4 -2
- package/src/components/data-table/columns.tsx +2 -1
- package/src/components/data-table/data-table.tsx +7 -2
- package/src/components/data-table/header-items.tsx +63 -10
- package/src/components/dependency-graph/custom-node.tsx +11 -11
- package/src/components/dependency-graph/elements.ts +9 -4
- package/src/components/dependency-graph/panels.tsx +6 -4
- package/src/components/editor/Output.tsx +6 -1
- package/src/components/editor/__tests__/data-attributes.test.tsx +1 -1
- package/src/components/editor/actions/useNotebookActions.tsx +2 -4
- package/src/components/editor/ai/__tests__/completion-utils.test.ts +23 -31
- package/src/components/editor/ai/ai-completion-editor.tsx +135 -5
- package/src/components/editor/ai/completion-handlers.tsx +106 -22
- package/src/components/editor/cell/CreateCellButton.tsx +14 -2
- package/src/components/editor/cell/code/cell-editor.tsx +6 -0
- package/src/components/editor/chrome/panels/cache-panel.tsx +216 -0
- package/src/components/editor/chrome/panels/empty-state.tsx +3 -1
- package/src/components/editor/chrome/types.ts +66 -22
- package/src/components/editor/chrome/wrapper/app-chrome.tsx +2 -0
- package/src/components/editor/database/schemas.ts +2 -10
- package/src/components/editor/errors/auto-fix.tsx +138 -32
- package/src/components/editor/errors/fix-mode.ts +15 -0
- package/src/components/editor/navigation/__tests__/clipboard.test.ts +0 -5
- package/src/components/editor/navigation/clipboard.ts +2 -1
- package/src/components/editor/{Cell.tsx → notebook-cell.tsx} +25 -8
- package/src/components/editor/output/ConsoleOutput.tsx +27 -33
- package/src/components/editor/output/JsonOutput.tsx +9 -0
- package/src/components/editor/output/MarimoErrorOutput.tsx +4 -34
- package/src/components/editor/output/MarimoTracebackOutput.tsx +10 -7
- package/src/components/editor/output/__tests__/json-output.test.ts +43 -0
- package/src/components/editor/package-alert.tsx +3 -0
- package/src/components/editor/renderers/{CellArray.tsx → cell-array.tsx} +1 -1
- package/src/components/forms/__tests__/form-utils.test.ts +6 -4
- package/src/components/icons/copy-icon.tsx +11 -5
- package/src/components/mcp/hooks.ts +48 -0
- package/src/components/mcp/mcp-status-indicator.tsx +144 -0
- package/src/components/shortcuts/renderShortcut.tsx +3 -1
- package/src/components/ui/button.tsx +2 -0
- package/src/components/ui/confirmation-button.tsx +85 -0
- package/src/components/ui/number-field.tsx +4 -1
- package/src/components/ui/switch.tsx +2 -0
- package/src/core/ai/context/providers/__tests__/__snapshots__/tables.test.ts.snap +13 -19
- package/src/core/ai/context/providers/__tests__/cell-output.test.ts +0 -1
- package/src/core/ai/context/providers/__tests__/datasource.test.ts +14 -7
- package/src/core/ai/context/providers/__tests__/error.test.ts +24 -15
- package/src/core/ai/context/providers/cell-output.ts +5 -5
- package/src/core/ai/context/providers/common.ts +13 -4
- package/src/core/ai/context/providers/datasource.ts +56 -21
- package/src/core/ai/context/providers/error.ts +3 -4
- package/src/core/ai/context/providers/file.ts +2 -2
- package/src/core/ai/context/providers/tables.ts +36 -8
- package/src/core/ai/context/providers/variable.ts +2 -3
- package/src/core/ai/state.ts +6 -3
- package/src/core/ai/tools/__tests__/registry.test.ts +33 -8
- package/src/core/ai/tools/base.ts +81 -1
- package/src/core/ai/tools/registry.ts +36 -10
- package/src/core/ai/tools/sample-tool.ts +44 -8
- package/src/core/cache/requests.ts +5 -0
- package/src/core/cells/__tests__/cells.test.ts +6 -6
- package/src/core/cells/cells.ts +13 -14
- package/src/core/cells/scrollCellIntoView.ts +1 -1
- package/src/core/codemirror/__tests__/__snapshots__/setup.test.ts.snap +2 -0
- package/src/core/codemirror/__tests__/replace-editor-content.test.ts +336 -0
- package/src/core/codemirror/__tests__/setup.test.ts +1 -0
- package/src/core/codemirror/cm.ts +3 -2
- package/src/core/codemirror/find-replace/navigate.ts +2 -2
- package/src/core/codemirror/format.ts +2 -9
- package/src/core/codemirror/language/__tests__/sql.test.ts +24 -6
- package/src/core/codemirror/language/languages/python.ts +1 -3
- package/src/core/codemirror/language/languages/sql/sql.ts +23 -13
- package/src/core/codemirror/language/panel/panel.tsx +1 -6
- package/src/core/codemirror/language/utils.ts +3 -8
- package/src/core/codemirror/lsp/__tests__/notebook-lsp.test.ts +21 -14
- package/src/core/codemirror/lsp/federated-lsp.ts +20 -9
- package/src/core/codemirror/lsp/notebook-lsp.ts +35 -29
- package/src/core/codemirror/lsp/types.ts +0 -13
- package/src/core/codemirror/replace-editor-content.ts +87 -0
- package/src/core/config/__tests__/config-schema.test.ts +5 -0
- package/src/core/config/config-schema.ts +10 -0
- package/src/core/config/feature-flag.tsx +2 -6
- package/src/core/edit-app.tsx +1 -1
- package/src/core/errors/__tests__/errors.test.ts +1 -0
- package/src/core/errors/errors.ts +20 -6
- package/src/core/islands/bridge.ts +2 -0
- package/src/core/islands/main.ts +4 -0
- package/src/core/kernel/messages.ts +1 -0
- package/src/core/network/CachingRequestRegistry.ts +2 -2
- package/src/core/network/requests-network.ts +14 -0
- package/src/core/network/requests-static.ts +2 -0
- package/src/core/network/requests-toasting.ts +2 -0
- package/src/core/network/types.ts +5 -0
- package/src/core/saving/save-component.tsx +43 -36
- package/src/core/wasm/bridge.ts +2 -0
- package/src/core/websocket/useMarimoWebSocket.tsx +8 -0
- package/src/css/app/codemirror-completions.css +1 -1
- package/src/custom.d.ts +2 -0
- package/src/plugins/core/registerReactComponent.tsx +5 -1
- package/src/plugins/impl/DataTablePlugin.tsx +19 -19
- package/src/plugins/impl/__tests__/DateTimePickerPlugin.test.tsx +32 -0
- package/src/plugins/impl/chat/ChatPlugin.tsx +1 -1
- package/src/plugins/impl/chat/chat-ui.tsx +17 -2
- package/src/plugins/impl/chat/types.ts +1 -1
- package/src/plugins/impl/data-frames/DataFramePlugin.tsx +7 -2
- package/src/plugins/impl/plotly/__tests__/parse-from-template.test.ts +17 -0
- package/src/plugins/impl/plotly/parse-from-template.ts +2 -1
- package/src/stories/cell.stories.tsx +1 -1
- package/src/stories/layout/vertical/one-column.stories.tsx +1 -1
- package/src/utils/__tests__/formatting.test.ts +107 -0
- package/src/utils/__tests__/json-parser.test.ts +13 -0
- package/src/utils/copy.ts +6 -0
- package/src/utils/formatting.ts +51 -0
- package/src/utils/json/json-parser.ts +28 -3
- package/src/utils/numbers.ts +24 -1
- package/dist/any-language-editor-CVFQlioK.js +0 -156
- package/dist/apl-ChlaBfxB.js +0 -4
- package/dist/architecture-O4VJ6CD3-BVeaxUcM.js +0 -21
- package/dist/asciiarmor-CcJmm3l_.js +0 -4
- package/dist/asn1-ThRYxoBE.js +0 -4
- package/dist/assets/__vite-browser-external-BeNtI_tJ.js +0 -1
- package/dist/assets/worker-DnuXpGWN.js +0 -54
- package/dist/brainfuck-CEM0JgDn.js +0 -4
- package/dist/chunk-EXTU4WIE-DECT9AAK.js +0 -14
- package/dist/chunk-S3R3BYOJ-DMQ1yeyq.js +0 -386
- package/dist/classDiagram-KNZD7YFC-BG53O6Jt.js +0 -39
- package/dist/classDiagram-v2-RKCZMP56-BmKILsGU.js +0 -39
- package/dist/clojure-B7RHyE9t.js +0 -4
- package/dist/cmake-TeTMP4I5.js +0 -4
- package/dist/cobol-DI-mxUER.js +0 -4
- package/dist/coffeescript-DHUFLqWp.js +0 -4
- package/dist/commonlisp-SLiUrh1m.js +0 -4
- package/dist/crystal-B4fY1ZfJ.js +0 -4
- package/dist/css-Bdoq3TzK.js +0 -5
- package/dist/cypher-CBU182fp.js +0 -4
- package/dist/d-D8myDZeH.js +0 -4
- package/dist/data-grid-overlay-editor-qNmJk2x0.js +0 -135
- package/dist/diagram-QEK2KX5R-fu8Noi3H.js +0 -245
- package/dist/diff-DJF_UB7H.js +0 -4
- package/dist/dist-52-_pKoy.js +0 -6
- package/dist/dist-6DOMStFn.js +0 -6
- package/dist/dist-B334aW7p.js +0 -10
- package/dist/dist-BOI9lUz-.js +0 -12
- package/dist/dist-C06uhBzF.js +0 -6
- package/dist/dist-CGkpguCB.js +0 -6
- package/dist/dist-CrApzUED.js +0 -6
- package/dist/dist-Dp2GLdCl.js +0 -14
- package/dist/dist-WHFsbMDr.js +0 -6
- package/dist/dist-hyKcTPG9.js +0 -10
- package/dist/dtd-DY8q65lC.js +0 -4
- package/dist/dylan-CBLcjWCi.js +0 -4
- package/dist/ecl-BSXPNfOw.js +0 -4
- package/dist/eiffel-BJf0PQX-.js +0 -4
- package/dist/elm-DWQwPCZS.js +0 -4
- package/dist/erlang-BWBaGZ5e.js +0 -4
- package/dist/factor-DT1-MBPl.js +0 -5
- package/dist/forth-D9GDt3FB.js +0 -4
- package/dist/fortran-DHkRhDWw.js +0 -4
- package/dist/gas-7lQEOM0H.js +0 -4
- package/dist/gherkin-BLLyroYi.js +0 -4
- package/dist/gitGraph-ZV4HHKMB-z2v_cInC.js +0 -21
- package/dist/groovy-C-wabwj0.js +0 -4
- package/dist/haskell-DaxVQ_d1.js +0 -4
- package/dist/haxe-C2yLoC7h.js +0 -5
- package/dist/idl-DQBP8i7k.js +0 -4
- package/dist/info-63CPKGFF-GS4w6pCB.js +0 -21
- package/dist/infoDiagram-STP46IZ2-DE9YYPFg.js +0 -44
- package/dist/javascript-DRwFV9r5.js +0 -5
- package/dist/jinja2-CNoIpVmN.js +0 -4
- package/dist/julia-DXDf-GhP.js +0 -4
- package/dist/livescript-S2uhJQx7.js +0 -4
- package/dist/lua-Bvgs0y2G.js +0 -4
- package/dist/mathematica-D2zqfwIg.js +0 -4
- package/dist/mbox-SBcPaDuZ.js +0 -4
- package/dist/mirc-hkQc7sVF.js +0 -4
- package/dist/mllike-DRWPBlr9.js +0 -6
- package/dist/modelica-CO2ROGlP.js +0 -4
- package/dist/mscgen-BpX61bO6.js +0 -6
- package/dist/mumps-BCnFeIn6.js +0 -4
- package/dist/nsis-BaTOxlD1.js +0 -5
- package/dist/ntriples-zEo5BWjr.js +0 -4
- package/dist/octave-BE0RnCM9.js +0 -4
- package/dist/oz-C4_2Ttul.js +0 -4
- package/dist/packet-HUATNLJX-CjHqJIqk.js +0 -21
- package/dist/pascal-Q3jJucpw.js +0 -4
- package/dist/perl-DkXZIWHF.js +0 -4
- package/dist/pie-WTHONI2E-D67gLWtR.js +0 -21
- package/dist/pig-DCgEHdsu.js +0 -4
- package/dist/powershell-3rK_nRRJ.js +0 -236
- package/dist/powershell-Eo2-7MoM.js +0 -4
- package/dist/properties-C0IOX8WR.js +0 -4
- package/dist/protobuf--lGQUSRO.js +0 -4
- package/dist/pug-Cf8AQHMJ.js +0 -5
- package/dist/puppet-D7Z3dTJn.js +0 -4
- package/dist/python-FHIx_i8Y.js +0 -5
- package/dist/q-B7UA1feM.js +0 -4
- package/dist/r-Cc9R2A7N.js +0 -4
- package/dist/radar-NJJJXTRR-C-AZP_Te.js +0 -21
- package/dist/rpm-vhJNlrQ6.js +0 -5
- package/dist/ruby-CVluPY0M.js +0 -4
- package/dist/sas-A8DL8oy3.js +0 -4
- package/dist/scheme-6xHHcSXC.js +0 -4
- package/dist/shell-DHN-e5rf.js +0 -4
- package/dist/sieve-BuQwLY02.js +0 -4
- package/dist/smalltalk-BA4HPg2H.js +0 -4
- package/dist/sparql-Bf4yCuy3.js +0 -4
- package/dist/stateDiagram-v2-UMBNRL4Z-C_0FUzzk.js +0 -38
- package/dist/stex-D-I1cYeE.js +0 -5
- package/dist/stylus-BMeped2l.js +0 -4
- package/dist/swift-lwEdlZoC.js +0 -4
- package/dist/tcl-B03ipeqv.js +0 -4
- package/dist/toml-BLgrVtfu.js +0 -4
- package/dist/treemap-75Q7IDZK-DTvwfpWt.js +0 -21
- package/dist/troff-g6EjN2O2.js +0 -4
- package/dist/ttcn-Dzvba8jK.js +0 -4
- package/dist/ttcn-cfg-CadG0p1K.js +0 -4
- package/dist/turtle-DkXAMWo9.js +0 -4
- package/dist/vb-C5dCiel8.js +0 -4
- package/dist/vbscript-I4bDEQln.js +0 -4
- package/dist/velocity-mt0fDwFH.js +0 -4
- package/dist/verilog-Dxq3KJkc.js +0 -4
- package/dist/vhdl-Km0QUlV-.js +0 -4
- package/dist/webidl-B3lJ2MRL.js +0 -4
- package/dist/xquery-CcIxNPEe.js +0 -4
- package/dist/yacas-oMa-f-tN.js +0 -4
- package/dist/z80-D03Nvn6l.js +0 -4
- /package/dist/{apl-DZqo8Elt.js → apl-CEHentF4.js} +0 -0
- /package/dist/{asciiarmor-DTzHAIeX.js → asciiarmor-DURYiCS0.js} +0 -0
- /package/dist/{asn1-DrAXKsZH.js → asn1-ETAiEoXY.js} +0 -0
- /package/dist/{asterisk-oF4U3h48.js → asterisk-DTpbbXPb.js} +0 -0
- /package/dist/{brainfuck-BYgLey30.js → brainfuck-BWQep-SA.js} +0 -0
- /package/dist/{clojure-Bs2M3OUY.js → clojure-BzFapDkA.js} +0 -0
- /package/dist/{cmake-DpI8vxJN.js → cmake-DvlbIC8x.js} +0 -0
- /package/dist/{cobol-BQyrWo72.js → cobol-BrEI4cPR.js} +0 -0
- /package/dist/{coffeescript-9ke9UHmw.js → coffeescript-B6cvu8mO.js} +0 -0
- /package/dist/{common-keywords-BzgeAvH1.js → common-keywords-WqQm7W8t.js} +0 -0
- /package/dist/{commonlisp-DghUdrUH.js → commonlisp-BIT8PQqi.js} +0 -0
- /package/dist/{crystal-DEf_SInh.js → crystal-B_UcPArT.js} +0 -0
- /package/dist/{css-BzTU9lNO.js → css-dHbnt_zl.js} +0 -0
- /package/dist/{cypher-a2v0c11S.js → cypher-Dh3FOpL7.js} +0 -0
- /package/dist/{d-SAswny-M.js → d-CQD1IHee.js} +0 -0
- /package/dist/{diff-OJ-xLXcG.js → diff-CpF_IDx0.js} +0 -0
- /package/dist/{dtd-BsUf-rer.js → dtd-DYoNpy6c.js} +0 -0
- /package/dist/{duckdb-keywords-B0NOra5o.js → duckdb-keywords-CdIsl9L0.js} +0 -0
- /package/dist/{dylan-C0ZYngjn.js → dylan-Bc_2G1E-.js} +0 -0
- /package/dist/{ebnf-DF1xx0b_.js → ebnf-jGVT_YpN.js} +0 -0
- /package/dist/{ecl-Bsuvoouq.js → ecl-UIU-P-Ar.js} +0 -0
- /package/dist/{eiffel-DgfSpLi-.js → eiffel-C90Oyuix.js} +0 -0
- /package/dist/{elm-GNxDj-5E.js → elm-B9fWSySj.js} +0 -0
- /package/dist/{erlang-Ds3uY1kL.js → erlang-Ccff0UAn.js} +0 -0
- /package/dist/{fcl-CqBgSioc.js → fcl-CGR8NxAg.js} +0 -0
- /package/dist/{forth-JCaLysGk.js → forth-U1ROGcBY.js} +0 -0
- /package/dist/{fortran-Dc2AoKAl.js → fortran-3nOkjDmc.js} +0 -0
- /package/dist/{gas-Q4Uz82YW.js → gas-B_4H5FzV.js} +0 -0
- /package/dist/{gherkin-Dpxe49sQ.js → gherkin-B0eru5Uz.js} +0 -0
- /package/dist/{groovy-D8mTRCu6.js → groovy-dqjtZUVf.js} +0 -0
- /package/dist/{haskell-2_8cC4wY.js → haskell-DFzCCQzo.js} +0 -0
- /package/dist/{haxe-Bl9zkZlz.js → haxe-Da8Pj5RT.js} +0 -0
- /package/dist/{http-DKCqY6yS.js → http-1HACL_9s.js} +0 -0
- /package/dist/{idl-Dn-HNfGW.js → idl-D3NXs5iM.js} +0 -0
- /package/dist/{jinja2-JjFiAGKk.js → jinja2-gBHAxUdF.js} +0 -0
- /package/dist/{julia-R5wne8eu.js → julia-bG-6nJ-_.js} +0 -0
- /package/dist/{livescript-DSwokrYj.js → livescript-BlsRC8UJ.js} +0 -0
- /package/dist/{lua-CgXfrp2-.js → lua-BbDC0_5w.js} +0 -0
- /package/dist/{mathematica-BVli92MR.js → mathematica-YZTe3-PF.js} +0 -0
- /package/dist/{mbox-CMFlocdS.js → mbox-CY5idp08.js} +0 -0
- /package/dist/{mirc-BkW04Zpc.js → mirc-CbQuFZKk.js} +0 -0
- /package/dist/{mllike-DEjvHvNV.js → mllike-DsbHMX-5.js} +0 -0
- /package/dist/{modelica-CxDn-oje.js → modelica-CQuvsOQk.js} +0 -0
- /package/dist/{mscgen-D78wmE-w.js → mscgen-LIpBP9VR.js} +0 -0
- /package/dist/{mumps-Bi0IvPOV.js → mumps-Ct5NXoaG.js} +0 -0
- /package/dist/{nginx-DErPZFhX.js → nginx-Dvc62C8z.js} +0 -0
- /package/dist/{ntriples-Btyp6wRL.js → ntriples-jVkxWUuv.js} +0 -0
- /package/dist/{octave-CZA6-2F8.js → octave-jGOImUB0.js} +0 -0
- /package/dist/{oz-Bm6LSNfE.js → oz-Y0FKDMS2.js} +0 -0
- /package/dist/{pascal-B4J6a9BH.js → pascal-BaLtPWWB.js} +0 -0
- /package/dist/{perl-CzVqxS08.js → perl-CjfE0JLo.js} +0 -0
- /package/dist/{pig-Clh03cnn.js → pig-DE4epV99.js} +0 -0
- /package/dist/{properties-D7ch1Wyb.js → properties-CLyCG5C-.js} +0 -0
- /package/dist/{protobuf-DrkdrMPK.js → protobuf-BjBBs_V4.js} +0 -0
- /package/dist/{puppet-BtZG8zdO.js → puppet-ZImLuomA.js} +0 -0
- /package/dist/{python-B6FKOVIv.js → python-C9YN71pR.js} +0 -0
- /package/dist/{r-Dnvo5-96.js → r-DILmKWWW.js} +0 -0
- /package/dist/{rpm-B1DrgfnX.js → rpm-fpIsm1Kr.js} +0 -0
- /package/dist/{ruby-CelfUg17.js → ruby-BuiQI41h.js} +0 -0
- /package/dist/{sas-DfSQFMWG.js → sas-C76sJ1zF.js} +0 -0
- /package/dist/{scheme-BplhaWuO.js → scheme-DHjM-txv.js} +0 -0
- /package/dist/{shell-DqU5OS2c.js → shell--7NmGJ9p.js} +0 -0
- /package/dist/{sieve-BE4_IyGa.js → sieve-DaPvBv1M.js} +0 -0
- /package/dist/{smalltalk-B_WPL8Nx.js → smalltalk-KPvwrjCs.js} +0 -0
- /package/dist/{solr-DlJFg7H5.js → solr-PvZUtEDb.js} +0 -0
- /package/dist/{sparql-7XIlcOgW.js → sparql-CXSUIQer.js} +0 -0
- /package/dist/{spreadsheet-BdZSVwVp.js → spreadsheet-DPJdGPkx.js} +0 -0
- /package/dist/{sql-CCrq7lfJ.js → sql-Dp4ZLSIa.js} +0 -0
- /package/dist/{stex-BiFc8QAu.js → stex-CeXW4zzk.js} +0 -0
- /package/dist/{stylus-DlSH9xpH.js → stylus-BXcmrg9w.js} +0 -0
- /package/dist/{swift-e3tMTZgJ.js → swift-DD8I7hKP.js} +0 -0
- /package/dist/{tcl-DfZMC20G.js → tcl-B9Lp4GtA.js} +0 -0
- /package/dist/{textile-DaSeca5U.js → textile-qdiY0teq.js} +0 -0
- /package/dist/{tiddlywiki-dfoiz8pS.js → tiddlywiki-t32lkubq.js} +0 -0
- /package/dist/{tiki-yJbQzhma.js → tiki-B0qKrSMl.js} +0 -0
- /package/dist/{troff-FN_FrCXR.js → troff-105XJOEu.js} +0 -0
- /package/dist/{ttcn-7_i4HlyB.js → ttcn-1_BxDcM8.js} +0 -0
- /package/dist/{ttcn-cfg-B46AlBUV.js → ttcn-cfg-Cn_XgXiw.js} +0 -0
- /package/dist/{turtle-QQfeFveR.js → turtle-BI6LyfEu.js} +0 -0
- /package/dist/{vb-DToPVnLa.js → vb-BecoBfmr.js} +0 -0
- /package/dist/{vbscript-CtsNaTz4.js → vbscript-De-zpA4i.js} +0 -0
- /package/dist/{velocity-CAoNe6ns.js → velocity-DhlYJTrD.js} +0 -0
- /package/dist/{verilog-DrDOMiJq.js → verilog-BDZgxDOW.js} +0 -0
- /package/dist/{vhdl-DnO0OEPh.js → vhdl-CV0OKTbp.js} +0 -0
- /package/dist/{webidl-Or6d1ZfA.js → webidl-BOM1Fs0O.js} +0 -0
- /package/dist/{xquery-CEp_Mcpr.js → xquery-CltP_CGh.js} +0 -0
- /package/dist/{yacas-DgnYrSlp.js → yacas-Dch4E2Dg.js} +0 -0
- /package/dist/{z80-DlG_kyeB.js → z80-B5Yly27o.js} +0 -0
|
@@ -18,8 +18,14 @@ import {
|
|
|
18
18
|
} from "@marimo-team/codemirror-sql";
|
|
19
19
|
import { DuckDBDialect } from "@marimo-team/codemirror-sql/dialects";
|
|
20
20
|
import dedent from "string-dedent";
|
|
21
|
+
import type { CellId } from "@/core/cells/ids";
|
|
21
22
|
import { cellIdState } from "@/core/codemirror/cells/state";
|
|
22
|
-
import {
|
|
23
|
+
import type { PlaceholderType } from "@/core/codemirror/config/types";
|
|
24
|
+
import type {
|
|
25
|
+
CompletionConfig,
|
|
26
|
+
DiagnosticsConfig,
|
|
27
|
+
LSPConfig,
|
|
28
|
+
} from "@/core/config/config-schema";
|
|
23
29
|
import {
|
|
24
30
|
dataSourceConnectionsAtom,
|
|
25
31
|
setLatestEngineSelected,
|
|
@@ -30,6 +36,7 @@ import {
|
|
|
30
36
|
INTERNAL_SQL_ENGINES,
|
|
31
37
|
} from "@/core/datasets/engines";
|
|
32
38
|
import { ValidateSQL } from "@/core/datasets/request-registry";
|
|
39
|
+
import type { HotkeyProvider } from "@/core/hotkeys/hotkeys";
|
|
33
40
|
import type { ValidateSQLResult } from "@/core/kernel/messages";
|
|
34
41
|
import { store } from "@/core/state/jotai";
|
|
35
42
|
import { resolvedThemeAtom } from "@/theme/useTheme";
|
|
@@ -77,17 +84,10 @@ export class SQLLanguageAdapter
|
|
|
77
84
|
implements LanguageAdapter<SQLLanguageAdapterMetadata>
|
|
78
85
|
{
|
|
79
86
|
readonly type = "sql";
|
|
80
|
-
sqlLinterEnabled: boolean;
|
|
81
87
|
sqlModeEnabled: boolean;
|
|
82
88
|
|
|
83
89
|
constructor() {
|
|
84
|
-
|
|
85
|
-
this.sqlLinterEnabled = getFeatureFlag("sql_linter");
|
|
86
|
-
this.sqlModeEnabled = getFeatureFlag("sql_mode");
|
|
87
|
-
} catch {
|
|
88
|
-
this.sqlLinterEnabled = false;
|
|
89
|
-
this.sqlModeEnabled = false;
|
|
90
|
-
}
|
|
90
|
+
this.sqlModeEnabled = true;
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
get defaultMetadata(): SQLLanguageAdapterMetadata {
|
|
@@ -215,7 +215,13 @@ export class SQLLanguageAdapter
|
|
|
215
215
|
return commentLines;
|
|
216
216
|
}
|
|
217
217
|
|
|
218
|
-
getExtension(
|
|
218
|
+
getExtension(
|
|
219
|
+
_cellId: CellId,
|
|
220
|
+
_completionConfig: CompletionConfig,
|
|
221
|
+
_hotkeys: HotkeyProvider,
|
|
222
|
+
_placeholderType: PlaceholderType,
|
|
223
|
+
lspConfig: LSPConfig & { diagnostics: DiagnosticsConfig },
|
|
224
|
+
): Extension[] {
|
|
219
225
|
const extensions = [
|
|
220
226
|
// This can be updated with a dispatch effect
|
|
221
227
|
sqlConfigCompartment.of(sql({ dialect: DEFAULT_DIALECT })),
|
|
@@ -245,7 +251,9 @@ export class SQLLanguageAdapter
|
|
|
245
251
|
}),
|
|
246
252
|
];
|
|
247
253
|
|
|
248
|
-
|
|
254
|
+
const sqlLinterEnabled = lspConfig?.diagnostics?.sql_linter ?? false;
|
|
255
|
+
|
|
256
|
+
if (sqlLinterEnabled) {
|
|
249
257
|
const theme = store.get(resolvedThemeAtom);
|
|
250
258
|
const parser = new CustomSqlParser({
|
|
251
259
|
getParserOptions: (state: EditorState) => {
|
|
@@ -666,8 +674,10 @@ function sqlValidationExtension(): Extension {
|
|
|
666
674
|
let lastValidationRequest: string | null = null;
|
|
667
675
|
|
|
668
676
|
return EditorView.updateListener.of((update) => {
|
|
669
|
-
// Only run validation if the document has changed
|
|
670
|
-
|
|
677
|
+
// Only run validation if the document has changed
|
|
678
|
+
// The extension only runs on keypress, so we don't need to check for focus
|
|
679
|
+
// This lets AI completions / external calls trigger validation
|
|
680
|
+
if (!update.docChanged) {
|
|
671
681
|
return;
|
|
672
682
|
}
|
|
673
683
|
|
|
@@ -5,7 +5,6 @@ import { Button } from "@/components/ui/button";
|
|
|
5
5
|
import { Checkbox } from "@/components/ui/checkbox";
|
|
6
6
|
import { Tooltip, TooltipProvider } from "@/components/ui/tooltip";
|
|
7
7
|
import { normalizeName } from "@/core/cells/names";
|
|
8
|
-
import { getFeatureFlag } from "@/core/config/feature-flag";
|
|
9
8
|
import { type ConnectionName, DUCKDB_ENGINE } from "@/core/datasets/engines";
|
|
10
9
|
import { useAutoGrowInputProps } from "@/hooks/useAutoGrowInputProps";
|
|
11
10
|
import { formatSQL } from "../../format";
|
|
@@ -71,8 +70,6 @@ export const LanguagePanelComponent: React.FC<{
|
|
|
71
70
|
updateSQLDialectFromConnection(view, engine);
|
|
72
71
|
};
|
|
73
72
|
|
|
74
|
-
const sqlModeEnabled = getFeatureFlag("sql_mode");
|
|
75
|
-
|
|
76
73
|
actions = (
|
|
77
74
|
<div className="flex flex-1 gap-2 items-center">
|
|
78
75
|
<label className="flex gap-2 items-center">
|
|
@@ -98,9 +95,7 @@ export const LanguagePanelComponent: React.FC<{
|
|
|
98
95
|
onChange={switchEngine}
|
|
99
96
|
/>
|
|
100
97
|
<div className="flex items-center gap-2 ml-auto">
|
|
101
|
-
{
|
|
102
|
-
<SQLModeSelect />
|
|
103
|
-
)}
|
|
98
|
+
{metadata.engine === DUCKDB_ENGINE && <SQLModeSelect />}
|
|
104
99
|
<Tooltip content="Format SQL">
|
|
105
100
|
<Button
|
|
106
101
|
variant="text"
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import type { EditorState } from "@codemirror/state";
|
|
4
4
|
import type { EditorView } from "@codemirror/view";
|
|
5
|
+
import { replaceEditorContent } from "../replace-editor-content";
|
|
5
6
|
import { languageAdapterState } from "./extension";
|
|
6
7
|
import { languageMetadataField } from "./metadata";
|
|
7
8
|
|
|
@@ -36,14 +37,8 @@ export function updateEditorCodeFromPython(
|
|
|
36
37
|
): string {
|
|
37
38
|
const languageAdapter = editor.state.field(languageAdapterState);
|
|
38
39
|
const [code] = languageAdapter.transformIn(pythonCode);
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
if (doc.toString() === code) {
|
|
42
|
-
return code;
|
|
43
|
-
}
|
|
44
|
-
editor.dispatch({
|
|
45
|
-
changes: { from: 0, to: doc.length, insert: code },
|
|
46
|
-
});
|
|
40
|
+
// Use replaceEditorContent which preserves cursor position when focused
|
|
41
|
+
replaceEditorContent(editor, code);
|
|
47
42
|
return code;
|
|
48
43
|
}
|
|
49
44
|
|
|
@@ -195,35 +195,36 @@ describe("createNotebookLens", () => {
|
|
|
195
195
|
});
|
|
196
196
|
|
|
197
197
|
describe("NotebookLanguageServerClient", () => {
|
|
198
|
-
let plugins: any[] = [];
|
|
199
198
|
let mockClient: Mocked<ILanguageServerClient>;
|
|
200
199
|
let notebookClient: NotebookLanguageServerClient;
|
|
201
200
|
|
|
202
201
|
beforeEach(() => {
|
|
203
|
-
plugins = [];
|
|
204
202
|
mockClient = {
|
|
205
|
-
plugins,
|
|
206
203
|
ready: true,
|
|
207
204
|
capabilities: {},
|
|
208
205
|
initializePromise: Promise.resolve(),
|
|
206
|
+
clientCapabilities: {},
|
|
207
|
+
completionItemResolve: vi.fn(),
|
|
209
208
|
initialize: vi.fn(),
|
|
210
209
|
close: vi.fn(),
|
|
211
|
-
|
|
212
|
-
plugins = plugins.filter((p) => p !== plugin);
|
|
213
|
-
}),
|
|
214
|
-
attachPlugin: vi.fn().mockImplementation((plugin) => {
|
|
215
|
-
plugins.push(plugin);
|
|
216
|
-
}),
|
|
210
|
+
onNotification: vi.fn(),
|
|
217
211
|
textDocumentDidOpen: vi.fn(),
|
|
218
212
|
textDocumentDidChange: vi.fn(),
|
|
219
213
|
textDocumentHover: vi.fn(),
|
|
220
214
|
textDocumentCompletion: vi.fn(),
|
|
215
|
+
textDocumentDefinition: vi.fn(),
|
|
216
|
+
textDocumentPrepareRename: vi.fn(),
|
|
217
|
+
textDocumentCodeAction: vi.fn(),
|
|
218
|
+
textDocumentSignatureHelp: vi.fn(),
|
|
221
219
|
textDocumentRename: vi.fn(),
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
}
|
|
226
|
-
|
|
220
|
+
};
|
|
221
|
+
(mockClient as any).processNotification = vi.fn();
|
|
222
|
+
(mockClient as any).notify = vi.fn();
|
|
223
|
+
notebookClient = new NotebookLanguageServerClient(mockClient, {}, () => ({
|
|
224
|
+
[Cells.cell1]: new EditorView({ doc: "# this is a comment" }),
|
|
225
|
+
[Cells.cell2]: new EditorView({ doc: "import math\nimport numpy" }),
|
|
226
|
+
[Cells.cell3]: new EditorView({ doc: "print(math.sqrt(4))" }),
|
|
227
|
+
}));
|
|
227
228
|
|
|
228
229
|
// Mock the atom instead of the instance method
|
|
229
230
|
vi.spyOn(store, "get").mockImplementation((atom) => {
|
|
@@ -404,6 +405,12 @@ describe("NotebookLanguageServerClient", () => {
|
|
|
404
405
|
});
|
|
405
406
|
expect(mockView3.state.doc.toString()).toBe("print(math.sqrt(4))");
|
|
406
407
|
|
|
408
|
+
(notebookClient as any).getNotebookEditors = () => ({
|
|
409
|
+
[Cells.cell1]: mockView1,
|
|
410
|
+
[Cells.cell2]: mockView2,
|
|
411
|
+
[Cells.cell3]: mockView3,
|
|
412
|
+
});
|
|
413
|
+
|
|
407
414
|
// Setup rename params
|
|
408
415
|
const renameParams: LSP.RenameParams = {
|
|
409
416
|
textDocument: { uri: CellDocumentUri.of(Cells.cell2) },
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
/* Copyright 2024 Marimo. All rights reserved. */
|
|
2
2
|
|
|
3
|
-
import type { LanguageServerPlugin } from "@marimo-team/codemirror-languageserver";
|
|
4
3
|
import type * as LSP from "vscode-languageserver-protocol";
|
|
5
4
|
import { Objects } from "@/utils/objects";
|
|
6
5
|
import type { ILanguageServerClient } from "./types";
|
|
@@ -24,6 +23,26 @@ export class FederatedLanguageServerClient implements ILanguageServerClient {
|
|
|
24
23
|
this.documentUri = getLSPDocument();
|
|
25
24
|
}
|
|
26
25
|
|
|
26
|
+
onNotification(
|
|
27
|
+
listener: (n: {
|
|
28
|
+
jsonrpc: "2.0";
|
|
29
|
+
id?: null | undefined;
|
|
30
|
+
method: "textDocument/publishDiagnostics";
|
|
31
|
+
params: LSP.PublishDiagnosticsParams;
|
|
32
|
+
}) => void,
|
|
33
|
+
): () => boolean {
|
|
34
|
+
const callbacks: Array<() => boolean> = [];
|
|
35
|
+
for (const client of this.clients) {
|
|
36
|
+
callbacks.push(client.onNotification(listener));
|
|
37
|
+
}
|
|
38
|
+
return () => {
|
|
39
|
+
for (const cb of callbacks) {
|
|
40
|
+
cb();
|
|
41
|
+
}
|
|
42
|
+
return true;
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
|
|
27
46
|
get clientCapabilities(): LSP.ClientCapabilities | undefined {
|
|
28
47
|
const capabilities = this.clients
|
|
29
48
|
.map((client) => {
|
|
@@ -153,14 +172,6 @@ export class FederatedLanguageServerClient implements ILanguageServerClient {
|
|
|
153
172
|
return null;
|
|
154
173
|
}
|
|
155
174
|
|
|
156
|
-
attachPlugin(plugin: LanguageServerPlugin): void {
|
|
157
|
-
this.clients.forEach((client) => client.attachPlugin(plugin));
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
detachPlugin(plugin: LanguageServerPlugin): void {
|
|
161
|
-
this.clients.forEach((client) => client.detachPlugin(plugin));
|
|
162
|
-
}
|
|
163
|
-
|
|
164
175
|
// Merge completions from all clients
|
|
165
176
|
async textDocumentCompletion(
|
|
166
177
|
params: LSP.CompletionParams,
|
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
/* Copyright 2024 Marimo. All rights reserved. */
|
|
2
2
|
|
|
3
|
+
import type { EditorView } from "@codemirror/view";
|
|
3
4
|
import type * as LSP from "vscode-languageserver-protocol";
|
|
5
|
+
import { getNotebook } from "@/core/cells/cells";
|
|
4
6
|
import type { CellId } from "@/core/cells/ids";
|
|
5
7
|
import { store } from "@/core/state/jotai";
|
|
6
8
|
import { invariant } from "@/utils/invariant";
|
|
7
9
|
import { Logger } from "@/utils/Logger";
|
|
8
10
|
import { LRUCache } from "@/utils/lru";
|
|
11
|
+
import { Objects } from "@/utils/objects";
|
|
9
12
|
import { topologicalCodesAtom } from "../copilot/getCodes";
|
|
10
13
|
import { createNotebookLens, type NotebookLens } from "./lens";
|
|
11
14
|
import {
|
|
12
15
|
CellDocumentUri,
|
|
13
16
|
type ILanguageServerClient,
|
|
14
17
|
isClientWithNotify,
|
|
15
|
-
isClientWithPlugins,
|
|
16
18
|
} from "./types";
|
|
17
19
|
import { getLSPDocument } from "./utils";
|
|
18
20
|
|
|
@@ -84,18 +86,32 @@ class Snapshotter {
|
|
|
84
86
|
}
|
|
85
87
|
}
|
|
86
88
|
|
|
89
|
+
const defaultGetNotebookEditors = () => {
|
|
90
|
+
const evs = getNotebook().cellHandles;
|
|
91
|
+
return Objects.mapValues(evs, (r) => r.current?.editorViewOrNull);
|
|
92
|
+
};
|
|
93
|
+
|
|
87
94
|
export class NotebookLanguageServerClient implements ILanguageServerClient {
|
|
88
95
|
public readonly documentUri: LSP.DocumentUri;
|
|
89
96
|
private readonly client: ILanguageServerClient;
|
|
90
97
|
private readonly snapshotter: Snapshotter;
|
|
98
|
+
private readonly getNotebookEditors: () => Record<
|
|
99
|
+
CellId,
|
|
100
|
+
EditorView | null | undefined
|
|
101
|
+
>;
|
|
91
102
|
|
|
92
103
|
private static readonly SEEN_CELL_DOCUMENT_URIS = new Set<CellDocumentUri>();
|
|
93
104
|
|
|
94
105
|
constructor(
|
|
95
106
|
client: ILanguageServerClient,
|
|
96
107
|
initialSettings: Record<string, unknown>,
|
|
108
|
+
getNotebookEditors: () => Record<
|
|
109
|
+
CellId,
|
|
110
|
+
EditorView | null | undefined
|
|
111
|
+
> = defaultGetNotebookEditors,
|
|
97
112
|
) {
|
|
98
113
|
this.documentUri = getLSPDocument();
|
|
114
|
+
this.getNotebookEditors = getNotebookEditors;
|
|
99
115
|
|
|
100
116
|
this.client = client;
|
|
101
117
|
this.patchProcessNotification();
|
|
@@ -114,6 +130,17 @@ export class NotebookLanguageServerClient implements ILanguageServerClient {
|
|
|
114
130
|
this.snapshotter = new Snapshotter(this.getNotebookCode.bind(this));
|
|
115
131
|
}
|
|
116
132
|
|
|
133
|
+
onNotification(
|
|
134
|
+
listener: (n: {
|
|
135
|
+
jsonrpc: "2.0";
|
|
136
|
+
id?: null | undefined;
|
|
137
|
+
method: "textDocument/publishDiagnostics";
|
|
138
|
+
params: LSP.PublishDiagnosticsParams;
|
|
139
|
+
}) => void,
|
|
140
|
+
): () => boolean {
|
|
141
|
+
return this.client.onNotification(listener);
|
|
142
|
+
}
|
|
143
|
+
|
|
117
144
|
get ready(): boolean {
|
|
118
145
|
return this.client.ready;
|
|
119
146
|
}
|
|
@@ -150,16 +177,6 @@ export class NotebookLanguageServerClient implements ILanguageServerClient {
|
|
|
150
177
|
this.client.close();
|
|
151
178
|
}
|
|
152
179
|
|
|
153
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
154
|
-
detachPlugin(plugin: any): void {
|
|
155
|
-
this.client.detachPlugin(plugin);
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
159
|
-
attachPlugin(plugin: any): void {
|
|
160
|
-
this.client.attachPlugin(plugin);
|
|
161
|
-
}
|
|
162
|
-
|
|
163
180
|
private getNotebookCode() {
|
|
164
181
|
return store.get(topologicalCodesAtom);
|
|
165
182
|
}
|
|
@@ -371,37 +388,26 @@ export class NotebookLanguageServerClient implements ILanguageServerClient {
|
|
|
371
388
|
const newEdits = lens.getEditsForNewText(edit.newText);
|
|
372
389
|
const editsToNewCode = new Map(newEdits.map((e) => [e.cellId, e.text]));
|
|
373
390
|
|
|
374
|
-
invariant(
|
|
375
|
-
isClientWithPlugins(this.client),
|
|
376
|
-
"Expected client with plugins.",
|
|
377
|
-
);
|
|
378
|
-
|
|
379
391
|
// Update the code in the plugins manually
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
if (!CellDocumentUri.is(documentUri)) {
|
|
383
|
-
Logger.warn("Invalid cell document URI", documentUri);
|
|
384
|
-
continue;
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
const cellId = CellDocumentUri.parse(documentUri);
|
|
392
|
+
const editors = this.getNotebookEditors();
|
|
393
|
+
for (const [cellId, ev] of Objects.entries(editors)) {
|
|
388
394
|
const newCode = editsToNewCode.get(cellId);
|
|
389
395
|
if (newCode == null) {
|
|
390
396
|
Logger.warn("No new code for cell", cellId);
|
|
391
397
|
continue;
|
|
392
398
|
}
|
|
393
399
|
|
|
394
|
-
if (!
|
|
395
|
-
Logger.warn("No view for plugin",
|
|
400
|
+
if (!ev) {
|
|
401
|
+
Logger.warn("No view for plugin", cellId);
|
|
396
402
|
continue;
|
|
397
403
|
}
|
|
398
404
|
|
|
399
405
|
// Only update if it has changed
|
|
400
|
-
if (
|
|
401
|
-
|
|
406
|
+
if (ev.state.doc.toString() !== newCode) {
|
|
407
|
+
ev.dispatch({
|
|
402
408
|
changes: {
|
|
403
409
|
from: 0,
|
|
404
|
-
to:
|
|
410
|
+
to: ev.state.doc.length,
|
|
405
411
|
insert: newCode,
|
|
406
412
|
},
|
|
407
413
|
});
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
/* Copyright 2024 Marimo. All rights reserved. */
|
|
2
2
|
|
|
3
|
-
import type { EditorView } from "@codemirror/view";
|
|
4
3
|
import type { LanguageServerClient } from "@marimo-team/codemirror-languageserver";
|
|
5
4
|
import type { DocumentUri } from "vscode-languageserver-protocol";
|
|
6
5
|
import type { CellId } from "@/core/cells/ids";
|
|
@@ -41,15 +40,3 @@ export function isClientWithNotify(
|
|
|
41
40
|
} {
|
|
42
41
|
return "notify" in client;
|
|
43
42
|
}
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Plugins are a @private on `LanguageServerClient`,
|
|
47
|
-
* hiding public use with TypeScript.
|
|
48
|
-
*/
|
|
49
|
-
export function isClientWithPlugins(
|
|
50
|
-
client: ILanguageServerClient,
|
|
51
|
-
): client is ILanguageServerClient & {
|
|
52
|
-
plugins: { documentUri: string; view?: EditorView }[];
|
|
53
|
-
} {
|
|
54
|
-
return "plugins" in client;
|
|
55
|
-
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/* Copyright 2024 Marimo. All rights reserved. */
|
|
2
|
+
|
|
3
|
+
import type { TransactionSpec } from "@codemirror/state";
|
|
4
|
+
import type { EditorView } from "@codemirror/view";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Replace the entire content of the editor with new content.
|
|
8
|
+
*
|
|
9
|
+
* When the editor has focus, this function attempts to preserve the cursor position
|
|
10
|
+
* by keeping it on the same line and column. If the line no longer exists or shrinks,
|
|
11
|
+
* the cursor is adjusted accordingly. This prevents the cursor from jumping during
|
|
12
|
+
* external updates (e.g., auto-formatting or external edits).
|
|
13
|
+
*
|
|
14
|
+
* When the editor doesn't have focus, the content is replaced without any special handling.
|
|
15
|
+
*
|
|
16
|
+
* @param editor - The CodeMirror editor view
|
|
17
|
+
* @param newContent - The new content to replace the editor with
|
|
18
|
+
* @param options - Optional configuration
|
|
19
|
+
* @param options.preserveCursor - Whether to preserve cursor position when focused (default: true)
|
|
20
|
+
* @param options.effects - Additional effects to apply to the transaction
|
|
21
|
+
* @param options.userEvent - User event string for the transaction
|
|
22
|
+
*/
|
|
23
|
+
export function replaceEditorContent(
|
|
24
|
+
editor: EditorView,
|
|
25
|
+
newContent: string,
|
|
26
|
+
options: {
|
|
27
|
+
preserveCursor?: boolean;
|
|
28
|
+
effects?: TransactionSpec["effects"];
|
|
29
|
+
userEvent?: string;
|
|
30
|
+
} = {},
|
|
31
|
+
): void {
|
|
32
|
+
const { preserveCursor = true, effects, userEvent } = options;
|
|
33
|
+
const doc = editor.state.doc;
|
|
34
|
+
const currentContent = doc.toString();
|
|
35
|
+
|
|
36
|
+
// Noop if content is the same
|
|
37
|
+
if (currentContent === newContent) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// If editor has focus and we want to preserve cursor, try to maintain position
|
|
42
|
+
if (preserveCursor && editor.hasFocus) {
|
|
43
|
+
const cursorPos = editor.state.selection.main.head;
|
|
44
|
+
|
|
45
|
+
// Get the current line and column
|
|
46
|
+
const currentLine = doc.lineAt(cursorPos);
|
|
47
|
+
const lineNumber = currentLine.number; // 1-based line number
|
|
48
|
+
const columnInLine = cursorPos - currentLine.from; // 0-based column in line
|
|
49
|
+
|
|
50
|
+
// Calculate new cursor position based on line-aware logic
|
|
51
|
+
const newDoc = editor.state.update({
|
|
52
|
+
changes: { from: 0, to: doc.length, insert: newContent },
|
|
53
|
+
}).state.doc;
|
|
54
|
+
|
|
55
|
+
let newCursorPos: number;
|
|
56
|
+
|
|
57
|
+
if (lineNumber <= newDoc.lines) {
|
|
58
|
+
// Line still exists in new document
|
|
59
|
+
const newLine = newDoc.line(lineNumber);
|
|
60
|
+
const newLineLength = newLine.length;
|
|
61
|
+
|
|
62
|
+
// Keep same column, but clamp to line length if line shrank
|
|
63
|
+
newCursorPos = newLine.from + Math.min(columnInLine, newLineLength);
|
|
64
|
+
} else {
|
|
65
|
+
// Line no longer exists, move to the end of the last line
|
|
66
|
+
const lastLine = newDoc.line(newDoc.lines);
|
|
67
|
+
newCursorPos = lastLine.to;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Apply changes with preserved cursor position
|
|
71
|
+
editor.dispatch({
|
|
72
|
+
changes: { from: 0, to: doc.length, insert: newContent },
|
|
73
|
+
selection: {
|
|
74
|
+
anchor: newCursorPos,
|
|
75
|
+
},
|
|
76
|
+
effects,
|
|
77
|
+
userEvent,
|
|
78
|
+
});
|
|
79
|
+
} else {
|
|
80
|
+
// Editor doesn't have focus or we don't want to preserve cursor
|
|
81
|
+
editor.dispatch({
|
|
82
|
+
changes: { from: 0, to: doc.length, insert: newContent },
|
|
83
|
+
effects,
|
|
84
|
+
userEvent,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
@@ -45,6 +45,7 @@ test("default UserConfig - empty", () => {
|
|
|
45
45
|
expect(defaultConfig).toMatchInlineSnapshot(`
|
|
46
46
|
{
|
|
47
47
|
"ai": {
|
|
48
|
+
"inline_tooltip": false,
|
|
48
49
|
"mode": "manual",
|
|
49
50
|
"models": {
|
|
50
51
|
"custom_models": [],
|
|
@@ -56,6 +57,7 @@ test("default UserConfig - empty", () => {
|
|
|
56
57
|
"activate_on_typing": true,
|
|
57
58
|
"copilot": false,
|
|
58
59
|
},
|
|
60
|
+
"diagnostics": {},
|
|
59
61
|
"display": {
|
|
60
62
|
"cell_output": "above",
|
|
61
63
|
"code_editor_font_size": 14,
|
|
@@ -110,6 +112,7 @@ test("default UserConfig - one level", () => {
|
|
|
110
112
|
expect(defaultConfig).toMatchInlineSnapshot(`
|
|
111
113
|
{
|
|
112
114
|
"ai": {
|
|
115
|
+
"inline_tooltip": false,
|
|
113
116
|
"mode": "manual",
|
|
114
117
|
"models": {
|
|
115
118
|
"custom_models": [],
|
|
@@ -121,6 +124,7 @@ test("default UserConfig - one level", () => {
|
|
|
121
124
|
"activate_on_typing": true,
|
|
122
125
|
"copilot": false,
|
|
123
126
|
},
|
|
127
|
+
"diagnostics": {},
|
|
124
128
|
"display": {
|
|
125
129
|
"cell_output": "above",
|
|
126
130
|
"code_editor_font_size": 14,
|
|
@@ -170,6 +174,7 @@ test("default UserConfig - one level", () => {
|
|
|
170
174
|
runtime: {},
|
|
171
175
|
display: {},
|
|
172
176
|
experimental: {},
|
|
177
|
+
diagnostics: {},
|
|
173
178
|
}),
|
|
174
179
|
).toEqual(UserConfigSchema.parse({}));
|
|
175
180
|
});
|
|
@@ -152,6 +152,7 @@ export const UserConfigSchema = z
|
|
|
152
152
|
.looseObject({
|
|
153
153
|
rules: z.string().prefault(""),
|
|
154
154
|
mode: z.enum(["manual", "ask"]).prefault("manual"),
|
|
155
|
+
inline_tooltip: z.boolean().prefault(false),
|
|
155
156
|
open_ai: AiConfigSchema.optional(),
|
|
156
157
|
anthropic: AiConfigSchema.optional(),
|
|
157
158
|
google: AiConfigSchema.optional(),
|
|
@@ -182,6 +183,12 @@ export const UserConfigSchema = z
|
|
|
182
183
|
// Pass through so that we don't remove any extra keys that the user has added.
|
|
183
184
|
.prefault(() => ({})),
|
|
184
185
|
server: z.looseObject({}).prefault(() => ({})),
|
|
186
|
+
diagnostics: z
|
|
187
|
+
.looseObject({
|
|
188
|
+
enabled: z.boolean().optional(),
|
|
189
|
+
sql_linter: z.boolean().optional(),
|
|
190
|
+
})
|
|
191
|
+
.prefault(() => ({})),
|
|
185
192
|
sharing: z
|
|
186
193
|
.looseObject({
|
|
187
194
|
html: z.boolean().optional(),
|
|
@@ -203,6 +210,7 @@ export const UserConfigSchema = z
|
|
|
203
210
|
keymap: {},
|
|
204
211
|
runtime: {},
|
|
205
212
|
display: {},
|
|
213
|
+
diagnostics: {},
|
|
206
214
|
experimental: {},
|
|
207
215
|
server: {},
|
|
208
216
|
ai: {},
|
|
@@ -216,6 +224,7 @@ export type KeymapConfig = UserConfig["keymap"];
|
|
|
216
224
|
export type LSPConfig = UserConfig["language_servers"];
|
|
217
225
|
export type DiagnosticsConfig = UserConfig["diagnostics"];
|
|
218
226
|
export type DisplayConfig = UserConfig["display"];
|
|
227
|
+
export type AiConfig = UserConfig["ai"];
|
|
219
228
|
|
|
220
229
|
export const AppTitleSchema = z.string();
|
|
221
230
|
export const SqlOutputSchema = z
|
|
@@ -305,6 +314,7 @@ export function defaultUserConfig(): UserConfig {
|
|
|
305
314
|
keymap: {},
|
|
306
315
|
runtime: {},
|
|
307
316
|
display: {},
|
|
317
|
+
diagnostics: {},
|
|
308
318
|
experimental: {},
|
|
309
319
|
server: {},
|
|
310
320
|
ai: {},
|
|
@@ -7,27 +7,23 @@ import { getResolvedMarimoConfig } from "./config";
|
|
|
7
7
|
// eslint-disable-next-line @typescript-eslint/no-empty-interface
|
|
8
8
|
export interface ExperimentalFeatures {
|
|
9
9
|
markdown: boolean; // Used in playground (community cloud)
|
|
10
|
-
inline_ai_tooltip: boolean;
|
|
11
10
|
wasm_layouts: boolean; // Used in playground (community cloud)
|
|
12
11
|
rtc_v2: boolean;
|
|
13
12
|
performant_table_charts: boolean;
|
|
14
13
|
chat_modes: boolean;
|
|
15
|
-
|
|
14
|
+
cache_panel: boolean;
|
|
16
15
|
external_agents: boolean;
|
|
17
|
-
sql_mode: boolean;
|
|
18
16
|
// Add new feature flags here
|
|
19
17
|
}
|
|
20
18
|
|
|
21
19
|
const defaultValues: ExperimentalFeatures = {
|
|
22
20
|
markdown: true,
|
|
23
|
-
inline_ai_tooltip: import.meta.env.DEV,
|
|
24
21
|
wasm_layouts: false,
|
|
25
22
|
rtc_v2: false,
|
|
26
23
|
performant_table_charts: false,
|
|
27
24
|
chat_modes: false,
|
|
28
|
-
|
|
25
|
+
cache_panel: false,
|
|
29
26
|
external_agents: import.meta.env.DEV,
|
|
30
|
-
sql_mode: false,
|
|
31
27
|
};
|
|
32
28
|
|
|
33
29
|
export function getFeatureFlag<T extends keyof ExperimentalFeatures>(
|
package/src/core/edit-app.tsx
CHANGED
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
useRunAllCells,
|
|
16
16
|
useRunStaleCells,
|
|
17
17
|
} from "../components/editor/cell/useRunCells";
|
|
18
|
-
import { CellArray } from "../components/editor/renderers/
|
|
18
|
+
import { CellArray } from "../components/editor/renderers/cell-array";
|
|
19
19
|
import { CellsRenderer } from "../components/editor/renderers/cells-renderer";
|
|
20
20
|
import { useHotkey } from "../hooks/useHotkey";
|
|
21
21
|
import {
|