@marimo-team/islands 0.17.8 → 0.18.1

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 (604) hide show
  1. package/dist/Combination-DN9sfYvo.js +2569 -0
  2. package/dist/{ConnectedDataExplorerComponent-WbiFXhKG.js → ConnectedDataExplorerComponent-Dhlx78se.js} +53 -53
  3. package/dist/angular-html-BQrFNFXr.js +7 -0
  4. package/dist/{angular-html-DOnHLneR.js → angular-html-NuAgzn7W.js} +1 -1
  5. package/dist/{angular-ts-ClZ_D57Q.js → angular-ts-DqCVY0oX.js} +5 -5
  6. package/dist/{any-language-editor-YPQMljy9.js → any-language-editor-C8uMYHwj.js} +16 -16
  7. package/dist/{apl-BQW_2HeZ.js → apl-CqAdrzTc.js} +6 -6
  8. package/dist/{arc-DqQgmHse.js → arc-JJltOFJh.js} +2 -2
  9. package/dist/{architecture-O4VJ6CD3-BAmYZukJ.js → architecture-O4VJ6CD3-D7BH29FP.js} +3 -3
  10. package/dist/{architectureDiagram-W76B3OCA-6PSfeg_h.js → architectureDiagram-W76B3OCA-BXXl3wYv.js} +22 -22
  11. package/dist/assets/__vite-browser-external-CSegkGa0.js +1 -0
  12. package/dist/assets/{worker-BrDpRi2I.js → worker-CiT2i-Vo.js} +2 -2
  13. package/dist/{astro-B_6-YJyf.js → astro-BhYIwlT9.js} +6 -6
  14. package/dist/{blade-J--jW6Qd.js → blade-C_4Ocghp.js} +8 -8
  15. package/dist/{blockDiagram-QIGZ2CNN-BBAMkEiZ.js → blockDiagram-QIGZ2CNN-BEJ-ovZ-.js} +16 -16
  16. package/dist/{bsl-DwRO_vPO.js → bsl-Cam9acj0.js} +1 -1
  17. package/dist/{button-Hye6-2X8.js → button-Css_i-3R.js} +73 -71
  18. package/dist/c-DYGEdS-r.js +4 -0
  19. package/dist/{c4Diagram-FPNF74CW-H3kajU-4.js → c4Diagram-FPNF74CW-Bec_XtUS.js} +8 -8
  20. package/dist/{cairo-C5YwJoRd.js → cairo-DzTxWLx8.js} +1 -1
  21. package/dist/{channel-DO61Dn1s.js → channel-SHZ3pH5W.js} +1 -1
  22. package/dist/{chunk-3AY6CYHV-PGaWKUmM.js → chunk-3AY6CYHV-CY56r15D.js} +10 -10
  23. package/dist/{chunk-4BX2VUAB-C2wFBih6.js → chunk-4BX2VUAB-DakkmKa6.js} +1 -1
  24. package/dist/{chunk-4KMFLZZN-BLk4DGEy.js → chunk-4KMFLZZN-PjonQa4P.js} +1 -1
  25. package/dist/{chunk-55IACEB6-DQd6AZ1u.js → chunk-55IACEB6-lM9AcPFI.js} +1 -1
  26. package/dist/{chunk-6OXUPJBA-KTKvUtax.js → chunk-6OXUPJBA-CtytfqPH.js} +7 -7
  27. package/dist/{chunk-7GE3RBXV-2QiFkaHl.js → chunk-7GE3RBXV-Ch2VFfx5.js} +1 -1
  28. package/dist/{chunk-ABZYJK2D-plHo87kc.js → chunk-ABZYJK2D-ChhHEVnH.js} +2 -2
  29. package/dist/{chunk-BN7GFLIU-D4EEpMya.js → chunk-BN7GFLIU-4gH4skZE.js} +1 -1
  30. package/dist/{chunk-CVBHYZKI-nBM-9qrT.js → chunk-CVBHYZKI-CvLGu9Zl.js} +1 -1
  31. package/dist/{chunk-CXMOBAN2-DQYc62lB.js → chunk-CXMOBAN2-DmuTyIC5.js} +6 -6
  32. package/dist/{chunk-EXTU4WIE-CzYdpCHC.js → chunk-EXTU4WIE-5gY1kHy6.js} +2 -2
  33. package/dist/{chunk-FMBD7UC4-5CTTj0Jv.js → chunk-FMBD7UC4-CktmbpHj.js} +1 -1
  34. package/dist/{chunk-JA3XYJ7Z-iN-ePWJa.js → chunk-JA3XYJ7Z-DoOh1zwr.js} +4 -4
  35. package/dist/{chunk-JEIROHC2-DJN5-Qfh.js → chunk-JEIROHC2-BxiaYL-E.js} +1 -1
  36. package/dist/{chunk-K7UQS3LO-BFLlfdsi.js → chunk-K7UQS3LO-jAauQP9f.js} +7 -7
  37. package/dist/{chunk-KMC2YHZD-BvIjRiOn.js → chunk-KMC2YHZD-DStgMcLU.js} +1 -1
  38. package/dist/{chunk-QN33PNHL-Brd7yTp3.js → chunk-QN33PNHL-a6Utqqtp.js} +2 -2
  39. package/dist/{chunk-QYVHNE3D-2JcHbPf-.js → chunk-QYVHNE3D-Di-okNtj.js} +2 -2
  40. package/dist/{chunk-QZHKN3VN-uMYxkooq.js → chunk-QZHKN3VN-uG0W9XCn.js} +1 -1
  41. package/dist/{chunk-S3R3BYOJ-F8AD9lHs.js → chunk-S3R3BYOJ-D8svDLcB.js} +4 -4
  42. package/dist/{chunk-T44TD3VJ-BuOpBf-m.js → chunk-T44TD3VJ-C5NCytxJ.js} +1 -1
  43. package/dist/{chunk-TVAH2DTR-CnMJAbv2.js → chunk-TVAH2DTR-CXLr85J9.js} +6 -6
  44. package/dist/{chunk-TZMSLE5B-FgoUBce3.js → chunk-TZMSLE5B-1E_YfHMJ.js} +3 -3
  45. package/dist/{chunk-WFRQ32O7-XYO_3xAi.js → chunk-WFRQ32O7-BKSf4yCO.js} +1 -1
  46. package/dist/{chunk-WFWHJNB7-CO2PO-xj.js → chunk-WFWHJNB7-B1Zzkj_f.js} +1 -1
  47. package/dist/{chunk-XRWGC2XP-NEUwjXBT.js → chunk-XRWGC2XP-Bo8DlVQO.js} +1 -1
  48. package/dist/{chunk-ZPAFE4SF-CyeNhdPx.js → chunk-ZPAFE4SF-CmteRP75.js} +1 -1
  49. package/dist/classDiagram-KNZD7YFC-ZbE61oE0.js +40 -0
  50. package/dist/classDiagram-v2-RKCZMP56-BqhgFvho.js +40 -0
  51. package/dist/cmake-l0t4JJ7s.js +4 -0
  52. package/dist/{cobol-lK28EtZf.js → cobol-DJP1EK1j.js} +4 -4
  53. package/dist/{coffee-BSXLyDD2.js → coffee-CC5nEIi9.js} +1 -1
  54. package/dist/{cose-bilkent-S5V4N54A-Cj0MgFkf.js → cose-bilkent-S5V4N54A-DKXAkYs4.js} +3 -3
  55. package/dist/cpp-ANCO5onE.js +8 -0
  56. package/dist/{cpp-BChLOGjC.js → cpp-D9LYqqPp.js} +3 -3
  57. package/dist/{crystal-CO99xfcp.js → crystal-BRqcx7ej.js} +6 -6
  58. package/dist/csharp-Bz76NQ_J.js +4 -0
  59. package/dist/css-DAuWdYvT.js +4 -0
  60. package/dist/{dagre-5GWH7T2D-CfnBQe48.js → dagre-5GWH7T2D-NKT9rsKF.js} +17 -17
  61. package/dist/{data-grid-overlay-editor-Bcf9kFFc.js → data-grid-overlay-editor-awitGObA.js} +2 -2
  62. package/dist/{diagram-N5W7TBWH-04TOCf2a.js → diagram-N5W7TBWH-D7Lb6iTv.js} +24 -24
  63. package/dist/{diagram-QEK2KX5R-CUipzemR.js → diagram-QEK2KX5R-BGNlTTAr.js} +19 -19
  64. package/dist/{diagram-S2PKOQOG-ei2iw-oI.js → diagram-S2PKOQOG-DArsBfLb.js} +19 -19
  65. package/dist/diff-C7LSwbp8.js +4 -0
  66. package/dist/{dist-cqkd3NiL.js → dist-6NgnwCMd.js} +3 -3
  67. package/dist/{dist-CqazJcfk.js → dist-BDVas7u0.js} +1 -1
  68. package/dist/{dist-CGt0X2sV.js → dist-BeL8NYBI.js} +2 -2
  69. package/dist/dist-BhEY2Z_n.js +14 -0
  70. package/dist/{dist-R4ZaAXGr.js → dist-BkgFFOsz.js} +2 -2
  71. package/dist/{dist-v-r4jaY5.js → dist-BoehQujB.js} +1 -1
  72. package/dist/{dist-D7XZ_tXQ.js → dist-C2nw9RHE.js} +1 -1
  73. package/dist/{dist-BGDtO7aZ.js → dist-CAS8F-hC.js} +1 -1
  74. package/dist/{dist-s1LnJ5PG.js → dist-CS4N5B_G.js} +1 -1
  75. package/dist/{dist-B4S8pyFo.js → dist-Cc9Qz-U4.js} +3 -3
  76. package/dist/{dist-4FDGlo3i.js → dist-CljL8T10.js} +4 -4
  77. package/dist/dist-Cud0QD8Y.js +10 -0
  78. package/dist/{dist-Bi6qs7up.js → dist-D9rISDoI.js} +1 -1
  79. package/dist/dist-D9t6fT6i.js +10 -0
  80. package/dist/{dist-CTSMnLwu.js → dist-DC47GA46.js} +805 -643
  81. package/dist/{dist-D0KS-m2t.js → dist-Dh6pWjSH.js} +2 -2
  82. package/dist/{dist-DtSssmhN.js → dist-DlI9v2Hh.js} +2 -2
  83. package/dist/{dist-CSq74zEj.js → dist-DyXVT1vy.js} +1 -1
  84. package/dist/{dist-DO00gdpV.js → dist-TdQLXZKo.js} +3 -3
  85. package/dist/{dist-B9WB0SFB.js → dist-WvPZl2Sl.js} +1 -1
  86. package/dist/{dist-B4jO5BUT.js → dist-q94GwumS.js} +1 -1
  87. package/dist/{dist-CmEIe_wJ.js → dist-qGG7RM7P.js} +4 -4
  88. package/dist/{edge-BTCHQnL0.js → edge-DeFsqb1i.js} +5 -5
  89. package/dist/{elixir-CCIwO0SA.js → elixir-BGD3Ym80.js} +3 -3
  90. package/dist/{elm-Bd8GMb2w.js → elm-sXxjAPfa.js} +2 -2
  91. package/dist/{erDiagram-AWTI2OKA-DOO75nhy.js → erDiagram-AWTI2OKA-Dd30FpUG.js} +21 -21
  92. package/dist/{erb-C2XKicEJ.js → erb-CVVq1SHo.js} +19 -19
  93. package/dist/{erlang-BWIWBPfK.js → erlang-CoJZUhS4.js} +1 -1
  94. package/dist/{error-banner-BqE1uF21.js → error-banner-DDDPnVZA.js} +126 -124
  95. package/dist/esm-BC9Qw9UQ.js +4056 -0
  96. package/dist/{esm-hR1r0nyt.js → esm-DDjaZl5x.js} +14 -14
  97. package/dist/{flowDiagram-PVAE7QVJ-AUJeRwR9.js → flowDiagram-PVAE7QVJ-Dfo2-D8K.js} +23 -23
  98. package/dist/{formats-dvT8nDgH.js → formats-DClgE90A.js} +41 -21
  99. package/dist/{fortran-fixed-form-DOH2AovA.js → fortran-fixed-form-DUVqo01t.js} +1 -1
  100. package/dist/{fortran-free-form-DWQ7SFTN.js → fortran-free-form-e6UrnOjF.js} +1 -1
  101. package/dist/{fsharp-GbWUX1wo.js → fsharp-8cm272ry.js} +1 -1
  102. package/dist/{ganttDiagram-OWAHRB6G-d9HlXS4A.js → ganttDiagram-OWAHRB6G-CE9rMeMb.js} +10 -10
  103. package/dist/{gdresource-DJQ1WGjU.js → gdresource-ClFnPq3a.js} +2 -2
  104. package/dist/gdscript-B0LZbOIR.js +4 -0
  105. package/dist/gdshader-DFrJP5ei.js +4 -0
  106. package/dist/{git-commit-73gQ2jal.js → git-commit-BYaLl5ls.js} +1 -1
  107. package/dist/{git-rebase-tezkvplk.js → git-rebase-8n1RW6UD.js} +1 -1
  108. package/dist/{gitGraph-ZV4HHKMB-4c_I6adP.js → gitGraph-ZV4HHKMB-DGIos9rl.js} +3 -3
  109. package/dist/{gitGraphDiagram-NY62KEGX-BdOzqIF7.js → gitGraphDiagram-NY62KEGX-DJjzf0dH.js} +19 -19
  110. package/dist/{glide-data-editor-B26PhZvE.js → glide-data-editor-CdlLXwb-.js} +94 -94
  111. package/dist/{glimmer-js-B4yN_cyX.js → glimmer-js-Dai0PeIS.js} +4 -4
  112. package/dist/{glimmer-ts-BFwzJYHf.js → glimmer-ts-D_TjaTpy.js} +4 -4
  113. package/dist/glsl-CxEuvrWH.js +5 -0
  114. package/dist/{glsl-Da3zbemV.js → glsl-CyGXCGI2.js} +1 -1
  115. package/dist/go-DdqSEUJy.js +4 -0
  116. package/dist/{graphql-DHCTQXG8.js → graphql-B1Dx1rcM.js} +4 -4
  117. package/dist/graphql-cxjxtpev.js +8 -0
  118. package/dist/{hack-Bq2SPMdZ.js → hack-DaQhTJ_x.js} +4 -4
  119. package/dist/{haml-DKOqVKa_.js → haml-Bp5GoYpB.js} +2 -2
  120. package/dist/haml-CiyF8Brn.js +6 -0
  121. package/dist/{handlebars-lWgxxMwE.js → handlebars-ChGgzSRK.js} +4 -4
  122. package/dist/haxe-DCTL_FCo.js +4 -0
  123. package/dist/hlsl-Bfx4Ir_v.js +4 -0
  124. package/dist/{html-CHICwrWt.js → html-C4wWoZph.js} +2 -2
  125. package/dist/html-CEOIAVhY.js +6 -0
  126. package/dist/{html-derivative-BvtUczEO.js → html-derivative-BBqlL-a4.js} +1 -1
  127. package/dist/{html-derivative-PpMnWy1w.js → html-derivative-COo0pM2g.js} +4 -4
  128. package/dist/{http-CL7ORkDb.js → http-BBZ3n4Nc.js} +9 -9
  129. package/dist/{hxml-dX0MdapH.js → hxml-B3WEmVIR.js} +1 -1
  130. package/dist/{info-63CPKGFF-Bz8ia4ds.js → info-63CPKGFF-BJRf7NSB.js} +3 -3
  131. package/dist/{infoDiagram-STP46IZ2-2N5rOSVf.js → infoDiagram-STP46IZ2-wRiL7RAF.js} +15 -15
  132. package/dist/java-Dg_uLDO2.js +4 -0
  133. package/dist/javascript-UdF6t51O.js +4 -0
  134. package/dist/{jinja-DsZfQ7_N.js → jinja-DIY5F3JL.js} +3 -3
  135. package/dist/{jison-BspgGSu_.js → jison-NvMl7ZRB.js} +1 -1
  136. package/dist/{journeyDiagram-BIP6EPQ6-AkLtiVmB.js → journeyDiagram-BIP6EPQ6-xE-QKfW3.js} +9 -9
  137. package/dist/json-DhGO17Us.js +4 -0
  138. package/dist/jsx-BnWl0sfU.js +4 -0
  139. package/dist/{julia-B_C4JiTM.js → julia-B99Wf6ks.js} +8 -8
  140. package/dist/{kanban-definition-6OIFK2YF-Crxg_HOg.js → kanban-definition-6OIFK2YF-xTM_lSKu.js} +15 -15
  141. package/dist/{katex-CTMLv-Xd.js → katex-_B79i9h_.js} +1 -1
  142. package/dist/{label-D3LNCORf.js → label-DboGLjGa.js} +234 -203
  143. package/dist/{latex-DoiWAlAQ.js → latex-CZecqbCK.js} +2 -2
  144. package/dist/less-DZgWnAzP.js +4 -0
  145. package/dist/{line-DBxDZ2GZ.js → line-Bm50ongk.js} +3 -3
  146. package/dist/{linear-B8XR-NVr.js → linear-CUCOukde.js} +2 -2
  147. package/dist/{liquid-Bv5Ox8yg.js → liquid-CBTCQ-BA.js} +4 -4
  148. package/dist/{lua-BKJ_BAEH.js → lua-BAo0xbXr.js} +1 -1
  149. package/dist/lua-C4LdLFQB.js +5 -0
  150. package/dist/main.js +9322 -8755
  151. package/dist/markdown-DmoiORob.js +4 -0
  152. package/dist/{marko-DEzr-2oj.js → marko-aJY3NB2u.js} +4 -4
  153. package/dist/{mdc-GC7qNQda.js → mdc-DUOD_AOa.js} +6 -6
  154. package/dist/{mermaid-Dl3ywmV2.js → mermaid-DKh-bxRG.js} +24 -24
  155. package/dist/{mermaid-parser.core-C5kJ8cMb.js → mermaid-parser.core-BkBK5D-D.js} +8 -8
  156. package/dist/mermaid.core-BlYN1aB0.js +31 -0
  157. package/dist/{mermaid.core-2hDUD3tS.js → mermaid.core-DhviAB-E.js} +35 -35
  158. package/dist/{mhchem-ydsvRuzJ.js → mhchem-BLvV19Q1.js} +1 -1
  159. package/dist/{mindmap-definition-Q6HEUPPD-u3xALYXy.js → mindmap-definition-Q6HEUPPD-DhGkxCFl.js} +20 -20
  160. package/dist/{nginx-WYx0kjQD.js → nginx-C4wBmtSL.js} +2 -2
  161. package/dist/{nim-B59jjkdb.js → nim-7HUrH4-G.js} +8 -8
  162. package/dist/{number-overlay-editor-BJoc-iTp.js → number-overlay-editor-B7JKtSXW.js} +1 -1
  163. package/dist/{ordinal-DncHRC0c.js → ordinal-CgAjEHLv.js} +1 -1
  164. package/dist/{packet-HUATNLJX-DZeFAkmI.js → packet-HUATNLJX-COt0WQbt.js} +3 -3
  165. package/dist/{perl-BWXWNd9p.js → perl-DcIsham4.js} +6 -6
  166. package/dist/{php-B2IAnMDw.js → php-BMhhkMnI.js} +6 -6
  167. package/dist/php-BgNggqvM.js +11 -0
  168. package/dist/{pie-WTHONI2E-CcN2FpmZ.js → pie-WTHONI2E-7VABasD6.js} +3 -3
  169. package/dist/{pieDiagram-ADFJNKIX-B40sMFEq.js → pieDiagram-ADFJNKIX-CV46TPgr.js} +24 -24
  170. package/dist/postcss-BV0gPaAN.js +4 -0
  171. package/dist/{pug-jCrWgXoo.js → pug-C7hWP9pb.js} +3 -3
  172. package/dist/python-DrIYjHcK.js +4 -0
  173. package/dist/{qml-BvryPJl6.js → qml-4wNHxISd.js} +1 -1
  174. package/dist/{quadrantDiagram-LMRXKWRM-C-qFDzwP.js → quadrantDiagram-LMRXKWRM-0ohBNHBM.js} +5 -5
  175. package/dist/r-bWdZZY4p.js +4 -0
  176. package/dist/{radar-NJJJXTRR-DgOJ0Ctc.js → radar-NJJJXTRR-DEeA59xM.js} +3 -3
  177. package/dist/{razor-BsW9JZIF.js → razor-kE6VSkUw.js} +4 -4
  178. package/dist/react-vega-BFAvc6S7.js +25 -0
  179. package/dist/{react-vega-ypEMYp9o.js → react-vega-L8_x6Wjr.js} +50 -23
  180. package/dist/regexp-Du19WMsH.js +4 -0
  181. package/dist/{requirementDiagram-4UW4RH46-Cl_mIh_y.js → requirementDiagram-4UW4RH46-DSnND54_.js} +20 -20
  182. package/dist/{rst-CRU76Z1W.js → rst-CjWaqJB3.js} +22 -22
  183. package/dist/{ruby-9gRRZYzM.js → ruby-CX211_l4.js} +12 -12
  184. package/dist/ruby-Dsch-4qr.js +22 -0
  185. package/dist/{sankeyDiagram-GR3RE2ED-Dm9k3dHY.js → sankeyDiagram-GR3RE2ED-C4jd7w5x.js} +6 -6
  186. package/dist/{sas-BDTaEI61.js → sas-Bso79j2d.js} +1 -1
  187. package/dist/{scss-B1u4Hrbb.js → scss-B2x0kI7c.js} +1 -1
  188. package/dist/scss-BHcIhkao.js +5 -0
  189. package/dist/sdbl-CiVVvobW.js +4 -0
  190. package/dist/{sequenceDiagram-C3RYC4MD-DmU9oc42.js → sequenceDiagram-C3RYC4MD-4cYnu6yf.js} +10 -10
  191. package/dist/{shaderlab-Bm5WmYK9.js → shaderlab-B4l4__9m.js} +1 -1
  192. package/dist/shellscript-Carvxcyf.js +4 -0
  193. package/dist/{shellsession-CN-wC7WL.js → shellsession-D-krdWsh.js} +1 -1
  194. package/dist/{slides-component-CZksIptv.js → slides-component-Cm9g-y7F.js} +1 -1
  195. package/dist/{soy-CeMP2PMh.js → soy-wFhS-Vjb.js} +3 -3
  196. package/dist/{sparql-M76X2Hg1.js → sparql-D6Kv-L3I.js} +1 -1
  197. package/dist/{spec-qDDGe5hl.js → spec-B7BWIiD8.js} +3 -3
  198. package/dist/sql-CVP77J2a.js +4 -0
  199. package/dist/{src-CePha-_O.js → src-DopHipf8.js} +1 -1
  200. package/dist/{stata-BH7l4VD7.js → stata-1fehkWpU.js} +1 -1
  201. package/dist/{stateDiagram-KXAO66HF-D_SUaMYR.js → stateDiagram-KXAO66HF-Cq-ezNe-.js} +21 -21
  202. package/dist/stateDiagram-v2-UMBNRL4Z-QxkaR8xk.js +39 -0
  203. package/dist/{step-zYP-E-fB.js → step-Bixovd6W.js} +1 -1
  204. package/dist/stex-IzMc-wiJ.js +5 -0
  205. package/dist/style.css +1 -2
  206. package/dist/stylus-BTQe34gF.js +4 -0
  207. package/dist/{svelte-TwcowgfT.js → svelte-DZNFxgw8.js} +4 -4
  208. package/dist/{templ-BpG-MhQv.js → templ-unaxtPDu.js} +3 -3
  209. package/dist/tex-B02KkJuq.js +5 -0
  210. package/dist/{tex-CBM64lBG.js → tex-WcClzGDl.js} +1 -1
  211. package/dist/{time-DRnNkqSS.js → time-D5kvxFYj.js} +2 -2
  212. package/dist/{timeline-definition-XQNQX7LJ-BgkB1JzD.js → timeline-definition-XQNQX7LJ-HouMBLkR.js} +6 -6
  213. package/dist/{treemap-75Q7IDZK-CGM2jb5Y.js → treemap-75Q7IDZK-rIabFN59.js} +3 -3
  214. package/dist/{ts-tags-CywVDBFD.js → ts-tags-Dw16jybl.js} +9 -9
  215. package/dist/tsx-2o7mnE6q.js +4 -0
  216. package/dist/turtle-CDidgplC.js +4 -0
  217. package/dist/{twig-DKvQCGZl.js → twig-CTY0fjwf.js} +23 -23
  218. package/dist/{types-2eTEqSwS.js → types-8-7JTTaW.js} +176 -175
  219. package/dist/typescript-Z3djoets.js +4 -0
  220. package/dist/{useAsyncData-6gisQ4pR.js → useAsyncData-_ejUTnFA.js} +1 -1
  221. package/dist/{useTheme-B-2frT0L.js → useTheme-Cpx27F7Z.js} +5 -2
  222. package/dist/{vega-component-C-bCSv1b.js → vega-component-r6NkLfxM.js} +213 -212
  223. package/dist/{vue-CUZawI_b.js → vue-BjZgU5Nz.js} +6 -6
  224. package/dist/vue-DhUZPDmo.js +10 -0
  225. package/dist/{vue-html-Bx7_HmU0.js → vue-html-C4EmFqJx.js} +7 -7
  226. package/dist/{vue-vine-9w78JPDc.js → vue-vine-DrjIj56i.js} +11 -11
  227. package/dist/{xml-CEIIhUsl.js → xml-BgKyT7dU.js} +1 -1
  228. package/dist/xml-C7KksLEJ.js +5 -0
  229. package/dist/{xsl-BynZr4Sw.js → xsl-9daNus4h.js} +2 -2
  230. package/dist/{xychartDiagram-6GGTOJPD-u5660hzT.js → xychartDiagram-6GGTOJPD-DkDWjoGr.js} +16 -16
  231. package/dist/yaml-zmBXofFy.js +4 -0
  232. package/package.json +8 -8
  233. package/src/components/chat/acp/blocks.tsx +1 -1
  234. package/src/components/chat/chat-panel.tsx +7 -3
  235. package/src/components/chat/reasoning-accordion.tsx +1 -1
  236. package/src/components/data-table/TableActions.tsx +18 -14
  237. package/src/components/data-table/__tests__/columns.test.tsx +143 -1
  238. package/src/components/data-table/__tests__/url-detector.test.tsx +92 -1
  239. package/src/components/data-table/columns.tsx +34 -17
  240. package/src/components/data-table/data-table.tsx +3 -0
  241. package/src/components/data-table/download-actions.tsx +16 -8
  242. package/src/components/data-table/row-viewer-panel/row-viewer.tsx +5 -5
  243. package/src/components/data-table/url-detector.tsx +43 -0
  244. package/src/components/datasources/utils.ts +7 -0
  245. package/src/components/editor/ai/ai-completion-editor.tsx +6 -3
  246. package/src/components/editor/cell/CreateCellButton.tsx +98 -88
  247. package/src/components/editor/chrome/panels/packages-panel.tsx +3 -1
  248. package/src/components/editor/chrome/types.ts +7 -0
  249. package/src/components/editor/file-tree/__tests__/file-expolorer.test.ts +179 -0
  250. package/src/components/editor/file-tree/file-explorer.tsx +71 -1
  251. package/src/components/editor/notebook-cell.tsx +27 -25
  252. package/src/components/editor/output/__tests__/ansi-reduce.test.ts +8 -0
  253. package/src/components/editor/output/ansi-reduce.ts +7 -4
  254. package/src/components/editor/renderers/grid-layout/grid-layout.tsx +35 -3
  255. package/src/components/pages/home-page.tsx +8 -3
  256. package/src/components/ui/table.tsx +1 -1
  257. package/src/core/ai/tools/__tests__/edit-notebook-tool.test.ts +156 -10
  258. package/src/core/ai/tools/__tests__/registry.test.ts +41 -3
  259. package/src/core/ai/tools/edit-notebook-tool.ts +86 -45
  260. package/src/core/ai/tools/registry.ts +5 -2
  261. package/src/core/cells/__tests__/logs.test.ts +371 -0
  262. package/src/core/cells/__tests__/session.test.ts +0 -9
  263. package/src/core/cells/logs.ts +16 -5
  264. package/src/core/cells/session.ts +0 -1
  265. package/src/core/codemirror/__tests__/format.test.ts +28 -2
  266. package/src/core/codemirror/copilot/client.ts +21 -1
  267. package/src/core/codemirror/copilot/copilot-config.tsx +29 -1
  268. package/src/core/codemirror/editing/commands.ts +4 -3
  269. package/src/core/codemirror/format.ts +105 -7
  270. package/src/core/codemirror/language/languages/sql/completion-store.ts +1 -1
  271. package/src/core/codemirror/language/languages/sql/sql.ts +8 -1
  272. package/src/core/codemirror/language/languages/sql/utils.ts +15 -0
  273. package/src/core/codemirror/language/panel/panel.tsx +1 -1
  274. package/src/core/config/__tests__/config-schema.test.ts +2 -0
  275. package/src/core/config/config-schema.ts +4 -3
  276. package/src/core/packages/__tests__/package-input-utils.test.ts +93 -0
  277. package/src/core/packages/package-input-utils.ts +36 -0
  278. package/src/core/websocket/useMarimoWebSocket.tsx +1 -1
  279. package/src/css/app/Cell.css +6 -1
  280. package/src/css/md.css +5 -0
  281. package/src/plugins/core/__test__/sanitize.test.ts +1 -1
  282. package/src/plugins/core/sanitize.ts +3 -1
  283. package/src/plugins/impl/DataTablePlugin.tsx +10 -1
  284. package/src/plugins/impl/DateTimePickerPlugin.tsx +3 -1
  285. package/src/plugins/impl/__tests__/DateTimePickerPlugin.test.tsx +3 -0
  286. package/src/plugins/impl/chat/ChatPlugin.tsx +1 -0
  287. package/src/plugins/impl/chat/chat-ui.tsx +140 -10
  288. package/src/plugins/impl/common/error-banner.tsx +7 -3
  289. package/src/plugins/impl/data-frames/DataFramePlugin.tsx +1 -0
  290. package/src/plugins/impl/vega/VegaPlugin.tsx +1 -0
  291. package/src/plugins/impl/vega/vega-component.tsx +26 -5
  292. package/src/plugins/layout/NavigationMenuPlugin.tsx +14 -3
  293. package/src/plugins/layout/ProgressPlugin.tsx +8 -5
  294. package/src/plugins/layout/StatPlugin.tsx +11 -4
  295. package/src/plugins/layout/__test__/ProgressPlugin.test.ts +37 -21
  296. package/src/utils/__tests__/urls.test.ts +165 -1
  297. package/src/utils/urls.ts +120 -0
  298. package/src/utils/vitals.ts +1 -1
  299. package/dist/Combination-BH_L276x.js +0 -2503
  300. package/dist/angular-html-BcsYKZNy.js +0 -7
  301. package/dist/assets/__vite-browser-external-BTNiCQ6O.js +0 -1
  302. package/dist/c-RhvfrIXd.js +0 -4
  303. package/dist/classDiagram-KNZD7YFC-BwfV2ECJ.js +0 -40
  304. package/dist/classDiagram-v2-RKCZMP56-CdtBTwGN.js +0 -40
  305. package/dist/cmake-Dv9WBQ8F.js +0 -4
  306. package/dist/cpp-De3HlDQp.js +0 -8
  307. package/dist/csharp-DONDYcLD.js +0 -4
  308. package/dist/css-KrVDDZJI.js +0 -4
  309. package/dist/diff-C_xoFltE.js +0 -4
  310. package/dist/dist-C_ywAD_6.js +0 -10
  311. package/dist/dist-Umyw8yf9.js +0 -10
  312. package/dist/download-Bb5BCMXq.js +0 -145
  313. package/dist/esm-Cjo4c4Vw.js +0 -2188
  314. package/dist/gdscript-CCtCxlxC.js +0 -4
  315. package/dist/gdshader-DRsZz2Lo.js +0 -4
  316. package/dist/glsl-Bpd55IJK.js +0 -5
  317. package/dist/go-BZbX8CmG.js +0 -4
  318. package/dist/graphql-C3W9lZa9.js +0 -8
  319. package/dist/haml-0dNTXdjh.js +0 -6
  320. package/dist/haxe-D67WIBdi.js +0 -4
  321. package/dist/hlsl-A_Yq2Muj.js +0 -4
  322. package/dist/html-C6ObPTU5.js +0 -6
  323. package/dist/java-BFakZb2S.js +0 -4
  324. package/dist/javascript-B8ZNE_3R.js +0 -4
  325. package/dist/json-CVwA-VKM.js +0 -4
  326. package/dist/jsx-TsEBgZMR.js +0 -4
  327. package/dist/less-R7I1oHvn.js +0 -4
  328. package/dist/lua-CdOJTa1m.js +0 -5
  329. package/dist/markdown-Czm489_C.js +0 -4
  330. package/dist/mermaid.core-D5NqLRbX.js +0 -31
  331. package/dist/php-B2RrCM5T.js +0 -11
  332. package/dist/postcss-CK8yd697.js +0 -4
  333. package/dist/python-BAyuw8wl.js +0 -4
  334. package/dist/r-CMKGyVVD.js +0 -4
  335. package/dist/react-vega-BIDT9Ttp.js +0 -25
  336. package/dist/regexp-C-NGZx14.js +0 -4
  337. package/dist/ruby-DC1LiM9o.js +0 -22
  338. package/dist/scss-9LDy_1oh.js +0 -5
  339. package/dist/sdbl-Cauk10zS.js +0 -4
  340. package/dist/shellscript-DPV_oGnY.js +0 -4
  341. package/dist/sql-BuUisnb3.js +0 -4
  342. package/dist/stateDiagram-v2-UMBNRL4Z-DdAPrjTz.js +0 -39
  343. package/dist/stex-BPCIi6ix.js +0 -5
  344. package/dist/stylus-BzfQ5p6U.js +0 -4
  345. package/dist/tex-DKaqHjWi.js +0 -5
  346. package/dist/tsx-CAS2Oalp.js +0 -4
  347. package/dist/turtle-Dqog6asB.js +0 -4
  348. package/dist/typescript-DHHJAsKz.js +0 -4
  349. package/dist/vue-DiyvUvuo.js +0 -10
  350. package/dist/xml-wE_-A0vH.js +0 -5
  351. package/dist/yaml-5htSumZI.js +0 -4
  352. /package/dist/{ImageComparisonComponent-DTO3nRq-.js → ImageComparisonComponent-CXBJ7S4z.js} +0 -0
  353. /package/dist/{abap-Cnc1m8d-.js → abap-I2cGjSH1.js} +0 -0
  354. /package/dist/{actionscript-3-g8zBgLKw.js → actionscript-3-DL1yGs6S.js} +0 -0
  355. /package/dist/{ada-MlSLvfsc.js → ada-BkGUMHAC.js} +0 -0
  356. /package/dist/{andromeeda-CkQePh6_.js → andromeeda-BWSHGuDt.js} +0 -0
  357. /package/dist/{apache-Cp-BBvQI.js → apache-DRnLyMnR.js} +0 -0
  358. /package/dist/{apex-CID9_iW1.js → apex-CA0TS4zn.js} +0 -0
  359. /package/dist/{applescript-Bv6vEFim.js → applescript-B8vB3y-q.js} +0 -0
  360. /package/dist/{ara-l5FvBxcT.js → ara-C0et56O5.js} +0 -0
  361. /package/dist/{array-lX94FrxB.js → array-vD2Vw0bk.js} +0 -0
  362. /package/dist/{asciidoc-BpLzRCLD.js → asciidoc-a6FHzc0d.js} +0 -0
  363. /package/dist/{asm-CxMfzk9G.js → asm-3DPfbryP.js} +0 -0
  364. /package/dist/{asterisk-Cbdk9I7-.js → asterisk-CbqErmo8.js} +0 -0
  365. /package/dist/{aurora-x-BmJfZyvk.js → aurora-x-Cq0GoPAm.js} +0 -0
  366. /package/dist/{awk-DZbdMF01.js → awk-GgrsjT7w.js} +0 -0
  367. /package/dist/{ayu-dark-Ce21p_3j.js → ayu-dark-BOgp0yX0.js} +0 -0
  368. /package/dist/{ballerina-6WMbs5Nh.js → ballerina-DErPOQth.js} +0 -0
  369. /package/dist/{bat-D70SunD8.js → bat-CkhnPpIS.js} +0 -0
  370. /package/dist/{beancount-DtkuCj7H.js → beancount-Rkl6N3Po.js} +0 -0
  371. /package/dist/{berry-DbfHEJGk.js → berry-C0cFa9Eb.js} +0 -0
  372. /package/dist/{bibtex-Cl9qlt9d.js → bibtex-PErECouH.js} +0 -0
  373. /package/dist/{bicep-0zpjixSE.js → bicep-B9tJFYg8.js} +0 -0
  374. /package/dist/{c-0VtUNZe8.js → c-xZK3SMJX.js} +0 -0
  375. /package/dist/{cadence-D2-Gq0t7.js → cadence-D2lNr2F0.js} +0 -0
  376. /package/dist/{catppuccin-frappe-DFz6L_QP.js → catppuccin-frappe-CEY1tx7K.js} +0 -0
  377. /package/dist/{catppuccin-latte-DSTm5iMg.js → catppuccin-latte-BjeOZATb.js} +0 -0
  378. /package/dist/{catppuccin-macchiato-D5cPlFDN.js → catppuccin-macchiato-HTrdL1Py.js} +0 -0
  379. /package/dist/{catppuccin-mocha-BBVxciDI.js → catppuccin-mocha-DaNBfKBN.js} +0 -0
  380. /package/dist/{chunk-57QY23SG-B6p-8LKm.js → chunk-57QY23SG-CtPsoWDn.js} +0 -0
  381. /package/dist/{clarity-CTtLMvQr.js → clarity-Di3YnyD4.js} +0 -0
  382. /package/dist/{click-outside-container-CR-VHaIe.js → click-outside-container-DnKND-Y5.js} +0 -0
  383. /package/dist/{clojure-CQ_s11PN.js → clojure-BaI1cLwf.js} +0 -0
  384. /package/dist/{cmake-DF99YgK0.js → cmake-Ct5KlIlx.js} +0 -0
  385. /package/dist/{codeowners-CRbICvXw.js → codeowners-B47SmYv4.js} +0 -0
  386. /package/dist/{codeql-DzUBsQZ9.js → codeql-C-RyBs2A.js} +0 -0
  387. /package/dist/{colors-C2w3uhVQ.js → colors-c_1kHhMM.js} +0 -0
  388. /package/dist/{common-keywords-D7noiVjl.js → common-keywords-qG52oQhe.js} +0 -0
  389. /package/dist/{common-lisp-CkedN1Bk.js → common-lisp-BEkqGRVt.js} +0 -0
  390. /package/dist/{coq-B7OBnzDw.js → coq-BMELwi0x.js} +0 -0
  391. /package/dist/{csharp-nXluFhrZ.js → csharp-D8kGQl5L.js} +0 -0
  392. /package/dist/{css-CPr1yM7G.js → css-D91D9ZFJ.js} +0 -0
  393. /package/dist/{csv-BTyvW9Dm.js → csv-DsiEeqZB.js} +0 -0
  394. /package/dist/{cue-CtcusocM.js → cue-Bd4pPCrb.js} +0 -0
  395. /package/dist/{cypher-BCo9_Gxf.js → cypher-CY6X1_fR.js} +0 -0
  396. /package/dist/{cytoscape.esm-CeO110wc.js → cytoscape.esm-D3qnLru1.js} +0 -0
  397. /package/dist/{d-qe1Yx8Pk.js → d-Dq3ZvYXH.js} +0 -0
  398. /package/dist/{dark-plus-COhL9N0K.js → dark-plus-DAkssByr.js} +0 -0
  399. /package/dist/{dart-C-zwBpkD.js → dart-CRwsUVcK.js} +0 -0
  400. /package/dist/{dax-9HVn3jKI.js → dax-yCcjIsFY.js} +0 -0
  401. /package/dist/{desktop-DcOWBslk.js → desktop-F3trsLZp.js} +0 -0
  402. /package/dist/{diff-0HrJYevs.js → diff-oSoYkmE6.js} +0 -0
  403. /package/dist/{dist-Ck_uei4a.js → dist-BEBl1fVc.js} +0 -0
  404. /package/dist/{dist-BOoOMWpw.js → dist-L1A29jng.js} +0 -0
  405. /package/dist/{dist-CFOn9U6a.js → dist-RsSoJ-Ow.js} +0 -0
  406. /package/dist/{dist-BLj2WRAk.js → dist-WgdRzo73.js} +0 -0
  407. /package/dist/{dist-Dndqm_ya.js → dist-_HymStvo.js} +0 -0
  408. /package/dist/{dist-B9BklWGT.js → dist-zlCh7zB9.js} +0 -0
  409. /package/dist/{docker-oHtI3hEB.js → docker-CzW3fUnV.js} +0 -0
  410. /package/dist/{dockerfile-DSCH583m.js → dockerfile-TsgC6Bmm.js} +0 -0
  411. /package/dist/{dotenv-sY_xnKYe.js → dotenv-C5RAv6mV.js} +0 -0
  412. /package/dist/{dracula-Bh9RLqOx.js → dracula-0J2lfdjD.js} +0 -0
  413. /package/dist/{dracula-soft-Cvp6b01Z.js → dracula-soft-CZX9ZgRW.js} +0 -0
  414. /package/dist/{dream-maker-6snTsD3J.js → dream-maker-D668Dv7O.js} +0 -0
  415. /package/dist/{duckdb-keywords-BCq77yXm.js → duckdb-keywords-DHIKlX_6.js} +0 -0
  416. /package/dist/{ebnf-BnX_o_Yq.js → ebnf-spWsoNeW.js} +0 -0
  417. /package/dist/{emacs-lisp-C6oq3DLk.js → emacs-lisp-9r6Oy_vR.js} +0 -0
  418. /package/dist/{everforest-dark-BYBypIqM.js → everforest-dark-BV3p6ZTT.js} +0 -0
  419. /package/dist/{everforest-light-D4mfI1FM.js → everforest-light-D4viDjQH.js} +0 -0
  420. /package/dist/{fcl-DDKjgNry.js → fcl-DOHQxani.js} +0 -0
  421. /package/dist/{fennel-C4o5c4mv.js → fennel-DdgItcQL.js} +0 -0
  422. /package/dist/{fish-BD9AkN7o.js → fish-Dah-0_yV.js} +0 -0
  423. /package/dist/{fluent-eCvhADRq.js → fluent-Dkmhuwpv.js} +0 -0
  424. /package/dist/{fortran-free-form-CuTQJQMN.js → fortran-free-form-DNLybXh-.js} +0 -0
  425. /package/dist/{gdscript-B40Spm2S.js → gdscript-DtYBhJ1b.js} +0 -0
  426. /package/dist/{gdshader-BZSmNWVa.js → gdshader-BV2VMgVk.js} +0 -0
  427. /package/dist/{genie-Cy_D8EWg.js → genie-BFMUrkvN.js} +0 -0
  428. /package/dist/{gherkin-ct-w1STV.js → gherkin-DppeDWDv.js} +0 -0
  429. /package/dist/{github-dark-CbIY86Wd.js → github-dark-D29L3HCC.js} +0 -0
  430. /package/dist/{github-dark-default-BlPRzuGs.js → github-dark-default-n3il8rgM.js} +0 -0
  431. /package/dist/{github-dark-dimmed-CwyHPTp3.js → github-dark-dimmed-oz4y0Wki.js} +0 -0
  432. /package/dist/{github-dark-high-contrast-Ch3E28Ga.js → github-dark-high-contrast-By7F7Fv0.js} +0 -0
  433. /package/dist/{github-light-BM3RayZ2.js → github-light-CWUlQb3u.js} +0 -0
  434. /package/dist/{github-light-default-BWhIdJf6.js → github-light-default-BffED7Ak.js} +0 -0
  435. /package/dist/{github-light-high-contrast-CKsJGAYi.js → github-light-high-contrast-Pu6OZUhP.js} +0 -0
  436. /package/dist/{gleam-Cwu_dIV7.js → gleam-BUcDYi_k.js} +0 -0
  437. /package/dist/{gnuplot-W2uzVV04.js → gnuplot-C1MgslgQ.js} +0 -0
  438. /package/dist/{go-C0N7iCwo.js → go-CYZiZRxy.js} +0 -0
  439. /package/dist/{groovy-BCFsp4zc.js → groovy-ClTIQGUH.js} +0 -0
  440. /package/dist/{gruvbox-dark-hard-DMFH1kAD.js → gruvbox-dark-hard-Bp86g2V_.js} +0 -0
  441. /package/dist/{gruvbox-dark-medium-DiHZEQva.js → gruvbox-dark-medium-BK2iIEfy.js} +0 -0
  442. /package/dist/{gruvbox-dark-soft-De9URWso.js → gruvbox-dark-soft-B_0xgXvI.js} +0 -0
  443. /package/dist/{gruvbox-light-hard-DzokvGK_.js → gruvbox-light-hard-DBlpi77o.js} +0 -0
  444. /package/dist/{gruvbox-light-medium-C4psEnS5.js → gruvbox-light-medium-CAccdTaF.js} +0 -0
  445. /package/dist/{gruvbox-light-soft-DL0f_6un.js → gruvbox-light-soft-DcO-EcR5.js} +0 -0
  446. /package/dist/{haskell-CDLvQWXZ.js → haskell-A1vUYtej.js} +0 -0
  447. /package/dist/{haxe-CLjmCvGB.js → haxe-DnHFv-TV.js} +0 -0
  448. /package/dist/{hcl-COL_PBAE.js → hcl-CU6j-Xhf.js} +0 -0
  449. /package/dist/{hjson-DkR4GFDO.js → hjson-ClOjKSoB.js} +0 -0
  450. /package/dist/{hlsl-BJKnqnDQ.js → hlsl-Q52_rKUP.js} +0 -0
  451. /package/dist/{houston-DYwZabvW.js → houston-DGG5Ln2h.js} +0 -0
  452. /package/dist/{http-2MVb-dsB.js → http-BgHOhKz2.js} +0 -0
  453. /package/dist/{hy-OsbjMwY0.js → hy-Bja9Numd.js} +0 -0
  454. /package/dist/{imba-Ddkaio98.js → imba-HOr9EX5j.js} +0 -0
  455. /package/dist/{ini-CNrkD-OZ.js → ini-EvmYJ-83.js} +0 -0
  456. /package/dist/{init-BU4YGOOg.js → init-BsH2JjGd.js} +0 -0
  457. /package/dist/{java-Ci6qXyg1.js → java-91iGU5ap.js} +0 -0
  458. /package/dist/{javascript-URuDoMWW.js → javascript-CPeJGbMe.js} +0 -0
  459. /package/dist/{json-DX7TV6Gi.js → json-N0VDmGwx.js} +0 -0
  460. /package/dist/{json5-Djp3uvi3.js → json5-BC1TPZZb.js} +0 -0
  461. /package/dist/{jsonc-XlYTIqzR.js → jsonc-B88-mC9I.js} +0 -0
  462. /package/dist/{jsonl-GwfHzMab.js → jsonl-CXu8ax4T.js} +0 -0
  463. /package/dist/{jsonnet-CPv7P6JN.js → jsonnet-0HtPQpiV.js} +0 -0
  464. /package/dist/{jssm-DdbAawAp.js → jssm-Bk3koTsK.js} +0 -0
  465. /package/dist/{jsx-DkGuBjr4.js → jsx-Cbdt0xgS.js} +0 -0
  466. /package/dist/{kanagawa-dragon-Vs6U6z1S.js → kanagawa-dragon-6wkRCL1O.js} +0 -0
  467. /package/dist/{kanagawa-lotus-Buvs3lt0.js → kanagawa-lotus-21R5pwns.js} +0 -0
  468. /package/dist/{kanagawa-wave-Bj2TElAo.js → kanagawa-wave-DvIMpnk3.js} +0 -0
  469. /package/dist/{katex-DHhoxnpM.js → katex-Cymo3Ugt.js} +0 -0
  470. /package/dist/{kotlin-Cpc_0A7a.js → kotlin-Brxn_vmg.js} +0 -0
  471. /package/dist/{kusto-Co9wVBCz.js → kusto-CLSwwyw9.js} +0 -0
  472. /package/dist/{laserwave-Ca61-FAH.js → laserwave-D2HyGZu4.js} +0 -0
  473. /package/dist/{lean-C0Aa7Fsj.js → lean-C7cjnnxn.js} +0 -0
  474. /package/dist/{less-_PXFbiQM.js → less-Db3q8KJ4.js} +0 -0
  475. /package/dist/{light-plus-5ex0bkO5.js → light-plus-C2C7fw4Z.js} +0 -0
  476. /package/dist/{llvm-BbKHoWwP.js → llvm-DAIyCtJL.js} +0 -0
  477. /package/dist/{log-CAfpKA3d.js → log-vTaTH8PJ.js} +0 -0
  478. /package/dist/{logo-_JZv2_m7.js → logo-D9tY6FNo.js} +0 -0
  479. /package/dist/{luau-By4kXsmQ.js → luau-IjR5-Ywl.js} +0 -0
  480. /package/dist/{main-BeKMoTBP.js → main-CRpnHr48.js} +0 -0
  481. /package/dist/{make-BRzozWYB.js → make-Cu-cnuA_.js} +0 -0
  482. /package/dist/{markdown-DBlXv3d9.js → markdown-C5F3cvct.js} +0 -0
  483. /package/dist/{marked.esm-CqJtK50L.js → marked.esm-DpOvkPbZ.js} +0 -0
  484. /package/dist/{material-theme-UdvytYzK.js → material-theme-DC62_X77.js} +0 -0
  485. /package/dist/{material-theme-darker-ifWxjE_M.js → material-theme-darker-ZdvrV-zE.js} +0 -0
  486. /package/dist/{material-theme-lighter-BJMt_hpe.js → material-theme-lighter-CjF6eqam.js} +0 -0
  487. /package/dist/{material-theme-ocean-DBLAtuvq.js → material-theme-ocean-B1OEP8g-.js} +0 -0
  488. /package/dist/{material-theme-palenight-D_bLdV4c.js → material-theme-palenight-DG7XKA0s.js} +0 -0
  489. /package/dist/{math-B9kWnSVt.js → math-kvEWD7RZ.js} +0 -0
  490. /package/dist/{matlab-SZvC4TdD.js → matlab-Bkgl6cmi.js} +0 -0
  491. /package/dist/{mdx-FGsuIggU.js → mdx-B3dxoxO_.js} +0 -0
  492. /package/dist/{mermaid-Bq_9A0K_.js → mermaid-Vk73zc_P.js} +0 -0
  493. /package/dist/{min-dark-CXAX-ZXK.js → min-dark-BXnwqHsA.js} +0 -0
  494. /package/dist/{min-light-BCnp1thB.js → min-light-t8HWsGPD.js} +0 -0
  495. /package/dist/{mipsasm-B5qmQK6W.js → mipsasm-DM3DsUwR.js} +0 -0
  496. /package/dist/{mojo-GIDM7_y7.js → mojo-CgJHtiXY.js} +0 -0
  497. /package/dist/{monokai-DL7jaPcf.js → monokai-CRI7M-ed.js} +0 -0
  498. /package/dist/{move-DRJvkv3E.js → move-DQHQ0ily.js} +0 -0
  499. /package/dist/{narrat-v6fb47Is.js → narrat-UVO3rS1B.js} +0 -0
  500. /package/dist/{nextflow-C602gAKa.js → nextflow-DrtHoX7E.js} +0 -0
  501. /package/dist/{nginx-xAcu9XCN.js → nginx-DJ7UgEOR.js} +0 -0
  502. /package/dist/{night-owl-Q-U_lEu6.js → night-owl-Ci5d2mya.js} +0 -0
  503. /package/dist/{nix-BRjH373I.js → nix-Cgk0qZB-.js} +0 -0
  504. /package/dist/{nord-CRIAyay1.js → nord-D3dA8PCc.js} +0 -0
  505. /package/dist/{nushell-5Ddvrppp.js → nushell-smo4Ehcx.js} +0 -0
  506. /package/dist/{objective-c-zrea_Ajz.js → objective-c-CVuojEvS.js} +0 -0
  507. /package/dist/{objective-cpp-BMgGRJTH.js → objective-cpp-Bpp59CkK.js} +0 -0
  508. /package/dist/{ocaml-Cc5CTR8t.js → ocaml-DYQwODYU.js} +0 -0
  509. /package/dist/{one-dark-pro-cEF3x_tc.js → one-dark-pro-CdYrsWA6.js} +0 -0
  510. /package/dist/{one-light-B0buW1FQ.js → one-light-B0fXewxa.js} +0 -0
  511. /package/dist/{pascal-C5MhYtdx.js → pascal-G_r9auPk.js} +0 -0
  512. /package/dist/{path-B-wCTTNY.js → path-DIzMdTua.js} +0 -0
  513. /package/dist/{plastic-4xY83A97.js → plastic-CC7C-r0m.js} +0 -0
  514. /package/dist/{plsql-DiS5vMuw.js → plsql-DmZBDDMQ.js} +0 -0
  515. /package/dist/{po-CE5EllyY.js → po-Bdl0SmZa.js} +0 -0
  516. /package/dist/{poimandres-C02cLu8D.js → poimandres-BPoRyzO_.js} +0 -0
  517. /package/dist/{polar-NxJPG_A1.js → polar-DdEuU550.js} +0 -0
  518. /package/dist/{postcss-BKFdDTSc.js → postcss-DgtXUb_w.js} +0 -0
  519. /package/dist/{powerquery-ClOwEHrw.js → powerquery-D5rcV1b7.js} +0 -0
  520. /package/dist/{powershell-DtnsETbd.js → powershell-CreFd35r.js} +0 -0
  521. /package/dist/{prisma-DQRqqd02.js → prisma-BSSS_9KD.js} +0 -0
  522. /package/dist/{prolog-BXwR1iEr.js → prolog-Cxq7ex3-.js} +0 -0
  523. /package/dist/{proto-DbdCTNJQ.js → proto-Di89JUpw.js} +0 -0
  524. /package/dist/{puppet-C0fmEeZ8.js → puppet-D-8yt0A2.js} +0 -0
  525. /package/dist/{purescript-DCzClV2L.js → purescript-Dsyys8lw.js} +0 -0
  526. /package/dist/{python-C9XsBnIS.js → python-DyJn0gY6.js} +0 -0
  527. /package/dist/{qmldir-BgPLvM_B.js → qmldir-Djlda7Cs.js} +0 -0
  528. /package/dist/{qss-DH_QKtyV.js → qss-DtDj95Ib.js} +0 -0
  529. /package/dist/{r-CE7tet3U.js → r-9vHvMbjq.js} +0 -0
  530. /package/dist/{racket-BXFuJ8S4.js → racket-BQnOONmJ.js} +0 -0
  531. /package/dist/{raku-BV2f5Bfp.js → raku-DZArQH1C.js} +0 -0
  532. /package/dist/{react-plotly-BSDG5040.js → react-plotly-B8bzf42j.js} +0 -0
  533. /package/dist/{red-NReit8D_.js → red-DdIrZaxO.js} +0 -0
  534. /package/dist/{reg-y78MnffL.js → reg-CM_FOY35.js} +0 -0
  535. /package/dist/{regexp-BkaqnlX1.js → regexp-Dh_KbmYB.js} +0 -0
  536. /package/dist/{rel-ChUSBGxs.js → rel-Cf8vFh7G.js} +0 -0
  537. /package/dist/{riscv-Cw3bJM3f.js → riscv-DFLesDmH.js} +0 -0
  538. /package/dist/{rose-pine-C_LOz2fx.js → rose-pine-C6TQipgc.js} +0 -0
  539. /package/dist/{rose-pine-dawn-DAyopyJp.js → rose-pine-dawn-DUw8_6c0.js} +0 -0
  540. /package/dist/{rose-pine-moon-D65s7ycF.js → rose-pine-moon-5rpZhuOi.js} +0 -0
  541. /package/dist/{rust-CNYdgIe2.js → rust-CLaTh4j5.js} +0 -0
  542. /package/dist/{sass-CTLsc-He.js → sass-DXaowKfb.js} +0 -0
  543. /package/dist/{scala-DAvnmlLT.js → scala-BwYNCkHH.js} +0 -0
  544. /package/dist/{scheme-BQ8akAiY.js → scheme-Cwv1j_5J.js} +0 -0
  545. /package/dist/{sdbl-BqdEdxub.js → sdbl-ZWGgjiIv.js} +0 -0
  546. /package/dist/{shellscript-SX0nv4lc.js → shellscript-CHtXIYYk.js} +0 -0
  547. /package/dist/{slack-dark-DP48wn3J.js → slack-dark-CEL96wwz.js} +0 -0
  548. /package/dist/{slack-ochin-JvZjQMr4.js → slack-ochin-Ih8BUTjo.js} +0 -0
  549. /package/dist/{smalltalk-Cd_zoqRt.js → smalltalk-Bz_Wq6O1.js} +0 -0
  550. /package/dist/{snazzy-light-Dn5RlLOZ.js → snazzy-light-BtCbn8qt.js} +0 -0
  551. /package/dist/{solarized-dark-juR81_fw.js → solarized-dark-2ncbM9MD.js} +0 -0
  552. /package/dist/{solarized-light-U1mjAkaE.js → solarized-light-Bw0RlZC7.js} +0 -0
  553. /package/dist/{solidity-DfzZ5d-O.js → solidity-Dl1Szhqk.js} +0 -0
  554. /package/dist/{solr-CNZE5yrI.js → solr-Kwz1kGU1.js} +0 -0
  555. /package/dist/{splunk-K8fn70fG.js → splunk-D_aQa7Wj.js} +0 -0
  556. /package/dist/{spreadsheet-DQPJGjZQ.js → spreadsheet-D6FABxcn.js} +0 -0
  557. /package/dist/{sql-CAF6o9lq.js → sql-Bl2dBUIk.js} +0 -0
  558. /package/dist/{sql-DRtPaiem.js → sql-ZN4U_4B1.js} +0 -0
  559. /package/dist/{ssh-config-BXqbrXDi.js → ssh-config-BZDNWhA1.js} +0 -0
  560. /package/dist/{stex-D1sWhacG.js → stex-B5cVJDuZ.js} +0 -0
  561. /package/dist/{stylus-C_YQrfMD.js → stylus-ByL4A079.js} +0 -0
  562. /package/dist/{swift-Ceo6tYUp.js → swift-scoJKQVi.js} +0 -0
  563. /package/dist/{synthwave-84-CHXFapSW.js → synthwave-84-DKtuD_wy.js} +0 -0
  564. /package/dist/{system-verilog-D4CJAYbc.js → system-verilog-Bv-1IX35.js} +0 -0
  565. /package/dist/{systemd-CHq8PvwE.js → systemd-BzGxwp-W.js} +0 -0
  566. /package/dist/{talonscript-D6aZJv_Q.js → talonscript-BSbePVqO.js} +0 -0
  567. /package/dist/{tasl-BWmlUeU7.js → tasl-BA3aDFU3.js} +0 -0
  568. /package/dist/{tcl-C3YCHzLh.js → tcl-BAw9Lg69.js} +0 -0
  569. /package/dist/{terraform-y7dSvHa7.js → terraform-D50En-Co.js} +0 -0
  570. /package/dist/{tiddlywiki-DotFbxlj.js → tiddlywiki-Bl1_jWGY.js} +0 -0
  571. /package/dist/{tiki-cZC65BMY.js → tiki-BDy2Aqau.js} +0 -0
  572. /package/dist/{timer--XD4eQXe.js → timer-Dde4NBPL.js} +0 -0
  573. /package/dist/{tokyo-night-A0-IVocs.js → tokyo-night-DXO9qP_t.js} +0 -0
  574. /package/dist/{toml-OrfgdRYt.js → toml-Cubg1uUB.js} +0 -0
  575. /package/dist/{treemap-BjIqNFzX.js → treemap-BLQ6nYXt.js} +0 -0
  576. /package/dist/{tsv-B2Hf1H8S.js → tsv-vZzoqqJp.js} +0 -0
  577. /package/dist/{tsx-DGPbtVdN.js → tsx-LnCcyy2E.js} +0 -0
  578. /package/dist/{turtle-DsNtk6IM.js → turtle-CMwgyTdm.js} +0 -0
  579. /package/dist/{typescript-CCzz7yCV.js → typescript-B5rt_l9e.js} +0 -0
  580. /package/dist/{typespec-DUIO3iAy.js → typespec-CkLBOALm.js} +0 -0
  581. /package/dist/{typst-CzQn6sYd.js → typst-C-inGA8y.js} +0 -0
  582. /package/dist/{v-DDSEES9z.js → v-CFTQQNNR.js} +0 -0
  583. /package/dist/{vala-Cbu40xKX.js → vala-CEP8R4Sr.js} +0 -0
  584. /package/dist/{vb-DtlqoV5V.js → vb-LCy_gAYP.js} +0 -0
  585. /package/dist/{verilog-CCzhlD5Z.js → verilog-CjetHjeY.js} +0 -0
  586. /package/dist/{vesper-DJTKEjYY.js → vesper-C1ptU1oI.js} +0 -0
  587. /package/dist/{vhdl-DDdF26gx.js → vhdl-BwoGC9LM.js} +0 -0
  588. /package/dist/{viml-Csgqqvxa.js → viml-CydZIHfP.js} +0 -0
  589. /package/dist/{vitesse-black-B_9_MY9n.js → vitesse-black-C-p75DbZ.js} +0 -0
  590. /package/dist/{vitesse-dark-5oLbBBDP.js → vitesse-dark-Ai-v_ovz.js} +0 -0
  591. /package/dist/{vitesse-light-DY7aCeME.js → vitesse-light-DQ9NGEHC.js} +0 -0
  592. /package/dist/{vyper-CJCjsleu.js → vyper-BF3ELXiG.js} +0 -0
  593. /package/dist/{wasm-DtNse08w.js → wasm-OjKRvUGa.js} +0 -0
  594. /package/dist/{wasm-BSZ3My3r.js → wasm-sMdbPauS.js} +0 -0
  595. /package/dist/{wenyan-BvPQ-H9y.js → wenyan-jAkt3eQa.js} +0 -0
  596. /package/dist/{wgsl-B65N7iDC.js → wgsl-C164tHZL.js} +0 -0
  597. /package/dist/{wikitext-BIFkMlQo.js → wikitext-DVNWOcXh.js} +0 -0
  598. /package/dist/{wit-DP8045yv.js → wit-BiebwFst.js} +0 -0
  599. /package/dist/{wolfram-DHmulSSf.js → wolfram-Dej0TMYQ.js} +0 -0
  600. /package/dist/{yaml-BW6YUxU4.js → yaml-D1dcMKz3.js} +0 -0
  601. /package/dist/{zenscript-CkfsSip8.js → zenscript-DR8tpung.js} +0 -0
  602. /package/dist/{zig-DxQnpavN.js → zig-DqxNCCzt.js} +0 -0
  603. /package/src/components/{chat → markdown}/markdown-renderer.css +0 -0
  604. /package/src/components/{chat → markdown}/markdown-renderer.tsx +0 -0
