@marimo-team/frontend 0.23.7-dev0 → 0.23.7-dev10

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 (534) hide show
  1. package/dist/assets/{CellStatus-CO_unhk0.js → CellStatus-CN4mKUXv.js} +1 -1
  2. package/dist/assets/{ConnectedDataExplorerComponent-k8s9vETJ.js → ConnectedDataExplorerComponent-DeBM0cl9.js} +1 -1
  3. package/dist/assets/JsonOutput-B0sjIMBK.js +49 -0
  4. package/dist/assets/LazyAnyLanguageCodeMirror-pAFdCqyC.js +2 -0
  5. package/dist/assets/{MarimoErrorOutput-1q6qtvxi.js → MarimoErrorOutput-ClA7EZGX.js} +1 -1
  6. package/dist/assets/{RenderHTML-DkEHxB1r.js → RenderHTML-CruxVneu.js} +1 -1
  7. package/dist/assets/{add-cell-with-ai-D5JeNTNV.js → add-cell-with-ai-C7f_bUyB.js} +3 -3
  8. package/dist/assets/{add-connection-dialog-_nMyst1l.js → add-connection-dialog-DSOgwTlO.js} +1 -1
  9. package/dist/assets/{agent-panel-CBj2Q42_.js → agent-panel-CeDyKw1_.js} +1 -1
  10. package/dist/assets/{ai-model-dropdown-B-9yxYM4.js → ai-model-dropdown-kQdQhWyz.js} +1 -1
  11. package/dist/assets/{any-language-editor-C9DM60EN.js → any-language-editor-CwwS-naY.js} +1 -1
  12. package/dist/assets/apl-CaYjM5u2.js +1 -0
  13. package/dist/assets/{app-config-button-BOc_z0uX.js → app-config-button-dnmk7p6n.js} +1 -1
  14. package/dist/assets/{arc-ONRhTAm2.js → arc-D1owqr0z.js} +1 -1
  15. package/dist/assets/{architecture-7HQA4BMR-B8Ryu75w.js → architecture-7HQA4BMR-BzXB-NJy.js} +1 -1
  16. package/dist/assets/{architectureDiagram-VXUJARFQ-JNogHSZh.js → architectureDiagram-VXUJARFQ-D6wy26r_.js} +1 -1
  17. package/dist/assets/asciiarmor-D2cJUKTq.js +1 -0
  18. package/dist/assets/asn1-CZDBKivQ.js +1 -0
  19. package/dist/assets/{blockDiagram-VD42YOAC-Dy-_c6-H.js → blockDiagram-VD42YOAC-CGtjuPGT.js} +1 -1
  20. package/dist/assets/brainfuck-D5O26WTe.js +1 -0
  21. package/dist/assets/{c4Diagram-YG6GDRKO-DHRUX7S-.js → c4Diagram-YG6GDRKO-BSjPyzdq.js} +1 -1
  22. package/dist/assets/{cache-panel-B_zs00Q_.js → cache-panel-DDJqyuAl.js} +1 -1
  23. package/dist/assets/{cell-editor-C1BpIU12.js → cell-editor-DOImf428.js} +3 -3
  24. package/dist/assets/{cell-link-CC2MiW7a.js → cell-link-DqiCeeeS.js} +1 -1
  25. package/dist/assets/{cells-DAxz8J5R.js → cells-BBDzmUIS.js} +5 -5
  26. package/dist/assets/channel-D2-MhlpJ.js +1 -0
  27. package/dist/assets/{chat-display-BiUNr6dU.js → chat-display-Ct3Me0kL.js} +1 -1
  28. package/dist/assets/{chat-panel-BHsaaTzR.js → chat-panel-CXvtUFUU.js} +1 -1
  29. package/dist/assets/{chat-ui-CTYG4pnL.js → chat-ui-UFERs8Gx.js} +1 -1
  30. package/dist/assets/{chunk-4BX2VUAB-mPGRpph5.js → chunk-4BX2VUAB-Co_nHYv2.js} +1 -1
  31. package/dist/assets/chunk-55IACEB6-CSG9iNvo.js +1 -0
  32. package/dist/assets/{chunk-5FQGJX7Z-e_arGD4o.js → chunk-5FQGJX7Z-BReOK4Lg.js} +2 -2
  33. package/dist/assets/{chunk-ABZYJK2D-BInZW7OW.js → chunk-ABZYJK2D-CvNlx3OC.js} +3 -3
  34. package/dist/assets/{chunk-ATLVNIR6-_9Zaw7IP.js → chunk-ATLVNIR6-EZIDpjkm.js} +1 -1
  35. package/dist/assets/{chunk-B4BG7PRW-Bg43tpY1.js → chunk-B4BG7PRW-B3yrge9N.js} +1 -1
  36. package/dist/assets/{chunk-CVBHYZKI-Brsoob-W.js → chunk-CVBHYZKI-lxEaq00s.js} +1 -1
  37. package/dist/assets/{chunk-DI55MBZ5-DX01Gov5.js → chunk-DI55MBZ5-NrI5veM7.js} +1 -1
  38. package/dist/assets/{chunk-EXTU4WIE-Cwo9-IiR.js → chunk-EXTU4WIE-DcGAJuBg.js} +1 -1
  39. package/dist/assets/{chunk-FMBD7UC4-Bt9icXTy.js → chunk-FMBD7UC4-CD1D2uhs.js} +1 -1
  40. package/dist/assets/{chunk-HN2XXSSU-BBxJMYrA.js → chunk-HN2XXSSU-DNIvfs-V.js} +1 -1
  41. package/dist/assets/{chunk-JA3XYJ7Z-C6cvGHie.js → chunk-JA3XYJ7Z-B-G51Lop.js} +1 -1
  42. package/dist/assets/{chunk-JZLCHNYA-BM-e2D_8.js → chunk-JZLCHNYA-B1QJXpkc.js} +1 -1
  43. package/dist/assets/{chunk-MI3HLSF2-D6we5Ftb.js → chunk-MI3HLSF2-SpVCtnNg.js} +1 -1
  44. package/dist/assets/{chunk-N4CR4FBY-BREYOeLP.js → chunk-N4CR4FBY-DaT7rK9q.js} +2 -2
  45. package/dist/assets/{chunk-QN33PNHL-DwGffwWu.js → chunk-QN33PNHL-eWaiYkN_.js} +1 -1
  46. package/dist/assets/{chunk-QXUST7PY-Q2jlSUop.js → chunk-QXUST7PY-yCShGuH_.js} +1 -1
  47. package/dist/assets/{chunk-QZHKN3VN-CeNfSWg4.js → chunk-QZHKN3VN-Bf2ysi2t.js} +1 -1
  48. package/dist/assets/{chunk-S3R3BYOJ-DGKPoF4U.js → chunk-S3R3BYOJ-BuT2smkb.js} +1 -1
  49. package/dist/assets/{chunk-TZMSLE5B-Bfbjtd_W.js → chunk-TZMSLE5B-tzDl0-3S.js} +1 -1
  50. package/dist/assets/classDiagram-2ON5EDUG-CSdm65qE.js +1 -0
  51. package/dist/assets/classDiagram-v2-WZHVMYZB-B2-GAMOQ.js +1 -0
  52. package/dist/assets/{clike-O99jWPIc.js → clike-TwxwxEw_.js} +1 -1
  53. package/dist/assets/clojure-B8dfjAV6.js +1 -0
  54. package/dist/assets/cmake-D3vlGJdL.js +1 -0
  55. package/dist/assets/cobol-S-4I_F1W.js +1 -0
  56. package/dist/assets/{code-block-37QAKDTI-CtU_48GW.js → code-block-37QAKDTI-BZ77cXM8.js} +1 -1
  57. package/dist/assets/coffeescript-DG-Oj54u.js +1 -0
  58. package/dist/assets/{column-preview-DBPye87P.js → column-preview-Xuel1zsI.js} +1 -1
  59. package/dist/assets/{command-palette-C3fn0qCr.js → command-palette-CSa-ZC8t.js} +1 -1
  60. package/dist/assets/{common-Qy2P7rii.js → common-Dk5VdfJt.js} +1 -1
  61. package/dist/assets/commonlisp-CWlOS49U.js +1 -0
  62. package/dist/assets/{components-CZy03693.js → components-CTKNCmC_.js} +1 -1
  63. package/dist/assets/{components-D9aJNSr-.js → components-DsoH1pO3.js} +1 -1
  64. package/dist/assets/{cose-bilkent-S5V4N54A-DWjOkKYE.js → cose-bilkent-S5V4N54A-CEx_UMjg.js} +1 -1
  65. package/dist/assets/crystal-CD-LQ3E-.js +1 -0
  66. package/dist/assets/{css-Ctj1grpW.js → css-sdrF9ahV.js} +1 -1
  67. package/dist/assets/cypher-oiVTIRlU.js +1 -0
  68. package/dist/assets/d-KaoGirPa.js +1 -0
  69. package/dist/assets/{dagre-6UL2VRFP-DWD6iJku.js → dagre-6UL2VRFP-Ca6G800E.js} +1 -1
  70. package/dist/assets/{data-grid-overlay-editor-DvZ8PZ2g.js → data-grid-overlay-editor-D-UNM6-P.js} +1 -1
  71. package/dist/assets/{datasource-C1JWjcmE.js → datasource-CmTCEk66.js} +1 -1
  72. package/dist/assets/{dependency-graph-panel-DOHj-hNc.js → dependency-graph-panel-0u1-ZaOT.js} +1 -1
  73. package/dist/assets/{diagram-PSM6KHXK-B_Cc0ttH.js → diagram-PSM6KHXK-B6oP3YWR.js} +1 -1
  74. package/dist/assets/{diagram-QEK2KX5R-DhI0d2dH.js → diagram-QEK2KX5R-BjsoVcta.js} +1 -1
  75. package/dist/assets/{diagram-S2PKOQOG-cc2LNQee.js → diagram-S2PKOQOG-CmzTe5KJ.js} +1 -1
  76. package/dist/assets/diff-Df1QxxZl.js +1 -0
  77. package/dist/assets/dist-2Z1sSg1x.js +1 -0
  78. package/dist/assets/{dist-CbOE2rpr.js → dist-7iwSqhl8.js} +1 -1
  79. package/dist/assets/dist-B6zNcPeA.js +1 -0
  80. package/dist/assets/{dist-Dq4wQg6C.js → dist-BiTPETny.js} +1 -1
  81. package/dist/assets/{dist-e6kaTCKJ.js → dist-BojrNCCU.js} +1 -1
  82. package/dist/assets/{dist-BvZKHNvJ.js → dist-CHMkheIP.js} +1 -1
  83. package/dist/assets/{dist-DMSWEOfO.js → dist-D1lU2Qzi.js} +1 -1
  84. package/dist/assets/{dist-Cn0rcGlX.js → dist-D8QLIJ8u.js} +1 -1
  85. package/dist/assets/dist-DOBJtV_h.js +1 -0
  86. package/dist/assets/dist-DUpLnFKL.js +1 -0
  87. package/dist/assets/{dist-R7_s36kw.js → dist-DZaaRVnC.js} +1 -1
  88. package/dist/assets/{dist-C204e66A.js → dist-DZq-MBWk.js} +1 -1
  89. package/dist/assets/{dist-Dn_fCOGr.js → dist-Iv0YPPAU.js} +1 -1
  90. package/dist/assets/{dist-D4HwuQrf.js → dist-YUbAFc_i.js} +1 -1
  91. package/dist/assets/{dist-BVBYIAbx.js → dist-bOUvGRGG.js} +1 -1
  92. package/dist/assets/{dockerfile-DERk1oNL.js → dockerfile-CImncS5w.js} +1 -1
  93. package/dist/assets/{documentation-panel-BM7hNnyp.js → documentation-panel-CcE7aGO9.js} +1 -1
  94. package/dist/assets/{download-CXTuIv7r.js → download-QGh9oR1D.js} +1 -1
  95. package/dist/assets/dtd-Aj5m459l.js +1 -0
  96. package/dist/assets/dylan-CdSB1nh8.js +1 -0
  97. package/dist/assets/ecl-CvwsCfi6.js +1 -0
  98. package/dist/assets/{edit-page-Ct5Ke1wi.js → edit-page-CMzqgK6j.js} +3 -3
  99. package/dist/assets/eiffel-Bws25dAs.js +1 -0
  100. package/dist/assets/elm--WkcLZ1a.js +1 -0
  101. package/dist/assets/{erDiagram-Q2GNP2WA-CPtVWZYn.js → erDiagram-Q2GNP2WA-CK4Kc1gP.js} +1 -1
  102. package/dist/assets/erlang-Ct30wW1o.js +1 -0
  103. package/dist/assets/{error-banner-C6aBa98y.js → error-banner-C10O4l3y.js} +1 -1
  104. package/dist/assets/{error-panel-BN-anQD3.js → error-panel-ChlzbfWg.js} +1 -1
  105. package/dist/assets/{esm-BRNC35J6.js → esm-DN_A77ya.js} +1 -1
  106. package/dist/assets/{factor-BbYo7zsD.js → factor-B3fhZG6W.js} +1 -1
  107. package/dist/assets/factor-DbSpQa-0.js +1 -0
  108. package/dist/assets/file-explorer-panel-8dWLD2PY.js +26 -0
  109. package/dist/assets/{file-icons-5G4ZC70N.js → file-icons-Cs4oXsAy.js} +1 -1
  110. package/dist/assets/file-name-input-g7pBBCjk.js +3 -0
  111. package/dist/assets/fileToBase64-Dpv4aII5.js +1 -0
  112. package/dist/assets/{floating-outline-DHE0ukvC.js → floating-outline-CFUSr2du.js} +1 -1
  113. package/dist/assets/{flowDiagram-NV44I4VS-LeaIbfPS.js → flowDiagram-NV44I4VS-hhUTWDGs.js} +1 -1
  114. package/dist/assets/{focus-Crs_4nnQ.js → focus-J47a1GCq.js} +1 -1
  115. package/dist/assets/{form-DRJZl2zK.js → form-CdFqEqTA.js} +1 -1
  116. package/dist/assets/forth-BP0pXyoR.js +1 -0
  117. package/dist/assets/fortran-DpX_2iww.js +1 -0
  118. package/dist/assets/{gallery-page-C4kMatxN.js → gallery-page-TIWZFnOT.js} +1 -1
  119. package/dist/assets/{ganttDiagram-JELNMOA3-Bj-STLOZ.js → ganttDiagram-JELNMOA3-Dpb7hBaR.js} +1 -1
  120. package/dist/assets/gas-CiUR6fHB.js +1 -0
  121. package/dist/assets/gherkin-C9v48C48.js +1 -0
  122. package/dist/assets/{gitGraph-G5XIXVHT-CiMGDHpk.js → gitGraph-G5XIXVHT-Xz2NQxVt.js} +1 -1
  123. package/dist/assets/{gitGraphDiagram-V2S2FVAM-B9HDL4DZ.js → gitGraphDiagram-V2S2FVAM-DHCl4EFT.js} +1 -1
  124. package/dist/assets/{glide-data-editor-DqqLCmqF.js → glide-data-editor-ChlIFl33.js} +4 -4
  125. package/dist/assets/groovy-psUnKwK-.js +1 -0
  126. package/dist/assets/haskell-DZHQAKUV.js +1 -0
  127. package/dist/assets/haxe-AOvPCF-w.js +1 -0
  128. package/dist/assets/{home-page-BM_BZnw7.js → home-page-HhJfA35e.js} +1 -1
  129. package/dist/assets/{hooks-CUEvgvEQ.js → hooks-BpoZRNxw.js} +1 -1
  130. package/dist/assets/{html-to-image-v-_444d3.js → html-to-image-CAiN3VHj.js} +1 -1
  131. package/dist/assets/idl-CSA8C1ck.js +1 -0
  132. package/dist/assets/index-BbBhLC0d.css +2 -0
  133. package/dist/assets/index-fXenSTRv.js +42 -0
  134. package/dist/assets/{info-VBDWY6EO-yA01qfll.js → info-VBDWY6EO-BpskktdI.js} +1 -1
  135. package/dist/assets/infoDiagram-HS3SLOUP-C51uJjUn.js +2 -0
  136. package/dist/assets/javascript-XMYUq5-t.js +1 -0
  137. package/dist/assets/{journeyDiagram-XKPGCS4Q-D29tj64e.js → journeyDiagram-XKPGCS4Q-CD6bTQpr.js} +1 -1
  138. package/dist/assets/julia-oON8zLDW.js +1 -0
  139. package/dist/assets/{kanban-definition-3W4ZIXB7-DStZ4tGj.js → kanban-definition-3W4ZIXB7-D3rGxlSj.js} +1 -1
  140. package/dist/assets/katex-DPCeZ37j.js +1 -0
  141. package/dist/assets/{kiosk-mode-DKb6W1WN.js → kiosk-mode-Cr9yyT7A.js} +1 -1
  142. package/dist/assets/{layout-Bp1vAdBy.js → layout-D5myrs5s.js} +3 -3
  143. package/dist/assets/{line-j0cbFv7-.js → line-BA7eTS55.js} +1 -1
  144. package/dist/assets/{linear-Cof2JLCQ.js → linear-Dmb_KwjK.js} +1 -1
  145. package/dist/assets/livescript--BxQO5G_.js +1 -0
  146. package/dist/assets/{logs-panel-BWCDk8Zy.js → logs-panel-B2tW94um.js} +1 -1
  147. package/dist/assets/{loro_wasm_bg-DWJCS9pK.js → loro_wasm_bg-CklgjGbG.js} +1 -1
  148. package/dist/assets/lua-CUyaVUOv.js +1 -0
  149. package/dist/assets/{markdown-renderer-CbuqHMPu.js → markdown-renderer-CVd_mMPt.js} +3 -3
  150. package/dist/assets/mathematica-ONd8izyd.js +1 -0
  151. package/dist/assets/mbox-kjl3g9N-.js +1 -0
  152. package/dist/assets/mermaid-4DMBBIKO-BeB_2G2B.js +1 -0
  153. package/dist/assets/{mermaid-BfdNvRSd.js → mermaid-ByDNZESx.js} +7 -7
  154. package/dist/assets/{mermaid-parser.core-BQULBKwL.js → mermaid-parser.core-CzmbMcI0.js} +2 -2
  155. package/dist/assets/{mhchem-BNLsaqjJ.js → mhchem-B4Y0i8Fp.js} +1 -1
  156. package/dist/assets/{mindmap-definition-VGOIOE7T-Cy9nt356.js → mindmap-definition-VGOIOE7T-CmLdKdIH.js} +1 -1
  157. package/dist/assets/mirc-BZ6TyuOO.js +1 -0
  158. package/dist/assets/mllike-Dxt2U6MQ.js +1 -0
  159. package/dist/assets/modelica-B9sdhdtj.js +1 -0
  160. package/dist/assets/mscgen-5e5Z5trn.js +1 -0
  161. package/dist/assets/mumps-BUfWDrRe.js +1 -0
  162. package/dist/assets/{name-cell-input-DoYtA-nF.js → name-cell-input-DDQOQSsh.js} +1 -1
  163. package/dist/assets/nsis-Dq7T79DJ.js +1 -0
  164. package/dist/assets/{nsis-Cr8jf68z.js → nsis-QuE155sg.js} +1 -1
  165. package/dist/assets/ntriples-Dqzi7kwu.js +1 -0
  166. package/dist/assets/{number-overlay-editor-8-GuvfJX.js → number-overlay-editor-C8YnP6Ac.js} +1 -1
  167. package/dist/assets/octave-v4IgjFm5.js +1 -0
  168. package/dist/assets/{ordinal-K0JYqmCT.js → ordinal-C9PZ4yw5.js} +1 -1
  169. package/dist/assets/{outline-panel-C5bTOsj4.js → outline-panel-BuTQis3o.js} +1 -1
  170. package/dist/assets/oz-BtUsXhbc.js +1 -0
  171. package/dist/assets/{packages-panel-CHVjLKJK.js → packages-panel-CVu8Cpkz.js} +1 -1
  172. package/dist/assets/{packet-DYOGHKS2-D9yUvksZ.js → packet-DYOGHKS2-BqwwD9JS.js} +1 -1
  173. package/dist/assets/{panels-GT2UyjFN.js → panels-COAp5_gz.js} +1 -1
  174. package/dist/assets/pascal-DV7k6vJ0.js +1 -0
  175. package/dist/assets/perl-Bz7YaP_R.js +1 -0
  176. package/dist/assets/{pie-VRWISCQL-Cz1iTD2y.js → pie-VRWISCQL-BqNfdcWg.js} +1 -1
  177. package/dist/assets/{pieDiagram-ADFJNKIX-CqhovvcK.js → pieDiagram-ADFJNKIX-MH-0tvkn.js} +1 -1
  178. package/dist/assets/pig-BQWmcOEQ.js +1 -0
  179. package/dist/assets/powershell-CmIFs71i.js +1 -0
  180. package/dist/assets/{process-output-CKd9tbdL.js → process-output-DSqjZYr-.js} +1 -1
  181. package/dist/assets/properties-D7F2Eomu.js +1 -0
  182. package/dist/assets/protobuf-BMELuvny.js +1 -0
  183. package/dist/assets/pug-C2KbP_v3.js +1 -0
  184. package/dist/assets/{pug-CKg66ZCy.js → pug-NA-6TsNe.js} +1 -1
  185. package/dist/assets/puppet-C7MviiPj.js +1 -0
  186. package/dist/assets/python-BUl8uFIl.js +1 -0
  187. package/dist/assets/q-B5bIbNKB.js +1 -0
  188. package/dist/assets/{quadrantDiagram-AYHSOK5B-BNyiC3hL.js → quadrantDiagram-AYHSOK5B-BSw-Ouba.js} +1 -1
  189. package/dist/assets/r-B0lU_x8o.js +1 -0
  190. package/dist/assets/{radar-ZZBFDIW7-y2-V58qq.js → radar-ZZBFDIW7-CYyEWqrT.js} +1 -1
  191. package/dist/assets/{radio-group-BI3wOhfc.js → radio-group-CpHTexlq.js} +1 -1
  192. package/dist/assets/{react-vega-SibldZnp.js → react-vega-B30MPQ4_.js} +1 -1
  193. package/dist/assets/{react-vega-C1LnPwEN.js → react-vega-CXAF6OHL.js} +1 -1
  194. package/dist/assets/{readonly-python-code-CaKJ84fy.js → readonly-python-code-DOXF2p8K.js} +1 -1
  195. package/dist/assets/{requirementDiagram-UZGBJVZJ-U4CoEx7e.js → requirementDiagram-UZGBJVZJ-BtGFP-o9.js} +1 -1
  196. package/dist/assets/{reveal-component-DC85rv-5.js → reveal-component-CJYRD8Yf.js} +1 -1
  197. package/dist/assets/rpm-BqQ3VFpY.js +1 -0
  198. package/dist/assets/ruby-AFh8QoqR.js +1 -0
  199. package/dist/assets/{run-page-CldmTgnu.js → run-page-CTQJzZGR.js} +1 -1
  200. package/dist/assets/{sankeyDiagram-TZEHDZUN-BXgCc5j4.js → sankeyDiagram-TZEHDZUN-yIdYlc6x.js} +1 -1
  201. package/dist/assets/sas-CeRTI9sn.js +1 -0
  202. package/dist/assets/scheme-D0VcE_o1.js +1 -0
  203. package/dist/assets/{scratchpad-panel-C6QArhRa.js → scratchpad-panel-SgUSM06x.js} +1 -1
  204. package/dist/assets/{secrets-panel-DaR50P_m.js → secrets-panel-B8CbRNMo.js} +1 -1
  205. package/dist/assets/semaphore-QJCD9q3h.js +1 -0
  206. package/dist/assets/{sequenceDiagram-WL72ISMW-CB8apKmu.js → sequenceDiagram-WL72ISMW-DQwYuLw4.js} +1 -1
  207. package/dist/assets/{session-panel-bu72cztx.js → session-panel-DHfR6tDv.js} +1 -1
  208. package/dist/assets/shell-BBh9RTgS.js +1 -0
  209. package/dist/assets/sieve-BSX0MHaT.js +1 -0
  210. package/dist/assets/smalltalk-PvrpLgKW.js +1 -0
  211. package/dist/assets/{snippets-panel-BvuRa1mc.js → snippets-panel-CGs_ME5h.js} +1 -1
  212. package/dist/assets/sparql-CXsmb8zq.js +1 -0
  213. package/dist/assets/{src-nKy6a3tt.js → src-Cf4NnJCp.js} +1 -1
  214. package/dist/assets/state-B_kYpAQh.js +3 -0
  215. package/dist/assets/{state-DgRSUIT8.js → state-DzJiyfWW.js} +1 -1
  216. package/dist/assets/{stateDiagram-FKZM4ZOC-3YqeHe0_.js → stateDiagram-FKZM4ZOC-CseMlyhB.js} +1 -1
  217. package/dist/assets/stateDiagram-v2-4FDKWEC3-Bpp9WfFj.js +1 -0
  218. package/dist/assets/{step-BE8c2ivx.js → step-CVy5FnKg.js} +1 -1
  219. package/dist/assets/stylus-B60bUBy2.js +1 -0
  220. package/dist/assets/swift-BwnHGvoR.js +1 -0
  221. package/dist/assets/tcl-Bj8phnhq.js +1 -0
  222. package/dist/assets/{terminal-zehb39z5.js → terminal-bb566dQu.js} +1 -1
  223. package/dist/assets/{textarea-GPxmW3rS.js → textarea-bAp21zYj.js} +1 -1
  224. package/dist/assets/textile-WPCmEeGb.js +1 -0
  225. package/dist/assets/{time-C12vLLcl.js → time-RwUekUwP.js} +1 -1
  226. package/dist/assets/{timeline-definition-IT6M3QCI-DZQqxPSn.js → timeline-definition-IT6M3QCI-Cac1cr1H.js} +1 -1
  227. package/dist/assets/toml-Cdfp0vaG.js +1 -0
  228. package/dist/assets/{tracing-CVQn241p.js → tracing-HakOQiQR.js} +1 -1
  229. package/dist/assets/{tracing-panel-TnogJs00.js → tracing-panel-eas_Nc-b.js} +2 -2
  230. package/dist/assets/{treemap-GDKQZRPO-C139r55s.js → treemap-GDKQZRPO-Bimjb3pR.js} +1 -1
  231. package/dist/assets/troff-D4suUzlg.js +1 -0
  232. package/dist/assets/ttcn-CvD_6RGm.js +1 -0
  233. package/dist/assets/ttcn-cfg-BX59kgnW.js +1 -0
  234. package/dist/assets/turtle-midFOTTV.js +1 -0
  235. package/dist/assets/{useCellActionButton-C8PCItmw.js → useCellActionButton-CHLJURZ7.js} +1 -1
  236. package/dist/assets/{useDeleteCell-DMZGFMOB.js → useDeleteCell-GFhvGBJ7.js} +1 -1
  237. package/dist/assets/{useDependencyPanelTab-Jnl7B-vS.js → useDependencyPanelTab-DHd7_0b9.js} +1 -1
  238. package/dist/assets/{useNotebookActions-U6kQhg4l.js → useNotebookActions-CrtC0jVZ.js} +1 -1
  239. package/dist/assets/{useRunCells-BMgfN_OV.js → useRunCells-RJeImyCn.js} +1 -1
  240. package/dist/assets/{useSplitCell-B5YK7yVe.js → useSplitCell-BRZ3fmLD.js} +1 -1
  241. package/dist/assets/vb-CSNH0UHQ.js +1 -0
  242. package/dist/assets/vbscript-DTgXfl5y.js +1 -0
  243. package/dist/assets/vega-component-Bq0lrkG7.js +1 -0
  244. package/dist/assets/velocity-CKgzALh9.js +1 -0
  245. package/dist/assets/verilog-NDqaS3bW.js +1 -0
  246. package/dist/assets/vhdl-BibQgFNM.js +1 -0
  247. package/dist/assets/webidl-BjqVurO-.js +1 -0
  248. package/dist/assets/xquery-DQLXMdMd.js +1 -0
  249. package/dist/assets/{xychartDiagram-PRI3JC2R-CmNNcgCM.js → xychartDiagram-PRI3JC2R-DwmHTbm4.js} +1 -1
  250. package/dist/assets/yacas-DlkZlCdY.js +1 -0
  251. package/dist/assets/z80-YKwwCjvZ.js +1 -0
  252. package/dist/index.html +31 -30
  253. package/package.json +1 -1
  254. package/src/components/data-table/TableTopBar.tsx +5 -1
  255. package/src/components/data-table/data-table.tsx +5 -0
  256. package/src/components/data-table/download-policy/atoms.ts +10 -0
  257. package/src/components/data-table/export-actions.tsx +120 -76
  258. package/src/components/editor/file-tree/requesting-tree.tsx +27 -25
  259. package/src/components/editor/file-tree/upload.tsx +23 -24
  260. package/src/core/codemirror/markdown/__tests__/commands.test.ts +3 -3
  261. package/src/core/codemirror/markdown/commands.ts +1 -2
  262. package/src/core/network/requests-network.ts +21 -3
  263. package/src/core/network/types.ts +12 -1
  264. package/src/core/wasm/bridge.ts +14 -1
  265. package/src/plugins/core/__test__/sanitize.test.ts +8 -0
  266. package/src/plugins/impl/DataTablePlugin.tsx +12 -0
  267. package/src/plugins/impl/TabsPlugin.tsx +35 -7
  268. package/src/plugins/impl/__tests__/TabsPlugin.test.tsx +154 -0
  269. package/src/plugins/impl/data-frames/DataFramePlugin.tsx +6 -0
  270. package/src/plugins/impl/vega/resolve-data.ts +8 -1
  271. package/src/plugins/layout/__test__/MermaidPlugin.test.ts +50 -0
  272. package/src/plugins/layout/mermaid/MermaidPlugin.tsx +11 -1
  273. package/src/plugins/layout/mermaid/mermaid.tsx +7 -3
  274. package/src/utils/__tests__/semaphore.test.ts +218 -0
  275. package/src/utils/fileToBase64.ts +8 -7
  276. package/src/utils/semaphore.ts +88 -0
  277. package/dist/assets/JsonOutput-ugBhs7bt.js +0 -49
  278. package/dist/assets/LazyAnyLanguageCodeMirror-BF3xpDgO.js +0 -2
  279. package/dist/assets/apl-m-AMVo9Q.js +0 -1
  280. package/dist/assets/asciiarmor-BCgPMx-s.js +0 -1
  281. package/dist/assets/asn1-f2_lxsgc.js +0 -1
  282. package/dist/assets/brainfuck-ZYebo2B9.js +0 -1
  283. package/dist/assets/channel-CWEEnT6g.js +0 -1
  284. package/dist/assets/chunk-55IACEB6-DD051KDZ.js +0 -1
  285. package/dist/assets/classDiagram-2ON5EDUG-CBbpzZPu.js +0 -1
  286. package/dist/assets/classDiagram-v2-WZHVMYZB-B0cWCuuo.js +0 -1
  287. package/dist/assets/clojure-NE6UT6b9.js +0 -1
  288. package/dist/assets/cmake-7TIUAxVu.js +0 -1
  289. package/dist/assets/cobol-BdI6-uBH.js +0 -1
  290. package/dist/assets/coffeescript-CLx5m4GS.js +0 -1
  291. package/dist/assets/commonlisp-8d9AwdCm.js +0 -1
  292. package/dist/assets/crystal-Bn-cOTHZ.js +0 -1
  293. package/dist/assets/cypher-DnT9gfY3.js +0 -1
  294. package/dist/assets/d-DCjbmG72.js +0 -1
  295. package/dist/assets/diff-DtVdhdPz.js +0 -1
  296. package/dist/assets/dist-BkhaSQrg.js +0 -1
  297. package/dist/assets/dist-_KQbcsP1.js +0 -1
  298. package/dist/assets/dist-bvHsEZ9m.js +0 -1
  299. package/dist/assets/dist-jLyLmWUE.js +0 -1
  300. package/dist/assets/dtd-CHKGQo-k.js +0 -1
  301. package/dist/assets/dylan-DKXsKw9e.js +0 -1
  302. package/dist/assets/ecl-BJuToLkm.js +0 -1
  303. package/dist/assets/eiffel-Bs0gRCeB.js +0 -1
  304. package/dist/assets/elm-BXUbhN4m.js +0 -1
  305. package/dist/assets/erlang-B9b7RAaI.js +0 -1
  306. package/dist/assets/factor-C2NWkG3V.js +0 -1
  307. package/dist/assets/file-explorer-panel-D1O0vw5C.js +0 -26
  308. package/dist/assets/file-name-input-C70pv8AE.js +0 -3
  309. package/dist/assets/fileToBase64-Bzn96tYq.js +0 -1
  310. package/dist/assets/forth-DAh7UX6C.js +0 -1
  311. package/dist/assets/fortran-Dy64-0b5.js +0 -1
  312. package/dist/assets/gas-DC-7PUFB.js +0 -1
  313. package/dist/assets/gherkin-ByiMyVl5.js +0 -1
  314. package/dist/assets/groovy-DaM0RAwa.js +0 -1
  315. package/dist/assets/haskell-BwRtIbXW.js +0 -1
  316. package/dist/assets/haxe-DFGSCjmC.js +0 -1
  317. package/dist/assets/idl-Ip8qszMi.js +0 -1
  318. package/dist/assets/index-BMxMikGP.js +0 -42
  319. package/dist/assets/index-DH5UUBE4.css +0 -2
  320. package/dist/assets/infoDiagram-HS3SLOUP-BDcw9LMK.js +0 -2
  321. package/dist/assets/javascript-DmUu6wxV.js +0 -1
  322. package/dist/assets/julia-C8K-9kxt.js +0 -1
  323. package/dist/assets/katex-S9z-JFdU.js +0 -1
  324. package/dist/assets/livescript-B3MfBDE2.js +0 -1
  325. package/dist/assets/lua-B2YpVx0h.js +0 -1
  326. package/dist/assets/mathematica-D9tSC-hw.js +0 -1
  327. package/dist/assets/mbox-CjoMCyMH.js +0 -1
  328. package/dist/assets/mermaid-4DMBBIKO-gHC2PS1m.js +0 -1
  329. package/dist/assets/mirc-DvJdMBLZ.js +0 -1
  330. package/dist/assets/mllike-5ykSeapn.js +0 -1
  331. package/dist/assets/modelica-laYOX8Zo.js +0 -1
  332. package/dist/assets/mscgen-z_sYErek.js +0 -1
  333. package/dist/assets/mumps-BwcCoPkA.js +0 -1
  334. package/dist/assets/nsis-CpSPdWjV.js +0 -1
  335. package/dist/assets/ntriples-D2ki9JZ6.js +0 -1
  336. package/dist/assets/octave-D817mWs9.js +0 -1
  337. package/dist/assets/oz-3GS03IG4.js +0 -1
  338. package/dist/assets/pascal-C08wXab2.js +0 -1
  339. package/dist/assets/perl-Ija-iETI.js +0 -1
  340. package/dist/assets/pig-BlBD3yVJ.js +0 -1
  341. package/dist/assets/powershell-CjOQ_PjD.js +0 -1
  342. package/dist/assets/properties-5yVGVBrw.js +0 -1
  343. package/dist/assets/protobuf-hlm5v2rk.js +0 -1
  344. package/dist/assets/pug-DifRb20b.js +0 -1
  345. package/dist/assets/puppet-BpFPuj45.js +0 -1
  346. package/dist/assets/python-B_AEFhuO.js +0 -1
  347. package/dist/assets/q-BzDxfEQq.js +0 -1
  348. package/dist/assets/r-BJ9VYyYa.js +0 -1
  349. package/dist/assets/rpm-Ez4HwV9T.js +0 -1
  350. package/dist/assets/ruby-BcHOM0EI.js +0 -1
  351. package/dist/assets/sas-Qmf5gHIU.js +0 -1
  352. package/dist/assets/scheme-Ctib9V77.js +0 -1
  353. package/dist/assets/shell-BtgVCAhn.js +0 -1
  354. package/dist/assets/sieve-CMsTkuH0.js +0 -1
  355. package/dist/assets/smalltalk-BKSCdMTS.js +0 -1
  356. package/dist/assets/sparql-TK6HapG4.js +0 -1
  357. package/dist/assets/state-CjlRDG08.js +0 -3
  358. package/dist/assets/stateDiagram-v2-4FDKWEC3-Dfvjjqh4.js +0 -1
  359. package/dist/assets/stylus-C8FKVvgQ.js +0 -1
  360. package/dist/assets/swift-D7BZKS_y.js +0 -1
  361. package/dist/assets/tcl-DFrjfFmM.js +0 -1
  362. package/dist/assets/textile-Bj913nF7.js +0 -1
  363. package/dist/assets/toml-B6qgmS36.js +0 -1
  364. package/dist/assets/troff-CysSpyUG.js +0 -1
  365. package/dist/assets/ttcn-DG1k5i1B.js +0 -1
  366. package/dist/assets/ttcn-cfg-p1jV7x_I.js +0 -1
  367. package/dist/assets/turtle-DSkxUncB.js +0 -1
  368. package/dist/assets/vb-BIvYC4My.js +0 -1
  369. package/dist/assets/vbscript-Coxg2EVQ.js +0 -1
  370. package/dist/assets/vega-component-DOyQwlmD.js +0 -1
  371. package/dist/assets/velocity-Cy90c7hC.js +0 -1
  372. package/dist/assets/verilog-CTtn3HA0.js +0 -1
  373. package/dist/assets/vhdl-D3r3mwOF.js +0 -1
  374. package/dist/assets/webidl-CHPMhkWI.js +0 -1
  375. package/dist/assets/xquery-d-YlNlXH.js +0 -1
  376. package/dist/assets/yacas-BfZ0gs5_.js +0 -1
  377. package/dist/assets/z80-cYJ4lyZA.js +0 -1
  378. /package/dist/assets/{ImageComparisonComponent-2VO41-VE.js → ImageComparisonComponent-MKB-qBjQ.js} +0 -0
  379. /package/dist/assets/{Inputs-BdyX096j.js → Inputs-NeZ9OMUu.js} +0 -0
  380. /package/dist/assets/{Plot-IawheWsD.js → Plot-KSPp-GdN.js} +0 -0
  381. /package/dist/assets/{apl-T0uH_RjM.js → apl-DHQPYmx2.js} +0 -0
  382. /package/dist/assets/{array-BCwZq3ts.js → array-Cf4PUXPA.js} +0 -0
  383. /package/dist/assets/{asciiarmor-D3ol7c2G.js → asciiarmor-fnQAw8T8.js} +0 -0
  384. /package/dist/assets/{asn1-DA-fXXsk.js → asn1-5lb7I37s.js} +0 -0
  385. /package/dist/assets/{asterisk-Cy-53Fu-.js → asterisk-XerxOHb_.js} +0 -0
  386. /package/dist/assets/{azure-ZuB1zQ8Q.js → azure-C2Di2emT.js} +0 -0
  387. /package/dist/assets/{blob-D-eV0cU3.js → blob-Daju1h1M.js} +0 -0
  388. /package/dist/assets/{brainfuck-exn1QR7H.js → brainfuck-D30bRgvC.js} +0 -0
  389. /package/dist/assets/{card-BsOjr9wU.js → card-ICvk7-qa.js} +0 -0
  390. /package/dist/assets/{chunk-4F5CHEZ2-BBsStyPF.js → chunk-4F5CHEZ2-CRKjiogH.js} +0 -0
  391. /package/dist/assets/{chunk-B2363JML-CPCjJ6tH.js → chunk-B2363JML-DvPUNzRx.js} +0 -0
  392. /package/dist/assets/{chunk-DR5Q36YT-DpSMafKt.js → chunk-DR5Q36YT-DrxpR6Mz.js} +0 -0
  393. /package/dist/assets/{chunk-FRFDVMJY-D6StbPqE.js → chunk-FRFDVMJY-DpWfc7R9.js} +0 -0
  394. /package/dist/assets/{chunk-PL6DKKU2-x3Qoia3Y.js → chunk-PL6DKKU2-D7_8iK_E.js} +0 -0
  395. /package/dist/assets/{chunk-SJTYNZTY-BNaCydHS.js → chunk-SJTYNZTY-DwmVeUIB.js} +0 -0
  396. /package/dist/assets/{chunk-TQ3KTPDO-DfYTN8Ct.js → chunk-TQ3KTPDO-BdfwTgi0.js} +0 -0
  397. /package/dist/assets/{chunk-UMXZTB3W-DsE6dCbX.js → chunk-UMXZTB3W-BZR4zVXt.js} +0 -0
  398. /package/dist/assets/{clear-button-DBrTU3uL.js → clear-button-DJUQ_tmP.js} +0 -0
  399. /package/dist/assets/{click-outside-container-BXzp0MYr.js → click-outside-container-Npdlddni.js} +0 -0
  400. /package/dist/assets/{clike-BK27e5qn.js → clike-jZeb2kFn.js} +0 -0
  401. /package/dist/assets/{clojure-Df1U5nhC.js → clojure-C0pkR8m2.js} +0 -0
  402. /package/dist/assets/{cmake-DrCf0yvp.js → cmake-DlvFtk_M.js} +0 -0
  403. /package/dist/assets/{cobol-BWxHqof4.js → cobol-C_yb45mr.js} +0 -0
  404. /package/dist/assets/{coffeescript-nKvg8y_U.js → coffeescript-DBK0AeMT.js} +0 -0
  405. /package/dist/assets/{colors-CI3VyX7X.js → colors-DUsH-HF1.js} +0 -0
  406. /package/dist/assets/{common-keywords-CU-S2Vqm.js → common-keywords-D2VmoaPb.js} +0 -0
  407. /package/dist/assets/{commonlisp-Dm562cBV.js → commonlisp-Bo8hOdn-.js} +0 -0
  408. /package/dist/assets/{crystal-CrCmK2Cb.js → crystal-DYrQEMVi.js} +0 -0
  409. /package/dist/assets/{css-jpfGFPDE.js → css-zh47N2UC.js} +0 -0
  410. /package/dist/assets/{cypher-RQ5M28al.js → cypher-BWPAHm69.js} +0 -0
  411. /package/dist/assets/{cytoscape.esm-BbAjzIsa.js → cytoscape.esm-B7Zr-PlQ.js} +0 -0
  412. /package/dist/assets/{d-CNQ_nPqU.js → d-CMuL95tt.js} +0 -0
  413. /package/dist/assets/{diff-DOODcY7A.js → diff-oor_HZ51.js} +0 -0
  414. /package/dist/assets/{dist-CsEqrZxx.js → dist-1sgFrolC.js} +0 -0
  415. /package/dist/assets/{dist-DBBYmRY4.js → dist-B847wb8t.js} +0 -0
  416. /package/dist/assets/{dist-_qPWf6sD.js → dist-BDZFwK9_.js} +0 -0
  417. /package/dist/assets/{dist-ooLAQ9IK.js → dist-BjkXqMhR.js} +0 -0
  418. /package/dist/assets/{dist-DggusHaA.js → dist-Bu99ARwH.js} +0 -0
  419. /package/dist/assets/{dist-HW7R98td.js → dist-Bxj5sO2I.js} +0 -0
  420. /package/dist/assets/{dist-D6wwIjcW.js → dist-CBX4gLSR.js} +0 -0
  421. /package/dist/assets/{dist-CEUFTp7U.js → dist-CPepgudT.js} +0 -0
  422. /package/dist/assets/{dist-CGDn0y-i.js → dist-CQG39nVX.js} +0 -0
  423. /package/dist/assets/{dist-Cmcbyg5X.js → dist-CSOCJn9h.js} +0 -0
  424. /package/dist/assets/{dist-DxxvVPQH.js → dist-CpSELpRR.js} +0 -0
  425. /package/dist/assets/{dist-B96NwXcp.js → dist-DLY3MFt_.js} +0 -0
  426. /package/dist/assets/{dist-DS5RCKZO.js → dist-D_yqofzt.js} +0 -0
  427. /package/dist/assets/{dist-rzeRelEY.js → dist-DaXyrkOa.js} +0 -0
  428. /package/dist/assets/{dist-9g-_Ln9y.js → dist-DdITFgCr.js} +0 -0
  429. /package/dist/assets/{dist-DCqWIRLq.js → dist-DsbE_iBm.js} +0 -0
  430. /package/dist/assets/{dist-_XomGjg6.js → dist-GYoBJCzF.js} +0 -0
  431. /package/dist/assets/{dist-Dw9UX7x1.js → dist-q4pwbvzW.js} +0 -0
  432. /package/dist/assets/{dtd-CRYKjxdR.js → dtd-Fe_Eikw6.js} +0 -0
  433. /package/dist/assets/{duckdb-keywords-CR9f4wu5.js → duckdb-keywords-qEANwaB-.js} +0 -0
  434. /package/dist/assets/{dylan-Bg0sO2y3.js → dylan-DjUZAjRK.js} +0 -0
  435. /package/dist/assets/{ebnf-BdwTqLUx.js → ebnf-BbpZiR1i.js} +0 -0
  436. /package/dist/assets/{ecl-DaBeV7OZ.js → ecl-qgyT1LqI.js} +0 -0
  437. /package/dist/assets/{eiffel-BtJc6fqQ.js → eiffel-Dgulx8rf.js} +0 -0
  438. /package/dist/assets/{elm-D9Rly7Qq.js → elm-BvFY4GJb.js} +0 -0
  439. /package/dist/assets/{empty-state-CsVQSqKA.js → empty-state-vCWg-_A9.js} +0 -0
  440. /package/dist/assets/{erlang-FZMRuv-7.js → erlang-Ba0XOLlj.js} +0 -0
  441. /package/dist/assets/{errors-TZBmrJmc.js → errors-CPlNr33a.js} +0 -0
  442. /package/dist/assets/{esm-D_nSG7uo.js → esm-C9WujutX.js} +0 -0
  443. /package/dist/assets/{fcl-BFWIADMy.js → fcl-CvYyfPhf.js} +0 -0
  444. /package/dist/assets/{formatting-TmuwpwTs.js → formatting-Chn6WhRe.js} +0 -0
  445. /package/dist/assets/{forth-C6jh4lHA.js → forth-gbBFxz8f.js} +0 -0
  446. /package/dist/assets/{fortran-DuxTe5qi.js → fortran-CXijpPbh.js} +0 -0
  447. /package/dist/assets/{gas-D7RWbiQ0.js → gas-CnHGSLCd.js} +0 -0
  448. /package/dist/assets/{gherkin-DV4l4nlf.js → gherkin-DfEZpSxY.js} +0 -0
  449. /package/dist/assets/{groovy-Ij7mXzwd.js → groovy-9JiNA9gq.js} +0 -0
  450. /package/dist/assets/{haskell-BT_ZNgUJ.js → haskell-CKr_RZFK.js} +0 -0
  451. /package/dist/assets/{haxe-DYYwGmM8.js → haxe-DsAAHfaR.js} +0 -0
  452. /package/dist/assets/{http-CgzOAOXj.js → http-BJwmEMko.js} +0 -0
  453. /package/dist/assets/{idl-CjBvIccU.js → idl-Djz72z1a.js} +0 -0
  454. /package/dist/assets/{init-DE_uL9Ns.js → init-DRQmrFIb.js} +0 -0
  455. /package/dist/assets/{javascript-DQz7szA1.js → javascript-CsBr0q2-.js} +0 -0
  456. /package/dist/assets/{julia-U0NSUEwm.js → julia-BCYfl68O.js} +0 -0
  457. /package/dist/assets/{katex-M9SX-Gs-.js → katex-BywUFgaS.js} +0 -0
  458. /package/dist/assets/{links-iy4RlM-h.js → links-BhX7oUFH.js} +0 -0
  459. /package/dist/assets/{livescript-D7jeebX7.js → livescript-BEw7FNJP.js} +0 -0
  460. /package/dist/assets/{loro_wasm_bg-Bu4Ofw1K.js → loro_wasm_bg-BArxhAm3.js} +0 -0
  461. /package/dist/assets/{lua-CT4vrRvN.js → lua-DqxHXOsz.js} +0 -0
  462. /package/dist/assets/{marimo-icons-BSB-Z_W3.js → marimo-icons-Dk6YhPWV.js} +0 -0
  463. /package/dist/assets/{math-Bf0RgaKx.js → math-BJjKGmt3.js} +0 -0
  464. /package/dist/assets/{mathematica-DmzlinOc.js → mathematica-Do-octY0.js} +0 -0
  465. /package/dist/assets/{mbox-DYDL20A1.js → mbox-VgrgGytk.js} +0 -0
  466. /package/dist/assets/{mirc-6LiBC6Dw.js → mirc-DkD5mNIp.js} +0 -0
  467. /package/dist/assets/{mllike-orSu1SHG.js → mllike-C8Ah4kKN.js} +0 -0
  468. /package/dist/assets/{modelica-BsibU-7c.js → modelica-2q7w6nLE.js} +0 -0
  469. /package/dist/assets/{mscgen-vX4NsSXf.js → mscgen-BRqvO7u4.js} +0 -0
  470. /package/dist/assets/{multi-icon-DQxqgfM2.js → multi-icon-BvuxcR2m.js} +0 -0
  471. /package/dist/assets/{mumps-DIZYQE11.js → mumps-CjtiTT1a.js} +0 -0
  472. /package/dist/assets/{nginx-CFpObAqg.js → nginx-JMUOT8EG.js} +0 -0
  473. /package/dist/assets/{node-sql-parser-B8vXamqL.js → node-sql-parser-TdBo37ty.js} +0 -0
  474. /package/dist/assets/{ntriples-CwlUIE0o.js → ntriples-4lauqsM6.js} +0 -0
  475. /package/dist/assets/{octave-BWtN_wao.js → octave-A2kFK0nR.js} +0 -0
  476. /package/dist/assets/{oz-CJMVKlqL.js → oz-CvXDMSbl.js} +0 -0
  477. /package/dist/assets/{panel-context-B3J07LRC.js → panel-context-D-qi_oxP.js} +0 -0
  478. /package/dist/assets/{pascal-C9rPtth-.js → pascal-6Jinj26u.js} +0 -0
  479. /package/dist/assets/{path-LDcaQ64B.js → path-D7fidI_g.js} +0 -0
  480. /package/dist/assets/{perl-CF7pKLbl.js → perl-CXauYQdN.js} +0 -0
  481. /package/dist/assets/{pig-Bu0nn8JT.js → pig-Dl0QLQI6.js} +0 -0
  482. /package/dist/assets/{powershell-Bzwpi8yQ.js → powershell-6bdy_rHW.js} +0 -0
  483. /package/dist/assets/{properties-Cfh_Lj0j.js → properties-p1rx3aF7.js} +0 -0
  484. /package/dist/assets/{protobuf-Vz3fs9Hb.js → protobuf-BZ6p9Xh_.js} +0 -0
  485. /package/dist/assets/{puppet-JwSHf4DX.js → puppet-CjdIRV7D.js} +0 -0
  486. /package/dist/assets/{python-BRHQZrcc.js → python-uzyJYIWU.js} +0 -0
  487. /package/dist/assets/{q-DWFQ7YI_.js → q-CfD3i9uI.js} +0 -0
  488. /package/dist/assets/{r-DHkTNFL2.js → r-JyJdYHQB.js} +0 -0
  489. /package/dist/assets/{request-registry-BwzANGxx.js → request-registry-5ELz5pd2.js} +0 -0
  490. /package/dist/assets/{requests-BqcqF00P.js → requests-QKoDeQkn.js} +0 -0
  491. /package/dist/assets/{rpm-zbaZz_dk.js → rpm-DuGPfDyX.js} +0 -0
  492. /package/dist/assets/{ruby-COvM5Bj_.js → ruby-CA1TzLxZ.js} +0 -0
  493. /package/dist/assets/{runs-5odJFrfi.js → runs-DRld30N_.js} +0 -0
  494. /package/dist/assets/{sas-Be8P6y_s.js → sas-BJPWZC7M.js} +0 -0
  495. /package/dist/assets/{scheme-B9Zors0b.js → scheme-IRagAY3r.js} +0 -0
  496. /package/dist/assets/{share-DIVpiHPe.js → share-CqnSBwZy.js} +0 -0
  497. /package/dist/assets/{shell-CaaQwZ-W.js → shell-BVpF3W_J.js} +0 -0
  498. /package/dist/assets/{sieve-CdflT_3W.js → sieve-BSfPMeZl.js} +0 -0
  499. /package/dist/assets/{simple-mode-BJAT_N3M.js → simple-mode-BmS_AmGQ.js} +0 -0
  500. /package/dist/assets/{smalltalk-CRO88y3z.js → smalltalk-CkHVehky.js} +0 -0
  501. /package/dist/assets/{solr-BkyoAXqg.js → solr-BHjX6hxO.js} +0 -0
  502. /package/dist/assets/{sparql-DEker8ZS.js → sparql-CmKKjr-f.js} +0 -0
  503. /package/dist/assets/{spreadsheet-7FZkhkVo.js → spreadsheet-ColK3G9J.js} +0 -0
  504. /package/dist/assets/{sql-BNnXxKXA.js → sql-BfkgiLSh.js} +0 -0
  505. /package/dist/assets/{src-CmKhyEBC.js → src-HwYBNPfa.js} +0 -0
  506. /package/dist/assets/{state-Z-H4o98V.js → state-BV_qjCwT.js} +0 -0
  507. /package/dist/assets/{stylus-DAJwnVOa.js → stylus-D28PuRsm.js} +0 -0
  508. /package/dist/assets/{swift-D5F-FU3-.js → swift-D-jfpPuv.js} +0 -0
  509. /package/dist/assets/{swiper-component-B-P7FNP9.js → swiper-component-CBSZ9l9W.js} +0 -0
  510. /package/dist/assets/{tcl-DirNbhYm.js → tcl-BrQdCDVA.js} +0 -0
  511. /package/dist/assets/{textile-DhHo4rKl.js → textile-DXBc8HMq.js} +0 -0
  512. /package/dist/assets/{tiddlywiki-DE5lnTl3.js → tiddlywiki-DzM1IR9M.js} +0 -0
  513. /package/dist/assets/{tiki-Dt9oCY2i.js → tiki-DI4TiGi6.js} +0 -0
  514. /package/dist/assets/{timer-CIInKAPS.js → timer-ffBO1paY.js} +0 -0
  515. /package/dist/assets/{toml-CrP9HWVu.js → toml-ClSouHPE.js} +0 -0
  516. /package/dist/assets/{treemap-BKxvGXqJ.js → treemap-CZF0Enj1.js} +0 -0
  517. /package/dist/assets/{troff-BWD1WiE0.js → troff-BGDyQn9x.js} +0 -0
  518. /package/dist/assets/{ttcn-CQzcRj0D.js → ttcn-De1OdISX.js} +0 -0
  519. /package/dist/assets/{ttcn-cfg-jzTcqwRW.js → ttcn-cfg-CQMSrhCz.js} +0 -0
  520. /package/dist/assets/{turtle-BAqH2D2z.js → turtle-DNhfxysg.js} +0 -0
  521. /package/dist/assets/{types-z6Sk3JCV.js → types-Bhw3Hco_.js} +0 -0
  522. /package/dist/assets/{useInterval-CG264TRB.js → useInterval-CvFz96h2.js} +0 -0
  523. /package/dist/assets/{vb-CrUpzy4g.js → vb-BX7-Md9G.js} +0 -0
  524. /package/dist/assets/{vbscript-DEuHZ0Y0.js → vbscript-DNMzJOTU.js} +0 -0
  525. /package/dist/assets/{velocity-D99sTvXl.js → velocity-viirwPm7.js} +0 -0
  526. /package/dist/assets/{verilog-XWBMMjwd.js → verilog-CZguTLBV.js} +0 -0
  527. /package/dist/assets/{vhdl-BAGmVXDV.js → vhdl-CAEhCBOl.js} +0 -0
  528. /package/dist/assets/{web-vitals-BaJPM15X.js → web-vitals-CBsQ2DM_.js} +0 -0
  529. /package/dist/assets/{webidl-xagG_7hd.js → webidl-BNJg_7gX.js} +0 -0
  530. /package/dist/assets/{write-secret-modal-BFLUPDlo.js → write-secret-modal-D8Sww7eA.js} +0 -0
  531. /package/dist/assets/{ws-CtTwmdal.js → ws-BZQmQxZ7.js} +0 -0
  532. /package/dist/assets/{xquery-B8Mguhly.js → xquery-CGV_r322.js} +0 -0
  533. /package/dist/assets/{yacas-XW2NxGKw.js → yacas-uRzw7z7m.js} +0 -0
  534. /package/dist/assets/{z80-DhICfTcL.js → z80-CBK8t-9T.js} +0 -0
