@marimo-team/islands 0.18.0 → 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 (578) hide show
  1. package/dist/Combination-DN9sfYvo.js +2569 -0
  2. package/dist/{ConnectedDataExplorerComponent-BUgUSo2B.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-BS-Z5AY5.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/{astro-B_6-YJyf.js → astro-BhYIwlT9.js} +6 -6
  12. package/dist/{blade-J--jW6Qd.js → blade-C_4Ocghp.js} +8 -8
  13. package/dist/{blockDiagram-QIGZ2CNN-BBAMkEiZ.js → blockDiagram-QIGZ2CNN-BEJ-ovZ-.js} +16 -16
  14. package/dist/{bsl-DwRO_vPO.js → bsl-Cam9acj0.js} +1 -1
  15. package/dist/{button-Hye6-2X8.js → button-Css_i-3R.js} +73 -71
  16. package/dist/c-DYGEdS-r.js +4 -0
  17. package/dist/{c4Diagram-FPNF74CW-H3kajU-4.js → c4Diagram-FPNF74CW-Bec_XtUS.js} +8 -8
  18. package/dist/{cairo-C5YwJoRd.js → cairo-DzTxWLx8.js} +1 -1
  19. package/dist/{channel-DO61Dn1s.js → channel-SHZ3pH5W.js} +1 -1
  20. package/dist/{chunk-3AY6CYHV-PGaWKUmM.js → chunk-3AY6CYHV-CY56r15D.js} +10 -10
  21. package/dist/{chunk-4BX2VUAB-C2wFBih6.js → chunk-4BX2VUAB-DakkmKa6.js} +1 -1
  22. package/dist/{chunk-4KMFLZZN-BLk4DGEy.js → chunk-4KMFLZZN-PjonQa4P.js} +1 -1
  23. package/dist/{chunk-55IACEB6-DQd6AZ1u.js → chunk-55IACEB6-lM9AcPFI.js} +1 -1
  24. package/dist/{chunk-6OXUPJBA-KTKvUtax.js → chunk-6OXUPJBA-CtytfqPH.js} +7 -7
  25. package/dist/{chunk-7GE3RBXV-2QiFkaHl.js → chunk-7GE3RBXV-Ch2VFfx5.js} +1 -1
  26. package/dist/{chunk-ABZYJK2D-plHo87kc.js → chunk-ABZYJK2D-ChhHEVnH.js} +2 -2
  27. package/dist/{chunk-BN7GFLIU-D4EEpMya.js → chunk-BN7GFLIU-4gH4skZE.js} +1 -1
  28. package/dist/{chunk-CVBHYZKI-nBM-9qrT.js → chunk-CVBHYZKI-CvLGu9Zl.js} +1 -1
  29. package/dist/{chunk-CXMOBAN2-DQYc62lB.js → chunk-CXMOBAN2-DmuTyIC5.js} +6 -6
  30. package/dist/{chunk-EXTU4WIE-CzYdpCHC.js → chunk-EXTU4WIE-5gY1kHy6.js} +2 -2
  31. package/dist/{chunk-FMBD7UC4-5CTTj0Jv.js → chunk-FMBD7UC4-CktmbpHj.js} +1 -1
  32. package/dist/{chunk-JA3XYJ7Z-iN-ePWJa.js → chunk-JA3XYJ7Z-DoOh1zwr.js} +4 -4
  33. package/dist/{chunk-JEIROHC2-DJN5-Qfh.js → chunk-JEIROHC2-BxiaYL-E.js} +1 -1
  34. package/dist/{chunk-K7UQS3LO-BFLlfdsi.js → chunk-K7UQS3LO-jAauQP9f.js} +7 -7
  35. package/dist/{chunk-KMC2YHZD-BvIjRiOn.js → chunk-KMC2YHZD-DStgMcLU.js} +1 -1
  36. package/dist/{chunk-QN33PNHL-Brd7yTp3.js → chunk-QN33PNHL-a6Utqqtp.js} +2 -2
  37. package/dist/{chunk-QYVHNE3D-2JcHbPf-.js → chunk-QYVHNE3D-Di-okNtj.js} +2 -2
  38. package/dist/{chunk-QZHKN3VN-uMYxkooq.js → chunk-QZHKN3VN-uG0W9XCn.js} +1 -1
  39. package/dist/{chunk-S3R3BYOJ-F8AD9lHs.js → chunk-S3R3BYOJ-D8svDLcB.js} +4 -4
  40. package/dist/{chunk-T44TD3VJ-BuOpBf-m.js → chunk-T44TD3VJ-C5NCytxJ.js} +1 -1
  41. package/dist/{chunk-TVAH2DTR-CnMJAbv2.js → chunk-TVAH2DTR-CXLr85J9.js} +6 -6
  42. package/dist/{chunk-TZMSLE5B-FgoUBce3.js → chunk-TZMSLE5B-1E_YfHMJ.js} +3 -3
  43. package/dist/{chunk-WFRQ32O7-XYO_3xAi.js → chunk-WFRQ32O7-BKSf4yCO.js} +1 -1
  44. package/dist/{chunk-WFWHJNB7-CO2PO-xj.js → chunk-WFWHJNB7-B1Zzkj_f.js} +1 -1
  45. package/dist/{chunk-XRWGC2XP-NEUwjXBT.js → chunk-XRWGC2XP-Bo8DlVQO.js} +1 -1
  46. package/dist/{chunk-ZPAFE4SF-CyeNhdPx.js → chunk-ZPAFE4SF-CmteRP75.js} +1 -1
  47. package/dist/classDiagram-KNZD7YFC-ZbE61oE0.js +40 -0
  48. package/dist/classDiagram-v2-RKCZMP56-BqhgFvho.js +40 -0
  49. package/dist/cmake-l0t4JJ7s.js +4 -0
  50. package/dist/{cobol-lK28EtZf.js → cobol-DJP1EK1j.js} +4 -4
  51. package/dist/{coffee-BSXLyDD2.js → coffee-CC5nEIi9.js} +1 -1
  52. package/dist/{cose-bilkent-S5V4N54A-Cj0MgFkf.js → cose-bilkent-S5V4N54A-DKXAkYs4.js} +3 -3
  53. package/dist/cpp-ANCO5onE.js +8 -0
  54. package/dist/{cpp-BChLOGjC.js → cpp-D9LYqqPp.js} +3 -3
  55. package/dist/{crystal-CO99xfcp.js → crystal-BRqcx7ej.js} +6 -6
  56. package/dist/csharp-Bz76NQ_J.js +4 -0
  57. package/dist/css-DAuWdYvT.js +4 -0
  58. package/dist/{dagre-5GWH7T2D-CfnBQe48.js → dagre-5GWH7T2D-NKT9rsKF.js} +17 -17
  59. package/dist/{data-grid-overlay-editor-Bcf9kFFc.js → data-grid-overlay-editor-awitGObA.js} +2 -2
  60. package/dist/{diagram-N5W7TBWH-04TOCf2a.js → diagram-N5W7TBWH-D7Lb6iTv.js} +24 -24
  61. package/dist/{diagram-QEK2KX5R-CUipzemR.js → diagram-QEK2KX5R-BGNlTTAr.js} +19 -19
  62. package/dist/{diagram-S2PKOQOG-ei2iw-oI.js → diagram-S2PKOQOG-DArsBfLb.js} +19 -19
  63. package/dist/diff-C7LSwbp8.js +4 -0
  64. package/dist/{dist-cqkd3NiL.js → dist-6NgnwCMd.js} +3 -3
  65. package/dist/{dist-CqazJcfk.js → dist-BDVas7u0.js} +1 -1
  66. package/dist/{dist-CGt0X2sV.js → dist-BeL8NYBI.js} +2 -2
  67. package/dist/dist-BhEY2Z_n.js +14 -0
  68. package/dist/{dist-R4ZaAXGr.js → dist-BkgFFOsz.js} +2 -2
  69. package/dist/{dist-v-r4jaY5.js → dist-BoehQujB.js} +1 -1
  70. package/dist/{dist-D7XZ_tXQ.js → dist-C2nw9RHE.js} +1 -1
  71. package/dist/{dist-BGDtO7aZ.js → dist-CAS8F-hC.js} +1 -1
  72. package/dist/{dist-s1LnJ5PG.js → dist-CS4N5B_G.js} +1 -1
  73. package/dist/{dist-B4S8pyFo.js → dist-Cc9Qz-U4.js} +3 -3
  74. package/dist/{dist-4FDGlo3i.js → dist-CljL8T10.js} +4 -4
  75. package/dist/dist-Cud0QD8Y.js +10 -0
  76. package/dist/{dist-Bi6qs7up.js → dist-D9rISDoI.js} +1 -1
  77. package/dist/dist-D9t6fT6i.js +10 -0
  78. package/dist/{dist-CTSMnLwu.js → dist-DC47GA46.js} +805 -643
  79. package/dist/{dist-D0KS-m2t.js → dist-Dh6pWjSH.js} +2 -2
  80. package/dist/{dist-DtSssmhN.js → dist-DlI9v2Hh.js} +2 -2
  81. package/dist/{dist-CSq74zEj.js → dist-DyXVT1vy.js} +1 -1
  82. package/dist/{dist-DO00gdpV.js → dist-TdQLXZKo.js} +3 -3
  83. package/dist/{dist-B9WB0SFB.js → dist-WvPZl2Sl.js} +1 -1
  84. package/dist/{dist-B4jO5BUT.js → dist-q94GwumS.js} +1 -1
  85. package/dist/{dist-CmEIe_wJ.js → dist-qGG7RM7P.js} +4 -4
  86. package/dist/{edge-BTCHQnL0.js → edge-DeFsqb1i.js} +5 -5
  87. package/dist/{elixir-CCIwO0SA.js → elixir-BGD3Ym80.js} +3 -3
  88. package/dist/{elm-Bd8GMb2w.js → elm-sXxjAPfa.js} +2 -2
  89. package/dist/{erDiagram-AWTI2OKA-DOO75nhy.js → erDiagram-AWTI2OKA-Dd30FpUG.js} +21 -21
  90. package/dist/{erb-C2XKicEJ.js → erb-CVVq1SHo.js} +19 -19
  91. package/dist/{erlang-BWIWBPfK.js → erlang-CoJZUhS4.js} +1 -1
  92. package/dist/{error-banner-CPLhCPHA.js → error-banner-DDDPnVZA.js} +106 -104
  93. package/dist/esm-BC9Qw9UQ.js +4056 -0
  94. package/dist/{esm-DxgKy8Wv.js → esm-DDjaZl5x.js} +14 -14
  95. package/dist/{flowDiagram-PVAE7QVJ-AUJeRwR9.js → flowDiagram-PVAE7QVJ-Dfo2-D8K.js} +23 -23
  96. package/dist/{formats-oddMfm9_.js → formats-DClgE90A.js} +15 -15
  97. package/dist/{fortran-fixed-form-DOH2AovA.js → fortran-fixed-form-DUVqo01t.js} +1 -1
  98. package/dist/{fortran-free-form-DWQ7SFTN.js → fortran-free-form-e6UrnOjF.js} +1 -1
  99. package/dist/{fsharp-GbWUX1wo.js → fsharp-8cm272ry.js} +1 -1
  100. package/dist/{ganttDiagram-OWAHRB6G-d9HlXS4A.js → ganttDiagram-OWAHRB6G-CE9rMeMb.js} +10 -10
  101. package/dist/{gdresource-DJQ1WGjU.js → gdresource-ClFnPq3a.js} +2 -2
  102. package/dist/gdscript-B0LZbOIR.js +4 -0
  103. package/dist/gdshader-DFrJP5ei.js +4 -0
  104. package/dist/{git-commit-73gQ2jal.js → git-commit-BYaLl5ls.js} +1 -1
  105. package/dist/{git-rebase-tezkvplk.js → git-rebase-8n1RW6UD.js} +1 -1
  106. package/dist/{gitGraph-ZV4HHKMB-4c_I6adP.js → gitGraph-ZV4HHKMB-DGIos9rl.js} +3 -3
  107. package/dist/{gitGraphDiagram-NY62KEGX-BdOzqIF7.js → gitGraphDiagram-NY62KEGX-DJjzf0dH.js} +19 -19
  108. package/dist/{glide-data-editor-BFv4VQnc.js → glide-data-editor-CdlLXwb-.js} +94 -94
  109. package/dist/{glimmer-js-B4yN_cyX.js → glimmer-js-Dai0PeIS.js} +4 -4
  110. package/dist/{glimmer-ts-BFwzJYHf.js → glimmer-ts-D_TjaTpy.js} +4 -4
  111. package/dist/glsl-CxEuvrWH.js +5 -0
  112. package/dist/{glsl-Da3zbemV.js → glsl-CyGXCGI2.js} +1 -1
  113. package/dist/go-DdqSEUJy.js +4 -0
  114. package/dist/{graphql-DHCTQXG8.js → graphql-B1Dx1rcM.js} +4 -4
  115. package/dist/graphql-cxjxtpev.js +8 -0
  116. package/dist/{hack-Bq2SPMdZ.js → hack-DaQhTJ_x.js} +4 -4
  117. package/dist/{haml-DKOqVKa_.js → haml-Bp5GoYpB.js} +2 -2
  118. package/dist/haml-CiyF8Brn.js +6 -0
  119. package/dist/{handlebars-lWgxxMwE.js → handlebars-ChGgzSRK.js} +4 -4
  120. package/dist/haxe-DCTL_FCo.js +4 -0
  121. package/dist/hlsl-Bfx4Ir_v.js +4 -0
  122. package/dist/{html-CHICwrWt.js → html-C4wWoZph.js} +2 -2
  123. package/dist/html-CEOIAVhY.js +6 -0
  124. package/dist/{html-derivative-BvtUczEO.js → html-derivative-BBqlL-a4.js} +1 -1
  125. package/dist/{html-derivative-PpMnWy1w.js → html-derivative-COo0pM2g.js} +4 -4
  126. package/dist/{http-CL7ORkDb.js → http-BBZ3n4Nc.js} +9 -9
  127. package/dist/{hxml-dX0MdapH.js → hxml-B3WEmVIR.js} +1 -1
  128. package/dist/{info-63CPKGFF-Bz8ia4ds.js → info-63CPKGFF-BJRf7NSB.js} +3 -3
  129. package/dist/{infoDiagram-STP46IZ2-2N5rOSVf.js → infoDiagram-STP46IZ2-wRiL7RAF.js} +15 -15
  130. package/dist/java-Dg_uLDO2.js +4 -0
  131. package/dist/javascript-UdF6t51O.js +4 -0
  132. package/dist/{jinja-DsZfQ7_N.js → jinja-DIY5F3JL.js} +3 -3
  133. package/dist/{jison-BspgGSu_.js → jison-NvMl7ZRB.js} +1 -1
  134. package/dist/{journeyDiagram-BIP6EPQ6-AkLtiVmB.js → journeyDiagram-BIP6EPQ6-xE-QKfW3.js} +9 -9
  135. package/dist/json-DhGO17Us.js +4 -0
  136. package/dist/jsx-BnWl0sfU.js +4 -0
  137. package/dist/{julia-B_C4JiTM.js → julia-B99Wf6ks.js} +8 -8
  138. package/dist/{kanban-definition-6OIFK2YF-Crxg_HOg.js → kanban-definition-6OIFK2YF-xTM_lSKu.js} +15 -15
  139. package/dist/{katex-CTMLv-Xd.js → katex-_B79i9h_.js} +1 -1
  140. package/dist/{label-Dsm6T1fr.js → label-DboGLjGa.js} +193 -162
  141. package/dist/{latex-DoiWAlAQ.js → latex-CZecqbCK.js} +2 -2
  142. package/dist/less-DZgWnAzP.js +4 -0
  143. package/dist/{line-DBxDZ2GZ.js → line-Bm50ongk.js} +3 -3
  144. package/dist/{linear-B8XR-NVr.js → linear-CUCOukde.js} +2 -2
  145. package/dist/{liquid-Bv5Ox8yg.js → liquid-CBTCQ-BA.js} +4 -4
  146. package/dist/{lua-BKJ_BAEH.js → lua-BAo0xbXr.js} +1 -1
  147. package/dist/lua-C4LdLFQB.js +5 -0
  148. package/dist/main.js +12652 -12194
  149. package/dist/markdown-DmoiORob.js +4 -0
  150. package/dist/{marko-DEzr-2oj.js → marko-aJY3NB2u.js} +4 -4
  151. package/dist/{mdc-GC7qNQda.js → mdc-DUOD_AOa.js} +6 -6
  152. package/dist/{mermaid-BeGlg1JH.js → mermaid-DKh-bxRG.js} +24 -24
  153. package/dist/{mermaid-parser.core-C5kJ8cMb.js → mermaid-parser.core-BkBK5D-D.js} +8 -8
  154. package/dist/mermaid.core-BlYN1aB0.js +31 -0
  155. package/dist/{mermaid.core-2hDUD3tS.js → mermaid.core-DhviAB-E.js} +35 -35
  156. package/dist/{mhchem-ydsvRuzJ.js → mhchem-BLvV19Q1.js} +1 -1
  157. package/dist/{mindmap-definition-Q6HEUPPD-u3xALYXy.js → mindmap-definition-Q6HEUPPD-DhGkxCFl.js} +20 -20
  158. package/dist/{nginx-WYx0kjQD.js → nginx-C4wBmtSL.js} +2 -2
  159. package/dist/{nim-B59jjkdb.js → nim-7HUrH4-G.js} +8 -8
  160. package/dist/{number-overlay-editor-BJoc-iTp.js → number-overlay-editor-B7JKtSXW.js} +1 -1
  161. package/dist/{ordinal-DncHRC0c.js → ordinal-CgAjEHLv.js} +1 -1
  162. package/dist/{packet-HUATNLJX-DZeFAkmI.js → packet-HUATNLJX-COt0WQbt.js} +3 -3
  163. package/dist/{perl-BWXWNd9p.js → perl-DcIsham4.js} +6 -6
  164. package/dist/{php-B2IAnMDw.js → php-BMhhkMnI.js} +6 -6
  165. package/dist/php-BgNggqvM.js +11 -0
  166. package/dist/{pie-WTHONI2E-CcN2FpmZ.js → pie-WTHONI2E-7VABasD6.js} +3 -3
  167. package/dist/{pieDiagram-ADFJNKIX-B40sMFEq.js → pieDiagram-ADFJNKIX-CV46TPgr.js} +24 -24
  168. package/dist/postcss-BV0gPaAN.js +4 -0
  169. package/dist/{pug-jCrWgXoo.js → pug-C7hWP9pb.js} +3 -3
  170. package/dist/python-DrIYjHcK.js +4 -0
  171. package/dist/{qml-BvryPJl6.js → qml-4wNHxISd.js} +1 -1
  172. package/dist/{quadrantDiagram-LMRXKWRM-C-qFDzwP.js → quadrantDiagram-LMRXKWRM-0ohBNHBM.js} +5 -5
  173. package/dist/r-bWdZZY4p.js +4 -0
  174. package/dist/{radar-NJJJXTRR-DgOJ0Ctc.js → radar-NJJJXTRR-DEeA59xM.js} +3 -3
  175. package/dist/{razor-BsW9JZIF.js → razor-kE6VSkUw.js} +4 -4
  176. package/dist/react-vega-BFAvc6S7.js +25 -0
  177. package/dist/{react-vega-DDXWt_PN.js → react-vega-L8_x6Wjr.js} +1564 -845
  178. package/dist/regexp-Du19WMsH.js +4 -0
  179. package/dist/{requirementDiagram-4UW4RH46-Cl_mIh_y.js → requirementDiagram-4UW4RH46-DSnND54_.js} +20 -20
  180. package/dist/{rst-CRU76Z1W.js → rst-CjWaqJB3.js} +22 -22
  181. package/dist/{ruby-9gRRZYzM.js → ruby-CX211_l4.js} +12 -12
  182. package/dist/ruby-Dsch-4qr.js +22 -0
  183. package/dist/{sankeyDiagram-GR3RE2ED-Dm9k3dHY.js → sankeyDiagram-GR3RE2ED-C4jd7w5x.js} +6 -6
  184. package/dist/{sas-BDTaEI61.js → sas-Bso79j2d.js} +1 -1
  185. package/dist/{scss-B1u4Hrbb.js → scss-B2x0kI7c.js} +1 -1
  186. package/dist/scss-BHcIhkao.js +5 -0
  187. package/dist/sdbl-CiVVvobW.js +4 -0
  188. package/dist/{sequenceDiagram-C3RYC4MD-DmU9oc42.js → sequenceDiagram-C3RYC4MD-4cYnu6yf.js} +10 -10
  189. package/dist/{shaderlab-Bm5WmYK9.js → shaderlab-B4l4__9m.js} +1 -1
  190. package/dist/shellscript-Carvxcyf.js +4 -0
  191. package/dist/{shellsession-CN-wC7WL.js → shellsession-D-krdWsh.js} +1 -1
  192. package/dist/{slides-component-CZksIptv.js → slides-component-Cm9g-y7F.js} +1 -1
  193. package/dist/{soy-CeMP2PMh.js → soy-wFhS-Vjb.js} +3 -3
  194. package/dist/{sparql-M76X2Hg1.js → sparql-D6Kv-L3I.js} +1 -1
  195. package/dist/{spec-BotzCMo3.js → spec-B7BWIiD8.js} +3 -3
  196. package/dist/sql-CVP77J2a.js +4 -0
  197. package/dist/{src-CePha-_O.js → src-DopHipf8.js} +1 -1
  198. package/dist/{stata-BH7l4VD7.js → stata-1fehkWpU.js} +1 -1
  199. package/dist/{stateDiagram-KXAO66HF-D_SUaMYR.js → stateDiagram-KXAO66HF-Cq-ezNe-.js} +21 -21
  200. package/dist/stateDiagram-v2-UMBNRL4Z-QxkaR8xk.js +39 -0
  201. package/dist/{step-zYP-E-fB.js → step-Bixovd6W.js} +1 -1
  202. package/dist/stex-IzMc-wiJ.js +5 -0
  203. package/dist/style.css +1 -2
  204. package/dist/stylus-BTQe34gF.js +4 -0
  205. package/dist/{svelte-TwcowgfT.js → svelte-DZNFxgw8.js} +4 -4
  206. package/dist/{templ-BpG-MhQv.js → templ-unaxtPDu.js} +3 -3
  207. package/dist/tex-B02KkJuq.js +5 -0
  208. package/dist/{tex-CBM64lBG.js → tex-WcClzGDl.js} +1 -1
  209. package/dist/{time-DRnNkqSS.js → time-D5kvxFYj.js} +2 -2
  210. package/dist/{timeline-definition-XQNQX7LJ-BgkB1JzD.js → timeline-definition-XQNQX7LJ-HouMBLkR.js} +6 -6
  211. package/dist/{treemap-75Q7IDZK-CGM2jb5Y.js → treemap-75Q7IDZK-rIabFN59.js} +3 -3
  212. package/dist/{ts-tags-CywVDBFD.js → ts-tags-Dw16jybl.js} +9 -9
  213. package/dist/tsx-2o7mnE6q.js +4 -0
  214. package/dist/turtle-CDidgplC.js +4 -0
  215. package/dist/{twig-DKvQCGZl.js → twig-CTY0fjwf.js} +23 -23
  216. package/dist/{types-IRrkdH-H.js → types-8-7JTTaW.js} +167 -166
  217. package/dist/typescript-Z3djoets.js +4 -0
  218. package/dist/{useAsyncData-CsSW6_Zh.js → useAsyncData-_ejUTnFA.js} +1 -1
  219. package/dist/{useTheme-D56Xlrez.js → useTheme-Cpx27F7Z.js} +4 -2
  220. package/dist/{vega-component-CLjz4see.js → vega-component-r6NkLfxM.js} +213 -212
  221. package/dist/{vue-CUZawI_b.js → vue-BjZgU5Nz.js} +6 -6
  222. package/dist/vue-DhUZPDmo.js +10 -0
  223. package/dist/{vue-html-Bx7_HmU0.js → vue-html-C4EmFqJx.js} +7 -7
  224. package/dist/{vue-vine-9w78JPDc.js → vue-vine-DrjIj56i.js} +11 -11
  225. package/dist/{xml-CEIIhUsl.js → xml-BgKyT7dU.js} +1 -1
  226. package/dist/xml-C7KksLEJ.js +5 -0
  227. package/dist/{xsl-BynZr4Sw.js → xsl-9daNus4h.js} +2 -2
  228. package/dist/{xychartDiagram-6GGTOJPD-u5660hzT.js → xychartDiagram-6GGTOJPD-DkDWjoGr.js} +16 -16
  229. package/dist/yaml-zmBXofFy.js +4 -0
  230. package/package.json +8 -8
  231. package/src/components/chat/acp/blocks.tsx +1 -1
  232. package/src/components/chat/chat-panel.tsx +1 -1
  233. package/src/components/chat/reasoning-accordion.tsx +1 -1
  234. package/src/components/data-table/__tests__/columns.test.tsx +143 -1
  235. package/src/components/data-table/__tests__/url-detector.test.tsx +92 -1
  236. package/src/components/data-table/columns.tsx +34 -17
  237. package/src/components/data-table/download-actions.tsx +16 -8
  238. package/src/components/data-table/row-viewer-panel/row-viewer.tsx +5 -5
  239. package/src/components/data-table/url-detector.tsx +43 -0
  240. package/src/components/datasources/utils.ts +7 -0
  241. package/src/components/editor/ai/ai-completion-editor.tsx +6 -3
  242. package/src/components/editor/cell/CreateCellButton.tsx +98 -88
  243. package/src/components/editor/chrome/panels/packages-panel.tsx +1 -1
  244. package/src/components/editor/chrome/types.ts +7 -0
  245. package/src/components/editor/file-tree/__tests__/file-expolorer.test.ts +1 -0
  246. package/src/components/editor/file-tree/file-explorer.tsx +6 -5
  247. package/src/components/editor/notebook-cell.tsx +27 -25
  248. package/src/components/editor/output/__tests__/ansi-reduce.test.ts +8 -0
  249. package/src/components/editor/output/ansi-reduce.ts +7 -4
  250. package/src/components/editor/renderers/grid-layout/grid-layout.tsx +35 -3
  251. package/src/components/ui/table.tsx +1 -1
  252. package/src/core/ai/tools/__tests__/edit-notebook-tool.test.ts +156 -10
  253. package/src/core/ai/tools/__tests__/registry.test.ts +35 -1
  254. package/src/core/ai/tools/edit-notebook-tool.ts +86 -45
  255. package/src/core/cells/__tests__/logs.test.ts +371 -0
  256. package/src/core/cells/logs.ts +16 -5
  257. package/src/core/codemirror/__tests__/format.test.ts +28 -2
  258. package/src/core/codemirror/copilot/copilot-config.tsx +1 -1
  259. package/src/core/codemirror/editing/commands.ts +4 -3
  260. package/src/core/codemirror/format.ts +105 -7
  261. package/src/core/codemirror/language/languages/sql/completion-store.ts +1 -1
  262. package/src/core/codemirror/language/languages/sql/sql.ts +8 -1
  263. package/src/core/codemirror/language/languages/sql/utils.ts +15 -0
  264. package/src/core/codemirror/language/panel/panel.tsx +1 -1
  265. package/src/core/config/config-schema.ts +3 -3
  266. package/src/core/websocket/useMarimoWebSocket.tsx +1 -1
  267. package/src/css/app/Cell.css +6 -1
  268. package/src/plugins/impl/DateTimePickerPlugin.tsx +3 -1
  269. package/src/plugins/impl/__tests__/DateTimePickerPlugin.test.tsx +3 -0
  270. package/src/plugins/impl/common/error-banner.tsx +7 -3
  271. package/src/plugins/impl/vega/VegaPlugin.tsx +1 -0
  272. package/src/plugins/impl/vega/vega-component.tsx +26 -5
  273. package/src/plugins/layout/__test__/ProgressPlugin.test.ts +1 -1
  274. package/dist/Combination-D68fi0fY.js +0 -2504
  275. package/dist/angular-html-BcsYKZNy.js +0 -7
  276. package/dist/c-RhvfrIXd.js +0 -4
  277. package/dist/classDiagram-KNZD7YFC-BwfV2ECJ.js +0 -40
  278. package/dist/classDiagram-v2-RKCZMP56-CdtBTwGN.js +0 -40
  279. package/dist/cmake-Dv9WBQ8F.js +0 -4
  280. package/dist/cpp-De3HlDQp.js +0 -8
  281. package/dist/csharp-DONDYcLD.js +0 -4
  282. package/dist/css-KrVDDZJI.js +0 -4
  283. package/dist/diff-C_xoFltE.js +0 -4
  284. package/dist/dist-C_ywAD_6.js +0 -10
  285. package/dist/dist-Umyw8yf9.js +0 -10
  286. package/dist/download-Bb5BCMXq.js +0 -145
  287. package/dist/esm-Cjo4c4Vw.js +0 -2188
  288. package/dist/gdscript-CCtCxlxC.js +0 -4
  289. package/dist/gdshader-DRsZz2Lo.js +0 -4
  290. package/dist/glsl-Bpd55IJK.js +0 -5
  291. package/dist/go-BZbX8CmG.js +0 -4
  292. package/dist/graphql-C3W9lZa9.js +0 -8
  293. package/dist/haml-0dNTXdjh.js +0 -6
  294. package/dist/haxe-D67WIBdi.js +0 -4
  295. package/dist/hlsl-A_Yq2Muj.js +0 -4
  296. package/dist/html-C6ObPTU5.js +0 -6
  297. package/dist/java-BFakZb2S.js +0 -4
  298. package/dist/javascript-B8ZNE_3R.js +0 -4
  299. package/dist/json-CVwA-VKM.js +0 -4
  300. package/dist/jsx-TsEBgZMR.js +0 -4
  301. package/dist/less-R7I1oHvn.js +0 -4
  302. package/dist/lua-CdOJTa1m.js +0 -5
  303. package/dist/markdown-Czm489_C.js +0 -4
  304. package/dist/mermaid.core-D5NqLRbX.js +0 -31
  305. package/dist/php-B2RrCM5T.js +0 -11
  306. package/dist/postcss-CK8yd697.js +0 -4
  307. package/dist/python-BAyuw8wl.js +0 -4
  308. package/dist/r-CMKGyVVD.js +0 -4
  309. package/dist/react-vega-DV2IwPx_.js +0 -25
  310. package/dist/regexp-C-NGZx14.js +0 -4
  311. package/dist/ruby-DC1LiM9o.js +0 -22
  312. package/dist/scss-9LDy_1oh.js +0 -5
  313. package/dist/sdbl-Cauk10zS.js +0 -4
  314. package/dist/shellscript-DPV_oGnY.js +0 -4
  315. package/dist/sql-BuUisnb3.js +0 -4
  316. package/dist/stateDiagram-v2-UMBNRL4Z-DdAPrjTz.js +0 -39
  317. package/dist/stex-BPCIi6ix.js +0 -5
  318. package/dist/stylus-BzfQ5p6U.js +0 -4
  319. package/dist/tex-DKaqHjWi.js +0 -5
  320. package/dist/tsx-CAS2Oalp.js +0 -4
  321. package/dist/turtle-Dqog6asB.js +0 -4
  322. package/dist/typescript-DHHJAsKz.js +0 -4
  323. package/dist/vue-DiyvUvuo.js +0 -10
  324. package/dist/xml-wE_-A0vH.js +0 -5
  325. package/dist/yaml-5htSumZI.js +0 -4
  326. /package/dist/{ImageComparisonComponent-DTO3nRq-.js → ImageComparisonComponent-CXBJ7S4z.js} +0 -0
  327. /package/dist/{abap-Cnc1m8d-.js → abap-I2cGjSH1.js} +0 -0
  328. /package/dist/{actionscript-3-g8zBgLKw.js → actionscript-3-DL1yGs6S.js} +0 -0
  329. /package/dist/{ada-MlSLvfsc.js → ada-BkGUMHAC.js} +0 -0
  330. /package/dist/{andromeeda-CkQePh6_.js → andromeeda-BWSHGuDt.js} +0 -0
  331. /package/dist/{apache-Cp-BBvQI.js → apache-DRnLyMnR.js} +0 -0
  332. /package/dist/{apex-CID9_iW1.js → apex-CA0TS4zn.js} +0 -0
  333. /package/dist/{applescript-Bv6vEFim.js → applescript-B8vB3y-q.js} +0 -0
  334. /package/dist/{ara-l5FvBxcT.js → ara-C0et56O5.js} +0 -0
  335. /package/dist/{array-lX94FrxB.js → array-vD2Vw0bk.js} +0 -0
  336. /package/dist/{asciidoc-BpLzRCLD.js → asciidoc-a6FHzc0d.js} +0 -0
  337. /package/dist/{asm-CxMfzk9G.js → asm-3DPfbryP.js} +0 -0
  338. /package/dist/{asterisk-Cbdk9I7-.js → asterisk-CbqErmo8.js} +0 -0
  339. /package/dist/{aurora-x-BmJfZyvk.js → aurora-x-Cq0GoPAm.js} +0 -0
  340. /package/dist/{awk-DZbdMF01.js → awk-GgrsjT7w.js} +0 -0
  341. /package/dist/{ayu-dark-Ce21p_3j.js → ayu-dark-BOgp0yX0.js} +0 -0
  342. /package/dist/{ballerina-6WMbs5Nh.js → ballerina-DErPOQth.js} +0 -0
  343. /package/dist/{bat-D70SunD8.js → bat-CkhnPpIS.js} +0 -0
  344. /package/dist/{beancount-DtkuCj7H.js → beancount-Rkl6N3Po.js} +0 -0
  345. /package/dist/{berry-DbfHEJGk.js → berry-C0cFa9Eb.js} +0 -0
  346. /package/dist/{bibtex-Cl9qlt9d.js → bibtex-PErECouH.js} +0 -0
  347. /package/dist/{bicep-0zpjixSE.js → bicep-B9tJFYg8.js} +0 -0
  348. /package/dist/{c-0VtUNZe8.js → c-xZK3SMJX.js} +0 -0
  349. /package/dist/{cadence-D2-Gq0t7.js → cadence-D2lNr2F0.js} +0 -0
  350. /package/dist/{catppuccin-frappe-DFz6L_QP.js → catppuccin-frappe-CEY1tx7K.js} +0 -0
  351. /package/dist/{catppuccin-latte-DSTm5iMg.js → catppuccin-latte-BjeOZATb.js} +0 -0
  352. /package/dist/{catppuccin-macchiato-D5cPlFDN.js → catppuccin-macchiato-HTrdL1Py.js} +0 -0
  353. /package/dist/{catppuccin-mocha-BBVxciDI.js → catppuccin-mocha-DaNBfKBN.js} +0 -0
  354. /package/dist/{chunk-57QY23SG-B6p-8LKm.js → chunk-57QY23SG-CtPsoWDn.js} +0 -0
  355. /package/dist/{clarity-CTtLMvQr.js → clarity-Di3YnyD4.js} +0 -0
  356. /package/dist/{click-outside-container-CR-VHaIe.js → click-outside-container-DnKND-Y5.js} +0 -0
  357. /package/dist/{clojure-CQ_s11PN.js → clojure-BaI1cLwf.js} +0 -0
  358. /package/dist/{cmake-DF99YgK0.js → cmake-Ct5KlIlx.js} +0 -0
  359. /package/dist/{codeowners-CRbICvXw.js → codeowners-B47SmYv4.js} +0 -0
  360. /package/dist/{codeql-DzUBsQZ9.js → codeql-C-RyBs2A.js} +0 -0
  361. /package/dist/{colors-C2w3uhVQ.js → colors-c_1kHhMM.js} +0 -0
  362. /package/dist/{common-keywords-D7noiVjl.js → common-keywords-qG52oQhe.js} +0 -0
  363. /package/dist/{common-lisp-CkedN1Bk.js → common-lisp-BEkqGRVt.js} +0 -0
  364. /package/dist/{coq-B7OBnzDw.js → coq-BMELwi0x.js} +0 -0
  365. /package/dist/{csharp-nXluFhrZ.js → csharp-D8kGQl5L.js} +0 -0
  366. /package/dist/{css-CPr1yM7G.js → css-D91D9ZFJ.js} +0 -0
  367. /package/dist/{csv-BTyvW9Dm.js → csv-DsiEeqZB.js} +0 -0
  368. /package/dist/{cue-CtcusocM.js → cue-Bd4pPCrb.js} +0 -0
  369. /package/dist/{cypher-BCo9_Gxf.js → cypher-CY6X1_fR.js} +0 -0
  370. /package/dist/{cytoscape.esm-CeO110wc.js → cytoscape.esm-D3qnLru1.js} +0 -0
  371. /package/dist/{d-qe1Yx8Pk.js → d-Dq3ZvYXH.js} +0 -0
  372. /package/dist/{dark-plus-COhL9N0K.js → dark-plus-DAkssByr.js} +0 -0
  373. /package/dist/{dart-C-zwBpkD.js → dart-CRwsUVcK.js} +0 -0
  374. /package/dist/{dax-9HVn3jKI.js → dax-yCcjIsFY.js} +0 -0
  375. /package/dist/{desktop-DcOWBslk.js → desktop-F3trsLZp.js} +0 -0
  376. /package/dist/{diff-0HrJYevs.js → diff-oSoYkmE6.js} +0 -0
  377. /package/dist/{dist-Ck_uei4a.js → dist-BEBl1fVc.js} +0 -0
  378. /package/dist/{dist-BOoOMWpw.js → dist-L1A29jng.js} +0 -0
  379. /package/dist/{dist-CFOn9U6a.js → dist-RsSoJ-Ow.js} +0 -0
  380. /package/dist/{dist-BLj2WRAk.js → dist-WgdRzo73.js} +0 -0
  381. /package/dist/{dist-Dndqm_ya.js → dist-_HymStvo.js} +0 -0
  382. /package/dist/{dist-B9BklWGT.js → dist-zlCh7zB9.js} +0 -0
  383. /package/dist/{docker-oHtI3hEB.js → docker-CzW3fUnV.js} +0 -0
  384. /package/dist/{dockerfile-DSCH583m.js → dockerfile-TsgC6Bmm.js} +0 -0
  385. /package/dist/{dotenv-sY_xnKYe.js → dotenv-C5RAv6mV.js} +0 -0
  386. /package/dist/{dracula-Bh9RLqOx.js → dracula-0J2lfdjD.js} +0 -0
  387. /package/dist/{dracula-soft-Cvp6b01Z.js → dracula-soft-CZX9ZgRW.js} +0 -0
  388. /package/dist/{dream-maker-6snTsD3J.js → dream-maker-D668Dv7O.js} +0 -0
  389. /package/dist/{duckdb-keywords-BCq77yXm.js → duckdb-keywords-DHIKlX_6.js} +0 -0
  390. /package/dist/{ebnf-BnX_o_Yq.js → ebnf-spWsoNeW.js} +0 -0
  391. /package/dist/{emacs-lisp-C6oq3DLk.js → emacs-lisp-9r6Oy_vR.js} +0 -0
  392. /package/dist/{everforest-dark-BYBypIqM.js → everforest-dark-BV3p6ZTT.js} +0 -0
  393. /package/dist/{everforest-light-D4mfI1FM.js → everforest-light-D4viDjQH.js} +0 -0
  394. /package/dist/{fcl-DDKjgNry.js → fcl-DOHQxani.js} +0 -0
  395. /package/dist/{fennel-C4o5c4mv.js → fennel-DdgItcQL.js} +0 -0
  396. /package/dist/{fish-BD9AkN7o.js → fish-Dah-0_yV.js} +0 -0
  397. /package/dist/{fluent-eCvhADRq.js → fluent-Dkmhuwpv.js} +0 -0
  398. /package/dist/{fortran-free-form-CuTQJQMN.js → fortran-free-form-DNLybXh-.js} +0 -0
  399. /package/dist/{gdscript-B40Spm2S.js → gdscript-DtYBhJ1b.js} +0 -0
  400. /package/dist/{gdshader-BZSmNWVa.js → gdshader-BV2VMgVk.js} +0 -0
  401. /package/dist/{genie-Cy_D8EWg.js → genie-BFMUrkvN.js} +0 -0
  402. /package/dist/{gherkin-ct-w1STV.js → gherkin-DppeDWDv.js} +0 -0
  403. /package/dist/{github-dark-CbIY86Wd.js → github-dark-D29L3HCC.js} +0 -0
  404. /package/dist/{github-dark-default-BlPRzuGs.js → github-dark-default-n3il8rgM.js} +0 -0
  405. /package/dist/{github-dark-dimmed-CwyHPTp3.js → github-dark-dimmed-oz4y0Wki.js} +0 -0
  406. /package/dist/{github-dark-high-contrast-Ch3E28Ga.js → github-dark-high-contrast-By7F7Fv0.js} +0 -0
  407. /package/dist/{github-light-BM3RayZ2.js → github-light-CWUlQb3u.js} +0 -0
  408. /package/dist/{github-light-default-BWhIdJf6.js → github-light-default-BffED7Ak.js} +0 -0
  409. /package/dist/{github-light-high-contrast-CKsJGAYi.js → github-light-high-contrast-Pu6OZUhP.js} +0 -0
  410. /package/dist/{gleam-Cwu_dIV7.js → gleam-BUcDYi_k.js} +0 -0
  411. /package/dist/{gnuplot-W2uzVV04.js → gnuplot-C1MgslgQ.js} +0 -0
  412. /package/dist/{go-C0N7iCwo.js → go-CYZiZRxy.js} +0 -0
  413. /package/dist/{groovy-BCFsp4zc.js → groovy-ClTIQGUH.js} +0 -0
  414. /package/dist/{gruvbox-dark-hard-DMFH1kAD.js → gruvbox-dark-hard-Bp86g2V_.js} +0 -0
  415. /package/dist/{gruvbox-dark-medium-DiHZEQva.js → gruvbox-dark-medium-BK2iIEfy.js} +0 -0
  416. /package/dist/{gruvbox-dark-soft-De9URWso.js → gruvbox-dark-soft-B_0xgXvI.js} +0 -0
  417. /package/dist/{gruvbox-light-hard-DzokvGK_.js → gruvbox-light-hard-DBlpi77o.js} +0 -0
  418. /package/dist/{gruvbox-light-medium-C4psEnS5.js → gruvbox-light-medium-CAccdTaF.js} +0 -0
  419. /package/dist/{gruvbox-light-soft-DL0f_6un.js → gruvbox-light-soft-DcO-EcR5.js} +0 -0
  420. /package/dist/{haskell-CDLvQWXZ.js → haskell-A1vUYtej.js} +0 -0
  421. /package/dist/{haxe-CLjmCvGB.js → haxe-DnHFv-TV.js} +0 -0
  422. /package/dist/{hcl-COL_PBAE.js → hcl-CU6j-Xhf.js} +0 -0
  423. /package/dist/{hjson-DkR4GFDO.js → hjson-ClOjKSoB.js} +0 -0
  424. /package/dist/{hlsl-BJKnqnDQ.js → hlsl-Q52_rKUP.js} +0 -0
  425. /package/dist/{houston-DYwZabvW.js → houston-DGG5Ln2h.js} +0 -0
  426. /package/dist/{http-2MVb-dsB.js → http-BgHOhKz2.js} +0 -0
  427. /package/dist/{hy-OsbjMwY0.js → hy-Bja9Numd.js} +0 -0
  428. /package/dist/{imba-Ddkaio98.js → imba-HOr9EX5j.js} +0 -0
  429. /package/dist/{ini-CNrkD-OZ.js → ini-EvmYJ-83.js} +0 -0
  430. /package/dist/{init-BU4YGOOg.js → init-BsH2JjGd.js} +0 -0
  431. /package/dist/{java-Ci6qXyg1.js → java-91iGU5ap.js} +0 -0
  432. /package/dist/{javascript-URuDoMWW.js → javascript-CPeJGbMe.js} +0 -0
  433. /package/dist/{json-DX7TV6Gi.js → json-N0VDmGwx.js} +0 -0
  434. /package/dist/{json5-Djp3uvi3.js → json5-BC1TPZZb.js} +0 -0
  435. /package/dist/{jsonc-XlYTIqzR.js → jsonc-B88-mC9I.js} +0 -0
  436. /package/dist/{jsonl-GwfHzMab.js → jsonl-CXu8ax4T.js} +0 -0
  437. /package/dist/{jsonnet-CPv7P6JN.js → jsonnet-0HtPQpiV.js} +0 -0
  438. /package/dist/{jssm-DdbAawAp.js → jssm-Bk3koTsK.js} +0 -0
  439. /package/dist/{jsx-DkGuBjr4.js → jsx-Cbdt0xgS.js} +0 -0
  440. /package/dist/{kanagawa-dragon-Vs6U6z1S.js → kanagawa-dragon-6wkRCL1O.js} +0 -0
  441. /package/dist/{kanagawa-lotus-Buvs3lt0.js → kanagawa-lotus-21R5pwns.js} +0 -0
  442. /package/dist/{kanagawa-wave-Bj2TElAo.js → kanagawa-wave-DvIMpnk3.js} +0 -0
  443. /package/dist/{katex-DHhoxnpM.js → katex-Cymo3Ugt.js} +0 -0
  444. /package/dist/{kotlin-Cpc_0A7a.js → kotlin-Brxn_vmg.js} +0 -0
  445. /package/dist/{kusto-Co9wVBCz.js → kusto-CLSwwyw9.js} +0 -0
  446. /package/dist/{laserwave-Ca61-FAH.js → laserwave-D2HyGZu4.js} +0 -0
  447. /package/dist/{lean-C0Aa7Fsj.js → lean-C7cjnnxn.js} +0 -0
  448. /package/dist/{less-_PXFbiQM.js → less-Db3q8KJ4.js} +0 -0
  449. /package/dist/{light-plus-5ex0bkO5.js → light-plus-C2C7fw4Z.js} +0 -0
  450. /package/dist/{llvm-BbKHoWwP.js → llvm-DAIyCtJL.js} +0 -0
  451. /package/dist/{log-CAfpKA3d.js → log-vTaTH8PJ.js} +0 -0
  452. /package/dist/{logo-_JZv2_m7.js → logo-D9tY6FNo.js} +0 -0
  453. /package/dist/{luau-By4kXsmQ.js → luau-IjR5-Ywl.js} +0 -0
  454. /package/dist/{main-BeKMoTBP.js → main-CRpnHr48.js} +0 -0
  455. /package/dist/{make-BRzozWYB.js → make-Cu-cnuA_.js} +0 -0
  456. /package/dist/{markdown-DBlXv3d9.js → markdown-C5F3cvct.js} +0 -0
  457. /package/dist/{marked.esm-CqJtK50L.js → marked.esm-DpOvkPbZ.js} +0 -0
  458. /package/dist/{material-theme-UdvytYzK.js → material-theme-DC62_X77.js} +0 -0
  459. /package/dist/{material-theme-darker-ifWxjE_M.js → material-theme-darker-ZdvrV-zE.js} +0 -0
  460. /package/dist/{material-theme-lighter-BJMt_hpe.js → material-theme-lighter-CjF6eqam.js} +0 -0
  461. /package/dist/{material-theme-ocean-DBLAtuvq.js → material-theme-ocean-B1OEP8g-.js} +0 -0
  462. /package/dist/{material-theme-palenight-D_bLdV4c.js → material-theme-palenight-DG7XKA0s.js} +0 -0
  463. /package/dist/{math-B9kWnSVt.js → math-kvEWD7RZ.js} +0 -0
  464. /package/dist/{matlab-SZvC4TdD.js → matlab-Bkgl6cmi.js} +0 -0
  465. /package/dist/{mdx-FGsuIggU.js → mdx-B3dxoxO_.js} +0 -0
  466. /package/dist/{mermaid-Bq_9A0K_.js → mermaid-Vk73zc_P.js} +0 -0
  467. /package/dist/{min-dark-CXAX-ZXK.js → min-dark-BXnwqHsA.js} +0 -0
  468. /package/dist/{min-light-BCnp1thB.js → min-light-t8HWsGPD.js} +0 -0
  469. /package/dist/{mipsasm-B5qmQK6W.js → mipsasm-DM3DsUwR.js} +0 -0
  470. /package/dist/{mojo-GIDM7_y7.js → mojo-CgJHtiXY.js} +0 -0
  471. /package/dist/{monokai-DL7jaPcf.js → monokai-CRI7M-ed.js} +0 -0
  472. /package/dist/{move-DRJvkv3E.js → move-DQHQ0ily.js} +0 -0
  473. /package/dist/{narrat-v6fb47Is.js → narrat-UVO3rS1B.js} +0 -0
  474. /package/dist/{nextflow-C602gAKa.js → nextflow-DrtHoX7E.js} +0 -0
  475. /package/dist/{nginx-xAcu9XCN.js → nginx-DJ7UgEOR.js} +0 -0
  476. /package/dist/{night-owl-Q-U_lEu6.js → night-owl-Ci5d2mya.js} +0 -0
  477. /package/dist/{nix-BRjH373I.js → nix-Cgk0qZB-.js} +0 -0
  478. /package/dist/{nord-CRIAyay1.js → nord-D3dA8PCc.js} +0 -0
  479. /package/dist/{nushell-5Ddvrppp.js → nushell-smo4Ehcx.js} +0 -0
  480. /package/dist/{objective-c-zrea_Ajz.js → objective-c-CVuojEvS.js} +0 -0
  481. /package/dist/{objective-cpp-BMgGRJTH.js → objective-cpp-Bpp59CkK.js} +0 -0
  482. /package/dist/{ocaml-Cc5CTR8t.js → ocaml-DYQwODYU.js} +0 -0
  483. /package/dist/{one-dark-pro-cEF3x_tc.js → one-dark-pro-CdYrsWA6.js} +0 -0
  484. /package/dist/{one-light-B0buW1FQ.js → one-light-B0fXewxa.js} +0 -0
  485. /package/dist/{pascal-C5MhYtdx.js → pascal-G_r9auPk.js} +0 -0
  486. /package/dist/{path-B-wCTTNY.js → path-DIzMdTua.js} +0 -0
  487. /package/dist/{plastic-4xY83A97.js → plastic-CC7C-r0m.js} +0 -0
  488. /package/dist/{plsql-DiS5vMuw.js → plsql-DmZBDDMQ.js} +0 -0
  489. /package/dist/{po-CE5EllyY.js → po-Bdl0SmZa.js} +0 -0
  490. /package/dist/{poimandres-C02cLu8D.js → poimandres-BPoRyzO_.js} +0 -0
  491. /package/dist/{polar-NxJPG_A1.js → polar-DdEuU550.js} +0 -0
  492. /package/dist/{postcss-BKFdDTSc.js → postcss-DgtXUb_w.js} +0 -0
  493. /package/dist/{powerquery-ClOwEHrw.js → powerquery-D5rcV1b7.js} +0 -0
  494. /package/dist/{powershell-DtnsETbd.js → powershell-CreFd35r.js} +0 -0
  495. /package/dist/{prisma-DQRqqd02.js → prisma-BSSS_9KD.js} +0 -0
  496. /package/dist/{prolog-BXwR1iEr.js → prolog-Cxq7ex3-.js} +0 -0
  497. /package/dist/{proto-DbdCTNJQ.js → proto-Di89JUpw.js} +0 -0
  498. /package/dist/{puppet-C0fmEeZ8.js → puppet-D-8yt0A2.js} +0 -0
  499. /package/dist/{purescript-DCzClV2L.js → purescript-Dsyys8lw.js} +0 -0
  500. /package/dist/{python-C9XsBnIS.js → python-DyJn0gY6.js} +0 -0
  501. /package/dist/{qmldir-BgPLvM_B.js → qmldir-Djlda7Cs.js} +0 -0
  502. /package/dist/{qss-DH_QKtyV.js → qss-DtDj95Ib.js} +0 -0
  503. /package/dist/{r-CE7tet3U.js → r-9vHvMbjq.js} +0 -0
  504. /package/dist/{racket-BXFuJ8S4.js → racket-BQnOONmJ.js} +0 -0
  505. /package/dist/{raku-BV2f5Bfp.js → raku-DZArQH1C.js} +0 -0
  506. /package/dist/{react-plotly-BSDG5040.js → react-plotly-B8bzf42j.js} +0 -0
  507. /package/dist/{red-NReit8D_.js → red-DdIrZaxO.js} +0 -0
  508. /package/dist/{reg-y78MnffL.js → reg-CM_FOY35.js} +0 -0
  509. /package/dist/{regexp-BkaqnlX1.js → regexp-Dh_KbmYB.js} +0 -0
  510. /package/dist/{rel-ChUSBGxs.js → rel-Cf8vFh7G.js} +0 -0
  511. /package/dist/{riscv-Cw3bJM3f.js → riscv-DFLesDmH.js} +0 -0
  512. /package/dist/{rose-pine-C_LOz2fx.js → rose-pine-C6TQipgc.js} +0 -0
  513. /package/dist/{rose-pine-dawn-DAyopyJp.js → rose-pine-dawn-DUw8_6c0.js} +0 -0
  514. /package/dist/{rose-pine-moon-D65s7ycF.js → rose-pine-moon-5rpZhuOi.js} +0 -0
  515. /package/dist/{rust-CNYdgIe2.js → rust-CLaTh4j5.js} +0 -0
  516. /package/dist/{sass-CTLsc-He.js → sass-DXaowKfb.js} +0 -0
  517. /package/dist/{scala-DAvnmlLT.js → scala-BwYNCkHH.js} +0 -0
  518. /package/dist/{scheme-BQ8akAiY.js → scheme-Cwv1j_5J.js} +0 -0
  519. /package/dist/{sdbl-BqdEdxub.js → sdbl-ZWGgjiIv.js} +0 -0
  520. /package/dist/{shellscript-SX0nv4lc.js → shellscript-CHtXIYYk.js} +0 -0
  521. /package/dist/{slack-dark-DP48wn3J.js → slack-dark-CEL96wwz.js} +0 -0
  522. /package/dist/{slack-ochin-JvZjQMr4.js → slack-ochin-Ih8BUTjo.js} +0 -0
  523. /package/dist/{smalltalk-Cd_zoqRt.js → smalltalk-Bz_Wq6O1.js} +0 -0
  524. /package/dist/{snazzy-light-Dn5RlLOZ.js → snazzy-light-BtCbn8qt.js} +0 -0
  525. /package/dist/{solarized-dark-juR81_fw.js → solarized-dark-2ncbM9MD.js} +0 -0
  526. /package/dist/{solarized-light-U1mjAkaE.js → solarized-light-Bw0RlZC7.js} +0 -0
  527. /package/dist/{solidity-DfzZ5d-O.js → solidity-Dl1Szhqk.js} +0 -0
  528. /package/dist/{solr-CNZE5yrI.js → solr-Kwz1kGU1.js} +0 -0
  529. /package/dist/{splunk-K8fn70fG.js → splunk-D_aQa7Wj.js} +0 -0
  530. /package/dist/{spreadsheet-DQPJGjZQ.js → spreadsheet-D6FABxcn.js} +0 -0
  531. /package/dist/{sql-CAF6o9lq.js → sql-Bl2dBUIk.js} +0 -0
  532. /package/dist/{sql-DRtPaiem.js → sql-ZN4U_4B1.js} +0 -0
  533. /package/dist/{ssh-config-BXqbrXDi.js → ssh-config-BZDNWhA1.js} +0 -0
  534. /package/dist/{stex-D1sWhacG.js → stex-B5cVJDuZ.js} +0 -0
  535. /package/dist/{stylus-C_YQrfMD.js → stylus-ByL4A079.js} +0 -0
  536. /package/dist/{swift-Ceo6tYUp.js → swift-scoJKQVi.js} +0 -0
  537. /package/dist/{synthwave-84-CHXFapSW.js → synthwave-84-DKtuD_wy.js} +0 -0
  538. /package/dist/{system-verilog-D4CJAYbc.js → system-verilog-Bv-1IX35.js} +0 -0
  539. /package/dist/{systemd-CHq8PvwE.js → systemd-BzGxwp-W.js} +0 -0
  540. /package/dist/{talonscript-D6aZJv_Q.js → talonscript-BSbePVqO.js} +0 -0
  541. /package/dist/{tasl-BWmlUeU7.js → tasl-BA3aDFU3.js} +0 -0
  542. /package/dist/{tcl-C3YCHzLh.js → tcl-BAw9Lg69.js} +0 -0
  543. /package/dist/{terraform-y7dSvHa7.js → terraform-D50En-Co.js} +0 -0
  544. /package/dist/{tiddlywiki-DotFbxlj.js → tiddlywiki-Bl1_jWGY.js} +0 -0
  545. /package/dist/{tiki-cZC65BMY.js → tiki-BDy2Aqau.js} +0 -0
  546. /package/dist/{timer--XD4eQXe.js → timer-Dde4NBPL.js} +0 -0
  547. /package/dist/{tokyo-night-A0-IVocs.js → tokyo-night-DXO9qP_t.js} +0 -0
  548. /package/dist/{toml-OrfgdRYt.js → toml-Cubg1uUB.js} +0 -0
  549. /package/dist/{treemap-BjIqNFzX.js → treemap-BLQ6nYXt.js} +0 -0
  550. /package/dist/{tsv-B2Hf1H8S.js → tsv-vZzoqqJp.js} +0 -0
  551. /package/dist/{tsx-DGPbtVdN.js → tsx-LnCcyy2E.js} +0 -0
  552. /package/dist/{turtle-DsNtk6IM.js → turtle-CMwgyTdm.js} +0 -0
  553. /package/dist/{typescript-CCzz7yCV.js → typescript-B5rt_l9e.js} +0 -0
  554. /package/dist/{typespec-DUIO3iAy.js → typespec-CkLBOALm.js} +0 -0
  555. /package/dist/{typst-CzQn6sYd.js → typst-C-inGA8y.js} +0 -0
  556. /package/dist/{v-DDSEES9z.js → v-CFTQQNNR.js} +0 -0
  557. /package/dist/{vala-Cbu40xKX.js → vala-CEP8R4Sr.js} +0 -0
  558. /package/dist/{vb-DtlqoV5V.js → vb-LCy_gAYP.js} +0 -0
  559. /package/dist/{verilog-CCzhlD5Z.js → verilog-CjetHjeY.js} +0 -0
  560. /package/dist/{vesper-DJTKEjYY.js → vesper-C1ptU1oI.js} +0 -0
  561. /package/dist/{vhdl-DDdF26gx.js → vhdl-BwoGC9LM.js} +0 -0
  562. /package/dist/{viml-Csgqqvxa.js → viml-CydZIHfP.js} +0 -0
  563. /package/dist/{vitesse-black-B_9_MY9n.js → vitesse-black-C-p75DbZ.js} +0 -0
  564. /package/dist/{vitesse-dark-5oLbBBDP.js → vitesse-dark-Ai-v_ovz.js} +0 -0
  565. /package/dist/{vitesse-light-DY7aCeME.js → vitesse-light-DQ9NGEHC.js} +0 -0
  566. /package/dist/{vyper-CJCjsleu.js → vyper-BF3ELXiG.js} +0 -0
  567. /package/dist/{wasm-DtNse08w.js → wasm-OjKRvUGa.js} +0 -0
  568. /package/dist/{wasm-BSZ3My3r.js → wasm-sMdbPauS.js} +0 -0
  569. /package/dist/{wenyan-BvPQ-H9y.js → wenyan-jAkt3eQa.js} +0 -0
  570. /package/dist/{wgsl-B65N7iDC.js → wgsl-C164tHZL.js} +0 -0
  571. /package/dist/{wikitext-BIFkMlQo.js → wikitext-DVNWOcXh.js} +0 -0
  572. /package/dist/{wit-DP8045yv.js → wit-BiebwFst.js} +0 -0
  573. /package/dist/{wolfram-DHmulSSf.js → wolfram-Dej0TMYQ.js} +0 -0
  574. /package/dist/{yaml-BW6YUxU4.js → yaml-D1dcMKz3.js} +0 -0
  575. /package/dist/{zenscript-CkfsSip8.js → zenscript-DR8tpung.js} +0 -0
  576. /package/dist/{zig-DxQnpavN.js → zig-DqxNCCzt.js} +0 -0
  577. /package/src/components/{chat → markdown}/markdown-renderer.css +0 -0
  578. /package/src/components/{chat → markdown}/markdown-renderer.tsx +0 -0
@@ -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
  };