@@ -1,6 +1,7 @@
1
1
  /* Copyright 2024 Marimo. All rights reserved. */
2
2
 
3
3
  import { useAtom } from "jotai";
4
+ import { atomWithStorage } from "jotai/utils";
4
5
  import {
5
6
  ArrowLeftIcon,
6
7
  BetweenHorizontalStartIcon,
@@ -12,6 +13,7 @@ import {
12
13
  DownloadIcon,
13
14
  Edit3Icon,
14
15
  ExternalLinkIcon,
16
+ EyeOffIcon,
15
17
  FilePlus2Icon,
16
18
  FolderPlusIcon,
17
19
  ListTreeIcon,
@@ -56,6 +58,7 @@ import { downloadBlob } from "@/utils/download";
56
58
  import { openNotebook } from "@/utils/links";
57
59
  import type { FilePath } from "@/utils/paths";
58
60
  import { fileSplit } from "@/utils/pathUtils";
61
+ import { jotaiJsonStorage } from "@/utils/storage/jotai";
59
62
  import marimoIcon from "../../../assets/icon-32x32.png";
60
63
  import { FileViewer } from "./file-viewer";
61
64
  import type { RequestingTree } from "./requesting-tree";
@@ -68,6 +71,15 @@ import {
68
71
  } from "./types";
69
72
  import { useFileExplorerUpload } from "./upload";
70
73
 
74
+ const hiddenFilesState = atomWithStorage(
75
+ "marimo:showHiddenFiles",
76
+ true,
77
+ jotaiJsonStorage,
78
+ {
79
+ getOnInit: true,
80
+ },
81
+ );
82
+
71
83
  const RequestingTreeContext = React.createContext<RequestingTree | null>(null);
72
84
 
73
85
  export const FileExplorer: React.FC<{
@@ -77,6 +89,9 @@ export const FileExplorer: React.FC<{
77
89
  const [tree] = useAtom(treeAtom);
78
90
  const [data, setData] = useState<FileInfo[]>([]);
79
91
  const [openFile, setOpenFile] = useState<FileInfo | null>(null);
92
+ const [showHiddenFiles, setShowHiddenFiles] =
93
+ useAtom<boolean>(hiddenFilesState);
94
+
80
95
  const { openPrompt } = useImperativeModal();
81
96
  // Keep external state to remember which folders are open
82
97
  // when this component is unmounted
@@ -87,6 +102,11 @@ export const FileExplorer: React.FC<{
87
102
  tree.refreshAll(Object.keys(openState).filter((id) => openState[id]));
88
103
  });
89
104
 
105
+ const handleHiddenFilesToggle = useEvent(() => {
106
+ const newValue = !showHiddenFiles;
107
+ setShowHiddenFiles(newValue);
108
+ });
109
+
90
110
  const handleCreateFolder = useEvent(async () => {
91
111
  openPrompt({
92
112
  title: "Folder name",
@@ -110,6 +130,11 @@ export const FileExplorer: React.FC<{
110
130
  setOpenState({});
111
131
  });
112
132
 
133
+ const visibleData = React.useMemo(
134
+ () => filterHiddenTree(data, showHiddenFiles),
135
+ [data, showHiddenFiles],
136
+ );
137
+
113
138
  if (isPending) {
114
139
  return <Spinner size="medium" centered={true} />;
115
140
  }
@@ -152,6 +177,7 @@ export const FileExplorer: React.FC<{
152
177
  <>
153
178
  <Toolbar
154
179
  onRefresh={handleRefresh}
180
+ onHidden={handleHiddenFilesToggle}
155
181
  onCreateFile={handleCreateFile}
156
182
  onCreateFolder={handleCreateFolder}
157
183
  onCollapseAll={handleCollapseAll}
@@ -163,7 +189,7 @@ export const FileExplorer: React.FC<{
163
189
  ref={treeRef}
164
190
  height={height - 33}
165
191
  className="h-full"
166
- data={data}
192
+ data={visibleData}
167
193
  initialOpenState={openState}
168
194
  openByDefault={false}
169
195
  // Hide the drop cursor
@@ -215,6 +241,7 @@ const INDENT_STEP = 15;
215
241
 
216
242
  interface ToolbarProps {
217
243
  onRefresh: () => void;
244
+ onHidden: () => void;
218
245
  onCreateFile: () => void;
219
246
  onCreateFolder: () => void;
220
247
  onCollapseAll: () => void;
@@ -223,6 +250,7 @@ interface ToolbarProps {
223
250
 
224
251
  const Toolbar = ({
225
252
  onRefresh,
253
+ onHidden,
226
254
  onCreateFile,
227
255
  onCreateFolder,
228
256
  onCollapseAll,
@@ -277,6 +305,16 @@ const Toolbar = ({
277
305
  <RefreshCcwIcon size={16} />
278
306
  </Button>
279
307
  </Tooltip>
308
+ <Tooltip content="Toggle hidden files">
309
+ <Button
310
+ data-testid="file-explorer-hidden-files-button"
311
+ onClick={onHidden}
312
+ variant="text"
313
+ size="xs"
314
+ >
315
+ <EyeOffIcon size={16} />
316
+ </Button>
317
+ </Tooltip>
280
318
  <Tooltip content="Collapse all folders">
281
319
  <Button
282
320
  data-testid="file-explorer-collapse-button"
@@ -677,3 +715,35 @@ function openMarimoNotebook(
677
715
  event.preventDefault();
678
716
  openNotebook(path);
679
717
  }
718
+
719
+ export function filterHiddenTree(
720
+ list: FileInfo[],
721
+ showHidden: boolean,
722
+ ): FileInfo[] {
723
+ if (showHidden) {
724
+ return list;
725
+ }
726
+
727
+ const out: FileInfo[] = [];
728
+ for (const item of list) {
729
+ if (isDirectoryOrFileHidden(item.name)) {
730
+ continue;
731
+ }
732
+ let next = item;
733
+ if (item.children) {
734
+ const kids = filterHiddenTree(item.children, showHidden);
735
+ if (kids !== item.children) {
736
+ next = { ...item, children: kids };
737
+ }
738
+ }
739
+ out.push(next);
740
+ }
741
+ return out;
742
+ }
743
+
744
+ export function isDirectoryOrFileHidden(filename: string): boolean {
745
+ if (filename.startsWith(".")) {
746
+ return true;
747
+ }
748
+ return false;
749
+ }
@@ -489,7 +489,7 @@ const EditableCellComponent = ({
489
489
 
490
490
  const outputArea = hasOutput && (
491
491
  <div className="relative" onDoubleClick={showHiddenCodeIfMarkdown}>
492
- <div className="absolute top-5 -left-8 z-10 print:hidden">
492
+ <div className="absolute top-5 -left-7 z-20 print:hidden">
493
493
  <CollapseToggle
494
494
  isCollapsed={isCollapsed}
495
495
  onClick={() => {
@@ -580,8 +580,13 @@ const EditableCellComponent = ({
580
580
  ref={cellContainerRef}
581
581
  {...cellDomProps(cellId, cellData.name)}
582
582
  >
583
+ <CellLeftSideActions cellId={cellId} actions={actions} />
583
584
  {cellOutput === "above" && outputArea}
584
- <div className={cn("tray")} data-hidden={isMarkdownCodeHidden}>
585
+ <div
586
+ className={cn("tray")}
587
+ data-has-output-above={hasOutputAbove}
588
+ data-hidden={isMarkdownCodeHidden}
589
+ >
585
590
  <StagedAICellBackground cellId={cellId} />
586
591
  <div className="absolute right-2 -top-4 z-10">
587
592
  <CellToolbar
@@ -598,17 +603,6 @@ const EditableCellComponent = ({
598
603
  onRun={runCell}
599
604
  />
600
605
  </div>
601
- <CellLeftSideActions
602
- cellId={cellId}
603
- className={cn(
604
- isMarkdownCodeHidden && hasOutputAbove && "-top-7",
605
- isMarkdownCodeHidden && hasOutputBelow && "-bottom-8",
606
- isMarkdownCodeHidden &&
607
- isCellButtonsInline &&
608
- "-left-[3.8rem]",
609
- )}
610
- actions={actions}
611
- />
612
606
  <CellEditor
613
607
  theme={theme}
614
608
  showPlaceholder={showPlaceholder}
@@ -836,25 +830,33 @@ const CellLeftSideActions = memo(
836
830
  );
837
831
 
838
832
  const isConnected = isAppConnected(connection.state);
833
+ const oneClickShortcut = "mod";
839
834
 
840
835
  return (
841
836
  <div
842
837
  className={cn(
843
- "absolute flex flex-col gap-[2px] justify-center h-full left-[-34px] z-20",
838
+ "absolute flex flex-col justify-center h-full left-[-26px] z-20 border-b-0!",
844
839
  className,
845
840
  )}
846
841
  >
847
- <CreateCellButton
848
- tooltipContent={renderShortcut("cell.createAbove")}
849
- connectionState={connection.state}
850
- onClick={isConnected ? createAbove : undefined}
851
- />
852
- <div className="flex-1" />
853
- <CreateCellButton
854
- tooltipContent={renderShortcut("cell.createBelow")}
855
- connectionState={connection.state}
856
- onClick={isConnected ? createBelow : undefined}
857
- />
842
+ <div className="-mt-1 min-h-7">
843
+ <CreateCellButton
844
+ tooltipContent={renderShortcut("cell.createAbove")}
845
+ connectionState={connection.state}
846
+ onClick={isConnected ? createAbove : undefined}
847
+ oneClickShortcut={oneClickShortcut}
848
+ />
849
+ </div>
850
+ <div className="flex-1 pointer-events-none w-3" />
851
+ {/* <div className="flex-1 pointer-events-none bg-border w-px mx-auto hover-action opacity-70" /> */}
852
+ <div className="-mb-2 min-h-7">
853
+ <CreateCellButton
854
+ tooltipContent={renderShortcut("cell.createBelow")}
855
+ connectionState={connection.state}
856
+ onClick={isConnected ? createBelow : undefined}
857
+ oneClickShortcut={oneClickShortcut}
858
+ />
859
+ </div>
858
860
  </div>
859
861
  );
860
862
  },
@@ -47,6 +47,14 @@ describe("TerminalBuffer", () => {
47
47
  `);
48
48
  });
49
49
 
50
+ test("control handles tab", () => {
51
+ const buffer = new TerminalBuffer();
52
+ buffer.writeChar("a");
53
+ buffer.control("\t");
54
+ buffer.writeChar("b");
55
+ expect(buffer.render()).toMatchInlineSnapshot(`"a b"`);
56
+ });
57
+
50
58
  test("control handles carriage return", () => {
51
59
  const buffer = new TerminalBuffer();
52
60
  buffer.writeChar("a");
@@ -69,7 +69,7 @@ export class TerminalBuffer {
69
69
  this.cursor.col += str.length;
70
70
  }
71
71
 
72
- /** Handle simple control characters (\n, \r). */
72
+ /** Handle simple control characters (\n, \r, \t). */
73
73
  control(ch: string) {
74
74
  switch (ch) {
75
75
  case "\n":
@@ -80,6 +80,9 @@ export class TerminalBuffer {
80
80
  case "\r":
81
81
  this.cursor.col = 0;
82
82
  break;
83
+ case "\t":
84
+ this.writeChar("\t");
85
+ break;
83
86
  }
84
87
  }
85
88
 
@@ -268,11 +271,11 @@ export class AnsiReducer {
268
271
  const ch = text[i];
269
272
 
270
273
  // Handle control characters
271
- if (ch === "\n" || ch === "\r") {
274
+ if (ch === "\n" || ch === "\r" || ch === "\t") {
272
275
  // Write accumulated text before the control character
273
276
  if (i > start) {
274
277
  const segment = text.slice(start, i);
275
- // Filter out characters below space (but we already have \n and \r handled)
278
+ // Filter out characters below space (but we already have \n, \r, \t handled)
276
279
  const filtered = this.filterControlChars(segment);
277
280
  if (filtered.length > 0) {
278
281
  this.buffer.writeString(filtered);
@@ -302,7 +305,7 @@ export class AnsiReducer {
302
305
  }
303
306
  }
304
307
 
305
- /** Filter out control characters below space (except \n and \r which are handled separately). */
308
+ /** Filter out control characters below space (except \n, \r, \t which are handled separately). */
306
309
  private filterControlChars(text: string): string {
307
310
  // Fast path: if no control chars, return as-is
308
311
  let hasControlChars = false;
@@ -249,6 +249,8 @@ export const GridLayoutRenderer: React.FC<Props> = ({
249
249
  </ReactGridLayout>
250
250
  );
251
251
 
252
+ const notInGrid = cells.filter((cell) => !inGridIds.has(cell.id));
253
+
252
254
  if (isReading) {
253
255
  if (layout.bordered) {
254
256
  grid = (
@@ -262,10 +264,32 @@ export const GridLayoutRenderer: React.FC<Props> = ({
262
264
  </div>
263
265
  );
264
266
  }
265
- return grid;
266
- }
267
267
 
268
- const notInGrid = cells.filter((cell) => !inGridIds.has(cell.id));
268
+ const sidebarCells = notInGrid.filter((cell) => isSidebarCell(cell));
269
+
270
+ return (
271
+ <>
272
+ {grid}
273
+ {/* Render sidebar outputs even if they are not in grid (hidden) */}
274
+ <div className="hidden">
275
+ {sidebarCells.map((cell) => {
276
+ return (
277
+ <GridCell
278
+ key={cell.id}
279
+ code={cell.code}
280
+ mode={mode}
281
+ cellId={cell.id}
282
+ output={cell.output}
283
+ status={cell.status}
284
+ isScrollable={false}
285
+ hidden={false}
286
+ />
287
+ );
288
+ })}
289
+ </div>
290
+ </>
291
+ );
292
+ }
269
293
 
270
294
  if (layout.bordered) {
271
295
  grid = (
@@ -641,6 +665,14 @@ const GridHoverActions: React.FC<GridHoverActionsProps> = ({
641
665
  );
642
666
  };
643
667
 
668
+ function isSidebarCell(cell: CellRuntimeState) {
669
+ // False-positives are ok here because we rendering these cells in a hidden div
670
+ return (
671
+ typeof cell.output?.data === "string" &&
672
+ cell.output.data.includes("marimo-sidebar")
673
+ );
674
+ }
675
+
644
676
  const SIDE_TO_ICON = {
645
677
  // We are only showing horizontal sides for now
646
678
  // top: AlignHorizontalSpaceAroundIcon,
@@ -195,10 +195,15 @@ const WorkspaceNotebooks: React.FC = () => {
195
195
  }
196
196
  >
197
197
  Workspace
198
- <RefreshCcwIcon
199
- className="w-4 h-4 ml-1 cursor-pointer opacity-70 hover:opacity-100"
198
+ <Button
199
+ variant="text"
200
+ size="icon"
201
+ className="w-4 h-4 ml-1 p-0 opacity-70 hover:opacity-100"
200
202
  onClick={() => refetch()}
201
- />
203
+ aria-label="Refresh workspace"
204
+ >
205
+ <RefreshCcwIcon className="w-4 h-4" />
206
+ </Button>
202
207
  {isFetching && <Spinner size="small" />}
203
208
  </Header>
204
209
  <div className="flex flex-col divide-y divide-(--slate-3) border rounded overflow-hidden max-h-192 overflow-y-auto shadow-sm bg-background">
@@ -7,7 +7,7 @@ const Table = React.forwardRef<
7
7
  HTMLTableElement,
8
8
  React.HTMLAttributes<HTMLTableElement>
9
9
  >(({ className, ...props }, ref) => (
10
- <div className="w-full overflow-auto flex-1">
10
+ <div className="w-full overflow-auto scrollbar-thin flex-1">
11
11
  <table
12
12
  ref={ref}
13
13
  className={cn("w-full caption-bottom text-sm", className)}
@@ -128,7 +128,7 @@ describe("EditNotebookTool", () => {
128
128
  {
129
129
  edit: {
130
130
  type: "update_cell",
131
- cellId: cellId1,
131
+ position: { type: "relative", cellId: cellId1 },
132
132
  code: newCode,
133
133
  },
134
134
  },
@@ -154,7 +154,7 @@ describe("EditNotebookTool", () => {
154
154
  {
155
155
  edit: {
156
156
  type: "update_cell",
157
- cellId: cellId1,
157
+ position: { type: "relative", cellId: cellId1 },
158
158
  code: "x = 3",
159
159
  },
160
160
  },
@@ -188,7 +188,7 @@ describe("EditNotebookTool", () => {
188
188
  {
189
189
  edit: {
190
190
  type: "update_cell",
191
- cellId: "nonexistent" as CellId,
191
+ position: { cellId: "nonexistent" as CellId },
192
192
  code: "x = 2",
193
193
  },
194
194
  },
@@ -201,7 +201,7 @@ describe("EditNotebookTool", () => {
201
201
  {
202
202
  edit: {
203
203
  type: "update_cell",
204
- cellId: "nonexistent" as CellId,
204
+ position: { cellId: "nonexistent" as CellId },
205
205
  code: "x = 2",
206
206
  },
207
207
  },
@@ -225,7 +225,7 @@ describe("EditNotebookTool", () => {
225
225
  {
226
226
  edit: {
227
227
  type: "update_cell",
228
- cellId: cellId1,
228
+ position: { type: "relative", cellId: cellId1 },
229
229
  code: "x = 2",
230
230
  },
231
231
  },
@@ -233,6 +233,51 @@ describe("EditNotebookTool", () => {
233
233
  ),
234
234
  ).rejects.toThrow("Cell editor not found");
235
235
  });
236
+
237
+ it("should throw error when cellId is missing for update_cell", async () => {
238
+ const notebook = MockNotebook.notebookState({
239
+ cellData: {
240
+ [cellId1]: { code: "x = 1" },
241
+ },
242
+ });
243
+ store.set(notebookAtom, notebook);
244
+
245
+ await expect(
246
+ tool.handler(
247
+ {
248
+ edit: {
249
+ type: "update_cell",
250
+ position: {},
251
+ code: "x = 2",
252
+ },
253
+ },
254
+ toolContext as never,
255
+ ),
256
+ ).rejects.toThrow("Cell ID is required for update_cell");
257
+ });
258
+
259
+ it("should throw error when code is missing for update_cell", async () => {
260
+ const editorView = createMockEditorView("x = 1");
261
+ const notebook = MockNotebook.notebookState({
262
+ cellData: {
263
+ [cellId1]: { code: "x = 1" },
264
+ },
265
+ });
266
+ notebook.cellHandles[cellId1] = { current: { editorView } } as never;
267
+ store.set(notebookAtom, notebook);
268
+
269
+ await expect(
270
+ tool.handler(
271
+ {
272
+ edit: {
273
+ type: "update_cell",
274
+ position: { cellId: cellId1 },
275
+ },
276
+ },
277
+ toolContext as never,
278
+ ),
279
+ ).rejects.toThrow("Code is required for update_cell");
280
+ });
236
281
  });
237
282
 
238
283
  describe("add_cell operation", () => {
@@ -404,6 +449,86 @@ describe("EditNotebookTool", () => {
404
449
  ),
405
450
  ).rejects.toThrow("Column index is out of range");
406
451
  });
452
+
453
+ it("should throw error when cellId is missing for add_cell with relative position", async () => {
454
+ const notebook = MockNotebook.notebookState({
455
+ cellData: {
456
+ [cellId1]: { code: "x = 1" },
457
+ },
458
+ });
459
+ store.set(notebookAtom, notebook);
460
+
461
+ await expect(
462
+ tool.handler(
463
+ {
464
+ edit: {
465
+ type: "add_cell",
466
+ position: {
467
+ type: "relative",
468
+ before: true,
469
+ },
470
+ code: "y = 2",
471
+ },
472
+ },
473
+ toolContext as never,
474
+ ),
475
+ ).rejects.toThrow(
476
+ "Cell ID is required for add_cell with relative position",
477
+ );
478
+ });
479
+
480
+ it("should throw error when before is missing for add_cell with relative position", async () => {
481
+ const notebook = MockNotebook.notebookState({
482
+ cellData: {
483
+ [cellId1]: { code: "x = 1" },
484
+ },
485
+ });
486
+ store.set(notebookAtom, notebook);
487
+
488
+ await expect(
489
+ tool.handler(
490
+ {
491
+ edit: {
492
+ type: "add_cell",
493
+ position: {
494
+ type: "relative",
495
+ cellId: cellId1,
496
+ },
497
+ code: "y = 2",
498
+ },
499
+ },
500
+ toolContext as never,
501
+ ),
502
+ ).rejects.toThrow(
503
+ "Before is required for add_cell with relative position",
504
+ );
505
+ });
506
+
507
+ it("should throw error when columnIndex is missing for add_cell with column_end position", async () => {
508
+ const notebook = MockNotebook.notebookState({
509
+ cellData: {
510
+ [cellId1]: { code: "x = 1" },
511
+ },
512
+ });
513
+ store.set(notebookAtom, notebook);
514
+
515
+ await expect(
516
+ tool.handler(
517
+ {
518
+ edit: {
519
+ type: "add_cell",
520
+ position: {
521
+ type: "column_end",
522
+ },
523
+ code: "y = 2",
524
+ },
525
+ },
526
+ toolContext as never,
527
+ ),
528
+ ).rejects.toThrow(
529
+ "Column index is required for add_cell with column_end position",
530
+ );
531
+ });
407
532
  });
408
533
 
409
534
  describe("delete_cell operation", () => {
@@ -423,7 +548,7 @@ describe("EditNotebookTool", () => {
423
548
  {
424
549
  edit: {
425
550
  type: "delete_cell",
426
- cellId: cellId1,
551
+ position: { cellId: cellId1 },
427
552
  },
428
553
  },
429
554
  toolContext as never,
@@ -453,7 +578,7 @@ describe("EditNotebookTool", () => {
453
578
  {
454
579
  edit: {
455
580
  type: "delete_cell",
456
- cellId: "nonexistent" as CellId,
581
+ position: { cellId: "nonexistent" as CellId },
457
582
  },
458
583
  },
459
584
  toolContext as never,
@@ -476,13 +601,34 @@ describe("EditNotebookTool", () => {
476
601
  {
477
602
  edit: {
478
603
  type: "delete_cell",
479
- cellId: cellId1,
604
+ position: { cellId: cellId1 },
480
605
  },
481
606
  },
482
607
  toolContext as never,
483
608
  ),
484
609
  ).rejects.toThrow("Cell editor not found");
485
610
  });
611
+
612
+ it("should throw error when cellId is missing for delete_cell", async () => {
613
+ const notebook = MockNotebook.notebookState({
614
+ cellData: {
615
+ [cellId1]: { code: "x = 1" },
616
+ },
617
+ });
618
+ store.set(notebookAtom, notebook);
619
+
620
+ await expect(
621
+ tool.handler(
622
+ {
623
+ edit: {
624
+ type: "delete_cell",
625
+ position: {},
626
+ },
627
+ },
628
+ toolContext as never,
629
+ ),
630
+ ).rejects.toThrow("Cell ID is required for delete_cell");
631
+ });
486
632
  });
487
633
 
488
634
  describe("validation", () => {
@@ -508,7 +654,7 @@ describe("EditNotebookTool", () => {
508
654
  {
509
655
  edit: {
510
656
  type: "update_cell",
511
- cellId: cellId1,
657
+ position: { cellId: cellId1 },
512
658
  code: "y = 1",
513
659
  },
514
660
  },
@@ -521,7 +667,7 @@ describe("EditNotebookTool", () => {
521
667
  {
522
668
  edit: {
523
669
  type: "update_cell",
524
- cellId: cellId3,
670
+ position: { cellId: cellId3 },
525
671
  code: "y = 3",
526
672
  },
527
673
  },