@marimo-team/islands 0.19.7-dev2 → 0.19.7-dev21
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-CDKkNEXK.js → ConnectedDataExplorerComponent-BW-EEUju.js} +12 -12
- package/dist/_baseIsEqual-CBSjxu-D.js +225 -0
- package/dist/{_baseProperty-zelfx9VI.js → _baseProperty-BVGrW_NZ.js} +2 -2
- package/dist/{_baseUniq-BUGws47x.js → _baseUniq-4lqa8rDi.js} +7 -8
- package/dist/{any-language-editor-vYraVrwE.js → any-language-editor-jlqKouk6.js} +16 -16
- package/dist/apl-BuwKwesW.js +4 -0
- package/dist/{arc-DXxE-tFl.js → arc-CEWBr4jc.js} +2 -2
- package/dist/architecture-U656AL7Q-COfwZju8.js +6 -0
- package/dist/{architectureDiagram-VXUJARFQ-DRLesROp.js → architectureDiagram-VXUJARFQ--NkyBn9Y.js} +18 -19
- package/dist/asciiarmor-zAEd_wtn.js +4 -0
- package/dist/asn1-DWEA66J4.js +4 -0
- package/dist/{blockDiagram-VD42YOAC-ByzG0Vzp.js → blockDiagram-VD42YOAC-DEZZaTW0.js} +13 -14
- package/dist/brainfuck-mIPR6Ong.js +4 -0
- package/dist/{c4Diagram-YG6GDRKO-Trp4lx6i.js → c4Diagram-YG6GDRKO-Bj7hwWCO.js} +5 -5
- package/dist/{channel-CPUfhCMU.js → channel-B_QrFrGg.js} +1 -1
- package/dist/{chunk-4BX2VUAB-D-P4ZvWX.js → chunk-4BX2VUAB-DZQibjKA.js} +1 -1
- package/dist/{chunk-55IACEB6-DRnX6IuG.js → chunk-55IACEB6-C3BASkh4.js} +1 -1
- package/dist/{chunk-OGVTOU66-RMy3tlM6.js → chunk-5FQGJX7Z-D5VFKHmt.js} +5206 -4212
- package/dist/{chunk-76Q3JFCE-DaBPIBvG.js → chunk-76Q3JFCE-jPuajZH_.js} +1 -1
- package/dist/{chunk-ABZYJK2D-BZDGfEE1.js → chunk-ABZYJK2D-SZPYmRzN.js} +2 -2
- package/dist/{chunk-ATLVNIR6-j8AgRnSs.js → chunk-ATLVNIR6-BI_WwH1o.js} +2 -2
- package/dist/{chunk-B4BG7PRW-DU1moE9R.js → chunk-B4BG7PRW-BlI9Gm1l.js} +7 -7
- package/dist/{chunk-CVBHYZKI-CDc7Jfcj.js → chunk-CVBHYZKI-Dhc_e3rA.js} +1 -1
- package/dist/{chunk-DI55MBZ5-BIFn9unR.js → chunk-DI55MBZ5-BXxemMn5.js} +6 -6
- package/dist/{chunk-EXTU4WIE-CaHHLmza.js → chunk-EXTU4WIE-CzWtDV99.js} +2 -2
- package/dist/{chunk-FMBD7UC4-D8xABqXe.js → chunk-FMBD7UC4-geNUIndh.js} +1 -1
- package/dist/{chunk-FPAJGGOC-B7vtXnL8.js → chunk-FPAJGGOC-CduL34ft.js} +7 -7
- package/dist/{chunk-FWNWRKHM-CoKqaHV4.js → chunk-FWNWRKHM-C-2TI4gt.js} +1 -1
- package/dist/{chunk-HN2XXSSU-DilnBn0B.js → chunk-HN2XXSSU-CqPwpolw.js} +1 -1
- package/dist/chunk-JA3XYJ7Z-DQ-2ARfa.js +1838 -0
- package/dist/{chunk-JZLCHNYA-DyKV2dUA.js → chunk-JZLCHNYA-CVfjf2vv.js} +6 -6
- package/dist/{chunk-LBM3YZW2-CuRptnLo.js → chunk-LBM3YZW2-DWgQiioW.js} +1 -1
- package/dist/{chunk-LHMN2FUI-Z6kNjtl5.js → chunk-LHMN2FUI-Dj_AHSvI.js} +1 -1
- package/dist/{chunk-MI3HLSF2-uTxL-0zC.js → chunk-MI3HLSF2-DOJkNER1.js} +1 -1
- package/dist/{chunk-N4CR4FBY-C_3rxQPk.js → chunk-N4CR4FBY-BCZvQ7Jq.js} +7 -7
- package/dist/{chunk-O7ZBX7Z2-N-4UT8hG.js → chunk-O7ZBX7Z2-CRZ8i1rP.js} +1 -1
- package/dist/{chunk-QN33PNHL-BcBASegy.js → chunk-QN33PNHL-DY_2Q2zl.js} +2 -2
- package/dist/{chunk-QXUST7PY-DMlfsgyq.js → chunk-QXUST7PY-BMCjAVR_.js} +10 -10
- package/dist/{chunk-QZHKN3VN-gCo1BI4L.js → chunk-QZHKN3VN-BF_oGUlG.js} +1 -1
- package/dist/{chunk-S3R3BYOJ-BhcrQySJ.js → chunk-S3R3BYOJ-Ddu0H4Qa.js} +5 -5
- package/dist/{chunk-S6J4BHB3-CbT4tqbg.js → chunk-S6J4BHB3-DNVMr0_v.js} +1 -1
- package/dist/{chunk-T53DSG4Q-DjWTd72f.js → chunk-T53DSG4Q-BFWkpOX5.js} +1 -1
- package/dist/{chunk-TZMSLE5B-udBrmj8R.js → chunk-TZMSLE5B-C2wVlbMl.js} +3 -3
- package/dist/classDiagram-2ON5EDUG-D-g7zbyO.js +30 -0
- package/dist/classDiagram-v2-WZHVMYZB-C7v5zNRD.js +30 -0
- package/dist/{clike-CLJYUAWw.js → clike-B1zispTy.js} +1 -1
- package/dist/clojure-DkhhNHNQ.js +4 -0
- package/dist/{clone-BImB0Zxt.js → clone-Cc_6PW77.js} +1 -1
- package/dist/cmake-1obPvqtc.js +4 -0
- package/dist/cobol-oWNTiXPE.js +4 -0
- package/dist/code-block-37QAKDTI-eUgXqGNG.js +107 -0
- package/dist/coffeescript-LtYUvf6r.js +4 -0
- package/dist/commonlisp-C_06qBYF.js +4 -0
- package/dist/{cose-bilkent-S5V4N54A-kv0JiSTh.js → cose-bilkent-S5V4N54A-CO4ORQHF.js} +2 -2
- package/dist/crystal-CDJkbx14.js +4 -0
- package/dist/css-Bi_Nk0uN.js +4 -0
- package/dist/cypher-TrG0NvZ0.js +4 -0
- package/dist/d-CFKOrZsi.js +4 -0
- package/dist/{dagre-6UL2VRFP-HiV8Yeor.js → dagre-6UL2VRFP-DKIPL74O.js} +14 -15
- package/dist/{dagre-Baw82WQV.js → dagre-D2F8UdM6.js} +10 -11
- package/dist/{data-grid-overlay-editor-BuHxKF-R.js → data-grid-overlay-editor-COyFwFmE.js} +2 -2
- package/dist/{diagram-PSM6KHXK-jDduKZjc.js → diagram-PSM6KHXK-CVTrAZaP.js} +21 -21
- package/dist/{diagram-QEK2KX5R-CiQYmuQX.js → diagram-QEK2KX5R-BqHBzu3x.js} +16 -16
- package/dist/{diagram-S2PKOQOG-3sE_WnZi.js → diagram-S2PKOQOG-CJD6owcg.js} +16 -16
- package/dist/diff-CfnSF48q.js +4 -0
- package/dist/{dist-CMZuWSBe.js → dist--Em7gfgX.js} +2 -2
- package/dist/{dist-CDxsfpyX.js → dist--JwRU9u5.js} +1 -1
- package/dist/dist-2OSzSqy2.js +5 -0
- package/dist/dist-B1H2TQGB.js +8 -0
- package/dist/{dist-Bs1IvD_X.js → dist-B7NoEgR4.js} +1 -1
- package/dist/dist-BNvasp6N.js +5 -0
- package/dist/{dist-DRA2Iv4Q.js → dist-BcXuIt-h.js} +1 -1
- package/dist/{dist-D7wDmIuC.js → dist-BhBtK2sL.js} +1 -1
- package/dist/{dist-HA2BVGuM.js → dist-BlRm4v0e.js} +4 -4
- package/dist/{dist-DNVajE3L.js → dist-C6p7UKkB.js} +1 -1
- package/dist/{dist-BZXKWoES.js → dist-CBA36Nuy.js} +1 -1
- package/dist/{dist-DY8txPM6.js → dist-CFi_P6cs.js} +1 -1
- package/dist/dist-CG4LWTPv.js +8 -0
- package/dist/{dist-BtPD-BeW.js → dist-CHWVQZ6Z.js} +2 -2
- package/dist/{dist-C011r2tf.js → dist-CITQGRtG.js} +3 -3
- package/dist/{dist-CZq4mfrw.js → dist-COp5dkis.js} +2 -2
- package/dist/dist-C_8-swED.js +5 -0
- package/dist/{dist-DW3LjXSw.js → dist-C_Kw_Kc0.js} +1 -1
- package/dist/{dist-_FVOHtWJ.js → dist-Co5PD8Fb.js} +1 -1
- package/dist/{dist-J6fsaVBE.js → dist-DA1J6LvO.js} +1 -1
- package/dist/dist-DIhtur5b.js +5 -0
- package/dist/{dist-DI1Bo5Nv.js → dist-DKnxaCRl.js} +1 -1
- package/dist/dist-DoQ7RS4e.js +5 -0
- package/dist/dist-DsMd-F9h.js +5 -0
- package/dist/dist-DurmUshd.js +8 -0
- package/dist/{dist-Bv-wYGwr.js → dist-PZgrh2z6.js} +2 -2
- package/dist/{dist-BUwAd6_d.js → dist-b7Sc3Tj8.js} +1 -1
- package/dist/{dist-DWMcVk1V.js → dist-r6N_0WG-.js} +3 -3
- package/dist/{dist--kinAuV0.js → dist-wudNDAiO.js} +1 -1
- package/dist/dist-zVskjQcA.js +8 -0
- package/dist/{dockerfile-kP2dp4Jc.js → dockerfile-BBT_Ira6.js} +1 -1
- package/dist/dtd-Ctw8_JkU.js +4 -0
- package/dist/dylan-f7rMBKDP.js +4 -0
- package/dist/ecl-C2h3oBMY.js +4 -0
- package/dist/eiffel-Ce81wv20.js +4 -0
- package/dist/elm-BVV8QQcc.js +4 -0
- package/dist/{erDiagram-Q2GNP2WA-DaNawciA.js → erDiagram-Q2GNP2WA-CqOceSf9.js} +14 -15
- package/dist/erlang-DjB35ZUh.js +4 -0
- package/dist/{error-banner-BhqH4mGj.js → error-banner-uJ4xh94e.js} +1 -1
- package/dist/{esm-DOBJQbuy.js → esm-DNwkt4aO.js} +104 -104
- package/dist/factor-CIcp3U2B.js +4 -0
- package/dist/{factor-Png_OsVt.js → factor-DdqWbSyy.js} +1 -1
- package/dist/{flatten-CP4G1KkO.js → flatten-eGRGXrC3.js} +1 -1
- package/dist/{flowDiagram-NV44I4VS-Cn7CoW5b.js → flowDiagram-NV44I4VS-K7-DUifo.js} +16 -17
- package/dist/forth-CVgjsHhD.js +4 -0
- package/dist/fortran-CcTXj0d_.js +4 -0
- package/dist/{ganttDiagram-JELNMOA3-D2MZdMJt.js → ganttDiagram-JELNMOA3-BwUFY9Nu.js} +9 -9
- package/dist/gas-JWpamkLf.js +4 -0
- package/dist/gherkin-BveSCSJV.js +4 -0
- package/dist/{gitGraph-F6HP7TQM-DAY7Pizs.js → gitGraph-F6HP7TQM-CDM3aU-T.js} +3 -3
- package/dist/{gitGraphDiagram-NY62KEGX-CQ9ts7ZP.js → gitGraphDiagram-NY62KEGX-CjGRtLb1.js} +16 -16
- package/dist/{glide-data-editor-CF27qeAl.js → glide-data-editor-QbwryjAp.js} +8 -8
- package/dist/{graphlib-C_0PYYJy.js → graphlib-7UgfJadv.js} +5 -6
- package/dist/groovy-Np3AZt00.js +4 -0
- package/dist/haskell-CVfmFALm.js +4 -0
- package/dist/haxe-C10xkMLg.js +5 -0
- package/dist/idl-CKBSGnKC.js +4 -0
- package/dist/{info-NVLQJR56-CSiFVstv.js → info-NVLQJR56-CoL1x1Fy.js} +3 -3
- package/dist/{infoDiagram-WHAUD3N6-CVDTiMub.js → infoDiagram-WHAUD3N6-DNhmDn-6.js} +14 -14
- package/dist/{isEmpty-D2-li_vO.js → isEmpty-DQXRKNtW.js} +1 -1
- package/dist/javascript-Cur-15Bn.js +4 -0
- package/dist/{journeyDiagram-XKPGCS4Q-Dqs3P2CH.js → journeyDiagram-XKPGCS4Q-BOdK47P8.js} +6 -6
- package/dist/julia-BZZH2Gnx.js +4 -0
- package/dist/{kanban-definition-3W4ZIXB7-BEhej3Aa.js → kanban-definition-3W4ZIXB7-A0JC9d0g.js} +11 -12
- package/dist/{katex-DXbA2lyH.js → katex-DJyOeQ91.js} +1 -1
- package/dist/{label-B8Ngsa38.js → label-o68OaAQk.js} +2 -2
- package/dist/{line-C1k1rG3Z.js → line-LK_5q2B9.js} +3 -3
- package/dist/{linear-Dhu2Qlw4.js → linear-vWf1Qj0e.js} +4 -4
- package/dist/livescript-D_rTTm_U.js +4 -0
- package/dist/{loader-DH7xXi-E.js → loader-WBQoIunJ.js} +1 -1
- package/dist/lua-Mf_Of7eV.js +4 -0
- package/dist/main.js +18723 -18034
- package/dist/mathematica-DCYjugDb.js +4 -0
- package/dist/mbox-KBWrT8JD.js +4 -0
- package/dist/mermaid-4DMBBIKO-o3xNphpD.js +6 -0
- package/dist/{mermaid.core-BzRPXY_i.js → mermaid-CDdsQEyr.js} +186 -108
- package/dist/{mermaid-parser.core-BFf_lpn1.js → mermaid-parser.core-D20zFbMa.js} +8 -8
- package/dist/{mhchem-D3PZqzP1.js → mhchem-BqdXeZVX.js} +1 -1
- package/dist/{min-CzysEoAP.js → min-Bg4bqmiD.js} +1 -1
- package/dist/{mindmap-definition-VGOIOE7T-DH1E7psw.js → mindmap-definition-VGOIOE7T-CS6nKN_L.js} +13 -14
- package/dist/mirc-JwEQJ8Fb.js +4 -0
- package/dist/mllike-C7TxLvh6.js +6 -0
- package/dist/modelica-uvNgvUyw.js +4 -0
- package/dist/mscgen-CGnokp5x.js +6 -0
- package/dist/mumps-Dl9QdOZz.js +4 -0
- package/dist/nsis-BbDhbgPN.js +4 -0
- package/dist/{nsis-BrAITej_.js → nsis-CunMjZ_n.js} +1 -1
- package/dist/ntriples-ChL1mlp7.js +4 -0
- package/dist/{number-overlay-editor-DHeLnLyR.js → number-overlay-editor-Bz_bDJQb.js} +1 -1
- package/dist/octave-B9ZGG6zv.js +4 -0
- package/dist/{once-C-NkXwWJ.js → once-BqS42WgZ.js} +1 -1
- package/dist/{ordinal-CUS6_Aqv.js → ordinal-IlASfRja.js} +1 -1
- package/dist/oz-XHEu31wr.js +4 -0
- package/dist/{packet-BFZMPI3H-DZ3M7UG8.js → packet-BFZMPI3H-C6aZmgV-.js} +3 -3
- package/dist/pascal-BxtYw-iH.js +4 -0
- package/dist/perl-Br5BgHPb.js +4 -0
- package/dist/{pie-7BOR55EZ-BZ7IZsm8.js → pie-7BOR55EZ-NB6xYwcB.js} +3 -3
- package/dist/{pieDiagram-ADFJNKIX-Dc8_ZPVD.js → pieDiagram-ADFJNKIX-DSa60Grk.js} +21 -21
- package/dist/pig-BByO2hBz.js +4 -0
- package/dist/powershell-Cd4Zaef3.js +4 -0
- package/dist/{precisionRound-B0z4y-te.js → precisionRound-CGLoV26P.js} +1 -1
- package/dist/properties-B-BOCIOl.js +4 -0
- package/dist/protobuf-CaLimlho.js +4 -0
- package/dist/{pug-CH-17az-.js → pug-Dr-sA_9V.js} +1 -1
- package/dist/pug-bonARSG6.js +4 -0
- package/dist/puppet-BSlT-3sc.js +4 -0
- package/dist/python-BIJhGYYP.js +4 -0
- package/dist/q-D9TX8A0B.js +4 -0
- package/dist/{quadrantDiagram-AYHSOK5B-Bi2zuCYl.js → quadrantDiagram-AYHSOK5B-CFnMbP2J.js} +4 -4
- package/dist/r-BXelX7Rl.js +4 -0
- package/dist/{radar-NHE76QYJ-BwZi8I4_.js → radar-NHE76QYJ-RKhErikV.js} +3 -3
- package/dist/{range-iDYhZkRw.js → range-LoQMRQIX.js} +2 -2
- package/dist/{react-plotly-D-b1AEMh.js → react-plotly-jVjTu07w.js} +1 -1
- package/dist/{react-vega-z40f-dXy.js → react-vega-CjiPWyw0.js} +18 -18
- package/dist/react-vega-DgHpnZ04.js +9 -0
- package/dist/{reduce-1D4AnEer.js → reduce-B9mZDxPo.js} +3 -3
- package/dist/{requirementDiagram-UZGBJVZJ-Dx4_kui2.js → requirementDiagram-UZGBJVZJ-ytLQrFTk.js} +13 -14
- package/dist/rpm-BxAh9B1A.js +5 -0
- package/dist/ruby-BCZLQyhc.js +4 -0
- package/dist/{sankeyDiagram-TZEHDZUN-CKYnHkMA.js → sankeyDiagram-TZEHDZUN-KQqXDoky.js} +4 -4
- package/dist/sas-Bo7lsyNX.js +4 -0
- package/dist/scheme-Brhptkt-.js +4 -0
- package/dist/{sequenceDiagram-WL72ISMW-C-p-8Qdz.js → sequenceDiagram-WL72ISMW-ByLI04T5.js} +7 -7
- package/dist/shell-fWWb8_qx.js +4 -0
- package/dist/sieve-Ba8_hMLn.js +4 -0
- package/dist/{slides-component-BHWhzwDN.js → slides-component-BGEYjTca.js} +1 -1
- package/dist/smalltalk-7sHxwMDT.js +4 -0
- package/dist/sparql-BBFrPJ7z.js +4 -0
- package/dist/{spec-KNxDhBEX.js → spec-CuHgWmcK.js} +3 -3
- package/dist/{src-CHUphWwL.js → src-szye8OCw.js} +1 -1
- package/dist/{stateDiagram-FKZM4ZOC-otiu7nL4.js → stateDiagram-FKZM4ZOC-Dfz8vBbP.js} +18 -19
- package/dist/stateDiagram-v2-4FDKWEC3-DRYoLdT5.js +29 -0
- package/dist/{step-BbmiiQdf.js → step-1PmBKr2y.js} +1 -1
- package/dist/stex-ChDHQs3R.js +4 -0
- package/dist/style.css +1 -1
- package/dist/stylus-CIB0KT46.js +4 -0
- package/dist/swift-CZinekXz.js +4 -0
- package/dist/tcl-DCHZJVq_.js +4 -0
- package/dist/textile-ThTMxgkN.js +4 -0
- package/dist/{time-m5v-VC8K.js → time-DC4qQGmA.js} +4 -4
- package/dist/{timeline-definition-IT6M3QCI-DhR16s4q.js → timeline-definition-IT6M3QCI-CO48XU1B.js} +3 -3
- package/dist/toml-DK17wlJ7.js +4 -0
- package/dist/{treemap-KMMF4GRG-Bp2TNEsG.js → treemap-KMMF4GRG-B37ugcLd.js} +3 -3
- package/dist/troff-CuUAOgMy.js +4 -0
- package/dist/ttcn-DS2tj6rW.js +4 -0
- package/dist/ttcn-cfg-CdZGarnc.js +4 -0
- package/dist/turtle-Bkz-FLZ7.js +4 -0
- package/dist/{types-B9fL65ao.js → types-BIvEidLq.js} +4 -4
- package/dist/{useAsyncData-kqbhbSuf.js → useAsyncData-DFBEii2l.js} +2 -2
- package/dist/{useDeepCompareMemoize-B2QEm3jo.js → useDeepCompareMemoize-HKwezUBx.js} +3 -3
- package/dist/{useIframeCapabilities-BsIPDupA.js → useIframeCapabilities-wWXCXV88.js} +1 -1
- package/dist/{useTheme-CVr6Gb_R.js → useTheme-D0zT6HZe.js} +2 -2
- package/dist/vb-ITdOmxvR.js +4 -0
- package/dist/vbscript-B7oeGyfL.js +4 -0
- package/dist/{vega-component-DAeU1_cV.js → vega-component-2gqZksJH.js} +11 -11
- package/dist/{vega-loader.browser-nTy1NZD3.js → vega-loader.browser-BJ1uJidF.js} +3 -3
- package/dist/velocity-D__EkuSd.js +4 -0
- package/dist/verilog-CPH50gr9.js +4 -0
- package/dist/vhdl-CQAwKCk_.js +4 -0
- package/dist/webidl-BnEptfVX.js +4 -0
- package/dist/xquery-D7eTv-CR.js +4 -0
- package/dist/{xychartDiagram-PRI3JC2R-DxKtZBfd.js → xychartDiagram-PRI3JC2R-CUIfjNVD.js} +12 -13
- package/dist/yacas-0x1rX89s.js +4 -0
- package/dist/z80-B25SJVDf.js +4 -0
- package/package.json +8 -7
- package/src/components/ai/__tests__/ai-utils.test.ts +20 -20
- package/src/components/ai/ai-model-dropdown.tsx +8 -10
- package/src/components/ai/ai-utils.ts +11 -9
- package/src/components/app-config/__tests__/get-dirty-values.test.ts +47 -1
- package/src/components/app-config/ai-config.tsx +20 -54
- package/src/components/app-config/state.ts +11 -1
- package/src/components/app-config/user-config-form.tsx +73 -3
- package/src/components/chat/chat-panel.tsx +5 -1
- package/src/components/editor/chrome/panels/dependency-graph-panel.tsx +46 -10
- package/src/components/markdown/markdown-renderer.tsx +6 -1
- package/src/core/ai/context/providers/cell-output.ts +1 -1
- package/src/core/export/__tests__/hooks.test.ts +7 -1
- package/src/core/export/hooks.ts +1 -1
- package/src/plugins/impl/plotly/PlotlyPlugin.tsx +11 -66
- package/src/plugins/impl/plotly/__tests__/usePlotlyLayout.test.ts +113 -0
- package/src/plugins/impl/plotly/usePlotlyLayout.ts +163 -0
- package/src/utils/__tests__/download.test.tsx +88 -16
- package/src/utils/__tests__/iframe.test.ts +139 -0
- package/src/utils/download.ts +40 -9
- package/src/utils/html-to-image.ts +41 -0
- package/src/utils/iframe.ts +142 -0
- package/dist/_baseIsEqual-BygTGUZ4.js +0 -198
- package/dist/_getTag-C91a-G2j.js +0 -31
- package/dist/abap-CKZVRcrP.js +0 -4
- package/dist/actionscript-3-CfEeiw8Q.js +0 -4
- package/dist/ada-Espzt5xk.js +0 -4
- package/dist/andromeeda-Bet9yHpN.js +0 -4
- package/dist/angular-html-D6gc6xRJ.js +0 -20
- package/dist/angular-html-DE-SuIpI.js +0 -4
- package/dist/angular-ts-BjFZRs0x.js +0 -18
- package/dist/apache-C-c0stKR.js +0 -4
- package/dist/apex-BiJpixJ-.js +0 -4
- package/dist/apl-BEQpOla5.js +0 -16
- package/dist/apl-lHFVoxx7.js +0 -4
- package/dist/applescript-BccZMr3e.js +0 -4
- package/dist/ara-DPVHfRJZ.js +0 -4
- package/dist/architecture-U656AL7Q-wavOWR6z.js +0 -6
- package/dist/asciiarmor-DqCdZUHI.js +0 -4
- package/dist/asciidoc-CCrtAKGW.js +0 -4
- package/dist/asm-C0GNzPhS.js +0 -4
- package/dist/asn1-DEcwtw-q.js +0 -4
- package/dist/astro-CxSXfOWT.js +0 -18
- package/dist/aurora-x-DBIPmgQb.js +0 -4
- package/dist/awk-7-EU_WjX.js +0 -4
- package/dist/ayu-dark-BB4DzJ08.js +0 -4
- package/dist/ballerina-5MpSVFjo.js +0 -4
- package/dist/bat-COtKSp2G.js +0 -4
- package/dist/beancount-BTyoFFVI.js +0 -4
- package/dist/berry-CNMCaTK_.js +0 -4
- package/dist/bibtex-Cti-V2Ia.js +0 -4
- package/dist/bicep-f38RkTGW.js +0 -4
- package/dist/blade-BKkPPgXV.js +0 -20
- package/dist/brainfuck-Bro9Oz5x.js +0 -4
- package/dist/bsl-CGq8JMnm.js +0 -5
- package/dist/c-BltHt-Ng.js +0 -4
- package/dist/c-C2t3MvE0.js +0 -4
- package/dist/cadence-m1eiVz08.js +0 -4
- package/dist/cairo-scf1ovh9.js +0 -5
- package/dist/catppuccin-frappe-C7063pB0.js +0 -4
- package/dist/catppuccin-latte-DMkr2vg8.js +0 -4
- package/dist/catppuccin-macchiato-BqE_ZXfu.js +0 -4
- package/dist/catppuccin-mocha-D7YJQma9.js +0 -4
- package/dist/chunk-JA3XYJ7Z-CzGXky2M.js +0 -470
- package/dist/clarity-B1pEsGP2.js +0 -4
- package/dist/classDiagram-2ON5EDUG-C2nDCJAo.js +0 -31
- package/dist/classDiagram-v2-WZHVMYZB-DORr9374.js +0 -31
- package/dist/clojure-B2uhdQPa.js +0 -4
- package/dist/clojure-BATFX9a2.js +0 -4
- package/dist/cmake-B9WXyQcc.js +0 -4
- package/dist/cmake-BRQW8t09.js +0 -4
- package/dist/cmake-jVu1cyUe.js +0 -4
- package/dist/cobol-CPD3EJfO.js +0 -4
- package/dist/cobol-D19g8SyZ.js +0 -10
- package/dist/code-block-QI2IAROF-CJ80GtCm.js +0 -8572
- package/dist/codeowners-DOHu4JsD.js +0 -4
- package/dist/codeql-Bv-kyldE.js +0 -4
- package/dist/coffee-BSWTbMgj.js +0 -5
- package/dist/coffeescript-KD9TnEnS.js +0 -4
- package/dist/common-lisp-DuUbiL1M.js +0 -4
- package/dist/commonlisp-DNEULz_Q.js +0 -4
- package/dist/coq-BLENpWYo.js +0 -4
- package/dist/cpp-BFMcsgZ1.js +0 -18
- package/dist/cpp-J7hKFkZz.js +0 -4
- package/dist/crystal-BoGe6xAc.js +0 -18
- package/dist/crystal-DVPNgAPQ.js +0 -4
- package/dist/csharp-Bi0R0O8M.js +0 -4
- package/dist/csharp-CEsbqhVz.js +0 -4
- package/dist/css-Dkaj1ML5.js +0 -4
- package/dist/css-fq3a1AH1.js +0 -4
- package/dist/css-tx1M2UYO.js +0 -4
- package/dist/csv-MeEBatsw.js +0 -4
- package/dist/cue-DBMXnBGO.js +0 -4
- package/dist/cypher-DiUnNCqR.js +0 -4
- package/dist/cypher-Dtzq0BP7.js +0 -4
- package/dist/d-CY8xRV-6.js +0 -4
- package/dist/d-DcZudIhJ.js +0 -4
- package/dist/dark-plus-Bx-XGUdv.js +0 -4
- package/dist/dart-DZ5DpAxj.js +0 -4
- package/dist/dax-Heo0fec8.js +0 -4
- package/dist/desktop-CIXrTzSI.js +0 -4
- package/dist/diff-CM1HFG4F.js +0 -4
- package/dist/diff-D9BPDC3o.js +0 -4
- package/dist/diff-FiILeNDL.js +0 -4
- package/dist/dist-8tG5l853.js +0 -5
- package/dist/dist-BXvOBlRl.js +0 -5
- package/dist/dist-BkSNcgv8.js +0 -5
- package/dist/dist-Bu4pyZoX.js +0 -8
- package/dist/dist-C1PN9EmN.js +0 -8
- package/dist/dist-C5R1jOyp.js +0 -8
- package/dist/dist-C7SYDWEd.js +0 -5
- package/dist/dist-CLZuU2Bs.js +0 -5
- package/dist/dist-Cjy_pAHy.js +0 -8
- package/dist/dist-jeJh-w1R.js +0 -5
- package/dist/docker-BpLHnOZG.js +0 -4
- package/dist/dotenv-B-FeoaI3.js +0 -4
- package/dist/dracula-soft-vgd7ckob.js +0 -4
- package/dist/dracula-yEIVSENH.js +0 -4
- package/dist/dream-maker-j9DfKXJZ.js +0 -4
- package/dist/dtd-FhG-tVom.js +0 -4
- package/dist/dylan-HWpZOBPw.js +0 -4
- package/dist/ecl-B_rcje1I.js +0 -4
- package/dist/edge-BvTSoBD4.js +0 -12
- package/dist/eiffel-oqHyHs6f.js +0 -4
- package/dist/elixir-Dy-Nd45s.js +0 -5
- package/dist/elm-B62RQEds.js +0 -4
- package/dist/elm-BbBZ4HBJ.js +0 -5
- package/dist/emacs-lisp-BlKF8SK8.js +0 -4
- package/dist/erb-DfDHVhmE.js +0 -10
- package/dist/erlang-CjRjjA-B.js +0 -4
- package/dist/erlang-DL9YWH5B.js +0 -5
- package/dist/everforest-dark-DTO3RYvZ.js +0 -4
- package/dist/everforest-light-BLftNDeA.js +0 -4
- package/dist/factor-CGH_TnIV.js +0 -4
- package/dist/fennel-CJpQobBl.js +0 -4
- package/dist/fish-Dvq3omMv.js +0 -4
- package/dist/fluent-_glkAdRk.js +0 -4
- package/dist/forth-5N06oHNp.js +0 -4
- package/dist/fortran-fixed-form-DvmVLEcO.js +0 -5
- package/dist/fortran-free-form-BRZ1-G2x.js +0 -4
- package/dist/fortran-free-form-C3kgUwfa.js +0 -4
- package/dist/fortran-wZ-sNg3h.js +0 -4
- package/dist/fsharp-B7-jsQMl.js +0 -5
- package/dist/gas-3H4_FaS8.js +0 -4
- package/dist/gdresource-7F-q_Vav.js +0 -10
- package/dist/gdscript-B0eENwgc.js +0 -4
- package/dist/gdscript-DAHEG9Ry.js +0 -4
- package/dist/gdshader-DPYtQQW0.js +0 -4
- package/dist/gdshader-o6WS_GvU.js +0 -4
- package/dist/genie-Bnhk4Ege.js +0 -4
- package/dist/gherkin-N8YTYIme.js +0 -4
- package/dist/gherkin-PEA2uy50.js +0 -4
- package/dist/git-commit-Cv7QTAeJ.js +0 -5
- package/dist/git-rebase-DwX3Nm0e.js +0 -5
- package/dist/github-dark-B0rIFWbz.js +0 -4
- package/dist/github-dark-default-nWsHqmZA.js +0 -4
- package/dist/github-dark-dimmed-CZ-OQfZw.js +0 -4
- package/dist/github-dark-high-contrast-C3y_w9do.js +0 -4
- package/dist/github-light-CNXzdGuc.js +0 -4
- package/dist/github-light-default-C332Nkmd.js +0 -4
- package/dist/github-light-high-contrast-5fIb4Zrv.js +0 -4
- package/dist/gleam-CXNzRrCZ.js +0 -4
- package/dist/glimmer-js-gufzGuES.js +0 -14
- package/dist/glimmer-ts-D4X2QK5Z.js +0 -14
- package/dist/glsl-CImM3sHk.js +0 -5
- package/dist/glsl-DEg5Ez62.js +0 -4
- package/dist/gnuplot-CBwhenUK.js +0 -4
- package/dist/go-5JnSf2Sn.js +0 -4
- package/dist/go-DY_IL4bk.js +0 -4
- package/dist/graphql-BaqLgJ_M.js +0 -4
- package/dist/graphql-DL2bM2N0.js +0 -14
- package/dist/groovy-DZzbvCP1.js +0 -4
- package/dist/groovy-bcQsAePx.js +0 -4
- package/dist/gruvbox-dark-hard-9eAHcVSP.js +0 -4
- package/dist/gruvbox-dark-medium-BcwJobmL.js +0 -4
- package/dist/gruvbox-dark-soft-DFhXDq1u.js +0 -4
- package/dist/gruvbox-light-hard-CGFqWfyc.js +0 -4
- package/dist/gruvbox-light-medium-hf-MZPsQ.js +0 -4
- package/dist/gruvbox-light-soft-CEDN8Nz_.js +0 -4
- package/dist/hack-B8wSahCf.js +0 -10
- package/dist/haml-Bu4NUveo.js +0 -10
- package/dist/haml-DIZmvqcW.js +0 -4
- package/dist/handlebars-COjOLWnq.js +0 -14
- package/dist/haskell-CExLTzho.js +0 -4
- package/dist/haskell-DCN6ynrk.js +0 -4
- package/dist/haxe-Cop3U-K-.js +0 -4
- package/dist/haxe-Dwfa4QhR.js +0 -4
- package/dist/haxe-f3pVb8qU.js +0 -5
- package/dist/hcl-Db_02Xo4.js +0 -4
- package/dist/hjson-ChDlI-VU.js +0 -4
- package/dist/hlsl-Cqu4CHBc.js +0 -4
- package/dist/hlsl-DEFh66jF.js +0 -4
- package/dist/houston-B8kM6xwu.js +0 -4
- package/dist/html-derivative-D0ctPnGn.js +0 -4
- package/dist/html-derivative-Dtt7T8QF.js +0 -5
- package/dist/html-hTZprlyJ.js +0 -10
- package/dist/html-lq9Ir_fH.js +0 -4
- package/dist/http-csf0B_nN.js +0 -14
- package/dist/hxml-BwN3yN1f.js +0 -5
- package/dist/hy-BWKVYLAU.js +0 -4
- package/dist/idl-BbWlJ0gk.js +0 -4
- package/dist/imba-BdgJpELv.js +0 -4
- package/dist/ini--03_cr_s.js +0 -4
- package/dist/java-DgtnNxg2.js +0 -4
- package/dist/java-DxqbIJE2.js +0 -4
- package/dist/javascript-BdS4qSDJ.js +0 -4
- package/dist/javascript-eMOhp6Aq.js +0 -4
- package/dist/javascript-mK9HLbGj.js +0 -4
- package/dist/jinja-CDb6qdQt.js +0 -5
- package/dist/jison-DyKFip1k.js +0 -5
- package/dist/json-DMbsiPEv.js +0 -4
- package/dist/json-DeQXWHxY.js +0 -4
- package/dist/json5-COCd-fTe.js +0 -4
- package/dist/jsonc-B_GrcWIn.js +0 -4
- package/dist/jsonl-CI61BqMn.js +0 -4
- package/dist/jsonnet-BuWuUqqD.js +0 -4
- package/dist/jssm-D7Rh9Uc6.js +0 -4
- package/dist/jsx-CI1WNtr2.js +0 -4
- package/dist/jsx-Do4BHov2.js +0 -4
- package/dist/julia-C6w3Rvqb.js +0 -4
- package/dist/julia-D5XWzItl.js +0 -16
- package/dist/kanagawa-dragon-hLxsgONk.js +0 -4
- package/dist/kanagawa-lotus-BHRbOuiK.js +0 -4
- package/dist/kanagawa-wave-CjDPcOcS.js +0 -4
- package/dist/kotlin-Do-Dqx9m.js +0 -4
- package/dist/kusto-BeQOeA5N.js +0 -4
- package/dist/laserwave-ohbp9Jiz.js +0 -4
- package/dist/latex-DqJGIiu_.js +0 -5
- package/dist/lean-Clg9aEzr.js +0 -4
- package/dist/less-C3d7xP2W.js +0 -4
- package/dist/less-UHqrKu57.js +0 -4
- package/dist/light-plus-CSE8StgD.js +0 -4
- package/dist/liquid-Dqcanmhn.js +0 -14
- package/dist/livescript-ChQl9lD-.js +0 -4
- package/dist/llvm-DWkTGdnM.js +0 -4
- package/dist/log-CErlyO_4.js +0 -4
- package/dist/logo-Yu9llBXK.js +0 -4
- package/dist/lua-BFsKLCaI.js +0 -5
- package/dist/lua-CiDvI96j.js +0 -4
- package/dist/lua-GfOSGOZ-.js +0 -4
- package/dist/luau-JH-VfaDk.js +0 -4
- package/dist/make-B4hx8tTG.js +0 -4
- package/dist/markdown-BWuRHX75.js +0 -4
- package/dist/markdown-D07chUcD.js +0 -4
- package/dist/marked.esm-BiQFxVJV.js +0 -1373
- package/dist/marko-Bxd2zSuF.js +0 -14
- package/dist/material-theme-Caotz7xa.js +0 -4
- package/dist/material-theme-darker-DA3xYhnK.js +0 -4
- package/dist/material-theme-lighter-Dt5GVhSw.js +0 -4
- package/dist/material-theme-ocean-Cn25Md08.js +0 -4
- package/dist/material-theme-palenight-BChdM80H.js +0 -4
- package/dist/mathematica-ClVO4k7N.js +0 -4
- package/dist/matlab-DhbmgJrG.js +0 -4
- package/dist/mbox-BEI7DeUg.js +0 -4
- package/dist/mdc-6jIdEm7u.js +0 -12
- package/dist/mdx-DrOosndL.js +0 -4
- package/dist/mermaid-B4Jv70w2.js +0 -4
- package/dist/mermaid-D7wtYc6C.js +0 -94
- package/dist/mermaid-NA5CF7SZ-BUMY4R2n.js +0 -8
- package/dist/mermaid.core-BfgNMETw.js +0 -19
- package/dist/min-dark-BtkGP5of.js +0 -4
- package/dist/min-light-DVB0pOsq.js +0 -4
- package/dist/mipsasm-CbiVgyrL.js +0 -4
- package/dist/mirc-DwidJ3iH.js +0 -4
- package/dist/mllike-Dspdy0xJ.js +0 -6
- package/dist/modelica-CIUejP-L.js +0 -4
- package/dist/mojo-oCJmcfe0.js +0 -4
- package/dist/monokai-sXaBCV8W.js +0 -4
- package/dist/move-uqw57ayE.js +0 -4
- package/dist/mscgen-BWXU4Omp.js +0 -6
- package/dist/mumps-PHFFoPk5.js +0 -4
- package/dist/narrat-D5L3ivBF.js +0 -4
- package/dist/nextflow-Dzk2_1yO.js +0 -4
- package/dist/nginx-BsYwbveJ.js +0 -5
- package/dist/night-owl-bwU2KJrI.js +0 -4
- package/dist/nim-B9PRs1V9.js +0 -20
- package/dist/nix-CQXQnSxk.js +0 -4
- package/dist/nord-BIb_ag00.js +0 -4
- package/dist/nsis-B7xooKLf.js +0 -4
- package/dist/ntriples-DnOgtCzG.js +0 -4
- package/dist/nushell-9HBKTMRY.js +0 -4
- package/dist/objective-c-BdQwOoOq.js +0 -4
- package/dist/objective-cpp-Dnlxu7P8.js +0 -4
- package/dist/ocaml-BPPNJmg4.js +0 -4
- package/dist/octave-Cn5kH_QT.js +0 -4
- package/dist/one-dark-pro-Cf2MYqoR.js +0 -4
- package/dist/one-light-D4J9mH5L.js +0 -4
- package/dist/oz-DR-sROpu.js +0 -4
- package/dist/pascal-CPKK1zcS.js +0 -4
- package/dist/pascal-DZawRZnt.js +0 -4
- package/dist/perl-D7FuFdyd.js +0 -4
- package/dist/perl-DcaL6DAN.js +0 -16
- package/dist/php-C3dNQJ69.js +0 -4
- package/dist/php-CQBUGN8t.js +0 -18
- package/dist/pig-CEXnOAnI.js +0 -4
- package/dist/plastic-Bxetw03u.js +0 -4
- package/dist/plsql-Cr9PKKdd.js +0 -4
- package/dist/po-Buj9_8uj.js +0 -4
- package/dist/poimandres-f5X1KNHY.js +0 -4
- package/dist/polar-DaxpU9SY.js +0 -4
- package/dist/postcss-D0yHN3os.js +0 -4
- package/dist/postcss-_e11hEYq.js +0 -4
- package/dist/powerquery-BBrNhg4L.js +0 -4
- package/dist/powershell-BKvWab7q.js +0 -4
- package/dist/powershell-xOwLOHr7.js +0 -4
- package/dist/prisma-B6USmJON.js +0 -4
- package/dist/prolog-_-xlpTu3.js +0 -4
- package/dist/properties-7jnK_vYx.js +0 -4
- package/dist/proto-Fsc93mrf.js +0 -4
- package/dist/protobuf-4rslMjEN.js +0 -4
- package/dist/pug-BVwdEv4r.js +0 -4
- package/dist/pug-DQxLbQkr.js +0 -12
- package/dist/puppet-ClkE3Bbh.js +0 -4
- package/dist/puppet-iSHg_1Z2.js +0 -4
- package/dist/purescript-DBXsSG64.js +0 -4
- package/dist/python-Be-hJfoQ.js +0 -4
- package/dist/python-D8Qe4P9O.js +0 -4
- package/dist/python-tK3wUCn0.js +0 -4
- package/dist/q-DP_Dcoox.js +0 -4
- package/dist/qml-axZuKIq7.js +0 -5
- package/dist/qmldir-U7eiStHf.js +0 -4
- package/dist/qss-C6xK3i2A.js +0 -4
- package/dist/r-B8xYZSka.js +0 -4
- package/dist/r-Bj_pNGwX.js +0 -4
- package/dist/r-C32wHLYu.js +0 -4
- package/dist/racket-Bplgy3qa.js +0 -4
- package/dist/raku-CXfaTnnI.js +0 -4
- package/dist/razor-BUotMkk4.js +0 -10
- package/dist/react-vega-TDd7xMuh.js +0 -9
- package/dist/red-B23zS7fW.js +0 -4
- package/dist/reg-BOAFDp6X.js +0 -4
- package/dist/regexp-BQX_RqKY.js +0 -4
- package/dist/regexp-CgVCPIqt.js +0 -4
- package/dist/rel-C94onwJb.js +0 -4
- package/dist/riscv-DRS1x6ty.js +0 -4
- package/dist/rose-pine-Y3EcMiNE.js +0 -4
- package/dist/rose-pine-dawn-CdolLHqO.js +0 -4
- package/dist/rose-pine-moon-C_zpj202.js +0 -4
- package/dist/rpm-BbDBUfs9.js +0 -5
- package/dist/rst-CcbqEUWW.js +0 -22
- package/dist/ruby-CFajY3gR.js +0 -30
- package/dist/ruby-COfWUiIr.js +0 -4
- package/dist/ruby-zIsg3mjP.js +0 -4
- package/dist/rust-DBsDzz6s.js +0 -4
- package/dist/sas-4hY7456Y.js +0 -5
- package/dist/sas-y_Hue2-X.js +0 -4
- package/dist/sass-Cp8wMMoM.js +0 -4
- package/dist/scala-DYheJtuA.js +0 -4
- package/dist/scheme-7jTCqHw8.js +0 -4
- package/dist/scheme-CGftW0fR.js +0 -4
- package/dist/scss-C847tmc7.js +0 -5
- package/dist/scss-COYAhSrh.js +0 -4
- package/dist/sdbl-BVPPkqm9.js +0 -4
- package/dist/sdbl-LKt9ej7G.js +0 -4
- package/dist/shaderlab-D4RJoI87.js +0 -5
- package/dist/shell-DAqJWXDk.js +0 -4
- package/dist/shellscript-Bt_mtfyS.js +0 -4
- package/dist/shellscript-DTwJmk-B.js +0 -4
- package/dist/shellsession-BXPPO6fw.js +0 -5
- package/dist/sieve-EaqnbCO3.js +0 -4
- package/dist/slack-dark-D98uHpYH.js +0 -4
- package/dist/slack-ochin-D2JGK2Dx.js +0 -4
- package/dist/smalltalk-CJQ4atCz.js +0 -4
- package/dist/smalltalk-DL03YKLJ.js +0 -4
- package/dist/snazzy-light-BhqH4Tt0.js +0 -4
- package/dist/solarized-dark-Cz8Hpdk8.js +0 -4
- package/dist/solarized-light-DSXO0VGL.js +0 -4
- package/dist/solidity-nZ_5BOHX.js +0 -4
- package/dist/soy-C8ioljmY.js +0 -5
- package/dist/sparql-DTA-tQ_q.js +0 -4
- package/dist/sparql-ntHLy-Z_.js +0 -5
- package/dist/splunk-BDj1WtBS.js +0 -4
- package/dist/sql-B_CzXDN7.js +0 -4
- package/dist/sql-hBa00soP.js +0 -4
- package/dist/ssh-config-VL2EBnHI.js +0 -4
- package/dist/stata-CAE5q-ng.js +0 -5
- package/dist/stateDiagram-v2-4FDKWEC3-B4itMUHi.js +0 -30
- package/dist/stex-KfRnSHzF.js +0 -4
- package/dist/stylus-BI8hQQzs.js +0 -4
- package/dist/stylus-CfjeFry_.js +0 -4
- package/dist/stylus-DIZq08hz.js +0 -4
- package/dist/svelte-GcilG7nn.js +0 -14
- package/dist/swift-CVCEbRPJ.js +0 -4
- package/dist/swift-Dl0RRDbH.js +0 -4
- package/dist/synthwave-84-Brwqp6Rc.js +0 -4
- package/dist/system-verilog-oFNqWct0.js +0 -4
- package/dist/systemd-Dk99d5qb.js +0 -4
- package/dist/talonscript-oS-JP1qz.js +0 -4
- package/dist/tasl-eNb7V7lL.js +0 -4
- package/dist/tcl-CQPp2bcg.js +0 -4
- package/dist/tcl-wv9O7fLZ.js +0 -4
- package/dist/templ-CBxszNIk.js +0 -12
- package/dist/terraform-CdD8ZgoG.js +0 -4
- package/dist/tex-BDBUrlZ_.js +0 -4
- package/dist/tex-Drp1pMRL.js +0 -5
- package/dist/textile-DzMRCBcV.js +0 -4
- package/dist/tokyo-night-CmOikx9i.js +0 -4
- package/dist/toml-CyIWqgbe.js +0 -4
- package/dist/toml-oDtxM9oL.js +0 -4
- package/dist/troff-_huin_CY.js +0 -4
- package/dist/ts-tags-CXewkOF3.js +0 -38
- package/dist/tsv-BseyLYQT.js +0 -4
- package/dist/tsx-D2LUWtsu.js +0 -4
- package/dist/tsx-kHCj4PrF.js +0 -4
- package/dist/ttcn-BEiJuYYc.js +0 -4
- package/dist/ttcn-cfg-DB6Ksh67.js +0 -4
- package/dist/turtle-CzEhuAap.js +0 -4
- package/dist/turtle-Dv3esCo-.js +0 -4
- package/dist/turtle-DzhzGEum.js +0 -4
- package/dist/twig-qB_T-k-S.js +0 -18
- package/dist/typescript-BN_vTPvq.js +0 -4
- package/dist/typescript-CI5sQpw1.js +0 -4
- package/dist/typespec-DHEcpagp.js +0 -4
- package/dist/typst-B9HpBJka.js +0 -4
- package/dist/v-H2_8AIAM.js +0 -4
- package/dist/vala-WHi-ThcB.js +0 -4
- package/dist/vb-CS8PoU3R.js +0 -4
- package/dist/vb-CngKZQHu.js +0 -4
- package/dist/vbscript-BV_8nbeM.js +0 -4
- package/dist/velocity-IqE7qYKE.js +0 -4
- package/dist/verilog-BGgTS1pK.js +0 -4
- package/dist/verilog-xtyaWTnc.js +0 -4
- package/dist/vesper-2sgFZerP.js +0 -4
- package/dist/vhdl-7aI3JU7f.js +0 -4
- package/dist/vhdl-BaqXCtf3.js +0 -4
- package/dist/viml-C3IDTTfq.js +0 -4
- package/dist/vitesse-black-BvCrVr8N.js +0 -4
- package/dist/vitesse-dark-DNi7aZj7.js +0 -4
- package/dist/vitesse-light-CXSVQ3oK.js +0 -4
- package/dist/vue-CHooyK57.js +0 -4
- package/dist/vue-ChlIPquu.js +0 -22
- package/dist/vue-html-DPVg93T0.js +0 -10
- package/dist/vue-vine-HiBtkWC6.js +0 -20
- package/dist/vyper-D18q9xCG.js +0 -4
- package/dist/wasm-CRlswj2T.js +0 -6
- package/dist/wasm-DZ1eFFdg.js +0 -4
- package/dist/webidl-BDB8PTTO.js +0 -4
- package/dist/wenyan-D3TBOs3h.js +0 -4
- package/dist/wgsl-BCsR2nKB.js +0 -4
- package/dist/wikitext-DIh6m2jB.js +0 -4
- package/dist/wit-Bz-r96TS.js +0 -4
- package/dist/wolfram-VIrnwGuX.js +0 -4
- package/dist/xml-CAP1bJV9.js +0 -4
- package/dist/xml-HKKjDs8r.js +0 -5
- package/dist/xquery-BIC-qj9Z.js +0 -4
- package/dist/xsl-HaaO21x0.js +0 -5
- package/dist/yacas-ifv5tftd.js +0 -4
- package/dist/yaml-BTiN8kgB.js +0 -4
- package/dist/yaml-B_O-W3eE.js +0 -4
- package/dist/z80-B8zOMVNt.js +0 -4
- package/dist/zenscript-BrGwAsAB.js +0 -4
- package/dist/zig-Chio8vL6.js +0 -4
- /package/dist/{ImageComparisonComponent-DXQrGLfG.js → ImageComparisonComponent-Bijp8beW.js} +0 -0
- /package/dist/{_arrayReduce-BoSa0zEn.js → _arrayReduce-DlK7U3Q6.js} +0 -0
- /package/dist/{_hasUnicode-zxc9hjSW.js → _hasUnicode-Bz2x6u6r.js} +0 -0
- /package/dist/{apl-DRxKiEot.js → apl-D9gTcP3Q.js} +0 -0
- /package/dist/{array-D-nrDupM.js → array-D7wW5QoO.js} +0 -0
- /package/dist/{asciiarmor-C8HoXFIm.js → asciiarmor-mLyg-Z5h.js} +0 -0
- /package/dist/{asn1-9Bo0DYT-.js → asn1-AE7eHomk.js} +0 -0
- /package/dist/{asterisk-eIhOKJFP.js → asterisk-Crp-Pien.js} +0 -0
- /package/dist/{brainfuck-Db8njC-p.js → brainfuck-Bdd6NcL6.js} +0 -0
- /package/dist/{chunk-XAJISQIX-DhEh08v5.js → chunk-XAJISQIX-CZ8Bi1-x.js} +0 -0
- /package/dist/{click-outside-container-D90VWx_r.js → click-outside-container-BCN5BtVO.js} +0 -0
- /package/dist/{clike-CFhUNtI5.js → clike-D_s3fKg5.js} +0 -0
- /package/dist/{clojure-CX7oovsp.js → clojure-zTYBCd80.js} +0 -0
- /package/dist/{cmake-C29AR2kk.js → cmake-BnJV90fC.js} +0 -0
- /package/dist/{cobol-CNkuRW9i.js → cobol-CH0OZO8A.js} +0 -0
- /package/dist/{coffeescript-BJAbfGam.js → coffeescript-CLhc1U6Q.js} +0 -0
- /package/dist/{colors-6nB_pSln.js → colors-6DRQ0kEF.js} +0 -0
- /package/dist/{common-keywords-DDkFNc6Q.js → common-keywords-NhoiR-2S.js} +0 -0
- /package/dist/{commonlisp-BTNhj2l9.js → commonlisp-8K2-IkUD.js} +0 -0
- /package/dist/{constants-DuN_eoAL.js → constants-DrOu5vvd.js} +0 -0
- /package/dist/{crystal-CZc0nIm9.js → crystal-8to4H-ep.js} +0 -0
- /package/dist/{css-L2-0OTXc.js → css-BVo-JOy5.js} +0 -0
- /package/dist/{cypher-Dnc6MXl0.js → cypher-BTFaDDd_.js} +0 -0
- /package/dist/{cytoscape.esm-Cs5lDB24.js → cytoscape.esm-CgJFiP_E.js} +0 -0
- /package/dist/{d-C6X9iIga.js → d-c9bddW2W.js} +0 -0
- /package/dist/{defaultLocale-DMZFeDB8.js → defaultLocale-Bxoo2-30.js} +0 -0
- /package/dist/{defaultLocale-DZtxSCkJ.js → defaultLocale-qS7DaAmi.js} +0 -0
- /package/dist/{diff-ZzKinYqY.js → diff-PA28xMKg.js} +0 -0
- /package/dist/{dist-wEzfBIGs.js → dist-9J8_3DZN.js} +0 -0
- /package/dist/{dist-GFp3A63i.js → dist-9trj4p6n.js} +0 -0
- /package/dist/{dist-DJTgoown.js → dist-BKGWAN8J.js} +0 -0
- /package/dist/{dist-XmKjmDjd.js → dist-BSMZYwqW.js} +0 -0
- /package/dist/{dist-BjWd_Ei9.js → dist-BYznkC5E.js} +0 -0
- /package/dist/{dist-CQ1gja1c.js → dist-BbQ-5HAA.js} +0 -0
- /package/dist/{dist-DsOyFflT.js → dist-CPd_adhw.js} +0 -0
- /package/dist/{dist-BWkp5r3D.js → dist-Cpj5BHNP.js} +0 -0
- /package/dist/{dist-BbaKVjkP.js → dist-CsN7lsea.js} +0 -0
- /package/dist/{dist-DMO79xnD.js → dist-DIVeCGlI.js} +0 -0
- /package/dist/{dist-Bhe0YLr5.js → dist-DsqQCNKw.js} +0 -0
- /package/dist/{dist-BOmxya4k.js → dist-MFzhAmKV.js} +0 -0
- /package/dist/{dist-DYUqP2g4.js → dist-l0KayR2-.js} +0 -0
- /package/dist/{dtd-CytEpkAo.js → dtd-DRlC7Bx8.js} +0 -0
- /package/dist/{duckdb-keywords-q-LipmQC.js → duckdb-keywords-BnNtuiVz.js} +0 -0
- /package/dist/{dylan-CZByFBEQ.js → dylan-d5ufc25E.js} +0 -0
- /package/dist/{ebnf-DuGDVaIM.js → ebnf-CFKHGc8c.js} +0 -0
- /package/dist/{ecl-Cp7L1F5B.js → ecl-Ci3afVKc.js} +0 -0
- /package/dist/{eiffel-C66yjnFL.js → eiffel-G6DmeEi3.js} +0 -0
- /package/dist/{elm-DtHo-73e.js → elm-ByYWHu8b.js} +0 -0
- /package/dist/{emotion-is-prop-valid.esm-_z-EwK5u.js → emotion-is-prop-valid.esm--WpIBtj8.js} +0 -0
- /package/dist/{erlang-C_sj44mF.js → erlang-C7_LcVDw.js} +0 -0
- /package/dist/{esm-JeWm05ae.js → esm-CAd2HmbR.js} +0 -0
- /package/dist/{fcl-DtWOm1i5.js → fcl-DPZwieM9.js} +0 -0
- /package/dist/{forth-CIDHh56T.js → forth-BgUerAyz.js} +0 -0
- /package/dist/{fortran-BQrDVXRU.js → fortran-BCXxm4xF.js} +0 -0
- /package/dist/{gas-D4HQPB0Q.js → gas-CKTQRKLl.js} +0 -0
- /package/dist/{gherkin-UB2gJHdT.js → gherkin-ByVP9cY_.js} +0 -0
- /package/dist/{groovy-DVz6jkOx.js → groovy-BPbrw0GZ.js} +0 -0
- /package/dist/{haskell-CpUdAPCz.js → haskell-B8fq1DW4.js} +0 -0
- /package/dist/{haxe-DCV5_cqD.js → haxe-B7SHQmJo.js} +0 -0
- /package/dist/{http-Q5Xt0h8Z.js → http-AQJFxSug.js} +0 -0
- /package/dist/{idl-D7WCIgHw.js → idl-CeJBDjsl.js} +0 -0
- /package/dist/{init-Ci8VD8ZH.js → init-BfRhston.js} +0 -0
- /package/dist/{invariant-BW72tHBT.js → invariant-D9QLJ4SZ.js} +0 -0
- /package/dist/{isString-B0JuKBai.js → isString-Clqvtgmo.js} +0 -0
- /package/dist/{javascript-B2Rn0Lmd.js → javascript-dCv9_Kn8.js} +0 -0
- /package/dist/{julia-ApprtEaw.js → julia-CD5lO88_.js} +0 -0
- /package/dist/{katex-BTobf3T8.js → katex-Dm9nZf6A.js} +0 -0
- /package/dist/{livescript-BMLIlM7C.js → livescript-Cc8RvFBv.js} +0 -0
- /package/dist/{lua-DdDaW3tC.js → lua-4nedfnvd.js} +0 -0
- /package/dist/{main-DC-71ZOX.js → main-DhFbkwoC.js} +0 -0
- /package/dist/{math-HUZifhTs.js → math-BbMyrONz.js} +0 -0
- /package/dist/{mathematica-PnNN7c2Z.js → mathematica-BIufdZr2.js} +0 -0
- /package/dist/{mbox-B84OtHBK.js → mbox-DQkYSHKe.js} +0 -0
- /package/dist/{memoize-BctRJDZ2.js → memoize-Bag7B41I.js} +0 -0
- /package/dist/{mirc-BVWXJxIq.js → mirc-CI-RWqUR.js} +0 -0
- /package/dist/{mllike-BawXWupH.js → mllike-DQzbf1xo.js} +0 -0
- /package/dist/{modelica-C8-X4Hf_.js → modelica-BnF_cDWj.js} +0 -0
- /package/dist/{mscgen-BOM6dDj8.js → mscgen-MirFrDhW.js} +0 -0
- /package/dist/{mumps-DQOY8n05.js → mumps-eNRTuWOD.js} +0 -0
- /package/dist/{nginx-Ynlf_cSR.js → nginx-hpek_Tnq.js} +0 -0
- /package/dist/{node-sql-parser-DW04P3RY.js → node-sql-parser-ChQUJk8A.js} +0 -0
- /package/dist/{ntriples-DU8VrXdW.js → ntriples-BLneip4i.js} +0 -0
- /package/dist/{octave-BzTIBsQ8.js → octave-C0eG-pKq.js} +0 -0
- /package/dist/{oz-DKFcZsoi.js → oz-BPMLow2T.js} +0 -0
- /package/dist/{pascal-DHBZ15pT.js → pascal-5eb9v5Dl.js} +0 -0
- /package/dist/{path-BVI7RNUv.js → path-C_x2ySFi.js} +0 -0
- /package/dist/{perl-75NMI3w0.js → perl-DOu6rCkF.js} +0 -0
- /package/dist/{pig-B-HY1fo_.js → pig-CRW0kne3.js} +0 -0
- /package/dist/{powershell-DEH22U53.js → powershell-CWgJhiiJ.js} +0 -0
- /package/dist/{prop-types-DTzjue2h.js → prop-types-C9QZf2SY.js} +0 -0
- /package/dist/{properties-B1MzBoJC.js → properties-CHxpmfXW.js} +0 -0
- /package/dist/{protobuf-Dr14KV0p.js → protobuf-DGUXb_-T.js} +0 -0
- /package/dist/{puppet-C4z38l7v.js → puppet-C7uSiW6_.js} +0 -0
- /package/dist/{python-D2L7Nknt.js → python-DAbhVcUr.js} +0 -0
- /package/dist/{q-PxipHfgS.js → q-DKjWHias.js} +0 -0
- /package/dist/{r-CEMMu_Tf.js → r-KD2KhyeL.js} +0 -0
- /package/dist/{range-Bieq5MNc.js → range-BYuZFTbA.js} +0 -0
- /package/dist/{rpm-D3xyahkR.js → rpm-GFtnpQ6M.js} +0 -0
- /package/dist/{ruby-DwEkwdiu.js → ruby-CBAewzLY.js} +0 -0
- /package/dist/{sas-L1W0BRft.js → sas-CCi_AaZi.js} +0 -0
- /package/dist/{scheme-CTybTrX0.js → scheme-CGGGD6kR.js} +0 -0
- /package/dist/{shell-BSx3LZnu.js → shell-b7vZ8ucI.js} +0 -0
- /package/dist/{sieve-BjUfbv-6.js → sieve-ClXOUV85.js} +0 -0
- /package/dist/{simple-mode-IPZGFbI6.js → simple-mode-Uad4lEG7.js} +0 -0
- /package/dist/{smalltalk-BlzuYrMv.js → smalltalk-_PFt9_gp.js} +0 -0
- /package/dist/{solr-B0fQ5Uwe.js → solr-BSTJW269.js} +0 -0
- /package/dist/{sparql-BXKjQ0cK.js → sparql-BCF6qcHt.js} +0 -0
- /package/dist/{spreadsheet-o1pnCmTO.js → spreadsheet-CiBky1_y.js} +0 -0
- /package/dist/{sql-C_tD2xcJ.js → sql-BXZovj-z.js} +0 -0
- /package/dist/{stex-BIsgBmK4.js → stex-DrxP7bb3.js} +0 -0
- /package/dist/{stylus-CqrLLVnG.js → stylus-DMFZWz-G.js} +0 -0
- /package/dist/{swift-DIqvj3_G.js → swift-De2YpSxT.js} +0 -0
- /package/dist/{tcl-B8bOIGVK.js → tcl-jV8Xs_1k.js} +0 -0
- /package/dist/{textile-DZsjavD_.js → textile-D_zo778l.js} +0 -0
- /package/dist/{tiddlywiki-IyzniiDM.js → tiddlywiki-DLTDKQCh.js} +0 -0
- /package/dist/{tiki-Dw2XZEnT.js → tiki-tw_kBvbp.js} +0 -0
- /package/dist/{timer-CPsmIOdm.js → timer-pEiW44EO.js} +0 -0
- /package/dist/{toml-Uc7m08nl.js → toml-_M0gsKn5.js} +0 -0
- /package/dist/{treemap-DMn4tIJ7.js → treemap-BzS5cW_6.js} +0 -0
- /package/dist/{troff-GEl5wcXR.js → troff-B06gyD33.js} +0 -0
- /package/dist/{ttcn-pr4FDOLT.js → ttcn-DoQoQNUM.js} +0 -0
- /package/dist/{ttcn-cfg-dZQ_fWTH.js → ttcn-cfg-l_6PksD2.js} +0 -0
- /package/dist/{turtle-TPRDOknA.js → turtle-zEnD4bpn.js} +0 -0
- /package/dist/{vb-BJUAeTYr.js → vb-fUsnAuzb.js} +0 -0
- /package/dist/{vbscript-CcJ6Z3ic.js → vbscript-CVlD7uZQ.js} +0 -0
- /package/dist/{velocity-pq4ZMzU3.js → velocity-CHkEIdMC.js} +0 -0
- /package/dist/{verilog-timMNjHt.js → verilog-B3ctZTB4.js} +0 -0
- /package/dist/{vhdl-DYFbVKNm.js → vhdl-rXdBgR5O.js} +0 -0
- /package/dist/{webidl-pue9oqnb.js → webidl-Cv9aQfcc.js} +0 -0
- /package/dist/{xquery-DeItGynK.js → xquery-Du0w47aa.js} +0 -0
- /package/dist/{yacas-By2Qrjba.js → yacas-Eq4p_g3L.js} +0 -0
- /package/dist/{z80-C7iLsyPC.js → z80-Dz4HTTRf.js} +0 -0
- /package/dist/{zod-LbXVxiL9.js → zod-DITCj31F.js} +0 -0
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
2
|
|
|
3
3
|
import { describe, expect, test } from "vitest";
|
|
4
|
-
import {
|
|
4
|
+
import type { UserConfig } from "@/core/config/config-schema";
|
|
5
|
+
import { applyManualInjections, getDirtyValues } from "../user-config-form";
|
|
5
6
|
|
|
6
7
|
describe("getDirtyValues", () => {
|
|
7
8
|
test("extracts only dirty fields", () => {
|
|
@@ -71,4 +72,49 @@ describe("getDirtyValues", () => {
|
|
|
71
72
|
expect(result).toEqual({ display: { theme: "dark" } });
|
|
72
73
|
expect(result).not.toHaveProperty("runtime");
|
|
73
74
|
});
|
|
75
|
+
|
|
76
|
+
test("applyManualInjections injects touched ai model fields", () => {
|
|
77
|
+
const values = {
|
|
78
|
+
ai: {
|
|
79
|
+
models: {
|
|
80
|
+
displayed_models: ["openai/gpt-4"],
|
|
81
|
+
custom_models: ["openai/custom-model"],
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
} as UserConfig;
|
|
85
|
+
const dirtyValues: Partial<UserConfig> = {};
|
|
86
|
+
const touchedFields = {
|
|
87
|
+
ai: { models: { displayed_models: true } },
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
applyManualInjections({ values, dirtyValues, touchedFields });
|
|
91
|
+
|
|
92
|
+
expect(dirtyValues).toEqual({
|
|
93
|
+
ai: {
|
|
94
|
+
models: {
|
|
95
|
+
displayed_models: ["openai/gpt-4"],
|
|
96
|
+
custom_models: ["openai/custom-model"],
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
test("applyManualInjections skips when field not touched", () => {
|
|
103
|
+
const values = {
|
|
104
|
+
ai: {
|
|
105
|
+
models: {
|
|
106
|
+
displayed_models: ["openai/gpt-4"],
|
|
107
|
+
custom_models: ["openai/custom-model"],
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
} as UserConfig;
|
|
111
|
+
const dirtyValues: Partial<UserConfig> = {};
|
|
112
|
+
const touchedFields = {
|
|
113
|
+
ai: { models: { displayed_models: false } },
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
applyManualInjections({ values, dirtyValues, touchedFields });
|
|
117
|
+
|
|
118
|
+
expect(dirtyValues).toEqual({});
|
|
119
|
+
});
|
|
74
120
|
});
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
2
|
|
|
3
|
+
import { useAtom } from "jotai";
|
|
3
4
|
import {
|
|
4
5
|
BotIcon,
|
|
5
6
|
BrainIcon,
|
|
6
7
|
ChevronRightIcon,
|
|
7
|
-
InfoIcon,
|
|
8
8
|
PlusIcon,
|
|
9
9
|
Trash2Icon,
|
|
10
10
|
} from "lucide-react";
|
|
@@ -61,7 +61,6 @@ import {
|
|
|
61
61
|
} from "../ui/accordion";
|
|
62
62
|
import { Button } from "../ui/button";
|
|
63
63
|
import { Checkbox } from "../ui/checkbox";
|
|
64
|
-
import { DropdownMenuSeparator } from "../ui/dropdown-menu";
|
|
65
64
|
import { Label } from "../ui/label";
|
|
66
65
|
import { ExternalLink } from "../ui/links";
|
|
67
66
|
import {
|
|
@@ -79,6 +78,7 @@ import { AWS_REGIONS } from "./constants";
|
|
|
79
78
|
import { IncorrectModelId } from "./incorrect-model-id";
|
|
80
79
|
import { IsOverridden } from "./is-overridden";
|
|
81
80
|
import { MCPConfig } from "./mcp-config";
|
|
81
|
+
import { aiSettingsSubTabAtom } from "./state";
|
|
82
82
|
|
|
83
83
|
interface AiConfigProps {
|
|
84
84
|
form: UseFormReturn<UserConfig>;
|
|
@@ -234,9 +234,7 @@ interface ModelSelectorProps {
|
|
|
234
234
|
config: UserConfig;
|
|
235
235
|
name: FieldPath<UserConfig>;
|
|
236
236
|
placeholder: string;
|
|
237
|
-
testId: string;
|
|
238
237
|
description?: React.ReactNode;
|
|
239
|
-
disabled?: boolean;
|
|
240
238
|
label: string;
|
|
241
239
|
forRole: SupportedRole;
|
|
242
240
|
onSubmit: (values: UserConfig) => void;
|
|
@@ -247,9 +245,7 @@ export const ModelSelector: React.FC<ModelSelectorProps> = ({
|
|
|
247
245
|
config,
|
|
248
246
|
name,
|
|
249
247
|
placeholder,
|
|
250
|
-
testId,
|
|
251
248
|
description,
|
|
252
|
-
disabled = false,
|
|
253
249
|
label,
|
|
254
250
|
forRole,
|
|
255
251
|
onSubmit,
|
|
@@ -276,34 +272,6 @@ export const ModelSelector: React.FC<ModelSelectorProps> = ({
|
|
|
276
272
|
placeholder={placeholder}
|
|
277
273
|
onSelect={selectModel}
|
|
278
274
|
triggerClassName="text-sm"
|
|
279
|
-
customDropdownContent={
|
|
280
|
-
<>
|
|
281
|
-
<DropdownMenuSeparator />
|
|
282
|
-
<p className="px-2 py-1.5 text-sm text-muted-secondary flex items-center gap-1">
|
|
283
|
-
Enter a custom model
|
|
284
|
-
<Tooltip content="Models should include the provider prefix, e.g. 'openai/gpt-4o'">
|
|
285
|
-
<InfoIcon className="h-3 w-3" />
|
|
286
|
-
</Tooltip>
|
|
287
|
-
</p>
|
|
288
|
-
<div className="px-2 py-1">
|
|
289
|
-
<Input
|
|
290
|
-
data-testid={testId}
|
|
291
|
-
className="w-full border-border shadow-none focus-visible:shadow-xs"
|
|
292
|
-
placeholder={placeholder}
|
|
293
|
-
{...field}
|
|
294
|
-
value={asStringOrEmpty(field.value)}
|
|
295
|
-
disabled={disabled}
|
|
296
|
-
onKeyDown={Events.stopPropagation()}
|
|
297
|
-
/>
|
|
298
|
-
{value && (
|
|
299
|
-
<IncorrectModelId
|
|
300
|
-
value={value}
|
|
301
|
-
includeSuggestion={false}
|
|
302
|
-
/>
|
|
303
|
-
)}
|
|
304
|
-
</div>
|
|
305
|
-
</>
|
|
306
|
-
}
|
|
307
275
|
forRole={forRole}
|
|
308
276
|
/>
|
|
309
277
|
</FormControl>
|
|
@@ -432,7 +400,6 @@ const renderCopilotProvider = ({
|
|
|
432
400
|
config={config}
|
|
433
401
|
name="ai.models.autocomplete_model"
|
|
434
402
|
placeholder="ollama/qwen2.5-coder:1.5b"
|
|
435
|
-
testId="custom-model-input"
|
|
436
403
|
description="Model to use for code completion when using a custom provider."
|
|
437
404
|
onSubmit={onSubmit}
|
|
438
405
|
forRole="autocomplete"
|
|
@@ -1209,8 +1176,6 @@ export const AiAssistConfig: React.FC<AiConfigProps> = ({
|
|
|
1209
1176
|
config,
|
|
1210
1177
|
onSubmit,
|
|
1211
1178
|
}) => {
|
|
1212
|
-
const isWasmRuntime = isWasm();
|
|
1213
|
-
|
|
1214
1179
|
return (
|
|
1215
1180
|
<SettingGroup>
|
|
1216
1181
|
<SettingSubtitle>AI Assistant</SettingSubtitle>
|
|
@@ -1244,8 +1209,6 @@ export const AiAssistConfig: React.FC<AiConfigProps> = ({
|
|
|
1244
1209
|
config={config}
|
|
1245
1210
|
name="ai.models.chat_model"
|
|
1246
1211
|
placeholder={DEFAULT_AI_MODEL}
|
|
1247
|
-
testId="ai-chat-model-input"
|
|
1248
|
-
disabled={isWasmRuntime}
|
|
1249
1212
|
description={
|
|
1250
1213
|
<span>Model to use for chat conversations in the Chat panel.</span>
|
|
1251
1214
|
}
|
|
@@ -1258,8 +1221,6 @@ export const AiAssistConfig: React.FC<AiConfigProps> = ({
|
|
|
1258
1221
|
config={config}
|
|
1259
1222
|
name="ai.models.edit_model"
|
|
1260
1223
|
placeholder={DEFAULT_AI_MODEL}
|
|
1261
|
-
testId="ai-edit-model-input"
|
|
1262
|
-
disabled={isWasmRuntime}
|
|
1263
1224
|
description={
|
|
1264
1225
|
<span>
|
|
1265
1226
|
Model to use for code editing with the{" "}
|
|
@@ -1270,18 +1231,6 @@ export const AiAssistConfig: React.FC<AiConfigProps> = ({
|
|
|
1270
1231
|
onSubmit={onSubmit}
|
|
1271
1232
|
/>
|
|
1272
1233
|
|
|
1273
|
-
<ul className="bg-muted p-2 rounded-md list-disc space-y-1 pl-6">
|
|
1274
|
-
<li className="text-xs text-muted-secondary">
|
|
1275
|
-
Models should include the provider name and model name separated by a
|
|
1276
|
-
slash. For example, "anthropic/claude-3-5-sonnet-latest" or
|
|
1277
|
-
"google/gemini-2.0-flash-exp"
|
|
1278
|
-
</li>
|
|
1279
|
-
<li className="text-xs text-muted-secondary">
|
|
1280
|
-
Depending on the provider, we will use the respective API key and
|
|
1281
|
-
additional configuration.
|
|
1282
|
-
</li>
|
|
1283
|
-
</ul>
|
|
1284
|
-
|
|
1285
1234
|
<FormField
|
|
1286
1235
|
control={form.control}
|
|
1287
1236
|
name="ai.rules"
|
|
@@ -1434,6 +1383,7 @@ export const AiModelDisplayConfig: React.FC<AiConfigProps> = ({
|
|
|
1434
1383
|
|
|
1435
1384
|
form.setValue("ai.models.displayed_models", newModels, {
|
|
1436
1385
|
shouldDirty: true,
|
|
1386
|
+
shouldTouch: true,
|
|
1437
1387
|
});
|
|
1438
1388
|
onSubmit(form.getValues());
|
|
1439
1389
|
});
|
|
@@ -1453,6 +1403,7 @@ export const AiModelDisplayConfig: React.FC<AiConfigProps> = ({
|
|
|
1453
1403
|
|
|
1454
1404
|
form.setValue("ai.models.displayed_models", newModels, {
|
|
1455
1405
|
shouldDirty: true,
|
|
1406
|
+
shouldTouch: true,
|
|
1456
1407
|
});
|
|
1457
1408
|
onSubmit(form.getValues());
|
|
1458
1409
|
},
|
|
@@ -1466,9 +1417,11 @@ export const AiModelDisplayConfig: React.FC<AiConfigProps> = ({
|
|
|
1466
1417
|
);
|
|
1467
1418
|
form.setValue("ai.models.displayed_models", newDisplayedModels, {
|
|
1468
1419
|
shouldDirty: true,
|
|
1420
|
+
shouldTouch: true,
|
|
1469
1421
|
});
|
|
1470
1422
|
form.setValue("ai.models.custom_models", newModels, {
|
|
1471
1423
|
shouldDirty: true,
|
|
1424
|
+
shouldTouch: true,
|
|
1472
1425
|
});
|
|
1473
1426
|
onSubmit(form.getValues());
|
|
1474
1427
|
});
|
|
@@ -1548,6 +1501,7 @@ export const AddModelForm: React.FC<{
|
|
|
1548
1501
|
|
|
1549
1502
|
form.setValue("ai.models.custom_models", [newModel.id, ...customModels], {
|
|
1550
1503
|
shouldDirty: true,
|
|
1504
|
+
shouldTouch: true,
|
|
1551
1505
|
});
|
|
1552
1506
|
onSubmit(form.getValues());
|
|
1553
1507
|
resetForm();
|
|
@@ -1740,6 +1694,12 @@ const AddButton = ({
|
|
|
1740
1694
|
);
|
|
1741
1695
|
};
|
|
1742
1696
|
|
|
1697
|
+
export type AiSettingsSubTab =
|
|
1698
|
+
| "ai-features"
|
|
1699
|
+
| "ai-providers"
|
|
1700
|
+
| "ai-models"
|
|
1701
|
+
| "mcp";
|
|
1702
|
+
|
|
1743
1703
|
export const AiConfig: React.FC<AiConfigProps> = ({
|
|
1744
1704
|
form,
|
|
1745
1705
|
config,
|
|
@@ -1747,8 +1707,14 @@ export const AiConfig: React.FC<AiConfigProps> = ({
|
|
|
1747
1707
|
}) => {
|
|
1748
1708
|
// MCP is not supported in WASM
|
|
1749
1709
|
const wasm = isWasm();
|
|
1710
|
+
const [activeTab, setActiveTab] = useAtom(aiSettingsSubTabAtom);
|
|
1711
|
+
|
|
1750
1712
|
return (
|
|
1751
|
-
<Tabs
|
|
1713
|
+
<Tabs
|
|
1714
|
+
value={activeTab}
|
|
1715
|
+
onValueChange={(value) => setActiveTab(value as AiSettingsSubTab)}
|
|
1716
|
+
className="flex-1"
|
|
1717
|
+
>
|
|
1752
1718
|
<TabsList className="mb-2">
|
|
1753
1719
|
<TabsTrigger value="ai-features">AI Features</TabsTrigger>
|
|
1754
1720
|
<TabsTrigger value="ai-providers">AI Providers</TabsTrigger>
|
|
@@ -1,17 +1,27 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
2
|
import { atom, useSetAtom } from "jotai";
|
|
3
|
+
import type { AiSettingsSubTab } from "./ai-config";
|
|
3
4
|
import {
|
|
4
5
|
activeUserConfigCategoryAtom,
|
|
5
6
|
type SettingCategoryId,
|
|
6
7
|
} from "./user-config-form";
|
|
7
8
|
|
|
9
|
+
export const aiSettingsSubTabAtom = atom<AiSettingsSubTab>("ai-features");
|
|
10
|
+
|
|
8
11
|
export const settingDialogAtom = atom<boolean>(false);
|
|
9
12
|
|
|
10
13
|
export function useOpenSettingsToTab() {
|
|
11
14
|
const setActiveCategory = useSetAtom(activeUserConfigCategoryAtom);
|
|
12
15
|
const setSettingsDialog = useSetAtom(settingDialogAtom);
|
|
13
|
-
const
|
|
16
|
+
const setAiSubTab = useSetAtom(aiSettingsSubTabAtom);
|
|
17
|
+
|
|
18
|
+
// Note: If more settings categories need sub-tabs or deep-linking is required,
|
|
19
|
+
// consider using a different strategy like query params
|
|
20
|
+
const handleClick = (tab: SettingCategoryId, subTab?: AiSettingsSubTab) => {
|
|
14
21
|
setActiveCategory(tab);
|
|
22
|
+
if (tab === "ai") {
|
|
23
|
+
setAiSubTab(subTab ?? "ai-features");
|
|
24
|
+
}
|
|
15
25
|
setSettingsDialog(true);
|
|
16
26
|
};
|
|
17
27
|
return { handleClick };
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
} from "lucide-react";
|
|
15
15
|
import React, { useId, useRef } from "react";
|
|
16
16
|
import { useLocale } from "react-aria";
|
|
17
|
-
import type { FieldValues } from "react-hook-form";
|
|
17
|
+
import type { FieldPath, FieldValues } from "react-hook-form";
|
|
18
18
|
import { useForm } from "react-hook-form";
|
|
19
19
|
import type z from "zod";
|
|
20
20
|
import { Button } from "@/components/ui/button";
|
|
@@ -95,6 +95,68 @@ export function getDirtyValues<T extends FieldValues>(
|
|
|
95
95
|
return result;
|
|
96
96
|
}
|
|
97
97
|
|
|
98
|
+
type ManualInjector = (
|
|
99
|
+
values: UserConfig,
|
|
100
|
+
dirtyValues: Partial<UserConfig>,
|
|
101
|
+
) => void;
|
|
102
|
+
|
|
103
|
+
const modelsAiInjection = (
|
|
104
|
+
values: UserConfig,
|
|
105
|
+
dirtyValues: Partial<UserConfig>,
|
|
106
|
+
) => {
|
|
107
|
+
dirtyValues.ai = {
|
|
108
|
+
...dirtyValues.ai,
|
|
109
|
+
models: {
|
|
110
|
+
...dirtyValues.ai?.models,
|
|
111
|
+
displayed_models: values.ai?.models?.displayed_models ?? [],
|
|
112
|
+
custom_models: values.ai?.models?.custom_models ?? [],
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
// Some fields (like AI model lists) have empty arrays as default values.
|
|
118
|
+
// If a user explicitly clears them, RHF won't mark them dirty, so we use
|
|
119
|
+
// touchedFields to force-include those values in the payload.
|
|
120
|
+
const MANUAL_INJECT_ENTRIES = [
|
|
121
|
+
["ai.models.displayed_models", modelsAiInjection],
|
|
122
|
+
["ai.models.custom_models", modelsAiInjection],
|
|
123
|
+
] as const satisfies readonly (readonly [
|
|
124
|
+
FieldPath<UserConfig>,
|
|
125
|
+
ManualInjector,
|
|
126
|
+
])[];
|
|
127
|
+
|
|
128
|
+
const MANUAL_INJECT_FIELDS = new Map(MANUAL_INJECT_ENTRIES);
|
|
129
|
+
|
|
130
|
+
const isTouchedPath = (
|
|
131
|
+
touched: unknown,
|
|
132
|
+
path: FieldPath<UserConfig>,
|
|
133
|
+
): boolean => {
|
|
134
|
+
if (!touched) {
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
let current: unknown = touched;
|
|
138
|
+
for (const segment of path.split(".")) {
|
|
139
|
+
if (typeof current !== "object" || current === null) {
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
current = (current as Record<string, unknown>)[segment];
|
|
143
|
+
}
|
|
144
|
+
return current === true;
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
export const applyManualInjections = (opts: {
|
|
148
|
+
values: UserConfig;
|
|
149
|
+
dirtyValues: Partial<UserConfig>;
|
|
150
|
+
touchedFields: unknown;
|
|
151
|
+
}) => {
|
|
152
|
+
const { values, dirtyValues, touchedFields } = opts;
|
|
153
|
+
for (const [fieldPath, injector] of MANUAL_INJECT_FIELDS) {
|
|
154
|
+
if (isTouchedPath(touchedFields, fieldPath)) {
|
|
155
|
+
injector(values, dirtyValues);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
|
|
98
160
|
const categories = [
|
|
99
161
|
{
|
|
100
162
|
id: "editor",
|
|
@@ -181,7 +243,10 @@ export const UserConfigForm: React.FC = () => {
|
|
|
181
243
|
defaultValues: config,
|
|
182
244
|
});
|
|
183
245
|
|
|
184
|
-
const setAiModels = (
|
|
246
|
+
const setAiModels = (
|
|
247
|
+
values: UserConfig["ai"],
|
|
248
|
+
dirtyAiConfig: UserConfig["ai"],
|
|
249
|
+
) => {
|
|
185
250
|
const { chatModel, editModel } = autoPopulateModels(values);
|
|
186
251
|
if (chatModel || editModel) {
|
|
187
252
|
dirtyAiConfig = {
|
|
@@ -207,13 +272,18 @@ export const UserConfigForm: React.FC = () => {
|
|
|
207
272
|
// Only send values that were actually changed to avoid
|
|
208
273
|
// overwriting backend values the form doesn't manage
|
|
209
274
|
const dirtyValues = getDirtyValues(values, form.formState.dirtyFields);
|
|
275
|
+
applyManualInjections({
|
|
276
|
+
values,
|
|
277
|
+
dirtyValues,
|
|
278
|
+
touchedFields: form.formState.touchedFields,
|
|
279
|
+
});
|
|
210
280
|
if (Object.keys(dirtyValues).length === 0) {
|
|
211
281
|
return; // Nothing changed
|
|
212
282
|
}
|
|
213
283
|
|
|
214
284
|
// Auto-populate AI models when credentials are set, makes it easier to get started
|
|
215
285
|
if (dirtyValues.ai) {
|
|
216
|
-
dirtyValues.ai = setAiModels(values, dirtyValues.ai);
|
|
286
|
+
dirtyValues.ai = setAiModels(values.ai, dirtyValues.ai);
|
|
217
287
|
}
|
|
218
288
|
|
|
219
289
|
await saveUserConfig({ config: dirtyValues }).then(() => {
|
|
@@ -435,7 +435,11 @@ const ChatPanel = () => {
|
|
|
435
435
|
title="Chat with AI"
|
|
436
436
|
description="No AI provider configured or model selected"
|
|
437
437
|
action={
|
|
438
|
-
<Button
|
|
438
|
+
<Button
|
|
439
|
+
variant="outline"
|
|
440
|
+
size="sm"
|
|
441
|
+
onClick={() => handleClick("ai", "ai-providers")}
|
|
442
|
+
>
|
|
439
443
|
Edit AI settings
|
|
440
444
|
</Button>
|
|
441
445
|
}
|
|
@@ -1,30 +1,66 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
2
|
|
|
3
3
|
import type React from "react";
|
|
4
|
+
import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs";
|
|
4
5
|
import { useCellDataAtoms, useCellIds } from "@/core/cells/cells";
|
|
5
6
|
import { useVariables } from "@/core/variables/state";
|
|
6
7
|
import { cn } from "@/utils/cn";
|
|
7
8
|
import { DependencyGraph } from "../../../dependency-graph/dependency-graph";
|
|
8
9
|
import { MinimapContent } from "../../../dependency-graph/minimap-content";
|
|
9
10
|
import { useDependencyPanelTab } from "../wrapper/useDependencyPanelTab";
|
|
11
|
+
import { usePanelSection } from "./panel-context";
|
|
10
12
|
|
|
11
13
|
const DependencyGraphPanel: React.FC = () => {
|
|
12
|
-
const { dependencyPanelTab } = useDependencyPanelTab();
|
|
14
|
+
const { dependencyPanelTab, setDependencyPanelTab } = useDependencyPanelTab();
|
|
13
15
|
const variables = useVariables();
|
|
14
16
|
const cellIds = useCellIds();
|
|
15
17
|
const [cells] = useCellDataAtoms();
|
|
18
|
+
const panelSection = usePanelSection();
|
|
19
|
+
|
|
20
|
+
// Show toggle inside panel when in developer panel (horizontal layout)
|
|
21
|
+
// since the sidebar has its own header with the toggle
|
|
22
|
+
const showInlineToggle = panelSection === "developer-panel";
|
|
16
23
|
|
|
17
24
|
return (
|
|
18
|
-
<div className={cn("w-full h-full flex-1 mx-auto -mb-4
|
|
19
|
-
{
|
|
20
|
-
<
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
<div className={cn("w-full h-full flex-1 mx-auto -mb-4 flex flex-col")}>
|
|
26
|
+
{showInlineToggle && (
|
|
27
|
+
<div className="p-2 shrink-0">
|
|
28
|
+
<Tabs
|
|
29
|
+
value={dependencyPanelTab}
|
|
30
|
+
onValueChange={(value) => {
|
|
31
|
+
if (value === "minimap" || value === "graph") {
|
|
32
|
+
setDependencyPanelTab(value);
|
|
33
|
+
}
|
|
34
|
+
}}
|
|
35
|
+
>
|
|
36
|
+
<TabsList>
|
|
37
|
+
<TabsTrigger
|
|
38
|
+
value="minimap"
|
|
39
|
+
className="py-0.5 text-xs uppercase tracking-wide font-bold"
|
|
40
|
+
>
|
|
41
|
+
Minimap
|
|
42
|
+
</TabsTrigger>
|
|
43
|
+
<TabsTrigger
|
|
44
|
+
value="graph"
|
|
45
|
+
className="py-0.5 text-xs uppercase tracking-wide font-bold"
|
|
46
|
+
>
|
|
47
|
+
Graph
|
|
48
|
+
</TabsTrigger>
|
|
49
|
+
</TabsList>
|
|
50
|
+
</Tabs>
|
|
51
|
+
</div>
|
|
27
52
|
)}
|
|
53
|
+
<div className="flex-1 min-h-0 relative">
|
|
54
|
+
{dependencyPanelTab === "minimap" ? (
|
|
55
|
+
<MinimapContent />
|
|
56
|
+
) : (
|
|
57
|
+
<DependencyGraph
|
|
58
|
+
cellAtoms={cells}
|
|
59
|
+
variables={variables}
|
|
60
|
+
cellIds={cellIds.inOrderIds}
|
|
61
|
+
/>
|
|
62
|
+
)}
|
|
63
|
+
</div>
|
|
28
64
|
</div>
|
|
29
65
|
);
|
|
30
66
|
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
2
|
|
|
3
3
|
import { EditorView } from "@codemirror/view";
|
|
4
|
+
import { math } from "@streamdown/math";
|
|
4
5
|
import { useAtomValue } from "jotai";
|
|
5
6
|
import { BetweenHorizontalStartIcon } from "lucide-react";
|
|
6
7
|
import { memo, Suspense, useState } from "react";
|
|
@@ -184,7 +185,11 @@ const COMPONENTS: Components = {
|
|
|
184
185
|
|
|
185
186
|
export const MarkdownRenderer = memo(({ content }: { content: string }) => {
|
|
186
187
|
return (
|
|
187
|
-
<Streamdown
|
|
188
|
+
<Streamdown
|
|
189
|
+
components={COMPONENTS}
|
|
190
|
+
plugins={{ math }}
|
|
191
|
+
className="mo-markdown-renderer"
|
|
192
|
+
>
|
|
188
193
|
{content}
|
|
189
194
|
</Streamdown>
|
|
190
195
|
);
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
import type { Completion } from "@codemirror/autocomplete";
|
|
4
4
|
import type { FileUIPart } from "ai";
|
|
5
|
-
import { toPng } from "html-to-image";
|
|
6
5
|
import { processOutput } from "@/components/editor/output/console/process-output";
|
|
7
6
|
import { type NotebookState, notebookAtom } from "@/core/cells/cells";
|
|
8
7
|
import { type CellId, CellOutputId } from "@/core/cells/ids";
|
|
@@ -10,6 +9,7 @@ import { displayCellName } from "@/core/cells/names";
|
|
|
10
9
|
import { isOutputEmpty } from "@/core/cells/outputs";
|
|
11
10
|
import type { OutputMessage } from "@/core/kernel/messages";
|
|
12
11
|
import type { JotaiStore } from "@/core/state/jotai";
|
|
12
|
+
import { toPng } from "@/utils/html-to-image";
|
|
13
13
|
import { Logger } from "@/utils/Logger";
|
|
14
14
|
import { type AIContextItem, AIContextProvider } from "../registry";
|
|
15
15
|
import { contextToXml } from "../utils";
|
|
@@ -137,7 +137,13 @@ describe("useEnrichCellOutputs", () => {
|
|
|
137
137
|
expect(document.getElementById).toHaveBeenCalledWith(
|
|
138
138
|
CellOutputId.create(cellId),
|
|
139
139
|
);
|
|
140
|
-
expect(toPng).toHaveBeenCalledWith(
|
|
140
|
+
expect(toPng).toHaveBeenCalledWith(
|
|
141
|
+
mockElement,
|
|
142
|
+
expect.objectContaining({
|
|
143
|
+
filter: expect.any(Function),
|
|
144
|
+
onImageErrorHandler: expect.any(Function),
|
|
145
|
+
}),
|
|
146
|
+
);
|
|
141
147
|
expect(output).toEqual({
|
|
142
148
|
[cellId]: ["image/png", mockDataUrl],
|
|
143
149
|
});
|
package/src/core/export/hooks.ts
CHANGED
|
@@ -132,7 +132,7 @@ export function useEnrichCellOutputs() {
|
|
|
132
132
|
const results = await Promise.all(
|
|
133
133
|
cellsToCaptureScreenshot.map(async ([cellId]) => {
|
|
134
134
|
try {
|
|
135
|
-
const dataUrl = await getImageDataUrlForCell(cellId);
|
|
135
|
+
const dataUrl = await getImageDataUrlForCell(cellId, false);
|
|
136
136
|
if (!dataUrl) {
|
|
137
137
|
Logger.error(`Failed to capture screenshot for cell ${cellId}`);
|
|
138
138
|
return null;
|
|
@@ -7,15 +7,14 @@ import { Logger } from "@/utils/Logger";
|
|
|
7
7
|
|
|
8
8
|
import "./plotly.css";
|
|
9
9
|
import "./mapbox.css";
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import { type JSX, lazy, memo, useEffect, useMemo, useState } from "react";
|
|
10
|
+
import { pick, set } from "lodash-es";
|
|
11
|
+
import { type JSX, lazy, memo, useMemo } from "react";
|
|
13
12
|
import useEvent from "react-use-event-hook";
|
|
14
13
|
import { useDeepCompareMemoize } from "@/hooks/useDeepCompareMemoize";
|
|
15
14
|
import { useScript } from "@/hooks/useScript";
|
|
16
15
|
import { Arrays } from "@/utils/arrays";
|
|
17
|
-
import { Objects } from "@/utils/objects";
|
|
18
16
|
import { createParser, type PlotlyTemplateParser } from "./parse-from-template";
|
|
17
|
+
import { usePlotlyLayout } from "./usePlotlyLayout";
|
|
19
18
|
|
|
20
19
|
interface Data {
|
|
21
20
|
figure: Figure;
|
|
@@ -80,18 +79,6 @@ export const LazyPlot = lazy(() =>
|
|
|
80
79
|
}),
|
|
81
80
|
);
|
|
82
81
|
|
|
83
|
-
function initialLayout(figure: Figure): Partial<Plotly.Layout> {
|
|
84
|
-
// Enable autosize if width is not specified
|
|
85
|
-
const shouldAutoSize = figure.layout.width === undefined;
|
|
86
|
-
return {
|
|
87
|
-
autosize: shouldAutoSize,
|
|
88
|
-
dragmode: "select",
|
|
89
|
-
height: 540,
|
|
90
|
-
// Prioritize user's config
|
|
91
|
-
...figure.layout,
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
|
|
95
82
|
const SUNBURST_DATA_KEYS: (keyof Plotly.SunburstPlotDatum)[] = [
|
|
96
83
|
"color",
|
|
97
84
|
"curveNumber",
|
|
@@ -111,38 +98,20 @@ const TREE_MAP_DATA_KEYS = SUNBURST_DATA_KEYS;
|
|
|
111
98
|
|
|
112
99
|
export const PlotlyComponent = memo(
|
|
113
100
|
({ figure: originalFigure, value, setValue, config }: PlotlyPluginProps) => {
|
|
114
|
-
const [figure, setFigure] = useState(() => {
|
|
115
|
-
// We clone the figure since Plotly mutates the figure in place
|
|
116
|
-
return structuredClone(originalFigure);
|
|
117
|
-
});
|
|
118
|
-
|
|
119
101
|
// Used for rendering LaTeX. TODO: Serve this library from Marimo
|
|
120
102
|
const scriptStatus = useScript(
|
|
121
103
|
"https://cdn.jsdelivr.net/npm/mathjax-full@3.2.2/es5/tex-mml-svg.min.js",
|
|
122
104
|
);
|
|
123
105
|
const isScriptLoaded = scriptStatus === "ready";
|
|
124
106
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
...initialLayout(nextFigure),
|
|
130
|
-
...prev,
|
|
131
|
-
}));
|
|
132
|
-
}, [originalFigure, isScriptLoaded]);
|
|
133
|
-
|
|
134
|
-
const [layout, setLayout] = useState<Partial<Plotly.Layout>>(() => {
|
|
135
|
-
return {
|
|
136
|
-
...initialLayout(figure),
|
|
137
|
-
// Override with persisted values (dragmode, xaxis, yaxis)
|
|
138
|
-
...value,
|
|
139
|
-
};
|
|
107
|
+
const { figure, layout, handleReset } = usePlotlyLayout({
|
|
108
|
+
originalFigure,
|
|
109
|
+
initialValue: value,
|
|
110
|
+
isScriptLoaded,
|
|
140
111
|
});
|
|
141
112
|
|
|
142
|
-
const
|
|
143
|
-
|
|
144
|
-
setFigure(nextFigure);
|
|
145
|
-
setLayout(initialLayout(nextFigure));
|
|
113
|
+
const handleResetWithClear = useEvent(() => {
|
|
114
|
+
handleReset();
|
|
146
115
|
setValue({});
|
|
147
116
|
});
|
|
148
117
|
|
|
@@ -163,37 +132,13 @@ export const PlotlyComponent = memo(
|
|
|
163
132
|
<path d="M3 3v5h5" />
|
|
164
133
|
</svg>`,
|
|
165
134
|
},
|
|
166
|
-
click:
|
|
135
|
+
click: handleResetWithClear,
|
|
167
136
|
},
|
|
168
137
|
],
|
|
169
138
|
// Prioritize user's config
|
|
170
139
|
...configMemo,
|
|
171
140
|
};
|
|
172
|
-
}, [
|
|
173
|
-
|
|
174
|
-
const prevFigure = usePrevious(figure) ?? figure;
|
|
175
|
-
|
|
176
|
-
useEffect(() => {
|
|
177
|
-
const omitKeys = new Set<keyof Plotly.Layout>([
|
|
178
|
-
"autosize",
|
|
179
|
-
"dragmode",
|
|
180
|
-
"xaxis",
|
|
181
|
-
"yaxis",
|
|
182
|
-
]);
|
|
183
|
-
|
|
184
|
-
// If the key was updated externally (e.g. can be specifically passed in the config)
|
|
185
|
-
// then we need to update the layout
|
|
186
|
-
for (const key of omitKeys) {
|
|
187
|
-
if (!isEqual(figure.layout[key], prevFigure.layout[key])) {
|
|
188
|
-
omitKeys.delete(key);
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
// Update layout when figure.layout changes
|
|
193
|
-
// Omit keys that we don't want to override
|
|
194
|
-
const layout = Objects.omit(figure.layout, omitKeys);
|
|
195
|
-
setLayout((prev) => ({ ...prev, ...layout }));
|
|
196
|
-
}, [figure.layout, prevFigure.layout]);
|
|
141
|
+
}, [handleResetWithClear, configMemo]);
|
|
197
142
|
|
|
198
143
|
return (
|
|
199
144
|
<LazyPlot
|