@@ -194,7 +194,7 @@ const InstallPackageForm: React.FC<{
194
194
  const installPackages = () => {
195
195
  const cleanedInput = stripPackageManagerPrefix(input);
196
196
  handleInstallPackages(
197
- cleanedInput.split(",").map((p) => p.trim()),
197
+ [cleanedInput], // the backend will handle splitting the packages
198
198
  onSuccessInstallPackages,
199
199
  );
200
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,
@@ -1,3 +1,4 @@
1
+ /* Copyright 2024 Marimo. All rights reserved. */
1
2
  import { describe, expect, it } from "vitest";
2
3
  import type { FileInfo } from "@/core/network/types";
3
4
  import { filterHiddenTree, isDirectoryOrFileHidden } from "../file-explorer";
@@ -130,6 +130,11 @@ export const FileExplorer: React.FC<{
130
130
  setOpenState({});
131
131
  });
132
132
 
133
+ const visibleData = React.useMemo(
134
+ () => filterHiddenTree(data, showHiddenFiles),
135
+ [data, showHiddenFiles],
136
+ );
137
+
133
138
  if (isPending) {
134
139
  return <Spinner size="medium" centered={true} />;
135
140
  }
@@ -168,10 +173,6 @@ export const FileExplorer: React.FC<{
168
173
  );
169
174
  }
170
175
 
171
- const visibleData = React.useMemo(
172
- () => filterHiddenTree(data, showHiddenFiles),
173
- [data, showHiddenFiles],
174
- );
175
176
  return (
176
177
  <>
177
178
  <Toolbar
@@ -729,7 +730,7 @@ export function filterHiddenTree(
729
730
  continue;
730
731
  }
731
732
  let next = item;
732
- if (item.children && item.children.length) {
733
+ if (item.children) {
733
734
  const kids = filterHiddenTree(item.children, showHidden);
734
735
  if (kids !== item.children) {
735
736
  next = { ...item, children: kids };
@@ -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,
@@ -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)}