@marimo-team/islands 0.23.17-dev9 → 0.24.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-f9vLjQiF.js → ConnectedDataExplorerComponent-BUC1MrsF.js} +24 -24
- package/dist/{ErrorBoundary-DhLqwSWA.js → ErrorBoundary-BniTEhHn.js} +7 -7
- package/dist/{ImageComparisonComponent-C3y7L3eJ.js → ImageComparisonComponent-B7b8DcJI.js} +42 -31
- package/dist/{Plot-YQOuVIei.js → Plot-eTseCFf_.js} +4 -4
- package/dist/_initCloneObject-DNUst5Cg.js +91 -0
- package/dist/abnfDiagram-N423BO3Z-DA4j92-C.js +112 -0
- package/dist/{any-language-editor-DifE-fl7.js → any-language-editor-LHl8ZmVN.js} +26 -26
- package/dist/apl-Cwo7GIH7.js +4 -0
- package/dist/{arc-CTIpFoOn.js → arc-9nABupDE.js} +2 -2
- package/dist/architecture-TIHT7OUA-DxLlkuAK.js +5 -0
- package/dist/{architectureDiagram-VXUJARFQ-DXwkyAaM.js → architectureDiagram-T3A2C74G-BBlBK1Oh.js} +327 -214
- package/dist/{arrays-sEtDRoG4.js → arrays-C56grfjL.js} +1 -1
- package/dist/asciiarmor-jrfEZ3j_.js +4 -0
- package/dist/asn1-BNEiJ4nQ.js +4 -0
- package/dist/assets/__vite-browser-external-DUz7vvG0.js +1 -0
- package/dist/assets/{worker-CDEKsBgX.js → worker-Cl1KJG2_.js} +2 -2
- package/dist/blockDiagram-VBNYF7ZC-Datz1WNn.js +3284 -0
- package/dist/brainfuck-BCunvTbd.js +4 -0
- package/dist/{button-BSm8IXRU.js → button-Dr2uAwhT.js} +9 -7
- package/dist/{c4Diagram-YG6GDRKO-B6dZC_oU.js → c4Diagram-5PPSVZJV-DTIsibpE.js} +165 -162
- package/dist/{capabilities-C6OQ5YBO.js → capabilities-BilXeZ7p.js} +2 -2
- package/dist/{channel-BN070S0F.js → channel-CuV_jmG4.js} +1 -1
- package/dist/chat-ui-o-tATfmW.js +8619 -0
- package/dist/{check-DP7U0H0G.js → check-58HHfHKy.js} +1 -1
- package/dist/chunk-2GRJ4B5K-DRayWnnu.js +68 -0
- package/dist/{chunk-QZHKN3VN-Dym5BS7y.js → chunk-2Q5K7J3B-BSLyFOHa.js} +1 -1
- package/dist/chunk-3NCLNEKW-BPlp8K7N.js +11 -0
- package/dist/chunk-4I5QYGJK-CYJC3pkC.js +260 -0
- package/dist/chunk-5FCAYU7R-C3cMIeyz.js +24 -0
- package/dist/{chunk-5FQGJX7Z-B9WoXK1R.js → chunk-5FQGJX7Z-BRZ_XYUw.js} +6 -6
- package/dist/chunk-5HE753X5-D2jFCVXb.js +34 -0
- package/dist/chunk-5JV3BV7I-B7tzprBU.js +50 -0
- package/dist/{chunk-DI55MBZ5-D4Y8yV8B.js → chunk-5RXB4S5H-DcCPfb0q.js} +373 -327
- package/dist/chunk-5TONJI2A-LRqbgPte.js +59 -0
- package/dist/{chunk-FMBD7UC4-quJmebXa.js → chunk-5VM5RSS4-ChXEBudA.js} +1 -1
- package/dist/chunk-6Q2QTUOP-zcnb3OaV.js +503 -0
- package/dist/{chunk-HN2XXSSU-Bv0QkeMr.js → chunk-7BUUIJ7U-CkIbJNZo.js} +32 -25
- package/dist/chunk-7Z6QIM7H-1j-x7ddW.js +606 -0
- package/dist/{chunk-FRFDVMJY-BHBqN-vD.js → chunk-BIQX33UG-B-BYk6sM.js} +3 -3
- package/dist/chunk-Bfp04NdC.js +25 -0
- package/dist/chunk-CQNSW5MT-DBXDKSOU.js +34 -0
- package/dist/{chunk-4F5CHEZ2-VlodlEGo.js → chunk-CYSBUYHQ-Cv-vKQV-.js} +1 -1
- package/dist/{chunk-SJTYNZTY-DnXoKWpW.js → chunk-EMLP6XTP-DCtMkXLF.js} +1 -1
- package/dist/{chunk-B4BG7PRW-B_z2FEHm.js → chunk-GF5L2VYU-esTxzELH.js} +878 -636
- package/dist/chunk-I66GZJ75-9xAsFrdW.js +3744 -0
- package/dist/chunk-J7OUQ5F2-CbNBTlFM.js +81 -0
- package/dist/chunk-JG7HCLWE-CZIm6axg.js +59 -0
- package/dist/{flowDiagram-NV44I4VS-BRhSg-ro.js → chunk-JQJVKLGR-ZALkKVji.js} +1019 -1001
- package/dist/{chunk-4BX2VUAB-iU5lQTDI.js → chunk-JWPE2WC7-C_Daz-Oc.js} +1 -1
- package/dist/{chunk-QN33PNHL-DPBNNzpR.js → chunk-KBJHAD2P-B7m9DztL.js} +3 -2
- package/dist/chunk-KEIR6QF5-aP6TmWQ-.js +21095 -0
- package/dist/{chunk-UMXZTB3W-D1uHz8MN.js → chunk-MOZMSUNE-BQi-ggQx.js} +7 -4
- package/dist/{chunk-S3R3BYOJ-BdgLc8AM.js → chunk-NSK5VX7P-BmmoJBbx.js} +320 -29
- package/dist/chunk-OSBZ3O6U-BcrmpSY_.js +22 -0
- package/dist/{chunk-TQ3KTPDO-CsDx6v37.js → chunk-QBLGF6JB-BACuPUWb.js} +3 -3
- package/dist/chunk-QR6OTTB3-C4L1dLRd.js +3762 -0
- package/dist/{chunk-B2363JML-zL3VngtH.js → chunk-R7FJI6CG-BYAXJpIb.js} +3 -3
- package/dist/chunk-RYQCIY6F-poA0Ugpr.js +243 -0
- package/dist/chunk-U6XO7XAA-I8tCjTeT.js +60 -0
- package/dist/chunk-UBXNYLIW-C8LueN5Q.js +34 -0
- package/dist/{chunk-ATLVNIR6-qFiszptQ.js → chunk-W5SLKNZC-DK-_KuKT.js} +2 -2
- package/dist/{chunk-JA3XYJ7Z-CY4CRbV5.js → chunk-WRU74C26-DLgw-V0j.js} +262 -451
- package/dist/chunk-XXDRQBXY-Dzcp3rUR.js +9 -0
- package/dist/chunk-Y2CYZVJY-DX3DSigL.js +13 -0
- package/dist/{chunk-PL6DKKU2-CAHKc95s.js → chunk-YOTPTUD7-C8qfgaz5.js} +5 -5
- package/dist/{chunk-MI3HLSF2-HGWI-8Pg.js → chunk-ZIRB5QZD-_JX1DzEJ.js} +12 -8
- package/dist/classDiagram-JCYQIIEL-D8A6ZyXv.js +32 -0
- package/dist/classDiagram-v2-OCEON4UE-DIdYl-t3.js +32 -0
- package/dist/{click-outside-container-BSIeYt4y.js → click-outside-container-BZNsAj09.js} +2 -2
- package/dist/{clike-7lgyEYRk.js → clike-CWndBX_M.js} +1 -1
- package/dist/clojure-2X0Rfij9.js +4 -0
- package/dist/cmake-DEwzCy9U.js +4 -0
- package/dist/cobol-Ck4eCoAB.js +4 -0
- package/dist/{code-block-37QAKDTI-MSxEjskJ.js → code-block-37QAKDTI-B4pWe5MI.js} +4 -4
- package/dist/coffeescript-bB1IDwhg.js +4 -0
- package/dist/{common-C3f0slQQ.js → common-DV4qU2ew.js} +797 -804
- package/dist/commonlisp-BDYrVBNC.js +4 -0
- package/dist/{compiler-runtime-CEbnTgxf.js → compiler-runtime-DsR6imPN.js} +2 -2
- package/dist/{copy-DNq8q3zw.js → copy-C7ZKMKox.js} +5 -5
- package/dist/{cose-bilkent-S5V4N54A-BYj0aL7z.js → cose-bilkent-JH36ORCC-D6iQzSi6.js} +6 -5
- package/dist/crystal-BSoiVUiH.js +4 -0
- package/dist/css-w1h9i21f.js +4 -0
- package/dist/cynefin-VYW2F7L2-DnZOHyNF.js +5 -0
- package/dist/cynefinDiagram-MW4NZA55-B1GNPS2u.js +367 -0
- package/dist/cypher-B4xzuKGP.js +4 -0
- package/dist/{cytoscape.esm-Dr8XzXWK.js → cytoscape.esm-BPa26Dup.js} +393 -334
- package/dist/d-D50Bz34p.js +4 -0
- package/dist/{dagre-By_QsQgc.js → dagre-ThTNj8pe.js} +60 -45
- package/dist/dagre-VZM6K2ZE-DEs5dfXA.js +343 -0
- package/dist/{data-grid-overlay-editor-BWRG2b_o.js → data-grid-overlay-editor-Ci7TXVf5.js} +5 -5
- package/dist/{debounce-BOD3DbfP.js → debounce-D784bpms.js} +2 -2
- package/dist/{defaultLocale-BpsHxBd7.js → defaultLocale-CMezyvMc.js} +26 -26
- package/dist/diagram-7IWD3JNH-Bdk1_wJO.js +321 -0
- package/dist/diagram-B4RE2ZJO-Be9eYLJ0.js +464 -0
- package/dist/{diagram-S2PKOQOG-CGh4OMEV.js → diagram-LBJQPF4R-BNSnzxFw.js} +26 -18
- package/dist/{diagram-PSM6KHXK-D4ftnaua.js → diagram-Q27KOJAE-NPRzyGtd.js} +68 -63
- package/dist/diagram-UB23O5K3-Dogz4itg.js +236 -0
- package/dist/diff-BMdzfXq-.js +4 -0
- package/dist/{dist-BTdrwBWP.js → dist-72nb8Uag.js} +3 -3
- package/dist/{dist-CV79CsQ0.js → dist-9PC5KxMl.js} +2 -2
- package/dist/{dist-BOMbzyb3.js → dist-Awj73yUw.js} +3 -3
- package/dist/{dist-w_gWE5Wf.js → dist-B0Ctcrt9.js} +1 -1
- package/dist/{dist-BO5HRiTf.js → dist-B1Donbpk.js} +2 -2
- package/dist/dist-BC6wzWNb.js +5 -0
- package/dist/{dist-De-GlSAs.js → dist-BJ2IUa0l.js} +15 -9
- package/dist/dist-BMd_RcOy.js +5 -0
- package/dist/dist-BZEWjN6r.js +5 -0
- package/dist/{dist-BP39XM8u.js → dist-B_K4AAkc.js} +1 -1
- package/dist/dist-BeuGjR3n.js +6 -0
- package/dist/dist-BfDQCUe6.js +5 -0
- package/dist/dist-BhNblTOV.js +8 -0
- package/dist/{dist-BPF0gTRZ.js → dist-C0ifRfXi.js} +1 -1
- package/dist/{dist-pqIwD8VD.js → dist-C3mEki35.js} +2 -2
- package/dist/{dist-LpLXa9Lb.js → dist-CNfV2vDI.js} +2 -2
- package/dist/{dist-DviUBLUp.js → dist-COcQ5Vyc.js} +4 -4
- package/dist/dist-CRCm4Fuo.js +5 -0
- package/dist/{dist-4lVIWUT3.js → dist-CSZpLb9d.js} +1 -1
- package/dist/{dist-BIEt-mlF.js → dist-CWswQBvu.js} +1 -1
- package/dist/{dist-D3bdsa1d.js → dist-CXYro_Nw.js} +4 -4
- package/dist/{dist-CRmSjkLP.js → dist-Ckfsc8C3.js} +2 -2
- package/dist/{dist-CSlJrrAw.js → dist-Cyq6Pxtv.js} +1 -1
- package/dist/{dist-JGehap7K.js → dist-D-BWPyoX.js} +5 -5
- package/dist/{dist-BCX980mU.js → dist-D-YB6j-O.js} +2 -2
- package/dist/{dist-DgjbnqTg.js → dist-D1vYHETp.js} +2 -2
- package/dist/{dist-BpeiYpG2.js → dist-D9-ePb6D.js} +2 -2
- package/dist/dist-DBPEbGkd.js +8 -0
- package/dist/{dist-C2_4pjuS.js → dist-DC409ROm.js} +1 -1
- package/dist/{dist-BdqCKQ1O.js → dist-DJRUd9aM.js} +2 -2
- package/dist/{dist-DaXJPX8F.js → dist-DLvxZEAK.js} +2 -2
- package/dist/dist-DSsl8IAI.js +5 -0
- package/dist/{dist-3NCqaWjt.js → dist-D_ulymry.js} +2 -2
- package/dist/{dist-DZwp8lro.js → dist-DgY27bJ4.js} +3 -3
- package/dist/{dist-BwhXBwMd.js → dist-DiwVZiK7.js} +1 -1
- package/dist/{dist-DwqBJ014.js → dist-DnYHhW6c.js} +2 -2
- package/dist/dist-Dx0kkrek.js +5 -0
- package/dist/{dist-DsoKosxi.js → dist-HaLHv0k5.js} +2 -3
- package/dist/dist-NKA1TU8a.js +6 -0
- package/dist/dist-ZFcsIdHj.js +8 -0
- package/dist/{dist-C18MUWTj.js → dist-iZ8-rtUy.js} +2 -2
- package/dist/{dist-DIlxLFXG.js → dist-j30bBjjN.js} +15 -15
- package/dist/{dist-SXNmlE8A.js → dist-kOCFEa1U.js} +3 -3
- package/dist/{dist-CFSb_Frm.js → dist-sxRUVPmt.js} +1 -1
- package/dist/dist-uA2RbGmY.js +5 -0
- package/dist/{dist-B2jmQKKx.js → dist-xVU82Nq7.js} +2 -2
- package/dist/dist-zSCo-xCB.js +8 -0
- package/dist/{dockerfile-B82Pkz_V.js → dockerfile-DImRFUlA.js} +1 -1
- package/dist/dtd-B9dCT0pu.js +4 -0
- package/dist/dylan-DLghDyuR.js +4 -0
- package/dist/ebnfDiagram-BXEA7PRR-CqRWkG7L.js +129 -0
- package/dist/ecl-w0qdPHDB.js +4 -0
- package/dist/eiffel-C5AWRCNP.js +4 -0
- package/dist/elm-CT8FZrOm.js +4 -0
- package/dist/{erDiagram-Q2GNP2WA-BcKAHFqF.js → erDiagram-JOGREHBK-BZMJX-Au.js} +568 -436
- package/dist/erlang-DPD-9M5g.js +4 -0
- package/dist/{error-banner-B_GQfxxD.js → error-banner-BwCLtmkH.js} +6 -6
- package/dist/{esm-CuQHjs36.js → esm-BJ4n0NUT.js} +1 -1
- package/dist/{esm-DKOv6P2M.js → esm-Dusmf6uu.js} +105 -105
- package/dist/{esm-DzZVaNH4.js → esm-QLUgkqzZ.js} +6 -6
- package/dist/eventmodeling-45OFAUF4-D8Kbnsr6.js +5 -0
- package/dist/{extends-w2_S44bV.js → extends-iFBneQO_.js} +9 -9
- package/dist/{factor-Bq2mGIHt.js → factor-BonZgUGg.js} +1 -1
- package/dist/factor-rFfeJu3r.js +4 -0
- package/dist/flowDiagram-UKHOOZJN-DqIE8_b3.js +21 -0
- package/dist/{formats-Dwq1THhr.js → formats-HSfYlcA8.js} +7 -7
- package/dist/forth-C-3AyQx4.js +4 -0
- package/dist/fortran-BSN9TeT7.js +4 -0
- package/dist/ganttDiagram-PKOTCBZU-Bc9puoXb.js +2207 -0
- package/dist/gas-DwmuvQpB.js +4 -0
- package/dist/gherkin-gmCjL-Sn.js +4 -0
- package/dist/{gitGraph-G5XIXVHT-BjTx0kww.js → gitGraph-TEB2WS4Q-DVzLmQHc.js} +2 -3
- package/dist/gitGraphDiagram-DS77QQ5N-CqKr-Dfg.js +766 -0
- package/dist/{glide-data-editor-B9K6-MJe.js → glide-data-editor-BI2i_IEE.js} +18 -18
- package/dist/graphlib-DMVIRZap.js +614 -0
- package/dist/groovy-DCjvesOy.js +4 -0
- package/dist/hasIn-synBnXn4.js +119 -0
- package/dist/haskell-C1p0D9L8.js +4 -0
- package/dist/haxe-q-fgv0zr.js +5 -0
- package/dist/{html-to-image-CZ1kLKkq.js → html-to-image-BOiFHx3u.js} +7535 -3056
- package/dist/idl-Bmg4bsnK.js +4 -0
- package/dist/{info-VBDWY6EO-CA67FznA.js → info-DKCQHKI2-BxOTqQHM.js} +2 -3
- package/dist/infoDiagram-6WML65LV-B869X2KY.js +37 -0
- package/dist/{input-C5K4VBvB.js → input-BRE2a7Ay.js} +13 -13
- package/dist/{_baseFor-4jw-lnCC.js → isArrayLikeObject-CBUaLibE.js} +96 -29
- package/dist/{isEmpty-CJJMn-QP.js → isEmpty-CgME6WRV.js} +15 -15
- package/dist/{isSymbol-CoUCgMCM.js → isSymbol-Ch3GYg4S.js} +1 -1
- package/dist/ishikawaDiagram-WSZJBQD7-BrOMFBYy.js +731 -0
- package/dist/javascript-BY5QZ-eN.js +4 -0
- package/dist/{journeyDiagram-XKPGCS4Q-DEal0aT1.js → journeyDiagram-NVQOT4AX-CTwHlsTm.js} +124 -123
- package/dist/{jsx-runtime-DebpN0FN.js → jsx-runtime-Dp_oQwaf.js} +1 -1
- package/dist/julia-DbR1YalK.js +4 -0
- package/dist/{kanban-definition-3W4ZIXB7-Dl90wENN.js → kanban-definition-27J2QSJJ-CKowzO9_.js} +51 -45
- package/dist/{katex-C4t-BmrK.js → katex-Ci33kJVq.js} +1 -1
- package/dist/{katex-Bld7b-fk.js → katex-Dp22h6yO.js} +2871 -3002
- package/dist/{label-DjoYwqmj.js → label-CMh2d8pJ.js} +6 -6
- package/dist/{line-C43FIPBd.js → line-Bc27KE1D.js} +3 -3
- package/dist/{linear-H_vsH9ao.js → linear-6pDlrp1I.js} +4 -4
- package/dist/livescript-BDUooIeL.js +4 -0
- package/dist/{loader-DX-IDS7n.js → loader-DTnbNSVZ.js} +11 -11
- package/dist/lua-CswAWSkH.js +4 -0
- package/dist/main.js +747 -752
- package/dist/map-BQ_Xp80D.js +137 -0
- package/dist/mathematica-Bw7v11B5.js +4 -0
- package/dist/mbox-j35IMz1j.js +4 -0
- package/dist/merge-CDbSrd9f.js +69 -0
- package/dist/mermaid-4DMBBIKO-BZSpTmcx.js +6 -0
- package/dist/mermaid-DpAz2sTy.js +1265 -0
- package/dist/mermaid-parser.core-BQzz3_BI.js +87 -0
- package/dist/{mhchem-EGhUZR1V.js → mhchem-BDHjke3h.js} +1 -1
- package/dist/{micromark-factory-space-CwHmg6iz.js → micromark-factory-space-Cr4NxAt3.js} +1 -1
- package/dist/{mindmap-definition-VGOIOE7T-CCDupjWW.js → mindmap-definition-FAOFIHXS-CTsi-HFj.js} +126 -80
- package/dist/mirc-Ba_RHVXO.js +4 -0
- package/dist/mllike-DbTP2dPp.js +6 -0
- package/dist/modelica-lpT3V1X6.js +4 -0
- package/dist/mscgen-BN4ZSJMx.js +6 -0
- package/dist/mumps-uI5g1A0g.js +4 -0
- package/dist/{node-sql-parser-v1Vi-Fft.js → node-sql-parser-BaLGWQe1.js} +1 -1
- package/dist/{now-Ch98bJO_.js → now-sFWt-GLC.js} +2 -2
- package/dist/{nsis-i9_sgigf.js → nsis-C68fFq_o.js} +1 -1
- package/dist/nsis-Df56GiRg.js +4 -0
- package/dist/ntriples-B3LWuG7W.js +4 -0
- package/dist/{number-overlay-editor-Ck_mc_gT.js → number-overlay-editor-CeBHRJvI.js} +3 -3
- package/dist/octave-CovfQgOx.js +4 -0
- package/dist/{once-B60G2fuJ.js → once-Boutk_9X.js} +1 -1
- package/dist/{ordinal-Bkv2-veX.js → ordinal-Bdajf2BE.js} +1 -1
- package/dist/oz-DQQAvVFb.js +4 -0
- package/dist/{packet-DYOGHKS2-Bkgofxf3.js → packet-7NZHBO7P-BG8whXXH.js} +2 -3
- package/dist/pascal-xz94P9sf.js +4 -0
- package/dist/pegDiagram-VL7TDLO6-CNpT8Sqz.js +124 -0
- package/dist/perl-aEWKE-1n.js +4 -0
- package/dist/pick-CaEWivSF.js +47 -0
- package/dist/{pie-VRWISCQL-B1AMhN_7.js → pie-RZYD4A2V-Cc_QhFbT.js} +2 -3
- package/dist/pieDiagram-7S7Q4E2Y-Ct8jRpe_.js +219 -0
- package/dist/pig-DB6DOZl7.js +4 -0
- package/dist/powershell-DM5saUx1.js +4 -0
- package/dist/{precisionRound-CnHPY_5v.js → precisionRound-BOoJTbDj.js} +1 -1
- package/dist/{process-output-bVfbcx5_.js → process-output-HrsM52f8.js} +7 -7
- package/dist/properties-BGjYQuGo.js +4 -0
- package/dist/protobuf-BPpEyPud.js +4 -0
- package/dist/{pug-BhE2JRSg.js → pug-DFPPZ3LA.js} +1 -1
- package/dist/pug-uJzB88ft.js +4 -0
- package/dist/puppet-oIm2d_Lg.js +4 -0
- package/dist/{purify.es-EnR5yhgI.js → purify.es-DR5PNXwx.js} +160 -155
- package/dist/python-WE57eUzD.js +4 -0
- package/dist/q-CR8xPodo.js +4 -0
- package/dist/{quadrantDiagram-AYHSOK5B-BqDB9tUC.js → quadrantDiagram-CIZ2JOQS-B5n_xFcF.js} +429 -401
- package/dist/r-CJdmQZNj.js +4 -0
- package/dist/{radar-ZZBFDIW7-C2b7A32s.js → radar-I7S5WNFK-OhUkecXA.js} +2 -3
- package/dist/railroad-3IZDKUUU-1CmOpo1B.js +5 -0
- package/dist/railroad-abnf-AHOZXSZD-DmH4lsDS.js +5 -0
- package/dist/railroad-ebnf-EBAXGLYW-CzK0md4e.js +5 -0
- package/dist/railroad-peg-LSFZ7HO6-DOklooKz.js +5 -0
- package/dist/railroadDiagram-AXF67PYL-BbUWbtf8.js +100 -0
- package/dist/{react-DA-nE2FX.js → react-DhGsCS90.js} +1 -1
- package/dist/{react-dom-BTJzcVJ9.js → react-dom-CmENFV8Q.js} +2 -2
- package/dist/{react-vega-BazDALhI.js → react-vega-zyfTF9SY.js} +8036 -4796
- package/dist/{requirementDiagram-UZGBJVZJ-KbVt8SPH.js → requirementDiagram-LRYGKXZP-CpoDmKSf.js} +137 -105
- package/dist/{reveal-component-CbOaZYQI.js → reveal-component-CYZAzXrV.js} +27 -28
- package/dist/rough.esm-lGyFQ0B-.js +1363 -0
- package/dist/rpm-Cm5K4RH9.js +5 -0
- package/dist/ruby-ArsuTozQ.js +4 -0
- package/dist/sankeyDiagram-W5VNT64P-D82rYiAG.js +942 -0
- package/dist/sas-DShligrE.js +4 -0
- package/dist/scheme-kDLirQL7.js +4 -0
- package/dist/sequenceDiagram-SI44F4Z6-DgVKU1s5.js +4281 -0
- package/dist/shell-CVQuWP_N.js +4 -0
- package/dist/sieve-BW-ePwnq.js +4 -0
- package/dist/sizeCapture-X5ZJPWSS-BQgxHTji.js +48 -0
- package/dist/smalltalk-DI4aAXxY.js +4 -0
- package/dist/sparql-B2sp0oiz.js +4 -0
- package/dist/{spec-CQKL_D3i.js → spec-BL1GSUUF.js} +4 -4
- package/dist/{src-DV3ha_nA.js → src-BwVZVGyf.js} +13 -22
- package/dist/{stateDiagram-FKZM4ZOC-ByOvQf2n.js → stateDiagram-OKZ733FA-Cc9BchXz.js} +61 -58
- package/dist/stateDiagram-v2-UEYNNEHI-Dd4Tuw6F.js +32 -0
- package/dist/{step-BqHnkgWE.js → step-BqVgkWtk.js} +1 -1
- package/dist/stex-D2rme5UG.js +4 -0
- package/dist/{strings-DIy9NAmg.js → strings-DMLVGXRo.js} +305 -305
- package/dist/style.css +1 -1
- package/dist/stylus-xxO-85eO.js +4 -0
- package/dist/swift-Ctg533nZ.js +4 -0
- package/dist/swimlanes-SLNWSIFB-BHvhO5uv.js +5564 -0
- package/dist/swimlanesDiagram-ULZ7WXOC-aI_zgQ8O.js +33 -0
- package/dist/{swiper-component-CEdAYjb7.js → swiper-component-Cx0cRWLk.js} +6 -6
- package/dist/tcl-phm9c5Nd.js +4 -0
- package/dist/textile-CphjAg90.js +4 -0
- package/dist/{time-Bb4A7I6a.js → time-DAJu9fnj.js} +4 -4
- package/dist/timeline-definition-Z64GVDOM-BAHuDYyA.js +1107 -0
- package/dist/{timer-BpI_FKSA.js → timer-aIIabkbI.js} +1 -1
- package/dist/{toDate-CqhBWjvO.js → toDate-BGM7kFtQ.js} +6 -6
- package/dist/toml-BUuMK772.js +4 -0
- package/dist/{tooltip-f-qR0iUx.js → tooltip-BtUxZT5h.js} +7 -7
- package/dist/treeView-QDETBFTQ-DsLN_c8p.js +5 -0
- package/dist/{treemap-GDKQZRPO-SDux0AV8.js → treemap-6X3UGDF4-K1bi3LJm.js} +2 -3
- package/dist/troff-lCtc05A3.js +4 -0
- package/dist/ttcn-CcykzBcW.js +4 -0
- package/dist/ttcn-cfg-C-XYdqpE.js +4 -0
- package/dist/turtle-CpfVZs8G.js +4 -0
- package/dist/{types-DicH9Oi0.js → types-DT8UHI5w.js} +1 -1
- package/dist/{use-vega-container-remeasure-DGNrIQSk.js → use-vega-container-remeasure-B7OD7yUY.js} +3 -3
- package/dist/{useAsyncData-CYOQb1EW.js → useAsyncData-CDcbh-Qv.js} +5 -5
- package/dist/{useDateFormatter-Bt2qr_XS.js → useDateFormatter-B_vTzxpm.js} +4 -4
- package/dist/{useDeepCompareMemoize-CSHQeQEI.js → useDeepCompareMemoize-Bj6QvwiG.js} +3 -3
- package/dist/{useIframeCapabilities-kA09ykNq.js → useIframeCapabilities-CxuXXwjj.js} +4 -4
- package/dist/{useLifecycle-CMJGqBaY.js → useLifecycle-Bw4wRj_O.js} +7 -7
- package/dist/{useTheme-DYfby65G.js → useTheme-BzEXeAR5.js} +8 -7
- package/dist/vb-VOIzXwm9.js +4 -0
- package/dist/vbscript-D0WfcnVk.js +4 -0
- package/dist/{vega-component-C7nO5zcf.js → vega-component-CJug-VdR.js} +24 -24
- package/dist/{vega-embed-container-DAQAMjiO.js → vega-embed-container-BRjjqRGz.js} +9 -9
- package/dist/{vega-loader.browser-DmpxCJqx.js → vega-loader.browser-CGb-2Kwi.js} +106 -113
- package/dist/velocity-CCrc5n-0.js +4 -0
- package/dist/vennDiagram-T6HMQDX7-CTyzMewS.js +1913 -0
- package/dist/verilog-BLFhaDBH.js +4 -0
- package/dist/vhdl-DjuqPE9b.js +4 -0
- package/dist/wardley-OPB4EBWU-CP99MvU1.js +5 -0
- package/dist/wardleyDiagram-T6FBY63Y-vcno_rbk.js +669 -0
- package/dist/webidl-Cc7RrfeK.js +4 -0
- package/dist/xquery-BiCRLnNG.js +4 -0
- package/dist/{xychartDiagram-PRI3JC2R-BSkNxYNw.js → xychartDiagram-ELKLHX3M-DyFDERhM.js} +417 -353
- package/dist/yacas-CWcjav-O.js +4 -0
- package/dist/z80-DpYS2lE7.js +4 -0
- package/dist/{zod-BUcyXSdR.js → zod-BFY2SnzC.js} +42 -43
- package/package.json +7 -7
- package/src/__mocks__/requests.ts +5 -0
- package/src/components/ai/ai-model-dropdown.tsx +2 -2
- package/src/components/app-config/user-config-form.tsx +26 -0
- package/src/components/chat/__tests__/capabilities-popover.test.tsx +38 -0
- package/src/components/chat/__tests__/chat-abort.test.ts +51 -0
- package/src/components/chat/__tests__/use-chat-controller-id.test.tsx +39 -0
- package/src/components/chat/capabilities-popover.tsx +68 -0
- package/src/components/chat/chat-abort.ts +44 -0
- package/src/components/chat/chat-display.tsx +17 -0
- package/src/components/chat/chat-panel.tsx +107 -50
- package/src/components/chat/chat-utils.ts +1 -1
- package/src/components/chat/use-chat-controller-id.ts +24 -0
- package/src/components/data-table/charts/__tests__/schemas.test.ts +35 -0
- package/src/components/data-table/charts/schemas.ts +5 -2
- package/src/components/datasets/__tests__/icons.test.ts +21 -0
- package/src/components/datasets/icons.tsx +10 -0
- package/src/components/datasources/__tests__/components.test.tsx +29 -0
- package/src/components/datasources/components.tsx +8 -3
- package/src/components/editor/actions/export-dialog/__tests__/export-dialog.test.tsx +35 -0
- package/src/components/editor/actions/export-dialog/__tests__/state.test.ts +61 -0
- package/src/components/editor/actions/export-dialog/export-command.ts +4 -9
- package/src/components/editor/actions/export-dialog/format-notice.tsx +28 -0
- package/src/components/editor/actions/export-dialog/state.ts +23 -5
- package/src/components/editor/actions/export-dialog/use-export-dialog.ts +3 -13
- package/src/components/editor/actions/useConfigActions.tsx +24 -0
- package/src/components/editor/ai/add-cell-with-ai.tsx +2 -2
- package/src/components/editor/ai/ai-completion-editor.tsx +2 -2
- package/src/components/editor/chrome/panels/outline/__tests__/useActiveOutline.test.ts +26 -0
- package/src/components/editor/chrome/wrapper/useOpenAiAssistant.ts +2 -2
- package/src/components/editor/code/__tests__/readonly-python-code.test.tsx +114 -2
- package/src/core/__tests__/mode.test.ts +85 -0
- package/src/core/ai/__tests__/config.test.tsx +96 -0
- package/src/core/ai/config.ts +16 -22
- package/src/core/ai/constants.ts +7 -0
- package/src/core/ai/staged-cells.ts +3 -0
- package/src/core/ai/state.ts +10 -0
- package/src/core/codemirror/__tests__/setup.test.ts +1 -1
- package/src/core/codemirror/cm.ts +2 -2
- package/src/core/codemirror/code-lens/__tests__/extension.test.ts +85 -6
- package/src/core/codemirror/code-lens/extension.ts +144 -47
- package/src/core/codemirror/find-replace/search-highlight.ts +8 -3
- package/src/core/codemirror/language/languages/sql/__tests__/renderers.test.tsx +44 -0
- package/src/core/codemirror/language/languages/sql/renderers.tsx +3 -3
- package/src/core/codemirror/theme/__tests__/light.test.ts +59 -123
- package/src/core/codemirror/theme/dark.ts +6 -5
- package/src/core/codemirror/theme/light.ts +6 -4
- package/src/core/config/__tests__/config-schema.test.ts +2 -0
- package/src/core/config/config-schema.ts +1 -0
- package/src/core/config/feature-flag.tsx +0 -2
- package/src/core/dom/outline.ts +25 -2
- package/src/core/hotkeys/hotkeys.ts +2 -0
- package/src/core/mode.ts +11 -9
- package/src/core/network/__tests__/api.test.ts +132 -17
- package/src/core/network/__tests__/export-filename.test.ts +43 -0
- package/src/core/network/__tests__/requests-lazy.test.ts +1 -0
- package/src/core/network/api.ts +47 -12
- package/src/core/network/export-filename.ts +37 -0
- package/src/core/network/markdown-export.ts +19 -0
- package/src/core/network/requests-network.ts +29 -5
- package/src/core/network/types.ts +4 -0
- package/src/css/app/codemirror.css +11 -7
- package/src/css/globals.css +8 -0
- package/src/plugins/impl/DataEditorPlugin.tsx +2 -9
- package/src/plugins/impl/__tests__/DataEditorPlugin.test.ts +18 -0
- package/src/plugins/impl/chat/chat-ui.tsx +51 -3
- package/src/plugins/impl/data-frames/__tests__/schema.test.ts +30 -0
- package/src/plugins/impl/data-frames/schema.ts +4 -1
- package/src/plugins/impl/image-comparison/ImageComparisonComponent.tsx +20 -1
- package/src/plugins/impl/image-comparison/__tests__/ImageComparisonComponent.test.tsx +58 -0
- package/src/stories/theme.stories.tsx +71 -1
- package/dist/_baseUniq-B_2Hw7zG.js +0 -380
- package/dist/apl-e1B5LPEL.js +0 -4
- package/dist/architecture-7HQA4BMR-DHUrQjL4.js +0 -6
- package/dist/asciiarmor-B-gwgesP.js +0 -4
- package/dist/asn1-DF2ckRB4.js +0 -4
- package/dist/assets/__vite-browser-external-DltVXDv7.js +0 -1
- package/dist/blockDiagram-VD42YOAC-CIOjvxeD.js +0 -3131
- package/dist/brainfuck-4G-7_gq_.js +0 -4
- package/dist/chat-ui-DsZJj75A.js +0 -8369
- package/dist/chunk-55IACEB6-7h71GwyW.js +0 -8
- package/dist/chunk-ABZYJK2D-BxBDji1u.js +0 -2438
- package/dist/chunk-BNovOVIE.js +0 -28
- package/dist/chunk-CVBHYZKI-CwazXVlJ.js +0 -13
- package/dist/chunk-DR5Q36YT-5Yp2GWwR.js +0 -137
- package/dist/chunk-EXTU4WIE-BQPBhApE.js +0 -10
- package/dist/chunk-JZLCHNYA-DWIR9m5O.js +0 -4901
- package/dist/chunk-N4CR4FBY-Bw2HcMNc.js +0 -65
- package/dist/chunk-QXUST7PY-DtC2t9Mk.js +0 -498
- package/dist/chunk-TCCFYFTB-DPWJa9zL.js +0 -13948
- package/dist/chunk-TZMSLE5B-BzSHcq-K.js +0 -63
- package/dist/classDiagram-2ON5EDUG-BiQPjMNY.js +0 -30
- package/dist/classDiagram-v2-WZHVMYZB-YHdR8fqM.js +0 -30
- package/dist/clojure-CUybM11R.js +0 -4
- package/dist/clone-Q4Fqwn6q.js +0 -9
- package/dist/cmake-BPjGcuDL.js +0 -4
- package/dist/cobol-BETk_nb6.js +0 -4
- package/dist/coffeescript-CManZxXL.js +0 -4
- package/dist/commonlisp-DWkn7GW8.js +0 -4
- package/dist/crystal-CCbg5EUH.js +0 -4
- package/dist/css-By8eo-XS.js +0 -4
- package/dist/cypher-DwfHg3nP.js +0 -4
- package/dist/d-Brs1wNbw.js +0 -4
- package/dist/dagre-6UL2VRFP-DpYjBqQs.js +0 -296
- package/dist/diagram-QEK2KX5R-DVlUOgs1.js +0 -228
- package/dist/diff-DJIRmJ1g.js +0 -4
- package/dist/dist-5o9uz19x.js +0 -5
- package/dist/dist-BpDH0DEP.js +0 -5
- package/dist/dist-BpXhbQXO.js +0 -8
- package/dist/dist-ByadAk_L.js +0 -5
- package/dist/dist-CK0g7JvP.js +0 -8
- package/dist/dist-CfzCtiq2.js +0 -5
- package/dist/dist-D8JtVFrW.js +0 -8
- package/dist/dist-DK2Oocpu.js +0 -6
- package/dist/dist-DnSu977r.js +0 -5
- package/dist/dist-UmxJm6sW.js +0 -8
- package/dist/dist-aYSBQSyM.js +0 -5
- package/dist/dist-kkZ1Ztlh.js +0 -6
- package/dist/dist-ngPczwNi.js +0 -5
- package/dist/dist-wQRyxyTV.js +0 -5
- package/dist/dtd-Dyiazv4N.js +0 -4
- package/dist/dylan-D8Fcw7NA.js +0 -4
- package/dist/ecl-CjKp8Vii.js +0 -4
- package/dist/eiffel-K9ViOX5r.js +0 -4
- package/dist/elm-B5NVtRco.js +0 -4
- package/dist/erlang-BnLzgk7R.js +0 -4
- package/dist/factor-C7f9Jz5R.js +0 -4
- package/dist/flatten-Bbw7g6-K.js +0 -8
- package/dist/forth-rGM8jLao.js +0 -4
- package/dist/fortran-B3acSe0i.js +0 -4
- package/dist/ganttDiagram-JELNMOA3-CXXCN7LN.js +0 -2170
- package/dist/gas-Bb1Vmv_N.js +0 -4
- package/dist/gherkin-C9Lyidgd.js +0 -4
- package/dist/gitGraphDiagram-V2S2FVAM-BOlkMSqK.js +0 -652
- package/dist/graphlib-Ns7y5crs.js +0 -359
- package/dist/groovy-DQk6XcGH.js +0 -4
- package/dist/hasIn-Deg7jl_j.js +0 -108
- package/dist/haskell-mV0Vw9gv.js +0 -4
- package/dist/haxe-DqxN89zH.js +0 -5
- package/dist/idl-ya8W561J.js +0 -4
- package/dist/infoDiagram-HS3SLOUP-D3TyKnL_.js +0 -30
- package/dist/javascript-CgqgptVu.js +0 -4
- package/dist/julia-CFQ-HusI.js +0 -4
- package/dist/livescript-D__3TmDo.js +0 -4
- package/dist/lua-Bytcgj_W.js +0 -4
- package/dist/main-B1Jo_8pC.js +0 -4321
- package/dist/mathematica-DJhvVKvl.js +0 -4
- package/dist/mbox-IGHPCjfR.js +0 -4
- package/dist/memoize-BOtf2yFf.js +0 -17
- package/dist/merge-Be1CqGnU.js +0 -222
- package/dist/mermaid-4DMBBIKO-FXbOziy9.js +0 -6
- package/dist/mermaid-hv6IckVw.js +0 -1100
- package/dist/mermaid-parser.core-DoivvxPd.js +0 -54
- package/dist/min-Dtgc8txR.js +0 -38
- package/dist/mirc-tcwvVugm.js +0 -4
- package/dist/mllike-Dx91i62r.js +0 -6
- package/dist/modelica-_SRt-yU5.js +0 -4
- package/dist/mscgen-GZrGS9gt.js +0 -6
- package/dist/mumps-Cv3ygyod.js +0 -4
- package/dist/nsis-BU7GeGbI.js +0 -4
- package/dist/ntriples-CL-FCYXb.js +0 -4
- package/dist/octave-Dc6_3DIu.js +0 -4
- package/dist/oz-DpUAJCXf.js +0 -4
- package/dist/pascal-B17mncXs.js +0 -4
- package/dist/perl-BTpK97q9.js +0 -4
- package/dist/pick-D1Qo8s2C.js +0 -43
- package/dist/pieDiagram-ADFJNKIX-JvXG_6hk.js +0 -170
- package/dist/pig-CFb638Ap.js +0 -4
- package/dist/powershell-Cxo-_2A5.js +0 -4
- package/dist/properties-BPgT1xTB.js +0 -4
- package/dist/protobuf-BgHBaIIK.js +0 -4
- package/dist/pug-25-oS0SG.js +0 -4
- package/dist/puppet-DarIr20S.js +0 -4
- package/dist/python-BqmOsBsi.js +0 -4
- package/dist/q-D3QJCTup.js +0 -4
- package/dist/r-Cz_yBX4z.js +0 -4
- package/dist/rpm-DGOtYwAI.js +0 -5
- package/dist/ruby-DBZu4rPc.js +0 -4
- package/dist/sankeyDiagram-TZEHDZUN-DgkF38jx.js +0 -892
- package/dist/sas-Dd1D9qTq.js +0 -4
- package/dist/scheme-BmDjvTHX.js +0 -4
- package/dist/sequenceDiagram-WL72ISMW-BDmx9n95.js +0 -3652
- package/dist/shell-BL8zFSaj.js +0 -4
- package/dist/sieve-BAx2WqUP.js +0 -4
- package/dist/smalltalk-CYRzF7VV.js +0 -4
- package/dist/sparql-YWaDRO4A.js +0 -4
- package/dist/stateDiagram-v2-4FDKWEC3-C3xqeavR.js +0 -29
- package/dist/stex-B5O-env2.js +0 -4
- package/dist/stylus-lYsyLFc1.js +0 -4
- package/dist/swift-ClQz9z1n.js +0 -4
- package/dist/tcl-B3jhsfqY.js +0 -4
- package/dist/textile-Cb1Dw7Aq.js +0 -4
- package/dist/timeline-definition-IT6M3QCI-CkD_trIn.js +0 -856
- package/dist/toml-nHZhetdO.js +0 -4
- package/dist/troff-DuJAGWKH.js +0 -4
- package/dist/ttcn-BxrcwP21.js +0 -4
- package/dist/ttcn-cfg-BAg_9dcc.js +0 -4
- package/dist/turtle-zCq949as.js +0 -4
- package/dist/vb-De5hElus.js +0 -4
- package/dist/vbscript-Cypcpv4F.js +0 -4
- package/dist/velocity-Di7l-yhe.js +0 -4
- package/dist/verilog-Bzi-S3g2.js +0 -4
- package/dist/vhdl-B0ZZITaW.js +0 -4
- package/dist/webidl-0sviiRcN.js +0 -4
- package/dist/xquery-B4qMVWaB.js +0 -4
- package/dist/yacas-Jt25Fuv8.js +0 -4
- package/dist/z80-CrcbYzmp.js +0 -4
- /package/dist/{apl-99A7dLQe.js → apl-CMUKiT2b.js} +0 -0
- /package/dist/{array-O78LT16Y.js → array-CEIRxyh3.js} +0 -0
- /package/dist/{asciiarmor-DLEhpFDx.js → asciiarmor-C_r6K6db.js} +0 -0
- /package/dist/{asn1-CMrcTsT4.js → asn1-DnlnCQTu.js} +0 -0
- /package/dist/{asterisk-CqykImq7.js → asterisk-DaVJJDnV.js} +0 -0
- /package/dist/{brainfuck-ChPt5yBe.js → brainfuck-CtQoQVkV.js} +0 -0
- /package/dist/{clike-CE0fXfM_.js → clike-CIAs0ABt.js} +0 -0
- /package/dist/{clojure-QkBEMU-g.js → clojure-C6tKQYjD.js} +0 -0
- /package/dist/{cmake-CU1jX7Mo.js → cmake-D-nfcg14.js} +0 -0
- /package/dist/{cobol-DMOKzzky.js → cobol-DYTC58p9.js} +0 -0
- /package/dist/{coffeescript-DjnjLyfk.js → coffeescript-DctDWA58.js} +0 -0
- /package/dist/{colors-DmiH1bIH.js → colors-DR_aHfmQ.js} +0 -0
- /package/dist/{common-keywords-D3nPJNQP.js → common-keywords-FBrXPTcz.js} +0 -0
- /package/dist/{commonlisp-CYd9iOSe.js → commonlisp-BmvTqU5y.js} +0 -0
- /package/dist/{crystal-Dy55yoYG.js → crystal-BPIK2UMa.js} +0 -0
- /package/dist/{css-CNU8w3HJ.js → css-CDo_Lwzn.js} +0 -0
- /package/dist/{cypher-q47DGzK7.js → cypher-KztbD63v.js} +0 -0
- /package/dist/{d-jEkaLvxX.js → d-HXBWOoe9.js} +0 -0
- /package/dist/{defaultLocale-DoeErsX2.js → defaultLocale-DMZFeDB8.js} +0 -0
- /package/dist/{diff-vb2-unFN.js → diff-B9rWZH0m.js} +0 -0
- /package/dist/{dtd-C9kR-bXa.js → dtd-LtAMP5y8.js} +0 -0
- /package/dist/{duckdb-keywords-B6HYCMOT.js → duckdb-keywords-CvJhR_Yd.js} +0 -0
- /package/dist/{dylan-BLckrK-V.js → dylan-DXMK92pf.js} +0 -0
- /package/dist/{ebnf-Cnp3L9jg.js → ebnf-2D4Ctp3y.js} +0 -0
- /package/dist/{ecl-CEsf6XVg.js → ecl-Dqq8ser2.js} +0 -0
- /package/dist/{eiffel-2KGZNzx6.js → eiffel-ChExWBDx.js} +0 -0
- /package/dist/{elm-D2s3K5wF.js → elm-BMBz2xbZ.js} +0 -0
- /package/dist/{emotion-is-prop-valid.esm-DdVSF4FD.js → emotion-is-prop-valid.esm-_z-EwK5u.js} +0 -0
- /package/dist/{erlang-0PMFOndk.js → erlang-CGSDzg9P.js} +0 -0
- /package/dist/{fcl-D9nccAWI.js → fcl-Ccj8Z5Xd.js} +0 -0
- /package/dist/{forth-DG89iUsu.js → forth-vTkfR0aY.js} +0 -0
- /package/dist/{fortran-ytKsAVvu.js → fortran-CF4LAVFn.js} +0 -0
- /package/dist/{gas-Cg2Fm0N2.js → gas-mMFbQ2x4.js} +0 -0
- /package/dist/{gherkin-B87FEnZ-.js → gherkin-DLS1q0XM.js} +0 -0
- /package/dist/{groovy-Dcs08AWD.js → groovy-Zt6CNPxV.js} +0 -0
- /package/dist/{haskell-cwkOuhx6.js → haskell-kVOgzpVy.js} +0 -0
- /package/dist/{haxe-DWEo4q10.js → haxe-Bo21F6gc.js} +0 -0
- /package/dist/{http-B8jdG64J.js → http-_DVAYWoR.js} +0 -0
- /package/dist/{idl-WWQwDcRV.js → idl-B865GSM-.js} +0 -0
- /package/dist/{init-DNBbYZd_.js → init-TaqZJsBY.js} +0 -0
- /package/dist/{invariant-wRzNXIsJ.js → invariant-hOqqBz8A.js} +0 -0
- /package/dist/{javascript-BeR74dxD.js → javascript-CSLuHpxZ.js} +0 -0
- /package/dist/{julia-UlvCUYGL.js → julia-BCOLeQif.js} +0 -0
- /package/dist/{livescript-GPmFcmYV.js → livescript-DqUzLZFs.js} +0 -0
- /package/dist/{lua-DYoT_0zM.js → lua-D0ciLwkO.js} +0 -0
- /package/dist/{math-CBNc2Ib0.js → math-CTnb-N1W.js} +0 -0
- /package/dist/{mathematica-DSFIQlbG.js → mathematica-DujD1RDf.js} +0 -0
- /package/dist/{mbox-ej8lFMdL.js → mbox-8OkSQMDn.js} +0 -0
- /package/dist/{mirc-CAdIdvHQ.js → mirc-D47x8yRQ.js} +0 -0
- /package/dist/{mllike-CjTB1lHF.js → mllike-Dcfw-g6D.js} +0 -0
- /package/dist/{modelica-BB68FYMa.js → modelica-BHtr9gKR.js} +0 -0
- /package/dist/{mscgen-BkbzgGGI.js → mscgen-uZedQc_A.js} +0 -0
- /package/dist/{mumps-Cu-28E9F.js → mumps-Bc9QS1-K.js} +0 -0
- /package/dist/{nginx-C1ofKPst.js → nginx-DasThI7R.js} +0 -0
- /package/dist/{ntriples-D9cQiZxZ.js → ntriples-Clpn9Mrg.js} +0 -0
- /package/dist/{objects-De59twF-.js → objects-UzwQd5gx.js} +0 -0
- /package/dist/{octave-BvtAnPX0.js → octave-DA2esRWi.js} +0 -0
- /package/dist/{oz-COaVHk2E.js → oz-D8i-brWx.js} +0 -0
- /package/dist/{pascal-BFpqVD2x.js → pascal-Dt1a0CeN.js} +0 -0
- /package/dist/{path-DwWbhZFI.js → path-7gr7eZmp.js} +0 -0
- /package/dist/{perl-DaiORxHP.js → perl-CXy9EfRp.js} +0 -0
- /package/dist/{pig-DFzRhmsF.js → pig-DnXnrjQg.js} +0 -0
- /package/dist/{powershell-BG2LQNKN.js → powershell-BYE6u-Qk.js} +0 -0
- /package/dist/{properties-CqJJR5QY.js → properties-DlhyusaK.js} +0 -0
- /package/dist/{protobuf-WwDYV1yY.js → protobuf-DoMSrsPi.js} +0 -0
- /package/dist/{puppet-QNY3w_uN.js → puppet-DGi4idFA.js} +0 -0
- /package/dist/{python-4QrQ3Ugi.js → python-CYhALYh0.js} +0 -0
- /package/dist/{q-DhwXuxE2.js → q-Cs_qWJkU.js} +0 -0
- /package/dist/{r-Df-nkR25.js → r-DWJSQl1c.js} +0 -0
- /package/dist/{range-BOiA8qqU.js → range-Bieq5MNc.js} +0 -0
- /package/dist/{rpm-Cokue07s.js → rpm-DIip1m0n.js} +0 -0
- /package/dist/{ruby-DrYcL3qF.js → ruby-NgZGoa7Q.js} +0 -0
- /package/dist/{sas-CoiPirA5.js → sas-DEKzCzM2.js} +0 -0
- /package/dist/{scheme-CwFLjzHv.js → scheme-CBrGar2n.js} +0 -0
- /package/dist/{semaphore-C8rmHdhj.js → semaphore-P832H4YT.js} +0 -0
- /package/dist/{shell-BFV-R24I.js → shell-D7XFPOM_.js} +0 -0
- /package/dist/{sieve-CxwXF5T9.js → sieve-BOxOVQ18.js} +0 -0
- /package/dist/{simple-mode-DTaJtKPt.js → simple-mode-D-FXBgPn.js} +0 -0
- /package/dist/{smalltalk-QivVOCtX.js → smalltalk-DYK-HkUK.js} +0 -0
- /package/dist/{solr-BLvysN-c.js → solr-RZ9uTl59.js} +0 -0
- /package/dist/{sparql-nKsFk8j7.js → sparql-CU1uk9Py.js} +0 -0
- /package/dist/{spreadsheet-BWc8C2FT.js → spreadsheet-BNNUNXA2.js} +0 -0
- /package/dist/{sql-CWfUjlV1.js → sql-B4x8IkwU.js} +0 -0
- /package/dist/{stex-DtMAhV4-.js → stex-DIvyJfNO.js} +0 -0
- /package/dist/{stylus-BLKQAycn.js → stylus-BokZhKWB.js} +0 -0
- /package/dist/{swift-CJoKqiKj.js → swift-TlA42tbT.js} +0 -0
- /package/dist/{tcl-YTeYFNUc.js → tcl-C-m7N_9k.js} +0 -0
- /package/dist/{textile-C6rKQqMQ.js → textile-BWOWG894.js} +0 -0
- /package/dist/{tiddlywiki-ZXwTHGNT.js → tiddlywiki-DI0mF2WJ.js} +0 -0
- /package/dist/{tiki-C628O_u4.js → tiki-2HU6XLLn.js} +0 -0
- /package/dist/{toml-DxlPGbRy.js → toml-GapOS-6U.js} +0 -0
- /package/dist/{treemap-DY3NBr79.js → treemap-CQJ0bIDy.js} +0 -0
- /package/dist/{troff-DFCfH7Ku.js → troff-ChPXSGgg.js} +0 -0
- /package/dist/{ttcn-DAW-ERVP.js → ttcn-CGf_ktUb.js} +0 -0
- /package/dist/{ttcn-cfg-CpJ8b7EN.js → ttcn-cfg-E0kw_vEm.js} +0 -0
- /package/dist/{turtle-BneV2f8L.js → turtle-DDIYttZr.js} +0 -0
- /package/dist/{vb-D973Vxxh.js → vb-DsGz8YA-.js} +0 -0
- /package/dist/{vbscript-Dckaq3YO.js → vbscript-BfQcpKZn.js} +0 -0
- /package/dist/{velocity-DKty-GUC.js → velocity-BMi53hPb.js} +0 -0
- /package/dist/{verilog-aNaK_biA.js → verilog-B_WDxmCB.js} +0 -0
- /package/dist/{vhdl-CQuehnQy.js → vhdl-C52-TT0z.js} +0 -0
- /package/dist/{webidl-Bhg8vaMr.js → webidl-Cnphjlul.js} +0 -0
- /package/dist/{xquery-D2q16GaM.js → xquery-X_kWyOft.js} +0 -0
- /package/dist/{yacas-DHGOHnNa.js → yacas-Dpp9zAZ5.js} +0 -0
- /package/dist/{z80-BPhTmO22.js → z80-BZLZAthF.js} +0 -0
|
@@ -6,7 +6,6 @@ import { storePrompt } from "@marimo-team/codemirror-ai";
|
|
|
6
6
|
import type { ReactCodeMirrorRef } from "@uiw/react-codemirror";
|
|
7
7
|
import {
|
|
8
8
|
type ChatAddToolApproveResponseFunction,
|
|
9
|
-
DefaultChatTransport,
|
|
10
9
|
type FileUIPart,
|
|
11
10
|
safeValidateUIMessages,
|
|
12
11
|
type TextUIPart,
|
|
@@ -37,13 +36,15 @@ import {
|
|
|
37
36
|
SelectTrigger,
|
|
38
37
|
} from "@/components/ui/select";
|
|
39
38
|
import { replaceMessagesInChat } from "@/core/ai/chat-utils";
|
|
40
|
-
import {
|
|
39
|
+
import { useAIConfigActions } from "@/core/ai/config";
|
|
40
|
+
import { AI_SDK_UI_THROTTLE_MS } from "@/core/ai/constants";
|
|
41
41
|
import { AiModelId } from "@/core/ai/ids/ids";
|
|
42
42
|
import { useStagedAICellsActions } from "@/core/ai/staged-cells";
|
|
43
43
|
import {
|
|
44
44
|
activeChatAtom,
|
|
45
45
|
type Chat,
|
|
46
46
|
type ChatId,
|
|
47
|
+
chatOptionsAtom,
|
|
47
48
|
chatStateAtom,
|
|
48
49
|
pendingAiPromptAtom,
|
|
49
50
|
} from "@/core/ai/state";
|
|
@@ -71,6 +72,7 @@ import {
|
|
|
71
72
|
isContextAttachment,
|
|
72
73
|
resolveChatContext,
|
|
73
74
|
} from "../editor/ai/completion-utils";
|
|
75
|
+
import { StreamingChunkTransport } from "../editor/ai/transport/chat-transport";
|
|
74
76
|
import { PanelEmptyState } from "../editor/chrome/panels/empty-state";
|
|
75
77
|
import { CopyClipboardIcon } from "../icons/copy-icon";
|
|
76
78
|
import { useImperativeModal } from "../modal/ImperativeModal";
|
|
@@ -83,8 +85,14 @@ import {
|
|
|
83
85
|
FileAttachmentPill,
|
|
84
86
|
SendButton,
|
|
85
87
|
} from "./chat-components";
|
|
88
|
+
import {
|
|
89
|
+
describeChatAbortReason,
|
|
90
|
+
getAbortReasonFromChunk,
|
|
91
|
+
resolveChatAbortReason,
|
|
92
|
+
} from "./chat-abort";
|
|
86
93
|
import { renderUIMessage } from "./chat-display";
|
|
87
94
|
import { ChatHistoryPopover } from "./chat-history-popover";
|
|
95
|
+
import { CapabilitiesPopover } from "./capabilities-popover";
|
|
88
96
|
import {
|
|
89
97
|
type ChatMessagePart,
|
|
90
98
|
convertToFileUIPart,
|
|
@@ -102,6 +110,7 @@ import {
|
|
|
102
110
|
import { getCodes } from "@/core/codemirror/copilot/getCodes";
|
|
103
111
|
import { focusInputAndMoveToEnd } from "@/core/codemirror/utils";
|
|
104
112
|
import ScrollToBottomButton from "./acp/scroll-to-bottom-button";
|
|
113
|
+
import { useChatControllerId } from "./use-chat-controller-id";
|
|
105
114
|
|
|
106
115
|
// Default mode for the AI
|
|
107
116
|
const DEFAULT_MODE = "manual";
|
|
@@ -292,7 +301,7 @@ const ChatInputFooter: React.FC<ChatInputFooterProps> = memo(
|
|
|
292
301
|
const currentModel = ai?.models?.chat_model || DEFAULT_AI_MODEL;
|
|
293
302
|
const currentProvider = AiModelId.parse(currentModel).providerId;
|
|
294
303
|
|
|
295
|
-
const { saveModeChange } =
|
|
304
|
+
const { saveModeChange } = useAIConfigActions();
|
|
296
305
|
|
|
297
306
|
const modeOptions: {
|
|
298
307
|
value: CopilotMode;
|
|
@@ -320,8 +329,9 @@ const ChatInputFooter: React.FC<ChatInputFooterProps> = memo(
|
|
|
320
329
|
},
|
|
321
330
|
{
|
|
322
331
|
value: "code_mode",
|
|
323
|
-
label: "Code Mode (
|
|
324
|
-
subtitle:
|
|
332
|
+
label: "Code Mode (beta)",
|
|
333
|
+
subtitle:
|
|
334
|
+
"AI with access to the notebook's kernel. Potentially destructive.",
|
|
325
335
|
Icon: CodeIcon,
|
|
326
336
|
},
|
|
327
337
|
];
|
|
@@ -335,12 +345,12 @@ const ChatInputFooter: React.FC<ChatInputFooterProps> = memo(
|
|
|
335
345
|
|
|
336
346
|
return (
|
|
337
347
|
<TooltipProvider>
|
|
338
|
-
<div className="px-3 py-2 border-t border-border/20 flex flex-
|
|
339
|
-
<div className="flex items-center gap-
|
|
348
|
+
<div className="px-3 py-2 border-t border-border/20 flex flex-wrap items-center gap-1">
|
|
349
|
+
<div className="flex flex-wrap items-center gap-1">
|
|
340
350
|
<Select value={currentMode} onValueChange={saveModeChange}>
|
|
341
|
-
<SelectTrigger className="h-6 text-xs border-border shadow-none! ring-0! bg-muted hover:bg-muted/30 py-0 px-2 gap-1.5">
|
|
351
|
+
<SelectTrigger className="h-6 text-xs border-border shadow-none! ring-0! bg-muted hover:bg-muted/30 py-0 px-2 gap-1.5 shrink-0">
|
|
342
352
|
{CurrentModeIcon && <CurrentModeIcon className="h-3 w-3" />}
|
|
343
|
-
<span>{CurrentModeLabel}</span>
|
|
353
|
+
<span className="text-nowrap">{CurrentModeLabel}</span>
|
|
344
354
|
</SelectTrigger>
|
|
345
355
|
<SelectContent>
|
|
346
356
|
<SelectGroup>
|
|
@@ -371,13 +381,14 @@ const ChatInputFooter: React.FC<ChatInputFooterProps> = memo(
|
|
|
371
381
|
</Select>
|
|
372
382
|
<AIModelDropdown
|
|
373
383
|
placeholder="Model"
|
|
374
|
-
triggerClassName="h-6 text-xs shadow-none! ring-0! bg-muted hover:bg-muted/30 rounded-sm"
|
|
384
|
+
triggerClassName="h-6 text-xs shadow-none! ring-0! bg-muted hover:bg-muted/30 rounded-sm max-w-[200px]"
|
|
375
385
|
iconSize="small"
|
|
376
386
|
showAddCustomModelDocs={true}
|
|
377
387
|
forRole="chat"
|
|
378
388
|
/>
|
|
389
|
+
<CapabilitiesPopover />
|
|
379
390
|
</div>
|
|
380
|
-
<div className="flex flex-row">
|
|
391
|
+
<div className="flex flex-row ml-auto">
|
|
381
392
|
<AddContextButton
|
|
382
393
|
handleAddContext={onAddContext}
|
|
383
394
|
isLoading={isLoading}
|
|
@@ -439,8 +450,8 @@ const ChatInput: React.FC<ChatInputProps> = memo(
|
|
|
439
450
|
});
|
|
440
451
|
|
|
441
452
|
return (
|
|
442
|
-
<div className="relative shrink-0
|
|
443
|
-
<div className={cn("px-2 py-
|
|
453
|
+
<div className="relative shrink-0 flex flex-col border-t">
|
|
454
|
+
<div className={cn("px-2 py-1.5", inputClassName)}>
|
|
444
455
|
<PromptInput
|
|
445
456
|
className="max-h-[400px]"
|
|
446
457
|
inputRef={inputRef}
|
|
@@ -533,11 +544,19 @@ const ChatPanelBody = () => {
|
|
|
533
544
|
const newMessageInputRef = useRef<ReactCodeMirrorRef>(null);
|
|
534
545
|
const scrollContainerRef = useRef<HTMLDivElement>(null);
|
|
535
546
|
const fileInputRef = useRef<HTMLInputElement>(null);
|
|
547
|
+
const lastAbortReasonRef = useRef<string | null>(null);
|
|
548
|
+
const [abortNotice, setAbortNotice] = useState<string | null>(null);
|
|
549
|
+
const clearAbortState = useEvent(() => {
|
|
550
|
+
lastAbortReasonRef.current = null;
|
|
551
|
+
setAbortNotice(null);
|
|
552
|
+
});
|
|
536
553
|
const runtimeManager = useRuntimeManager();
|
|
537
554
|
const { invokeAiTool, sendRun } = useRequestClient();
|
|
538
555
|
const { openModal, closeModal } = useImperativeModal();
|
|
539
556
|
|
|
540
557
|
const activeChatId = activeChat?.id;
|
|
558
|
+
const { chatControllerId, renewDraftChatId } =
|
|
559
|
+
useChatControllerId(activeChatId);
|
|
541
560
|
const store = useStore();
|
|
542
561
|
|
|
543
562
|
const { addStagedCell } = useStagedAICellsActions();
|
|
@@ -561,46 +580,56 @@ const ChatPanelBody = () => {
|
|
|
561
580
|
addToolApprovalResponse,
|
|
562
581
|
id: chatId,
|
|
563
582
|
} = useChat({
|
|
564
|
-
id:
|
|
583
|
+
id: chatControllerId,
|
|
584
|
+
throttle: AI_SDK_UI_THROTTLE_MS,
|
|
565
585
|
sendAutomaticallyWhen: ({ messages }) => hasPendingToolCalls(messages),
|
|
566
586
|
messages: activeChat?.messages || [], // initial messages
|
|
567
|
-
transport: new
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
587
|
+
transport: new StreamingChunkTransport(
|
|
588
|
+
{
|
|
589
|
+
api: runtimeManager.getAiURL("chat").toString(),
|
|
590
|
+
headers: () => runtimeManager.headers(),
|
|
591
|
+
prepareSendMessagesRequest: async (options) => {
|
|
592
|
+
// Canary: flag outgoing messages that don't match the AI SDK's own
|
|
593
|
+
// schema. The server-side sanitizer in `_pydantic_ai_utils.py` corrects these before validation;
|
|
594
|
+
// this log surfaces drift early without affecting the request.
|
|
595
|
+
const validation = await safeValidateUIMessages({
|
|
596
|
+
messages: options.messages,
|
|
597
|
+
});
|
|
598
|
+
if (!validation.success) {
|
|
599
|
+
Logger.debug(
|
|
600
|
+
"Outgoing chat messages failed AI SDK schema validation",
|
|
601
|
+
validation.error,
|
|
602
|
+
);
|
|
603
|
+
}
|
|
583
604
|
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
605
|
+
const completionBody = {
|
|
606
|
+
uiMessages: options.messages,
|
|
607
|
+
includeOtherCode: getCodes(""),
|
|
608
|
+
options: store.get(chatOptionsAtom),
|
|
609
|
+
};
|
|
610
|
+
|
|
611
|
+
// Call this here to ensure the value is not stale
|
|
612
|
+
const chatMode = store.get(aiAtom)?.mode || DEFAULT_MODE;
|
|
613
|
+
const tools = FRONTEND_TOOL_REGISTRY.getToolSchemas(chatMode);
|
|
614
|
+
|
|
615
|
+
return {
|
|
616
|
+
api: runtimeManager.getAiURL("chat").toString(),
|
|
617
|
+
body: {
|
|
618
|
+
tools,
|
|
619
|
+
...options,
|
|
620
|
+
...completionBody,
|
|
621
|
+
},
|
|
622
|
+
};
|
|
623
|
+
},
|
|
624
|
+
},
|
|
625
|
+
(chunk) => {
|
|
626
|
+
const abortReason = getAbortReasonFromChunk(chunk);
|
|
627
|
+
if (abortReason !== undefined) {
|
|
628
|
+
lastAbortReasonRef.current = abortReason;
|
|
629
|
+
}
|
|
601
630
|
},
|
|
602
|
-
|
|
603
|
-
onFinish: ({ messages, isError, isAbort }) => {
|
|
631
|
+
),
|
|
632
|
+
onFinish: ({ messages, isError, isAbort, finishReason }) => {
|
|
604
633
|
setChatState((prev) => {
|
|
605
634
|
return replaceMessagesInChat({
|
|
606
635
|
chatState: prev,
|
|
@@ -608,6 +637,22 @@ const ChatPanelBody = () => {
|
|
|
608
637
|
messages: messages,
|
|
609
638
|
});
|
|
610
639
|
});
|
|
640
|
+
|
|
641
|
+
if (isAbort) {
|
|
642
|
+
const reason = resolveChatAbortReason({
|
|
643
|
+
isAbort: true,
|
|
644
|
+
streamReason: lastAbortReasonRef.current,
|
|
645
|
+
});
|
|
646
|
+
clearAbortState();
|
|
647
|
+
if (reason != null) {
|
|
648
|
+
const description = describeChatAbortReason(reason);
|
|
649
|
+
Logger.debug("Chat stream aborted", { reason, finishReason });
|
|
650
|
+
setAbortNotice(description);
|
|
651
|
+
}
|
|
652
|
+
} else {
|
|
653
|
+
clearAbortState();
|
|
654
|
+
}
|
|
655
|
+
|
|
611
656
|
tryFlushQueuedMessages(messages, { isError, isAbort });
|
|
612
657
|
},
|
|
613
658
|
onToolCall: async ({ toolCall }) => {
|
|
@@ -628,6 +673,7 @@ const ChatPanelBody = () => {
|
|
|
628
673
|
});
|
|
629
674
|
|
|
630
675
|
const sendUserMessage = useEvent((parts: ChatMessagePart[]) => {
|
|
676
|
+
clearAbortState();
|
|
631
677
|
sendMessage({ role: "user", parts });
|
|
632
678
|
});
|
|
633
679
|
|
|
@@ -701,7 +747,8 @@ const ChatPanelBody = () => {
|
|
|
701
747
|
useEffect(() => {
|
|
702
748
|
setIsScrolledToBottom(true);
|
|
703
749
|
clearQueuedMessages();
|
|
704
|
-
|
|
750
|
+
clearAbortState();
|
|
751
|
+
}, [activeChatId, clearQueuedMessages, clearAbortState]);
|
|
705
752
|
|
|
706
753
|
useEffect(() => {
|
|
707
754
|
if (!isScrolledToBottom) {
|
|
@@ -772,6 +819,7 @@ const ChatPanelBody = () => {
|
|
|
772
819
|
);
|
|
773
820
|
|
|
774
821
|
const handleNewChat = useEvent(() => {
|
|
822
|
+
renewDraftChatId();
|
|
775
823
|
setActiveChat(null);
|
|
776
824
|
setInput("");
|
|
777
825
|
setNewThreadInput("");
|
|
@@ -833,6 +881,7 @@ const ChatPanelBody = () => {
|
|
|
833
881
|
);
|
|
834
882
|
|
|
835
883
|
const handleReload = () => {
|
|
884
|
+
clearAbortState();
|
|
836
885
|
regenerate();
|
|
837
886
|
};
|
|
838
887
|
|
|
@@ -987,6 +1036,14 @@ const ChatPanelBody = () => {
|
|
|
987
1036
|
</Button>
|
|
988
1037
|
</div>
|
|
989
1038
|
)}
|
|
1039
|
+
|
|
1040
|
+
{abortNotice && !isLoading && !error && (
|
|
1041
|
+
<div className="flex justify-center py-2">
|
|
1042
|
+
<span className="text-xs text-muted-foreground">
|
|
1043
|
+
{abortNotice}
|
|
1044
|
+
</span>
|
|
1045
|
+
</div>
|
|
1046
|
+
)}
|
|
990
1047
|
</div>
|
|
991
1048
|
|
|
992
1049
|
<ScrollToBottomButton
|
|
@@ -291,7 +291,7 @@ export function shouldFlushQueue(opts: {
|
|
|
291
291
|
export function useMessageQueue() {
|
|
292
292
|
const [messages, setMessages] = useState<QueuedUserMessage[]>([]);
|
|
293
293
|
// Mirror the queue in a ref so `flushNext` reads the latest value even when
|
|
294
|
-
// invoked from a callback (e.g. `onFinish`)
|
|
294
|
+
// invoked from a callback (e.g. `onFinish`) in the same tick as `enqueue`.
|
|
295
295
|
const messagesRef = useRef<QueuedUserMessage[]>([]);
|
|
296
296
|
const hasQueuedRef = useRef(false);
|
|
297
297
|
messagesRef.current = messages;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
+
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import useEvent from "react-use-event-hook";
|
|
5
|
+
import type { ChatId } from "@/core/ai/state";
|
|
6
|
+
import { generateUUID } from "@/utils/uuid";
|
|
7
|
+
|
|
8
|
+
function generateChatId(): ChatId {
|
|
9
|
+
return generateUUID() as ChatId;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Keep an ID for an unsaved chat so `useChat` can distinguish it from the
|
|
14
|
+
* previously active chat. Empty chats are not added to chat history.
|
|
15
|
+
*/
|
|
16
|
+
export function useChatControllerId(activeChatId?: ChatId) {
|
|
17
|
+
const [draftChatId, setDraftChatId] = useState(generateChatId);
|
|
18
|
+
const renewDraftChatId = useEvent(() => setDraftChatId(generateChatId()));
|
|
19
|
+
|
|
20
|
+
return {
|
|
21
|
+
chatControllerId: activeChatId ?? draftChatId,
|
|
22
|
+
renewDraftChatId,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
+
|
|
3
|
+
import { describe, expect, it } from "vitest";
|
|
4
|
+
import { ChartSchema } from "../schemas";
|
|
5
|
+
|
|
6
|
+
describe("ChartSchema", () => {
|
|
7
|
+
it("keeps a known axis column type", () => {
|
|
8
|
+
const result = ChartSchema.parse({
|
|
9
|
+
general: { xColumn: { field: "count", type: "integer" } },
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
expect(result.general?.xColumn?.type).toBe("integer");
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
it("normalizes an unrecognized axis column type", () => {
|
|
16
|
+
const result = ChartSchema.parse({
|
|
17
|
+
general: { xColumn: { field: "geom", type: "geometry" } },
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
expect(result.general?.xColumn?.type).toBe("unknown");
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it("normalizes an unrecognized tooltip field type", () => {
|
|
24
|
+
const result = ChartSchema.parse({
|
|
25
|
+
tooltips: {
|
|
26
|
+
auto: false,
|
|
27
|
+
fields: [{ field: "geom", type: "geometry" }],
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
expect(result.tooltips?.fields).toEqual([
|
|
32
|
+
{ field: "geom", type: "unknown" },
|
|
33
|
+
]);
|
|
34
|
+
});
|
|
35
|
+
});
|
|
@@ -28,7 +28,10 @@ export const BinSchema = z.object({
|
|
|
28
28
|
|
|
29
29
|
const BaseColumnSchema = z.object({
|
|
30
30
|
field: z.string().optional(),
|
|
31
|
-
type: z
|
|
31
|
+
type: z
|
|
32
|
+
.enum([...DATA_TYPES, EMPTY_VALUE])
|
|
33
|
+
.catch("unknown")
|
|
34
|
+
.optional(),
|
|
32
35
|
selectedDataType: z.enum([...SELECTABLE_DATA_TYPES, EMPTY_VALUE]).optional(),
|
|
33
36
|
sort: z.enum(SORT_TYPES).default("ascending").optional(),
|
|
34
37
|
timeUnit: z.enum(TIME_UNITS).optional(),
|
|
@@ -102,7 +105,7 @@ export const ChartSchema = z.object({
|
|
|
102
105
|
fields: z.array(
|
|
103
106
|
z.object({
|
|
104
107
|
field: z.string(),
|
|
105
|
-
type: z.enum(DATA_TYPES),
|
|
108
|
+
type: z.enum(DATA_TYPES).catch("unknown"),
|
|
106
109
|
}),
|
|
107
110
|
),
|
|
108
111
|
})
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
+
|
|
3
|
+
import { describe, expect, it } from "vitest";
|
|
4
|
+
import type { DataType } from "@/core/kernel/messages";
|
|
5
|
+
import { DATA_TYPE_ICON, resolveDataType } from "../icons";
|
|
6
|
+
|
|
7
|
+
describe("resolveDataType", () => {
|
|
8
|
+
it("passes through every mapped data type", () => {
|
|
9
|
+
for (const dataType of Object.keys(DATA_TYPE_ICON)) {
|
|
10
|
+
expect(resolveDataType(dataType as DataType)).toBe(dataType);
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
it("resolves unmapped data types to unknown", () => {
|
|
15
|
+
expect(resolveDataType("geometry" as DataType)).toBe("unknown");
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
it("resolves data types shadowing Object.prototype keys to unknown", () => {
|
|
19
|
+
expect(resolveDataType("toString" as DataType)).toBe("unknown");
|
|
20
|
+
});
|
|
21
|
+
});
|
|
@@ -30,6 +30,16 @@ export const DATA_TYPE_ICON: Record<DataType | SelectableDataType, LucideIcon> =
|
|
|
30
30
|
unknown: CurlyBracesIcon,
|
|
31
31
|
};
|
|
32
32
|
|
|
33
|
+
/**
|
|
34
|
+
* A newer backend can send a data type this frontend does not know. Resolve
|
|
35
|
+
* those to `unknown` before indexing icon or color maps.
|
|
36
|
+
*/
|
|
37
|
+
export function resolveDataType(
|
|
38
|
+
dataType: DataType | SelectableDataType,
|
|
39
|
+
): DataType | SelectableDataType {
|
|
40
|
+
return Object.hasOwn(DATA_TYPE_ICON, dataType) ? dataType : "unknown";
|
|
41
|
+
}
|
|
42
|
+
|
|
33
43
|
export function getDataTypeColor(
|
|
34
44
|
dataType: DataType | SelectableDataType,
|
|
35
45
|
): string {
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
+
|
|
3
|
+
import { render } from "@testing-library/react";
|
|
4
|
+
import { describe, expect, it, vi } from "vitest";
|
|
5
|
+
import type { DataType } from "@/core/kernel/messages";
|
|
6
|
+
import { Logger } from "@/utils/Logger";
|
|
7
|
+
import { ColumnName } from "../components";
|
|
8
|
+
|
|
9
|
+
describe("ColumnName", () => {
|
|
10
|
+
it("renders the unknown icon for unrecognized data types", () => {
|
|
11
|
+
const warn = vi.spyOn(Logger, "warn").mockImplementation(() => {});
|
|
12
|
+
|
|
13
|
+
try {
|
|
14
|
+
const unrecognized = render(
|
|
15
|
+
<ColumnName columnName="geom" dataType={"geometry" as DataType} />,
|
|
16
|
+
);
|
|
17
|
+
const unknown = render(
|
|
18
|
+
<ColumnName columnName="geom" dataType="unknown" />,
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
expect(unrecognized.container.innerHTML).toEqual(
|
|
22
|
+
unknown.container.innerHTML,
|
|
23
|
+
);
|
|
24
|
+
expect(warn).not.toHaveBeenCalled();
|
|
25
|
+
} finally {
|
|
26
|
+
warn.mockRestore();
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
});
|
|
@@ -5,7 +5,11 @@ import type { CSSProperties } from "react";
|
|
|
5
5
|
import { TreeChevron } from "@/components/editor/file-tree/tree-actions";
|
|
6
6
|
import type { DataType } from "@/core/kernel/messages";
|
|
7
7
|
import { cn } from "@/utils/cn";
|
|
8
|
-
import {
|
|
8
|
+
import {
|
|
9
|
+
DATA_TYPE_ICON,
|
|
10
|
+
getDataTypeColor,
|
|
11
|
+
resolveDataType,
|
|
12
|
+
} from "../datasets/icons";
|
|
9
13
|
|
|
10
14
|
export const RotatingChevron: React.FC<{ isExpanded: boolean }> = ({
|
|
11
15
|
isExpanded,
|
|
@@ -101,8 +105,9 @@ export const ColumnName = ({
|
|
|
101
105
|
columnName: React.ReactNode;
|
|
102
106
|
dataType: DataType;
|
|
103
107
|
}) => {
|
|
104
|
-
const
|
|
105
|
-
const
|
|
108
|
+
const resolvedDataType = resolveDataType(dataType);
|
|
109
|
+
const Icon = DATA_TYPE_ICON[resolvedDataType];
|
|
110
|
+
const color = getDataTypeColor(resolvedDataType);
|
|
106
111
|
|
|
107
112
|
return (
|
|
108
113
|
<div className="flex flex-row items-center gap-1.5">
|
|
@@ -259,6 +259,7 @@ describe("ExportDialog", () => {
|
|
|
259
259
|
format: "pdf",
|
|
260
260
|
dependenciesAvailable: false,
|
|
261
261
|
missingPackages: ["nbconvert[webpdf]"],
|
|
262
|
+
missingSetup: [],
|
|
262
263
|
},
|
|
263
264
|
],
|
|
264
265
|
}),
|
|
@@ -275,6 +276,40 @@ describe("ExportDialog", () => {
|
|
|
275
276
|
expect(screen.getByTestId("export-format-pdf")).toBeVisible();
|
|
276
277
|
});
|
|
277
278
|
|
|
279
|
+
it("explains missing Playwright Chromium setup", async () => {
|
|
280
|
+
store.set(
|
|
281
|
+
requestClientAtom,
|
|
282
|
+
MockRequestClient.create({
|
|
283
|
+
getExportAvailability: vi.fn().mockResolvedValue({
|
|
284
|
+
source: "server",
|
|
285
|
+
formats: [
|
|
286
|
+
{
|
|
287
|
+
format: "pdf",
|
|
288
|
+
dependenciesAvailable: false,
|
|
289
|
+
missingPackages: [],
|
|
290
|
+
missingSetup: [
|
|
291
|
+
{
|
|
292
|
+
name: "playwright-chromium",
|
|
293
|
+
command: "uv run playwright install chromium",
|
|
294
|
+
},
|
|
295
|
+
],
|
|
296
|
+
},
|
|
297
|
+
],
|
|
298
|
+
}),
|
|
299
|
+
}),
|
|
300
|
+
);
|
|
301
|
+
|
|
302
|
+
renderDialog("pdf");
|
|
303
|
+
|
|
304
|
+
expect(
|
|
305
|
+
await screen.findByText("PDF export requires Playwright Chromium."),
|
|
306
|
+
).toBeVisible();
|
|
307
|
+
expect(
|
|
308
|
+
screen.getByText("uv run playwright install chromium"),
|
|
309
|
+
).toBeVisible();
|
|
310
|
+
expect(screen.getByTestId("export-submit")).toBeDisabled();
|
|
311
|
+
});
|
|
312
|
+
|
|
278
313
|
it("announces requirement checks as status updates", () => {
|
|
279
314
|
store.set(
|
|
280
315
|
requestClientAtom,
|
|
@@ -19,11 +19,13 @@ const AVAILABLE: ExportAvailabilityResponse = {
|
|
|
19
19
|
format: "ipynb",
|
|
20
20
|
dependenciesAvailable: true,
|
|
21
21
|
missingPackages: [],
|
|
22
|
+
missingSetup: [],
|
|
22
23
|
},
|
|
23
24
|
{
|
|
24
25
|
format: "pdf",
|
|
25
26
|
dependenciesAvailable: true,
|
|
26
27
|
missingPackages: [],
|
|
28
|
+
missingSetup: [],
|
|
27
29
|
},
|
|
28
30
|
],
|
|
29
31
|
};
|
|
@@ -188,6 +190,7 @@ describe("getExportFormatStatus", () => {
|
|
|
188
190
|
format: "pdf",
|
|
189
191
|
dependenciesAvailable: false,
|
|
190
192
|
missingPackages: ["nbconvert[webpdf]"],
|
|
193
|
+
missingSetup: [],
|
|
191
194
|
},
|
|
192
195
|
],
|
|
193
196
|
},
|
|
@@ -202,6 +205,64 @@ describe("getExportFormatStatus", () => {
|
|
|
202
205
|
});
|
|
203
206
|
});
|
|
204
207
|
|
|
208
|
+
it("reports missing server setup", () => {
|
|
209
|
+
expect(
|
|
210
|
+
status("pdf", {
|
|
211
|
+
availability: {
|
|
212
|
+
status: "success",
|
|
213
|
+
data: {
|
|
214
|
+
source: "server",
|
|
215
|
+
formats: [
|
|
216
|
+
{
|
|
217
|
+
format: "pdf",
|
|
218
|
+
dependenciesAvailable: false,
|
|
219
|
+
missingPackages: [],
|
|
220
|
+
missingSetup: [
|
|
221
|
+
{
|
|
222
|
+
name: "playwright-chromium",
|
|
223
|
+
command: "uv run playwright install chromium",
|
|
224
|
+
},
|
|
225
|
+
],
|
|
226
|
+
},
|
|
227
|
+
],
|
|
228
|
+
},
|
|
229
|
+
},
|
|
230
|
+
}),
|
|
231
|
+
).toEqual({
|
|
232
|
+
available: false,
|
|
233
|
+
reason: {
|
|
234
|
+
type: "missing-setup",
|
|
235
|
+
requirements: [
|
|
236
|
+
{
|
|
237
|
+
name: "playwright-chromium",
|
|
238
|
+
command: "uv run playwright install chromium",
|
|
239
|
+
},
|
|
240
|
+
],
|
|
241
|
+
},
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
|
|
245
|
+
it("fails open when an unavailable format has no requirements", () => {
|
|
246
|
+
expect(
|
|
247
|
+
status("pdf", {
|
|
248
|
+
availability: {
|
|
249
|
+
status: "success",
|
|
250
|
+
data: {
|
|
251
|
+
source: "server",
|
|
252
|
+
formats: [
|
|
253
|
+
{
|
|
254
|
+
format: "pdf",
|
|
255
|
+
dependenciesAvailable: false,
|
|
256
|
+
missingPackages: [],
|
|
257
|
+
missingSetup: [],
|
|
258
|
+
},
|
|
259
|
+
],
|
|
260
|
+
},
|
|
261
|
+
},
|
|
262
|
+
}),
|
|
263
|
+
).toEqual({ available: true, availabilityCheckFailed: true });
|
|
264
|
+
});
|
|
265
|
+
|
|
205
266
|
it.each([
|
|
206
267
|
["html", true, undefined],
|
|
207
268
|
["markdown", true, undefined],
|
|
@@ -1,18 +1,13 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
2
|
|
|
3
|
+
import {
|
|
4
|
+
MARKDOWN_EXTENSIONS,
|
|
5
|
+
MARKDOWN_SUFFIXES,
|
|
6
|
+
} from "@/core/network/markdown-export";
|
|
3
7
|
import { Filenames } from "@/utils/filenames";
|
|
4
8
|
import { shellQuote } from "@/utils/shell";
|
|
5
9
|
import type { ExportFormat, ExportOptions, MarkdownFlavor } from "./state";
|
|
6
10
|
|
|
7
|
-
const MARKDOWN_EXTENSIONS: Record<MarkdownFlavor, string> = {
|
|
8
|
-
pymdown: "md",
|
|
9
|
-
qmd: "qmd",
|
|
10
|
-
mystmd: "myst.md",
|
|
11
|
-
mdx: "mdx",
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
const MARKDOWN_SUFFIXES = [".myst.md", ".markdown", ".qmd", ".mdx", ".md"];
|
|
15
|
-
|
|
16
11
|
function inferMarkdownFlavor(filename: string): MarkdownFlavor {
|
|
17
12
|
if (filename.endsWith(".myst.md")) {
|
|
18
13
|
return "mystmd";
|