@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
package/src/core/cells/cells.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { type Atom, atom, useAtom, useAtomValue } from "jotai";
|
|
|
5
5
|
import { atomFamily, selectAtom, splitAtom } from "jotai/utils";
|
|
6
6
|
import { isEqual, zip } from "lodash-es";
|
|
7
7
|
import { createRef, type ReducerWithoutAction } from "react";
|
|
8
|
-
import type { CellHandle } from "@/components/editor/
|
|
8
|
+
import type { CellHandle } from "@/components/editor/notebook-cell";
|
|
9
9
|
import {
|
|
10
10
|
type CellColumnId,
|
|
11
11
|
type CellIndex,
|
|
@@ -1324,21 +1324,19 @@ const {
|
|
|
1324
1324
|
cellRuntime: newCellRuntime,
|
|
1325
1325
|
};
|
|
1326
1326
|
},
|
|
1327
|
-
|
|
1328
|
-
|
|
1327
|
+
addSetupCellIfDoesntExist: (state, action: { code?: string }) => {
|
|
1328
|
+
let { code } = action;
|
|
1329
|
+
if (code == null) {
|
|
1330
|
+
code = "# Initialization code that runs before all other cells";
|
|
1331
|
+
}
|
|
1329
1332
|
|
|
1330
1333
|
// First check if setup cell already exists
|
|
1331
1334
|
if (SETUP_CELL_ID in state.cellData) {
|
|
1332
|
-
//
|
|
1333
|
-
return
|
|
1334
|
-
state,
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
...cell,
|
|
1338
|
-
code,
|
|
1339
|
-
edited: code.trim() !== cell.lastCodeRun?.trim(),
|
|
1340
|
-
}),
|
|
1341
|
-
});
|
|
1335
|
+
// Just focus on the existing setup cell
|
|
1336
|
+
return {
|
|
1337
|
+
...state,
|
|
1338
|
+
scrollKey: SETUP_CELL_ID,
|
|
1339
|
+
};
|
|
1342
1340
|
}
|
|
1343
1341
|
|
|
1344
1342
|
return {
|
|
@@ -1365,6 +1363,7 @@ const {
|
|
|
1365
1363
|
...state.cellHandles,
|
|
1366
1364
|
[SETUP_CELL_ID]: createRef(),
|
|
1367
1365
|
},
|
|
1366
|
+
scrollKey: SETUP_CELL_ID,
|
|
1368
1367
|
};
|
|
1369
1368
|
},
|
|
1370
1369
|
});
|
|
@@ -1616,7 +1615,7 @@ export const columnIdsAtom = atom((get) =>
|
|
|
1616
1615
|
get(notebookAtom).cellIds.getColumnIds(),
|
|
1617
1616
|
);
|
|
1618
1617
|
|
|
1619
|
-
const cellDataAtom = atomFamily((cellId: CellId) =>
|
|
1618
|
+
export const cellDataAtom = atomFamily((cellId: CellId) =>
|
|
1620
1619
|
atom((get) => get(notebookAtom).cellData[cellId]),
|
|
1621
1620
|
);
|
|
1622
1621
|
const cellRuntimeAtom = atomFamily((cellId: CellId) =>
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/* Copyright 2024 Marimo. All rights reserved. */
|
|
2
2
|
import type { RefObject } from "react";
|
|
3
|
-
import type { CellHandle } from "@/components/editor/Cell";
|
|
4
3
|
import {
|
|
5
4
|
isAnyCellFocused,
|
|
6
5
|
tryFocus,
|
|
7
6
|
} from "@/components/editor/navigation/focus-utils";
|
|
7
|
+
import type { CellHandle } from "@/components/editor/notebook-cell";
|
|
8
8
|
import { retryWithTimeout } from "@/utils/timeout";
|
|
9
9
|
import { Logger } from "../../utils/Logger";
|
|
10
10
|
import { goToVariableDefinition } from "../codemirror/go-to-definition/commands";
|
|
@@ -45,6 +45,7 @@ exports[`snapshot all duplicate keymaps > default keymaps 2`] = `
|
|
|
45
45
|
},
|
|
46
46
|
{
|
|
47
47
|
"key": "Backspace",
|
|
48
|
+
"preventDefault": true,
|
|
48
49
|
"run": "deleteCharBackward",
|
|
49
50
|
"shift": "deleteCharBackward",
|
|
50
51
|
},
|
|
@@ -153,6 +154,7 @@ exports[`snapshot all duplicate keymaps > vim keymaps 2`] = `
|
|
|
153
154
|
},
|
|
154
155
|
{
|
|
155
156
|
"key": "Backspace",
|
|
157
|
+
"preventDefault": true,
|
|
156
158
|
"run": "deleteCharBackward",
|
|
157
159
|
"shift": "deleteCharBackward",
|
|
158
160
|
},
|
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
/* Copyright 2024 Marimo. All rights reserved. */
|
|
2
|
+
|
|
3
|
+
import { EditorState } from "@codemirror/state";
|
|
4
|
+
import { EditorView } from "@codemirror/view";
|
|
5
|
+
import { describe, expect, it, vi } from "vitest";
|
|
6
|
+
import { replaceEditorContent } from "../replace-editor-content";
|
|
7
|
+
|
|
8
|
+
describe("replaceEditorContent", () => {
|
|
9
|
+
it("should replace content when editor doesn't have focus", () => {
|
|
10
|
+
const view = new EditorView({
|
|
11
|
+
state: EditorState.create({
|
|
12
|
+
doc: "original content",
|
|
13
|
+
}),
|
|
14
|
+
});
|
|
15
|
+
|
|
16
|
+
// Editor doesn't have focus by default
|
|
17
|
+
expect(view.hasFocus).toBe(false);
|
|
18
|
+
|
|
19
|
+
replaceEditorContent(view, "new content");
|
|
20
|
+
|
|
21
|
+
expect(view.state.doc.toString()).toBe("new content");
|
|
22
|
+
// Cursor position is not preserved when not focused
|
|
23
|
+
expect(view.state.selection.main.head).toBe(0);
|
|
24
|
+
|
|
25
|
+
view.destroy();
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
it("should preserve cursor position when editor has focus (same line)", () => {
|
|
29
|
+
const view = new EditorView({
|
|
30
|
+
state: EditorState.create({
|
|
31
|
+
doc: "Hello World",
|
|
32
|
+
selection: { anchor: 6 }, // Position after "Hello "
|
|
33
|
+
}),
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
// Mock hasFocus to return true
|
|
37
|
+
Object.defineProperty(view, "hasFocus", {
|
|
38
|
+
get: () => true,
|
|
39
|
+
configurable: true,
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
expect(view.hasFocus).toBe(true);
|
|
43
|
+
|
|
44
|
+
// Replace with similar length content on same line
|
|
45
|
+
replaceEditorContent(view, "Goodbye Everyone");
|
|
46
|
+
|
|
47
|
+
expect(view.state.doc.toString()).toBe("Goodbye Everyone");
|
|
48
|
+
|
|
49
|
+
// Cursor should stay at the same column (6) since it's still within the line
|
|
50
|
+
const newCursorPos = view.state.selection.main.head;
|
|
51
|
+
expect(newCursorPos).toBe(6);
|
|
52
|
+
|
|
53
|
+
view.destroy();
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
it("should preserve cursor at beginning when focused", () => {
|
|
57
|
+
const view = new EditorView({
|
|
58
|
+
state: EditorState.create({
|
|
59
|
+
doc: "Hello World",
|
|
60
|
+
selection: { anchor: 0 }, // At beginning
|
|
61
|
+
}),
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
Object.defineProperty(view, "hasFocus", {
|
|
65
|
+
get: () => true,
|
|
66
|
+
configurable: true,
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
replaceEditorContent(view, "Goodbye Everyone");
|
|
70
|
+
|
|
71
|
+
expect(view.state.doc.toString()).toBe("Goodbye Everyone");
|
|
72
|
+
// Cursor should stay at beginning
|
|
73
|
+
expect(view.state.selection.main.head).toBe(0);
|
|
74
|
+
|
|
75
|
+
view.destroy();
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
it("should clamp cursor when line shrinks", () => {
|
|
79
|
+
const view = new EditorView({
|
|
80
|
+
state: EditorState.create({
|
|
81
|
+
doc: "Hello World",
|
|
82
|
+
selection: { anchor: 11 }, // At end (column 11)
|
|
83
|
+
}),
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
Object.defineProperty(view, "hasFocus", {
|
|
87
|
+
get: () => true,
|
|
88
|
+
configurable: true,
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
// Replace with shorter content
|
|
92
|
+
replaceEditorContent(view, "Goodbye");
|
|
93
|
+
|
|
94
|
+
expect(view.state.doc.toString()).toBe("Goodbye");
|
|
95
|
+
// Cursor should be clamped to end of line since column 11 > line length (7)
|
|
96
|
+
expect(view.state.selection.main.head).toBe(7);
|
|
97
|
+
|
|
98
|
+
view.destroy();
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
it("should handle empty document", () => {
|
|
102
|
+
const view = new EditorView({
|
|
103
|
+
state: EditorState.create({
|
|
104
|
+
doc: "",
|
|
105
|
+
}),
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
Object.defineProperty(view, "hasFocus", {
|
|
109
|
+
get: () => true,
|
|
110
|
+
configurable: true,
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
replaceEditorContent(view, "new content");
|
|
114
|
+
|
|
115
|
+
expect(view.state.doc.toString()).toBe("new content");
|
|
116
|
+
expect(view.state.selection.main.head).toBe(0);
|
|
117
|
+
|
|
118
|
+
view.destroy();
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
it("should do nothing when content is the same", () => {
|
|
122
|
+
const view = new EditorView({
|
|
123
|
+
state: EditorState.create({
|
|
124
|
+
doc: "same content",
|
|
125
|
+
selection: { anchor: 5 },
|
|
126
|
+
}),
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
const dispatchSpy = vi.spyOn(view, "dispatch");
|
|
130
|
+
|
|
131
|
+
replaceEditorContent(view, "same content");
|
|
132
|
+
|
|
133
|
+
// No dispatch should have been called
|
|
134
|
+
expect(dispatchSpy).not.toHaveBeenCalled();
|
|
135
|
+
expect(view.state.doc.toString()).toBe("same content");
|
|
136
|
+
expect(view.state.selection.main.head).toBe(5);
|
|
137
|
+
|
|
138
|
+
view.destroy();
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
it("should handle cursor in middle of focused document", () => {
|
|
142
|
+
const view = new EditorView({
|
|
143
|
+
state: EditorState.create({
|
|
144
|
+
doc: "The quick brown fox jumps",
|
|
145
|
+
selection: { anchor: 10 }, // After "The quick " (column 10)
|
|
146
|
+
}),
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
Object.defineProperty(view, "hasFocus", {
|
|
150
|
+
get: () => true,
|
|
151
|
+
configurable: true,
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
// Replace with longer content
|
|
155
|
+
replaceEditorContent(view, "The extremely quick brown fox jumps over");
|
|
156
|
+
|
|
157
|
+
expect(view.state.doc.toString()).toBe(
|
|
158
|
+
"The extremely quick brown fox jumps over",
|
|
159
|
+
);
|
|
160
|
+
|
|
161
|
+
// Cursor should stay at same column (10) on same line
|
|
162
|
+
const newCursorPos = view.state.selection.main.head;
|
|
163
|
+
expect(newCursorPos).toBe(10);
|
|
164
|
+
|
|
165
|
+
view.destroy();
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
it("should respect preserveCursor=false when focused", () => {
|
|
169
|
+
const view = new EditorView({
|
|
170
|
+
state: EditorState.create({
|
|
171
|
+
doc: "Hello World",
|
|
172
|
+
selection: { anchor: 6 },
|
|
173
|
+
}),
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
Object.defineProperty(view, "hasFocus", {
|
|
177
|
+
get: () => true,
|
|
178
|
+
configurable: true,
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
replaceEditorContent(view, "Goodbye Everyone", { preserveCursor: false });
|
|
182
|
+
|
|
183
|
+
expect(view.state.doc.toString()).toBe("Goodbye Everyone");
|
|
184
|
+
// When preserveCursor is false, cursor is not explicitly set
|
|
185
|
+
// so it defaults to 0
|
|
186
|
+
expect(view.state.selection.main.head).toBe(0);
|
|
187
|
+
|
|
188
|
+
view.destroy();
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
it("should handle newlines and multiline content", () => {
|
|
192
|
+
const view = new EditorView({
|
|
193
|
+
state: EditorState.create({
|
|
194
|
+
doc: "Line 1\nLine 2\nLine 3",
|
|
195
|
+
// Cursor at position 10: "Line 1\nLi|ne 2\nLine 3"
|
|
196
|
+
// Line 2, column 2 (after "Li")
|
|
197
|
+
selection: { anchor: 10 },
|
|
198
|
+
}),
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
Object.defineProperty(view, "hasFocus", {
|
|
202
|
+
get: () => true,
|
|
203
|
+
configurable: true,
|
|
204
|
+
});
|
|
205
|
+
|
|
206
|
+
replaceEditorContent(view, "Line 1\nLine 2 updated\nLine 3\nLine 4");
|
|
207
|
+
|
|
208
|
+
expect(view.state.doc.toString()).toBe(
|
|
209
|
+
"Line 1\nLine 2 updated\nLine 3\nLine 4",
|
|
210
|
+
);
|
|
211
|
+
|
|
212
|
+
// Cursor should stay on line 2 at column 2 (after "Li")
|
|
213
|
+
// "Line 1\nLi|ne 2 updated\nLine 3\nLine 4"
|
|
214
|
+
const newCursorPos = view.state.selection.main.head;
|
|
215
|
+
expect(newCursorPos).toBe(10); // Same position, line 2 column 2
|
|
216
|
+
|
|
217
|
+
view.destroy();
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
it("should move cursor up when line is deleted", () => {
|
|
221
|
+
const view = new EditorView({
|
|
222
|
+
state: EditorState.create({
|
|
223
|
+
doc: "Line 1\nLine 2\nLine 3",
|
|
224
|
+
selection: { anchor: 14 }, // Line 3, start of line
|
|
225
|
+
}),
|
|
226
|
+
});
|
|
227
|
+
|
|
228
|
+
Object.defineProperty(view, "hasFocus", {
|
|
229
|
+
get: () => true,
|
|
230
|
+
configurable: true,
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
// Replace with only 2 lines (line 3 is deleted)
|
|
234
|
+
replaceEditorContent(view, "Line 1\nLine 2");
|
|
235
|
+
|
|
236
|
+
expect(view.state.doc.toString()).toBe("Line 1\nLine 2");
|
|
237
|
+
|
|
238
|
+
// Cursor should move to end of last available line
|
|
239
|
+
const newCursorPos = view.state.selection.main.head;
|
|
240
|
+
expect(newCursorPos).toBe(13); // End of "Line 1\nLine 2"
|
|
241
|
+
|
|
242
|
+
view.destroy();
|
|
243
|
+
});
|
|
244
|
+
|
|
245
|
+
it("should stay at end of line when new line is added", () => {
|
|
246
|
+
const view = new EditorView({
|
|
247
|
+
state: EditorState.create({
|
|
248
|
+
doc: "Hello World",
|
|
249
|
+
selection: { anchor: 11 }, // At end (column 11)
|
|
250
|
+
}),
|
|
251
|
+
});
|
|
252
|
+
|
|
253
|
+
Object.defineProperty(view, "hasFocus", {
|
|
254
|
+
get: () => true,
|
|
255
|
+
configurable: true,
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
replaceEditorContent(view, "Hello World\nSome new line");
|
|
259
|
+
|
|
260
|
+
expect(view.state.doc.toString()).toBe("Hello World\nSome new line");
|
|
261
|
+
const newCursorPos = view.state.selection.main.head;
|
|
262
|
+
expect(newCursorPos).toBe(11);
|
|
263
|
+
|
|
264
|
+
view.destroy();
|
|
265
|
+
});
|
|
266
|
+
|
|
267
|
+
it("should preserve cursor on same line with column clamping", () => {
|
|
268
|
+
const view = new EditorView({
|
|
269
|
+
state: EditorState.create({
|
|
270
|
+
doc: "def function_with_long_name():",
|
|
271
|
+
selection: { anchor: 25 }, // Near end of line
|
|
272
|
+
}),
|
|
273
|
+
});
|
|
274
|
+
|
|
275
|
+
Object.defineProperty(view, "hasFocus", {
|
|
276
|
+
get: () => true,
|
|
277
|
+
configurable: true,
|
|
278
|
+
});
|
|
279
|
+
|
|
280
|
+
// Replace with shorter line
|
|
281
|
+
replaceEditorContent(view, "def fn():");
|
|
282
|
+
|
|
283
|
+
expect(view.state.doc.toString()).toBe("def fn():");
|
|
284
|
+
|
|
285
|
+
// Cursor should be clamped to end of shorter line
|
|
286
|
+
const newCursorPos = view.state.selection.main.head;
|
|
287
|
+
expect(newCursorPos).toBe(9); // End of "def fn():"
|
|
288
|
+
|
|
289
|
+
view.destroy();
|
|
290
|
+
});
|
|
291
|
+
|
|
292
|
+
it("should handle selection range (collapses to head position)", () => {
|
|
293
|
+
const view = new EditorView({
|
|
294
|
+
state: EditorState.create({
|
|
295
|
+
doc: "Hello World",
|
|
296
|
+
selection: { anchor: 0, head: 5 }, // "Hello" selected
|
|
297
|
+
}),
|
|
298
|
+
});
|
|
299
|
+
|
|
300
|
+
Object.defineProperty(view, "hasFocus", {
|
|
301
|
+
get: () => true,
|
|
302
|
+
configurable: true,
|
|
303
|
+
});
|
|
304
|
+
|
|
305
|
+
replaceEditorContent(view, "Goodbye Everyone");
|
|
306
|
+
|
|
307
|
+
expect(view.state.doc.toString()).toBe("Goodbye Everyone");
|
|
308
|
+
// Selection head (5) is preserved as cursor position
|
|
309
|
+
expect(view.state.selection.main.head).toBe(5);
|
|
310
|
+
expect(view.state.selection.main.anchor).toBe(5);
|
|
311
|
+
|
|
312
|
+
view.destroy();
|
|
313
|
+
});
|
|
314
|
+
|
|
315
|
+
it("should handle replacing with empty string", () => {
|
|
316
|
+
const view = new EditorView({
|
|
317
|
+
state: EditorState.create({
|
|
318
|
+
doc: "Some content to clear",
|
|
319
|
+
selection: { anchor: 10 },
|
|
320
|
+
}),
|
|
321
|
+
});
|
|
322
|
+
|
|
323
|
+
Object.defineProperty(view, "hasFocus", {
|
|
324
|
+
get: () => true,
|
|
325
|
+
configurable: true,
|
|
326
|
+
});
|
|
327
|
+
|
|
328
|
+
replaceEditorContent(view, "");
|
|
329
|
+
|
|
330
|
+
expect(view.state.doc.toString()).toBe("");
|
|
331
|
+
// Cursor should be at position 0 (only valid position in empty doc)
|
|
332
|
+
expect(view.state.selection.main.head).toBe(0);
|
|
333
|
+
|
|
334
|
+
view.destroy();
|
|
335
|
+
});
|
|
336
|
+
});
|
|
@@ -46,7 +46,6 @@ import type {
|
|
|
46
46
|
KeymapConfig,
|
|
47
47
|
LSPConfig,
|
|
48
48
|
} from "../config/config-schema";
|
|
49
|
-
import { getFeatureFlag } from "../config/feature-flag";
|
|
50
49
|
import type { HotkeyProvider } from "../hotkeys/hotkeys";
|
|
51
50
|
import { store } from "../state/jotai";
|
|
52
51
|
import { requestEditCompletion } from "./ai/request";
|
|
@@ -83,6 +82,7 @@ export interface CodeMirrorSetupOpts {
|
|
|
83
82
|
lspConfig: LSPConfig;
|
|
84
83
|
diagnosticsConfig: DiagnosticsConfig;
|
|
85
84
|
displayConfig: Pick<DisplayConfig, "reference_highlighting">;
|
|
85
|
+
inlineAiTooltip: boolean;
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
function getPlaceholderType(opts: CodeMirrorSetupOpts) {
|
|
@@ -104,6 +104,7 @@ export const setupCodeMirror = (opts: CodeMirrorSetupOpts): Extension[] => {
|
|
|
104
104
|
lspConfig,
|
|
105
105
|
diagnosticsConfig,
|
|
106
106
|
displayConfig,
|
|
107
|
+
inlineAiTooltip,
|
|
107
108
|
} = opts;
|
|
108
109
|
const placeholderType = getPlaceholderType(opts);
|
|
109
110
|
|
|
@@ -128,7 +129,7 @@ export const setupCodeMirror = (opts: CodeMirrorSetupOpts): Extension[] => {
|
|
|
128
129
|
goToDefinitionBundle(),
|
|
129
130
|
diagnosticsConfig?.enabled ? lintGutter() : [],
|
|
130
131
|
// AI edit inline
|
|
131
|
-
enableAI &&
|
|
132
|
+
enableAI && inlineAiTooltip
|
|
132
133
|
? [
|
|
133
134
|
aiExtension({
|
|
134
135
|
prompt: (req) => {
|
|
@@ -4,6 +4,7 @@ import { SearchQuery } from "@codemirror/search";
|
|
|
4
4
|
import { EditorSelection } from "@codemirror/state";
|
|
5
5
|
import { EditorView } from "@codemirror/view";
|
|
6
6
|
import { getAllEditorViews } from "@/core/cells/cells";
|
|
7
|
+
import { replaceEditorContent } from "@/core/codemirror/replace-editor-content";
|
|
7
8
|
import { store } from "@/core/state/jotai";
|
|
8
9
|
import { asQueryCreator, type QueryType } from "./query";
|
|
9
10
|
import { findReplaceAtom } from "./state";
|
|
@@ -127,8 +128,7 @@ export const replaceAll = searchCommand(({ query }) => {
|
|
|
127
128
|
|
|
128
129
|
const prevDoc = view.state.doc.toString();
|
|
129
130
|
undoHandlers.push(() => {
|
|
130
|
-
view
|
|
131
|
-
changes: [{ from: 0, to: view.state.doc.length, insert: prevDoc }],
|
|
131
|
+
replaceEditorContent(view, prevDoc, {
|
|
132
132
|
userEvent: "input.replace.all",
|
|
133
133
|
});
|
|
134
134
|
});
|
|
@@ -17,6 +17,7 @@ import {
|
|
|
17
17
|
getEditorCodeAsPython,
|
|
18
18
|
updateEditorCodeFromPython,
|
|
19
19
|
} from "./language/utils";
|
|
20
|
+
import { replaceEditorContent } from "./replace-editor-content";
|
|
20
21
|
|
|
21
22
|
export const formattingChangeEffect = StateEffect.define<boolean>();
|
|
22
23
|
|
|
@@ -106,15 +107,7 @@ export async function formatSQL(editor: EditorView) {
|
|
|
106
107
|
});
|
|
107
108
|
|
|
108
109
|
// Update editor with formatted SQL
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
// Noop if the code is the same
|
|
112
|
-
if (doc.toString() === formattedSQL) {
|
|
113
|
-
return;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
editor.dispatch({
|
|
117
|
-
changes: { from: 0, to: doc.length, insert: formattedSQL },
|
|
110
|
+
replaceEditorContent(editor, formattedSQL, {
|
|
118
111
|
effects: [formattingChangeEffect.of(true)],
|
|
119
112
|
});
|
|
120
113
|
}
|
|
@@ -8,6 +8,12 @@ import { PostgreSQL } from "@codemirror/lang-sql";
|
|
|
8
8
|
import { EditorState, type Extension } from "@codemirror/state";
|
|
9
9
|
import { DuckDBDialect } from "@marimo-team/codemirror-sql/dialects";
|
|
10
10
|
import { afterEach, beforeEach, describe, expect, it } from "vitest";
|
|
11
|
+
import type { CellId } from "@/core/cells/ids";
|
|
12
|
+
import type {
|
|
13
|
+
CompletionConfig,
|
|
14
|
+
DiagnosticsConfig,
|
|
15
|
+
LSPConfig,
|
|
16
|
+
} from "@/core/config/config-schema";
|
|
11
17
|
import type { DataSourceConnection } from "@/core/datasets/data-source-connections";
|
|
12
18
|
import {
|
|
13
19
|
dataSourceConnectionsAtom,
|
|
@@ -16,7 +22,9 @@ import {
|
|
|
16
22
|
import { type ConnectionName, DUCKDB_ENGINE } from "@/core/datasets/engines";
|
|
17
23
|
import { datasetsAtom } from "@/core/datasets/state";
|
|
18
24
|
import type { DatasetsState } from "@/core/datasets/types";
|
|
25
|
+
import type { HotkeyProvider } from "@/core/hotkeys/hotkeys";
|
|
19
26
|
import { store } from "@/core/state/jotai";
|
|
27
|
+
import type { PlaceholderType } from "../../config/types";
|
|
20
28
|
import { TestSQLCompletionStore } from "../languages/sql/completion-store";
|
|
21
29
|
import {
|
|
22
30
|
SQLLanguageAdapter,
|
|
@@ -28,6 +36,16 @@ const adapter = new SQLLanguageAdapter();
|
|
|
28
36
|
|
|
29
37
|
const TEST_ENGINE = "test_engine" as ConnectionName;
|
|
30
38
|
|
|
39
|
+
const TEST_EXTENSION_ARGS = [
|
|
40
|
+
{} as CellId,
|
|
41
|
+
{} as CompletionConfig,
|
|
42
|
+
{} as HotkeyProvider,
|
|
43
|
+
{} as PlaceholderType,
|
|
44
|
+
{} as LSPConfig & {
|
|
45
|
+
diagnostics: DiagnosticsConfig;
|
|
46
|
+
},
|
|
47
|
+
] as const;
|
|
48
|
+
|
|
31
49
|
describe("SQLLanguageAdapter", () => {
|
|
32
50
|
describe("defaultMetadata", () => {
|
|
33
51
|
it("should be set", () => {
|
|
@@ -1716,7 +1734,7 @@ describe("tablesCompletionSource", () => {
|
|
|
1716
1734
|
const ctx = createCompletionContext(state, 14);
|
|
1717
1735
|
|
|
1718
1736
|
const adapter = new SQLLanguageAdapter();
|
|
1719
|
-
const extensions = adapter.getExtension();
|
|
1737
|
+
const extensions = adapter.getExtension(...TEST_EXTENSION_ARGS);
|
|
1720
1738
|
const completion = getCompletion(extensions);
|
|
1721
1739
|
|
|
1722
1740
|
expect(completion).toBeDefined();
|
|
@@ -1779,7 +1797,7 @@ describe("tablesCompletionSource", () => {
|
|
|
1779
1797
|
const ctx = createCompletionContext(state, 15, "u", 14);
|
|
1780
1798
|
|
|
1781
1799
|
const adapter = new SQLLanguageAdapter();
|
|
1782
|
-
const extensions = adapter.getExtension();
|
|
1800
|
+
const extensions = adapter.getExtension(...TEST_EXTENSION_ARGS);
|
|
1783
1801
|
const completion = getCompletion(extensions);
|
|
1784
1802
|
|
|
1785
1803
|
expect(completion).toBeDefined();
|
|
@@ -1810,7 +1828,7 @@ describe("tablesCompletionSource", () => {
|
|
|
1810
1828
|
const ctx = createCompletionContext(state, 15, "d", 14);
|
|
1811
1829
|
|
|
1812
1830
|
const adapter = new SQLLanguageAdapter();
|
|
1813
|
-
const extensions = adapter.getExtension();
|
|
1831
|
+
const extensions = adapter.getExtension(...TEST_EXTENSION_ARGS);
|
|
1814
1832
|
const completion = getCompletion(extensions);
|
|
1815
1833
|
|
|
1816
1834
|
expect(completion).toBeDefined();
|
|
@@ -1843,7 +1861,7 @@ describe("tablesCompletionSource", () => {
|
|
|
1843
1861
|
const ctx = createCompletionContext(state, 3, "SEL", 0);
|
|
1844
1862
|
|
|
1845
1863
|
const adapter = new SQLLanguageAdapter();
|
|
1846
|
-
const extensions = adapter.getExtension();
|
|
1864
|
+
const extensions = adapter.getExtension(...TEST_EXTENSION_ARGS);
|
|
1847
1865
|
const completion = getCompletion(extensions);
|
|
1848
1866
|
|
|
1849
1867
|
expect(completion).toBeDefined();
|
|
@@ -1874,7 +1892,7 @@ describe("tablesCompletionSource", () => {
|
|
|
1874
1892
|
const ctx = createCompletionContext(state, 14, ".n", 12);
|
|
1875
1893
|
|
|
1876
1894
|
const adapter = new SQLLanguageAdapter();
|
|
1877
|
-
const extensions = adapter.getExtension();
|
|
1895
|
+
const extensions = adapter.getExtension(...TEST_EXTENSION_ARGS);
|
|
1878
1896
|
const completion = getCompletion(extensions);
|
|
1879
1897
|
|
|
1880
1898
|
expect(completion).toBeDefined();
|
|
@@ -1906,7 +1924,7 @@ describe("tablesCompletionSource", () => {
|
|
|
1906
1924
|
describe("variableCompletionSource", () => {
|
|
1907
1925
|
it("should be included in extension overrides", () => {
|
|
1908
1926
|
const adapter = new SQLLanguageAdapter();
|
|
1909
|
-
const extensions = adapter.getExtension();
|
|
1927
|
+
const extensions = adapter.getExtension(...TEST_EXTENSION_ARGS);
|
|
1910
1928
|
const completion = getCompletion(extensions);
|
|
1911
1929
|
|
|
1912
1930
|
expect(completion).toBeDefined();
|
|
@@ -128,7 +128,6 @@ const pylspClient = once((lspConfig: LSPConfig) => {
|
|
|
128
128
|
return new NotebookLanguageServerClient(
|
|
129
129
|
new LanguageServerClient({
|
|
130
130
|
...lspClientOpts,
|
|
131
|
-
autoClose: false,
|
|
132
131
|
}),
|
|
133
132
|
settings,
|
|
134
133
|
);
|
|
@@ -146,7 +145,6 @@ const tyLspClient = once((_: LSPConfig) => {
|
|
|
146
145
|
return new NotebookLanguageServerClient(
|
|
147
146
|
new LanguageServerClient({
|
|
148
147
|
...lspClientOpts,
|
|
149
|
-
autoClose: false,
|
|
150
148
|
getWorkspaceConfiguration: (_) => [{ disableLanguageServices: true }],
|
|
151
149
|
}),
|
|
152
150
|
{},
|
|
@@ -165,7 +163,6 @@ const pyrightClient = once((_: LSPConfig) => {
|
|
|
165
163
|
return new NotebookLanguageServerClient(
|
|
166
164
|
new LanguageServerClient({
|
|
167
165
|
...lspClientOpts,
|
|
168
|
-
autoClose: false,
|
|
169
166
|
}),
|
|
170
167
|
{},
|
|
171
168
|
);
|
|
@@ -242,6 +239,7 @@ export class PythonLanguageAdapter implements LanguageAdapter<{}> {
|
|
|
242
239
|
client: client as unknown as LanguageServerClient,
|
|
243
240
|
languageId: "python",
|
|
244
241
|
allowHTMLContent: true,
|
|
242
|
+
useSnippetOnCompletion: false,
|
|
245
243
|
hoverConfig: hoverOptions,
|
|
246
244
|
completionConfig: autocompleteOptions,
|
|
247
245
|
// Default to false
|