@marimo-team/islands 0.23.17-dev8 → 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (643) hide show
  1. package/dist/{ConnectedDataExplorerComponent-f9vLjQiF.js → ConnectedDataExplorerComponent-BUC1MrsF.js} +24 -24
  2. package/dist/{ErrorBoundary-DhLqwSWA.js → ErrorBoundary-BniTEhHn.js} +7 -7
  3. package/dist/{ImageComparisonComponent-C3y7L3eJ.js → ImageComparisonComponent-B7b8DcJI.js} +42 -31
  4. package/dist/{Plot-YQOuVIei.js → Plot-eTseCFf_.js} +4 -4
  5. package/dist/_initCloneObject-DNUst5Cg.js +91 -0
  6. package/dist/abnfDiagram-N423BO3Z-DA4j92-C.js +112 -0
  7. package/dist/{any-language-editor-DifE-fl7.js → any-language-editor-LHl8ZmVN.js} +26 -26
  8. package/dist/apl-Cwo7GIH7.js +4 -0
  9. package/dist/{arc-CTIpFoOn.js → arc-9nABupDE.js} +2 -2
  10. package/dist/architecture-TIHT7OUA-DxLlkuAK.js +5 -0
  11. package/dist/{architectureDiagram-VXUJARFQ-DXwkyAaM.js → architectureDiagram-T3A2C74G-BBlBK1Oh.js} +327 -214
  12. package/dist/{arrays-sEtDRoG4.js → arrays-C56grfjL.js} +1 -1
  13. package/dist/asciiarmor-jrfEZ3j_.js +4 -0
  14. package/dist/asn1-BNEiJ4nQ.js +4 -0
  15. package/dist/assets/__vite-browser-external-DUz7vvG0.js +1 -0
  16. package/dist/assets/{worker-CDEKsBgX.js → worker-Cl1KJG2_.js} +2 -2
  17. package/dist/blockDiagram-VBNYF7ZC-Datz1WNn.js +3284 -0
  18. package/dist/brainfuck-BCunvTbd.js +4 -0
  19. package/dist/{button-BSm8IXRU.js → button-Dr2uAwhT.js} +9 -7
  20. package/dist/{c4Diagram-YG6GDRKO-B6dZC_oU.js → c4Diagram-5PPSVZJV-DTIsibpE.js} +165 -162
  21. package/dist/{capabilities-C6OQ5YBO.js → capabilities-BilXeZ7p.js} +2 -2
  22. package/dist/{channel-BN070S0F.js → channel-CuV_jmG4.js} +1 -1
  23. package/dist/chat-ui-o-tATfmW.js +8619 -0
  24. package/dist/{check-DP7U0H0G.js → check-58HHfHKy.js} +1 -1
  25. package/dist/chunk-2GRJ4B5K-DRayWnnu.js +68 -0
  26. package/dist/{chunk-QZHKN3VN-Dym5BS7y.js → chunk-2Q5K7J3B-BSLyFOHa.js} +1 -1
  27. package/dist/chunk-3NCLNEKW-BPlp8K7N.js +11 -0
  28. package/dist/chunk-4I5QYGJK-CYJC3pkC.js +260 -0
  29. package/dist/chunk-5FCAYU7R-C3cMIeyz.js +24 -0
  30. package/dist/{chunk-5FQGJX7Z-B9WoXK1R.js → chunk-5FQGJX7Z-BRZ_XYUw.js} +6 -6
  31. package/dist/chunk-5HE753X5-D2jFCVXb.js +34 -0
  32. package/dist/chunk-5JV3BV7I-B7tzprBU.js +50 -0
  33. package/dist/{chunk-DI55MBZ5-D4Y8yV8B.js → chunk-5RXB4S5H-DcCPfb0q.js} +373 -327
  34. package/dist/chunk-5TONJI2A-LRqbgPte.js +59 -0
  35. package/dist/{chunk-FMBD7UC4-quJmebXa.js → chunk-5VM5RSS4-ChXEBudA.js} +1 -1
  36. package/dist/chunk-6Q2QTUOP-zcnb3OaV.js +503 -0
  37. package/dist/{chunk-HN2XXSSU-Bv0QkeMr.js → chunk-7BUUIJ7U-CkIbJNZo.js} +32 -25
  38. package/dist/chunk-7Z6QIM7H-1j-x7ddW.js +606 -0
  39. package/dist/{chunk-FRFDVMJY-BHBqN-vD.js → chunk-BIQX33UG-B-BYk6sM.js} +3 -3
  40. package/dist/chunk-Bfp04NdC.js +25 -0
  41. package/dist/chunk-CQNSW5MT-DBXDKSOU.js +34 -0
  42. package/dist/{chunk-4F5CHEZ2-VlodlEGo.js → chunk-CYSBUYHQ-Cv-vKQV-.js} +1 -1
  43. package/dist/{chunk-SJTYNZTY-DnXoKWpW.js → chunk-EMLP6XTP-DCtMkXLF.js} +1 -1
  44. package/dist/{chunk-B4BG7PRW-B_z2FEHm.js → chunk-GF5L2VYU-esTxzELH.js} +878 -636
  45. package/dist/chunk-I66GZJ75-9xAsFrdW.js +3744 -0
  46. package/dist/chunk-J7OUQ5F2-CbNBTlFM.js +81 -0
  47. package/dist/chunk-JG7HCLWE-CZIm6axg.js +59 -0
  48. package/dist/{flowDiagram-NV44I4VS-BRhSg-ro.js → chunk-JQJVKLGR-ZALkKVji.js} +1019 -1001
  49. package/dist/{chunk-4BX2VUAB-iU5lQTDI.js → chunk-JWPE2WC7-C_Daz-Oc.js} +1 -1
  50. package/dist/{chunk-QN33PNHL-DPBNNzpR.js → chunk-KBJHAD2P-B7m9DztL.js} +3 -2
  51. package/dist/chunk-KEIR6QF5-aP6TmWQ-.js +21095 -0
  52. package/dist/{chunk-UMXZTB3W-D1uHz8MN.js → chunk-MOZMSUNE-BQi-ggQx.js} +7 -4
  53. package/dist/{chunk-S3R3BYOJ-BdgLc8AM.js → chunk-NSK5VX7P-BmmoJBbx.js} +320 -29
  54. package/dist/chunk-OSBZ3O6U-BcrmpSY_.js +22 -0
  55. package/dist/{chunk-TQ3KTPDO-CsDx6v37.js → chunk-QBLGF6JB-BACuPUWb.js} +3 -3
  56. package/dist/chunk-QR6OTTB3-C4L1dLRd.js +3762 -0
  57. package/dist/{chunk-B2363JML-zL3VngtH.js → chunk-R7FJI6CG-BYAXJpIb.js} +3 -3
  58. package/dist/chunk-RYQCIY6F-poA0Ugpr.js +243 -0
  59. package/dist/chunk-U6XO7XAA-I8tCjTeT.js +60 -0
  60. package/dist/chunk-UBXNYLIW-C8LueN5Q.js +34 -0
  61. package/dist/{chunk-ATLVNIR6-qFiszptQ.js → chunk-W5SLKNZC-DK-_KuKT.js} +2 -2
  62. package/dist/{chunk-JA3XYJ7Z-CY4CRbV5.js → chunk-WRU74C26-DLgw-V0j.js} +262 -451
  63. package/dist/chunk-XXDRQBXY-Dzcp3rUR.js +9 -0
  64. package/dist/chunk-Y2CYZVJY-DX3DSigL.js +13 -0
  65. package/dist/{chunk-PL6DKKU2-CAHKc95s.js → chunk-YOTPTUD7-C8qfgaz5.js} +5 -5
  66. package/dist/{chunk-MI3HLSF2-HGWI-8Pg.js → chunk-ZIRB5QZD-_JX1DzEJ.js} +12 -8
  67. package/dist/classDiagram-JCYQIIEL-D8A6ZyXv.js +32 -0
  68. package/dist/classDiagram-v2-OCEON4UE-DIdYl-t3.js +32 -0
  69. package/dist/{click-outside-container-BSIeYt4y.js → click-outside-container-BZNsAj09.js} +2 -2
  70. package/dist/{clike-7lgyEYRk.js → clike-CWndBX_M.js} +1 -1
  71. package/dist/clojure-2X0Rfij9.js +4 -0
  72. package/dist/cmake-DEwzCy9U.js +4 -0
  73. package/dist/cobol-Ck4eCoAB.js +4 -0
  74. package/dist/{code-block-37QAKDTI-MSxEjskJ.js → code-block-37QAKDTI-B4pWe5MI.js} +4 -4
  75. package/dist/coffeescript-bB1IDwhg.js +4 -0
  76. package/dist/{common-BLoQG6ym.js → common-DV4qU2ew.js} +797 -804
  77. package/dist/commonlisp-BDYrVBNC.js +4 -0
  78. package/dist/{compiler-runtime-CEbnTgxf.js → compiler-runtime-DsR6imPN.js} +2 -2
  79. package/dist/{copy-DNq8q3zw.js → copy-C7ZKMKox.js} +5 -5
  80. package/dist/{cose-bilkent-S5V4N54A-BYj0aL7z.js → cose-bilkent-JH36ORCC-D6iQzSi6.js} +6 -5
  81. package/dist/crystal-BSoiVUiH.js +4 -0
  82. package/dist/css-w1h9i21f.js +4 -0
  83. package/dist/cynefin-VYW2F7L2-DnZOHyNF.js +5 -0
  84. package/dist/cynefinDiagram-MW4NZA55-B1GNPS2u.js +367 -0
  85. package/dist/cypher-B4xzuKGP.js +4 -0
  86. package/dist/{cytoscape.esm-Dr8XzXWK.js → cytoscape.esm-BPa26Dup.js} +393 -334
  87. package/dist/d-D50Bz34p.js +4 -0
  88. package/dist/{dagre-By_QsQgc.js → dagre-ThTNj8pe.js} +60 -45
  89. package/dist/dagre-VZM6K2ZE-DEs5dfXA.js +343 -0
  90. package/dist/{data-grid-overlay-editor-BWRG2b_o.js → data-grid-overlay-editor-Ci7TXVf5.js} +5 -5
  91. package/dist/{debounce-BOD3DbfP.js → debounce-D784bpms.js} +2 -2
  92. package/dist/{defaultLocale-BpsHxBd7.js → defaultLocale-CMezyvMc.js} +26 -26
  93. package/dist/diagram-7IWD3JNH-Bdk1_wJO.js +321 -0
  94. package/dist/diagram-B4RE2ZJO-Be9eYLJ0.js +464 -0
  95. package/dist/{diagram-S2PKOQOG-CGh4OMEV.js → diagram-LBJQPF4R-BNSnzxFw.js} +26 -18
  96. package/dist/{diagram-PSM6KHXK-D4ftnaua.js → diagram-Q27KOJAE-NPRzyGtd.js} +68 -63
  97. package/dist/diagram-UB23O5K3-Dogz4itg.js +236 -0
  98. package/dist/diff-BMdzfXq-.js +4 -0
  99. package/dist/{dist-BTdrwBWP.js → dist-72nb8Uag.js} +3 -3
  100. package/dist/{dist-CV79CsQ0.js → dist-9PC5KxMl.js} +2 -2
  101. package/dist/{dist-BOMbzyb3.js → dist-Awj73yUw.js} +3 -3
  102. package/dist/{dist-w_gWE5Wf.js → dist-B0Ctcrt9.js} +1 -1
  103. package/dist/{dist-BO5HRiTf.js → dist-B1Donbpk.js} +2 -2
  104. package/dist/dist-BC6wzWNb.js +5 -0
  105. package/dist/{dist-De-GlSAs.js → dist-BJ2IUa0l.js} +15 -9
  106. package/dist/dist-BMd_RcOy.js +5 -0
  107. package/dist/dist-BZEWjN6r.js +5 -0
  108. package/dist/{dist-BP39XM8u.js → dist-B_K4AAkc.js} +1 -1
  109. package/dist/dist-BeuGjR3n.js +6 -0
  110. package/dist/dist-BfDQCUe6.js +5 -0
  111. package/dist/dist-BhNblTOV.js +8 -0
  112. package/dist/{dist-BPF0gTRZ.js → dist-C0ifRfXi.js} +1 -1
  113. package/dist/{dist-pqIwD8VD.js → dist-C3mEki35.js} +2 -2
  114. package/dist/{dist-LpLXa9Lb.js → dist-CNfV2vDI.js} +2 -2
  115. package/dist/{dist-DviUBLUp.js → dist-COcQ5Vyc.js} +4 -4
  116. package/dist/dist-CRCm4Fuo.js +5 -0
  117. package/dist/{dist-4lVIWUT3.js → dist-CSZpLb9d.js} +1 -1
  118. package/dist/{dist-BIEt-mlF.js → dist-CWswQBvu.js} +1 -1
  119. package/dist/{dist-D3bdsa1d.js → dist-CXYro_Nw.js} +4 -4
  120. package/dist/{dist-CRmSjkLP.js → dist-Ckfsc8C3.js} +2 -2
  121. package/dist/{dist-CSlJrrAw.js → dist-Cyq6Pxtv.js} +1 -1
  122. package/dist/{dist-JGehap7K.js → dist-D-BWPyoX.js} +5 -5
  123. package/dist/{dist-BCX980mU.js → dist-D-YB6j-O.js} +2 -2
  124. package/dist/{dist-DgjbnqTg.js → dist-D1vYHETp.js} +2 -2
  125. package/dist/{dist-BpeiYpG2.js → dist-D9-ePb6D.js} +2 -2
  126. package/dist/dist-DBPEbGkd.js +8 -0
  127. package/dist/{dist-C2_4pjuS.js → dist-DC409ROm.js} +1 -1
  128. package/dist/{dist-BdqCKQ1O.js → dist-DJRUd9aM.js} +2 -2
  129. package/dist/{dist-DaXJPX8F.js → dist-DLvxZEAK.js} +2 -2
  130. package/dist/dist-DSsl8IAI.js +5 -0
  131. package/dist/{dist-3NCqaWjt.js → dist-D_ulymry.js} +2 -2
  132. package/dist/{dist-DZwp8lro.js → dist-DgY27bJ4.js} +3 -3
  133. package/dist/{dist-BwhXBwMd.js → dist-DiwVZiK7.js} +1 -1
  134. package/dist/{dist-DwqBJ014.js → dist-DnYHhW6c.js} +2 -2
  135. package/dist/dist-Dx0kkrek.js +5 -0
  136. package/dist/{dist-DsoKosxi.js → dist-HaLHv0k5.js} +2 -3
  137. package/dist/dist-NKA1TU8a.js +6 -0
  138. package/dist/dist-ZFcsIdHj.js +8 -0
  139. package/dist/{dist-C18MUWTj.js → dist-iZ8-rtUy.js} +2 -2
  140. package/dist/{dist-DIlxLFXG.js → dist-j30bBjjN.js} +15 -15
  141. package/dist/{dist-SXNmlE8A.js → dist-kOCFEa1U.js} +3 -3
  142. package/dist/{dist-CFSb_Frm.js → dist-sxRUVPmt.js} +1 -1
  143. package/dist/dist-uA2RbGmY.js +5 -0
  144. package/dist/{dist-B2jmQKKx.js → dist-xVU82Nq7.js} +2 -2
  145. package/dist/dist-zSCo-xCB.js +8 -0
  146. package/dist/{dockerfile-B82Pkz_V.js → dockerfile-DImRFUlA.js} +1 -1
  147. package/dist/dtd-B9dCT0pu.js +4 -0
  148. package/dist/dylan-DLghDyuR.js +4 -0
  149. package/dist/ebnfDiagram-BXEA7PRR-CqRWkG7L.js +129 -0
  150. package/dist/ecl-w0qdPHDB.js +4 -0
  151. package/dist/eiffel-C5AWRCNP.js +4 -0
  152. package/dist/elm-CT8FZrOm.js +4 -0
  153. package/dist/{erDiagram-Q2GNP2WA-BcKAHFqF.js → erDiagram-JOGREHBK-BZMJX-Au.js} +568 -436
  154. package/dist/erlang-DPD-9M5g.js +4 -0
  155. package/dist/{error-banner-B_GQfxxD.js → error-banner-BwCLtmkH.js} +6 -6
  156. package/dist/{esm-CuQHjs36.js → esm-BJ4n0NUT.js} +1 -1
  157. package/dist/{esm-DKOv6P2M.js → esm-Dusmf6uu.js} +105 -105
  158. package/dist/{esm-DzZVaNH4.js → esm-QLUgkqzZ.js} +6 -6
  159. package/dist/eventmodeling-45OFAUF4-D8Kbnsr6.js +5 -0
  160. package/dist/{extends-w2_S44bV.js → extends-iFBneQO_.js} +9 -9
  161. package/dist/{factor-Bq2mGIHt.js → factor-BonZgUGg.js} +1 -1
  162. package/dist/factor-rFfeJu3r.js +4 -0
  163. package/dist/flowDiagram-UKHOOZJN-DqIE8_b3.js +21 -0
  164. package/dist/{formats-Dwq1THhr.js → formats-HSfYlcA8.js} +7 -7
  165. package/dist/forth-C-3AyQx4.js +4 -0
  166. package/dist/fortran-BSN9TeT7.js +4 -0
  167. package/dist/ganttDiagram-PKOTCBZU-Bc9puoXb.js +2207 -0
  168. package/dist/gas-DwmuvQpB.js +4 -0
  169. package/dist/gherkin-gmCjL-Sn.js +4 -0
  170. package/dist/{gitGraph-G5XIXVHT-BjTx0kww.js → gitGraph-TEB2WS4Q-DVzLmQHc.js} +2 -3
  171. package/dist/gitGraphDiagram-DS77QQ5N-CqKr-Dfg.js +766 -0
  172. package/dist/{glide-data-editor-B9K6-MJe.js → glide-data-editor-BI2i_IEE.js} +18 -18
  173. package/dist/graphlib-DMVIRZap.js +614 -0
  174. package/dist/groovy-DCjvesOy.js +4 -0
  175. package/dist/hasIn-synBnXn4.js +119 -0
  176. package/dist/haskell-C1p0D9L8.js +4 -0
  177. package/dist/haxe-q-fgv0zr.js +5 -0
  178. package/dist/{html-to-image-CZ1kLKkq.js → html-to-image-BOiFHx3u.js} +7535 -3056
  179. package/dist/idl-Bmg4bsnK.js +4 -0
  180. package/dist/{info-VBDWY6EO-CA67FznA.js → info-DKCQHKI2-BxOTqQHM.js} +2 -3
  181. package/dist/infoDiagram-6WML65LV-B869X2KY.js +37 -0
  182. package/dist/{input-C5K4VBvB.js → input-BRE2a7Ay.js} +13 -13
  183. package/dist/{_baseFor-4jw-lnCC.js → isArrayLikeObject-CBUaLibE.js} +96 -29
  184. package/dist/{isEmpty-CJJMn-QP.js → isEmpty-CgME6WRV.js} +15 -15
  185. package/dist/{isSymbol-CoUCgMCM.js → isSymbol-Ch3GYg4S.js} +1 -1
  186. package/dist/ishikawaDiagram-WSZJBQD7-BrOMFBYy.js +731 -0
  187. package/dist/javascript-BY5QZ-eN.js +4 -0
  188. package/dist/{journeyDiagram-XKPGCS4Q-DEal0aT1.js → journeyDiagram-NVQOT4AX-CTwHlsTm.js} +124 -123
  189. package/dist/{jsx-runtime-DebpN0FN.js → jsx-runtime-Dp_oQwaf.js} +1 -1
  190. package/dist/julia-DbR1YalK.js +4 -0
  191. package/dist/{kanban-definition-3W4ZIXB7-Dl90wENN.js → kanban-definition-27J2QSJJ-CKowzO9_.js} +51 -45
  192. package/dist/{katex-C4t-BmrK.js → katex-Ci33kJVq.js} +1 -1
  193. package/dist/{katex-Bld7b-fk.js → katex-Dp22h6yO.js} +2871 -3002
  194. package/dist/{label-DjoYwqmj.js → label-CMh2d8pJ.js} +6 -6
  195. package/dist/{line-C43FIPBd.js → line-Bc27KE1D.js} +3 -3
  196. package/dist/{linear-H_vsH9ao.js → linear-6pDlrp1I.js} +4 -4
  197. package/dist/livescript-BDUooIeL.js +4 -0
  198. package/dist/{loader-DX-IDS7n.js → loader-DTnbNSVZ.js} +11 -11
  199. package/dist/lua-CswAWSkH.js +4 -0
  200. package/dist/main.js +747 -752
  201. package/dist/map-BQ_Xp80D.js +137 -0
  202. package/dist/mathematica-Bw7v11B5.js +4 -0
  203. package/dist/mbox-j35IMz1j.js +4 -0
  204. package/dist/merge-CDbSrd9f.js +69 -0
  205. package/dist/mermaid-4DMBBIKO-BZSpTmcx.js +6 -0
  206. package/dist/mermaid-DpAz2sTy.js +1265 -0
  207. package/dist/mermaid-parser.core-BQzz3_BI.js +87 -0
  208. package/dist/{mhchem-EGhUZR1V.js → mhchem-BDHjke3h.js} +1 -1
  209. package/dist/{micromark-factory-space-CwHmg6iz.js → micromark-factory-space-Cr4NxAt3.js} +1 -1
  210. package/dist/{mindmap-definition-VGOIOE7T-CCDupjWW.js → mindmap-definition-FAOFIHXS-CTsi-HFj.js} +126 -80
  211. package/dist/mirc-Ba_RHVXO.js +4 -0
  212. package/dist/mllike-DbTP2dPp.js +6 -0
  213. package/dist/modelica-lpT3V1X6.js +4 -0
  214. package/dist/mscgen-BN4ZSJMx.js +6 -0
  215. package/dist/mumps-uI5g1A0g.js +4 -0
  216. package/dist/{node-sql-parser-v1Vi-Fft.js → node-sql-parser-BaLGWQe1.js} +1 -1
  217. package/dist/{now-Ch98bJO_.js → now-sFWt-GLC.js} +2 -2
  218. package/dist/{nsis-i9_sgigf.js → nsis-C68fFq_o.js} +1 -1
  219. package/dist/nsis-Df56GiRg.js +4 -0
  220. package/dist/ntriples-B3LWuG7W.js +4 -0
  221. package/dist/{number-overlay-editor-Ck_mc_gT.js → number-overlay-editor-CeBHRJvI.js} +3 -3
  222. package/dist/octave-CovfQgOx.js +4 -0
  223. package/dist/{once-B60G2fuJ.js → once-Boutk_9X.js} +1 -1
  224. package/dist/{ordinal-Bkv2-veX.js → ordinal-Bdajf2BE.js} +1 -1
  225. package/dist/oz-DQQAvVFb.js +4 -0
  226. package/dist/{packet-DYOGHKS2-Bkgofxf3.js → packet-7NZHBO7P-BG8whXXH.js} +2 -3
  227. package/dist/pascal-xz94P9sf.js +4 -0
  228. package/dist/pegDiagram-VL7TDLO6-CNpT8Sqz.js +124 -0
  229. package/dist/perl-aEWKE-1n.js +4 -0
  230. package/dist/pick-CaEWivSF.js +47 -0
  231. package/dist/{pie-VRWISCQL-B1AMhN_7.js → pie-RZYD4A2V-Cc_QhFbT.js} +2 -3
  232. package/dist/pieDiagram-7S7Q4E2Y-Ct8jRpe_.js +219 -0
  233. package/dist/pig-DB6DOZl7.js +4 -0
  234. package/dist/powershell-DM5saUx1.js +4 -0
  235. package/dist/{precisionRound-CnHPY_5v.js → precisionRound-BOoJTbDj.js} +1 -1
  236. package/dist/{process-output-bVfbcx5_.js → process-output-HrsM52f8.js} +7 -7
  237. package/dist/properties-BGjYQuGo.js +4 -0
  238. package/dist/protobuf-BPpEyPud.js +4 -0
  239. package/dist/{pug-BhE2JRSg.js → pug-DFPPZ3LA.js} +1 -1
  240. package/dist/pug-uJzB88ft.js +4 -0
  241. package/dist/puppet-oIm2d_Lg.js +4 -0
  242. package/dist/{purify.es-EnR5yhgI.js → purify.es-DR5PNXwx.js} +160 -155
  243. package/dist/python-WE57eUzD.js +4 -0
  244. package/dist/q-CR8xPodo.js +4 -0
  245. package/dist/{quadrantDiagram-AYHSOK5B-BqDB9tUC.js → quadrantDiagram-CIZ2JOQS-B5n_xFcF.js} +429 -401
  246. package/dist/r-CJdmQZNj.js +4 -0
  247. package/dist/{radar-ZZBFDIW7-C2b7A32s.js → radar-I7S5WNFK-OhUkecXA.js} +2 -3
  248. package/dist/railroad-3IZDKUUU-1CmOpo1B.js +5 -0
  249. package/dist/railroad-abnf-AHOZXSZD-DmH4lsDS.js +5 -0
  250. package/dist/railroad-ebnf-EBAXGLYW-CzK0md4e.js +5 -0
  251. package/dist/railroad-peg-LSFZ7HO6-DOklooKz.js +5 -0
  252. package/dist/railroadDiagram-AXF67PYL-BbUWbtf8.js +100 -0
  253. package/dist/{react-DA-nE2FX.js → react-DhGsCS90.js} +1 -1
  254. package/dist/{react-dom-BTJzcVJ9.js → react-dom-CmENFV8Q.js} +2 -2
  255. package/dist/{react-vega-BazDALhI.js → react-vega-zyfTF9SY.js} +8036 -4796
  256. package/dist/{requirementDiagram-UZGBJVZJ-KbVt8SPH.js → requirementDiagram-LRYGKXZP-CpoDmKSf.js} +137 -105
  257. package/dist/{reveal-component-BejXPHja.js → reveal-component-CYZAzXrV.js} +27 -28
  258. package/dist/rough.esm-lGyFQ0B-.js +1363 -0
  259. package/dist/rpm-Cm5K4RH9.js +5 -0
  260. package/dist/ruby-ArsuTozQ.js +4 -0
  261. package/dist/sankeyDiagram-W5VNT64P-D82rYiAG.js +942 -0
  262. package/dist/sas-DShligrE.js +4 -0
  263. package/dist/scheme-kDLirQL7.js +4 -0
  264. package/dist/sequenceDiagram-SI44F4Z6-DgVKU1s5.js +4281 -0
  265. package/dist/shell-CVQuWP_N.js +4 -0
  266. package/dist/sieve-BW-ePwnq.js +4 -0
  267. package/dist/sizeCapture-X5ZJPWSS-BQgxHTji.js +48 -0
  268. package/dist/smalltalk-DI4aAXxY.js +4 -0
  269. package/dist/sparql-B2sp0oiz.js +4 -0
  270. package/dist/{spec-CQKL_D3i.js → spec-BL1GSUUF.js} +4 -4
  271. package/dist/{src-DV3ha_nA.js → src-BwVZVGyf.js} +13 -22
  272. package/dist/{stateDiagram-FKZM4ZOC-ByOvQf2n.js → stateDiagram-OKZ733FA-Cc9BchXz.js} +61 -58
  273. package/dist/stateDiagram-v2-UEYNNEHI-Dd4Tuw6F.js +32 -0
  274. package/dist/{step-BqHnkgWE.js → step-BqVgkWtk.js} +1 -1
  275. package/dist/stex-D2rme5UG.js +4 -0
  276. package/dist/{strings-DIy9NAmg.js → strings-DMLVGXRo.js} +305 -305
  277. package/dist/style.css +1 -1
  278. package/dist/stylus-xxO-85eO.js +4 -0
  279. package/dist/swift-Ctg533nZ.js +4 -0
  280. package/dist/swimlanes-SLNWSIFB-BHvhO5uv.js +5564 -0
  281. package/dist/swimlanesDiagram-ULZ7WXOC-aI_zgQ8O.js +33 -0
  282. package/dist/{swiper-component-CEdAYjb7.js → swiper-component-Cx0cRWLk.js} +6 -6
  283. package/dist/tcl-phm9c5Nd.js +4 -0
  284. package/dist/textile-CphjAg90.js +4 -0
  285. package/dist/{time-Bb4A7I6a.js → time-DAJu9fnj.js} +4 -4
  286. package/dist/timeline-definition-Z64GVDOM-BAHuDYyA.js +1107 -0
  287. package/dist/{timer-BpI_FKSA.js → timer-aIIabkbI.js} +1 -1
  288. package/dist/{toDate-CqhBWjvO.js → toDate-BGM7kFtQ.js} +6 -6
  289. package/dist/toml-BUuMK772.js +4 -0
  290. package/dist/{tooltip-f-qR0iUx.js → tooltip-BtUxZT5h.js} +7 -7
  291. package/dist/treeView-QDETBFTQ-DsLN_c8p.js +5 -0
  292. package/dist/{treemap-GDKQZRPO-SDux0AV8.js → treemap-6X3UGDF4-K1bi3LJm.js} +2 -3
  293. package/dist/troff-lCtc05A3.js +4 -0
  294. package/dist/ttcn-CcykzBcW.js +4 -0
  295. package/dist/ttcn-cfg-C-XYdqpE.js +4 -0
  296. package/dist/turtle-CpfVZs8G.js +4 -0
  297. package/dist/{types-DicH9Oi0.js → types-DT8UHI5w.js} +1 -1
  298. package/dist/{use-vega-container-remeasure-DGNrIQSk.js → use-vega-container-remeasure-B7OD7yUY.js} +3 -3
  299. package/dist/{useAsyncData-CYOQb1EW.js → useAsyncData-CDcbh-Qv.js} +5 -5
  300. package/dist/{useDateFormatter-Bt2qr_XS.js → useDateFormatter-B_vTzxpm.js} +4 -4
  301. package/dist/{useDeepCompareMemoize-CSHQeQEI.js → useDeepCompareMemoize-Bj6QvwiG.js} +3 -3
  302. package/dist/{useIframeCapabilities-kA09ykNq.js → useIframeCapabilities-CxuXXwjj.js} +4 -4
  303. package/dist/{useLifecycle-CMJGqBaY.js → useLifecycle-Bw4wRj_O.js} +7 -7
  304. package/dist/{useTheme-DYfby65G.js → useTheme-BzEXeAR5.js} +8 -7
  305. package/dist/vb-VOIzXwm9.js +4 -0
  306. package/dist/vbscript-D0WfcnVk.js +4 -0
  307. package/dist/{vega-component-C7nO5zcf.js → vega-component-CJug-VdR.js} +24 -24
  308. package/dist/{vega-embed-container-DAQAMjiO.js → vega-embed-container-BRjjqRGz.js} +9 -9
  309. package/dist/{vega-loader.browser-DmpxCJqx.js → vega-loader.browser-CGb-2Kwi.js} +106 -113
  310. package/dist/velocity-CCrc5n-0.js +4 -0
  311. package/dist/vennDiagram-T6HMQDX7-CTyzMewS.js +1913 -0
  312. package/dist/verilog-BLFhaDBH.js +4 -0
  313. package/dist/vhdl-DjuqPE9b.js +4 -0
  314. package/dist/wardley-OPB4EBWU-CP99MvU1.js +5 -0
  315. package/dist/wardleyDiagram-T6FBY63Y-vcno_rbk.js +669 -0
  316. package/dist/webidl-Cc7RrfeK.js +4 -0
  317. package/dist/xquery-BiCRLnNG.js +4 -0
  318. package/dist/{xychartDiagram-PRI3JC2R-BSkNxYNw.js → xychartDiagram-ELKLHX3M-DyFDERhM.js} +417 -353
  319. package/dist/yacas-CWcjav-O.js +4 -0
  320. package/dist/z80-DpYS2lE7.js +4 -0
  321. package/dist/{zod-BUcyXSdR.js → zod-BFY2SnzC.js} +42 -43
  322. package/package.json +7 -7
  323. package/src/__mocks__/requests.ts +5 -0
  324. package/src/components/ai/ai-model-dropdown.tsx +2 -2
  325. package/src/components/app-config/user-config-form.tsx +26 -0
  326. package/src/components/chat/__tests__/capabilities-popover.test.tsx +38 -0
  327. package/src/components/chat/__tests__/chat-abort.test.ts +51 -0
  328. package/src/components/chat/__tests__/use-chat-controller-id.test.tsx +39 -0
  329. package/src/components/chat/capabilities-popover.tsx +68 -0
  330. package/src/components/chat/chat-abort.ts +44 -0
  331. package/src/components/chat/chat-display.tsx +17 -0
  332. package/src/components/chat/chat-panel.tsx +107 -50
  333. package/src/components/chat/chat-utils.ts +1 -1
  334. package/src/components/chat/use-chat-controller-id.ts +24 -0
  335. package/src/components/data-table/charts/__tests__/schemas.test.ts +35 -0
  336. package/src/components/data-table/charts/schemas.ts +5 -2
  337. package/src/components/databases/icons/huggingface.svg +8 -0
  338. package/src/components/datasets/__tests__/icons.test.ts +21 -0
  339. package/src/components/datasets/icons.tsx +10 -0
  340. package/src/components/datasources/__tests__/components.test.tsx +29 -0
  341. package/src/components/datasources/components.tsx +8 -3
  342. package/src/components/editor/actions/export-dialog/__tests__/export-dialog.test.tsx +35 -0
  343. package/src/components/editor/actions/export-dialog/__tests__/state.test.ts +61 -0
  344. package/src/components/editor/actions/export-dialog/export-command.ts +4 -9
  345. package/src/components/editor/actions/export-dialog/format-notice.tsx +28 -0
  346. package/src/components/editor/actions/export-dialog/state.ts +23 -5
  347. package/src/components/editor/actions/export-dialog/use-export-dialog.ts +3 -13
  348. package/src/components/editor/actions/useConfigActions.tsx +24 -0
  349. package/src/components/editor/ai/add-cell-with-ai.tsx +2 -2
  350. package/src/components/editor/ai/ai-completion-editor.tsx +2 -2
  351. package/src/components/editor/chrome/panels/outline/__tests__/useActiveOutline.test.ts +26 -0
  352. package/src/components/editor/chrome/wrapper/useOpenAiAssistant.ts +2 -2
  353. package/src/components/editor/code/__tests__/readonly-python-code.test.tsx +114 -2
  354. package/src/components/editor/connections/storage/__tests__/__snapshots__/as-code.test.ts.snap +14 -0
  355. package/src/components/editor/connections/storage/__tests__/as-code.test.ts +20 -0
  356. package/src/components/editor/connections/storage/add-storage-form.tsx +10 -0
  357. package/src/components/editor/connections/storage/as-code.ts +19 -1
  358. package/src/components/editor/connections/storage/schemas.ts +19 -0
  359. package/src/components/storage/__tests__/storage-snippets.test.ts +88 -0
  360. package/src/components/storage/components.tsx +2 -0
  361. package/src/components/storage/storage-snippets.ts +58 -0
  362. package/src/core/__tests__/mode.test.ts +85 -0
  363. package/src/core/ai/__tests__/config.test.tsx +96 -0
  364. package/src/core/ai/config.ts +16 -22
  365. package/src/core/ai/constants.ts +7 -0
  366. package/src/core/ai/staged-cells.ts +3 -0
  367. package/src/core/ai/state.ts +10 -0
  368. package/src/core/codemirror/__tests__/setup.test.ts +1 -1
  369. package/src/core/codemirror/cm.ts +2 -2
  370. package/src/core/codemirror/code-lens/__tests__/extension.test.ts +85 -6
  371. package/src/core/codemirror/code-lens/extension.ts +144 -47
  372. package/src/core/codemirror/find-replace/search-highlight.ts +8 -3
  373. package/src/core/codemirror/language/languages/sql/__tests__/renderers.test.tsx +44 -0
  374. package/src/core/codemirror/language/languages/sql/renderers.tsx +3 -3
  375. package/src/core/codemirror/theme/__tests__/light.test.ts +59 -123
  376. package/src/core/codemirror/theme/dark.ts +6 -5
  377. package/src/core/codemirror/theme/light.ts +6 -4
  378. package/src/core/config/__tests__/config-schema.test.ts +2 -0
  379. package/src/core/config/config-schema.ts +1 -0
  380. package/src/core/config/feature-flag.tsx +0 -2
  381. package/src/core/dom/outline.ts +25 -2
  382. package/src/core/hotkeys/hotkeys.ts +2 -0
  383. package/src/core/mode.ts +11 -9
  384. package/src/core/network/__tests__/api.test.ts +132 -17
  385. package/src/core/network/__tests__/export-filename.test.ts +43 -0
  386. package/src/core/network/__tests__/requests-lazy.test.ts +1 -0
  387. package/src/core/network/api.ts +47 -12
  388. package/src/core/network/export-filename.ts +37 -0
  389. package/src/core/network/markdown-export.ts +19 -0
  390. package/src/core/network/requests-network.ts +29 -5
  391. package/src/core/network/types.ts +4 -0
  392. package/src/core/storage/types.ts +1 -0
  393. package/src/css/app/codemirror.css +11 -7
  394. package/src/css/globals.css +8 -0
  395. package/src/plugins/impl/DataEditorPlugin.tsx +2 -9
  396. package/src/plugins/impl/__tests__/DataEditorPlugin.test.ts +18 -0
  397. package/src/plugins/impl/chat/chat-ui.tsx +51 -3
  398. package/src/plugins/impl/data-frames/__tests__/schema.test.ts +30 -0
  399. package/src/plugins/impl/data-frames/schema.ts +4 -1
  400. package/src/plugins/impl/image-comparison/ImageComparisonComponent.tsx +20 -1
  401. package/src/plugins/impl/image-comparison/__tests__/ImageComparisonComponent.test.tsx +58 -0
  402. package/src/stories/theme.stories.tsx +71 -1
  403. package/dist/_baseUniq-B_2Hw7zG.js +0 -380
  404. package/dist/apl-e1B5LPEL.js +0 -4
  405. package/dist/architecture-7HQA4BMR-DHUrQjL4.js +0 -6
  406. package/dist/asciiarmor-B-gwgesP.js +0 -4
  407. package/dist/asn1-DF2ckRB4.js +0 -4
  408. package/dist/assets/__vite-browser-external-DltVXDv7.js +0 -1
  409. package/dist/blockDiagram-VD42YOAC-CIOjvxeD.js +0 -3131
  410. package/dist/brainfuck-4G-7_gq_.js +0 -4
  411. package/dist/chat-ui-DsZJj75A.js +0 -8369
  412. package/dist/chunk-55IACEB6-7h71GwyW.js +0 -8
  413. package/dist/chunk-ABZYJK2D-BxBDji1u.js +0 -2438
  414. package/dist/chunk-BNovOVIE.js +0 -28
  415. package/dist/chunk-CVBHYZKI-CwazXVlJ.js +0 -13
  416. package/dist/chunk-DR5Q36YT-5Yp2GWwR.js +0 -137
  417. package/dist/chunk-EXTU4WIE-BQPBhApE.js +0 -10
  418. package/dist/chunk-JZLCHNYA-DWIR9m5O.js +0 -4901
  419. package/dist/chunk-N4CR4FBY-Bw2HcMNc.js +0 -65
  420. package/dist/chunk-QXUST7PY-DtC2t9Mk.js +0 -498
  421. package/dist/chunk-TCCFYFTB-DPWJa9zL.js +0 -13948
  422. package/dist/chunk-TZMSLE5B-BzSHcq-K.js +0 -63
  423. package/dist/classDiagram-2ON5EDUG-BiQPjMNY.js +0 -30
  424. package/dist/classDiagram-v2-WZHVMYZB-YHdR8fqM.js +0 -30
  425. package/dist/clojure-CUybM11R.js +0 -4
  426. package/dist/clone-Q4Fqwn6q.js +0 -9
  427. package/dist/cmake-BPjGcuDL.js +0 -4
  428. package/dist/cobol-BETk_nb6.js +0 -4
  429. package/dist/coffeescript-CManZxXL.js +0 -4
  430. package/dist/commonlisp-DWkn7GW8.js +0 -4
  431. package/dist/crystal-CCbg5EUH.js +0 -4
  432. package/dist/css-By8eo-XS.js +0 -4
  433. package/dist/cypher-DwfHg3nP.js +0 -4
  434. package/dist/d-Brs1wNbw.js +0 -4
  435. package/dist/dagre-6UL2VRFP-DpYjBqQs.js +0 -296
  436. package/dist/diagram-QEK2KX5R-DVlUOgs1.js +0 -228
  437. package/dist/diff-DJIRmJ1g.js +0 -4
  438. package/dist/dist-5o9uz19x.js +0 -5
  439. package/dist/dist-BpDH0DEP.js +0 -5
  440. package/dist/dist-BpXhbQXO.js +0 -8
  441. package/dist/dist-ByadAk_L.js +0 -5
  442. package/dist/dist-CK0g7JvP.js +0 -8
  443. package/dist/dist-CfzCtiq2.js +0 -5
  444. package/dist/dist-D8JtVFrW.js +0 -8
  445. package/dist/dist-DK2Oocpu.js +0 -6
  446. package/dist/dist-DnSu977r.js +0 -5
  447. package/dist/dist-UmxJm6sW.js +0 -8
  448. package/dist/dist-aYSBQSyM.js +0 -5
  449. package/dist/dist-kkZ1Ztlh.js +0 -6
  450. package/dist/dist-ngPczwNi.js +0 -5
  451. package/dist/dist-wQRyxyTV.js +0 -5
  452. package/dist/dtd-Dyiazv4N.js +0 -4
  453. package/dist/dylan-D8Fcw7NA.js +0 -4
  454. package/dist/ecl-CjKp8Vii.js +0 -4
  455. package/dist/eiffel-K9ViOX5r.js +0 -4
  456. package/dist/elm-B5NVtRco.js +0 -4
  457. package/dist/erlang-BnLzgk7R.js +0 -4
  458. package/dist/factor-C7f9Jz5R.js +0 -4
  459. package/dist/flatten-Bbw7g6-K.js +0 -8
  460. package/dist/forth-rGM8jLao.js +0 -4
  461. package/dist/fortran-B3acSe0i.js +0 -4
  462. package/dist/ganttDiagram-JELNMOA3-CXXCN7LN.js +0 -2170
  463. package/dist/gas-Bb1Vmv_N.js +0 -4
  464. package/dist/gherkin-C9Lyidgd.js +0 -4
  465. package/dist/gitGraphDiagram-V2S2FVAM-BOlkMSqK.js +0 -652
  466. package/dist/graphlib-Ns7y5crs.js +0 -359
  467. package/dist/groovy-DQk6XcGH.js +0 -4
  468. package/dist/hasIn-Deg7jl_j.js +0 -108
  469. package/dist/haskell-mV0Vw9gv.js +0 -4
  470. package/dist/haxe-DqxN89zH.js +0 -5
  471. package/dist/idl-ya8W561J.js +0 -4
  472. package/dist/infoDiagram-HS3SLOUP-D3TyKnL_.js +0 -30
  473. package/dist/javascript-CgqgptVu.js +0 -4
  474. package/dist/julia-CFQ-HusI.js +0 -4
  475. package/dist/livescript-D__3TmDo.js +0 -4
  476. package/dist/lua-Bytcgj_W.js +0 -4
  477. package/dist/main-B1Jo_8pC.js +0 -4321
  478. package/dist/mathematica-DJhvVKvl.js +0 -4
  479. package/dist/mbox-IGHPCjfR.js +0 -4
  480. package/dist/memoize-BOtf2yFf.js +0 -17
  481. package/dist/merge-Be1CqGnU.js +0 -222
  482. package/dist/mermaid-4DMBBIKO-FXbOziy9.js +0 -6
  483. package/dist/mermaid-hv6IckVw.js +0 -1100
  484. package/dist/mermaid-parser.core-DoivvxPd.js +0 -54
  485. package/dist/min-Dtgc8txR.js +0 -38
  486. package/dist/mirc-tcwvVugm.js +0 -4
  487. package/dist/mllike-Dx91i62r.js +0 -6
  488. package/dist/modelica-_SRt-yU5.js +0 -4
  489. package/dist/mscgen-GZrGS9gt.js +0 -6
  490. package/dist/mumps-Cv3ygyod.js +0 -4
  491. package/dist/nsis-BU7GeGbI.js +0 -4
  492. package/dist/ntriples-CL-FCYXb.js +0 -4
  493. package/dist/octave-Dc6_3DIu.js +0 -4
  494. package/dist/oz-DpUAJCXf.js +0 -4
  495. package/dist/pascal-B17mncXs.js +0 -4
  496. package/dist/perl-BTpK97q9.js +0 -4
  497. package/dist/pick-D1Qo8s2C.js +0 -43
  498. package/dist/pieDiagram-ADFJNKIX-JvXG_6hk.js +0 -170
  499. package/dist/pig-CFb638Ap.js +0 -4
  500. package/dist/powershell-Cxo-_2A5.js +0 -4
  501. package/dist/properties-BPgT1xTB.js +0 -4
  502. package/dist/protobuf-BgHBaIIK.js +0 -4
  503. package/dist/pug-25-oS0SG.js +0 -4
  504. package/dist/puppet-DarIr20S.js +0 -4
  505. package/dist/python-BqmOsBsi.js +0 -4
  506. package/dist/q-D3QJCTup.js +0 -4
  507. package/dist/r-Cz_yBX4z.js +0 -4
  508. package/dist/rpm-DGOtYwAI.js +0 -5
  509. package/dist/ruby-DBZu4rPc.js +0 -4
  510. package/dist/sankeyDiagram-TZEHDZUN-DgkF38jx.js +0 -892
  511. package/dist/sas-Dd1D9qTq.js +0 -4
  512. package/dist/scheme-BmDjvTHX.js +0 -4
  513. package/dist/sequenceDiagram-WL72ISMW-BDmx9n95.js +0 -3652
  514. package/dist/shell-BL8zFSaj.js +0 -4
  515. package/dist/sieve-BAx2WqUP.js +0 -4
  516. package/dist/smalltalk-CYRzF7VV.js +0 -4
  517. package/dist/sparql-YWaDRO4A.js +0 -4
  518. package/dist/stateDiagram-v2-4FDKWEC3-C3xqeavR.js +0 -29
  519. package/dist/stex-B5O-env2.js +0 -4
  520. package/dist/stylus-lYsyLFc1.js +0 -4
  521. package/dist/swift-ClQz9z1n.js +0 -4
  522. package/dist/tcl-B3jhsfqY.js +0 -4
  523. package/dist/textile-Cb1Dw7Aq.js +0 -4
  524. package/dist/timeline-definition-IT6M3QCI-CkD_trIn.js +0 -856
  525. package/dist/toml-nHZhetdO.js +0 -4
  526. package/dist/troff-DuJAGWKH.js +0 -4
  527. package/dist/ttcn-BxrcwP21.js +0 -4
  528. package/dist/ttcn-cfg-BAg_9dcc.js +0 -4
  529. package/dist/turtle-zCq949as.js +0 -4
  530. package/dist/vb-De5hElus.js +0 -4
  531. package/dist/vbscript-Cypcpv4F.js +0 -4
  532. package/dist/velocity-Di7l-yhe.js +0 -4
  533. package/dist/verilog-Bzi-S3g2.js +0 -4
  534. package/dist/vhdl-B0ZZITaW.js +0 -4
  535. package/dist/webidl-0sviiRcN.js +0 -4
  536. package/dist/xquery-B4qMVWaB.js +0 -4
  537. package/dist/yacas-Jt25Fuv8.js +0 -4
  538. package/dist/z80-CrcbYzmp.js +0 -4
  539. /package/dist/{apl-99A7dLQe.js → apl-CMUKiT2b.js} +0 -0
  540. /package/dist/{array-O78LT16Y.js → array-CEIRxyh3.js} +0 -0
  541. /package/dist/{asciiarmor-DLEhpFDx.js → asciiarmor-C_r6K6db.js} +0 -0
  542. /package/dist/{asn1-CMrcTsT4.js → asn1-DnlnCQTu.js} +0 -0
  543. /package/dist/{asterisk-CqykImq7.js → asterisk-DaVJJDnV.js} +0 -0
  544. /package/dist/{brainfuck-ChPt5yBe.js → brainfuck-CtQoQVkV.js} +0 -0
  545. /package/dist/{clike-CE0fXfM_.js → clike-CIAs0ABt.js} +0 -0
  546. /package/dist/{clojure-QkBEMU-g.js → clojure-C6tKQYjD.js} +0 -0
  547. /package/dist/{cmake-CU1jX7Mo.js → cmake-D-nfcg14.js} +0 -0
  548. /package/dist/{cobol-DMOKzzky.js → cobol-DYTC58p9.js} +0 -0
  549. /package/dist/{coffeescript-DjnjLyfk.js → coffeescript-DctDWA58.js} +0 -0
  550. /package/dist/{colors-DmiH1bIH.js → colors-DR_aHfmQ.js} +0 -0
  551. /package/dist/{common-keywords-D3nPJNQP.js → common-keywords-FBrXPTcz.js} +0 -0
  552. /package/dist/{commonlisp-CYd9iOSe.js → commonlisp-BmvTqU5y.js} +0 -0
  553. /package/dist/{crystal-Dy55yoYG.js → crystal-BPIK2UMa.js} +0 -0
  554. /package/dist/{css-CNU8w3HJ.js → css-CDo_Lwzn.js} +0 -0
  555. /package/dist/{cypher-q47DGzK7.js → cypher-KztbD63v.js} +0 -0
  556. /package/dist/{d-jEkaLvxX.js → d-HXBWOoe9.js} +0 -0
  557. /package/dist/{defaultLocale-DoeErsX2.js → defaultLocale-DMZFeDB8.js} +0 -0
  558. /package/dist/{diff-vb2-unFN.js → diff-B9rWZH0m.js} +0 -0
  559. /package/dist/{dtd-C9kR-bXa.js → dtd-LtAMP5y8.js} +0 -0
  560. /package/dist/{duckdb-keywords-B6HYCMOT.js → duckdb-keywords-CvJhR_Yd.js} +0 -0
  561. /package/dist/{dylan-BLckrK-V.js → dylan-DXMK92pf.js} +0 -0
  562. /package/dist/{ebnf-Cnp3L9jg.js → ebnf-2D4Ctp3y.js} +0 -0
  563. /package/dist/{ecl-CEsf6XVg.js → ecl-Dqq8ser2.js} +0 -0
  564. /package/dist/{eiffel-2KGZNzx6.js → eiffel-ChExWBDx.js} +0 -0
  565. /package/dist/{elm-D2s3K5wF.js → elm-BMBz2xbZ.js} +0 -0
  566. /package/dist/{emotion-is-prop-valid.esm-DdVSF4FD.js → emotion-is-prop-valid.esm-_z-EwK5u.js} +0 -0
  567. /package/dist/{erlang-0PMFOndk.js → erlang-CGSDzg9P.js} +0 -0
  568. /package/dist/{fcl-D9nccAWI.js → fcl-Ccj8Z5Xd.js} +0 -0
  569. /package/dist/{forth-DG89iUsu.js → forth-vTkfR0aY.js} +0 -0
  570. /package/dist/{fortran-ytKsAVvu.js → fortran-CF4LAVFn.js} +0 -0
  571. /package/dist/{gas-Cg2Fm0N2.js → gas-mMFbQ2x4.js} +0 -0
  572. /package/dist/{gherkin-B87FEnZ-.js → gherkin-DLS1q0XM.js} +0 -0
  573. /package/dist/{groovy-Dcs08AWD.js → groovy-Zt6CNPxV.js} +0 -0
  574. /package/dist/{haskell-cwkOuhx6.js → haskell-kVOgzpVy.js} +0 -0
  575. /package/dist/{haxe-DWEo4q10.js → haxe-Bo21F6gc.js} +0 -0
  576. /package/dist/{http-B8jdG64J.js → http-_DVAYWoR.js} +0 -0
  577. /package/dist/{idl-WWQwDcRV.js → idl-B865GSM-.js} +0 -0
  578. /package/dist/{init-DNBbYZd_.js → init-TaqZJsBY.js} +0 -0
  579. /package/dist/{invariant-wRzNXIsJ.js → invariant-hOqqBz8A.js} +0 -0
  580. /package/dist/{javascript-BeR74dxD.js → javascript-CSLuHpxZ.js} +0 -0
  581. /package/dist/{julia-UlvCUYGL.js → julia-BCOLeQif.js} +0 -0
  582. /package/dist/{livescript-GPmFcmYV.js → livescript-DqUzLZFs.js} +0 -0
  583. /package/dist/{lua-DYoT_0zM.js → lua-D0ciLwkO.js} +0 -0
  584. /package/dist/{math-CBNc2Ib0.js → math-CTnb-N1W.js} +0 -0
  585. /package/dist/{mathematica-DSFIQlbG.js → mathematica-DujD1RDf.js} +0 -0
  586. /package/dist/{mbox-ej8lFMdL.js → mbox-8OkSQMDn.js} +0 -0
  587. /package/dist/{mirc-CAdIdvHQ.js → mirc-D47x8yRQ.js} +0 -0
  588. /package/dist/{mllike-CjTB1lHF.js → mllike-Dcfw-g6D.js} +0 -0
  589. /package/dist/{modelica-BB68FYMa.js → modelica-BHtr9gKR.js} +0 -0
  590. /package/dist/{mscgen-BkbzgGGI.js → mscgen-uZedQc_A.js} +0 -0
  591. /package/dist/{mumps-Cu-28E9F.js → mumps-Bc9QS1-K.js} +0 -0
  592. /package/dist/{nginx-C1ofKPst.js → nginx-DasThI7R.js} +0 -0
  593. /package/dist/{ntriples-D9cQiZxZ.js → ntriples-Clpn9Mrg.js} +0 -0
  594. /package/dist/{objects-De59twF-.js → objects-UzwQd5gx.js} +0 -0
  595. /package/dist/{octave-BvtAnPX0.js → octave-DA2esRWi.js} +0 -0
  596. /package/dist/{oz-COaVHk2E.js → oz-D8i-brWx.js} +0 -0
  597. /package/dist/{pascal-BFpqVD2x.js → pascal-Dt1a0CeN.js} +0 -0
  598. /package/dist/{path-DwWbhZFI.js → path-7gr7eZmp.js} +0 -0
  599. /package/dist/{perl-DaiORxHP.js → perl-CXy9EfRp.js} +0 -0
  600. /package/dist/{pig-DFzRhmsF.js → pig-DnXnrjQg.js} +0 -0
  601. /package/dist/{powershell-BG2LQNKN.js → powershell-BYE6u-Qk.js} +0 -0
  602. /package/dist/{properties-CqJJR5QY.js → properties-DlhyusaK.js} +0 -0
  603. /package/dist/{protobuf-WwDYV1yY.js → protobuf-DoMSrsPi.js} +0 -0
  604. /package/dist/{puppet-QNY3w_uN.js → puppet-DGi4idFA.js} +0 -0
  605. /package/dist/{python-4QrQ3Ugi.js → python-CYhALYh0.js} +0 -0
  606. /package/dist/{q-DhwXuxE2.js → q-Cs_qWJkU.js} +0 -0
  607. /package/dist/{r-Df-nkR25.js → r-DWJSQl1c.js} +0 -0
  608. /package/dist/{range-BOiA8qqU.js → range-Bieq5MNc.js} +0 -0
  609. /package/dist/{rpm-Cokue07s.js → rpm-DIip1m0n.js} +0 -0
  610. /package/dist/{ruby-DrYcL3qF.js → ruby-NgZGoa7Q.js} +0 -0
  611. /package/dist/{sas-CoiPirA5.js → sas-DEKzCzM2.js} +0 -0
  612. /package/dist/{scheme-CwFLjzHv.js → scheme-CBrGar2n.js} +0 -0
  613. /package/dist/{semaphore-C8rmHdhj.js → semaphore-P832H4YT.js} +0 -0
  614. /package/dist/{shell-BFV-R24I.js → shell-D7XFPOM_.js} +0 -0
  615. /package/dist/{sieve-CxwXF5T9.js → sieve-BOxOVQ18.js} +0 -0
  616. /package/dist/{simple-mode-DTaJtKPt.js → simple-mode-D-FXBgPn.js} +0 -0
  617. /package/dist/{smalltalk-QivVOCtX.js → smalltalk-DYK-HkUK.js} +0 -0
  618. /package/dist/{solr-BLvysN-c.js → solr-RZ9uTl59.js} +0 -0
  619. /package/dist/{sparql-nKsFk8j7.js → sparql-CU1uk9Py.js} +0 -0
  620. /package/dist/{spreadsheet-BWc8C2FT.js → spreadsheet-BNNUNXA2.js} +0 -0
  621. /package/dist/{sql-CWfUjlV1.js → sql-B4x8IkwU.js} +0 -0
  622. /package/dist/{stex-DtMAhV4-.js → stex-DIvyJfNO.js} +0 -0
  623. /package/dist/{stylus-BLKQAycn.js → stylus-BokZhKWB.js} +0 -0
  624. /package/dist/{swift-CJoKqiKj.js → swift-TlA42tbT.js} +0 -0
  625. /package/dist/{tcl-YTeYFNUc.js → tcl-C-m7N_9k.js} +0 -0
  626. /package/dist/{textile-C6rKQqMQ.js → textile-BWOWG894.js} +0 -0
  627. /package/dist/{tiddlywiki-ZXwTHGNT.js → tiddlywiki-DI0mF2WJ.js} +0 -0
  628. /package/dist/{tiki-C628O_u4.js → tiki-2HU6XLLn.js} +0 -0
  629. /package/dist/{toml-DxlPGbRy.js → toml-GapOS-6U.js} +0 -0
  630. /package/dist/{treemap-DY3NBr79.js → treemap-CQJ0bIDy.js} +0 -0
  631. /package/dist/{troff-DFCfH7Ku.js → troff-ChPXSGgg.js} +0 -0
  632. /package/dist/{ttcn-DAW-ERVP.js → ttcn-CGf_ktUb.js} +0 -0
  633. /package/dist/{ttcn-cfg-CpJ8b7EN.js → ttcn-cfg-E0kw_vEm.js} +0 -0
  634. /package/dist/{turtle-BneV2f8L.js → turtle-DDIYttZr.js} +0 -0
  635. /package/dist/{vb-D973Vxxh.js → vb-DsGz8YA-.js} +0 -0
  636. /package/dist/{vbscript-Dckaq3YO.js → vbscript-BfQcpKZn.js} +0 -0
  637. /package/dist/{velocity-DKty-GUC.js → velocity-BMi53hPb.js} +0 -0
  638. /package/dist/{verilog-aNaK_biA.js → verilog-B_WDxmCB.js} +0 -0
  639. /package/dist/{vhdl-CQuehnQy.js → vhdl-C52-TT0z.js} +0 -0
  640. /package/dist/{webidl-Bhg8vaMr.js → webidl-Cnphjlul.js} +0 -0
  641. /package/dist/{xquery-D2q16GaM.js → xquery-X_kWyOft.js} +0 -0
  642. /package/dist/{yacas-DHGOHnNa.js → yacas-Dpp9zAZ5.js} +0 -0
  643. /package/dist/{z80-BPhTmO22.js → z80-BZLZAthF.js} +0 -0
