@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
@@ -91,6 +91,7 @@ interface DataTableProps<TData> extends Partial<DownloadActionProps> {
91
91
  showChartBuilder?: boolean;
92
92
  showPageSizeSelector?: boolean;
93
93
  showColumnExplorer?: boolean;
94
+ showRowExplorer?: boolean;
94
95
  togglePanel?: (panelType: PanelType) => void;
95
96
  isPanelOpen?: (panelType: PanelType) => boolean;
96
97
  }
@@ -133,6 +134,7 @@ const DataTableInternal = <TData,>({
133
134
  showChartBuilder,
134
135
  showPageSizeSelector,
135
136
  showColumnExplorer,
137
+ showRowExplorer,
136
138
  togglePanel,
137
139
  isPanelOpen,
138
140
  viewedRowIdx,
@@ -337,6 +339,7 @@ const DataTableInternal = <TData,>({
337
339
  showChartBuilder={showChartBuilder}
338
340
  showPageSizeSelector={showPageSizeSelector}
339
341
  showColumnExplorer={showColumnExplorer}
342
+ showRowExplorer={showRowExplorer}
340
343
  togglePanel={togglePanel}
341
344
  isPanelOpen={isPanelOpen}
342
345
  tableLoading={reloading}
@@ -12,7 +12,8 @@ import { useLocale } from "react-aria";
12
12
  import { logNever } from "@/utils/assertNever";
13
13
  import { copyToClipboard } from "@/utils/copy";
14
14
  import { downloadByURL } from "@/utils/download";
15
- import { jsonToTSV } from "@/utils/json/json-parser";
15
+ import { prettyError } from "@/utils/errors";
16
+ import { jsonParseWithSpecialChar, jsonToTSV } from "@/utils/json/json-parser";
16
17
  import { Button } from "../ui/button";
17
18
  import {
18
19
  DropdownMenu,
@@ -152,7 +153,17 @@ export const DownloadAs: React.FC<DownloadActionProps> = (props) => {
152
153
  {clipboardOptions.map((option) => (
153
154
  <DropdownMenuItem
154
155
  key={option.label}
155
- onSelect={() => handleClipboardCopy(option.format)}
156
+ onSelect={async () => {
157
+ try {
158
+ await handleClipboardCopy(option.format);
159
+ } catch (error) {
160
+ toast({
161
+ title: "Failed to copy to clipboard",
162
+ description: prettyError(error),
163
+ variant: "danger",
164
+ });
165
+ }
166
+ }}
156
167
  >
157
168
  <option.icon className="mo-dropdown-icon" />
158
169
  <div className="flex flex-col">
@@ -171,12 +182,9 @@ export const DownloadAs: React.FC<DownloadActionProps> = (props) => {
171
182
  };
172
183
 
173
184
  function fetchJson(url: string): Promise<Record<string, unknown>[]> {
174
- return fetch(url).then((res) => {
175
- if (!res.ok) {
176
- throw new Error(res.statusText);
177
- }
178
- return res.json();
179
- });
185
+ return fetchText(url).then(
186
+ jsonParseWithSpecialChar<Record<string, unknown>[]>,
187
+ );
180
188
  }
181
189
 
182
190
  function fetchText(url: string): Promise<string> {
@@ -18,6 +18,7 @@ import { useRef, useState } from "react";
18
18
  import { useLocale } from "react-aria";
19
19
  import { ColumnName } from "@/components/datasources/components";
20
20
  import { CopyClipboardIcon } from "@/components/icons/copy-icon";
21
+ import { Spinner } from "@/components/icons/spinner";
21
22
  import { KeyboardHotkeys } from "@/components/shortcuts/renderShortcut";
22
23
  import { Button } from "@/components/ui/button";
23
24
  import { Input } from "@/components/ui/input";
@@ -29,6 +30,7 @@ import {
29
30
  TableHeader,
30
31
  TableRow,
31
32
  } from "@/components/ui/table";
33
+ import { DelayMount } from "@/components/utils/delay-mount";
32
34
  import { useAsyncData } from "@/hooks/useAsyncData";
33
35
  import { useKeydownOnElement } from "@/hooks/useHotkey";
34
36
  import { Banner, ErrorBanner } from "@/plugins/impl/common/error-banner";
@@ -136,11 +138,9 @@ export const RowViewerPanel: React.FC<RowViewerPanelProps> = ({
136
138
 
137
139
  if (!rows) {
138
140
  return (
139
- <SimpleBanner
140
- kind="warn"
141
- Icon={AlertTriangle}
142
- message="No data available. Please report the issue."
143
- />
141
+ <DelayMount milliseconds={200}>
142
+ <Spinner size="medium" centered={true} />
143
+ </DelayMount>
144
144
  );
145
145
  }
146
146
 
@@ -1,6 +1,8 @@
1
1
  /* Copyright 2024 Marimo. All rights reserved. */
2
2
 
3
+ import { marked } from "marked";
3
4
  import { useState } from "react";
5
+ import { MarkdownRenderer } from "@/components/markdown/markdown-renderer";
4
6
  import {
5
7
  Popover,
6
8
  PopoverContent,
@@ -82,6 +84,47 @@ export function parseContent(text: string): ContentPart[] {
82
84
  });
83
85
  }
84
86
 
87
+ export function isMarkdown(text: string): boolean {
88
+ const tokens = marked.lexer(text);
89
+
90
+ const commonMarkdownIndicators = new Set([
91
+ "space",
92
+ "code",
93
+ "fences",
94
+ "heading",
95
+ "hr",
96
+ "link",
97
+ "blockquote",
98
+ "list",
99
+ "html",
100
+ "def",
101
+ "table",
102
+ "lheading",
103
+ "escape",
104
+ "tag",
105
+ "reflink",
106
+ "strong",
107
+ "codespan",
108
+ "url",
109
+ ]);
110
+
111
+ return tokens.some((token) => commonMarkdownIndicators.has(token.type));
112
+ }
113
+
114
+ // Wrapper component so that we call isMarkdown only on trigger
115
+ export const MarkdownUrlDetector = ({
116
+ content,
117
+ parts,
118
+ }: {
119
+ content: string;
120
+ parts: ContentPart[];
121
+ }) => {
122
+ if (isMarkdown(content)) {
123
+ return <MarkdownRenderer content={content} />;
124
+ }
125
+ return <UrlDetector parts={parts} />;
126
+ };
127
+
85
128
  export const UrlDetector = ({ parts }: { parts: ContentPart[] }) => {
86
129
  const markup = parts.map((part, idx) => {
87
130
  if (part.type === "url") {
@@ -66,11 +66,13 @@ function getFormatter(dialect: string): SqlCodeFormatter {
66
66
  `SELECT ${columnName === "*" ? "*" : `"${columnName}"`} FROM ${tableName} LIMIT 100`,
67
67
  };
68
68
  case "db2":
69
+ case "db2i":
69
70
  case "mysql":
70
71
  case "sqlite":
71
72
  case "mariadb":
72
73
  case "cassandra":
73
74
  case "noql":
75
+ case "awsathena":
74
76
  case "athena":
75
77
  case "hive":
76
78
  case "redshift":
@@ -79,6 +81,11 @@ function getFormatter(dialect: string): SqlCodeFormatter {
79
81
  case "mongodb":
80
82
  case "oracle":
81
83
  case "oracledb":
84
+ case "couchbase":
85
+ case "tidb":
86
+ case "spark":
87
+ case "trino":
88
+ case "singlestoredb":
82
89
  return defaultFormatter;
83
90
  default:
84
91
  logNever(dialect);
@@ -254,11 +254,14 @@ export const AiCompletionEditor: React.FC<Props> = ({
254
254
  };
255
255
 
256
256
  return (
257
- <div className={cn("flex flex-col w-full rounded-[inherit]", className)}>
257
+ <div
258
+ data-ai-input-open={showInput}
259
+ className={cn("flex flex-col w-full rounded-[inherit]", className)}
260
+ >
258
261
  <div
259
262
  className={cn(
260
- "flex items-center gap-2 border-b px-3 transition-all rounded-[inherit] rounded-b-none duration-300",
261
- showInput && "max-h-[400px] min-h-11 visible",
263
+ "flex items-center gap-2 px-3 transition-all rounded-[inherit] rounded-b-none duration-300",
264
+ showInput && "max-h-[400px] border-b min-h-11 visible",
262
265
  !showInput && "max-h-0 min-h-0 invisible",
263
266
  )}
264
267
  >
@@ -1,12 +1,14 @@
1
1
  /* Copyright 2024 Marimo. All rights reserved. */
2
2
  import { DatabaseIcon, DiamondPlusIcon, PlusIcon } from "lucide-react";
3
+ import { useState } from "react";
3
4
  import { Button } from "@/components/editor/inputs/Inputs";
5
+ import { MinimalHotkeys } from "@/components/shortcuts/renderShortcut";
4
6
  import {
5
- ContextMenu,
6
- ContextMenuContent,
7
- ContextMenuItem,
8
- ContextMenuTrigger,
9
- } from "@/components/ui/context-menu";
7
+ DropdownMenu,
8
+ DropdownMenuContent,
9
+ DropdownMenuItem,
10
+ DropdownMenuTrigger,
11
+ } from "@/components/ui/dropdown-menu";
10
12
  import { maybeAddMarimoImport } from "@/core/cells/add-missing-import";
11
13
  import { useCellActions } from "@/core/cells/cells";
12
14
  import { LanguageAdapters } from "@/core/codemirror/language/LanguageAdapters";
@@ -24,11 +26,17 @@ export const CreateCellButton = ({
24
26
  connectionState,
25
27
  onClick,
26
28
  tooltipContent,
29
+ oneClickShortcut,
27
30
  }: {
28
31
  connectionState: WebSocketState;
29
32
  tooltipContent: React.ReactNode;
30
33
  onClick: ((opts: { code: string; hideCode?: boolean }) => void) | undefined;
34
+ oneClickShortcut: "shift" | "mod";
31
35
  }) => {
36
+ const { createNewCell, addSetupCellIfDoesntExist } = useCellActions();
37
+ const shortcut = `${oneClickShortcut}-Click`;
38
+ const [justOpened, setJustOpened] = useState(false);
39
+
32
40
  const baseTooltipContent =
33
41
  getConnectionTooltip(connectionState) || tooltipContent;
34
42
  const finalTooltipContent = isAppInteractionDisabled(connectionState) ? (
@@ -37,107 +45,109 @@ export const CreateCellButton = ({
37
45
  <div className="flex flex-col gap-4">
38
46
  <div>{baseTooltipContent}</div>
39
47
  <div className="text-xs text-muted-foreground font-medium pt-1 -mt-2 border-t border-border">
40
- Right-click for cell types
48
+ {<MinimalHotkeys shortcut={shortcut} className="inline" />}{" "}
49
+ <span>to auto insert a cell</span>
41
50
  </div>
42
51
  </div>
43
52
  );
44
53
 
54
+ const addPythonCell = () => {
55
+ onClick?.({ code: "" });
56
+ };
57
+
58
+ // NB: When adding the marimo import for markdown and SQL, we run it
59
+ // automatically regardless of whether autoinstantiate or lazy execution is
60
+ // enabled; the user experience is confusing otherwise (how does the user
61
+ // know they need to run import marimo as mo. first?).
62
+ const addMarkdownCell = () => {
63
+ maybeAddMarimoImport({ autoInstantiate: true, createNewCell });
64
+ onClick?.({
65
+ code: LanguageAdapters.markdown.defaultCode,
66
+ hideCode: true,
67
+ });
68
+ };
69
+
70
+ const addSQLCell = () => {
71
+ maybeAddMarimoImport({ autoInstantiate: true, createNewCell });
72
+ onClick?.({ code: LanguageAdapters.sql.defaultCode });
73
+ };
74
+
75
+ const addSetupCell = () => {
76
+ addSetupCellIfDoesntExist({});
77
+ };
78
+
79
+ const renderIcon = (icon: React.ReactNode) => {
80
+ return <div className="mr-3 text-muted-foreground">{icon}</div>;
81
+ };
82
+
83
+ const handleButtonClick = (e: React.MouseEvent) => {
84
+ if (oneClickShortcut === "shift" ? e.shiftKey : e.metaKey || e.ctrlKey) {
85
+ e.preventDefault();
86
+ e.stopPropagation();
87
+ addPythonCell();
88
+ }
89
+ };
90
+
91
+ const handleOpenChange = (open: boolean) => {
92
+ if (open) {
93
+ setJustOpened(true);
94
+ // Allow interactions after a brief delay
95
+ setTimeout(() => {
96
+ setJustOpened(false);
97
+ }, 200);
98
+ }
99
+ };
100
+
101
+ const handleFirstItemClick = (e: React.MouseEvent) => {
102
+ // Hack to prevent the first item from being clicked when the dropdown is opened
103
+ if (justOpened) {
104
+ e.preventDefault();
105
+ e.stopPropagation();
106
+ return;
107
+ }
108
+ addPythonCell();
109
+ };
110
+
45
111
  return (
46
- <CreateCellButtonContextMenu onClick={onClick}>
47
- <Tooltip content={finalTooltipContent}>
112
+ <DropdownMenu onOpenChange={handleOpenChange}>
113
+ <DropdownMenuTrigger asChild={true} onPointerDown={handleButtonClick}>
48
114
  <Button
49
- onClick={() => onClick?.({ code: "" })}
50
115
  className={cn(
51
- "shoulder-button hover-action",
116
+ "border-none hover-action shadow-none! bg-transparent! focus-visible:outline-none",
52
117
  isAppInteractionDisabled(connectionState) && " inactive-button",
53
118
  )}
54
119
  onMouseDown={Events.preventFocus}
55
- shape="circle"
56
120
  size="small"
57
121
  color="hint-green"
58
122
  data-testid="create-cell-button"
59
123
  >
60
- <PlusIcon strokeWidth={1.8} />
124
+ <Tooltip content={finalTooltipContent}>
125
+ <PlusIcon
126
+ strokeWidth={4}
127
+ size={14}
128
+ className="opacity-60 hover:opacity-90"
129
+ />
130
+ </Tooltip>
61
131
  </Button>
62
- </Tooltip>
63
- </CreateCellButtonContextMenu>
64
- );
65
- };
66
-
67
- const CreateCellButtonContextMenu = (props: {
68
- onClick: ((opts: { code: string; hideCode?: boolean }) => void) | undefined;
69
- children: React.ReactNode;
70
- }) => {
71
- const { children, onClick } = props;
72
- const { createNewCell, addSetupCellIfDoesntExist } = useCellActions();
73
-
74
- if (!onClick) {
75
- return children;
76
- }
77
-
78
- // NB: When adding the marimo import for markdown and SQL, we run it
79
- // automatically regardless of whether autoinstantiate or lazy execution is
80
- // enabled; the user experience is confusing otherwise (how does the user
81
- // know they need to run import marimo as mo. first?).
82
- return (
83
- <ContextMenu>
84
- <ContextMenuTrigger>{children}</ContextMenuTrigger>
85
- <ContextMenuContent>
86
- <ContextMenuItem
87
- key="python"
88
- onSelect={(evt) => {
89
- evt.stopPropagation();
90
- onClick({ code: "" });
91
- }}
92
- >
93
- <div className="mr-3 text-muted-foreground">
94
- <PythonIcon />
95
- </div>
132
+ </DropdownMenuTrigger>
133
+ <DropdownMenuContent side="bottom" sideOffset={-30}>
134
+ <DropdownMenuItem onClick={handleFirstItemClick}>
135
+ {renderIcon(<PythonIcon />)}
96
136
  Python cell
97
- </ContextMenuItem>
98
-
99
- <ContextMenuItem
100
- key="markdown"
101
- onSelect={(evt) => {
102
- evt.stopPropagation();
103
- maybeAddMarimoImport({ autoInstantiate: true, createNewCell });
104
- onClick({
105
- code: LanguageAdapters.markdown.defaultCode,
106
- hideCode: true,
107
- });
108
- }}
109
- >
110
- <div className="mr-3 text-muted-foreground">
111
- <MarkdownIcon />
112
- </div>
137
+ </DropdownMenuItem>
138
+ <DropdownMenuItem onClick={addMarkdownCell}>
139
+ {renderIcon(<MarkdownIcon />)}
113
140
  Markdown cell
114
- </ContextMenuItem>
115
- <ContextMenuItem
116
- key="sql"
117
- onSelect={(evt) => {
118
- evt.stopPropagation();
119
- maybeAddMarimoImport({ autoInstantiate: true, createNewCell });
120
- onClick({ code: LanguageAdapters.sql.defaultCode });
121
- }}
122
- >
123
- <div className="mr-3 text-muted-foreground">
124
- <DatabaseIcon size={13} strokeWidth={1.5} />
125
- </div>
141
+ </DropdownMenuItem>
142
+ <DropdownMenuItem onClick={addSQLCell}>
143
+ {renderIcon(<DatabaseIcon size={13} strokeWidth={1.5} />)}
126
144
  SQL cell
127
- </ContextMenuItem>
128
- <ContextMenuItem
129
- key="setup"
130
- onSelect={(evt) => {
131
- evt.stopPropagation();
132
- addSetupCellIfDoesntExist({});
133
- }}
134
- >
135
- <div className="mr-3 text-muted-foreground">
136
- <DiamondPlusIcon size={13} strokeWidth={1.5} />
137
- </div>
145
+ </DropdownMenuItem>
146
+ <DropdownMenuItem onClick={addSetupCell}>
147
+ {renderIcon(<DiamondPlusIcon size={13} strokeWidth={1.5} />)}
138
148
  Setup cell
139
- </ContextMenuItem>
140
- </ContextMenuContent>
141
- </ContextMenu>
149
+ </DropdownMenuItem>
150
+ </DropdownMenuContent>
151
+ </DropdownMenu>
142
152
  );
143
153
  };
@@ -23,6 +23,7 @@ import { toast } from "@/components/ui/use-toast";
23
23
  import { useResolvedMarimoConfig } from "@/core/config/config";
24
24
  import { useRequestClient } from "@/core/network/requests";
25
25
  import type { DependencyTreeNode } from "@/core/network/types";
26
+ import { stripPackageManagerPrefix } from "@/core/packages/package-input-utils";
26
27
  import {
27
28
  showRemovePackageToast,
28
29
  showUpgradePackageToast,
@@ -191,8 +192,9 @@ const InstallPackageForm: React.FC<{
191
192
  };
192
193
 
193
194
  const installPackages = () => {
195
+ const cleanedInput = stripPackageManagerPrefix(input);
194
196
  handleInstallPackages(
195
- input.split(",").map((p) => p.trim()),
197
+ [cleanedInput], // the backend will handle splitting the packages
196
198
  onSuccessInstallPackages,
197
199
  );
198
200
  };
@@ -14,6 +14,7 @@ import {
14
14
  type LucideIcon,
15
15
  NetworkIcon,
16
16
  NotebookPenIcon,
17
+ ScrollTextIcon,
17
18
  SquareDashedBottomCodeIcon,
18
19
  TextSearchIcon,
19
20
  XCircleIcon,
@@ -133,6 +134,12 @@ export const PANELS: PanelDescriptor[] = [
133
134
  // observability panels are less crucial than variables
134
135
  // or datasets, so they are positioned at the end of the
135
136
  // sidebar.
137
+ {
138
+ type: "outline",
139
+ Icon: ScrollTextIcon,
140
+ tooltip: "View outline",
141
+ position: "sidebar",
142
+ },
136
143
  {
137
144
  type: "documentation",
138
145
  Icon: TextSearchIcon,
@@ -0,0 +1,179 @@
1
+ /* Copyright 2024 Marimo. All rights reserved. */
2
+ import { describe, expect, it } from "vitest";
3
+ import type { FileInfo } from "@/core/network/types";
4
+ import { filterHiddenTree, isDirectoryOrFileHidden } from "../file-explorer";
5
+
6
+ // Helpers to build FileInfo objects for tests
7
+ const file = (name: string, path: string): FileInfo => ({
8
+ id: path,
9
+ name,
10
+ path,
11
+ isDirectory: false,
12
+ isMarimoFile: false,
13
+ children: [],
14
+ });
15
+
16
+ const dir = (
17
+ name: string,
18
+ path: string,
19
+ children: FileInfo[] = [],
20
+ ): FileInfo => ({
21
+ id: path,
22
+ name,
23
+ path,
24
+ isDirectory: true,
25
+ isMarimoFile: false,
26
+ children,
27
+ });
28
+
29
+ describe("isDirectoryOrFileHidden", () => {
30
+ it("should return true for files starting with dot", () => {
31
+ expect(isDirectoryOrFileHidden(".git")).toBe(true);
32
+ expect(isDirectoryOrFileHidden(".env")).toBe(true);
33
+ expect(isDirectoryOrFileHidden(".gitignore")).toBe(true);
34
+ });
35
+
36
+ it("should return false for normal files", () => {
37
+ expect(isDirectoryOrFileHidden("README.md")).toBe(false);
38
+ expect(isDirectoryOrFileHidden("package.json")).toBe(false);
39
+ expect(isDirectoryOrFileHidden("index.ts")).toBe(false);
40
+ });
41
+
42
+ it("should return false for files with dots in the middle", () => {
43
+ expect(isDirectoryOrFileHidden("file.test.ts")).toBe(false);
44
+ expect(isDirectoryOrFileHidden("my.config.js")).toBe(false);
45
+ });
46
+ });
47
+
48
+ describe("filterHiddenTree", () => {
49
+ it("should return all items when showHidden is true", () => {
50
+ const list: FileInfo[] = [
51
+ dir(".git", "/.git", []),
52
+ file("README.md", "/README.md"),
53
+ file(".env", "/.env"),
54
+ ];
55
+
56
+ const result = filterHiddenTree(list, true);
57
+
58
+ expect(result).toBe(list); // should be the exact same reference
59
+ expect(result).toHaveLength(3);
60
+ });
61
+
62
+ it("should filter out hidden files when showHidden is false", () => {
63
+ const list: FileInfo[] = [
64
+ dir(".git", "/.git"),
65
+ file("README.md", "/README.md"),
66
+ file(".env", "/.env"),
67
+ file("package.json", "/package.json"),
68
+ ];
69
+
70
+ const result = filterHiddenTree(list, false);
71
+
72
+ expect(result).toHaveLength(2);
73
+ expect(result[0].name).toBe("README.md");
74
+ expect(result[1].name).toBe("package.json");
75
+ });
76
+
77
+ it("should filter hidden directories recursively", () => {
78
+ const list: FileInfo[] = [
79
+ dir("src", "/src", [
80
+ file("index.ts", "/src/index.ts"),
81
+ file(".DS_Store", "/src/.DS_Store"),
82
+ file("utils.ts", "/src/utils.ts"),
83
+ ]),
84
+ dir(".git", "/.git", [file("config", "/.git/config")]),
85
+ ];
86
+
87
+ const result = filterHiddenTree(list, false);
88
+
89
+ expect(result).toHaveLength(1);
90
+ expect(result[0].name).toBe("src");
91
+ expect(result[0].children).toHaveLength(2);
92
+ expect(result[0].children?.[0].name).toBe("index.ts");
93
+ expect(result[0].children?.[1].name).toBe("utils.ts");
94
+ });
95
+
96
+ it("should handle nested hidden files", () => {
97
+ const list: FileInfo[] = [
98
+ dir("project", "/project", [
99
+ dir("src", "/project/src", [
100
+ file("index.ts", "/project/src/index.ts"),
101
+ file(".backup", "/project/src/.backup"),
102
+ ]),
103
+ file(".env", "/project/.env"),
104
+ ]),
105
+ ];
106
+
107
+ const result = filterHiddenTree(list, false);
108
+
109
+ expect(result).toHaveLength(1);
110
+ expect(result[0].children).toHaveLength(1);
111
+ expect(result[0].children?.[0].name).toBe("src");
112
+ expect(result[0].children?.[0].children).toHaveLength(1);
113
+ expect(result[0].children?.[0].children?.[0].name).toBe("index.ts");
114
+ });
115
+
116
+ it("should preserve directory structure when no children are filtered", () => {
117
+ const list: FileInfo[] = [
118
+ dir("src", "/src", [
119
+ file("index.ts", "/src/index.ts"),
120
+ file("utils.ts", "/src/utils.ts"),
121
+ ]),
122
+ ];
123
+
124
+ const result = filterHiddenTree(list, true);
125
+
126
+ // Should return the same reference since nothing changed
127
+ expect(result[0]).toBe(list[0]);
128
+ });
129
+
130
+ it("should create new object only when children are filtered", () => {
131
+ const list: FileInfo[] = [
132
+ dir("src", "/src", [
133
+ file("index.ts", "/src/index.ts"),
134
+ file(".hidden", "/src/.hidden"),
135
+ ]),
136
+ ];
137
+
138
+ const result = filterHiddenTree(list, false);
139
+
140
+ // Should be a new object since children changed
141
+ expect(result[0]).not.toBe(list[0]);
142
+ expect(result[0].children).not.toBe(list[0].children);
143
+ });
144
+
145
+ it("should handle empty list", () => {
146
+ const result = filterHiddenTree([], false);
147
+ expect(result).toEqual([]);
148
+ });
149
+
150
+ it("should handle empty children arrays", () => {
151
+ const list: FileInfo[] = [dir("empty-dir", "/empty-dir", [])];
152
+
153
+ const result = filterHiddenTree(list, false);
154
+
155
+ expect(result).toHaveLength(1);
156
+ expect(result[0].children).toEqual([]);
157
+ });
158
+
159
+ it("should handle deeply nested structures", () => {
160
+ const list: FileInfo[] = [
161
+ dir("level1", "/level1", [
162
+ dir("level2", "/level1/level2", [
163
+ dir("level3", "/level1/level2/level3", [
164
+ file("file.ts", "/level1/level2/level3/file.ts"),
165
+ file(".hidden", "/level1/level2/level3/.hidden"),
166
+ ]),
167
+ ]),
168
+ file(".ignore", "/level1/.ignore"),
169
+ ]),
170
+ ];
171
+
172
+ const result = filterHiddenTree(list, false);
173
+
174
+ expect(result[0].children?.[0].children?.[0].children).toHaveLength(1);
175
+ expect(result[0].children?.[0].children?.[0].children?.[0].name).toBe(
176
+ "file.ts",
177
+ );
178
+ });
179
+ });