@@ -1,5 +1,6 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
+ import { useAtomValue } from "jotai";
3
4
  import {
4
5
  BracesIcon,
5
6
  BrickWallIcon,
@@ -9,10 +10,11 @@ import {
9
10
  } from "lucide-react";
10
11
  import React from "react";
11
12
  import { useLocale } from "react-aria";
13
+ import { downloadSizeLimitAtom } from "./download-policy/atoms";
12
14
  import { logNever } from "@/utils/assertNever";
13
15
  import { cn } from "@/utils/cn";
14
16
  import { copyToClipboard } from "@/utils/copy";
15
- import { downloadByURL } from "@/utils/download";
17
+ import { downloadByURL, withLoadingToast } from "@/utils/download";
16
18
  import { prettyError } from "@/utils/errors";
17
19
  import { Filenames } from "@/utils/filenames";
18
20
  import {
@@ -33,17 +35,6 @@ import {
33
35
  import { Tooltip } from "../ui/tooltip";
34
36
  import { toast } from "../ui/use-toast";
35
37
 
36
- type DownloadFormat = "csv" | "json" | "parquet";
37
-
38
- export interface ExportActionProps {
39
- downloadAs: (req: { format: DownloadFormat }) => Promise<{
40
- url: string;
41
- filename: string;
42
- error?: string | null;
43
- missing_packages?: string[] | null;
44
- }>;
45
- }
46
-
47
38
  const FILE_TYPES = {
48
39
  CSV: {
49
40
  label: "CSV",
@@ -84,18 +75,45 @@ const copyOptions = [
84
75
  FILE_TYPES.CSV,
85
76
  FILE_TYPES.MARKDOWN,
86
77
  ];
78
+
79
+ type DownloadFormat = (typeof downloadOptions)[number]["format"];
80
+ type CopyFormat = (typeof copyOptions)[number]["format"];
81
+
82
+ export interface ExportActionProps {
83
+ downloadAs: (req: { format: DownloadFormat }) => Promise<{
84
+ url: string;
85
+ filename: string;
86
+ error?: string | null;
87
+ missing_packages?: string[] | null;
88
+ }>;
89
+ // JSON-serialized size of the currently-rendered data. Used together with
90
+ // downloadSizeLimitAtom to disable the Export button when a host (e.g.,
91
+ // marimo-lsp inside VS Code) declares a download size cap. Null/undefined
92
+ // means "no info" and the gate stays disabled (fail-open).
93
+ sizeBytes?: number | null;
94
+ }
95
+
87
96
  const labelForDownloadFormat = (format: DownloadFormat): string =>
88
97
  downloadOptions.find((opt) => opt.format === format)?.label ?? format;
98
+ const labelForCopyFormat = (format: CopyFormat): string =>
99
+ copyOptions.find((opt) => opt.format === format)?.label ?? format;
89
100
 
90
101
  export const ExportMenu: React.FC<ExportActionProps> = (props) => {
91
102
  const { locale } = useLocale();
92
103
  const [open, setOpen] = React.useState(false);
104
+ const policy = useAtomValue(downloadSizeLimitAtom);
105
+ const disabled = !!(
106
+ policy &&
107
+ props.sizeBytes != null &&
108
+ props.sizeBytes > policy.limitBytes
109
+ );
93
110
 
94
111
  const button = (
95
112
  <Button
96
113
  data-testid="export-button"
97
114
  size="xs"
98
115
  variant="text"
116
+ disabled={disabled}
99
117
  className={cn(
100
118
  "print:hidden text-xs gap-1",
101
119
  open ? "text-primary" : "text-muted-foreground",
@@ -109,7 +127,10 @@ export const ExportMenu: React.FC<ExportActionProps> = (props) => {
109
127
  const resolveDownloadUrl = async (
110
128
  format: DownloadFormat,
111
129
  onRetry: () => void,
112
- ): Promise<{ url: string; filename: string } | null> => {
130
+ ): Promise<{
131
+ url: string;
132
+ filename: string;
133
+ } | null> => {
113
134
  let response: Awaited<ReturnType<typeof props.downloadAs>>;
114
135
  try {
115
136
  response = await props.downloadAs({ format });
@@ -139,81 +160,104 @@ export const ExportMenu: React.FC<ExportActionProps> = (props) => {
139
160
  return null;
140
161
  }
141
162
 
142
- return { url: response.url, filename: response.filename };
163
+ return {
164
+ url: response.url,
165
+ filename: response.filename,
166
+ };
143
167
  };
144
168
 
145
169
  const handleDownload = async (format: DownloadFormat) => {
146
- const result = await resolveDownloadUrl(format, () => {
147
- void handleDownload(format);
148
- });
149
- if (!result) {
150
- return;
170
+ const label = labelForDownloadFormat(format);
171
+ const ok = await withLoadingToast(
172
+ `Preparing ${label} export...`,
173
+ async () => {
174
+ const result = await resolveDownloadUrl(format, () => {
175
+ void handleDownload(format);
176
+ });
177
+ if (!result) {
178
+ return false;
179
+ }
180
+ const rawName = (result.filename ?? "").trim();
181
+ const baseName = Filenames.withoutExtension(rawName) || "download";
182
+ const downloadName = `${baseName}.${format}`;
183
+ // Append ?download=1 so the server returns Content-Disposition: attachment.
184
+ // This forces a save even when <a download> is ignored — e.g., inside
185
+ // sandboxed iframes that lack `allow-downloads`. Skip for data: URLs
186
+ // (used in pyodide/wasm) since query params would corrupt the payload.
187
+ let downloadUrl = result.url;
188
+ if (!downloadUrl.startsWith("data:")) {
189
+ const separator = downloadUrl.includes("?") ? "&" : "?";
190
+ const params = new URLSearchParams({
191
+ download: "1",
192
+ filename: downloadName,
193
+ });
194
+ downloadUrl = `${downloadUrl}${separator}${params.toString()}`;
195
+ }
196
+ downloadByURL(downloadUrl, downloadName);
197
+ return true;
198
+ },
199
+ );
200
+ if (ok) {
201
+ toast({ title: `${label} download started` });
151
202
  }
152
- const rawName = (result.filename ?? "").trim();
153
- const baseName = Filenames.withoutExtension(rawName) || "download";
154
- const downloadName = `${baseName}.${format}`;
155
- // Append ?download=1 so the server returns Content-Disposition: attachment.
156
- // This forces a save even when <a download> is ignored — e.g., inside
157
- // sandboxed iframes that lack `allow-downloads`. Skip for data: URLs
158
- // (used in pyodide/wasm) since query params would corrupt the payload.
159
- let downloadUrl = result.url;
160
- if (!downloadUrl.startsWith("data:")) {
161
- const separator = downloadUrl.includes("?") ? "&" : "?";
162
- const params = new URLSearchParams({
163
- download: "1",
164
- filename: downloadName,
165
- });
166
- downloadUrl = `${downloadUrl}${separator}${params.toString()}`;
167
- }
168
- downloadByURL(downloadUrl, downloadName);
169
203
  };
170
204
 
171
- const handleClipboardCopy = async (
172
- format: (typeof copyOptions)[number]["format"],
173
- ) => {
174
- const sourceFormat: DownloadFormat = format === "csv" ? "csv" : "json";
175
- const result = await resolveDownloadUrl(sourceFormat, () => {
176
- void handleClipboardCopy(format);
177
- });
178
- if (!result) {
179
- return;
180
- }
205
+ const handleClipboardCopy = async (format: CopyFormat) => {
206
+ await withLoadingToast(
207
+ `Preparing ${labelForCopyFormat(format)} for clipboard...`,
208
+ async () => {
209
+ const sourceFormat: DownloadFormat = format === "csv" ? "csv" : "json";
210
+ const result = await resolveDownloadUrl(sourceFormat, () => {
211
+ void handleClipboardCopy(format);
212
+ });
213
+ if (!result) {
214
+ return;
215
+ }
181
216
 
182
- let text: string;
183
- switch (format) {
184
- case "tsv": {
185
- const json = await fetchJson(result.url);
186
- text = jsonToTSV(json, locale);
187
- break;
188
- }
189
- case "json": {
190
- const json = await fetchJson(result.url);
191
- text = JSON.stringify(json, null, 2);
192
- break;
193
- }
194
- case "csv":
195
- text = await fetchText(result.url);
196
- break;
197
- case "markdown": {
198
- const json = await fetchJson(result.url);
199
- text = jsonToMarkdown(json);
200
- break;
201
- }
202
- default:
203
- logNever(format);
204
- return;
205
- }
217
+ let text: string;
218
+ switch (format) {
219
+ case "tsv": {
220
+ const json = await fetchJson(result.url);
221
+ text = jsonToTSV(json, locale);
222
+ break;
223
+ }
224
+ case "json": {
225
+ const json = await fetchJson(result.url);
226
+ text = JSON.stringify(json, null, 2);
227
+ break;
228
+ }
229
+ case "csv":
230
+ text = await fetchText(result.url);
231
+ break;
232
+ case "markdown": {
233
+ const json = await fetchJson(result.url);
234
+ text = jsonToMarkdown(json);
235
+ break;
236
+ }
237
+ default:
238
+ logNever(format);
239
+ return;
240
+ }
206
241
 
207
- await copyToClipboard(text);
208
- toast({
209
- title: "Copied to clipboard",
210
- });
242
+ await copyToClipboard(text);
243
+ toast({
244
+ title: "Copied to clipboard",
245
+ });
246
+ },
247
+ );
211
248
  };
212
249
 
213
250
  return (
214
251
  <DropdownMenu modal={false} open={open} onOpenChange={setOpen}>
215
- <Tooltip content="Export" open={open ? false : undefined}>
216
- <DropdownMenuTrigger asChild={true}>{button}</DropdownMenuTrigger>
252
+ <Tooltip
253
+ content={disabled ? policy?.unavailableMessage : "Export"}
254
+ open={open ? false : undefined}
255
+ >
256
+ <DropdownMenuTrigger asChild={true} disabled={disabled}>
257
+ <span tabIndex={disabled ? 0 : -1} className="inline-flex">
258
+ {button}
259
+ </span>
260
+ </DropdownMenuTrigger>
217
261
  </Tooltip>
218
262
  <DropdownMenuContent side="bottom" className="print:hidden">
219
263
  <DropdownMenuLabel className="text-xs text-muted-foreground">
@@ -11,6 +11,9 @@ import { prettyError } from "@/utils/errors";
11
11
  import { Functions } from "@/utils/functions";
12
12
  import { type FilePath, PathBuilder } from "@/utils/paths";
13
13
  import { resolvePaths } from "@/utils/pathUtils";
14
+ import { mapWithConcurrency } from "@/utils/semaphore";
15
+
16
+ const FILE_OP_CONCURRENCY = 5;
14
17
 
15
18
  /**
16
19
  * Normalized result of a file mutation: the server response when successful,
@@ -159,28 +162,26 @@ export class RequestingTree {
159
162
  ? (this.delegate.find(parentId)?.data.path ?? parentId)
160
163
  : this.rootPath;
161
164
 
162
- await Promise.all(
163
- fromIds.map(async (id) => {
164
- const node = this.delegate.find(id);
165
- if (!node) {
166
- return;
167
- }
168
- const originalPath = node.data.path;
169
- const newPath = this.path.join(
170
- parentPath,
171
- this.path.basename(originalPath as FilePath),
172
- );
173
- const result = await this.callbacks
174
- .renameFileOrFolder({ path: originalPath, newPath })
175
- .then(handleFileResponse);
176
- if (!result) {
177
- return;
178
- }
165
+ await mapWithConcurrency(fromIds, FILE_OP_CONCURRENCY, async (id) => {
166
+ const node = this.delegate.find(id);
167
+ if (!node) {
168
+ return;
169
+ }
170
+ const originalPath = node.data.path;
171
+ const newPath = this.path.join(
172
+ parentPath,
173
+ this.path.basename(originalPath as FilePath),
174
+ );
175
+ const result = await this.callbacks
176
+ .renameFileOrFolder({ path: originalPath, newPath })
177
+ .then(handleFileResponse);
178
+ if (!result) {
179
+ return;
180
+ }
179
181
 
180
- this.delegate.move({ id, parentId, index: 0 });
181
- this.delegate.update({ id, changes: { path: newPath } });
182
- }),
183
- );
182
+ this.delegate.move({ id, parentId, index: 0 });
183
+ this.delegate.update({ id, changes: { path: newPath } });
184
+ });
184
185
 
185
186
  this.onChange(this.delegate.data);
186
187
 
@@ -262,11 +263,12 @@ export class RequestingTree {
262
263
  this.rootPath,
263
264
  ...ids.map((id) => this.delegate.find(id)?.data.path),
264
265
  ].filter(Boolean);
265
- // Request all folders in parallel, and catch any errors
266
- const data = await Promise.all(
267
- openFolders.map((path) =>
266
+ // Request open folders with bounded concurrency; swallow per-folder errors.
267
+ const data = await mapWithConcurrency(
268
+ openFolders,
269
+ FILE_OP_CONCURRENCY,
270
+ (path) =>
268
271
  this.callbacks.listFiles({ path: path }).catch(() => ({ files: [] })),
269
- ),
270
272
  );
271
273
 
272
274
  for (const [idx, openFolder] of openFolders.entries()) {
@@ -3,13 +3,14 @@
3
3
  import { type DropzoneOptions, useDropzone } from "react-dropzone";
4
4
  import { toast } from "@/components/ui/use-toast";
5
5
  import { useRequestClient } from "@/core/network/requests";
6
- import { serializeBlob } from "@/utils/blob";
7
6
  import { withLoadingToast } from "@/utils/download";
8
7
  import { Logger } from "@/utils/Logger";
9
8
  import { type FilePath, PathBuilder } from "@/utils/paths";
9
+ import { mapWithConcurrency } from "@/utils/semaphore";
10
10
  import { refreshRoot } from "./state";
11
11
 
12
12
  const MAX_SIZE = 1024 * 1024 * 100; // 100MB
13
+ const UPLOAD_CONCURRENCY = 5;
13
14
 
14
15
  export function useFileExplorerUpload(options: DropzoneOptions = {}) {
15
16
  const { sendCreateFileOrFolder } = useRequestClient();
@@ -59,30 +60,28 @@ export function useFileExplorerUpload(options: DropzoneOptions = {}) {
59
60
  loadingTitle,
60
61
  async (progress) => {
61
62
  progress.addTotal(acceptedFiles.length);
62
- for (const file of acceptedFiles) {
63
- // We strip the leading slash since File.path can return
64
- // `/path/to/file`.
65
- const filePath = stripLeadingSlash(getPath(file));
66
- let directoryPath = "" as FilePath;
67
- if (filePath) {
68
- directoryPath =
69
- PathBuilder.guessDeliminator(filePath).dirname(filePath);
70
- }
63
+ await mapWithConcurrency(
64
+ acceptedFiles,
65
+ UPLOAD_CONCURRENCY,
66
+ async (file) => {
67
+ // We strip the leading slash since File.path can return
68
+ // `/path/to/file`.
69
+ const filePath = stripLeadingSlash(getPath(file));
70
+ let directoryPath = "" as FilePath;
71
+ if (filePath) {
72
+ directoryPath =
73
+ PathBuilder.guessDeliminator(filePath).dirname(filePath);
74
+ }
71
75
 
72
- // File contents are sent base64-encoded to support arbitrary
73
- // bytes data
74
- //
75
- // get the raw base64-encoded data from a string starting with
76
- // data:*/*;base64,
77
- const base64 = (await serializeBlob(file)).split(",")[1];
78
- await sendCreateFileOrFolder({
79
- path: directoryPath,
80
- type: "file",
81
- name: file.name,
82
- contents: base64,
83
- });
84
- progress.increment(1);
85
- }
76
+ await sendCreateFileOrFolder({
77
+ path: directoryPath,
78
+ type: "file",
79
+ name: file.name,
80
+ file,
81
+ });
82
+ progress.increment(1);
83
+ },
84
+ );
86
85
  await refreshRoot();
87
86
  },
88
87
  onFinish,
@@ -246,7 +246,7 @@ describe("insertImage", () => {
246
246
  path: "public",
247
247
  type: "file",
248
248
  name: "hello.png",
249
- contents: "AQID",
249
+ file: expect.any(File),
250
250
  });
251
251
 
252
252
  expect(view.state.doc.toString()).toMatchInlineSnapshot(
@@ -291,7 +291,7 @@ describe("insertImage", () => {
291
291
  path: "nested/public", // store in public folder of notebook directory
292
292
  type: "file",
293
293
  name: "hello.png",
294
- contents: "AQID",
294
+ file: expect.any(File),
295
295
  });
296
296
 
297
297
  expect(view.state.doc.toString()).toMatchInlineSnapshot(
@@ -337,7 +337,7 @@ describe("insertImage", () => {
337
337
  path: "/Users/user/Development/project/public",
338
338
  type: "file",
339
339
  name: "hello.png",
340
- contents: "AQID",
340
+ file: expect.any(File),
341
341
  });
342
342
 
343
343
  // Should convert absolute path to relative path
@@ -313,7 +313,6 @@ export async function insertImage(view: EditorView, file: File) {
313
313
  // If the file is base64 encoded, we can save it locally to prevent large file strings
314
314
  try {
315
315
  if (dataUrl.startsWith("data:")) {
316
- const base64 = dataUrl.split(",")[1];
317
316
  let inputFilename = prompt(
318
317
  "We can save your image as a file. Enter a filename.",
319
318
  file.name,
@@ -348,7 +347,7 @@ export async function insertImage(view: EditorView, file: File) {
348
347
  path: publicFolderPath as FilePath,
349
348
  type: "file",
350
349
  name: inputFilename,
351
- contents: base64,
350
+ file,
352
351
  });
353
352
 
354
353
  if (createFileRes.success) {
@@ -6,6 +6,19 @@ import { API, createClientWithRuntimeManager } from "./api";
6
6
  import { waitForConnectionOpen } from "./connection";
7
7
  import type { EditRequests, RunRequests } from "./types";
8
8
 
9
+ /**
10
+ * Options for POSTing FormData via openapi-fetch. openapi-fetch types
11
+ * request bodies from the JSON schema, so we bypass the body type and
12
+ * override the serializer to pass the FormData through unchanged; the
13
+ * browser then sets the multipart Content-Type with boundary.
14
+ */
15
+ function multipartInit(formData: FormData) {
16
+ return {
17
+ body: formData as never,
18
+ bodySerializer: (body: unknown) => body as never,
19
+ };
20
+ }
21
+
9
22
  const { handleResponse, handleResponseReturnNull } = API;
10
23
 
11
24
  export function createNetworkRequests(): EditRequests & RunRequests {
@@ -298,10 +311,15 @@ export function createNetworkRequests(): EditRequests & RunRequests {
298
311
  },
299
312
  sendCreateFileOrFolder: async (request) => {
300
313
  await waitForConnectionOpen();
314
+ const formData = new FormData();
315
+ formData.append("path", request.path);
316
+ formData.append("type", request.type);
317
+ formData.append("name", request.name);
318
+ if (request.file) {
319
+ formData.append("file", request.file, request.name);
320
+ }
301
321
  return getClient()
302
- .POST("/api/files/create", {
303
- body: request,
304
- })
322
+ .POST("/api/files/create", multipartInit(formData))
305
323
  .then(handleResponse);
306
324
  },
307
325
  sendDeleteFileOrFolder: async (request) => {
@@ -80,6 +80,17 @@ export type SaveUserConfigurationRequest =
80
80
  export interface SetCellConfigRequest {
81
81
  configs: Record<CellId, Partial<CellConfig>>;
82
82
  }
83
+ /**
84
+ * Client-side shape for creating a file/directory/notebook. The HTTP
85
+ * transport sends this as multipart/form-data; the WASM bridge base64-encodes
86
+ * `file` internally and crosses the JS<->Py boundary as JSON.
87
+ */
88
+ export interface FileCreateInput {
89
+ path: string;
90
+ type: "file" | "directory" | "notebook";
91
+ name: string;
92
+ file?: Blob;
93
+ }
83
94
  export type UpdateUIElementRequest = schemas["UpdateUIElementRequest"];
84
95
  export type ModelRequest = schemas["ModelRequest"];
85
96
  export type NotebookDocumentTransactionRequest =
@@ -165,7 +176,7 @@ export interface EditRequests {
165
176
  sendListFiles: (request: FileListRequest) => Promise<FileListResponse>;
166
177
  sendSearchFiles: (request: FileSearchRequest) => Promise<FileSearchResponse>;
167
178
  sendCreateFileOrFolder: (
168
- request: FileCreateRequest,
179
+ request: FileCreateInput,
169
180
  ) => Promise<FileCreateResponse>;
170
181
  sendDeleteFileOrFolder: (
171
182
  request: FileDeleteRequest,
@@ -3,6 +3,7 @@
3
3
 
4
4
  import { toast } from "@/components/ui/use-toast";
5
5
  import { userConfigAtom } from "@/core/config/config";
6
+ import { serializeBlob } from "@/utils/blob";
6
7
  import { Deferred } from "@/utils/Deferred";
7
8
  import { throwNotImplemented } from "@/utils/functions";
8
9
  import { Logger } from "@/utils/Logger";
@@ -431,9 +432,21 @@ export class PyodideBridge implements RunRequests, EditRequests {
431
432
  sendCreateFileOrFolder: EditRequests["sendCreateFileOrFolder"] = async (
432
433
  request,
433
434
  ) => {
435
+ // The WASM RPC boundary can only carry JSON, so we base64-encode the
436
+ // file bytes here. The HTTP transport uses multipart/form-data instead.
437
+ let contents: string | null = null;
438
+ if (request.file) {
439
+ const dataUrl = await serializeBlob(request.file);
440
+ contents = dataUrl.split(",")[1] ?? "";
441
+ }
434
442
  const response = await this.rpc.proxy.request.bridge({
435
443
  functionName: "create_file_or_directory",
436
- payload: request,
444
+ payload: {
445
+ path: request.path,
446
+ type: request.type,
447
+ name: request.name,
448
+ contents,
449
+ },
437
450
  });
438
451
  return response as FileCreateResponse;
439
452
  };
@@ -145,6 +145,14 @@ describe("sanitizeHtml", () => {
145
145
  );
146
146
  });
147
147
 
148
+ test("preserves marimo-mermaid with theme attributes", () => {
149
+ const html =
150
+ "<marimo-mermaid data-diagram='&quot;graph TD\\nA --&gt; B&quot;' data-theme='&quot;base&quot;' data-theme_variables='{&quot;primaryColor&quot;: &quot;#E8EEF5&quot;, &quot;lineColor&quot;: &quot;#475569&quot;}'></marimo-mermaid>";
151
+ expect(sanitizeHtml(html)).toMatchInlineSnapshot(
152
+ `"<marimo-mermaid data-diagram="&quot;graph TD\\nA --> B&quot;" data-theme="&quot;base&quot;" data-theme_variables="{&quot;primaryColor&quot;: &quot;#E8EEF5&quot;, &quot;lineColor&quot;: &quot;#475569&quot;}"></marimo-mermaid>"`,
153
+ );
154
+ });
155
+
148
156
  test("keeps style tags with FORCE_BODY", () => {
149
157
  const html = "<style>body { color: red; }</style><p>Text</p>";
150
158
  expect(sanitizeHtml(html)).toMatchInlineSnapshot(
@@ -194,6 +194,7 @@ interface Data<T> {
194
194
  wrappedColumns?: string[];
195
195
  headerTooltip?: Record<string, string>;
196
196
  totalColumns: number;
197
+ sizeBytes?: number | null;
197
198
  maxColumns: number | "all";
198
199
  hasStableRowId: boolean;
199
200
  lazy: boolean;
@@ -220,6 +221,7 @@ type DataTableFunctions = {
220
221
  cell_styles?: CellStyleState | null;
221
222
  cell_hover_texts?: Record<string, Record<string, string | null>> | null;
222
223
  raw_data?: TableData<T> | null;
224
+ size_bytes?: number | null;
223
225
  }>;
224
226
  get_data_url?: GetDataUrl;
225
227
  get_row_ids?: GetRowIds;
@@ -270,6 +272,7 @@ export const DataTablePlugin = createPlugin<S>("marimo-table")
270
272
  headerTooltip: z.record(z.string(), z.string()).optional(),
271
273
  fieldTypes: columnToFieldTypesSchema.nullish(),
272
274
  totalColumns: z.number(),
275
+ sizeBytes: z.number().nullish(),
273
276
  maxColumns: z.union([z.number(), z.literal("all")]).default("all"),
274
277
  hasStableRowId: z.boolean().default(false),
275
278
  maxHeight: z.number().optional(),
@@ -327,6 +330,7 @@ export const DataTablePlugin = createPlugin<S>("marimo-table")
327
330
  .nullable(),
328
331
  cell_hover_texts: cellHoverTextSchema.nullable(),
329
332
  raw_data: z.union([z.string(), z.array(z.looseObject({}))]).nullish(),
333
+ size_bytes: z.number().nullish(),
330
334
  }),
331
335
  ),
332
336
  get_row_ids: rpc.input(z.object({}).passthrough()).output(
@@ -532,6 +536,7 @@ export const LoadingDataTableComponent = memo(
532
536
  rows: T[];
533
537
  rawRows?: T[];
534
538
  totalRows: number | TooManyRows;
539
+ sizeBytes?: number | null;
535
540
  cellStyles: CellStyleState | undefined | null;
536
541
  cellHoverTexts?: Record<string, Record<string, string | null>> | null;
537
542
  }>(async () => {
@@ -548,6 +553,7 @@ export const LoadingDataTableComponent = memo(
548
553
  let tableData = props.data;
549
554
  let rawTableData: TableData<T> | undefined | null = props.rawData;
550
555
  let totalRows = props.totalRows;
556
+ let sizeBytes = props.sizeBytes ?? null;
551
557
  let cellStyles = props.cellStyles;
552
558
  let cellHoverTexts = props.cellHoverTexts;
553
559
 
@@ -591,6 +597,7 @@ export const LoadingDataTableComponent = memo(
591
597
  tableData = searchResults.data;
592
598
  rawTableData = searchResults.raw_data;
593
599
  totalRows = searchResults.total_rows;
600
+ sizeBytes = searchResults.size_bytes ?? null;
594
601
  cellStyles = searchResults.cell_styles || {};
595
602
  cellHoverTexts = searchResults.cell_hover_texts || {};
596
603
  }
@@ -603,6 +610,7 @@ export const LoadingDataTableComponent = memo(
603
610
  rows: tableData,
604
611
  rawRows: rawData,
605
612
  totalRows: totalRows,
613
+ sizeBytes,
606
614
  cellStyles,
607
615
  cellHoverTexts,
608
616
  };
@@ -614,6 +622,7 @@ export const LoadingDataTableComponent = memo(
614
622
  useDeepCompareMemoize(props.fieldTypes),
615
623
  props.data,
616
624
  props.totalRows,
625
+ props.sizeBytes,
617
626
  props.lazy,
618
627
  props.cellHoverTexts,
619
628
  props.cellStyles,
@@ -728,6 +737,7 @@ export const LoadingDataTableComponent = memo(
728
737
  setFilters={setFilters}
729
738
  reloading={isFetching && !isPending}
730
739
  totalRows={data?.totalRows ?? props.totalRows}
740
+ sizeBytes={data?.sizeBytes ?? props.sizeBytes ?? null}
731
741
  paginationState={paginationState}
732
742
  setPaginationState={setPaginationState}
733
743
  cellStyles={data?.cellStyles ?? props.cellStyles}
@@ -774,6 +784,7 @@ const DataTableComponent = ({
774
784
  data,
775
785
  rawData,
776
786
  totalRows,
787
+ sizeBytes,
777
788
  maxColumns,
778
789
  pagination,
779
790
  selection,
@@ -1053,6 +1064,7 @@ const DataTableComponent = ({
1053
1064
  maxHeight={maxHeight}
1054
1065
  sorting={sorting}
1055
1066
  totalRows={totalRows}
1067
+ sizeBytes={sizeBytes}
1056
1068
  totalColumns={totalColumns}
1057
1069
  manualSorting={true}
1058
1070
  setSorting={setSorting}