@marimo-team/islands 0.23.7-dev7 → 0.23.7-dev70

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 (553) hide show
  1. package/dist/{ConnectedDataExplorerComponent-PmilQqXR.js → ConnectedDataExplorerComponent-2lBNiUv6.js} +14 -14
  2. package/dist/{ErrorBoundary-Da4UeYxT.js → ErrorBoundary-D3wrPNma.js} +1 -1
  3. package/dist/{any-language-editor-BVR0l12r.js → any-language-editor-VWs_7v27.js} +15 -15
  4. package/dist/apl-Bdc61P1y.js +4 -0
  5. package/dist/{arc-CHF8PiiF.js → arc-DfkSnvZm.js} +2 -2
  6. package/dist/{architecture-7HQA4BMR-D0JB_3hE.js → architecture-7HQA4BMR-CS9jOrqM.js} +1 -1
  7. package/dist/{architectureDiagram-VXUJARFQ-BXQEUDtK.js → architectureDiagram-VXUJARFQ-CXVJxFhH.js} +16 -16
  8. package/dist/asciiarmor-DVRHDGzT.js +4 -0
  9. package/dist/asn1-BmuKfkfu.js +4 -0
  10. package/dist/assets/__vite-browser-external-CAdMKBac.js +1 -0
  11. package/dist/assets/worker-CpBbwbQo.js +73 -0
  12. package/dist/{blockDiagram-VD42YOAC-DhJe-Y9i.js → blockDiagram-VD42YOAC-DGDaxR8I.js} +11 -11
  13. package/dist/brainfuck-DPrRpyTV.js +4 -0
  14. package/dist/{button-CA5pI2YF.js → button-Dj4BTre0.js} +5 -0
  15. package/dist/{c4Diagram-YG6GDRKO-9dSfzOFR.js → c4Diagram-YG6GDRKO-C2hc6ne8.js} +5 -5
  16. package/dist/{capabilities-6laDasij.js → capabilities-C9rrYCzf.js} +1 -1
  17. package/dist/{channel-MqYIiKgS.js → channel-BBoIVUrJ.js} +1 -1
  18. package/dist/{chat-ui-B-gbqk_F.js → chat-ui-D3XBept8.js} +626 -234
  19. package/dist/{check-CFM2mVDr.js → check-BcUIXnUT.js} +1 -1
  20. package/dist/{chunk-4BX2VUAB-BwfrWBqN.js → chunk-4BX2VUAB-CzXltWHN.js} +1 -1
  21. package/dist/{chunk-55IACEB6-D8THf2mi.js → chunk-55IACEB6-B-1mjMMC.js} +1 -1
  22. package/dist/{chunk-5FQGJX7Z-CO1e63h_.js → chunk-5FQGJX7Z-BOg95xG5.js} +2 -2
  23. package/dist/{chunk-ABZYJK2D-BrBb_0yY.js → chunk-ABZYJK2D-D0cLy8Bb.js} +2 -2
  24. package/dist/{chunk-ATLVNIR6-D-0XqNah.js → chunk-ATLVNIR6-BXsEjlHF.js} +2 -2
  25. package/dist/{chunk-B4BG7PRW-8iRKvugR.js → chunk-B4BG7PRW-Q1usn6T3.js} +7 -7
  26. package/dist/{chunk-CVBHYZKI-B6xhgaBd.js → chunk-CVBHYZKI-B_c5YBcW.js} +1 -1
  27. package/dist/{chunk-DI55MBZ5-C0_2D4m4.js → chunk-DI55MBZ5-D1qLYNrb.js} +6 -6
  28. package/dist/{chunk-EXTU4WIE-Jiw9ca1u.js → chunk-EXTU4WIE-BKNXdLmD.js} +2 -2
  29. package/dist/{chunk-FMBD7UC4-CHdus51S.js → chunk-FMBD7UC4-Ie8M9q0W.js} +1 -1
  30. package/dist/{chunk-HN2XXSSU-2Vfbq-kU.js → chunk-HN2XXSSU-E3n-Ys7Z.js} +1 -1
  31. package/dist/{chunk-JA3XYJ7Z-6wbaigKe.js → chunk-JA3XYJ7Z-D6c6cOBG.js} +3 -3
  32. package/dist/{chunk-JZLCHNYA-_rfptlUP.js → chunk-JZLCHNYA-BvsPHJmL.js} +6 -6
  33. package/dist/{chunk-MI3HLSF2-Do0-KRc0.js → chunk-MI3HLSF2-CUYEasXO.js} +1 -1
  34. package/dist/{chunk-N4CR4FBY-DIZG9dVD.js → chunk-N4CR4FBY-8ycT-O9a.js} +7 -7
  35. package/dist/{chunk-QN33PNHL-Cc64y40m.js → chunk-QN33PNHL-Bb-eUBW3.js} +2 -2
  36. package/dist/{chunk-QXUST7PY-BDG0-0Or.js → chunk-QXUST7PY-DV8yRwBd.js} +10 -10
  37. package/dist/{chunk-QZHKN3VN-B_Mdb8GC.js → chunk-QZHKN3VN-DRjXVwuJ.js} +1 -1
  38. package/dist/{chunk-S3R3BYOJ-DphMP0FA.js → chunk-S3R3BYOJ-mQeCz5CE.js} +4 -4
  39. package/dist/{chunk-TZMSLE5B-C9LUoYkc.js → chunk-TZMSLE5B-BqW10dHe.js} +3 -3
  40. package/dist/classDiagram-2ON5EDUG--Yh__LHb.js +30 -0
  41. package/dist/classDiagram-v2-WZHVMYZB-BC7X7Xtc.js +30 -0
  42. package/dist/{clike-sBZrGeF8.js → clike-DTxNUn7l.js} +1 -1
  43. package/dist/clojure-DEttQW5T.js +4 -0
  44. package/dist/cmake-jNlx_DaM.js +4 -0
  45. package/dist/cobol-BvvIm5MJ.js +4 -0
  46. package/dist/{code-block-37QAKDTI-0JNwiPGv.js → code-block-37QAKDTI-BsGy1AOJ.js} +1 -1
  47. package/dist/{code-visibility-CiN3Xnfo.js → code-visibility-Ci8Uv-1s.js} +11480 -1992
  48. package/dist/coffeescript-DTpBMyFU.js +4 -0
  49. package/dist/commonlisp-BmmUG8jb.js +4 -0
  50. package/dist/{copy-TGGAUEWp.js → copy-DLf4aN7I.js} +2 -2
  51. package/dist/{cose-bilkent-S5V4N54A-DXHZkJKX.js → cose-bilkent-S5V4N54A-kjoZoid4.js} +2 -2
  52. package/dist/crystal-BxyqmEWC.js +4 -0
  53. package/dist/css-BGoCtuG3.js +4 -0
  54. package/dist/cypher-BmCbdl3u.js +4 -0
  55. package/dist/d-CFrlbjZt.js +4 -0
  56. package/dist/{dagre-6UL2VRFP-tH87fkPA.js → dagre-6UL2VRFP-DRBWoQUw.js} +10 -10
  57. package/dist/{data-grid-overlay-editor-CWUN78-s.js → data-grid-overlay-editor-efe5ZagF.js} +2 -2
  58. package/dist/{diagram-PSM6KHXK-2VjPSCDn.js → diagram-PSM6KHXK-H66ATWP2.js} +18 -18
  59. package/dist/{diagram-QEK2KX5R-CiLmNyta.js → diagram-QEK2KX5R-DItl5Wns.js} +14 -14
  60. package/dist/{diagram-S2PKOQOG-Zha_1CLx.js → diagram-S2PKOQOG-CtuW_ZuL.js} +14 -14
  61. package/dist/diff-D6XwL6P8.js +4 -0
  62. package/dist/{dist-Brkazupz.js → dist--sWVZwjW.js} +1 -1
  63. package/dist/{dist-FN0ZA_8F.js → dist-21ButRCu.js} +1 -1
  64. package/dist/{dist-BetEKbPG.js → dist-B8RaFTRF.js} +1 -1
  65. package/dist/dist-BoHGySTM.js +5 -0
  66. package/dist/dist-ByAz19Qc.js +5 -0
  67. package/dist/dist-C93EysN4.js +5 -0
  68. package/dist/{dist-BHnX0ia_.js → dist-CY-lVor6.js} +1 -1
  69. package/dist/{dist-YP-G7W0f.js → dist-CYDuv4bR.js} +1 -1
  70. package/dist/{dist-CMjD5MQb.js → dist-Cfo5EE2t.js} +1 -1
  71. package/dist/dist-CjivSDvN.js +5 -0
  72. package/dist/dist-Cqwx-MH7.js +5 -0
  73. package/dist/{dist-ESg7xyoD.js → dist-D3ZI9nhS.js} +2 -2
  74. package/dist/{dist-DkC6YEo0.js → dist-DMZNjfX4.js} +1 -1
  75. package/dist/{dist-ChC1BhqM.js → dist-DbpcoFAV.js} +1 -1
  76. package/dist/dist-FUNenbiQ.js +5 -0
  77. package/dist/{dist-BEOU2g1b.js → dist-zhSud5X3.js} +1 -1
  78. package/dist/{dockerfile-COvlVLcE.js → dockerfile-twL37N91.js} +1 -1
  79. package/dist/dtd-Bw0lRN0-.js +4 -0
  80. package/dist/dylan-B55eBHTt.js +4 -0
  81. package/dist/ecl-C8G4p0wn.js +4 -0
  82. package/dist/eiffel-BmH46VJl.js +4 -0
  83. package/dist/elm-DhzeFqkl.js +4 -0
  84. package/dist/{erDiagram-Q2GNP2WA-biHZS05w.js → erDiagram-Q2GNP2WA--19X2kU5.js} +14 -14
  85. package/dist/erlang-CY-wdlsU.js +4 -0
  86. package/dist/{error-banner-DnBPzEWg.js → error-banner-CVkfBUT3.js} +2 -2
  87. package/dist/{esm-Dd1z1auZ.js → esm-CWp0KQeK.js} +1 -1
  88. package/dist/{esm-CYEyrE3Y.js → esm-DjNnlmpf.js} +96 -96
  89. package/dist/{extends-CzJgxo2J.js → extends-vAi97cpa.js} +4 -4
  90. package/dist/{factor-C2GT7jfQ.js → factor-CajWS6mS.js} +1 -1
  91. package/dist/factor-DWkgl0xw.js +4 -0
  92. package/dist/{flowDiagram-NV44I4VS-CWWlUpBR.js → flowDiagram-NV44I4VS-DQmWlo7f.js} +16 -16
  93. package/dist/{formats-CgaK7Gmx.js → formats-Dsy9kkZu.js} +3 -3
  94. package/dist/forth-Cij_ie2t.js +4 -0
  95. package/dist/fortran-Br3X9cfm.js +4 -0
  96. package/dist/{ganttDiagram-JELNMOA3-D7B2c4Z9.js → ganttDiagram-JELNMOA3-BOGXJ8Lk.js} +7 -7
  97. package/dist/gas-DYsGcMN2.js +4 -0
  98. package/dist/gherkin-eVgXQ0fQ.js +4 -0
  99. package/dist/{gitGraph-G5XIXVHT-BdepdFa_.js → gitGraph-G5XIXVHT-DGlbae5m.js} +1 -1
  100. package/dist/{gitGraphDiagram-V2S2FVAM-CtLvNR1S.js → gitGraphDiagram-V2S2FVAM-DjzxfF0P.js} +14 -14
  101. package/dist/{glide-data-editor-CvlvtPWJ.js → glide-data-editor-DucgdjRo.js} +13 -13
  102. package/dist/groovy-_NFHIXG7.js +4 -0
  103. package/dist/haskell-D6xNG_bH.js +4 -0
  104. package/dist/haxe-sU_rzAwn.js +5 -0
  105. package/dist/{html-to-image-hMMPiNe_.js → html-to-image-CpggM7u1.js} +2806 -2547
  106. package/dist/idl-Ds_VbrUx.js +4 -0
  107. package/dist/{info-VBDWY6EO--JNA2rNu.js → info-VBDWY6EO-D2lvLLw5.js} +1 -1
  108. package/dist/{infoDiagram-HS3SLOUP-BbZyOxsP.js → infoDiagram-HS3SLOUP-ChNufFsP.js} +12 -12
  109. package/dist/{input-BAOe64zx.js → input-D4kjoQUB.js} +8 -6
  110. package/dist/javascript-CztfIl0i.js +4 -0
  111. package/dist/{journeyDiagram-XKPGCS4Q-BU2mjjzl.js → journeyDiagram-XKPGCS4Q-BO_O4Ij1.js} +6 -6
  112. package/dist/julia-DDv40QMV.js +4 -0
  113. package/dist/{kanban-definition-3W4ZIXB7-BlmczUuw.js → kanban-definition-3W4ZIXB7-CPpiiiWk.js} +11 -11
  114. package/dist/{katex-qPqrBHZ8.js → katex-9-9QRhxz.js} +1 -1
  115. package/dist/{label-BCWi-Oqu.js → label-BLqV33b1.js} +2 -2
  116. package/dist/{line-BWRi3U3S.js → line-C5s_12ee.js} +3 -3
  117. package/dist/{linear-DnHwODZa.js → linear-2NnK4cxi.js} +2 -2
  118. package/dist/livescript-BEOngLLc.js +4 -0
  119. package/dist/{loader-BvW0-YWZ.js → loader-Dr8Qem8p.js} +1 -1
  120. package/dist/lua-9-7BhQ4Y.js +4 -0
  121. package/dist/main.js +1631 -10231
  122. package/dist/mathematica-DDa0Pfxm.js +4 -0
  123. package/dist/mbox-iO03mmoE.js +4 -0
  124. package/dist/{mermaid-4DMBBIKO-CG1ECj5W.js → mermaid-4DMBBIKO-B7VQMwJx.js} +1 -1
  125. package/dist/{mermaid-CEbzCxCc.js → mermaid-DO-Daq7u.js} +46 -46
  126. package/dist/{mermaid-parser.core-CleJseNW.js → mermaid-parser.core-DreccfmS.js} +7 -7
  127. package/dist/{mhchem-BwoRNwg_.js → mhchem-yiCCuiEF.js} +1 -1
  128. package/dist/{mindmap-definition-VGOIOE7T-CcSYqYP9.js → mindmap-definition-VGOIOE7T-CC1_Vl0f.js} +13 -13
  129. package/dist/mirc-C9z5LT4X.js +4 -0
  130. package/dist/mllike-jGJbdm_C.js +6 -0
  131. package/dist/modelica-DzF7oIEL.js +4 -0
  132. package/dist/mscgen-DB-u125o.js +6 -0
  133. package/dist/mumps-CRTFHhzh.js +4 -0
  134. package/dist/nsis-C4NPTuox.js +4 -0
  135. package/dist/{nsis-B5K1qoyo.js → nsis-ClF3r5Tr.js} +1 -1
  136. package/dist/ntriples-BCOoGph1.js +4 -0
  137. package/dist/{number-overlay-editor-_GnlYFHC.js → number-overlay-editor-CpKi64Fy.js} +1 -1
  138. package/dist/octave-DTwNlazz.js +4 -0
  139. package/dist/{ordinal-2jIulmcR.js → ordinal-B43ZeR68.js} +1 -1
  140. package/dist/oz-DD38AzSz.js +4 -0
  141. package/dist/{packet-DYOGHKS2-CBxXGWNr.js → packet-DYOGHKS2-CmWtF3uO.js} +1 -1
  142. package/dist/pascal-BohSp9jV.js +4 -0
  143. package/dist/perl-f5OutoPM.js +4 -0
  144. package/dist/{pie-VRWISCQL-Bmdnqjip.js → pie-VRWISCQL-B6u8vus8.js} +1 -1
  145. package/dist/{pieDiagram-ADFJNKIX-DNyLF5H2.js → pieDiagram-ADFJNKIX-Di34MOFQ.js} +19 -19
  146. package/dist/pig-Dv7wSmHb.js +4 -0
  147. package/dist/powershell-rYgjKB39.js +4 -0
  148. package/dist/{process-output-Bza_GK7Q.js → process-output-X8TR20AK.js} +30 -25
  149. package/dist/properties-BFUNLRDN.js +4 -0
  150. package/dist/protobuf-B9QJQPPv.js +4 -0
  151. package/dist/{pug-tjbzJCFk.js → pug-B_rby2yb.js} +1 -1
  152. package/dist/pug-DzvWpaMC.js +4 -0
  153. package/dist/puppet-B_K-n_xK.js +4 -0
  154. package/dist/python-CAiFcaA2.js +4 -0
  155. package/dist/q-cLeFIBLK.js +4 -0
  156. package/dist/{quadrantDiagram-AYHSOK5B-rXwjifrj.js → quadrantDiagram-AYHSOK5B-B9kVk1ny.js} +3 -3
  157. package/dist/r-04Y-Wco3.js +4 -0
  158. package/dist/{radar-ZZBFDIW7-BmCWDffL.js → radar-ZZBFDIW7-XAmXSa8s.js} +1 -1
  159. package/dist/{react-vega-B-rkEqtS.js → react-vega-Cavbrg4l.js} +1 -1
  160. package/dist/{react-vega-k9ODWPlI.js → react-vega-Dh6-UKKe.js} +13 -13
  161. package/dist/{requirementDiagram-UZGBJVZJ-DBdrMVbs.js → requirementDiagram-UZGBJVZJ-BxGfGYEx.js} +13 -13
  162. package/dist/reveal-component-CIs-OouT.js +7444 -0
  163. package/dist/rpm-FUdrIia9.js +5 -0
  164. package/dist/ruby-DMjFXuEW.js +4 -0
  165. package/dist/{sankeyDiagram-TZEHDZUN-CxmzalGv.js → sankeyDiagram-TZEHDZUN-D09PBJ-n.js} +4 -4
  166. package/dist/sas-DzHZxjXK.js +4 -0
  167. package/dist/scheme-DxHd_Rb9.js +4 -0
  168. package/dist/semaphore-CNDGTzkX.js +46 -0
  169. package/dist/{sequenceDiagram-WL72ISMW-CVCDsJ9h.js → sequenceDiagram-WL72ISMW-t_Dpemj0.js} +7 -7
  170. package/dist/shell-C8Kwypgf.js +4 -0
  171. package/dist/sieve-DdyqOKXZ.js +4 -0
  172. package/dist/smalltalk-pB7X1D9y.js +4 -0
  173. package/dist/sparql-NhBO6oOa.js +4 -0
  174. package/dist/{spec-DSIuqd3f.js → spec-hVaaZsY5.js} +4 -4
  175. package/dist/{src-BY0BGg6V.js → src-Bf2iLOlr.js} +1 -1
  176. package/dist/{stateDiagram-FKZM4ZOC-D_2djEhW.js → stateDiagram-FKZM4ZOC-B18gTP_j.js} +16 -16
  177. package/dist/stateDiagram-v2-4FDKWEC3-B6e_t14A.js +29 -0
  178. package/dist/{step-DGAGWg3y.js → step-CWipAYTY.js} +1 -1
  179. package/dist/{strings-B_FOH6eV.js → strings-BiIhGaI8.js} +4 -4
  180. package/dist/style.css +1 -1
  181. package/dist/stylus-SfWSnzPv.js +4 -0
  182. package/dist/swift-jRPdq2zR.js +4 -0
  183. package/dist/{swiper-component-KkEVUDd3.js → swiper-component-DlD2GU2g.js} +2 -2
  184. package/dist/tcl-_hpTHGX3.js +4 -0
  185. package/dist/textile-C9h8slqH.js +4 -0
  186. package/dist/{time-CMdrp3hw.js → time-C1SGcFMH.js} +2 -2
  187. package/dist/{timeline-definition-IT6M3QCI-E4NzxCs3.js → timeline-definition-IT6M3QCI-DJnh1ks5.js} +3 -3
  188. package/dist/{toDate-CHtl9vts.js → toDate-CIpC_34u.js} +33 -20
  189. package/dist/toml-DWvtinD4.js +4 -0
  190. package/dist/{tooltip-B0mtKTXm.js → tooltip-DRaMBu06.js} +3 -3
  191. package/dist/{treemap-GDKQZRPO-CoKHPxa7.js → treemap-GDKQZRPO-Du95DV6u.js} +1 -1
  192. package/dist/troff-Dwo_A0y7.js +4 -0
  193. package/dist/ttcn-V--CPFKq.js +4 -0
  194. package/dist/ttcn-cfg-CPSMchTG.js +4 -0
  195. package/dist/turtle-B4rPGBWu.js +4 -0
  196. package/dist/{types-DBtDeUKD.js → types-Dzuoc3LN.js} +1 -1
  197. package/dist/{useAsyncData-B6hCGywC.js → useAsyncData-C56Khv_R.js} +1 -1
  198. package/dist/{useDateFormatter-B3mCQMP3.js → useDateFormatter-B_9k85Ex.js} +2 -2
  199. package/dist/{useDeepCompareMemoize-CmwDuYUH.js → useDeepCompareMemoize-Dt98v2ua.js} +1 -1
  200. package/dist/{useIframeCapabilities-DbdLoEDm.js → useIframeCapabilities-BkYHTrss.js} +1 -1
  201. package/dist/{useLifecycle-CjMjllqy.js → useLifecycle-BF6-z62y.js} +3 -3
  202. package/dist/{useTheme-CByZUW0p.js → useTheme-DykuNHR2.js} +2 -2
  203. package/dist/vb-DaMBBd4j.js +4 -0
  204. package/dist/vbscript-BMJQqcE2.js +4 -0
  205. package/dist/{vega-component-CC8TqWWV.js → vega-component-cSdqoAxe.js} +26 -24
  206. package/dist/velocity-CGq2QRq2.js +4 -0
  207. package/dist/verilog-CUNo8F5u.js +4 -0
  208. package/dist/vhdl-CCzA0msW.js +4 -0
  209. package/dist/webidl-CqIMDIBL.js +4 -0
  210. package/dist/xquery-XC5Kbr-1.js +4 -0
  211. package/dist/{xychartDiagram-PRI3JC2R-CuxTvjw5.js → xychartDiagram-PRI3JC2R-Dk2d_bX0.js} +10 -10
  212. package/dist/yacas-CGOv7Dzy.js +4 -0
  213. package/dist/z80-CXhVmi-f.js +4 -0
  214. package/dist/{zod-BxdsqRPd.js → zod-BWkcDORu.js} +1 -1
  215. package/package.json +3 -3
  216. package/src/components/chat/chat-components.tsx +47 -0
  217. package/src/components/chat/chat-display.tsx +41 -7
  218. package/src/components/chat/chat-panel.tsx +37 -10
  219. package/src/components/chat/chat-utils.ts +42 -20
  220. package/src/components/chat/reasoning-accordion.tsx +14 -3
  221. package/src/components/chat/tool-call/shared.ts +13 -0
  222. package/src/components/chat/tool-call/tool-approval-card.tsx +62 -0
  223. package/src/components/chat/tool-call/tool-args.tsx +26 -0
  224. package/src/components/chat/tool-call/tool-call-view.tsx +99 -0
  225. package/src/components/chat/tool-call/tool-error-card.tsx +81 -0
  226. package/src/components/chat/tool-call/tool-history-row.tsx +153 -0
  227. package/src/components/chat/tool-call/tool-result.tsx +101 -0
  228. package/src/components/data-table/__tests__/column-header.test.ts +3 -1
  229. package/src/components/data-table/__tests__/column-header.test.tsx +308 -0
  230. package/src/components/data-table/__tests__/filter-by-values-picker.test.tsx +112 -0
  231. package/src/components/data-table/__tests__/filter-pill-editor.test.tsx +261 -0
  232. package/src/components/data-table/__tests__/filters.test.ts +196 -49
  233. package/src/components/data-table/charts/components/form-fields.tsx +1 -0
  234. package/src/components/data-table/column-header.tsx +349 -170
  235. package/src/components/data-table/date-filter-inputs.tsx +325 -0
  236. package/src/components/data-table/filter-by-values-picker.tsx +70 -9
  237. package/src/components/data-table/filter-pill-editor.tsx +410 -156
  238. package/src/components/data-table/filter-pills.tsx +69 -54
  239. package/src/components/data-table/filters.ts +218 -101
  240. package/src/components/data-table/header-items.tsx +8 -1
  241. package/src/components/data-table/operator-labels.ts +25 -0
  242. package/src/components/data-table/regex-input.tsx +61 -0
  243. package/src/components/dependency-graph/minimap-content.tsx +14 -3
  244. package/src/components/editor/actions/pair-with-agent-modal.tsx +140 -49
  245. package/src/components/editor/actions/useNotebookActions.tsx +3 -1
  246. package/src/components/editor/app-container.tsx +7 -1
  247. package/src/components/editor/chrome/panels/context-aware-panel/context-aware-panel.tsx +10 -2
  248. package/src/components/editor/chrome/wrapper/app-chrome.tsx +1 -0
  249. package/src/components/editor/chrome/wrapper/footer-items/backend-status.tsx +1 -1
  250. package/src/components/editor/chrome/wrapper/footer.tsx +4 -1
  251. package/src/components/editor/chrome/wrapper/panels.tsx +4 -1
  252. package/src/components/editor/chrome/wrapper/sidebar.tsx +4 -1
  253. package/src/components/editor/controls/Controls.tsx +11 -3
  254. package/src/components/editor/file-tree/file-explorer.tsx +12 -2
  255. package/src/components/editor/file-tree/requesting-tree.tsx +27 -25
  256. package/src/components/editor/file-tree/upload.tsx +23 -24
  257. package/src/components/editor/header/__tests__/status.test.tsx +108 -0
  258. package/src/components/editor/header/status.tsx +44 -10
  259. package/src/components/editor/navigation/__tests__/clipboard.test.ts +106 -0
  260. package/src/components/editor/navigation/__tests__/navigation.test.ts +70 -0
  261. package/src/components/editor/navigation/clipboard.ts +99 -25
  262. package/src/components/editor/navigation/navigation.ts +15 -1
  263. package/src/components/editor/notebook-cell.tsx +3 -0
  264. package/src/components/editor/renderers/slides-layout/__tests__/compute-slide-cells.test.ts +5 -4
  265. package/src/components/editor/renderers/slides-layout/__tests__/plugin.test.ts +55 -15
  266. package/src/components/editor/renderers/slides-layout/plugin.tsx +8 -25
  267. package/src/components/editor/renderers/slides-layout/slides-layout.tsx +18 -5
  268. package/src/components/editor/renderers/slides-layout/types.ts +40 -31
  269. package/src/components/home/components.tsx +6 -0
  270. package/src/components/pages/run-page.tsx +4 -1
  271. package/src/components/slides/__tests__/slide-notes.test.ts +131 -0
  272. package/src/components/slides/reveal-component.tsx +242 -147
  273. package/src/components/slides/slide-notes-editor.tsx +127 -0
  274. package/src/components/slides/slide-notes.ts +64 -0
  275. package/src/components/slides/slides.css +14 -0
  276. package/src/components/ui/combobox.tsx +24 -5
  277. package/src/components/ui/number-field.tsx +2 -0
  278. package/src/core/ai/tools/__tests__/registry.test.ts +10 -12
  279. package/src/core/ai/tools/registry.ts +9 -5
  280. package/src/core/cells/__tests__/cells.test.ts +187 -0
  281. package/src/core/cells/__tests__/pending-cut-service.test.tsx +123 -0
  282. package/src/core/cells/cells.ts +102 -17
  283. package/src/core/cells/document-changes.ts +6 -1
  284. package/src/core/cells/pending-cut-service.ts +55 -0
  285. package/src/core/cells/utils.ts +11 -0
  286. package/src/core/codemirror/cells/extensions.ts +10 -0
  287. package/src/core/codemirror/go-to-definition/__tests__/commands.test.ts +152 -0
  288. package/src/core/codemirror/go-to-definition/__tests__/utils.test.ts +99 -0
  289. package/src/core/codemirror/go-to-definition/commands.ts +382 -22
  290. package/src/core/codemirror/go-to-definition/utils.ts +23 -5
  291. package/src/core/codemirror/markdown/__tests__/commands.test.ts +3 -3
  292. package/src/core/codemirror/markdown/commands.ts +1 -2
  293. package/src/core/edit-app.tsx +3 -2
  294. package/src/core/hotkeys/hotkeys.ts +5 -0
  295. package/src/core/islands/worker/worker.tsx +3 -2
  296. package/src/core/network/requests-network.ts +21 -3
  297. package/src/core/network/types.ts +12 -1
  298. package/src/core/run-app.tsx +2 -1
  299. package/src/core/runtime/__tests__/runtime.test.ts +38 -17
  300. package/src/core/runtime/runtime.ts +57 -34
  301. package/src/core/wasm/__tests__/utils.test.ts +34 -0
  302. package/src/core/wasm/bridge.ts +14 -1
  303. package/src/core/wasm/utils.ts +14 -0
  304. package/src/core/wasm/worker/bootstrap.ts +3 -2
  305. package/src/core/wasm/worker/worker.ts +3 -2
  306. package/src/core/websocket/__tests__/useMarimoKernelConnection.hook.test.tsx +156 -0
  307. package/src/core/websocket/__tests__/useMarimoKernelConnection.test.ts +101 -0
  308. package/src/core/websocket/transports/__tests__/ws.test.ts +125 -0
  309. package/src/core/websocket/transports/basic.ts +1 -1
  310. package/src/core/websocket/transports/ws.ts +96 -0
  311. package/src/core/websocket/useMarimoKernelConnection.tsx +133 -54
  312. package/src/core/websocket/useWebSocket.tsx +3 -15
  313. package/src/css/app/Cell.css +10 -0
  314. package/src/plugins/core/__test__/sanitize.test.ts +30 -0
  315. package/src/plugins/impl/DropdownPlugin.tsx +12 -1
  316. package/src/plugins/impl/MultiselectPlugin.tsx +4 -0
  317. package/src/plugins/impl/SearchableSelect.tsx +11 -1
  318. package/src/plugins/impl/TabsPlugin.tsx +35 -7
  319. package/src/plugins/impl/__tests__/DropdownPlugin.test.tsx +56 -0
  320. package/src/plugins/impl/__tests__/TabsPlugin.test.tsx +154 -0
  321. package/src/plugins/impl/data-frames/forms/__tests__/__snapshots__/form.test.tsx.snap +48 -36
  322. package/src/plugins/impl/data-frames/schema.ts +4 -1
  323. package/src/plugins/impl/vega/resolve-data.ts +8 -1
  324. package/src/utils/__tests__/id-tree.test.ts +71 -0
  325. package/src/utils/__tests__/semaphore.test.ts +218 -0
  326. package/src/utils/fileToBase64.ts +8 -7
  327. package/src/utils/id-tree.tsx +89 -0
  328. package/src/utils/semaphore.ts +88 -0
  329. package/dist/apl-BKoVld9y.js +0 -4
  330. package/dist/asciiarmor-DQrKIjoo.js +0 -4
  331. package/dist/asn1-BZvnj0dq.js +0 -4
  332. package/dist/assets/__vite-browser-external-rrUYDKRl.js +0 -1
  333. package/dist/assets/worker-Bfy15ViQ.js +0 -73
  334. package/dist/brainfuck-D558nlUv.js +0 -4
  335. package/dist/classDiagram-2ON5EDUG-CBHMR6ZU.js +0 -30
  336. package/dist/classDiagram-v2-WZHVMYZB-BsUtUGM_.js +0 -30
  337. package/dist/clojure-Cq8mTSrE.js +0 -4
  338. package/dist/cmake-D8HCovWK.js +0 -4
  339. package/dist/cobol-UolN-9iU.js +0 -4
  340. package/dist/coffeescript-VdNuWrt5.js +0 -4
  341. package/dist/commonlisp-ALX7fpDc.js +0 -4
  342. package/dist/crystal-PbyO9Q_s.js +0 -4
  343. package/dist/css-DFklJkr_.js +0 -4
  344. package/dist/cypher-BifNeYlv.js +0 -4
  345. package/dist/d-BA-JP4PJ.js +0 -4
  346. package/dist/diff-CtkDpav4.js +0 -4
  347. package/dist/dist-BuBwsFva.js +0 -5
  348. package/dist/dist-BzmEQ9u7.js +0 -5
  349. package/dist/dist-Cih01ssx.js +0 -5
  350. package/dist/dist-CqfONiY9.js +0 -5
  351. package/dist/dist-D0iD0Fi9.js +0 -5
  352. package/dist/dist-DtNLXm8d.js +0 -5
  353. package/dist/dtd-DW3_UFEG.js +0 -4
  354. package/dist/dylan-pDhodO2N.js +0 -4
  355. package/dist/ecl-BJT8-YD7.js +0 -4
  356. package/dist/eiffel-Dmns-9vS.js +0 -4
  357. package/dist/elm-Da4sO4Bz.js +0 -4
  358. package/dist/erlang-C-zBsDi7.js +0 -4
  359. package/dist/factor-4xPWlWB5.js +0 -4
  360. package/dist/forth-l-c75zSd.js +0 -4
  361. package/dist/fortran-DIujSODW.js +0 -4
  362. package/dist/gas-CXnG5g_b.js +0 -4
  363. package/dist/gherkin-VPeqd4-X.js +0 -4
  364. package/dist/groovy-CphhZQgg.js +0 -4
  365. package/dist/haskell-CCvlS5Iq.js +0 -4
  366. package/dist/haxe-C_bi66fP.js +0 -5
  367. package/dist/idl-1DcP4Dm8.js +0 -4
  368. package/dist/javascript-DUIGhBvO.js +0 -4
  369. package/dist/julia-Cs2G4PQi.js +0 -4
  370. package/dist/livescript-DMtVFaAN.js +0 -4
  371. package/dist/lua-BAoLtdJg.js +0 -4
  372. package/dist/mathematica-C_NoFtbo.js +0 -4
  373. package/dist/mbox-DcFJFYrH.js +0 -4
  374. package/dist/mirc-71dccf_u.js +0 -4
  375. package/dist/mllike-CWcOFVDq.js +0 -6
  376. package/dist/modelica-Ape2VXxx.js +0 -4
  377. package/dist/mscgen-Cc6TwbSN.js +0 -6
  378. package/dist/mumps-h-ZbdkJ9.js +0 -4
  379. package/dist/nsis-C0p3m7JW.js +0 -4
  380. package/dist/ntriples-c9lEeT5w.js +0 -4
  381. package/dist/octave-DzEgB_74.js +0 -4
  382. package/dist/oz-CAxvHkyQ.js +0 -4
  383. package/dist/pascal-BJzu1sgP.js +0 -4
  384. package/dist/perl--IrOzZ2Z.js +0 -4
  385. package/dist/pig-CiBKKNhC.js +0 -4
  386. package/dist/powershell-KY0j6Qop.js +0 -4
  387. package/dist/properties-BW8q3ziV.js +0 -4
  388. package/dist/protobuf-BGaeuTGV.js +0 -4
  389. package/dist/pug-DjOKK-4J.js +0 -4
  390. package/dist/puppet-DWm2o6zX.js +0 -4
  391. package/dist/python-Bp2gezZy.js +0 -4
  392. package/dist/q-DljPshos.js +0 -4
  393. package/dist/r-BajPMnEu.js +0 -4
  394. package/dist/reveal-component-BCKa3sr-.js +0 -4863
  395. package/dist/rpm-BKx-ZZ62.js +0 -5
  396. package/dist/ruby-DJq_HNKc.js +0 -4
  397. package/dist/sas-WANvpcOU.js +0 -4
  398. package/dist/scheme-CliBbhGF.js +0 -4
  399. package/dist/shell-BwhrNUvM.js +0 -4
  400. package/dist/sieve-BIVePvMp.js +0 -4
  401. package/dist/smalltalk-D6G48JmY.js +0 -4
  402. package/dist/sparql-jjc3BmEP.js +0 -4
  403. package/dist/stateDiagram-v2-4FDKWEC3-Cv9Av10H.js +0 -29
  404. package/dist/stylus-WPBPQ4PE.js +0 -4
  405. package/dist/swift-O1Qy6iCm.js +0 -4
  406. package/dist/tcl-BAFdhvsi.js +0 -4
  407. package/dist/textile-DFuzhNLG.js +0 -4
  408. package/dist/toml-DRSTeely.js +0 -4
  409. package/dist/troff-B_ZjwBW0.js +0 -4
  410. package/dist/ttcn-CAyiB3ic.js +0 -4
  411. package/dist/ttcn-cfg-BS5_BGBJ.js +0 -4
  412. package/dist/turtle-CUBEDy3E.js +0 -4
  413. package/dist/vb-DY9S6-U2.js +0 -4
  414. package/dist/vbscript-gaHC39Jq.js +0 -4
  415. package/dist/velocity-TfCOtJZ_.js +0 -4
  416. package/dist/verilog-c2JOX8mv.js +0 -4
  417. package/dist/vhdl-dHBirRiO.js +0 -4
  418. package/dist/webidl-Bauj-i07.js +0 -4
  419. package/dist/xquery-CtaEAOt8.js +0 -4
  420. package/dist/yacas-BZ85agQP.js +0 -4
  421. package/dist/z80-hCgR-L4U.js +0 -4
  422. package/src/components/chat/tool-call-accordion.tsx +0 -247
  423. /package/dist/{ImageComparisonComponent-DaocPIse.js → ImageComparisonComponent-CNHIsPDj.js} +0 -0
  424. /package/dist/{Plot-PIeIvFnD.js → Plot-4wn-lMVn.js} +0 -0
  425. /package/dist/{apl-Dt8GMXYg.js → apl-BCgCq9iM.js} +0 -0
  426. /package/dist/{array-B-MVxRIF.js → array-tvvEqPy7.js} +0 -0
  427. /package/dist/{asciiarmor-CitDQ85h.js → asciiarmor-BtqU-KJQ.js} +0 -0
  428. /package/dist/{asn1-abrf9SMK.js → asn1-Dmb-dTMx.js} +0 -0
  429. /package/dist/{asterisk-BUZwqih-.js → asterisk-DaVJJDnV.js} +0 -0
  430. /package/dist/{brainfuck-BL-Boof0.js → brainfuck-C1HoZKlE.js} +0 -0
  431. /package/dist/{chunk-4F5CHEZ2-C6tO9vjs.js → chunk-4F5CHEZ2-BZq7Kom7.js} +0 -0
  432. /package/dist/{chunk-B2363JML-Ds8wZXyP.js → chunk-B2363JML-D9-XOau1.js} +0 -0
  433. /package/dist/{chunk-DR5Q36YT-CP69aZS_.js → chunk-DR5Q36YT-BflwErH1.js} +0 -0
  434. /package/dist/{chunk-FRFDVMJY-BgQv1HBE.js → chunk-FRFDVMJY-BSBUAX7r.js} +0 -0
  435. /package/dist/{chunk-PL6DKKU2-DHfTUHy8.js → chunk-PL6DKKU2-B0MTXvyc.js} +0 -0
  436. /package/dist/{chunk-SJTYNZTY-Diciw4sx.js → chunk-SJTYNZTY-CEG4F0pB.js} +0 -0
  437. /package/dist/{chunk-TQ3KTPDO-CQfP9npd.js → chunk-TQ3KTPDO-DiCtqVSi.js} +0 -0
  438. /package/dist/{chunk-UMXZTB3W-MSKeGL7W.js → chunk-UMXZTB3W-97iS1iEl.js} +0 -0
  439. /package/dist/{click-outside-container-BZgN7xS_.js → click-outside-container-BDd67_1U.js} +0 -0
  440. /package/dist/{clike-RWg7anhx.js → clike-CdT0yHjt.js} +0 -0
  441. /package/dist/{clojure-DaojKHow.js → clojure-CdyrCpUv.js} +0 -0
  442. /package/dist/{cmake-DN-_v0XE.js → cmake-BFlPxym7.js} +0 -0
  443. /package/dist/{cobol-C3VpMyux.js → cobol-CcJXewp8.js} +0 -0
  444. /package/dist/{coffeescript-DIkz3Tbt.js → coffeescript-DnKuIKRo.js} +0 -0
  445. /package/dist/{colors-Cn2p_FA3.js → colors-CQAOa8cK.js} +0 -0
  446. /package/dist/{common-keywords-hbLeU7VU.js → common-keywords-FBrXPTcz.js} +0 -0
  447. /package/dist/{commonlisp-CB1boOiP.js → commonlisp-B-kok83Z.js} +0 -0
  448. /package/dist/{crystal-DI2oCml6.js → crystal-FYRYjI1I.js} +0 -0
  449. /package/dist/{css-BdEVwQDV.js → css-B45lc2V3.js} +0 -0
  450. /package/dist/{cypher-BNHToqxU.js → cypher-DZMLyVY_.js} +0 -0
  451. /package/dist/{cytoscape.esm-WbbDoCfu.js → cytoscape.esm-ayF70frT.js} +0 -0
  452. /package/dist/{d-D7we7I1b.js → d-x-VVT4o9.js} +0 -0
  453. /package/dist/{diff-Cia6fzjN.js → diff-Dxe2mpXk.js} +0 -0
  454. /package/dist/{dist-BK-3fF4P.js → dist-B4LJpMEg.js} +0 -0
  455. /package/dist/{dist-CxdUraQr.js → dist-B507mf_I.js} +0 -0
  456. /package/dist/{dist-C89sHDXk.js → dist-BGdYVvOu.js} +0 -0
  457. /package/dist/{dist-DquyVv5H.js → dist-BNyrZfqT.js} +0 -0
  458. /package/dist/{dist-Zn0KNbo9.js → dist-Bc5pmZIw.js} +0 -0
  459. /package/dist/{dist-C-J0pt5p.js → dist-BvCfQQQE.js} +0 -0
  460. /package/dist/{dist-D9r7Cmw7.js → dist-C2ej4eOH.js} +0 -0
  461. /package/dist/{dist-HVuryI1a.js → dist-C34oIrQ9.js} +0 -0
  462. /package/dist/{dist-CGLzXdrt.js → dist-CDFZi-QD.js} +0 -0
  463. /package/dist/{dist-C9fmTOin.js → dist-CYEylvZA.js} +0 -0
  464. /package/dist/{dist-DadjmS-4.js → dist-DJ6zJQZ4.js} +0 -0
  465. /package/dist/{dist-CtCY55Jf.js → dist-Dh3wkoyH.js} +0 -0
  466. /package/dist/{dist-C474qFoq.js → dist-Dhk6FMb0.js} +0 -0
  467. /package/dist/{dist-DZjQ_MBo.js → dist-KnujRhFL.js} +0 -0
  468. /package/dist/{dist-CinA9Enb.js → dist-WdPUFc56.js} +0 -0
  469. /package/dist/{dist-DBLeRrPp.js → dist-t_qL7eB8.js} +0 -0
  470. /package/dist/{dist-CyFFzJTb.js → dist-usPCDYx8.js} +0 -0
  471. /package/dist/{dtd-H4Hubdwp.js → dtd-C9VM_Wfu.js} +0 -0
  472. /package/dist/{duckdb-keywords-CZ_ZTscu.js → duckdb-keywords-CvJhR_Yd.js} +0 -0
  473. /package/dist/{dylan-fVO6rnq3.js → dylan-DTSnEIFO.js} +0 -0
  474. /package/dist/{ebnf-WEXPLEWb.js → ebnf-2D4Ctp3y.js} +0 -0
  475. /package/dist/{ecl-B94VPjNR.js → ecl-N04ptnRK.js} +0 -0
  476. /package/dist/{eiffel-C_R6TusS.js → eiffel-Dd8rpqr_.js} +0 -0
  477. /package/dist/{elm-DzCHbO2g.js → elm-GT2E866W.js} +0 -0
  478. /package/dist/{erlang-BGNkx6JU.js → erlang-Cf0Bp5pY.js} +0 -0
  479. /package/dist/{esm-Bb_hbWan.js → esm-BaaaPNGl.js} +0 -0
  480. /package/dist/{fcl-B_Gv5Jfx.js → fcl-Ccj8Z5Xd.js} +0 -0
  481. /package/dist/{forth-Bybw0cJ7.js → forth-wd_XzGTg.js} +0 -0
  482. /package/dist/{fortran-C6PoCLkI.js → fortran-DcwUTZFe.js} +0 -0
  483. /package/dist/{gas-BBlhenj4.js → gas-DeALIER3.js} +0 -0
  484. /package/dist/{gherkin-NXtNG85X.js → gherkin-CKTqaJNX.js} +0 -0
  485. /package/dist/{groovy-BoFYK9xM.js → groovy-Bwdp_d8D.js} +0 -0
  486. /package/dist/{haskell-BtBdvQ1n.js → haskell-DCdCcPLK.js} +0 -0
  487. /package/dist/{haxe-D--o6dr0.js → haxe-DAyktQWJ.js} +0 -0
  488. /package/dist/{http-Dc2fv19V.js → http-_DVAYWoR.js} +0 -0
  489. /package/dist/{idl-AqTq5l7e.js → idl-CBuZiRYu.js} +0 -0
  490. /package/dist/{init-D-g0ONX1.js → init-uv0kkh4g.js} +0 -0
  491. /package/dist/{javascript-DvwNVye9.js → javascript-DzigE11c.js} +0 -0
  492. /package/dist/{julia-DoKiagZC.js → julia-PwfB-0Cm.js} +0 -0
  493. /package/dist/{katex-B7pMJpE0.js → katex-C_XRmjAP.js} +0 -0
  494. /package/dist/{livescript-DxBZMiWB.js → livescript-BJLz1EbT.js} +0 -0
  495. /package/dist/{lua-DmS_0NTu.js → lua-ZC-XC2jf.js} +0 -0
  496. /package/dist/{math-BYK36kWZ.js → math-DFcdCCU8.js} +0 -0
  497. /package/dist/{mathematica-ChlDFeIC.js → mathematica-DCYMx6qB.js} +0 -0
  498. /package/dist/{mbox-CguZuODr.js → mbox-OxMK_9XI.js} +0 -0
  499. /package/dist/{mirc-CFtY8dqz.js → mirc-nJVyhA0H.js} +0 -0
  500. /package/dist/{mllike-C0EJrEOk.js → mllike-DRO89bsU.js} +0 -0
  501. /package/dist/{modelica-C1kO1nfS.js → modelica-Don3E6ZD.js} +0 -0
  502. /package/dist/{mscgen-DEYdr7AY.js → mscgen-DJfqD3bN.js} +0 -0
  503. /package/dist/{mumps-B3NVJs2V.js → mumps-SjGTvDYL.js} +0 -0
  504. /package/dist/{nginx-ComVAAGN.js → nginx-DasThI7R.js} +0 -0
  505. /package/dist/{node-sql-parser-DNGGJ-Rw.js → node-sql-parser-B8nBD36q.js} +0 -0
  506. /package/dist/{ntriples-DHol9X9H.js → ntriples-CNBKRl3I.js} +0 -0
  507. /package/dist/{octave-CYGz0bfo.js → octave-DdeVHNlx.js} +0 -0
  508. /package/dist/{oz-kPxb2ni5.js → oz-CcKSoNvN.js} +0 -0
  509. /package/dist/{pascal-bZ0yrJKy.js → pascal-6leftwNj.js} +0 -0
  510. /package/dist/{path-Du6n3sOU.js → path-BGaWgPKg.js} +0 -0
  511. /package/dist/{perl-z4hvqyqz.js → perl-BhJIwWzN.js} +0 -0
  512. /package/dist/{pig-DZO8QDF9.js → pig-r-xDHqRf.js} +0 -0
  513. /package/dist/{powershell-BSuaDQEC.js → powershell-D-BELeNi.js} +0 -0
  514. /package/dist/{properties-BXhGLlIx.js → properties-CnuDhbll.js} +0 -0
  515. /package/dist/{protobuf-DM6iybWV.js → protobuf-CO8RBhvX.js} +0 -0
  516. /package/dist/{puppet-Bn05sQT8.js → puppet-NmXHjLy8.js} +0 -0
  517. /package/dist/{python-Cvnhm0g7.js → python-DAQXi720.js} +0 -0
  518. /package/dist/{q-B9V8hzex.js → q-DlikXfV0.js} +0 -0
  519. /package/dist/{r-Cf0gFqmq.js → r-CuohilwT.js} +0 -0
  520. /package/dist/{rpm-D-LMkTV1.js → rpm-0Pjwp0Pb.js} +0 -0
  521. /package/dist/{ruby-DeuPikpK.js → ruby-Dq8NJTDG.js} +0 -0
  522. /package/dist/{sas-C9tjgAo9.js → sas-CuwonyVP.js} +0 -0
  523. /package/dist/{scheme-D1_bUF0G.js → scheme-CYU-RRIf.js} +0 -0
  524. /package/dist/{shell-CJBmnks3.js → shell-COPmX2qE.js} +0 -0
  525. /package/dist/{sieve-1fSV75CF.js → sieve-B_3zyLne.js} +0 -0
  526. /package/dist/{simple-mode-B90Wdavj.js → simple-mode-DSBniks8.js} +0 -0
  527. /package/dist/{smalltalk-sZNPD0HO.js → smalltalk-DRft7iPv.js} +0 -0
  528. /package/dist/{solr-DTkyqJ-Z.js → solr-RZ9uTl59.js} +0 -0
  529. /package/dist/{sparql-oHc1nm77.js → sparql-CN6qj55H.js} +0 -0
  530. /package/dist/{spreadsheet-CER0raqY.js → spreadsheet-BNNUNXA2.js} +0 -0
  531. /package/dist/{sql-ByOoEONQ.js → sql-B4x8IkwU.js} +0 -0
  532. /package/dist/{stylus-KzkX6zRB.js → stylus-Bn_ZjOQ3.js} +0 -0
  533. /package/dist/{swift-DqVxZvKo.js → swift-BLUJhMbz.js} +0 -0
  534. /package/dist/{tcl-BtWSwXfA.js → tcl-C86fxecl.js} +0 -0
  535. /package/dist/{textile-CWDbn9Ql.js → textile-DmHh2rsK.js} +0 -0
  536. /package/dist/{tiddlywiki-Cr9xyOY1.js → tiddlywiki-DI0mF2WJ.js} +0 -0
  537. /package/dist/{tiki-D5JONyfZ.js → tiki-2HU6XLLn.js} +0 -0
  538. /package/dist/{timer-D7JVdX9U.js → timer-YZl28NYN.js} +0 -0
  539. /package/dist/{toml-BfehlgmL.js → toml-GWANRNAD.js} +0 -0
  540. /package/dist/{treemap-qFGzn7xk.js → treemap-D-ka1hvx.js} +0 -0
  541. /package/dist/{troff-BZBk6AAu.js → troff-BHTsomIy.js} +0 -0
  542. /package/dist/{ttcn-DVwvXg0_.js → ttcn-DQuhn5Mn.js} +0 -0
  543. /package/dist/{ttcn-cfg-gjbVLf1L.js → ttcn-cfg-HjFYtdB-.js} +0 -0
  544. /package/dist/{turtle-CgxKXorV.js → turtle-nCay33Nv.js} +0 -0
  545. /package/dist/{vb-B9kSwTdM.js → vb-BG-XlqqJ.js} +0 -0
  546. /package/dist/{vbscript-DrUKSCdb.js → vbscript-B6vyW0-D.js} +0 -0
  547. /package/dist/{velocity-AlMYTnMy.js → velocity-CWegueqO.js} +0 -0
  548. /package/dist/{verilog-DLUaM05j.js → verilog-CzSQm4cG.js} +0 -0
  549. /package/dist/{vhdl-DUJOtSmO.js → vhdl-DqnNVL7r.js} +0 -0
  550. /package/dist/{webidl-CQp4aHk_.js → webidl-DXEUpDWH.js} +0 -0
  551. /package/dist/{xquery-IxkjlwOD.js → xquery-Ba_NB5bD.js} +0 -0
  552. /package/dist/{yacas-Bnctn5w8.js → yacas-HKQU6hyk.js} +0 -0
  553. /package/dist/{z80-DrFwhx53.js → z80-CXkHXLdj.js} +0 -0
