@marimo-team/islands 0.19.7-dev10 → 0.19.7-dev16
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 +18335 -17736
- 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 +3 -2
- 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/markdown/markdown-renderer.tsx +6 -1
- package/src/core/export/hooks.ts +1 -1
- package/src/utils/__tests__/download.test.tsx +67 -13
- package/src/utils/download.ts +24 -8
- 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,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
|
);
|
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;
|
|
@@ -158,7 +158,7 @@ describe("getImageDataUrlForCell", () => {
|
|
|
158
158
|
expect(toPng).toHaveBeenCalledWith(mockElement);
|
|
159
159
|
});
|
|
160
160
|
|
|
161
|
-
it("should add printing classes before capture", async () => {
|
|
161
|
+
it("should add printing classes before capture when enablePrintMode is true", async () => {
|
|
162
162
|
vi.mocked(toPng).mockImplementation(async () => {
|
|
163
163
|
// Check classes are applied during capture
|
|
164
164
|
expect(mockElement.classList.contains("printing-output")).toBe(true);
|
|
@@ -167,18 +167,42 @@ describe("getImageDataUrlForCell", () => {
|
|
|
167
167
|
return mockDataUrl;
|
|
168
168
|
});
|
|
169
169
|
|
|
170
|
-
await getImageDataUrlForCell("cell-1" as CellId);
|
|
170
|
+
await getImageDataUrlForCell("cell-1" as CellId, true);
|
|
171
171
|
});
|
|
172
172
|
|
|
173
|
-
it("should remove printing classes after capture", async () => {
|
|
173
|
+
it("should remove printing classes after capture when enablePrintMode is true", async () => {
|
|
174
174
|
vi.mocked(toPng).mockResolvedValue(mockDataUrl);
|
|
175
175
|
|
|
176
|
-
await getImageDataUrlForCell("cell-1" as CellId);
|
|
176
|
+
await getImageDataUrlForCell("cell-1" as CellId, true);
|
|
177
177
|
|
|
178
178
|
expect(mockElement.classList.contains("printing-output")).toBe(false);
|
|
179
179
|
expect(document.body.classList.contains("printing")).toBe(false);
|
|
180
180
|
});
|
|
181
181
|
|
|
182
|
+
it("should add printing-output but NOT body.printing when enablePrintMode is false", async () => {
|
|
183
|
+
vi.mocked(toPng).mockImplementation(async () => {
|
|
184
|
+
// printing-output should still be added to the element
|
|
185
|
+
expect(mockElement.classList.contains("printing-output")).toBe(true);
|
|
186
|
+
// but body.printing should NOT be added
|
|
187
|
+
expect(document.body.classList.contains("printing")).toBe(false);
|
|
188
|
+
expect(mockElement.style.overflow).toBe("auto");
|
|
189
|
+
return mockDataUrl;
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
await getImageDataUrlForCell("cell-1" as CellId, false);
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
it("should cleanup printing-output when enablePrintMode is false", async () => {
|
|
196
|
+
mockElement.style.overflow = "hidden";
|
|
197
|
+
vi.mocked(toPng).mockResolvedValue(mockDataUrl);
|
|
198
|
+
|
|
199
|
+
await getImageDataUrlForCell("cell-1" as CellId, false);
|
|
200
|
+
|
|
201
|
+
expect(mockElement.classList.contains("printing-output")).toBe(false);
|
|
202
|
+
expect(document.body.classList.contains("printing")).toBe(false);
|
|
203
|
+
expect(mockElement.style.overflow).toBe("hidden");
|
|
204
|
+
});
|
|
205
|
+
|
|
182
206
|
it("should restore original overflow style after capture", async () => {
|
|
183
207
|
mockElement.style.overflow = "hidden";
|
|
184
208
|
vi.mocked(toPng).mockResolvedValue(mockDataUrl);
|
|
@@ -207,7 +231,7 @@ describe("getImageDataUrlForCell", () => {
|
|
|
207
231
|
expect(mockElement.style.overflow).toBe("scroll");
|
|
208
232
|
});
|
|
209
233
|
|
|
210
|
-
it("should maintain body.printing during concurrent captures", async () => {
|
|
234
|
+
it("should maintain body.printing during concurrent captures when enablePrintMode is true", async () => {
|
|
211
235
|
// Create a second element
|
|
212
236
|
const mockElement2 = document.createElement("div");
|
|
213
237
|
mockElement2.id = CellOutputId.create("cell-2" as CellId);
|
|
@@ -241,9 +265,9 @@ describe("getImageDataUrlForCell", () => {
|
|
|
241
265
|
return mockDataUrl;
|
|
242
266
|
});
|
|
243
267
|
|
|
244
|
-
// Start both captures concurrently
|
|
245
|
-
const capture1 = getImageDataUrlForCell("cell-1" as CellId);
|
|
246
|
-
const capture2 = getImageDataUrlForCell("cell-2" as CellId);
|
|
268
|
+
// Start both captures concurrently with enablePrintMode = true
|
|
269
|
+
const capture1 = getImageDataUrlForCell("cell-1" as CellId, true);
|
|
270
|
+
const capture2 = getImageDataUrlForCell("cell-2" as CellId, true);
|
|
247
271
|
|
|
248
272
|
// Let second capture complete first
|
|
249
273
|
resolveSecond!();
|
|
@@ -264,6 +288,30 @@ describe("getImageDataUrlForCell", () => {
|
|
|
264
288
|
|
|
265
289
|
mockElement2.remove();
|
|
266
290
|
});
|
|
291
|
+
|
|
292
|
+
it("should not interfere with body.printing during concurrent captures when enablePrintMode is false", async () => {
|
|
293
|
+
// Create a second element
|
|
294
|
+
const mockElement2 = document.createElement("div");
|
|
295
|
+
mockElement2.id = CellOutputId.create("cell-2" as CellId);
|
|
296
|
+
document.body.append(mockElement2);
|
|
297
|
+
|
|
298
|
+
vi.mocked(toPng).mockImplementation(async () => {
|
|
299
|
+
// body.printing should never be added when enablePrintMode is false
|
|
300
|
+
expect(document.body.classList.contains("printing")).toBe(false);
|
|
301
|
+
return mockDataUrl;
|
|
302
|
+
});
|
|
303
|
+
|
|
304
|
+
// Start both captures concurrently with enablePrintMode = false
|
|
305
|
+
const capture1 = getImageDataUrlForCell("cell-1" as CellId, false);
|
|
306
|
+
const capture2 = getImageDataUrlForCell("cell-2" as CellId, false);
|
|
307
|
+
|
|
308
|
+
await Promise.all([capture1, capture2]);
|
|
309
|
+
|
|
310
|
+
// body.printing should still not be present
|
|
311
|
+
expect(document.body.classList.contains("printing")).toBe(false);
|
|
312
|
+
|
|
313
|
+
mockElement2.remove();
|
|
314
|
+
});
|
|
267
315
|
});
|
|
268
316
|
|
|
269
317
|
describe("downloadHTMLAsImage", () => {
|
|
@@ -342,7 +390,7 @@ describe("downloadHTMLAsImage", () => {
|
|
|
342
390
|
expect(cleanup).toHaveBeenCalled();
|
|
343
391
|
});
|
|
344
392
|
|
|
345
|
-
it("should
|
|
393
|
+
it("should delegate body.printing management to prepare function", async () => {
|
|
346
394
|
let bodyPrintingDuringCapture = false;
|
|
347
395
|
vi.mocked(toPng).mockImplementation(async () => {
|
|
348
396
|
// Capture the state during toPng execution
|
|
@@ -350,7 +398,14 @@ describe("downloadHTMLAsImage", () => {
|
|
|
350
398
|
return mockDataUrl;
|
|
351
399
|
});
|
|
352
400
|
const cleanup = vi.fn();
|
|
353
|
-
|
|
401
|
+
// Mock prepare that adds body.printing
|
|
402
|
+
const prepare = vi.fn().mockImplementation(() => {
|
|
403
|
+
document.body.classList.add("printing");
|
|
404
|
+
return () => {
|
|
405
|
+
document.body.classList.remove("printing");
|
|
406
|
+
cleanup();
|
|
407
|
+
};
|
|
408
|
+
});
|
|
354
409
|
|
|
355
410
|
await downloadHTMLAsImage({
|
|
356
411
|
element: mockElement,
|
|
@@ -358,9 +413,8 @@ describe("downloadHTMLAsImage", () => {
|
|
|
358
413
|
prepare,
|
|
359
414
|
});
|
|
360
415
|
|
|
361
|
-
// body.printing should
|
|
362
|
-
|
|
363
|
-
expect(bodyPrintingDuringCapture).toBe(false);
|
|
416
|
+
// body.printing should be added by prepare function
|
|
417
|
+
expect(bodyPrintingDuringCapture).toBe(true);
|
|
364
418
|
expect(document.body.classList.contains("printing")).toBe(false);
|
|
365
419
|
expect(prepare).toHaveBeenCalledWith(mockElement);
|
|
366
420
|
expect(cleanup).toHaveBeenCalled();
|
package/src/utils/download.ts
CHANGED
|
@@ -59,34 +59,51 @@ function releaseBodyPrinting() {
|
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
/**
|
|
63
63
|
* Prepare a cell element for screenshot capture.
|
|
64
|
-
*
|
|
64
|
+
*
|
|
65
|
+
* @param element - The cell output element to prepare
|
|
66
|
+
* @param enablePrintMode - When true, adds a 'printing' class to the body.
|
|
67
|
+
* This can cause layout shifts that cause the page to scroll.
|
|
68
|
+
* @returns A cleanup function to restore the element's original state
|
|
65
69
|
*/
|
|
66
|
-
function prepareCellElementForScreenshot(
|
|
70
|
+
function prepareCellElementForScreenshot(
|
|
71
|
+
element: HTMLElement,
|
|
72
|
+
enablePrintMode: boolean,
|
|
73
|
+
) {
|
|
67
74
|
element.classList.add("printing-output");
|
|
68
|
-
|
|
75
|
+
if (enablePrintMode) {
|
|
76
|
+
acquireBodyPrinting();
|
|
77
|
+
}
|
|
69
78
|
const originalOverflow = element.style.overflow;
|
|
70
79
|
element.style.overflow = "auto";
|
|
71
80
|
|
|
72
81
|
return () => {
|
|
73
82
|
element.classList.remove("printing-output");
|
|
74
|
-
|
|
83
|
+
if (enablePrintMode) {
|
|
84
|
+
releaseBodyPrinting();
|
|
85
|
+
}
|
|
75
86
|
element.style.overflow = originalOverflow;
|
|
76
87
|
};
|
|
77
88
|
}
|
|
78
89
|
|
|
79
90
|
/**
|
|
80
91
|
* Capture a cell output as a PNG data URL.
|
|
92
|
+
*
|
|
93
|
+
* @param cellId - The ID of the cell to capture
|
|
94
|
+
* @param enablePrintMode - When true, enables print mode which adds a 'printing' class to the body.
|
|
95
|
+
* This can cause layout shifts that cause the page to scroll.
|
|
96
|
+
* @returns The PNG as a data URL, or undefined if the cell element wasn't found
|
|
81
97
|
*/
|
|
82
98
|
export async function getImageDataUrlForCell(
|
|
83
99
|
cellId: CellId,
|
|
100
|
+
enablePrintMode = true,
|
|
84
101
|
): Promise<string | undefined> {
|
|
85
102
|
const element = findElementForCell(cellId);
|
|
86
103
|
if (!element) {
|
|
87
104
|
return;
|
|
88
105
|
}
|
|
89
|
-
const cleanup = prepareCellElementForScreenshot(element);
|
|
106
|
+
const cleanup = prepareCellElementForScreenshot(element, enablePrintMode);
|
|
90
107
|
|
|
91
108
|
try {
|
|
92
109
|
return await toPng(element);
|
|
@@ -110,7 +127,7 @@ export async function downloadCellOutputAsImage(
|
|
|
110
127
|
await downloadHTMLAsImage({
|
|
111
128
|
element,
|
|
112
129
|
filename,
|
|
113
|
-
prepare: prepareCellElementForScreenshot,
|
|
130
|
+
prepare: () => prepareCellElementForScreenshot(element, true),
|
|
114
131
|
});
|
|
115
132
|
}
|
|
116
133
|
|
|
@@ -127,7 +144,6 @@ export async function downloadHTMLAsImage(opts: {
|
|
|
127
144
|
|
|
128
145
|
let cleanup: (() => void) | undefined;
|
|
129
146
|
if (prepare) {
|
|
130
|
-
// Let the prepare function handle adding classes (e.g., body.printing)
|
|
131
147
|
cleanup = prepare(element);
|
|
132
148
|
} else {
|
|
133
149
|
// When no prepare function is provided (e.g., downloading full notebook),
|