@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
package/src/css/md.css CHANGED
@@ -78,6 +78,11 @@ a .markdown iconify-icon:first-child {
78
78
  margin-inline-end: 0.4em;
79
79
  }
80
80
 
81
+ /* make links and their contents inline-flex to avoid extra gaps */
82
+ a > .markdown > .paragraph {
83
+ display: inline-flex;
84
+ }
85
+
81
86
  iconify-icon {
82
87
  display: inline-flex;
83
88
  align-items: center;
@@ -141,7 +141,7 @@ describe("sanitizeHtml", () => {
141
141
  const html =
142
142
  "<marimo-mermaid data-diagram='&quot;sequenceDiagram&#92;n Alice-&gt;&gt;John&#92;n John--&gt;&gt;Alice&#92;n &quot;'></marimo-mermaid>";
143
143
  expect(sanitizeHtml(html)).toMatchInlineSnapshot(
144
- `"<marimo-mermaid></marimo-mermaid>"`,
144
+ `"<marimo-mermaid data-diagram="&quot;sequenceDiagram\\n Alice->>John\\n John-->>Alice\\n &quot;"></marimo-mermaid>"`,
145
145
  );
146
146
  });
147
147
 
@@ -80,7 +80,9 @@ export function sanitizeHtml(html: string) {
80
80
  tagNameCheck: /^(marimo-[A-Za-z][\w-]*|iconify-icon)$/,
81
81
  attributeNameCheck: /^[A-Za-z][\w-]*$/,
82
82
  },
83
- SAFE_FOR_XML: html.includes("marimo-mermaid"),
83
+ // This flag means we should sanitize such that is it safe for XML,
84
+ // but this is only used for HTML content.
85
+ SAFE_FOR_XML: !html.includes("marimo-mermaid"),
84
86
  };
85
87
  return DOMPurify.sanitize(html, sanitizationOptions);
86
88
  }
@@ -63,6 +63,7 @@ import { type CellId, findCellId } from "@/core/cells/ids";
63
63
  import { slotsController } from "@/core/slots/slots";
64
64
  import { store } from "@/core/state/jotai";
65
65
  import { isStaticNotebook } from "@/core/static/static-state";
66
+ import { isInVscodeExtension } from "@/core/vscode/is-in-vscode";
66
67
  import { useAsyncData } from "@/hooks/useAsyncData";
67
68
  import { useDeepCompareMemoize } from "@/hooks/useDeepCompareMemoize";
68
69
  import { useEffectSkipFirstRender } from "@/hooks/useEffectSkipFirstRender";