@@ -1,7 +1,31 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
3
  import { syntaxTree } from "@codemirror/language";
4
+ import type { EditorState } from "@codemirror/state";
4
5
  import { EditorView } from "@codemirror/view";
6
+ import type { SyntaxNode, Tree, TreeCursor } from "@lezer/common";
7
+
8
+ const SCOPE_CREATING_NODES = new Set([
9
+ "FunctionDefinition",
10
+ "LambdaExpression",
11
+ "ArrayComprehensionExpression",
12
+ "SetComprehensionExpression",
13
+ "DictionaryComprehensionExpression",
14
+ "ComprehensionExpression",
15
+ "ClassDefinition",
16
+ ]);
17
+
18
+ const POSITION_SENSITIVE_SCOPES = new Set(["ClassDefinition"]);
19
+
20
+ interface ScopeContext {
21
+ id: number;
22
+ type: string;
23
+ }
24
+
25
+ interface VariableDeclaration {
26
+ from: number;
27
+ scopeId: number;
28
+ }
5
29
 
6
30
  function goToPosition(view: EditorView, from: number): void {
7
31
  view.focus();
@@ -22,50 +46,386 @@ function goToPosition(view: EditorView, from: number): void {
22
46
  });
23
47
  }
24
48
 
25
- /**
26
- * This function will select the first occurrence of the given variable name,
27
- * for a given editor view.
28
- * @param view The editor view which contains the variable name.
29
- * @param variableName The name of the variable to select, if found in the editor.
30
- */
31
- export function goToVariableDefinition(
32
- view: EditorView,
49
+ function findFirstMatchingVariable(
50
+ state: EditorState,
33
51
  variableName: string,
34
- ): boolean {
35
- const { state } = view;
52
+ ): number | null {
36
53
  const tree = syntaxTree(state);
37
54
 
38
- let found = false;
39
- let from = 0;
55
+ let from: number | null = null;
40
56
 
41
57
  tree.iterate({
42
58
  enter: (node) => {
43
- if (found) {
59
+ if (from !== null) {
44
60
  return false;
45
- } // Stop traversal if found
61
+ }
46
62
 
47
- // Check if the node is an identifier and matches the variable name
48
63
  if (
49
64
  node.name === "VariableName" &&
50
65
  state.doc.sliceString(node.from, node.to) === variableName
51
66
  ) {
52
67
  from = node.from;
53
- found = true;
54
- return false; // Stop traversal
68
+ return false;
55
69
  }
56
70
 
57
- // Skip comments and strings
58
71
  if (node.name === "Comment" || node.name === "String") {
59
72
  return false;
60
73
  }
74
+
75
+ return undefined;
61
76
  },
62
77
  });
63
78
 
64
- if (found) {
65
- goToPosition(view, from);
66
- return true;
79
+ return from;
80
+ }
81
+
82
+ function getScopeChain(tree: Tree, usagePosition: number): ScopeContext[] {
83
+ const scopeChain: ScopeContext[] = [];
84
+ let currentNode: SyntaxNode | null = tree.resolveInner(usagePosition, 0);
85
+
86
+ while (currentNode) {
87
+ if (SCOPE_CREATING_NODES.has(currentNode.name)) {
88
+ // Skip ClassDefinition if we've already seen a function/lambda.
89
+ const inFunctionLikeScope = scopeChain.some(
90
+ (scope) =>
91
+ scope.type === "FunctionDefinition" ||
92
+ scope.type === "LambdaExpression",
93
+ );
94
+ if (!(inFunctionLikeScope && currentNode.name === "ClassDefinition")) {
95
+ scopeChain.push({
96
+ id: currentNode.from,
97
+ type: currentNode.name,
98
+ });
99
+ }
100
+ }
101
+ currentNode = currentNode.parent;
102
+ }
103
+
104
+ scopeChain.push({ id: -1, type: "global" });
105
+ return scopeChain;
106
+ }
107
+
108
+ function addDeclaration(
109
+ declarations: VariableDeclaration[],
110
+ scopeId: number,
111
+ from: number,
112
+ ) {
113
+ declarations.push({ scopeId, from });
114
+ }
115
+
116
+ function traverseChildren(
117
+ cursor: TreeCursor,
118
+ callback: (node: SyntaxNode) => void,
119
+ ) {
120
+ if (cursor.firstChild()) {
121
+ do {
122
+ callback(cursor.node);
123
+ } while (cursor.nextSibling());
124
+ }
125
+ }
126
+
127
+ function collectMatchingTargets(
128
+ cursor: TreeCursor,
129
+ state: EditorState,
130
+ variableName: string,
131
+ scopeId: number,
132
+ declarations: VariableDeclaration[],
133
+ ) {
134
+ switch (cursor.name) {
135
+ case "VariableName":
136
+ if (state.doc.sliceString(cursor.from, cursor.to) === variableName) {
137
+ addDeclaration(declarations, scopeId, cursor.from);
138
+ }
139
+ break;
140
+
141
+ case "TupleExpression":
142
+ case "ArrayExpression": {
143
+ const childCursor = cursor.node.cursor();
144
+ childCursor.firstChild();
145
+ do {
146
+ collectMatchingTargets(
147
+ childCursor,
148
+ state,
149
+ variableName,
150
+ scopeId,
151
+ declarations,
152
+ );
153
+ } while (childCursor.nextSibling());
154
+ break;
155
+ }
156
+ default:
157
+ break;
67
158
  }
68
- return false;
159
+ }
160
+
161
+ function collectFunctionParameters(
162
+ node: SyntaxNode | Tree,
163
+ state: EditorState,
164
+ variableName: string,
165
+ scopeId: number,
166
+ declarations: VariableDeclaration[],
167
+ ) {
168
+ const cursor = node.cursor();
169
+ cursor.firstChild();
170
+ do {
171
+ if (cursor.name !== "ParamList") {
172
+ continue;
173
+ }
174
+
175
+ const paramCursor = cursor.node.cursor();
176
+ paramCursor.firstChild();
177
+ do {
178
+ if (
179
+ paramCursor.name === "VariableName" &&
180
+ state.doc.sliceString(paramCursor.from, paramCursor.to) === variableName
181
+ ) {
182
+ addDeclaration(declarations, scopeId, paramCursor.from);
183
+ }
184
+ } while (paramCursor.nextSibling());
185
+ } while (cursor.nextSibling());
186
+ }
187
+
188
+ function collectForTargets(
189
+ node: SyntaxNode | Tree,
190
+ state: EditorState,
191
+ variableName: string,
192
+ scopeId: number,
193
+ declarations: VariableDeclaration[],
194
+ ) {
195
+ const cursor = node.cursor();
196
+ cursor.firstChild();
197
+ let foundFor = false;
198
+ do {
199
+ if (cursor.name === "for") {
200
+ foundFor = true;
201
+ } else if (foundFor && cursor.name === "in") {
202
+ break;
203
+ } else if (foundFor) {
204
+ collectMatchingTargets(
205
+ cursor,
206
+ state,
207
+ variableName,
208
+ scopeId,
209
+ declarations,
210
+ );
211
+ }
212
+ } while (cursor.nextSibling());
213
+ }
214
+
215
+ function collectMatchingDeclarations(
216
+ node: SyntaxNode | Tree,
217
+ state: EditorState,
218
+ variableName: string,
219
+ scopeStack: number[],
220
+ declarations: VariableDeclaration[],
221
+ ) {
222
+ const cursor = node.cursor();
223
+ const nodeName = cursor.name;
224
+ const nodeStart = cursor.from;
225
+
226
+ const isNewScope = SCOPE_CREATING_NODES.has(nodeName);
227
+ const currentScopeStack = isNewScope
228
+ ? [...scopeStack, nodeStart]
229
+ : scopeStack;
230
+ const currentScope = currentScopeStack[currentScopeStack.length - 1] ?? -1;
231
+
232
+ switch (nodeName) {
233
+ case "FunctionDefinition":
234
+ case "ClassDefinition": {
235
+ const subCursor = node.cursor();
236
+ subCursor.firstChild();
237
+ do {
238
+ if (
239
+ subCursor.name === "VariableName" &&
240
+ state.doc.sliceString(subCursor.from, subCursor.to) === variableName
241
+ ) {
242
+ const parentScope = scopeStack[scopeStack.length - 1] ?? -1;
243
+ addDeclaration(declarations, parentScope, subCursor.from);
244
+ break;
245
+ }
246
+ } while (subCursor.nextSibling());
247
+
248
+ if (nodeName === "FunctionDefinition") {
249
+ collectFunctionParameters(
250
+ node,
251
+ state,
252
+ variableName,
253
+ nodeStart,
254
+ declarations,
255
+ );
256
+ }
257
+ break;
258
+ }
259
+ case "LambdaExpression":
260
+ collectFunctionParameters(
261
+ node,
262
+ state,
263
+ variableName,
264
+ nodeStart,
265
+ declarations,
266
+ );
267
+ break;
268
+
269
+ case "ArrayComprehensionExpression":
270
+ case "DictionaryComprehensionExpression":
271
+ case "SetComprehensionExpression":
272
+ case "ComprehensionExpression":
273
+ case "ForStatement":
274
+ collectForTargets(node, state, variableName, currentScope, declarations);
275
+ break;
276
+
277
+ case "AssignStatement": {
278
+ const assignOpPositions: number[] = [];
279
+ const subCursor = node.cursor();
280
+ subCursor.firstChild();
281
+ do {
282
+ if (subCursor.name === "AssignOp") {
283
+ assignOpPositions.push(subCursor.from);
284
+ }
285
+ } while (subCursor.nextSibling());
286
+
287
+ const lastAssignOpPosition =
288
+ assignOpPositions[assignOpPositions.length - 1];
289
+ if (lastAssignOpPosition === undefined) {
290
+ break;
291
+ }
292
+
293
+ const targetCursor = node.cursor();
294
+ targetCursor.firstChild();
295
+ do {
296
+ if (targetCursor.from < lastAssignOpPosition) {
297
+ collectMatchingTargets(
298
+ targetCursor,
299
+ state,
300
+ variableName,
301
+ currentScope,
302
+ declarations,
303
+ );
304
+ }
305
+ } while (targetCursor.nextSibling());
306
+ break;
307
+ }
308
+ case "ImportStatement": {
309
+ const subCursor = node.cursor();
310
+ subCursor.firstChild();
311
+ do {
312
+ if (
313
+ subCursor.name === "VariableName" &&
314
+ state.doc.sliceString(subCursor.from, subCursor.to) === variableName
315
+ ) {
316
+ addDeclaration(declarations, currentScope, subCursor.from);
317
+ }
318
+ } while (subCursor.nextSibling());
319
+ break;
320
+ }
321
+ case "ImportFromStatement": {
322
+ const subCursor = node.cursor();
323
+ subCursor.firstChild();
324
+ let foundImport = false;
325
+ do {
326
+ if (subCursor.name === "import") {
327
+ foundImport = true;
328
+ } else if (
329
+ foundImport &&
330
+ subCursor.name === "VariableName" &&
331
+ state.doc.sliceString(subCursor.from, subCursor.to) === variableName
332
+ ) {
333
+ addDeclaration(declarations, currentScope, subCursor.from);
334
+ }
335
+ } while (subCursor.nextSibling());
336
+ break;
337
+ }
338
+ case "TryStatement":
339
+ case "WithStatement": {
340
+ const subCursor = node.cursor();
341
+ subCursor.firstChild();
342
+ let foundAs = false;
343
+ do {
344
+ if (subCursor.name === "as") {
345
+ foundAs = true;
346
+ } else if (
347
+ foundAs &&
348
+ subCursor.name === "VariableName" &&
349
+ state.doc.sliceString(subCursor.from, subCursor.to) === variableName
350
+ ) {
351
+ addDeclaration(declarations, currentScope, subCursor.from);
352
+ foundAs = false;
353
+ }
354
+ } while (subCursor.nextSibling());
355
+ break;
356
+ }
357
+ default:
358
+ break;
359
+ }
360
+
361
+ traverseChildren(cursor, (childNode) => {
362
+ collectMatchingDeclarations(
363
+ childNode,
364
+ state,
365
+ variableName,
366
+ currentScopeStack,
367
+ declarations,
368
+ );
369
+ });
370
+ }
371
+
372
+ function findScopedDefinitionPosition(
373
+ state: EditorState,
374
+ variableName: string,
375
+ usagePosition: number,
376
+ ): number | null {
377
+ const tree = syntaxTree(state);
378
+ const declarations: VariableDeclaration[] = [];
379
+
380
+ collectMatchingDeclarations(tree, state, variableName, [], declarations);
381
+
382
+ const clampedUsagePosition = Math.max(
383
+ 0,
384
+ Math.min(usagePosition, state.doc.length),
385
+ );
386
+
387
+ for (const scope of getScopeChain(tree, clampedUsagePosition)) {
388
+ const match = declarations
389
+ .filter((declaration) => declaration.scopeId === scope.id)
390
+ .filter((declaration) => {
391
+ return POSITION_SENSITIVE_SCOPES.has(scope.type)
392
+ ? declaration.from <= clampedUsagePosition
393
+ : true;
394
+ })
395
+ .toSorted((left, right) => left.from - right.from)[0];
396
+
397
+ if (match) {
398
+ return match.from;
399
+ }
400
+ }
401
+
402
+ return null;
403
+ }
404
+
405
+ /**
406
+ * This function will select the first occurrence of the given variable name,
407
+ * for a given editor view.
408
+ * @param view The editor view which contains the variable name.
409
+ * @param variableName The name of the variable to select, if found in the editor.
410
+ * @param usagePosition The position of the variable usage, if available.
411
+ */
412
+ export function goToVariableDefinition(
413
+ view: EditorView,
414
+ variableName: string,
415
+ usagePosition?: number,
416
+ ): boolean {
417
+ const { state } = view;
418
+ const from =
419
+ (usagePosition !== undefined
420
+ ? findScopedDefinitionPosition(state, variableName, usagePosition)
421
+ : null) ?? findFirstMatchingVariable(state, variableName);
422
+
423
+ if (from === null) {
424
+ return false;
425
+ }
426
+
427
+ goToPosition(view, from);
428
+ return true;
69
429
  }
70
430
 
71
431
  /**
@@ -18,10 +18,16 @@ function getWordUnderCursor(state: EditorState) {
18
18
  const { from, to } = state.selection.main;
19
19
  if (from === to) {
20
20
  const { startToken, endToken } = getPositionAtWordBounds(state.doc, from);
21
- return state.doc.sliceString(startToken, endToken);
21
+ return {
22
+ position: startToken,
23
+ word: state.doc.sliceString(startToken, endToken),
24
+ };
22
25
  }
23
26
 
24
- return state.doc.sliceString(from, to);
27
+ return {
28
+ position: from,
29
+ word: state.doc.sliceString(from, to),
30
+ };
25
31
  }
26
32
 
27
33
  /**
@@ -51,15 +57,15 @@ function isPrivateVariable(variableName: string) {
51
57
  */
52
58
  export function goToDefinitionAtCursorPosition(view: EditorView): boolean {
53
59
  const { state } = view;
54
- const variableName = getWordUnderCursor(state);
55
- if (!variableName) {
60
+ const { position, word } = getWordUnderCursor(state);
61
+ if (!word) {
56
62
  return false;
57
63
  }
58
64
  // Close popovers/tooltips
59
65
  closeCompletion(view);
60
66
  view.dispatch({ effects: closeHoverTooltips });
61
67
 
62
- return goToDefinition(view, variableName);
68
+ return goToDefinition(view, word, position);
63
69
  }
64
70
 
65
71
  /**
@@ -69,7 +75,19 @@ export function goToDefinitionAtCursorPosition(view: EditorView): boolean {
69
75
  export function goToDefinition(
70
76
  view: EditorView,
71
77
  variableName: string,
78
+ usagePosition?: number,
72
79
  ): boolean {
80
+ if (usagePosition !== undefined) {
81
+ const foundLocally = goToVariableDefinition(
82
+ view,
83
+ variableName,
84
+ usagePosition,
85
+ );
86
+ if (foundLocally) {
87
+ return true;
88
+ }
89
+ }
90
+
73
91
  // The variable may exist in another cell
74
92
  const editorWithVariable = getEditorForVariable(view, variableName);
75
93
  if (!editorWithVariable) {
@@ -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) {
@@ -79,7 +79,7 @@ export const EditApp: React.FC<AppProps> = ({
79
79
  };
80
80
  }, []);
81
81
 
82
- const { connection } = useMarimoKernelConnection({
82
+ const { connection, reconnect } = useMarimoKernelConnection({
83
83
  autoInstantiate: userConfig.runtime.auto_instantiate,
84
84
  setCells: (cells, layout) => {
85
85
  setCells(cells);
@@ -147,6 +147,7 @@ export const EditApp: React.FC<AppProps> = ({
147
147
  connection={connection}
148
148
  isRunning={isRunning}
149
149
  width={appConfig.width}
150
+ onReconnect={reconnect}
150
151
  >
151
152
  <AppHeader
152
153
  connection={connection}
@@ -156,7 +157,7 @@ export const EditApp: React.FC<AppProps> = ({
156
157
  "sticky left-0",
157
158
  )}
158
159
  >
159
- {isEditing && (
160
+ {!hideControls && isEditing && (
160
161
  <div className="flex items-center justify-center container">
161
162
  <FilenameForm filename={filename} />
162
163
  </div>
@@ -442,6 +442,11 @@ const DEFAULT_HOT_KEY = {
442
442
  group: "Command",
443
443
  key: "c",
444
444
  },
445
+ "command.cutCell": {
446
+ name: "Cut cell",
447
+ group: "Command",
448
+ key: "x",
449
+ },
445
450
  "command.pasteCell": {
446
451
  name: "Paste cell",
447
452
  group: "Command",
@@ -9,6 +9,7 @@ import {
9
9
  } from "rpc-anywhere";
10
10
  import type { NotificationPayload } from "@/core/kernel/messages";
11
11
  import type { ParentSchema } from "@/core/wasm/rpc";
12
+ import { shouldLoadDuckDBPackages } from "@/core/wasm/utils";
12
13
  import { TRANSPORT_ID } from "@/core/wasm/worker/constants";
13
14
  import { getPyodideVersion } from "@/core/wasm/worker/getPyodideVersion";
14
15
  import { MessageBuffer } from "@/core/wasm/worker/message-buffer";
@@ -85,8 +86,8 @@ const requestHandler = createRPCRequestHandler({
85
86
  loadPackages: async (code: string) => {
86
87
  await pyodideReadyPromise; // Make sure loading is done
87
88
 
88
- if (code.includes("mo.sql")) {
89
- // Add pandas and duckdb to the code
89
+ if (shouldLoadDuckDBPackages(code)) {
90
+ // Add pandas and duckdb to the code for mo.sql and for remote duckdb sources
90
91
  code = `import pandas\n${code}`;
91
92
  code = `import duckdb\n${code}`;
92
93
  code = `import sqlglot\n${code}`;
@@ -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,
@@ -38,7 +38,7 @@ export const RunApp: React.FC<AppProps> = ({ appConfig }) => {
38
38
  };
39
39
  }, []);
40
40
 
41
- const { connection } = useMarimoKernelConnection({
41
+ const { connection, reconnect } = useMarimoKernelConnection({
42
42
  autoInstantiate: true,
43
43
  setCells: setCells,
44
44
  sessionId: getSessionId(),
@@ -84,6 +84,7 @@ export const RunApp: React.FC<AppProps> = ({ appConfig }) => {
84
84
  connection={connection}
85
85
  isRunning={isRunning}
86
86
  width={appConfig.width}
87
+ onReconnect={reconnect}
87
88
  >
88
89
  <AppHeader connection={connection} className="sm:pt-8">
89
90
  {galleryHref && (