@@ -63,13 +63,36 @@ function getOutline(html: string): Outline | null {
63
63
  return { items };
64
64
  }
65
65
 
66
+ function toXPathStringLiteral(value: string): string {
67
+ if (!value.includes('"')) {
68
+ return `"${value}"`;
69
+ }
70
+ if (!value.includes("'")) {
71
+ return `'${value}'`;
72
+ }
73
+
74
+ const segments = value.split('"');
75
+ const literals: string[] = [];
76
+ for (const [index, segment] of segments.entries()) {
77
+ if (segment) {
78
+ literals.push(`"${segment}"`);
79
+ }
80
+ if (index < segments.length - 1) {
81
+ literals.push(`'"'`);
82
+ }
83
+ }
84
+ return `concat(${literals.join(", ")})`;
85
+ }
86
+
66
87
  export function headingToIdentifier(heading: Element): OutlineItem["by"] {
67
88
  const id = heading.id;
68
89
  if (id) {
69
90
  return { id };
70
91
  }
71
- const name = heading.textContent;
72
- return { path: `//${heading.tagName}[contains(., "${name}")]` };
92
+ const name = heading.textContent ?? "";
93
+ return {
94
+ path: `//${heading.tagName}[contains(., ${toXPathStringLiteral(name)})]`,
95
+ };
73
96
  }