@@ -179,6 +180,7 @@ interface Data<T> {
179
180
  showDataTypes: boolean;
180
181
  showPageSizeSelector: boolean;
181
182
  showColumnExplorer: boolean;
183
+ showRowExplorer: boolean;
182
184
  showChartBuilder: boolean;
183
185
  rowHeaders: FieldTypesWithExternalType;
184
186
  fieldTypes?: FieldTypesWithExternalType | null;
@@ -250,6 +252,7 @@ export const DataTablePlugin = createPlugin<S>("marimo-table")
250
252
  showDataTypes: z.boolean().default(true),
251
253
  showPageSizeSelector: z.boolean().default(true),
252
254
  showColumnExplorer: z.boolean().default(true),
255
+ showRowExplorer: z.boolean().default(true),
253
256
  showChartBuilder: z.boolean().default(true),
254
257
  rowHeaders: columnToFieldTypesSchema,
255
258
  freezeColumnsLeft: z.array(z.string()).optional(),
@@ -718,6 +721,7 @@ const DataTableComponent = ({
718
721
  showDownload,
719
722
  showPageSizeSelector,
720
723
  showColumnExplorer,
724
+ showRowExplorer,
721
725
  showChartBuilder,
722
726
  showDataTypes,
723
727
  rowHeaders,
@@ -899,6 +903,8 @@ const DataTableComponent = ({
899
903
  const showColExplorer =
900
904
  showColumnExplorer && preview_column && isPanelOpen("column-explorer");
901
905
 
906
+ const isInVscode = isInVscodeExtension();
907
+
902
908
  return (
903
909
  <>
904
910
  {/* When the totalRows is "too_many" and the pageSize is the same as the
@@ -988,7 +994,10 @@ const DataTableComponent = ({
988
994
  toggleDisplayHeader={toggleDisplayHeader}
989
995
  showChartBuilder={showChartBuilder}
990
996
  showPageSizeSelector={showPageSizeSelector}
991
- showColumnExplorer={showColumnExplorer}
997
+ // Hidden in VSCode (for now) because we don't have a panel to show
998
+ // the column/row explorer.
999
+ showColumnExplorer={showColumnExplorer && !isInVscode}
1000
+ showRowExplorer={showRowExplorer && !isInVscode}
992
1001
  togglePanel={togglePanel}
993
1002
  isPanelOpen={isPanelOpen}
994
1003
  viewedRowIdx={viewedRowIdx}
@@ -14,6 +14,7 @@ interface Data {
14
14
  start: string;
15
15
  stop: string;
16
16
  step?: string;
17
+ precision: "hour" | "minute" | "second";
17
18
  fullWidth: boolean;
18
19
  disabled?: boolean;
19
20
  }
@@ -27,6 +28,7 @@ export class DateTimePickerPlugin implements IPlugin<T, Data> {
27
28
  start: z.string(),
28
29
  stop: z.string(),
29
30
  step: z.string().optional(),
31
+ precision: z.enum(["hour", "minute", "second"]).default("minute"),
30
32
  fullWidth: z.boolean().default(false),
31
33
  disabled: z.boolean().optional(),
32
34
  });
@@ -63,7 +65,7 @@ const DateTimePickerComponent = (props: DateTimePickerProps): JSX.Element => {
63
65
  return (
64
66
  <Labeled label={props.label} fullWidth={props.fullWidth}>
65
67
  <DatePicker
66
- granularity="minute"
68
+ granularity={props.precision}
67
69
  value={parsedValue}
68
70
  onChange={handleInput}
69
71
  aria-label={props.label ?? "date time picker"}
@@ -11,6 +11,7 @@ interface DateTimeData {
11
11
  label: string | null;
12
12
  start: string;
13
13
  stop: string;
14
+ precision: "hour" | "minute" | "second";
14
15
  fullWidth: boolean;
15
16
  }
16
17
 
@@ -37,6 +38,7 @@ describe("DateTimePickerPlugin", () => {
37
38
  label: null,
38
39
  start: "2024-01-01T00:00:00",
39
40
  stop: "2024-12-31T23:59:59",
41
+ precision: "minute",
40
42
  fullWidth: false,
41
43
  },
42
44
  functions: {},
@@ -68,6 +70,7 @@ describe("DateTimePickerPlugin", () => {
68
70
  // These are the exact values that datetime.min and datetime.max produce
69
71
  start: "0001-01-01T00:00:00",
70
72
  stop: "9999-12-31T23:59:59",
73
+ precision: "minute",
71
74
  fullWidth: false,
72
75
  },
73
76
  functions: {},
@@ -89,6 +89,7 @@ export const ChatPlugin = createPlugin<{ messages: ChatMessage[] }>(
89
89
  send_prompt={props.functions.send_prompt}
90
90
  value={props.value?.messages || Arrays.EMPTY}
91
91
  setValue={(messages) => props.setValue({ messages })}
92
+ host={props.host}
92
93
  />
93
94
  </Suspense>
94
95
  </TooltipProvider>
@@ -12,6 +12,7 @@ import {
12
12
  DownloadIcon,
13
13
  HelpCircleIcon,
14
14
  PaperclipIcon,
15
+ RotateCwIcon,
15
16
  SendIcon,
16
17
  SettingsIcon,
17
18
  Trash2Icon,
@@ -42,7 +43,12 @@ import {
42
43
  import { Tooltip } from "@/components/ui/tooltip";
43
44
  import { toast } from "@/components/ui/use-toast";
44
45
  import { moveToEndOfEditor } from "@/core/codemirror/utils";
46
+ import { MarimoIncomingMessageEvent } from "@/core/dom/events";
45
47
  import { useAsyncData } from "@/hooks/useAsyncData";
48
+ import {
49
+ type HTMLElementNotDerivedFromRef,
50
+ useEventListener,
51
+ } from "@/hooks/useEventListener";
46
52
  import { cn } from "@/utils/cn";
47
53
  import { copyToClipboard } from "@/utils/copy";
48
54
  import { Logger } from "@/utils/Logger";
@@ -63,6 +69,7 @@ interface Props extends PluginFunctions {
63
69
  allowAttachments: boolean | string[];
64
70
  value: ChatMessage[];
65
71
  setValue: (messages: ChatMessage[]) => void;
72
+ host: HTMLElement;
66
73
  }
67
74
 
68
75
  export const Chatbot: React.FC<Props> = (props) => {
@@ -74,6 +81,12 @@ export const Chatbot: React.FC<Props> = (props) => {
74
81
  const codeMirrorInputRef = useRef<ReactCodeMirrorRef>(null);
75
82
  const scrollContainerRef = useRef<HTMLDivElement>(null);
76
83
 
84
+ // Track streaming state - maps backend message_id to frontend message index
85
+ const streamingStateRef = useRef<{
86
+ backendMessageId: string | null;
87
+ frontendMessageIndex: number | null;
88
+ }>({ backendMessageId: null, frontendMessageIndex: null });
89
+
77
90
  const { data: initialMessages } = useAsyncData(async () => {
78
91
  const chatMessages = await props.get_chat_history({});
79
92
  const messages: UIMessage[] = chatMessages.messages.map((message, idx) => ({
@@ -113,6 +126,19 @@ export const Chatbot: React.FC<Props> = (props) => {
113
126
  .join("\n"),
114
127
  parts: m.parts,
115
128
  }));
129
+
130
+ // Create a placeholder message for streaming
131
+ const messageId = Date.now().toString();
132
+
133
+ setMessages((prev) => [
134
+ ...prev,
135
+ {
136
+ id: messageId,
137
+ role: "assistant",
138
+ parts: [{ type: "text", text: "" }],
139
+ },
140
+ ]);
141
+
116
142
  const response = await props.send_prompt({
117
143
  messages: messages,
118
144
  config: {
@@ -124,18 +150,35 @@ export const Chatbot: React.FC<Props> = (props) => {
124
150
  presence_penalty: config.presence_penalty,
125
151
  },
126
152
  });
127
- // Update local state with AI response
128
- setMessages((prev) => [
129
- ...prev,
130
- {
131
- id: Date.now().toString(),
132
- role: "assistant",
133
- parts: [{ type: "text", text: response }],
134
- },
135
- ]);
153
+
154
+ // If streaming didn't happen (non-generator response), update the message
155
+ // Check if streaming state is still set (meaning no chunks were received)
156
+ if (
157
+ streamingStateRef.current.backendMessageId === null &&
158
+ streamingStateRef.current.frontendMessageIndex === null
159
+ ) {
160
+ setMessages((prev) => {
161
+ const updated = [...prev];
162
+ const index = updated.findIndex((m) => m.id === messageId);
163
+ if (index !== -1) {
164
+ updated[index] = {
165
+ ...updated[index],
166
+ parts: [{ type: "text", text: response }],
167
+ };
168
+ }
169
+ return updated;
170
+ });
171
+ }
172
+
136
173
  return new Response(response);
137
174
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
138
175
  } catch (error: any) {
176
+ // Clear streaming state on error
177
+ streamingStateRef.current = {
178
+ backendMessageId: null,
179
+ frontendMessageIndex: null,
180
+ };
181
+
139
182
  // HACK: strip the error message to clean up the response
140
183
  const strippedError = error.message
141
184
  .split("failed with exception ")
@@ -152,12 +195,98 @@ export const Chatbot: React.FC<Props> = (props) => {
152
195
  fileInputRef.current.value = "";
153
196
  }
154
197
  Logger.debug("Finished streaming message:", message);
198
+
199
+ // Clear streaming state
200
+ streamingStateRef.current = {
201
+ backendMessageId: null,
202
+ frontendMessageIndex: null,
203
+ };
155
204
  },
156
205
  onError: (error) => {
157
206
  Logger.error("An error occurred:", error);
207
+ // Clear streaming state on error
208
+ streamingStateRef.current = {
209
+ backendMessageId: null,
210
+ frontendMessageIndex: null,
211
+ };
158
212
  },
159
213
  });
160
214
 
215
+ // Listen for streaming chunks from backend
216
+ useEventListener(
217
+ props.host as HTMLElementNotDerivedFromRef,
218
+ MarimoIncomingMessageEvent.TYPE,
219
+ (e) => {
220
+ const message = e.detail.message;
221
+ if (
222
+ typeof message === "object" &&
223
+ message !== null &&
224
+ "type" in message &&
225
+ message.type === "stream_chunk"
226
+ ) {
227
+ const chunkMessage = message as {
228
+ type: string;
229
+ message_id: string;
230
+ content: string;
231
+ is_final: boolean;
232
+ };
233
+
234
+ // Initialize streaming state on first chunk if not already set
235
+ if (streamingStateRef.current.backendMessageId === null) {
236
+ // Find the last assistant message (which should be the placeholder we created)
237
+ setMessages((prev) => {
238
+ const updated = [...prev];
239
+ // Find the last assistant message
240
+ for (let i = updated.length - 1; i >= 0; i--) {
241
+ if (updated[i].role === "assistant") {
242
+ streamingStateRef.current = {
243
+ backendMessageId: chunkMessage.message_id,
244
+ frontendMessageIndex: i,
245
+ };
246
+ break;
247
+ }
248
+ }
249
+ return updated;
250
+ });
251
+ }
252
+
253
+ // Only process chunks for the current streaming message
254
+ const frontendIndex = streamingStateRef.current.frontendMessageIndex;
255
+ if (
256
+ streamingStateRef.current.backendMessageId ===
257
+ chunkMessage.message_id &&
258
+ frontendIndex !== null
259
+ ) {
260
+ setMessages((prev) => {
261
+ const updated = [...prev];
262
+ const index = frontendIndex;
263
+
264
+ // Update the message at the tracked index
265
+ if (index < updated.length) {
266
+ const messageToUpdate = updated[index];
267
+ if (messageToUpdate.role === "assistant") {
268
+ updated[index] = {
269
+ ...messageToUpdate,
270
+ parts: [{ type: "text", text: chunkMessage.content }],
271
+ };
272
+ }
273
+ }
274
+
275
+ return updated;
276
+ });
277
+
278
+ // Clear streaming state when final chunk arrives
279
+ if (chunkMessage.is_final) {
280
+ streamingStateRef.current = {
281
+ backendMessageId: null,
282
+ frontendMessageIndex: null,
283
+ };
284
+ }
285
+ }
286
+ }
287
+ },
288
+ );
289
+
161
290
  const isLoading = status === "submitted" || status === "streaming";
162
291
 
163
292
  const handleDelete = (id: string) => {
@@ -283,13 +412,14 @@ export const Chatbot: React.FC<Props> = (props) => {
283
412
  <Button
284
413
  variant="text"
285
414
  size="icon"
415
+ disabled={messages.length === 0}
286
416
  onClick={() => {
287
417
  setMessages([]);
288
418
  props.setValue([]);
289
419
  props.delete_chat_history({});
290
420
  }}
291
421
  >
292
- <Trash2Icon className="h-3 w-3" />
422
+ <RotateCwIcon className="h-3 w-3" />
293
423
  </Button>
294
424
  </div>
295
425
  <div
@@ -6,6 +6,7 @@ import {
6
6
  AlertDialog,
7
7
  AlertDialogAction,
8
8
  AlertDialogContent,
9
+ AlertDialogDescription,
9
10
  AlertDialogFooter,
10
11
  AlertDialogHeader,
11
12
  AlertDialogTitle,
@@ -48,9 +49,12 @@ export const ErrorBanner = ({
48
49
  <AlertDialogHeader>
49
50
  <AlertDialogTitle className="text-error">Error</AlertDialogTitle>
50
51
  </AlertDialogHeader>
51
- <pre className="text-error text-sm p-2 font-mono overflow-auto whitespace-pre-wrap">
52
- {message}
53
- </pre>
52
+ <AlertDialogDescription
53
+ asChild={true}
54
+ className="text-error text-sm p-2 font-mono overflow-auto whitespace-pre-wrap"
55
+ >
56
+ <pre>{message}</pre>
57
+ </AlertDialogDescription>
54
58
  <AlertDialogFooter>
55
59
  <AlertDialogAction autoFocus={true} onClick={() => setOpen(false)}>
56
60
  Ok
@@ -297,6 +297,7 @@ export const DataFrameComponent = memo(
297
297
  get_column_summaries={getColumnSummaries}
298
298
  showPageSizeSelector={(total_rows && total_rows > 5) || false}
299
299
  showColumnExplorer={false}
300
+ showRowExplorer={true}
300
301
  showChartBuilder={false}
301
302
  value={Arrays.EMPTY}
302
303
  setValue={Functions.NOOP}
@@ -24,6 +24,7 @@ export class VegaPlugin implements IPlugin<VegaComponentState, Data> {
24
24
  .union([z.boolean(), z.literal("point"), z.literal("interval")])
25
25
  .default(true),
26
26
  fieldSelection: z.union([z.boolean(), z.array(z.string())]).default(true),
27
+ embedOptions: z.object({}).passthrough().default({}),
27
28
  });
28
29
 
29
30
  render(props: IPluginProps<VegaComponentState, Data>): JSX.Element {
@@ -33,6 +33,7 @@ export interface Data {
33
33
  spec: VegaLiteSpec;
34
34
  chartSelection: boolean | "point" | "interval";
35
35
  fieldSelection: boolean | string[];
36
+ embedOptions?: Record<string, unknown>;
36
37
  }
37
38
 
38
39
  export interface VegaComponentState {
@@ -60,6 +61,7 @@ const VegaComponent = ({
60
61
  chartSelection,
61
62
  fieldSelection,
62
63
  spec,
64
+ embedOptions,
63
65
  }: VegaComponentProps<VegaComponentState>) => {
64
66
  const { data: resolvedSpec, error } = useAsyncData(async () => {
65
67
  // We try to resolve the data before passing it to Vega
@@ -84,6 +86,7 @@ const VegaComponent = ({
84
86
  chartSelection={chartSelection}
85
87
  fieldSelection={fieldSelection}
86
88
  spec={resolvedSpec}
89
+ embedOptions={embedOptions}
87
90
  />
88
91
  );
89
92
  };
@@ -94,12 +97,35 @@ const LoadedVegaComponent = ({
94
97
  chartSelection,
95
98
  fieldSelection,
96
99
  spec,
100
+ embedOptions,
97
101
  }: VegaComponentProps<VegaComponentState>): JSX.Element => {
98
102
  const { theme } = useTheme();
99
103
  const vegaRef = useRef<HTMLDivElement>(null);
100
104
  const vegaView = useRef<View>(undefined);
101
105
  const [error, setError] = useState<Error>();
102
106
 
107
+ // Merge default actions with user-provided embed options
108
+ const actions = useMemo(() => {
109
+ // If embedOptions contains 'actions', use it directly
110
+ if (embedOptions && "actions" in embedOptions) {
111
+ return embedOptions.actions as
112
+ | boolean
113
+ | {
114
+ export?: boolean;
115
+ source?: boolean;
116
+ compiled?: boolean;
117
+ editor?: boolean;
118
+ }
119
+ | undefined;
120
+ }
121
+
122
+ // Otherwise use defaults
123
+ return {
124
+ source: false,
125
+ compiled: false,
126
+ };
127
+ }, [embedOptions]);
128
+
103
129
  // Aggressively memoize the spec, so Vega doesn't re-render/re-mount the component
104
130
  const specMemo = useDeepCompareMemoize(spec);
105
131
  const selectableSpec = useMemo(() => {
@@ -289,11 +315,6 @@ const LoadedVegaComponent = ({
289
315
  );
290
316
  };
291
317
 
292
- const actions = {
293
- source: false,
294
- compiled: false,
295
- };
296
-
297
318
  /**
298
319
  * Convert any sets to a list before passing to the BE
299
320
  */
@@ -14,11 +14,13 @@ import {
14
14
  import { Tooltip, TooltipProvider } from "@/components/ui/tooltip";
15
15
  import { renderHTML } from "@/plugins/core/RenderHTML";
16
16
  import { cn } from "@/utils/cn";
17
+ import { appendQueryParams } from "@/utils/urls";
17
18
  import type {
18
19
  IStatelessPlugin,
19
20
  IStatelessPluginProps,
20
21
  } from "../stateless-plugin";
21
22
  import "./navigation-menu.css";
23
+ import { KnownQueryParams } from "@/core/constants";
22
24
 
23
25
  interface MenuItem {
24
26
  label: string;
@@ -99,6 +101,15 @@ const NavMenuComponent = ({
99
101
  return "_self";
100
102
  };
101
103
 
104
+ const preserveQueryParams = (href: string) => {
105
+ const currentUrl = new URL(globalThis.location.href);
106
+ return appendQueryParams({
107
+ href,
108
+ queryParams: currentUrl.search,
109
+ keys: [KnownQueryParams.filePath],
110
+ });
111
+ };
112
+
102
113
  const renderMenuItem = (item: MenuItem | MenuItemGroup) => {
103
114
  if ("items" in item) {
104
115
  return orientation === "horizontal" ? (
@@ -113,7 +124,7 @@ const NavMenuComponent = ({
113
124
  <ListItem
114
125
  key={subItem.label}
115
126
  label={subItem.label}
116
- href={subItem.href}
127
+ href={preserveQueryParams(subItem.href)}
117
128
  target={target(subItem.href)}
118
129
  >
119
130
  {subItem.description &&
@@ -142,7 +153,7 @@ const NavMenuComponent = ({
142
153
  {maybeWithTooltip(
143
154
  <NavigationMenuLink
144
155
  key={subItem.label}
145
- href={subItem.href}
156
+ href={preserveQueryParams(subItem.href)}
146
157
  target={target(subItem.href)}
147
158
  className={navigationMenuTriggerStyle({
148
159
  orientation: orientation,
@@ -162,7 +173,7 @@ const NavMenuComponent = ({
162
173
  return (
163
174
  <NavigationMenuItem key={item.label}>
164
175
  <NavigationMenuLink
165
- href={item.href}
176
+ href={preserveQueryParams(item.href)}
166
177
  target={target(item.href)}
167
178
  className={navigationMenuTriggerStyle({
168
179
  orientation: orientation,
@@ -93,10 +93,13 @@ export const ProgressComponent = ({
93
93
 
94
94
  const elements: React.ReactNode[] = [];
95
95
  if (rate) {
96
- elements.push(
97
- <span key="rate">{rate} iter/s</span>,
98
- <span key="spacer-rate">&middot;</span>,
99
- );
96
+ if (rate < 1) {
97
+ elements.push(<span key="rate">{prettyTime(1 / rate)} per iter</span>);
98
+ } else {
99
+ elements.push(<span key="rate">{rate} iter/s</span>);
100
+ }
101
+
102
+ elements.push(<span key="spacer-rate">&middot;</span>);
100
103
  }
101
104
 
102
105
  if (!hasCompleted && eta) {
@@ -170,6 +173,6 @@ export function prettyTime(seconds: number): string {
170
173
  language: "shortEn",
171
174
  largest: 2,
172
175
  spacer: "",
173
- maxDecimalPoints: 2,
176
+ maxDecimalPoints: seconds < 10 ? 2 : 0,
174
177
  });
175
178
  }
@@ -17,6 +17,7 @@ interface Data {
17
17
  caption?: string;
18
18
  bordered?: boolean;
19
19
  direction?: "increase" | "decrease";
20
+ target_direction?: "increase" | "decrease";
20
21
  }
21
22
 
22
23
  export class StatPlugin implements IStatelessPlugin<Data> {
@@ -28,6 +29,7 @@ export class StatPlugin implements IStatelessPlugin<Data> {
28
29
  caption: z.string().optional(),
29
30
  bordered: z.boolean().default(false),
30
31
  direction: z.enum(["increase", "decrease"]).optional(),
32
+ target_direction: z.enum(["increase", "decrease"]).default("increase"),
31
33
  });
32
34
 
33
35
  render({ data }: IStatelessPluginProps<Data>): JSX.Element {
@@ -41,6 +43,7 @@ export const StatComponent: React.FC<Data> = ({
41
43
  caption,
42
44
  bordered,
43
45
  direction,
46
+ target_direction,
44
47
  }) => {
45
48
  const { locale } = useLocale();
46
49
 
@@ -64,6 +67,10 @@ export const StatComponent: React.FC<Data> = ({
64
67
  return String(value);
65
68
  };
66
69
 
70
+ const onTarget = direction === target_direction;
71
+ const fillColor = onTarget ? "var(--grass-8)" : "var(--red-8)";
72
+ const strokeColor = onTarget ? "var(--grass-9)" : "var(--red-9)";
73
+
67
74
  return (
68
75
  <div
69
76
  className={cn(
@@ -83,15 +90,15 @@ export const StatComponent: React.FC<Data> = ({
83
90
  {direction === "increase" && (
84
91
  <TriangleIcon
85
92
  className="w-4 h-4 mr-1 p-0.5"
86
- fill="var(--grass-8)"
87
- stroke="var(--grass-9)"
93
+ fill={fillColor}
94
+ stroke={strokeColor}
88
95
  />
89
96
  )}
90
97
  {direction === "decrease" && (
91
98
  <TriangleIcon
92
99
  className="w-4 h-4 mr-1 p-0.5 transform rotate-180"
93
- fill="var(--red-8)"
94
- stroke="var(--red-9)"
100
+ fill={fillColor}
101
+ stroke={strokeColor}
95
102
  />
96
103
  )}
97
104
  {caption}