@marimo-team/islands 0.17.8 → 0.18.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Combination-DN9sfYvo.js +2569 -0
- package/dist/{ConnectedDataExplorerComponent-WbiFXhKG.js → ConnectedDataExplorerComponent-Dhlx78se.js} +53 -53
- package/dist/angular-html-BQrFNFXr.js +7 -0
- package/dist/{angular-html-DOnHLneR.js → angular-html-NuAgzn7W.js} +1 -1
- package/dist/{angular-ts-ClZ_D57Q.js → angular-ts-DqCVY0oX.js} +5 -5
- package/dist/{any-language-editor-YPQMljy9.js → any-language-editor-C8uMYHwj.js} +16 -16
- package/dist/{apl-BQW_2HeZ.js → apl-CqAdrzTc.js} +6 -6
- package/dist/{arc-DqQgmHse.js → arc-JJltOFJh.js} +2 -2
- package/dist/{architecture-O4VJ6CD3-BAmYZukJ.js → architecture-O4VJ6CD3-D7BH29FP.js} +3 -3
- package/dist/{architectureDiagram-W76B3OCA-6PSfeg_h.js → architectureDiagram-W76B3OCA-BXXl3wYv.js} +22 -22
- package/dist/assets/__vite-browser-external-CSegkGa0.js +1 -0
- package/dist/assets/{worker-BrDpRi2I.js → worker-CiT2i-Vo.js} +2 -2
- package/dist/{astro-B_6-YJyf.js → astro-BhYIwlT9.js} +6 -6
- package/dist/{blade-J--jW6Qd.js → blade-C_4Ocghp.js} +8 -8
- package/dist/{blockDiagram-QIGZ2CNN-BBAMkEiZ.js → blockDiagram-QIGZ2CNN-BEJ-ovZ-.js} +16 -16
- package/dist/{bsl-DwRO_vPO.js → bsl-Cam9acj0.js} +1 -1
- package/dist/{button-Hye6-2X8.js → button-Css_i-3R.js} +73 -71
- package/dist/c-DYGEdS-r.js +4 -0
- package/dist/{c4Diagram-FPNF74CW-H3kajU-4.js → c4Diagram-FPNF74CW-Bec_XtUS.js} +8 -8
- package/dist/{cairo-C5YwJoRd.js → cairo-DzTxWLx8.js} +1 -1
- package/dist/{channel-DO61Dn1s.js → channel-SHZ3pH5W.js} +1 -1
- package/dist/{chunk-3AY6CYHV-PGaWKUmM.js → chunk-3AY6CYHV-CY56r15D.js} +10 -10
- package/dist/{chunk-4BX2VUAB-C2wFBih6.js → chunk-4BX2VUAB-DakkmKa6.js} +1 -1
- package/dist/{chunk-4KMFLZZN-BLk4DGEy.js → chunk-4KMFLZZN-PjonQa4P.js} +1 -1
- package/dist/{chunk-55IACEB6-DQd6AZ1u.js → chunk-55IACEB6-lM9AcPFI.js} +1 -1
- package/dist/{chunk-6OXUPJBA-KTKvUtax.js → chunk-6OXUPJBA-CtytfqPH.js} +7 -7
- package/dist/{chunk-7GE3RBXV-2QiFkaHl.js → chunk-7GE3RBXV-Ch2VFfx5.js} +1 -1
- package/dist/{chunk-ABZYJK2D-plHo87kc.js → chunk-ABZYJK2D-ChhHEVnH.js} +2 -2
- package/dist/{chunk-BN7GFLIU-D4EEpMya.js → chunk-BN7GFLIU-4gH4skZE.js} +1 -1
- package/dist/{chunk-CVBHYZKI-nBM-9qrT.js → chunk-CVBHYZKI-CvLGu9Zl.js} +1 -1
- package/dist/{chunk-CXMOBAN2-DQYc62lB.js → chunk-CXMOBAN2-DmuTyIC5.js} +6 -6
- package/dist/{chunk-EXTU4WIE-CzYdpCHC.js → chunk-EXTU4WIE-5gY1kHy6.js} +2 -2
- package/dist/{chunk-FMBD7UC4-5CTTj0Jv.js → chunk-FMBD7UC4-CktmbpHj.js} +1 -1
- package/dist/{chunk-JA3XYJ7Z-iN-ePWJa.js → chunk-JA3XYJ7Z-DoOh1zwr.js} +4 -4
- package/dist/{chunk-JEIROHC2-DJN5-Qfh.js → chunk-JEIROHC2-BxiaYL-E.js} +1 -1
- package/dist/{chunk-K7UQS3LO-BFLlfdsi.js → chunk-K7UQS3LO-jAauQP9f.js} +7 -7
- package/dist/{chunk-KMC2YHZD-BvIjRiOn.js → chunk-KMC2YHZD-DStgMcLU.js} +1 -1
- package/dist/{chunk-QN33PNHL-Brd7yTp3.js → chunk-QN33PNHL-a6Utqqtp.js} +2 -2
- package/dist/{chunk-QYVHNE3D-2JcHbPf-.js → chunk-QYVHNE3D-Di-okNtj.js} +2 -2
- package/dist/{chunk-QZHKN3VN-uMYxkooq.js → chunk-QZHKN3VN-uG0W9XCn.js} +1 -1
- package/dist/{chunk-S3R3BYOJ-F8AD9lHs.js → chunk-S3R3BYOJ-D8svDLcB.js} +4 -4
- package/dist/{chunk-T44TD3VJ-BuOpBf-m.js → chunk-T44TD3VJ-C5NCytxJ.js} +1 -1
- package/dist/{chunk-TVAH2DTR-CnMJAbv2.js → chunk-TVAH2DTR-CXLr85J9.js} +6 -6
- package/dist/{chunk-TZMSLE5B-FgoUBce3.js → chunk-TZMSLE5B-1E_YfHMJ.js} +3 -3
- package/dist/{chunk-WFRQ32O7-XYO_3xAi.js → chunk-WFRQ32O7-BKSf4yCO.js} +1 -1
- package/dist/{chunk-WFWHJNB7-CO2PO-xj.js → chunk-WFWHJNB7-B1Zzkj_f.js} +1 -1
- package/dist/{chunk-XRWGC2XP-NEUwjXBT.js → chunk-XRWGC2XP-Bo8DlVQO.js} +1 -1
- package/dist/{chunk-ZPAFE4SF-CyeNhdPx.js → chunk-ZPAFE4SF-CmteRP75.js} +1 -1
- package/dist/classDiagram-KNZD7YFC-ZbE61oE0.js +40 -0
- package/dist/classDiagram-v2-RKCZMP56-BqhgFvho.js +40 -0
- package/dist/cmake-l0t4JJ7s.js +4 -0
- package/dist/{cobol-lK28EtZf.js → cobol-DJP1EK1j.js} +4 -4
- package/dist/{coffee-BSXLyDD2.js → coffee-CC5nEIi9.js} +1 -1
- package/dist/{cose-bilkent-S5V4N54A-Cj0MgFkf.js → cose-bilkent-S5V4N54A-DKXAkYs4.js} +3 -3
- package/dist/cpp-ANCO5onE.js +8 -0
- package/dist/{cpp-BChLOGjC.js → cpp-D9LYqqPp.js} +3 -3
- package/dist/{crystal-CO99xfcp.js → crystal-BRqcx7ej.js} +6 -6
- package/dist/csharp-Bz76NQ_J.js +4 -0
- package/dist/css-DAuWdYvT.js +4 -0
- package/dist/{dagre-5GWH7T2D-CfnBQe48.js → dagre-5GWH7T2D-NKT9rsKF.js} +17 -17
- package/dist/{data-grid-overlay-editor-Bcf9kFFc.js → data-grid-overlay-editor-awitGObA.js} +2 -2
- package/dist/{diagram-N5W7TBWH-04TOCf2a.js → diagram-N5W7TBWH-D7Lb6iTv.js} +24 -24
- package/dist/{diagram-QEK2KX5R-CUipzemR.js → diagram-QEK2KX5R-BGNlTTAr.js} +19 -19
- package/dist/{diagram-S2PKOQOG-ei2iw-oI.js → diagram-S2PKOQOG-DArsBfLb.js} +19 -19
- package/dist/diff-C7LSwbp8.js +4 -0
- package/dist/{dist-cqkd3NiL.js → dist-6NgnwCMd.js} +3 -3
- package/dist/{dist-CqazJcfk.js → dist-BDVas7u0.js} +1 -1
- package/dist/{dist-CGt0X2sV.js → dist-BeL8NYBI.js} +2 -2
- package/dist/dist-BhEY2Z_n.js +14 -0
- package/dist/{dist-R4ZaAXGr.js → dist-BkgFFOsz.js} +2 -2
- package/dist/{dist-v-r4jaY5.js → dist-BoehQujB.js} +1 -1
- package/dist/{dist-D7XZ_tXQ.js → dist-C2nw9RHE.js} +1 -1
- package/dist/{dist-BGDtO7aZ.js → dist-CAS8F-hC.js} +1 -1
- package/dist/{dist-s1LnJ5PG.js → dist-CS4N5B_G.js} +1 -1
- package/dist/{dist-B4S8pyFo.js → dist-Cc9Qz-U4.js} +3 -3
- package/dist/{dist-4FDGlo3i.js → dist-CljL8T10.js} +4 -4
- package/dist/dist-Cud0QD8Y.js +10 -0
- package/dist/{dist-Bi6qs7up.js → dist-D9rISDoI.js} +1 -1
- package/dist/dist-D9t6fT6i.js +10 -0
- package/dist/{dist-CTSMnLwu.js → dist-DC47GA46.js} +805 -643
- package/dist/{dist-D0KS-m2t.js → dist-Dh6pWjSH.js} +2 -2
- package/dist/{dist-DtSssmhN.js → dist-DlI9v2Hh.js} +2 -2
- package/dist/{dist-CSq74zEj.js → dist-DyXVT1vy.js} +1 -1
- package/dist/{dist-DO00gdpV.js → dist-TdQLXZKo.js} +3 -3
- package/dist/{dist-B9WB0SFB.js → dist-WvPZl2Sl.js} +1 -1
- package/dist/{dist-B4jO5BUT.js → dist-q94GwumS.js} +1 -1
- package/dist/{dist-CmEIe_wJ.js → dist-qGG7RM7P.js} +4 -4
- package/dist/{edge-BTCHQnL0.js → edge-DeFsqb1i.js} +5 -5
- package/dist/{elixir-CCIwO0SA.js → elixir-BGD3Ym80.js} +3 -3
- package/dist/{elm-Bd8GMb2w.js → elm-sXxjAPfa.js} +2 -2
- package/dist/{erDiagram-AWTI2OKA-DOO75nhy.js → erDiagram-AWTI2OKA-Dd30FpUG.js} +21 -21
- package/dist/{erb-C2XKicEJ.js → erb-CVVq1SHo.js} +19 -19
- package/dist/{erlang-BWIWBPfK.js → erlang-CoJZUhS4.js} +1 -1
- package/dist/{error-banner-BqE1uF21.js → error-banner-DDDPnVZA.js} +126 -124
- package/dist/esm-BC9Qw9UQ.js +4056 -0
- package/dist/{esm-hR1r0nyt.js → esm-DDjaZl5x.js} +14 -14
- package/dist/{flowDiagram-PVAE7QVJ-AUJeRwR9.js → flowDiagram-PVAE7QVJ-Dfo2-D8K.js} +23 -23
- package/dist/{formats-dvT8nDgH.js → formats-DClgE90A.js} +41 -21
- package/dist/{fortran-fixed-form-DOH2AovA.js → fortran-fixed-form-DUVqo01t.js} +1 -1
- package/dist/{fortran-free-form-DWQ7SFTN.js → fortran-free-form-e6UrnOjF.js} +1 -1
- package/dist/{fsharp-GbWUX1wo.js → fsharp-8cm272ry.js} +1 -1
- package/dist/{ganttDiagram-OWAHRB6G-d9HlXS4A.js → ganttDiagram-OWAHRB6G-CE9rMeMb.js} +10 -10
- package/dist/{gdresource-DJQ1WGjU.js → gdresource-ClFnPq3a.js} +2 -2
- package/dist/gdscript-B0LZbOIR.js +4 -0
- package/dist/gdshader-DFrJP5ei.js +4 -0
- package/dist/{git-commit-73gQ2jal.js → git-commit-BYaLl5ls.js} +1 -1
- package/dist/{git-rebase-tezkvplk.js → git-rebase-8n1RW6UD.js} +1 -1
- package/dist/{gitGraph-ZV4HHKMB-4c_I6adP.js → gitGraph-ZV4HHKMB-DGIos9rl.js} +3 -3
- package/dist/{gitGraphDiagram-NY62KEGX-BdOzqIF7.js → gitGraphDiagram-NY62KEGX-DJjzf0dH.js} +19 -19
- package/dist/{glide-data-editor-B26PhZvE.js → glide-data-editor-CdlLXwb-.js} +94 -94
- package/dist/{glimmer-js-B4yN_cyX.js → glimmer-js-Dai0PeIS.js} +4 -4
- package/dist/{glimmer-ts-BFwzJYHf.js → glimmer-ts-D_TjaTpy.js} +4 -4
- package/dist/glsl-CxEuvrWH.js +5 -0
- package/dist/{glsl-Da3zbemV.js → glsl-CyGXCGI2.js} +1 -1
- package/dist/go-DdqSEUJy.js +4 -0
- package/dist/{graphql-DHCTQXG8.js → graphql-B1Dx1rcM.js} +4 -4
- package/dist/graphql-cxjxtpev.js +8 -0
- package/dist/{hack-Bq2SPMdZ.js → hack-DaQhTJ_x.js} +4 -4
- package/dist/{haml-DKOqVKa_.js → haml-Bp5GoYpB.js} +2 -2
- package/dist/haml-CiyF8Brn.js +6 -0
- package/dist/{handlebars-lWgxxMwE.js → handlebars-ChGgzSRK.js} +4 -4
- package/dist/haxe-DCTL_FCo.js +4 -0
- package/dist/hlsl-Bfx4Ir_v.js +4 -0
- package/dist/{html-CHICwrWt.js → html-C4wWoZph.js} +2 -2
- package/dist/html-CEOIAVhY.js +6 -0
- package/dist/{html-derivative-BvtUczEO.js → html-derivative-BBqlL-a4.js} +1 -1
- package/dist/{html-derivative-PpMnWy1w.js → html-derivative-COo0pM2g.js} +4 -4
- package/dist/{http-CL7ORkDb.js → http-BBZ3n4Nc.js} +9 -9
- package/dist/{hxml-dX0MdapH.js → hxml-B3WEmVIR.js} +1 -1
- package/dist/{info-63CPKGFF-Bz8ia4ds.js → info-63CPKGFF-BJRf7NSB.js} +3 -3
- package/dist/{infoDiagram-STP46IZ2-2N5rOSVf.js → infoDiagram-STP46IZ2-wRiL7RAF.js} +15 -15
- package/dist/java-Dg_uLDO2.js +4 -0
- package/dist/javascript-UdF6t51O.js +4 -0
- package/dist/{jinja-DsZfQ7_N.js → jinja-DIY5F3JL.js} +3 -3
- package/dist/{jison-BspgGSu_.js → jison-NvMl7ZRB.js} +1 -1
- package/dist/{journeyDiagram-BIP6EPQ6-AkLtiVmB.js → journeyDiagram-BIP6EPQ6-xE-QKfW3.js} +9 -9
- package/dist/json-DhGO17Us.js +4 -0
- package/dist/jsx-BnWl0sfU.js +4 -0
- package/dist/{julia-B_C4JiTM.js → julia-B99Wf6ks.js} +8 -8
- package/dist/{kanban-definition-6OIFK2YF-Crxg_HOg.js → kanban-definition-6OIFK2YF-xTM_lSKu.js} +15 -15
- package/dist/{katex-CTMLv-Xd.js → katex-_B79i9h_.js} +1 -1
- package/dist/{label-D3LNCORf.js → label-DboGLjGa.js} +234 -203
- package/dist/{latex-DoiWAlAQ.js → latex-CZecqbCK.js} +2 -2
- package/dist/less-DZgWnAzP.js +4 -0
- package/dist/{line-DBxDZ2GZ.js → line-Bm50ongk.js} +3 -3
- package/dist/{linear-B8XR-NVr.js → linear-CUCOukde.js} +2 -2
- package/dist/{liquid-Bv5Ox8yg.js → liquid-CBTCQ-BA.js} +4 -4
- package/dist/{lua-BKJ_BAEH.js → lua-BAo0xbXr.js} +1 -1
- package/dist/lua-C4LdLFQB.js +5 -0
- package/dist/main.js +9322 -8755
- package/dist/markdown-DmoiORob.js +4 -0
- package/dist/{marko-DEzr-2oj.js → marko-aJY3NB2u.js} +4 -4
- package/dist/{mdc-GC7qNQda.js → mdc-DUOD_AOa.js} +6 -6
- package/dist/{mermaid-Dl3ywmV2.js → mermaid-DKh-bxRG.js} +24 -24
- package/dist/{mermaid-parser.core-C5kJ8cMb.js → mermaid-parser.core-BkBK5D-D.js} +8 -8
- package/dist/mermaid.core-BlYN1aB0.js +31 -0
- package/dist/{mermaid.core-2hDUD3tS.js → mermaid.core-DhviAB-E.js} +35 -35
- package/dist/{mhchem-ydsvRuzJ.js → mhchem-BLvV19Q1.js} +1 -1
- package/dist/{mindmap-definition-Q6HEUPPD-u3xALYXy.js → mindmap-definition-Q6HEUPPD-DhGkxCFl.js} +20 -20
- package/dist/{nginx-WYx0kjQD.js → nginx-C4wBmtSL.js} +2 -2
- package/dist/{nim-B59jjkdb.js → nim-7HUrH4-G.js} +8 -8
- package/dist/{number-overlay-editor-BJoc-iTp.js → number-overlay-editor-B7JKtSXW.js} +1 -1
- package/dist/{ordinal-DncHRC0c.js → ordinal-CgAjEHLv.js} +1 -1
- package/dist/{packet-HUATNLJX-DZeFAkmI.js → packet-HUATNLJX-COt0WQbt.js} +3 -3
- package/dist/{perl-BWXWNd9p.js → perl-DcIsham4.js} +6 -6
- package/dist/{php-B2IAnMDw.js → php-BMhhkMnI.js} +6 -6
- package/dist/php-BgNggqvM.js +11 -0
- package/dist/{pie-WTHONI2E-CcN2FpmZ.js → pie-WTHONI2E-7VABasD6.js} +3 -3
- package/dist/{pieDiagram-ADFJNKIX-B40sMFEq.js → pieDiagram-ADFJNKIX-CV46TPgr.js} +24 -24
- package/dist/postcss-BV0gPaAN.js +4 -0
- package/dist/{pug-jCrWgXoo.js → pug-C7hWP9pb.js} +3 -3
- package/dist/python-DrIYjHcK.js +4 -0
- package/dist/{qml-BvryPJl6.js → qml-4wNHxISd.js} +1 -1
- package/dist/{quadrantDiagram-LMRXKWRM-C-qFDzwP.js → quadrantDiagram-LMRXKWRM-0ohBNHBM.js} +5 -5
- package/dist/r-bWdZZY4p.js +4 -0
- package/dist/{radar-NJJJXTRR-DgOJ0Ctc.js → radar-NJJJXTRR-DEeA59xM.js} +3 -3
- package/dist/{razor-BsW9JZIF.js → razor-kE6VSkUw.js} +4 -4
- package/dist/react-vega-BFAvc6S7.js +25 -0
- package/dist/{react-vega-ypEMYp9o.js → react-vega-L8_x6Wjr.js} +50 -23
- package/dist/regexp-Du19WMsH.js +4 -0
- package/dist/{requirementDiagram-4UW4RH46-Cl_mIh_y.js → requirementDiagram-4UW4RH46-DSnND54_.js} +20 -20
- package/dist/{rst-CRU76Z1W.js → rst-CjWaqJB3.js} +22 -22
- package/dist/{ruby-9gRRZYzM.js → ruby-CX211_l4.js} +12 -12
- package/dist/ruby-Dsch-4qr.js +22 -0
- package/dist/{sankeyDiagram-GR3RE2ED-Dm9k3dHY.js → sankeyDiagram-GR3RE2ED-C4jd7w5x.js} +6 -6
- package/dist/{sas-BDTaEI61.js → sas-Bso79j2d.js} +1 -1
- package/dist/{scss-B1u4Hrbb.js → scss-B2x0kI7c.js} +1 -1
- package/dist/scss-BHcIhkao.js +5 -0
- package/dist/sdbl-CiVVvobW.js +4 -0
- package/dist/{sequenceDiagram-C3RYC4MD-DmU9oc42.js → sequenceDiagram-C3RYC4MD-4cYnu6yf.js} +10 -10
- package/dist/{shaderlab-Bm5WmYK9.js → shaderlab-B4l4__9m.js} +1 -1
- package/dist/shellscript-Carvxcyf.js +4 -0
- package/dist/{shellsession-CN-wC7WL.js → shellsession-D-krdWsh.js} +1 -1
- package/dist/{slides-component-CZksIptv.js → slides-component-Cm9g-y7F.js} +1 -1
- package/dist/{soy-CeMP2PMh.js → soy-wFhS-Vjb.js} +3 -3
- package/dist/{sparql-M76X2Hg1.js → sparql-D6Kv-L3I.js} +1 -1
- package/dist/{spec-qDDGe5hl.js → spec-B7BWIiD8.js} +3 -3
- package/dist/sql-CVP77J2a.js +4 -0
- package/dist/{src-CePha-_O.js → src-DopHipf8.js} +1 -1
- package/dist/{stata-BH7l4VD7.js → stata-1fehkWpU.js} +1 -1
- package/dist/{stateDiagram-KXAO66HF-D_SUaMYR.js → stateDiagram-KXAO66HF-Cq-ezNe-.js} +21 -21
- package/dist/stateDiagram-v2-UMBNRL4Z-QxkaR8xk.js +39 -0
- package/dist/{step-zYP-E-fB.js → step-Bixovd6W.js} +1 -1
- package/dist/stex-IzMc-wiJ.js +5 -0
- package/dist/style.css +1 -2
- package/dist/stylus-BTQe34gF.js +4 -0
- package/dist/{svelte-TwcowgfT.js → svelte-DZNFxgw8.js} +4 -4
- package/dist/{templ-BpG-MhQv.js → templ-unaxtPDu.js} +3 -3
- package/dist/tex-B02KkJuq.js +5 -0
- package/dist/{tex-CBM64lBG.js → tex-WcClzGDl.js} +1 -1
- package/dist/{time-DRnNkqSS.js → time-D5kvxFYj.js} +2 -2
- package/dist/{timeline-definition-XQNQX7LJ-BgkB1JzD.js → timeline-definition-XQNQX7LJ-HouMBLkR.js} +6 -6
- package/dist/{treemap-75Q7IDZK-CGM2jb5Y.js → treemap-75Q7IDZK-rIabFN59.js} +3 -3
- package/dist/{ts-tags-CywVDBFD.js → ts-tags-Dw16jybl.js} +9 -9
- package/dist/tsx-2o7mnE6q.js +4 -0
- package/dist/turtle-CDidgplC.js +4 -0
- package/dist/{twig-DKvQCGZl.js → twig-CTY0fjwf.js} +23 -23
- package/dist/{types-2eTEqSwS.js → types-8-7JTTaW.js} +176 -175
- package/dist/typescript-Z3djoets.js +4 -0
- package/dist/{useAsyncData-6gisQ4pR.js → useAsyncData-_ejUTnFA.js} +1 -1
- package/dist/{useTheme-B-2frT0L.js → useTheme-Cpx27F7Z.js} +5 -2
- package/dist/{vega-component-C-bCSv1b.js → vega-component-r6NkLfxM.js} +213 -212
- package/dist/{vue-CUZawI_b.js → vue-BjZgU5Nz.js} +6 -6
- package/dist/vue-DhUZPDmo.js +10 -0
- package/dist/{vue-html-Bx7_HmU0.js → vue-html-C4EmFqJx.js} +7 -7
- package/dist/{vue-vine-9w78JPDc.js → vue-vine-DrjIj56i.js} +11 -11
- package/dist/{xml-CEIIhUsl.js → xml-BgKyT7dU.js} +1 -1
- package/dist/xml-C7KksLEJ.js +5 -0
- package/dist/{xsl-BynZr4Sw.js → xsl-9daNus4h.js} +2 -2
- package/dist/{xychartDiagram-6GGTOJPD-u5660hzT.js → xychartDiagram-6GGTOJPD-DkDWjoGr.js} +16 -16
- package/dist/yaml-zmBXofFy.js +4 -0
- package/package.json +8 -8
- package/src/components/chat/acp/blocks.tsx +1 -1
- package/src/components/chat/chat-panel.tsx +7 -3
- package/src/components/chat/reasoning-accordion.tsx +1 -1
- package/src/components/data-table/TableActions.tsx +18 -14
- package/src/components/data-table/__tests__/columns.test.tsx +143 -1
- package/src/components/data-table/__tests__/url-detector.test.tsx +92 -1
- package/src/components/data-table/columns.tsx +34 -17
- package/src/components/data-table/data-table.tsx +3 -0
- package/src/components/data-table/download-actions.tsx +16 -8
- package/src/components/data-table/row-viewer-panel/row-viewer.tsx +5 -5
- package/src/components/data-table/url-detector.tsx +43 -0
- package/src/components/datasources/utils.ts +7 -0
- package/src/components/editor/ai/ai-completion-editor.tsx +6 -3
- package/src/components/editor/cell/CreateCellButton.tsx +98 -88
- package/src/components/editor/chrome/panels/packages-panel.tsx +3 -1
- package/src/components/editor/chrome/types.ts +7 -0
- package/src/components/editor/file-tree/__tests__/file-expolorer.test.ts +179 -0
- package/src/components/editor/file-tree/file-explorer.tsx +71 -1
- package/src/components/editor/notebook-cell.tsx +27 -25
- package/src/components/editor/output/__tests__/ansi-reduce.test.ts +8 -0
- package/src/components/editor/output/ansi-reduce.ts +7 -4
- package/src/components/editor/renderers/grid-layout/grid-layout.tsx +35 -3
- package/src/components/pages/home-page.tsx +8 -3
- package/src/components/ui/table.tsx +1 -1
- package/src/core/ai/tools/__tests__/edit-notebook-tool.test.ts +156 -10
- package/src/core/ai/tools/__tests__/registry.test.ts +41 -3
- package/src/core/ai/tools/edit-notebook-tool.ts +86 -45
- package/src/core/ai/tools/registry.ts +5 -2
- package/src/core/cells/__tests__/logs.test.ts +371 -0
- package/src/core/cells/__tests__/session.test.ts +0 -9
- package/src/core/cells/logs.ts +16 -5
- package/src/core/cells/session.ts +0 -1
- package/src/core/codemirror/__tests__/format.test.ts +28 -2
- package/src/core/codemirror/copilot/client.ts +21 -1
- package/src/core/codemirror/copilot/copilot-config.tsx +29 -1
- package/src/core/codemirror/editing/commands.ts +4 -3
- package/src/core/codemirror/format.ts +105 -7
- package/src/core/codemirror/language/languages/sql/completion-store.ts +1 -1
- package/src/core/codemirror/language/languages/sql/sql.ts +8 -1
- package/src/core/codemirror/language/languages/sql/utils.ts +15 -0
- package/src/core/codemirror/language/panel/panel.tsx +1 -1
- package/src/core/config/__tests__/config-schema.test.ts +2 -0
- package/src/core/config/config-schema.ts +4 -3
- package/src/core/packages/__tests__/package-input-utils.test.ts +93 -0
- package/src/core/packages/package-input-utils.ts +36 -0
- package/src/core/websocket/useMarimoWebSocket.tsx +1 -1
- package/src/css/app/Cell.css +6 -1
- package/src/css/md.css +5 -0
- package/src/plugins/core/__test__/sanitize.test.ts +1 -1
- package/src/plugins/core/sanitize.ts +3 -1
- package/src/plugins/impl/DataTablePlugin.tsx +10 -1
- package/src/plugins/impl/DateTimePickerPlugin.tsx +3 -1
- package/src/plugins/impl/__tests__/DateTimePickerPlugin.test.tsx +3 -0
- package/src/plugins/impl/chat/ChatPlugin.tsx +1 -0
- package/src/plugins/impl/chat/chat-ui.tsx +140 -10
- package/src/plugins/impl/common/error-banner.tsx +7 -3
- package/src/plugins/impl/data-frames/DataFramePlugin.tsx +1 -0
- package/src/plugins/impl/vega/VegaPlugin.tsx +1 -0
- package/src/plugins/impl/vega/vega-component.tsx +26 -5
- package/src/plugins/layout/NavigationMenuPlugin.tsx +14 -3
- package/src/plugins/layout/ProgressPlugin.tsx +8 -5
- package/src/plugins/layout/StatPlugin.tsx +11 -4
- package/src/plugins/layout/__test__/ProgressPlugin.test.ts +37 -21
- package/src/utils/__tests__/urls.test.ts +165 -1
- package/src/utils/urls.ts +120 -0
- package/src/utils/vitals.ts +1 -1
- package/dist/Combination-BH_L276x.js +0 -2503
- package/dist/angular-html-BcsYKZNy.js +0 -7
- package/dist/assets/__vite-browser-external-BTNiCQ6O.js +0 -1
- package/dist/c-RhvfrIXd.js +0 -4
- package/dist/classDiagram-KNZD7YFC-BwfV2ECJ.js +0 -40
- package/dist/classDiagram-v2-RKCZMP56-CdtBTwGN.js +0 -40
- package/dist/cmake-Dv9WBQ8F.js +0 -4
- package/dist/cpp-De3HlDQp.js +0 -8
- package/dist/csharp-DONDYcLD.js +0 -4
- package/dist/css-KrVDDZJI.js +0 -4
- package/dist/diff-C_xoFltE.js +0 -4
- package/dist/dist-C_ywAD_6.js +0 -10
- package/dist/dist-Umyw8yf9.js +0 -10
- package/dist/download-Bb5BCMXq.js +0 -145
- package/dist/esm-Cjo4c4Vw.js +0 -2188
- package/dist/gdscript-CCtCxlxC.js +0 -4
- package/dist/gdshader-DRsZz2Lo.js +0 -4
- package/dist/glsl-Bpd55IJK.js +0 -5
- package/dist/go-BZbX8CmG.js +0 -4
- package/dist/graphql-C3W9lZa9.js +0 -8
- package/dist/haml-0dNTXdjh.js +0 -6
- package/dist/haxe-D67WIBdi.js +0 -4
- package/dist/hlsl-A_Yq2Muj.js +0 -4
- package/dist/html-C6ObPTU5.js +0 -6
- package/dist/java-BFakZb2S.js +0 -4
- package/dist/javascript-B8ZNE_3R.js +0 -4
- package/dist/json-CVwA-VKM.js +0 -4
- package/dist/jsx-TsEBgZMR.js +0 -4
- package/dist/less-R7I1oHvn.js +0 -4
- package/dist/lua-CdOJTa1m.js +0 -5
- package/dist/markdown-Czm489_C.js +0 -4
- package/dist/mermaid.core-D5NqLRbX.js +0 -31
- package/dist/php-B2RrCM5T.js +0 -11
- package/dist/postcss-CK8yd697.js +0 -4
- package/dist/python-BAyuw8wl.js +0 -4
- package/dist/r-CMKGyVVD.js +0 -4
- package/dist/react-vega-BIDT9Ttp.js +0 -25
- package/dist/regexp-C-NGZx14.js +0 -4
- package/dist/ruby-DC1LiM9o.js +0 -22
- package/dist/scss-9LDy_1oh.js +0 -5
- package/dist/sdbl-Cauk10zS.js +0 -4
- package/dist/shellscript-DPV_oGnY.js +0 -4
- package/dist/sql-BuUisnb3.js +0 -4
- package/dist/stateDiagram-v2-UMBNRL4Z-DdAPrjTz.js +0 -39
- package/dist/stex-BPCIi6ix.js +0 -5
- package/dist/stylus-BzfQ5p6U.js +0 -4
- package/dist/tex-DKaqHjWi.js +0 -5
- package/dist/tsx-CAS2Oalp.js +0 -4
- package/dist/turtle-Dqog6asB.js +0 -4
- package/dist/typescript-DHHJAsKz.js +0 -4
- package/dist/vue-DiyvUvuo.js +0 -10
- package/dist/xml-wE_-A0vH.js +0 -5
- package/dist/yaml-5htSumZI.js +0 -4
- /package/dist/{ImageComparisonComponent-DTO3nRq-.js → ImageComparisonComponent-CXBJ7S4z.js} +0 -0
- /package/dist/{abap-Cnc1m8d-.js → abap-I2cGjSH1.js} +0 -0
- /package/dist/{actionscript-3-g8zBgLKw.js → actionscript-3-DL1yGs6S.js} +0 -0
- /package/dist/{ada-MlSLvfsc.js → ada-BkGUMHAC.js} +0 -0
- /package/dist/{andromeeda-CkQePh6_.js → andromeeda-BWSHGuDt.js} +0 -0
- /package/dist/{apache-Cp-BBvQI.js → apache-DRnLyMnR.js} +0 -0
- /package/dist/{apex-CID9_iW1.js → apex-CA0TS4zn.js} +0 -0
- /package/dist/{applescript-Bv6vEFim.js → applescript-B8vB3y-q.js} +0 -0
- /package/dist/{ara-l5FvBxcT.js → ara-C0et56O5.js} +0 -0
- /package/dist/{array-lX94FrxB.js → array-vD2Vw0bk.js} +0 -0
- /package/dist/{asciidoc-BpLzRCLD.js → asciidoc-a6FHzc0d.js} +0 -0
- /package/dist/{asm-CxMfzk9G.js → asm-3DPfbryP.js} +0 -0
- /package/dist/{asterisk-Cbdk9I7-.js → asterisk-CbqErmo8.js} +0 -0
- /package/dist/{aurora-x-BmJfZyvk.js → aurora-x-Cq0GoPAm.js} +0 -0
- /package/dist/{awk-DZbdMF01.js → awk-GgrsjT7w.js} +0 -0
- /package/dist/{ayu-dark-Ce21p_3j.js → ayu-dark-BOgp0yX0.js} +0 -0
- /package/dist/{ballerina-6WMbs5Nh.js → ballerina-DErPOQth.js} +0 -0
- /package/dist/{bat-D70SunD8.js → bat-CkhnPpIS.js} +0 -0
- /package/dist/{beancount-DtkuCj7H.js → beancount-Rkl6N3Po.js} +0 -0
- /package/dist/{berry-DbfHEJGk.js → berry-C0cFa9Eb.js} +0 -0
- /package/dist/{bibtex-Cl9qlt9d.js → bibtex-PErECouH.js} +0 -0
- /package/dist/{bicep-0zpjixSE.js → bicep-B9tJFYg8.js} +0 -0
- /package/dist/{c-0VtUNZe8.js → c-xZK3SMJX.js} +0 -0
- /package/dist/{cadence-D2-Gq0t7.js → cadence-D2lNr2F0.js} +0 -0
- /package/dist/{catppuccin-frappe-DFz6L_QP.js → catppuccin-frappe-CEY1tx7K.js} +0 -0
- /package/dist/{catppuccin-latte-DSTm5iMg.js → catppuccin-latte-BjeOZATb.js} +0 -0
- /package/dist/{catppuccin-macchiato-D5cPlFDN.js → catppuccin-macchiato-HTrdL1Py.js} +0 -0
- /package/dist/{catppuccin-mocha-BBVxciDI.js → catppuccin-mocha-DaNBfKBN.js} +0 -0
- /package/dist/{chunk-57QY23SG-B6p-8LKm.js → chunk-57QY23SG-CtPsoWDn.js} +0 -0
- /package/dist/{clarity-CTtLMvQr.js → clarity-Di3YnyD4.js} +0 -0
- /package/dist/{click-outside-container-CR-VHaIe.js → click-outside-container-DnKND-Y5.js} +0 -0
- /package/dist/{clojure-CQ_s11PN.js → clojure-BaI1cLwf.js} +0 -0
- /package/dist/{cmake-DF99YgK0.js → cmake-Ct5KlIlx.js} +0 -0
- /package/dist/{codeowners-CRbICvXw.js → codeowners-B47SmYv4.js} +0 -0
- /package/dist/{codeql-DzUBsQZ9.js → codeql-C-RyBs2A.js} +0 -0
- /package/dist/{colors-C2w3uhVQ.js → colors-c_1kHhMM.js} +0 -0
- /package/dist/{common-keywords-D7noiVjl.js → common-keywords-qG52oQhe.js} +0 -0
- /package/dist/{common-lisp-CkedN1Bk.js → common-lisp-BEkqGRVt.js} +0 -0
- /package/dist/{coq-B7OBnzDw.js → coq-BMELwi0x.js} +0 -0
- /package/dist/{csharp-nXluFhrZ.js → csharp-D8kGQl5L.js} +0 -0
- /package/dist/{css-CPr1yM7G.js → css-D91D9ZFJ.js} +0 -0
- /package/dist/{csv-BTyvW9Dm.js → csv-DsiEeqZB.js} +0 -0
- /package/dist/{cue-CtcusocM.js → cue-Bd4pPCrb.js} +0 -0
- /package/dist/{cypher-BCo9_Gxf.js → cypher-CY6X1_fR.js} +0 -0
- /package/dist/{cytoscape.esm-CeO110wc.js → cytoscape.esm-D3qnLru1.js} +0 -0
- /package/dist/{d-qe1Yx8Pk.js → d-Dq3ZvYXH.js} +0 -0
- /package/dist/{dark-plus-COhL9N0K.js → dark-plus-DAkssByr.js} +0 -0
- /package/dist/{dart-C-zwBpkD.js → dart-CRwsUVcK.js} +0 -0
- /package/dist/{dax-9HVn3jKI.js → dax-yCcjIsFY.js} +0 -0
- /package/dist/{desktop-DcOWBslk.js → desktop-F3trsLZp.js} +0 -0
- /package/dist/{diff-0HrJYevs.js → diff-oSoYkmE6.js} +0 -0
- /package/dist/{dist-Ck_uei4a.js → dist-BEBl1fVc.js} +0 -0
- /package/dist/{dist-BOoOMWpw.js → dist-L1A29jng.js} +0 -0
- /package/dist/{dist-CFOn9U6a.js → dist-RsSoJ-Ow.js} +0 -0
- /package/dist/{dist-BLj2WRAk.js → dist-WgdRzo73.js} +0 -0
- /package/dist/{dist-Dndqm_ya.js → dist-_HymStvo.js} +0 -0
- /package/dist/{dist-B9BklWGT.js → dist-zlCh7zB9.js} +0 -0
- /package/dist/{docker-oHtI3hEB.js → docker-CzW3fUnV.js} +0 -0
- /package/dist/{dockerfile-DSCH583m.js → dockerfile-TsgC6Bmm.js} +0 -0
- /package/dist/{dotenv-sY_xnKYe.js → dotenv-C5RAv6mV.js} +0 -0
- /package/dist/{dracula-Bh9RLqOx.js → dracula-0J2lfdjD.js} +0 -0
- /package/dist/{dracula-soft-Cvp6b01Z.js → dracula-soft-CZX9ZgRW.js} +0 -0
- /package/dist/{dream-maker-6snTsD3J.js → dream-maker-D668Dv7O.js} +0 -0
- /package/dist/{duckdb-keywords-BCq77yXm.js → duckdb-keywords-DHIKlX_6.js} +0 -0
- /package/dist/{ebnf-BnX_o_Yq.js → ebnf-spWsoNeW.js} +0 -0
- /package/dist/{emacs-lisp-C6oq3DLk.js → emacs-lisp-9r6Oy_vR.js} +0 -0
- /package/dist/{everforest-dark-BYBypIqM.js → everforest-dark-BV3p6ZTT.js} +0 -0
- /package/dist/{everforest-light-D4mfI1FM.js → everforest-light-D4viDjQH.js} +0 -0
- /package/dist/{fcl-DDKjgNry.js → fcl-DOHQxani.js} +0 -0
- /package/dist/{fennel-C4o5c4mv.js → fennel-DdgItcQL.js} +0 -0
- /package/dist/{fish-BD9AkN7o.js → fish-Dah-0_yV.js} +0 -0
- /package/dist/{fluent-eCvhADRq.js → fluent-Dkmhuwpv.js} +0 -0
- /package/dist/{fortran-free-form-CuTQJQMN.js → fortran-free-form-DNLybXh-.js} +0 -0
- /package/dist/{gdscript-B40Spm2S.js → gdscript-DtYBhJ1b.js} +0 -0
- /package/dist/{gdshader-BZSmNWVa.js → gdshader-BV2VMgVk.js} +0 -0
- /package/dist/{genie-Cy_D8EWg.js → genie-BFMUrkvN.js} +0 -0
- /package/dist/{gherkin-ct-w1STV.js → gherkin-DppeDWDv.js} +0 -0
- /package/dist/{github-dark-CbIY86Wd.js → github-dark-D29L3HCC.js} +0 -0
- /package/dist/{github-dark-default-BlPRzuGs.js → github-dark-default-n3il8rgM.js} +0 -0
- /package/dist/{github-dark-dimmed-CwyHPTp3.js → github-dark-dimmed-oz4y0Wki.js} +0 -0
- /package/dist/{github-dark-high-contrast-Ch3E28Ga.js → github-dark-high-contrast-By7F7Fv0.js} +0 -0
- /package/dist/{github-light-BM3RayZ2.js → github-light-CWUlQb3u.js} +0 -0
- /package/dist/{github-light-default-BWhIdJf6.js → github-light-default-BffED7Ak.js} +0 -0
- /package/dist/{github-light-high-contrast-CKsJGAYi.js → github-light-high-contrast-Pu6OZUhP.js} +0 -0
- /package/dist/{gleam-Cwu_dIV7.js → gleam-BUcDYi_k.js} +0 -0
- /package/dist/{gnuplot-W2uzVV04.js → gnuplot-C1MgslgQ.js} +0 -0
- /package/dist/{go-C0N7iCwo.js → go-CYZiZRxy.js} +0 -0
- /package/dist/{groovy-BCFsp4zc.js → groovy-ClTIQGUH.js} +0 -0
- /package/dist/{gruvbox-dark-hard-DMFH1kAD.js → gruvbox-dark-hard-Bp86g2V_.js} +0 -0
- /package/dist/{gruvbox-dark-medium-DiHZEQva.js → gruvbox-dark-medium-BK2iIEfy.js} +0 -0
- /package/dist/{gruvbox-dark-soft-De9URWso.js → gruvbox-dark-soft-B_0xgXvI.js} +0 -0
- /package/dist/{gruvbox-light-hard-DzokvGK_.js → gruvbox-light-hard-DBlpi77o.js} +0 -0
- /package/dist/{gruvbox-light-medium-C4psEnS5.js → gruvbox-light-medium-CAccdTaF.js} +0 -0
- /package/dist/{gruvbox-light-soft-DL0f_6un.js → gruvbox-light-soft-DcO-EcR5.js} +0 -0
- /package/dist/{haskell-CDLvQWXZ.js → haskell-A1vUYtej.js} +0 -0
- /package/dist/{haxe-CLjmCvGB.js → haxe-DnHFv-TV.js} +0 -0
- /package/dist/{hcl-COL_PBAE.js → hcl-CU6j-Xhf.js} +0 -0
- /package/dist/{hjson-DkR4GFDO.js → hjson-ClOjKSoB.js} +0 -0
- /package/dist/{hlsl-BJKnqnDQ.js → hlsl-Q52_rKUP.js} +0 -0
- /package/dist/{houston-DYwZabvW.js → houston-DGG5Ln2h.js} +0 -0
- /package/dist/{http-2MVb-dsB.js → http-BgHOhKz2.js} +0 -0
- /package/dist/{hy-OsbjMwY0.js → hy-Bja9Numd.js} +0 -0
- /package/dist/{imba-Ddkaio98.js → imba-HOr9EX5j.js} +0 -0
- /package/dist/{ini-CNrkD-OZ.js → ini-EvmYJ-83.js} +0 -0
- /package/dist/{init-BU4YGOOg.js → init-BsH2JjGd.js} +0 -0
- /package/dist/{java-Ci6qXyg1.js → java-91iGU5ap.js} +0 -0
- /package/dist/{javascript-URuDoMWW.js → javascript-CPeJGbMe.js} +0 -0
- /package/dist/{json-DX7TV6Gi.js → json-N0VDmGwx.js} +0 -0
- /package/dist/{json5-Djp3uvi3.js → json5-BC1TPZZb.js} +0 -0
- /package/dist/{jsonc-XlYTIqzR.js → jsonc-B88-mC9I.js} +0 -0
- /package/dist/{jsonl-GwfHzMab.js → jsonl-CXu8ax4T.js} +0 -0
- /package/dist/{jsonnet-CPv7P6JN.js → jsonnet-0HtPQpiV.js} +0 -0
- /package/dist/{jssm-DdbAawAp.js → jssm-Bk3koTsK.js} +0 -0
- /package/dist/{jsx-DkGuBjr4.js → jsx-Cbdt0xgS.js} +0 -0
- /package/dist/{kanagawa-dragon-Vs6U6z1S.js → kanagawa-dragon-6wkRCL1O.js} +0 -0
- /package/dist/{kanagawa-lotus-Buvs3lt0.js → kanagawa-lotus-21R5pwns.js} +0 -0
- /package/dist/{kanagawa-wave-Bj2TElAo.js → kanagawa-wave-DvIMpnk3.js} +0 -0
- /package/dist/{katex-DHhoxnpM.js → katex-Cymo3Ugt.js} +0 -0
- /package/dist/{kotlin-Cpc_0A7a.js → kotlin-Brxn_vmg.js} +0 -0
- /package/dist/{kusto-Co9wVBCz.js → kusto-CLSwwyw9.js} +0 -0
- /package/dist/{laserwave-Ca61-FAH.js → laserwave-D2HyGZu4.js} +0 -0
- /package/dist/{lean-C0Aa7Fsj.js → lean-C7cjnnxn.js} +0 -0
- /package/dist/{less-_PXFbiQM.js → less-Db3q8KJ4.js} +0 -0
- /package/dist/{light-plus-5ex0bkO5.js → light-plus-C2C7fw4Z.js} +0 -0
- /package/dist/{llvm-BbKHoWwP.js → llvm-DAIyCtJL.js} +0 -0
- /package/dist/{log-CAfpKA3d.js → log-vTaTH8PJ.js} +0 -0
- /package/dist/{logo-_JZv2_m7.js → logo-D9tY6FNo.js} +0 -0
- /package/dist/{luau-By4kXsmQ.js → luau-IjR5-Ywl.js} +0 -0
- /package/dist/{main-BeKMoTBP.js → main-CRpnHr48.js} +0 -0
- /package/dist/{make-BRzozWYB.js → make-Cu-cnuA_.js} +0 -0
- /package/dist/{markdown-DBlXv3d9.js → markdown-C5F3cvct.js} +0 -0
- /package/dist/{marked.esm-CqJtK50L.js → marked.esm-DpOvkPbZ.js} +0 -0
- /package/dist/{material-theme-UdvytYzK.js → material-theme-DC62_X77.js} +0 -0
- /package/dist/{material-theme-darker-ifWxjE_M.js → material-theme-darker-ZdvrV-zE.js} +0 -0
- /package/dist/{material-theme-lighter-BJMt_hpe.js → material-theme-lighter-CjF6eqam.js} +0 -0
- /package/dist/{material-theme-ocean-DBLAtuvq.js → material-theme-ocean-B1OEP8g-.js} +0 -0
- /package/dist/{material-theme-palenight-D_bLdV4c.js → material-theme-palenight-DG7XKA0s.js} +0 -0
- /package/dist/{math-B9kWnSVt.js → math-kvEWD7RZ.js} +0 -0
- /package/dist/{matlab-SZvC4TdD.js → matlab-Bkgl6cmi.js} +0 -0
- /package/dist/{mdx-FGsuIggU.js → mdx-B3dxoxO_.js} +0 -0
- /package/dist/{mermaid-Bq_9A0K_.js → mermaid-Vk73zc_P.js} +0 -0
- /package/dist/{min-dark-CXAX-ZXK.js → min-dark-BXnwqHsA.js} +0 -0
- /package/dist/{min-light-BCnp1thB.js → min-light-t8HWsGPD.js} +0 -0
- /package/dist/{mipsasm-B5qmQK6W.js → mipsasm-DM3DsUwR.js} +0 -0
- /package/dist/{mojo-GIDM7_y7.js → mojo-CgJHtiXY.js} +0 -0
- /package/dist/{monokai-DL7jaPcf.js → monokai-CRI7M-ed.js} +0 -0
- /package/dist/{move-DRJvkv3E.js → move-DQHQ0ily.js} +0 -0
- /package/dist/{narrat-v6fb47Is.js → narrat-UVO3rS1B.js} +0 -0
- /package/dist/{nextflow-C602gAKa.js → nextflow-DrtHoX7E.js} +0 -0
- /package/dist/{nginx-xAcu9XCN.js → nginx-DJ7UgEOR.js} +0 -0
- /package/dist/{night-owl-Q-U_lEu6.js → night-owl-Ci5d2mya.js} +0 -0
- /package/dist/{nix-BRjH373I.js → nix-Cgk0qZB-.js} +0 -0
- /package/dist/{nord-CRIAyay1.js → nord-D3dA8PCc.js} +0 -0
- /package/dist/{nushell-5Ddvrppp.js → nushell-smo4Ehcx.js} +0 -0
- /package/dist/{objective-c-zrea_Ajz.js → objective-c-CVuojEvS.js} +0 -0
- /package/dist/{objective-cpp-BMgGRJTH.js → objective-cpp-Bpp59CkK.js} +0 -0
- /package/dist/{ocaml-Cc5CTR8t.js → ocaml-DYQwODYU.js} +0 -0
- /package/dist/{one-dark-pro-cEF3x_tc.js → one-dark-pro-CdYrsWA6.js} +0 -0
- /package/dist/{one-light-B0buW1FQ.js → one-light-B0fXewxa.js} +0 -0
- /package/dist/{pascal-C5MhYtdx.js → pascal-G_r9auPk.js} +0 -0
- /package/dist/{path-B-wCTTNY.js → path-DIzMdTua.js} +0 -0
- /package/dist/{plastic-4xY83A97.js → plastic-CC7C-r0m.js} +0 -0
- /package/dist/{plsql-DiS5vMuw.js → plsql-DmZBDDMQ.js} +0 -0
- /package/dist/{po-CE5EllyY.js → po-Bdl0SmZa.js} +0 -0
- /package/dist/{poimandres-C02cLu8D.js → poimandres-BPoRyzO_.js} +0 -0
- /package/dist/{polar-NxJPG_A1.js → polar-DdEuU550.js} +0 -0
- /package/dist/{postcss-BKFdDTSc.js → postcss-DgtXUb_w.js} +0 -0
- /package/dist/{powerquery-ClOwEHrw.js → powerquery-D5rcV1b7.js} +0 -0
- /package/dist/{powershell-DtnsETbd.js → powershell-CreFd35r.js} +0 -0
- /package/dist/{prisma-DQRqqd02.js → prisma-BSSS_9KD.js} +0 -0
- /package/dist/{prolog-BXwR1iEr.js → prolog-Cxq7ex3-.js} +0 -0
- /package/dist/{proto-DbdCTNJQ.js → proto-Di89JUpw.js} +0 -0
- /package/dist/{puppet-C0fmEeZ8.js → puppet-D-8yt0A2.js} +0 -0
- /package/dist/{purescript-DCzClV2L.js → purescript-Dsyys8lw.js} +0 -0
- /package/dist/{python-C9XsBnIS.js → python-DyJn0gY6.js} +0 -0
- /package/dist/{qmldir-BgPLvM_B.js → qmldir-Djlda7Cs.js} +0 -0
- /package/dist/{qss-DH_QKtyV.js → qss-DtDj95Ib.js} +0 -0
- /package/dist/{r-CE7tet3U.js → r-9vHvMbjq.js} +0 -0
- /package/dist/{racket-BXFuJ8S4.js → racket-BQnOONmJ.js} +0 -0
- /package/dist/{raku-BV2f5Bfp.js → raku-DZArQH1C.js} +0 -0
- /package/dist/{react-plotly-BSDG5040.js → react-plotly-B8bzf42j.js} +0 -0
- /package/dist/{red-NReit8D_.js → red-DdIrZaxO.js} +0 -0
- /package/dist/{reg-y78MnffL.js → reg-CM_FOY35.js} +0 -0
- /package/dist/{regexp-BkaqnlX1.js → regexp-Dh_KbmYB.js} +0 -0
- /package/dist/{rel-ChUSBGxs.js → rel-Cf8vFh7G.js} +0 -0
- /package/dist/{riscv-Cw3bJM3f.js → riscv-DFLesDmH.js} +0 -0
- /package/dist/{rose-pine-C_LOz2fx.js → rose-pine-C6TQipgc.js} +0 -0
- /package/dist/{rose-pine-dawn-DAyopyJp.js → rose-pine-dawn-DUw8_6c0.js} +0 -0
- /package/dist/{rose-pine-moon-D65s7ycF.js → rose-pine-moon-5rpZhuOi.js} +0 -0
- /package/dist/{rust-CNYdgIe2.js → rust-CLaTh4j5.js} +0 -0
- /package/dist/{sass-CTLsc-He.js → sass-DXaowKfb.js} +0 -0
- /package/dist/{scala-DAvnmlLT.js → scala-BwYNCkHH.js} +0 -0
- /package/dist/{scheme-BQ8akAiY.js → scheme-Cwv1j_5J.js} +0 -0
- /package/dist/{sdbl-BqdEdxub.js → sdbl-ZWGgjiIv.js} +0 -0
- /package/dist/{shellscript-SX0nv4lc.js → shellscript-CHtXIYYk.js} +0 -0
- /package/dist/{slack-dark-DP48wn3J.js → slack-dark-CEL96wwz.js} +0 -0
- /package/dist/{slack-ochin-JvZjQMr4.js → slack-ochin-Ih8BUTjo.js} +0 -0
- /package/dist/{smalltalk-Cd_zoqRt.js → smalltalk-Bz_Wq6O1.js} +0 -0
- /package/dist/{snazzy-light-Dn5RlLOZ.js → snazzy-light-BtCbn8qt.js} +0 -0
- /package/dist/{solarized-dark-juR81_fw.js → solarized-dark-2ncbM9MD.js} +0 -0
- /package/dist/{solarized-light-U1mjAkaE.js → solarized-light-Bw0RlZC7.js} +0 -0
- /package/dist/{solidity-DfzZ5d-O.js → solidity-Dl1Szhqk.js} +0 -0
- /package/dist/{solr-CNZE5yrI.js → solr-Kwz1kGU1.js} +0 -0
- /package/dist/{splunk-K8fn70fG.js → splunk-D_aQa7Wj.js} +0 -0
- /package/dist/{spreadsheet-DQPJGjZQ.js → spreadsheet-D6FABxcn.js} +0 -0
- /package/dist/{sql-CAF6o9lq.js → sql-Bl2dBUIk.js} +0 -0
- /package/dist/{sql-DRtPaiem.js → sql-ZN4U_4B1.js} +0 -0
- /package/dist/{ssh-config-BXqbrXDi.js → ssh-config-BZDNWhA1.js} +0 -0
- /package/dist/{stex-D1sWhacG.js → stex-B5cVJDuZ.js} +0 -0
- /package/dist/{stylus-C_YQrfMD.js → stylus-ByL4A079.js} +0 -0
- /package/dist/{swift-Ceo6tYUp.js → swift-scoJKQVi.js} +0 -0
- /package/dist/{synthwave-84-CHXFapSW.js → synthwave-84-DKtuD_wy.js} +0 -0
- /package/dist/{system-verilog-D4CJAYbc.js → system-verilog-Bv-1IX35.js} +0 -0
- /package/dist/{systemd-CHq8PvwE.js → systemd-BzGxwp-W.js} +0 -0
- /package/dist/{talonscript-D6aZJv_Q.js → talonscript-BSbePVqO.js} +0 -0
- /package/dist/{tasl-BWmlUeU7.js → tasl-BA3aDFU3.js} +0 -0
- /package/dist/{tcl-C3YCHzLh.js → tcl-BAw9Lg69.js} +0 -0
- /package/dist/{terraform-y7dSvHa7.js → terraform-D50En-Co.js} +0 -0
- /package/dist/{tiddlywiki-DotFbxlj.js → tiddlywiki-Bl1_jWGY.js} +0 -0
- /package/dist/{tiki-cZC65BMY.js → tiki-BDy2Aqau.js} +0 -0
- /package/dist/{timer--XD4eQXe.js → timer-Dde4NBPL.js} +0 -0
- /package/dist/{tokyo-night-A0-IVocs.js → tokyo-night-DXO9qP_t.js} +0 -0
- /package/dist/{toml-OrfgdRYt.js → toml-Cubg1uUB.js} +0 -0
- /package/dist/{treemap-BjIqNFzX.js → treemap-BLQ6nYXt.js} +0 -0
- /package/dist/{tsv-B2Hf1H8S.js → tsv-vZzoqqJp.js} +0 -0
- /package/dist/{tsx-DGPbtVdN.js → tsx-LnCcyy2E.js} +0 -0
- /package/dist/{turtle-DsNtk6IM.js → turtle-CMwgyTdm.js} +0 -0
- /package/dist/{typescript-CCzz7yCV.js → typescript-B5rt_l9e.js} +0 -0
- /package/dist/{typespec-DUIO3iAy.js → typespec-CkLBOALm.js} +0 -0
- /package/dist/{typst-CzQn6sYd.js → typst-C-inGA8y.js} +0 -0
- /package/dist/{v-DDSEES9z.js → v-CFTQQNNR.js} +0 -0
- /package/dist/{vala-Cbu40xKX.js → vala-CEP8R4Sr.js} +0 -0
- /package/dist/{vb-DtlqoV5V.js → vb-LCy_gAYP.js} +0 -0
- /package/dist/{verilog-CCzhlD5Z.js → verilog-CjetHjeY.js} +0 -0
- /package/dist/{vesper-DJTKEjYY.js → vesper-C1ptU1oI.js} +0 -0
- /package/dist/{vhdl-DDdF26gx.js → vhdl-BwoGC9LM.js} +0 -0
- /package/dist/{viml-Csgqqvxa.js → viml-CydZIHfP.js} +0 -0
- /package/dist/{vitesse-black-B_9_MY9n.js → vitesse-black-C-p75DbZ.js} +0 -0
- /package/dist/{vitesse-dark-5oLbBBDP.js → vitesse-dark-Ai-v_ovz.js} +0 -0
- /package/dist/{vitesse-light-DY7aCeME.js → vitesse-light-DQ9NGEHC.js} +0 -0
- /package/dist/{vyper-CJCjsleu.js → vyper-BF3ELXiG.js} +0 -0
- /package/dist/{wasm-DtNse08w.js → wasm-OjKRvUGa.js} +0 -0
- /package/dist/{wasm-BSZ3My3r.js → wasm-sMdbPauS.js} +0 -0
- /package/dist/{wenyan-BvPQ-H9y.js → wenyan-jAkt3eQa.js} +0 -0
- /package/dist/{wgsl-B65N7iDC.js → wgsl-C164tHZL.js} +0 -0
- /package/dist/{wikitext-BIFkMlQo.js → wikitext-DVNWOcXh.js} +0 -0
- /package/dist/{wit-DP8045yv.js → wit-BiebwFst.js} +0 -0
- /package/dist/{wolfram-DHmulSSf.js → wolfram-Dej0TMYQ.js} +0 -0
- /package/dist/{yaml-BW6YUxU4.js → yaml-D1dcMKz3.js} +0 -0
- /package/dist/{zenscript-CkfsSip8.js → zenscript-DR8tpung.js} +0 -0
- /package/dist/{zig-DxQnpavN.js → zig-DqxNCCzt.js} +0 -0
- /package/src/components/{chat → markdown}/markdown-renderer.css +0 -0
- /package/src/components/{chat → markdown}/markdown-renderer.tsx +0 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/* Copyright 2024 Marimo. All rights reserved. */
|
|
2
2
|
|
|
3
3
|
import { useAtom } from "jotai";
|
|
4
|
+
import { atomWithStorage } from "jotai/utils";
|
|
4
5
|
import {
|
|
5
6
|
ArrowLeftIcon,
|
|
6
7
|
BetweenHorizontalStartIcon,
|
|
@@ -12,6 +13,7 @@ import {
|
|
|
12
13
|
DownloadIcon,
|
|
13
14
|
Edit3Icon,
|
|
14
15
|
ExternalLinkIcon,
|
|
16
|
+
EyeOffIcon,
|
|
15
17
|
FilePlus2Icon,
|
|
16
18
|
FolderPlusIcon,
|
|
17
19
|
ListTreeIcon,
|
|
@@ -56,6 +58,7 @@ import { downloadBlob } from "@/utils/download";
|
|
|
56
58
|
import { openNotebook } from "@/utils/links";
|
|
57
59
|
import type { FilePath } from "@/utils/paths";
|
|
58
60
|
import { fileSplit } from "@/utils/pathUtils";
|
|
61
|
+
import { jotaiJsonStorage } from "@/utils/storage/jotai";
|
|
59
62
|
import marimoIcon from "../../../assets/icon-32x32.png";
|
|
60
63
|
import { FileViewer } from "./file-viewer";
|
|
61
64
|
import type { RequestingTree } from "./requesting-tree";
|
|
@@ -68,6 +71,15 @@ import {
|
|
|
68
71
|
} from "./types";
|
|
69
72
|
import { useFileExplorerUpload } from "./upload";
|
|
70
73
|
|
|
74
|
+
const hiddenFilesState = atomWithStorage(
|
|
75
|
+
"marimo:showHiddenFiles",
|
|
76
|
+
true,
|
|
77
|
+
jotaiJsonStorage,
|
|
78
|
+
{
|
|
79
|
+
getOnInit: true,
|
|
80
|
+
},
|
|
81
|
+
);
|
|
82
|
+
|
|
71
83
|
const RequestingTreeContext = React.createContext<RequestingTree | null>(null);
|
|
72
84
|
|
|
73
85
|
export const FileExplorer: React.FC<{
|
|
@@ -77,6 +89,9 @@ export const FileExplorer: React.FC<{
|
|
|
77
89
|
const [tree] = useAtom(treeAtom);
|
|
78
90
|
const [data, setData] = useState<FileInfo[]>([]);
|
|
79
91
|
const [openFile, setOpenFile] = useState<FileInfo | null>(null);
|
|
92
|
+
const [showHiddenFiles, setShowHiddenFiles] =
|
|
93
|
+
useAtom<boolean>(hiddenFilesState);
|
|
94
|
+
|
|
80
95
|
const { openPrompt } = useImperativeModal();
|
|
81
96
|
// Keep external state to remember which folders are open
|
|
82
97
|
// when this component is unmounted
|
|
@@ -87,6 +102,11 @@ export const FileExplorer: React.FC<{
|
|
|
87
102
|
tree.refreshAll(Object.keys(openState).filter((id) => openState[id]));
|
|
88
103
|
});
|
|
89
104
|
|
|
105
|
+
const handleHiddenFilesToggle = useEvent(() => {
|
|
106
|
+
const newValue = !showHiddenFiles;
|
|
107
|
+
setShowHiddenFiles(newValue);
|
|
108
|
+
});
|
|
109
|
+
|
|
90
110
|
const handleCreateFolder = useEvent(async () => {
|
|
91
111
|
openPrompt({
|
|
92
112
|
title: "Folder name",
|
|
@@ -110,6 +130,11 @@ export const FileExplorer: React.FC<{
|
|
|
110
130
|
setOpenState({});
|
|
111
131
|
});
|
|
112
132
|
|
|
133
|
+
const visibleData = React.useMemo(
|
|
134
|
+
() => filterHiddenTree(data, showHiddenFiles),
|
|
135
|
+
[data, showHiddenFiles],
|
|
136
|
+
);
|
|
137
|
+
|
|
113
138
|
if (isPending) {
|
|
114
139
|
return <Spinner size="medium" centered={true} />;
|
|
115
140
|
}
|
|
@@ -152,6 +177,7 @@ export const FileExplorer: React.FC<{
|
|
|
152
177
|
<>
|
|
153
178
|
<Toolbar
|
|
154
179
|
onRefresh={handleRefresh}
|
|
180
|
+
onHidden={handleHiddenFilesToggle}
|
|
155
181
|
onCreateFile={handleCreateFile}
|
|
156
182
|
onCreateFolder={handleCreateFolder}
|
|
157
183
|
onCollapseAll={handleCollapseAll}
|
|
@@ -163,7 +189,7 @@ export const FileExplorer: React.FC<{
|
|
|
163
189
|
ref={treeRef}
|
|
164
190
|
height={height - 33}
|
|
165
191
|
className="h-full"
|
|
166
|
-
data={
|
|
192
|
+
data={visibleData}
|
|
167
193
|
initialOpenState={openState}
|
|
168
194
|
openByDefault={false}
|
|
169
195
|
// Hide the drop cursor
|
|
@@ -215,6 +241,7 @@ const INDENT_STEP = 15;
|
|
|
215
241
|
|
|
216
242
|
interface ToolbarProps {
|
|
217
243
|
onRefresh: () => void;
|
|
244
|
+
onHidden: () => void;
|
|
218
245
|
onCreateFile: () => void;
|
|
219
246
|
onCreateFolder: () => void;
|
|
220
247
|
onCollapseAll: () => void;
|
|
@@ -223,6 +250,7 @@ interface ToolbarProps {
|
|
|
223
250
|
|
|
224
251
|
const Toolbar = ({
|
|
225
252
|
onRefresh,
|
|
253
|
+
onHidden,
|
|
226
254
|
onCreateFile,
|
|
227
255
|
onCreateFolder,
|
|
228
256
|
onCollapseAll,
|
|
@@ -277,6 +305,16 @@ const Toolbar = ({
|
|
|
277
305
|
<RefreshCcwIcon size={16} />
|
|
278
306
|
</Button>
|
|
279
307
|
</Tooltip>
|
|
308
|
+
<Tooltip content="Toggle hidden files">
|
|
309
|
+
<Button
|
|
310
|
+
data-testid="file-explorer-hidden-files-button"
|
|
311
|
+
onClick={onHidden}
|
|
312
|
+
variant="text"
|
|
313
|
+
size="xs"
|
|
314
|
+
>
|
|
315
|
+
<EyeOffIcon size={16} />
|
|
316
|
+
</Button>
|
|
317
|
+
</Tooltip>
|
|
280
318
|
<Tooltip content="Collapse all folders">
|
|
281
319
|
<Button
|
|
282
320
|
data-testid="file-explorer-collapse-button"
|
|
@@ -677,3 +715,35 @@ function openMarimoNotebook(
|
|
|
677
715
|
event.preventDefault();
|
|
678
716
|
openNotebook(path);
|
|
679
717
|
}
|
|
718
|
+
|
|
719
|
+
export function filterHiddenTree(
|
|
720
|
+
list: FileInfo[],
|
|
721
|
+
showHidden: boolean,
|
|
722
|
+
): FileInfo[] {
|
|
723
|
+
if (showHidden) {
|
|
724
|
+
return list;
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
const out: FileInfo[] = [];
|
|
728
|
+
for (const item of list) {
|
|
729
|
+
if (isDirectoryOrFileHidden(item.name)) {
|
|
730
|
+
continue;
|
|
731
|
+
}
|
|
732
|
+
let next = item;
|
|
733
|
+
if (item.children) {
|
|
734
|
+
const kids = filterHiddenTree(item.children, showHidden);
|
|
735
|
+
if (kids !== item.children) {
|
|
736
|
+
next = { ...item, children: kids };
|
|
737
|
+
}
|
|
738
|
+
}
|
|
739
|
+
out.push(next);
|
|
740
|
+
}
|
|
741
|
+
return out;
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
export function isDirectoryOrFileHidden(filename: string): boolean {
|
|
745
|
+
if (filename.startsWith(".")) {
|
|
746
|
+
return true;
|
|
747
|
+
}
|
|
748
|
+
return false;
|
|
749
|
+
}
|
|
@@ -489,7 +489,7 @@ const EditableCellComponent = ({
|
|
|
489
489
|
|
|
490
490
|
const outputArea = hasOutput && (
|
|
491
491
|
<div className="relative" onDoubleClick={showHiddenCodeIfMarkdown}>
|
|
492
|
-
<div className="absolute top-5 -left-
|
|
492
|
+
<div className="absolute top-5 -left-7 z-20 print:hidden">
|
|
493
493
|
<CollapseToggle
|
|
494
494
|
isCollapsed={isCollapsed}
|
|
495
495
|
onClick={() => {
|
|
@@ -580,8 +580,13 @@ const EditableCellComponent = ({
|
|
|
580
580
|
ref={cellContainerRef}
|
|
581
581
|
{...cellDomProps(cellId, cellData.name)}
|
|
582
582
|
>
|
|
583
|
+
<CellLeftSideActions cellId={cellId} actions={actions} />
|
|
583
584
|
{cellOutput === "above" && outputArea}
|
|
584
|
-
<div
|
|
585
|
+
<div
|
|
586
|
+
className={cn("tray")}
|
|
587
|
+
data-has-output-above={hasOutputAbove}
|
|
588
|
+
data-hidden={isMarkdownCodeHidden}
|
|
589
|
+
>
|
|
585
590
|
<StagedAICellBackground cellId={cellId} />
|
|
586
591
|
<div className="absolute right-2 -top-4 z-10">
|
|
587
592
|
<CellToolbar
|
|
@@ -598,17 +603,6 @@ const EditableCellComponent = ({
|
|
|
598
603
|
onRun={runCell}
|
|
599
604
|
/>
|
|
600
605
|
</div>
|
|
601
|
-
<CellLeftSideActions
|
|
602
|
-
cellId={cellId}
|
|
603
|
-
className={cn(
|
|
604
|
-
isMarkdownCodeHidden && hasOutputAbove && "-top-7",
|
|
605
|
-
isMarkdownCodeHidden && hasOutputBelow && "-bottom-8",
|
|
606
|
-
isMarkdownCodeHidden &&
|
|
607
|
-
isCellButtonsInline &&
|
|
608
|
-
"-left-[3.8rem]",
|
|
609
|
-
)}
|
|
610
|
-
actions={actions}
|
|
611
|
-
/>
|
|
612
606
|
<CellEditor
|
|
613
607
|
theme={theme}
|
|
614
608
|
showPlaceholder={showPlaceholder}
|
|
@@ -836,25 +830,33 @@ const CellLeftSideActions = memo(
|
|
|
836
830
|
);
|
|
837
831
|
|
|
838
832
|
const isConnected = isAppConnected(connection.state);
|
|
833
|
+
const oneClickShortcut = "mod";
|
|
839
834
|
|
|
840
835
|
return (
|
|
841
836
|
<div
|
|
842
837
|
className={cn(
|
|
843
|
-
"absolute flex flex-col
|
|
838
|
+
"absolute flex flex-col justify-center h-full left-[-26px] z-20 border-b-0!",
|
|
844
839
|
className,
|
|
845
840
|
)}
|
|
846
841
|
>
|
|
847
|
-
<
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
842
|
+
<div className="-mt-1 min-h-7">
|
|
843
|
+
<CreateCellButton
|
|
844
|
+
tooltipContent={renderShortcut("cell.createAbove")}
|
|
845
|
+
connectionState={connection.state}
|
|
846
|
+
onClick={isConnected ? createAbove : undefined}
|
|
847
|
+
oneClickShortcut={oneClickShortcut}
|
|
848
|
+
/>
|
|
849
|
+
</div>
|
|
850
|
+
<div className="flex-1 pointer-events-none w-3" />
|
|
851
|
+
{/* <div className="flex-1 pointer-events-none bg-border w-px mx-auto hover-action opacity-70" /> */}
|
|
852
|
+
<div className="-mb-2 min-h-7">
|
|
853
|
+
<CreateCellButton
|
|
854
|
+
tooltipContent={renderShortcut("cell.createBelow")}
|
|
855
|
+
connectionState={connection.state}
|
|
856
|
+
onClick={isConnected ? createBelow : undefined}
|
|
857
|
+
oneClickShortcut={oneClickShortcut}
|
|
858
|
+
/>
|
|
859
|
+
</div>
|
|
858
860
|
</div>
|
|
859
861
|
);
|
|
860
862
|
},
|
|
@@ -47,6 +47,14 @@ describe("TerminalBuffer", () => {
|
|
|
47
47
|
`);
|
|
48
48
|
});
|
|
49
49
|
|
|
50
|
+
test("control handles tab", () => {
|
|
51
|
+
const buffer = new TerminalBuffer();
|
|
52
|
+
buffer.writeChar("a");
|
|
53
|
+
buffer.control("\t");
|
|
54
|
+
buffer.writeChar("b");
|
|
55
|
+
expect(buffer.render()).toMatchInlineSnapshot(`"a b"`);
|
|
56
|
+
});
|
|
57
|
+
|
|
50
58
|
test("control handles carriage return", () => {
|
|
51
59
|
const buffer = new TerminalBuffer();
|
|
52
60
|
buffer.writeChar("a");
|
|
@@ -69,7 +69,7 @@ export class TerminalBuffer {
|
|
|
69
69
|
this.cursor.col += str.length;
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
-
/** Handle simple control characters (\n, \r). */
|
|
72
|
+
/** Handle simple control characters (\n, \r, \t). */
|
|
73
73
|
control(ch: string) {
|
|
74
74
|
switch (ch) {
|
|
75
75
|
case "\n":
|
|
@@ -80,6 +80,9 @@ export class TerminalBuffer {
|
|
|
80
80
|
case "\r":
|
|
81
81
|
this.cursor.col = 0;
|
|
82
82
|
break;
|
|
83
|
+
case "\t":
|
|
84
|
+
this.writeChar("\t");
|
|
85
|
+
break;
|
|
83
86
|
}
|
|
84
87
|
}
|
|
85
88
|
|
|
@@ -268,11 +271,11 @@ export class AnsiReducer {
|
|
|
268
271
|
const ch = text[i];
|
|
269
272
|
|
|
270
273
|
// Handle control characters
|
|
271
|
-
if (ch === "\n" || ch === "\r") {
|
|
274
|
+
if (ch === "\n" || ch === "\r" || ch === "\t") {
|
|
272
275
|
// Write accumulated text before the control character
|
|
273
276
|
if (i > start) {
|
|
274
277
|
const segment = text.slice(start, i);
|
|
275
|
-
// Filter out characters below space (but we already have \n
|
|
278
|
+
// Filter out characters below space (but we already have \n, \r, \t handled)
|
|
276
279
|
const filtered = this.filterControlChars(segment);
|
|
277
280
|
if (filtered.length > 0) {
|
|
278
281
|
this.buffer.writeString(filtered);
|
|
@@ -302,7 +305,7 @@ export class AnsiReducer {
|
|
|
302
305
|
}
|
|
303
306
|
}
|
|
304
307
|
|
|
305
|
-
/** Filter out control characters below space (except \n
|
|
308
|
+
/** Filter out control characters below space (except \n, \r, \t which are handled separately). */
|
|
306
309
|
private filterControlChars(text: string): string {
|
|
307
310
|
// Fast path: if no control chars, return as-is
|
|
308
311
|
let hasControlChars = false;
|
|
@@ -249,6 +249,8 @@ export const GridLayoutRenderer: React.FC<Props> = ({
|
|
|
249
249
|
</ReactGridLayout>
|
|
250
250
|
);
|
|
251
251
|
|
|
252
|
+
const notInGrid = cells.filter((cell) => !inGridIds.has(cell.id));
|
|
253
|
+
|
|
252
254
|
if (isReading) {
|
|
253
255
|
if (layout.bordered) {
|
|
254
256
|
grid = (
|
|
@@ -262,10 +264,32 @@ export const GridLayoutRenderer: React.FC<Props> = ({
|
|
|
262
264
|
</div>
|
|
263
265
|
);
|
|
264
266
|
}
|
|
265
|
-
return grid;
|
|
266
|
-
}
|
|
267
267
|
|
|
268
|
-
|
|
268
|
+
const sidebarCells = notInGrid.filter((cell) => isSidebarCell(cell));
|
|
269
|
+
|
|
270
|
+
return (
|
|
271
|
+
<>
|
|
272
|
+
{grid}
|
|
273
|
+
{/* Render sidebar outputs even if they are not in grid (hidden) */}
|
|
274
|
+
<div className="hidden">
|
|
275
|
+
{sidebarCells.map((cell) => {
|
|
276
|
+
return (
|
|
277
|
+
<GridCell
|
|
278
|
+
key={cell.id}
|
|
279
|
+
code={cell.code}
|
|
280
|
+
mode={mode}
|
|
281
|
+
cellId={cell.id}
|
|
282
|
+
output={cell.output}
|
|
283
|
+
status={cell.status}
|
|
284
|
+
isScrollable={false}
|
|
285
|
+
hidden={false}
|
|
286
|
+
/>
|
|
287
|
+
);
|
|
288
|
+
})}
|
|
289
|
+
</div>
|
|
290
|
+
</>
|
|
291
|
+
);
|
|
292
|
+
}
|
|
269
293
|
|
|
270
294
|
if (layout.bordered) {
|
|
271
295
|
grid = (
|
|
@@ -641,6 +665,14 @@ const GridHoverActions: React.FC<GridHoverActionsProps> = ({
|
|
|
641
665
|
);
|
|
642
666
|
};
|
|
643
667
|
|
|
668
|
+
function isSidebarCell(cell: CellRuntimeState) {
|
|
669
|
+
// False-positives are ok here because we rendering these cells in a hidden div
|
|
670
|
+
return (
|
|
671
|
+
typeof cell.output?.data === "string" &&
|
|
672
|
+
cell.output.data.includes("marimo-sidebar")
|
|
673
|
+
);
|
|
674
|
+
}
|
|
675
|
+
|
|
644
676
|
const SIDE_TO_ICON = {
|
|
645
677
|
// We are only showing horizontal sides for now
|
|
646
678
|
// top: AlignHorizontalSpaceAroundIcon,
|
|
@@ -195,10 +195,15 @@ const WorkspaceNotebooks: React.FC = () => {
|
|
|
195
195
|
}
|
|
196
196
|
>
|
|
197
197
|
Workspace
|
|
198
|
-
<
|
|
199
|
-
|
|
198
|
+
<Button
|
|
199
|
+
variant="text"
|
|
200
|
+
size="icon"
|
|
201
|
+
className="w-4 h-4 ml-1 p-0 opacity-70 hover:opacity-100"
|
|
200
202
|
onClick={() => refetch()}
|
|
201
|
-
|
|
203
|
+
aria-label="Refresh workspace"
|
|
204
|
+
>
|
|
205
|
+
<RefreshCcwIcon className="w-4 h-4" />
|
|
206
|
+
</Button>
|
|
202
207
|
{isFetching && <Spinner size="small" />}
|
|
203
208
|
</Header>
|
|
204
209
|
<div className="flex flex-col divide-y divide-(--slate-3) border rounded overflow-hidden max-h-192 overflow-y-auto shadow-sm bg-background">
|
|
@@ -7,7 +7,7 @@ const Table = React.forwardRef<
|
|
|
7
7
|
HTMLTableElement,
|
|
8
8
|
React.HTMLAttributes<HTMLTableElement>
|
|
9
9
|
>(({ className, ...props }, ref) => (
|
|
10
|
-
<div className="w-full overflow-auto flex-1">
|
|
10
|
+
<div className="w-full overflow-auto scrollbar-thin flex-1">
|
|
11
11
|
<table
|
|
12
12
|
ref={ref}
|
|
13
13
|
className={cn("w-full caption-bottom text-sm", className)}
|
|
@@ -128,7 +128,7 @@ describe("EditNotebookTool", () => {
|
|
|
128
128
|
{
|
|
129
129
|
edit: {
|
|
130
130
|
type: "update_cell",
|
|
131
|
-
cellId: cellId1,
|
|
131
|
+
position: { type: "relative", cellId: cellId1 },
|
|
132
132
|
code: newCode,
|
|
133
133
|
},
|
|
134
134
|
},
|
|
@@ -154,7 +154,7 @@ describe("EditNotebookTool", () => {
|
|
|
154
154
|
{
|
|
155
155
|
edit: {
|
|
156
156
|
type: "update_cell",
|
|
157
|
-
cellId: cellId1,
|
|
157
|
+
position: { type: "relative", cellId: cellId1 },
|
|
158
158
|
code: "x = 3",
|
|
159
159
|
},
|
|
160
160
|
},
|
|
@@ -188,7 +188,7 @@ describe("EditNotebookTool", () => {
|
|
|
188
188
|
{
|
|
189
189
|
edit: {
|
|
190
190
|
type: "update_cell",
|
|
191
|
-
cellId: "nonexistent" as CellId,
|
|
191
|
+
position: { cellId: "nonexistent" as CellId },
|
|
192
192
|
code: "x = 2",
|
|
193
193
|
},
|
|
194
194
|
},
|
|
@@ -201,7 +201,7 @@ describe("EditNotebookTool", () => {
|
|
|
201
201
|
{
|
|
202
202
|
edit: {
|
|
203
203
|
type: "update_cell",
|
|
204
|
-
cellId: "nonexistent" as CellId,
|
|
204
|
+
position: { cellId: "nonexistent" as CellId },
|
|
205
205
|
code: "x = 2",
|
|
206
206
|
},
|
|
207
207
|
},
|
|
@@ -225,7 +225,7 @@ describe("EditNotebookTool", () => {
|
|
|
225
225
|
{
|
|
226
226
|
edit: {
|
|
227
227
|
type: "update_cell",
|
|
228
|
-
cellId: cellId1,
|
|
228
|
+
position: { type: "relative", cellId: cellId1 },
|
|
229
229
|
code: "x = 2",
|
|
230
230
|
},
|
|
231
231
|
},
|
|
@@ -233,6 +233,51 @@ describe("EditNotebookTool", () => {
|
|
|
233
233
|
),
|
|
234
234
|
).rejects.toThrow("Cell editor not found");
|
|
235
235
|
});
|
|
236
|
+
|
|
237
|
+
it("should throw error when cellId is missing for update_cell", async () => {
|
|
238
|
+
const notebook = MockNotebook.notebookState({
|
|
239
|
+
cellData: {
|
|
240
|
+
[cellId1]: { code: "x = 1" },
|
|
241
|
+
},
|
|
242
|
+
});
|
|
243
|
+
store.set(notebookAtom, notebook);
|
|
244
|
+
|
|
245
|
+
await expect(
|
|
246
|
+
tool.handler(
|
|
247
|
+
{
|
|
248
|
+
edit: {
|
|
249
|
+
type: "update_cell",
|
|
250
|
+
position: {},
|
|
251
|
+
code: "x = 2",
|
|
252
|
+
},
|
|
253
|
+
},
|
|
254
|
+
toolContext as never,
|
|
255
|
+
),
|
|
256
|
+
).rejects.toThrow("Cell ID is required for update_cell");
|
|
257
|
+
});
|
|
258
|
+
|
|
259
|
+
it("should throw error when code is missing for update_cell", async () => {
|
|
260
|
+
const editorView = createMockEditorView("x = 1");
|
|
261
|
+
const notebook = MockNotebook.notebookState({
|
|
262
|
+
cellData: {
|
|
263
|
+
[cellId1]: { code: "x = 1" },
|
|
264
|
+
},
|
|
265
|
+
});
|
|
266
|
+
notebook.cellHandles[cellId1] = { current: { editorView } } as never;
|
|
267
|
+
store.set(notebookAtom, notebook);
|
|
268
|
+
|
|
269
|
+
await expect(
|
|
270
|
+
tool.handler(
|
|
271
|
+
{
|
|
272
|
+
edit: {
|
|
273
|
+
type: "update_cell",
|
|
274
|
+
position: { cellId: cellId1 },
|
|
275
|
+
},
|
|
276
|
+
},
|
|
277
|
+
toolContext as never,
|
|
278
|
+
),
|
|
279
|
+
).rejects.toThrow("Code is required for update_cell");
|
|
280
|
+
});
|
|
236
281
|
});
|
|
237
282
|
|
|
238
283
|
describe("add_cell operation", () => {
|
|
@@ -404,6 +449,86 @@ describe("EditNotebookTool", () => {
|
|
|
404
449
|
),
|
|
405
450
|
).rejects.toThrow("Column index is out of range");
|
|
406
451
|
});
|
|
452
|
+
|
|
453
|
+
it("should throw error when cellId is missing for add_cell with relative position", async () => {
|
|
454
|
+
const notebook = MockNotebook.notebookState({
|
|
455
|
+
cellData: {
|
|
456
|
+
[cellId1]: { code: "x = 1" },
|
|
457
|
+
},
|
|
458
|
+
});
|
|
459
|
+
store.set(notebookAtom, notebook);
|
|
460
|
+
|
|
461
|
+
await expect(
|
|
462
|
+
tool.handler(
|
|
463
|
+
{
|
|
464
|
+
edit: {
|
|
465
|
+
type: "add_cell",
|
|
466
|
+
position: {
|
|
467
|
+
type: "relative",
|
|
468
|
+
before: true,
|
|
469
|
+
},
|
|
470
|
+
code: "y = 2",
|
|
471
|
+
},
|
|
472
|
+
},
|
|
473
|
+
toolContext as never,
|
|
474
|
+
),
|
|
475
|
+
).rejects.toThrow(
|
|
476
|
+
"Cell ID is required for add_cell with relative position",
|
|
477
|
+
);
|
|
478
|
+
});
|
|
479
|
+
|
|
480
|
+
it("should throw error when before is missing for add_cell with relative position", async () => {
|
|
481
|
+
const notebook = MockNotebook.notebookState({
|
|
482
|
+
cellData: {
|
|
483
|
+
[cellId1]: { code: "x = 1" },
|
|
484
|
+
},
|
|
485
|
+
});
|
|
486
|
+
store.set(notebookAtom, notebook);
|
|
487
|
+
|
|
488
|
+
await expect(
|
|
489
|
+
tool.handler(
|
|
490
|
+
{
|
|
491
|
+
edit: {
|
|
492
|
+
type: "add_cell",
|
|
493
|
+
position: {
|
|
494
|
+
type: "relative",
|
|
495
|
+
cellId: cellId1,
|
|
496
|
+
},
|
|
497
|
+
code: "y = 2",
|
|
498
|
+
},
|
|
499
|
+
},
|
|
500
|
+
toolContext as never,
|
|
501
|
+
),
|
|
502
|
+
).rejects.toThrow(
|
|
503
|
+
"Before is required for add_cell with relative position",
|
|
504
|
+
);
|
|
505
|
+
});
|
|
506
|
+
|
|
507
|
+
it("should throw error when columnIndex is missing for add_cell with column_end position", async () => {
|
|
508
|
+
const notebook = MockNotebook.notebookState({
|
|
509
|
+
cellData: {
|
|
510
|
+
[cellId1]: { code: "x = 1" },
|
|
511
|
+
},
|
|
512
|
+
});
|
|
513
|
+
store.set(notebookAtom, notebook);
|
|
514
|
+
|
|
515
|
+
await expect(
|
|
516
|
+
tool.handler(
|
|
517
|
+
{
|
|
518
|
+
edit: {
|
|
519
|
+
type: "add_cell",
|
|
520
|
+
position: {
|
|
521
|
+
type: "column_end",
|
|
522
|
+
},
|
|
523
|
+
code: "y = 2",
|
|
524
|
+
},
|
|
525
|
+
},
|
|
526
|
+
toolContext as never,
|
|
527
|
+
),
|
|
528
|
+
).rejects.toThrow(
|
|
529
|
+
"Column index is required for add_cell with column_end position",
|
|
530
|
+
);
|
|
531
|
+
});
|
|
407
532
|
});
|
|
408
533
|
|
|
409
534
|
describe("delete_cell operation", () => {
|
|
@@ -423,7 +548,7 @@ describe("EditNotebookTool", () => {
|
|
|
423
548
|
{
|
|
424
549
|
edit: {
|
|
425
550
|
type: "delete_cell",
|
|
426
|
-
cellId: cellId1,
|
|
551
|
+
position: { cellId: cellId1 },
|
|
427
552
|
},
|
|
428
553
|
},
|
|
429
554
|
toolContext as never,
|
|
@@ -453,7 +578,7 @@ describe("EditNotebookTool", () => {
|
|
|
453
578
|
{
|
|
454
579
|
edit: {
|
|
455
580
|
type: "delete_cell",
|
|
456
|
-
cellId: "nonexistent" as CellId,
|
|
581
|
+
position: { cellId: "nonexistent" as CellId },
|
|
457
582
|
},
|
|
458
583
|
},
|
|
459
584
|
toolContext as never,
|
|
@@ -476,13 +601,34 @@ describe("EditNotebookTool", () => {
|
|
|
476
601
|
{
|
|
477
602
|
edit: {
|
|
478
603
|
type: "delete_cell",
|
|
479
|
-
cellId: cellId1,
|
|
604
|
+
position: { cellId: cellId1 },
|
|
480
605
|
},
|
|
481
606
|
},
|
|
482
607
|
toolContext as never,
|
|
483
608
|
),
|
|
484
609
|
).rejects.toThrow("Cell editor not found");
|
|
485
610
|
});
|
|
611
|
+
|
|
612
|
+
it("should throw error when cellId is missing for delete_cell", async () => {
|
|
613
|
+
const notebook = MockNotebook.notebookState({
|
|
614
|
+
cellData: {
|
|
615
|
+
[cellId1]: { code: "x = 1" },
|
|
616
|
+
},
|
|
617
|
+
});
|
|
618
|
+
store.set(notebookAtom, notebook);
|
|
619
|
+
|
|
620
|
+
await expect(
|
|
621
|
+
tool.handler(
|
|
622
|
+
{
|
|
623
|
+
edit: {
|
|
624
|
+
type: "delete_cell",
|
|
625
|
+
position: {},
|
|
626
|
+
},
|
|
627
|
+
},
|
|
628
|
+
toolContext as never,
|
|
629
|
+
),
|
|
630
|
+
).rejects.toThrow("Cell ID is required for delete_cell");
|
|
631
|
+
});
|
|
486
632
|
});
|
|
487
633
|
|
|
488
634
|
describe("validation", () => {
|
|
@@ -508,7 +654,7 @@ describe("EditNotebookTool", () => {
|
|
|
508
654
|
{
|
|
509
655
|
edit: {
|
|
510
656
|
type: "update_cell",
|
|
511
|
-
cellId: cellId1,
|
|
657
|
+
position: { cellId: cellId1 },
|
|
512
658
|
code: "y = 1",
|
|
513
659
|
},
|
|
514
660
|
},
|
|
@@ -521,7 +667,7 @@ describe("EditNotebookTool", () => {
|
|
|
521
667
|
{
|
|
522
668
|
edit: {
|
|
523
669
|
type: "update_cell",
|
|
524
|
-
cellId: cellId3,
|
|
670
|
+
position: { cellId: cellId3 },
|
|
525
671
|
code: "y = 3",
|
|
526
672
|
},
|
|
527
673
|
},
|