74
97
 
75
98
  export function mergeOutlines(outlines: (Outline | null)[]): Outline {
@@ -393,11 +393,13 @@ const DEFAULT_HOT_KEY = {
393
393
  name: "Collapse all sections",
394
394
  group: "Editing",
395
395
  key: "Mod-Shift-\\",
396
+ additionalKeywords: ["fold", "headers"],
396
397
  },
397
398
  "global.expandAllSections": {
398
399
  name: "Expand all sections",
399
400
  group: "Editing",
400
401
  key: "Mod-Shift-/",
402
+ additionalKeywords: ["unfold", "headers"],
401
403
  },
402
404
  "global.toggleMinimap": {
403
405
  name: "Toggle Minimap",
package/src/core/mode.ts CHANGED
@@ -55,20 +55,22 @@ export async function runDuringPresentMode(
55
55
  fn: () => void | Promise<void>,
56
56
  ): Promise<void> {
57
57
  const state = store.get(viewStateAtom);
58
- if (state.mode === "present") {
58
+ if (state.mode !== "edit") {
59
59
  await fn();
60
60
  return;
61
61
  }
62
62
 
63
63
  store.set(viewStateAtom, { ...state, mode: "present" });
64
- // Wait 100ms to allow the page to render
65
- await new Promise((resolve) => setTimeout(resolve, 100));
66
- // Wait 2 frames
67
- await new Promise((resolve) => requestAnimationFrame(resolve));
68
- await new Promise((resolve) => requestAnimationFrame(resolve));
69
- await fn();
70
- store.set(viewStateAtom, { ...state, mode: "edit" });
71
- return undefined;
64
+ try {
65
+ // Wait 100ms to allow the page to render
66
+ await new Promise((resolve) => setTimeout(resolve, 100));
67
+ // Wait 2 frames
68
+ await new Promise((resolve) => requestAnimationFrame(resolve));
69
+ await new Promise((resolve) => requestAnimationFrame(resolve));
70
+ await fn();
71
+ } finally {
72
+ store.set(viewStateAtom, state);
73
+ }
72
74
  }
73
75
 
74
76
  export const viewStateAtom = atom<ViewState>({
@@ -105,7 +105,10 @@ describe("API", () => {
105
105
  });
106
106
 
107
107
  await expect(
108
- API.handleExportResponse({ data: "markdown", response }),
108
+ API.handleExportResponse(
109
+ { data: "markdown", response },
110
+ { defaultFilename: "download.md" },
111
+ ),
109
112
  ).resolves.toEqual({
110
113
  contents: "markdown",
111
114
  filename: "résumé.qmd",
@@ -113,27 +116,139 @@ describe("API", () => {
113
116
  });
114
117
  });
115
118
 
116
- it("rejects export responses without a filename", async () => {
119
+ it("parses quoted Content-Disposition filenames", async () => {
120
+ const response = new Response("html", {
121
+ headers: {
122
+ "Content-Disposition": 'inline; filename="notebook.html"',
123
+ "Content-Type": "text/html; charset=utf-8",
124
+ },
125
+ });
126
+
117
127
  await expect(
118
- API.handleExportResponse({
119
- data: "markdown",
120
- response: new Response(null, {
121
- headers: { "Content-Type": "text/plain" },
122
- }),
123
- }),
124
- ).rejects.toThrow("Export response is missing a filename");
128
+ API.handleExportResponse(
129
+ { data: "html", response },
130
+ { defaultFilename: "download.html" },
131
+ ),
132
+ ).resolves.toEqual({
133
+ contents: "html",
134
+ filename: "notebook.html",
135
+ mediaType: "text/html; charset=utf-8",
136
+ });
137
+ });
138
+
139
+ it("parses unquoted Content-Disposition filenames", async () => {
140
+ const response = new Response("pdf", {
141
+ headers: {
142
+ "Content-Disposition": "attachment; filename=notebook.pdf",
143
+ "Content-Type": "application/pdf",
144
+ },
145
+ });
146
+
147
+ await expect(
148
+ API.handleExportResponse(
149
+ { data: "pdf", response },
150
+ { defaultFilename: "download.pdf" },
151
+ ),
152
+ ).resolves.toEqual({
153
+ contents: "pdf",
154
+ filename: "notebook.pdf",
155
+ mediaType: "application/pdf",
156
+ });
157
+ });
158
+
159
+ it("prefers RFC 5987 filenames over quoted fallbacks", async () => {
160
+ const response = new Response("markdown", {
161
+ headers: {
162
+ "Content-Disposition":
163
+ "attachment; filename=\"wrong.md\"; filename*=UTF-8''notebook.md",
164
+ "Content-Type": "text/plain; charset=utf-8",
165
+ },
166
+ });
167
+
168
+ await expect(
169
+ API.handleExportResponse(
170
+ { data: "markdown", response },
171
+ { defaultFilename: "download.md" },
172
+ ),
173
+ ).resolves.toEqual({
174
+ contents: "markdown",
175
+ filename: "notebook.md",
176
+ mediaType: "text/plain; charset=utf-8",
177
+ });
178
+ });
179
+
180
+ it("falls back to a default filename when headers are missing", async () => {
181
+ const response = new Response("markdown", {
182
+ headers: {
183
+ "Content-Type": "text/plain; charset=utf-8",
184
+ },
185
+ });
186
+
187
+ await expect(
188
+ API.handleExportResponse(
189
+ { data: "markdown", response },
190
+ { defaultFilename: "download.md" },
191
+ ),
192
+ ).resolves.toEqual({
193
+ contents: "markdown",
194
+ filename: "download.md",
195
+ mediaType: "text/plain; charset=utf-8",
196
+ });
197
+ });
198
+
199
+ it("falls back to a default filename when Content-Disposition is unparsable", async () => {
200
+ const response = new Response("markdown", {
201
+ headers: {
202
+ "Content-Disposition": "attachment",
203
+ "Content-Type": "text/plain; charset=utf-8",
204
+ },
205
+ });
206
+
207
+ await expect(
208
+ API.handleExportResponse(
209
+ { data: "markdown", response },
210
+ { defaultFilename: "download.md" },
211
+ ),
212
+ ).resolves.toEqual({
213
+ contents: "markdown",
214
+ filename: "download.md",
215
+ mediaType: "text/plain; charset=utf-8",
216
+ });
217
+ });
218
+
219
+ it("falls back to a default filename when RFC 5987 encoding is malformed", async () => {
220
+ const response = new Response("markdown", {
221
+ headers: {
222
+ "Content-Disposition": "attachment; filename*=UTF-8''%E0%A4%A",
223
+ "Content-Type": "text/plain; charset=utf-8",
224
+ },
225
+ });
226
+
227
+ await expect(
228
+ API.handleExportResponse(
229
+ { data: "markdown", response },
230
+ { defaultFilename: "download.md" },
231
+ ),
232
+ ).resolves.toEqual({
233
+ contents: "markdown",
234
+ filename: "download.md",
235
+ mediaType: "text/plain; charset=utf-8",
236
+ });
125
237
  });
126
238
 
127
239
  it("rejects export responses without a media type", async () => {
128
240
  await expect(
129
- API.handleExportResponse({
130
- data: "markdown",
131
- response: new Response(null, {
132
- headers: {
133
- "Content-Disposition": "attachment; filename*=UTF-8''notebook.md",
134
- },
135
- }),
136
- }),
241
+ API.handleExportResponse(
242
+ {
243
+ data: "markdown",
244
+ response: new Response(null, {
245
+ headers: {
246
+ "Content-Disposition": "attachment; filename*=UTF-8''notebook.md",
247
+ },
248
+ }),
249
+ },
250
+ { defaultFilename: "download.md" },
251
+ ),
137
252
  ).rejects.toThrow("Export response is missing a media type");
138
253
  });
139
254
  });
@@ -0,0 +1,43 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+
3
+ import { beforeEach, describe, expect, it } from "vitest";
4
+ import { filenameAtom } from "@/core/saving/file-state";
5
+ import { store } from "@/core/state/jotai";
6
+ import {
7
+ getDefaultExportFilename,
8
+ getDefaultMarkdownExportFilename,
9
+ } from "../export-filename";
10
+
11
+ describe("default export filenames", () => {
12
+ beforeEach(() => {
13
+ store.set(filenameAtom, "folder/my_notebook.py");
14
+ });
15
+
16
+ it("derives filenames from the notebook name", () => {
17
+ expect(getDefaultExportFilename("html")).toBe("my_notebook.html");
18
+ expect(getDefaultExportFilename("pdf")).toBe("my_notebook.pdf");
19
+ });
20
+
21
+ it("handles Windows-style notebook paths", () => {
22
+ store.set(filenameAtom, "C:\\Users\\me\\my_notebook.py");
23
+ expect(getDefaultExportFilename("html")).toBe("my_notebook.html");
24
+ });
25
+
26
+ it("derives markdown filenames from the selected flavor", () => {
27
+ expect(getDefaultMarkdownExportFilename("qmd")).toBe("my_notebook.qmd");
28
+ expect(getDefaultMarkdownExportFilename("mystmd")).toBe(
29
+ "my_notebook.myst.md",
30
+ );
31
+ });
32
+
33
+ it("derives script export filenames from the notebook name", () => {
34
+ expect(getDefaultExportFilename("script.py")).toBe("my_notebook.script.py");
35
+ });
36
+
37
+ it("falls back to download.* when the notebook is unnamed", () => {
38
+ store.set(filenameAtom, null);
39
+ expect(getDefaultExportFilename("html")).toBe("download.html");
40
+ expect(getDefaultMarkdownExportFilename("qmd")).toBe("download.qmd");
41
+ expect(getDefaultExportFilename("script.py")).toBe("download.script.py");
42
+ });
43
+ });
@@ -84,6 +84,7 @@ describe("createLazyRequests", () => {
84
84
  format: "ipynb",
85
85
  dependenciesAvailable: false,
86
86
  missingPackages: ["nbformat"],
87
+ missingSetup: [],
87
88
  },
88
89
  ],
89
90
  };
@@ -16,13 +16,45 @@ function getBaseUriWithoutQueryParams(): string {
16
16
  return url.toString();
17
17
  }
18
18
 
19
- function getExportFilename(response: Response): string {
20
- const contentDisposition = response.headers.get("Content-Disposition");
21
- const match = contentDisposition?.match(/filename\*=UTF-8''([^;]+)/i);
22
- if (!match) {
23
- throw new Error("Export response is missing a filename");
19
+ function parseContentDispositionFilename(
20
+ contentDisposition: string | null,
21
+ ): string | undefined {
22
+ if (!contentDisposition) {
23
+ return undefined;
24
24
  }
25
- return decodeURIComponent(match[1]);
25
+
26
+ const rfc5987Match = contentDisposition.match(/filename\*=UTF-8''([^;]+)/i);
27
+ if (rfc5987Match) {
28
+ try {
29
+ return decodeURIComponent(rfc5987Match[1]);
30
+ } catch {
31
+ return undefined;
32
+ }
33
+ }
34
+
35
+ const quotedMatch = contentDisposition.match(/filename="([^"]+)"/i);
36
+ if (quotedMatch) {
37
+ return quotedMatch[1];
38
+ }
39
+
40
+ const unquotedMatch = contentDisposition.match(/filename=([^;]+)/i);
41
+ if (unquotedMatch) {
42
+ return unquotedMatch[1].trim();
43
+ }
44
+
45
+ return undefined;
46
+ }
47
+
48
+ function getExportFilename(response: Response): string | undefined {
49
+ const filename = parseContentDispositionFilename(
50
+ response.headers.get("Content-Disposition"),
51
+ );
52
+ if (!filename) {
53
+ Logger.warn(
54
+ "Export response is missing a readable Content-Disposition filename",
55
+ );
56
+ }
57
+ return filename;
26
58
  }
27
59
 
28
60
  /**
@@ -129,11 +161,14 @@ export const API = {
129
161
  }
130
162
  return Promise.resolve(response.data as T);
131
163
  },
132
- handleExportResponse: async <T extends BlobPart>(response: {
133
- data?: T | undefined;
134
- error?: Record<string, unknown>;
135
- response: Response;
136
- }): Promise<ExportedFile<T>> => {
164
+ handleExportResponse: async <T extends BlobPart>(
165
+ response: {
166
+ data?: T | undefined;
167
+ error?: Record<string, unknown>;
168
+ response: Response;
169
+ },
170
+ opts: { defaultFilename: string },
171
+ ): Promise<ExportedFile<T>> => {
137
172
  const contents = await API.handleResponse<T>(response);
138
173
  const mediaType = response.response.headers.get("Content-Type");
139
174
  if (!mediaType) {
@@ -142,7 +177,7 @@ export const API = {
142
177
 
143
178
  return {
144
179
  contents,
145
- filename: getExportFilename(response.response),
180
+ filename: getExportFilename(response.response) ?? opts.defaultFilename,
146
181
  mediaType,
147
182
  };
148
183
  },
@@ -0,0 +1,37 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+
3
+ import { filenameAtom } from "@/core/saving/file-state";
4
+ import { store } from "@/core/state/jotai";
5
+ import { Filenames } from "@/utils/filenames";
6
+ import { Paths } from "@/utils/paths";
7
+ import {
8
+ DEFAULT_MARKDOWN_FLAVOR,
9
+ MARKDOWN_EXTENSIONS,
10
+ } from "./markdown-export";
11
+ import type { ExportAsMarkdownRequest } from "./types";
12
+
13
+ const DEFAULT_EXPORT_FILENAME = "download";
14
+
15
+ function getNotebookStem(): string | undefined {
16
+ const filename = store.get(filenameAtom);
17
+ if (!filename) {
18
+ return undefined;
19
+ }
20
+ const basename = Paths.basename(filename);
21
+ return Filenames.withoutExtension(basename);
22
+ }
23
+
24
+ export function getDefaultExportFilename(extension: string): string {
25
+ const stem = getNotebookStem();
26
+ if (stem) {
27
+ return `${stem}.${extension}`;
28
+ }
29
+ return `${DEFAULT_EXPORT_FILENAME}.${extension}`;
30
+ }
31
+
32
+ export function getDefaultMarkdownExportFilename(
33
+ flavor: ExportAsMarkdownRequest["flavor"],
34
+ ): string {
35
+ const extension = MARKDOWN_EXTENSIONS[flavor ?? DEFAULT_MARKDOWN_FLAVOR];
36
+ return getDefaultExportFilename(extension);
37
+ }
@@ -0,0 +1,19 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+
3
+ import type { MarkdownExportFlavor } from "./types";
4
+
5
+ export const MARKDOWN_EXTENSIONS = {
6
+ pymdown: "md",
7
+ qmd: "qmd",
8
+ mystmd: "myst.md",
9
+ mdx: "mdx",
10
+ } satisfies Record<MarkdownExportFlavor, string>;
11
+ export const MARKDOWN_SUFFIXES = [
12
+ ".myst.md",
13
+ ".markdown",
14
+ ".qmd",
15
+ ".mdx",
16
+ ".md",
17
+ ];
18
+
19
+ export const DEFAULT_MARKDOWN_FLAVOR: MarkdownExportFlavor = "pymdown";
@@ -3,6 +3,10 @@
3
3
  import { once } from "@/utils/once";
4
4
  import { getRuntimeManager } from "../runtime/config";
5
5
  import { API, createClientWithRuntimeManager } from "./api";
6
+ import {
7
+ getDefaultExportFilename,
8
+ getDefaultMarkdownExportFilename,
9
+ } from "./export-filename";
6
10
  import {
7
11
  waitForConnectionOpen,
8
12
  waitForConnectionOpenIfNotebook,
@@ -426,7 +430,11 @@ export function createNetworkRequests(): EditRequests & RunRequests {
426
430
  parseAs: "text",
427
431
  params: getParams(),
428
432
  })
429
- .then(handleExportResponse);
433
+ .then((response) =>
434
+ handleExportResponse(response, {
435
+ defaultFilename: getDefaultExportFilename("html"),
436
+ }),
437
+ );
430
438
  },
431
439
  exportAsMarkdown: async (request) => {
432
440
  return getClient()
@@ -435,7 +443,11 @@ export function createNetworkRequests(): EditRequests & RunRequests {
435
443
  parseAs: "text",
436
444
  params: getParams(),
437
445
  })
438
- .then(handleExportResponse);
446
+ .then((response) =>
447
+ handleExportResponse(response, {
448
+ defaultFilename: getDefaultMarkdownExportFilename(request.flavor),
449
+ }),
450
+ );
439
451
  },
440
452
  exportAsScript: async (request) => {
441
453
  return getClient()
@@ -444,7 +456,11 @@ export function createNetworkRequests(): EditRequests & RunRequests {
444
456
  parseAs: "text",
445
457
  params: getParams(),
446
458
  })
447
- .then(handleExportResponse);
459
+ .then((response) =>
460
+ handleExportResponse(response, {
461
+ defaultFilename: getDefaultExportFilename("script.py"),
462
+ }),
463
+ );
448
464
  },
449
465
  exportAsIPYNB: async (request) => {
450
466
  return getClient()
@@ -453,7 +469,11 @@ export function createNetworkRequests(): EditRequests & RunRequests {
453
469
  parseAs: "text",
454
470
  params: getParams(),
455
471
  })
456
- .then(handleExportResponse);
472
+ .then((response) =>
473
+ handleExportResponse(response, {
474
+ defaultFilename: getDefaultExportFilename("ipynb"),
475
+ }),
476
+ );
457
477
  },
458
478
  exportAsPDF: async (request) => {
459
479
  return getClient()
@@ -462,7 +482,11 @@ export function createNetworkRequests(): EditRequests & RunRequests {
462
482
  parseAs: "blob",
463
483
  params: getParams(),
464
484
  })
465
- .then(handleExportResponse);
485
+ .then((response) =>
486
+ handleExportResponse(response, {
487
+ defaultFilename: getDefaultExportFilename("pdf"),
488
+ }),
489
+ );
466
490
  },
467
491
  autoExportAsHTML: async (request) => {
468
492
  return getClient()
@@ -22,6 +22,9 @@ export type AutoExportAsMarkdownRequest =
22
22
  schemas["AutoExportAsMarkdownRequest"];
23
23
  export type ExportAsHTMLRequest = schemas["ExportAsHTMLRequest"];
24
24
  export type ExportAsMarkdownRequest = schemas["ExportAsMarkdownRequest"];
25
+ export type MarkdownExportFlavor = NonNullable<
26
+ ExportAsMarkdownRequest["flavor"]
27
+ >;
25
28
  export type ExportAsIPYNBRequest = schemas["ExportAsIPYNBRequest"];
26
29
  export type ExportAsScriptRequest = schemas["ExportAsScriptRequest"];
27
30
  export type ExportAsPDFRequest = schemas["ExportAsPDFRequest"];
@@ -128,6 +131,7 @@ export type OpenTutorialRequest = schemas["OpenTutorialRequest"];
128
131
  export type TutorialId = OpenTutorialRequest["tutorialId"];
129
132
  export type InvokeAiToolRequest = schemas["InvokeAiToolRequest"];
130
133
  export type InvokeAiToolResponse = schemas["InvokeAiToolResponse"];
134
+ export type ChatOptions = schemas["ChatOptions"];
131
135
  export type ClearCacheRequest = schemas["ClearCacheRequest"];
132
136
  export type GetCacheInfoRequest = schemas["GetCacheInfoRequest"];
133
137
  export type LspHealthResponse = schemas["LspHealthResponse"];
@@ -61,5 +61,6 @@ export type KnownStorageProtocol =
61
61
  | "http"
62
62
  | "file"
63
63
  | "gdrive"
64
+ | "hf"
64
65
  | "in-memory"
65
66
  | "github";
@@ -1,14 +1,18 @@
1
1
  @reference "../globals.css";
2
2
 
3
3
  .light .cm-selectionBackground {
4
- /* This is the background for selected text when focused,
5
- but we want to use it when not in focus either because we
6
- will often lose focus during find/replace or in another editor */
7
- background-color: #d7d4f0 !important;
4
+ /* Keep drawn selections visible when focus moves to find/replace or another editor. */
5
+ background-color: var(
6
+ --cm-selection-background,
7
+ var(--cm-selection-background-light)
8
+ ) !important;
8
9
  }
9
10
 
10
11
  .dark .cm-selectionBackground {
11
- background-color: #1177cc80 !important;
12
+ background-color: var(
13
+ --cm-selection-background,
14
+ var(--cm-selection-background-dark)
15
+ ) !important;
12
16
  }
13
17
 
14
18
  .cm-focused.cm-focused {
@@ -125,7 +129,7 @@
125
129
  /* -- Codeium -- */
126
130
 
127
131
  .cm-codeium-cycle {
128
- font-size: 9px;
132
+ font-size: 0.5625rem;
129
133
  background-color: var(--sky-3);
130
134
  padding: 2px;
131
135
  border-radius: 2px;
@@ -133,7 +137,7 @@
133
137
  }
134
138
 
135
139
  .cm-codeium-cycle-key {
136
- font-size: 9px;
140
+ font-size: 0.5625rem;
137
141
  font-family: monospace;
138
142
  display: inline-block;
139
143
  padding: 2px;
@@ -107,6 +107,14 @@
107
107
  /* Codemirror editor */
108
108
  --cm-background: light-dark(var(--background), #282c34);
109
109
  --cm-comment: light-dark(#708090, #6b7280);
110
+ --cm-selection-background-light: #d7d4f0;
111
+ --cm-selection-background-dark: #1177cc80;
112
+ --cm-reactive-reference-color-light: #005f87;
113
+ --cm-reactive-reference-color-dark: #2a7aa5;
114
+ --cm-reactive-reference-border-color: #bad3de;
115
+ --cm-search-match-background-light: #99ff7780;
116
+ --cm-search-match-background-dark: #22bb0070;
117
+ --cm-search-match-selected-background-dark: #6199ff88;
110
118
  }
111
119
 
112
120
  .dark,
@@ -8,10 +8,10 @@ import { LoadingTable } from "@/components/data-table/loading-table";
8
8
  import { type FieldTypes, toFieldTypes } from "@/components/data-table/types";
9
9
  import { Alert, AlertTitle } from "@/components/ui/alert";
10
10
  import { DelayMount } from "@/components/utils/delay-mount";
11
- import { DATA_TYPES } from "@/core/kernel/messages";
12
11
  import { useAsyncData } from "@/hooks/useAsyncData";
13
12
  import { createPlugin } from "../core/builder";
14
13
  import type { Setter } from "../types";
14
+ import { columnToFieldTypesSchema } from "./data-frames/schema";
15
15
  import {
16
16
  BulkEdit,
17
17
  type DataEditorProps,
@@ -44,14 +44,7 @@ export const DataEditorPlugin = createPlugin<Edits>("marimo-data-editor", {
44
44
  }),
45
45
  label: z.string().nullable(),
46
46
  data: z.union([z.string(), z.array(z.object({}).passthrough())]),
47
- fieldTypes: z
48
- .array(
49
- z.tuple([
50
- z.coerce.string(),
51
- z.tuple([z.enum(DATA_TYPES), z.string()]),
52
- ]),
53
- )
54
- .nullish(),
47
+ fieldTypes: columnToFieldTypesSchema.nullish(),
55
48
  editableColumns: z.union([z.array(z.string()), z.literal("all")]),
56
49
  columnSizingMode: z.enum(["auto", "fit"]).default("auto"), // TODO: Remove this
57
50
  }),
@@ -0,0 +1,18 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+
3
+ import { describe, expect, it } from "vitest";
4
+ import { DataEditorPlugin } from "../DataEditorPlugin";
5
+
6
+ describe("DataEditorPlugin", () => {
7
+ it("normalizes an unrecognized field type", () => {
8
+ const result = DataEditorPlugin.validator.parse({
9
+ initialValue: { edits: [] },
10
+ label: null,
11
+ data: [],
12
+ fieldTypes: [["geom", ["geometry", "geometry"]]],
13
+ editableColumns: "all",
14
+ });
15
+
16
+ expect(result.fieldTypes).toEqual([["geom", ["unknown", "geometry"]]]);
17
+ });
18
+ });