@marimo-team/islands 0.17.0 → 0.17.2

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 (616) hide show
  1. package/dist/{fullscreen-blsKUrtN.js → Combination-De9yoNY5.js} +132 -69
  2. package/dist/{ConnectedDataExplorerComponent-DJEUH6Bb.js → ConnectedDataExplorerComponent-DuvpJOKp.js} +45 -44
  3. package/dist/{ImageComparisonComponent-D4Tv9QzJ.js → ImageComparisonComponent--etUl2pp.js} +2 -2
  4. package/dist/{_baseIsEqual-CN4oFUZ4.js → _baseIsEqual-BFlyFUxC.js} +1 -1
  5. package/dist/{_basePickBy-CzSvE_-f.js → _basePickBy-gCCvtjgp.js} +3 -3
  6. package/dist/{_baseProperty-DbbUiyUD.js → _baseProperty-BuqBC0Ie.js} +5 -5
  7. package/dist/{_baseUniq-DwoC-LVO.js → _baseUniq-CKN9mEDq.js} +5 -5
  8. package/dist/any-language-editor-Du2Q_6IK.js +156 -0
  9. package/dist/apl-CUm2DGqh.js +4 -0
  10. package/dist/{arc-B1iVbHTB.js → arc-C_O2hc-b.js} +2 -2
  11. package/dist/architecture-O4VJ6CD3-PFw3eFBY.js +21 -0
  12. package/dist/{architectureDiagram-W76B3OCA-CoBORy6u.js → architectureDiagram-W76B3OCA-CrK99pJi.js} +38 -37
  13. package/dist/asciiarmor-lqJ78U01.js +4 -0
  14. package/dist/asn1-CjwpSTlW.js +4 -0
  15. package/dist/assets/__vite-browser-external-DHoMWs4M.js +1 -0
  16. package/dist/assets/{worker-vPn7gxWj.js → worker-B6tH8gPO.js} +3 -3
  17. package/dist/{blockDiagram-QIGZ2CNN-0yzoLIar.js → blockDiagram-QIGZ2CNN-BJOEyO6w.js} +47 -46
  18. package/dist/brainfuck-ClvDI1dq.js +4 -0
  19. package/dist/{button-DcnBVpVa.js → button-ADXOb_gX.js} +27 -27
  20. package/dist/{c4Diagram-FPNF74CW-CKsIA_DD.js → c4Diagram-FPNF74CW-7Pz_X9wF.js} +12 -11
  21. package/dist/{channel-3LVvQZcD.js → channel-X-wRUxX6.js} +1 -1
  22. package/dist/{check-D7ifz5op.js → check-COlaG7Ss.js} +1 -1
  23. package/dist/{chunk-3AY6CYHV-B2C-aVc3.js → chunk-3AY6CYHV-BQH2fFpA.js} +10 -10
  24. package/dist/{chunk-4BX2VUAB-DEd4VI9L.js → chunk-4BX2VUAB-D-QtDCKM.js} +1 -1
  25. package/dist/{chunk-4KMFLZZN-DnvP3O4K.js → chunk-4KMFLZZN-BirZvvJS.js} +13 -13
  26. package/dist/{chunk-55IACEB6-BcCzwOOl.js → chunk-55IACEB6-DjtPYZKs.js} +1 -1
  27. package/dist/{chunk-6OXUPJBA-eNAAfJ3Q.js → chunk-6OXUPJBA-CTnnqlzw.js} +7 -7
  28. package/dist/{chunk-7GE3RBXV-CSAeQvLz.js → chunk-7GE3RBXV-CT47hCrL.js} +1 -1
  29. package/dist/{chunk-ABZYJK2D-CZcb_1iM.js → chunk-ABZYJK2D-B6ZsU6SR.js} +484 -1039
  30. package/dist/{chunk-BN7GFLIU-pBc5O5Rh.js → chunk-BN7GFLIU-DYWEsrG4.js} +1 -1
  31. package/dist/{chunk-CVBHYZKI-CivHZg9P.js → chunk-CVBHYZKI-BuzDGXz0.js} +1 -1
  32. package/dist/{chunk-CXMOBAN2-Dd0E6qb0.js → chunk-CXMOBAN2-Bas2S5w1.js} +6 -6
  33. package/dist/{chunk-EXTU4WIE-GQ2ZWfJo.js → chunk-EXTU4WIE-DXwNSukz.js} +2 -2
  34. package/dist/{chunk-FMBD7UC4-C6YcisV6.js → chunk-FMBD7UC4-CYKEpuPr.js} +1 -1
  35. package/dist/{chunk-JA3XYJ7Z-DYeQaT57.js → chunk-JA3XYJ7Z-DcxfkcDC.js} +4 -4
  36. package/dist/{chunk-JEIROHC2-B-EZMP4V.js → chunk-JEIROHC2-C01ZIcIG.js} +1 -1
  37. package/dist/{chunk-K7UQS3LO-DENzlS-M.js → chunk-K7UQS3LO-CmbT97MV.js} +7 -7
  38. package/dist/{chunk-KMC2YHZD-SckhHdEh.js → chunk-KMC2YHZD-D64m-1E1.js} +1 -1
  39. package/dist/{chunk-QN33PNHL-Cjq5b604.js → chunk-QN33PNHL-DjB0j8Dr.js} +2 -2
  40. package/dist/{chunk-QYVHNE3D-CNUuivie.js → chunk-QYVHNE3D-VA4W4oxG.js} +2 -2
  41. package/dist/{chunk-QZHKN3VN-DugEU_bA.js → chunk-QZHKN3VN-KT0fl3Em.js} +1 -1
  42. package/dist/{chunk-S3R3BYOJ-itCT6Vif.js → chunk-S3R3BYOJ-C5zmcMvn.js} +6 -6
  43. package/dist/{chunk-T44TD3VJ-BLdfTX8J.js → chunk-T44TD3VJ-BMOgu-Hk.js} +1 -1
  44. package/dist/{chunk-TVAH2DTR-BOnwF9d8.js → chunk-TVAH2DTR-eKm8SKnH.js} +6 -6
  45. package/dist/{chunk-TZMSLE5B-DGs66AlL.js → chunk-TZMSLE5B-CQxFRiI2.js} +3 -3
  46. package/dist/{chunk-WFRQ32O7-CPsipkmJ.js → chunk-WFRQ32O7-Dg51o277.js} +1 -1
  47. package/dist/{chunk-WFWHJNB7-Cmed18Pk.js → chunk-WFWHJNB7-DVLO98ge.js} +1 -1
  48. package/dist/{chunk-XRWGC2XP-DH5GDaY8.js → chunk-XRWGC2XP-UNFKdWQh.js} +1 -1
  49. package/dist/{chunk-ZPAFE4SF-DPDwaqZm.js → chunk-ZPAFE4SF-DbCSwfLK.js} +1 -1
  50. package/dist/classDiagram-KNZD7YFC-HUFFxNdk.js +40 -0
  51. package/dist/classDiagram-v2-RKCZMP56-Dw7Acmuf.js +40 -0
  52. package/dist/{click-outside-container-CL_FkgGY.js → click-outside-container-2BH589Bq.js} +2 -2
  53. package/dist/{clike-DYfRWWXk.js → clike-CytFO-kN.js} +1 -1
  54. package/dist/clojure-8GefCgPe.js +4 -0
  55. package/dist/{clone-Msbhmn2a.js → clone-CCgVUJ6x.js} +1 -1
  56. package/dist/cmake-yAhT9H0F.js +4 -0
  57. package/dist/cobol-BmltueOY.js +4 -0
  58. package/dist/coffeescript-C7KEQBcH.js +4 -0
  59. package/dist/commonlisp-CNbiJRU-.js +4 -0
  60. package/dist/{constants-BCOEQoEQ.js → constants-BaCMVd12.js} +3 -3
  61. package/dist/{copy-BkZ8PkBM.js → copy-GNcK40wy.js} +2 -2
  62. package/dist/{cose-bilkent-S5V4N54A-BZnbwyVD.js → cose-bilkent-S5V4N54A-BnvuJG6Y.js} +3 -3
  63. package/dist/crystal-OdjZZ8bc.js +4 -0
  64. package/dist/css-DhTxMmL_.js +5 -0
  65. package/dist/cypher-CgN8E3YI.js +4 -0
  66. package/dist/d-g41sJcBC.js +4 -0
  67. package/dist/{dagre-5GWH7T2D-BGaiSZZO.js → dagre-5GWH7T2D-rn7tZYaQ.js} +37 -36
  68. package/dist/{dagre-pyfDIOWJ.js → dagre-Bghq6VKO.js} +13 -13
  69. package/dist/{data-grid-overlay-editor-867aBz0Y.js → data-grid-overlay-editor-B4_Caieu.js} +4 -4
  70. package/dist/{diagram-N5W7TBWH-CzLE0jZB.js → diagram-N5W7TBWH-lbF94o-g.js} +41 -40
  71. package/dist/{diagram-QEK2KX5R-AGS60xEZ.js → diagram-QEK2KX5R-CKBhSzsO.js} +35 -34
  72. package/dist/{diagram-S2PKOQOG-BxRoG6yW.js → diagram-S2PKOQOG-161_1f53.js} +35 -34
  73. package/dist/diff-ViRYYhhg.js +4 -0
  74. package/dist/{dist-PGgOcwbF.js → dist-28HYzERB.js} +2 -2
  75. package/dist/{dist-CfQHSIQC.js → dist-4dtbqf8A.js} +3 -3
  76. package/dist/{dist-CYhQCVru.js → dist-71jYYbWP.js} +2 -2
  77. package/dist/{dist-Cacac5HV.js → dist-B8Pbw5ln.js} +2 -2
  78. package/dist/{dist-z_iuDES7.js → dist-BAqp4Vtl.js} +1 -1
  79. package/dist/{dist-RwqAqkpG.js → dist-BBhmkni2.js} +1 -1
  80. package/dist/{dist-DMxl6Qbu.js → dist-BNRdMfJH.js} +2 -2
  81. package/dist/{dist-Doiq_KIP.js → dist-BSyYM1Gi.js} +6 -6
  82. package/dist/{dist-NUdHX0XE.js → dist-BYHiiJB-.js} +2 -2
  83. package/dist/{dist-B0YD1aXi.js → dist-B_wjJqqS.js} +2 -2
  84. package/dist/{dist-DBhEu3-F.js → dist-BaPjLM6s.js} +1 -1
  85. package/dist/dist-BfJO8Bm9.js +12 -0
  86. package/dist/{dist-BFkr6kAQ.js → dist-BqdQPWpQ.js} +2 -2
  87. package/dist/{dist-DlHkZUnY.js → dist-C2IEc8og.js} +5 -5
  88. package/dist/{dist-DS6nuHYK.js → dist-C9-uHBqC.js} +1 -1
  89. package/dist/{dist-B1Dv8Sdk.js → dist-CJb8EiFO.js} +3 -3
  90. package/dist/dist-CLuF3AtO.js +6 -0
  91. package/dist/{dist-CId4IPXu.js → dist-CNAkUyxv.js} +1 -1
  92. package/dist/{dist-RdxOJbBw.js → dist-CNvMOZu9.js} +2 -2
  93. package/dist/{dist-C7zhQ7K0.js → dist-CPNnKuPh.js} +1 -1
  94. package/dist/{dist-ivwkJchV.js → dist-CTIyD_KU.js} +3 -3
  95. package/dist/dist-CU04U4NL.js +10 -0
  96. package/dist/{dist-D-3fICwh.js → dist-CWh5ZwcC.js} +2 -2
  97. package/dist/{dist-d5NxvX2s.js → dist-CWqB4bg8.js} +3 -3
  98. package/dist/{dist-biZ846D9.js → dist-CtOeHDJp.js} +5 -5
  99. package/dist/{dist-BL2DSY0P.js → dist-Cw0F6l-7.js} +1 -1
  100. package/dist/{dist-wHVprCkn.js → dist-CwZcC4om.js} +1 -1
  101. package/dist/dist-DNUT6b47.js +6 -0
  102. package/dist/{dist-CZq5-ZyD.js → dist-Da046MhT.js} +1 -1
  103. package/dist/{dist-reo2kYlN.js → dist-DaTVdKJa.js} +2 -2
  104. package/dist/dist-DbAb2sY7.js +6 -0
  105. package/dist/dist-DiDFQ2Rk.js +6 -0
  106. package/dist/{dist-BpzZrRd6.js → dist-DlK420ke.js} +1 -1
  107. package/dist/{dist-CvyfRaIr.js → dist-Drf3cyIW.js} +3 -3
  108. package/dist/{dist-2Ne-33Xy.js → dist-DxESp2-T.js} +3 -3
  109. package/dist/{dist-CkvGMBAS.js → dist-DzJem5xc.js} +1 -1
  110. package/dist/{dist-y8uoXYaE.js → dist-O0zVziwn.js} +3 -3
  111. package/dist/dist-SNAyAOJ-.js +6 -0
  112. package/dist/{dist-BhVFggab.js → dist-_4cudra1.js} +3 -3
  113. package/dist/dist-cbW5xJNV.js +6 -0
  114. package/dist/dist-h8eGLSbK.js +10 -0
  115. package/dist/{dist-CBhnQKQ4.js → dist-xLN9qCAp.js} +3 -3
  116. package/dist/{dockerfile-sZMPcXVY.js → dockerfile-Cmlcqk35.js} +1 -1
  117. package/dist/dtd-RplB6hDg.js +4 -0
  118. package/dist/dylan-BX8KJufP.js +4 -0
  119. package/dist/ecl-CWtLaNMH.js +4 -0
  120. package/dist/eiffel-C-mlZPMn.js +4 -0
  121. package/dist/elm-CWp06vcb.js +4 -0
  122. package/dist/{erDiagram-AWTI2OKA-CTxzb-U8.js → erDiagram-AWTI2OKA-BU7Qig7n.js} +30 -29
  123. package/dist/erlang-pfp22AZM.js +4 -0
  124. package/dist/error-banner-BAWlXn49.js +1012 -0
  125. package/dist/{esm-CAWW9sum.js → esm-AtKNNGYO.js} +1 -1
  126. package/dist/esm-B2pocBPL.js +26 -0
  127. package/dist/{esm-BdiY4QsX.js → esm-Oo8OvZ6m.js} +110 -110
  128. package/dist/{esm-YY5zh7KV.js → esm-YVnxJqkD.js} +20 -20
  129. package/dist/{factor-CRFTmP_a.js → factor-BZnBK3CG.js} +1 -1
  130. package/dist/factor-CEn53jua.js +5 -0
  131. package/dist/{flowDiagram-PVAE7QVJ-Dck2hiJe.js → flowDiagram-PVAE7QVJ-JKJebWeY.js} +39 -38
  132. package/dist/{formats-BnqXUb1V.js → formats-DOEuF6TR.js} +8 -8
  133. package/dist/forth-CL8vu_y8.js +4 -0
  134. package/dist/fortran-DsmXkYtE.js +4 -0
  135. package/dist/{ganttDiagram-OWAHRB6G-AWzfzpup.js → ganttDiagram-OWAHRB6G-BvWRfg05.js} +17 -16
  136. package/dist/gas-mYt9Rtlx.js +4 -0
  137. package/dist/gherkin-DHNCKBNj.js +4 -0
  138. package/dist/gitGraph-ZV4HHKMB-Cpd6k0O8.js +21 -0
  139. package/dist/{gitGraphDiagram-NY62KEGX-GyNboWSV.js → gitGraphDiagram-NY62KEGX-VEJJBf5L.js} +35 -34
  140. package/dist/{glide-data-editor-DHuN8kQ8.js → glide-data-editor-Bne10icG.js} +87 -85
  141. package/dist/{graphlib-hb3zmtVD.js → graphlib-DRS8CrjA.js} +5 -5
  142. package/dist/groovy-DzRtOS5a.js +4 -0
  143. package/dist/haskell-Bl9iT_Mp.js +4 -0
  144. package/dist/haxe-DqA0ED6k.js +5 -0
  145. package/dist/{hotkeys-Ct2T3e9O.js → hotkeys-DVxFjl2s.js} +12 -0
  146. package/dist/idl-WU2hil4i.js +4 -0
  147. package/dist/info-63CPKGFF-CG-xzUJo.js +21 -0
  148. package/dist/infoDiagram-STP46IZ2-zoRBGoup.js +45 -0
  149. package/dist/invariant-D3JoRb4I.js +6 -0
  150. package/dist/{isEmpty--odfYjh1.js → isEmpty-Do_v2sls.js} +2 -2
  151. package/dist/{isSymbol-Cb1f2HgO.js → isSymbol-CtkA8Y0a.js} +1 -1
  152. package/dist/javascript-QY2BGJeV.js +5 -0
  153. package/dist/jinja2-Czleq7Sk.js +4 -0
  154. package/dist/{journeyDiagram-BIP6EPQ6-TmXYCUbT.js → journeyDiagram-BIP6EPQ6-CsgEQgxh.js} +10 -9
  155. package/dist/julia-Dru3Qi0y.js +4 -0
  156. package/dist/{kanban-definition-6OIFK2YF-B6ozleHo.js → kanban-definition-6OIFK2YF-Bi8Ete2P.js} +42 -41
  157. package/dist/{katex-mPzRsXEy.js → katex-C-g3rKKt.js} +1 -1
  158. package/dist/{label-VVRKZmrP.js → label-BiVIU_wb.js} +245 -243
  159. package/dist/{line-C6-zz71o.js → line-B7-GoF1m.js} +3 -3
  160. package/dist/{linear-iebAbJVD.js → linear-DeGGALuc.js} +4 -4
  161. package/dist/livescript-Dxqi_HLT.js +4 -0
  162. package/dist/{loader-CM0VALo9.js → loader-BBqwtZWj.js} +3 -3
  163. package/dist/lua-ByH1cUQZ.js +4 -0
  164. package/dist/main.js +11785 -11529
  165. package/dist/mathematica-CWJIFuES.js +4 -0
  166. package/dist/mbox-qhPIGaUI.js +4 -0
  167. package/dist/{memoize-DYoRBSLn.js → memoize-D7eDkf3R.js} +1 -1
  168. package/dist/{merge-BjuR6j_w.js → merge-C_6cGM6o.js} +1 -1
  169. package/dist/{mermaid-YPPMBmhk.js → mermaid-BmtvsZ2m.js} +323 -321
  170. package/dist/{mermaid-parser.core-BLkyTSZj.js → mermaid-parser.core-geyG_6o0.js} +8 -8
  171. package/dist/{mhchem-Dw7wvXtr.js → mhchem-OhAaJ0fA.js} +1 -1
  172. package/dist/{min-B_i2ahn4.js → min-Dwa_NbP6.js} +7 -7
  173. package/dist/{mindmap-definition-Q6HEUPPD-F6-JnXwq.js → mindmap-definition-Q6HEUPPD-B-wmX1oG.js} +29 -28
  174. package/dist/mirc-yYcXhXBY.js +4 -0
  175. package/dist/mllike-BfT_Nl9x.js +6 -0
  176. package/dist/modelica-lVDtz1Rm.js +4 -0
  177. package/dist/mscgen-DvwdD1QJ.js +6 -0
  178. package/dist/mumps-BiY3GwKd.js +4 -0
  179. package/dist/{now-CwRqw0nS.js → now-DumxsrcX.js} +1 -1
  180. package/dist/{nsis-BWJEeUyS.js → nsis-D4bLR_Y1.js} +1 -1
  181. package/dist/nsis-Dk18Sq_4.js +5 -0
  182. package/dist/ntriples-Cj-8VqKF.js +4 -0
  183. package/dist/{number-overlay-editor-CeyruAX4.js → number-overlay-editor-D6r-48ka.js} +2 -2
  184. package/dist/octave-BgFAaYjU.js +4 -0
  185. package/dist/once-3OSMKEsL.js +74 -0
  186. package/dist/{ordinal-BXk5xAj2.js → ordinal-DpEbSVPc.js} +1 -1
  187. package/dist/oz-IsEG1I1m.js +4 -0
  188. package/dist/packet-HUATNLJX-Cafuo3IG.js +21 -0
  189. package/dist/pascal-BVf7FtIE.js +4 -0
  190. package/dist/perl-BM0-y4mZ.js +4 -0
  191. package/dist/pie-WTHONI2E-BE0pHBwB.js +21 -0
  192. package/dist/{pieDiagram-ADFJNKIX-C5dSQVCn.js → pieDiagram-ADFJNKIX-C3GvPNUL.js} +40 -39
  193. package/dist/pig-CLBjzQmc.js +4 -0
  194. package/dist/powershell-B_qvE33J.js +4 -0
  195. package/dist/{precisionRound-DbP73hkf.js → precisionRound-7YYJq2rW.js} +1 -1
  196. package/dist/properties-CUTpsH2y.js +4 -0
  197. package/dist/protobuf-DqCP8a-0.js +4 -0
  198. package/dist/pug-BvexKkw4.js +5 -0
  199. package/dist/{pug-PJh82u1M.js → pug-Dv3gE36O.js} +1 -1
  200. package/dist/puppet-CoIi0R3f.js +4 -0
  201. package/dist/purify.es-CrfFzTyi.js +536 -0
  202. package/dist/python-C-11-YMh.js +5 -0
  203. package/dist/q-CCVgEip7.js +4 -0
  204. package/dist/{quadrantDiagram-LMRXKWRM-DlahxNiy.js → quadrantDiagram-LMRXKWRM-DPXwGNVa.js} +8 -7
  205. package/dist/r-CIdR0Sfs.js +4 -0
  206. package/dist/radar-NJJJXTRR-0adgjw0u.js +21 -0
  207. package/dist/{range-DxfkexCE.js → range-CIbLpsrs.js} +3 -3
  208. package/dist/{react-plotly-D_IAfR8f.js → react-plotly-DYyvxcRD.js} +1 -1
  209. package/dist/{requirementDiagram-4UW4RH46-DTkinyvU.js → requirementDiagram-4UW4RH46-Cs3Hqnm0.js} +24 -23
  210. package/dist/rpm-Dwvm039g.js +5 -0
  211. package/dist/ruby-DpTnO5gb.js +4 -0
  212. package/dist/{sankeyDiagram-GR3RE2ED-CsLnEnnq.js → sankeyDiagram-GR3RE2ED-Be1d_Xf7.js} +7 -6
  213. package/dist/sas-CK9boxgv.js +4 -0
  214. package/dist/scheme-Y1aYL-Qq.js +4 -0
  215. package/dist/{sequenceDiagram-C3RYC4MD-BdEOR6SC.js → sequenceDiagram-C3RYC4MD-lbtovKTa.js} +14 -13
  216. package/dist/shell-D3eXGsHd.js +4 -0
  217. package/dist/sieve-BdwSFdWJ.js +4 -0
  218. package/dist/{slides-component-2bbal1YJ.js → slides-component-BoeQU7-s.js} +999 -998
  219. package/dist/smalltalk-BTYJquCm.js +4 -0
  220. package/dist/sparql-CYF0g4Cc.js +4 -0
  221. package/dist/{src-DZkaBUmt.js → src-BTqT1mA1.js} +1 -1
  222. package/dist/{stateDiagram-KXAO66HF-DQLH2jhP.js → stateDiagram-KXAO66HF-BmbR-Rol.js} +40 -39
  223. package/dist/stateDiagram-v2-UMBNRL4Z-DdJ7qVWc.js +39 -0
  224. package/dist/{step-IHYrujTc.js → step-2RJrMSSG.js} +1 -1
  225. package/dist/stex-CyWhoWHt.js +5 -0
  226. package/dist/style.css +1 -1
  227. package/dist/stylus-BBiKaI2h.js +4 -0
  228. package/dist/swift-COb15qFR.js +4 -0
  229. package/dist/tcl-Jik1LXu9.js +4 -0
  230. package/dist/textile-BFHPD3wr.js +4 -0
  231. package/dist/{time-CFkXkVrt.js → time-BB30r1tK.js} +4 -4
  232. package/dist/{timeline-definition-XQNQX7LJ-bToVq14i.js → timeline-definition-XQNQX7LJ-1mv5caPW.js} +16 -15
  233. package/dist/{toNumber-EFF1Z9T1.js → toNumber-D3Ystr3y.js} +2 -2
  234. package/dist/{toString-C2mCkasT.js → toString-CbuxCRDG.js} +2 -2
  235. package/dist/toml-Brp9fBXs.js +4 -0
  236. package/dist/treemap-75Q7IDZK-CyBT8_Wh.js +21 -0
  237. package/dist/troff-CcZRW4vg.js +4 -0
  238. package/dist/ttcn-Bz_6ifRd.js +4 -0
  239. package/dist/ttcn-cfg-v-yi2rKc.js +4 -0
  240. package/dist/turtle-CDOsZYhB.js +4 -0
  241. package/dist/{types-CRXV0KD5.js → types-BPohCsA7.js} +141 -210
  242. package/dist/{useAsyncData-uMVTsDI9.js → useAsyncData-DHBqeb9a.js} +3 -2
  243. package/dist/{useDateFormatter-Dcz7jstn.js → useDateFormatter-BkbjKw83.js} +9 -9
  244. package/dist/useIframeCapabilities-BEvvwlwt.js +46 -0
  245. package/dist/{useTheme-NbEx-ZNV.js → useTheme-CnMbo-iq.js} +23 -23
  246. package/dist/vb-CL7fRwRw.js +4 -0
  247. package/dist/vbscript-CR2xfxpw.js +4 -0
  248. package/dist/{vega-component-hegVmfuS.js → vega-component-BfFcXZxw.js} +40 -39
  249. package/dist/{vega-loader.browser.module-DcW8jnKp.js → vega-loader.browser.module-CFMtdrNw.js} +3 -3
  250. package/dist/velocity-CfuZoxPt.js +4 -0
  251. package/dist/verilog-CySTkzw_.js +4 -0
  252. package/dist/vhdl-Dvcd8KHW.js +4 -0
  253. package/dist/webidl-tbJt7sKk.js +4 -0
  254. package/dist/xquery-DJQVztyc.js +4 -0
  255. package/dist/{xychartDiagram-6GGTOJPD-C7Bhm_yt.js → xychartDiagram-6GGTOJPD-njc-naaw.js} +23 -22
  256. package/dist/yacas-BbgBReEH.js +4 -0
  257. package/dist/z80-DPyb8VGz.js +4 -0
  258. package/package.json +10 -6
  259. package/src/components/app-config/ai-config.tsx +1 -3
  260. package/src/components/app-config/common.tsx +14 -0
  261. package/src/components/app-config/data-form.tsx +282 -0
  262. package/src/components/app-config/user-config-form.tsx +36 -223
  263. package/src/components/chat/acp/__tests__/state.test.ts +75 -2
  264. package/src/components/chat/acp/agent-panel.tsx +143 -89
  265. package/src/components/chat/acp/blocks.tsx +77 -34
  266. package/src/components/chat/acp/state.ts +5 -1
  267. package/src/components/chat/acp/thread.tsx +12 -1
  268. package/src/components/chat/chat-panel.tsx +38 -5
  269. package/src/components/chat/chat-utils.ts +5 -1
  270. package/src/components/chat/markdown-renderer.css +1 -0
  271. package/src/components/chat/tool-call-accordion.tsx +7 -1
  272. package/src/components/data-table/charts/__tests__/storage.test.ts +12 -6
  273. package/src/components/data-table/charts/charts.tsx +8 -2
  274. package/src/components/data-table/charts/storage.ts +1 -1
  275. package/src/components/data-table/column-wrapping/feature.ts +2 -0
  276. package/src/components/data-table/columns.tsx +10 -2
  277. package/src/components/data-table/renderers.tsx +3 -2
  278. package/src/components/editor/Output.tsx +28 -24
  279. package/src/components/editor/actions/useCellActionButton.tsx +20 -4
  280. package/src/components/editor/ai/add-cell-with-ai.tsx +17 -3
  281. package/src/components/editor/ai/ai-completion-editor.tsx +79 -32
  282. package/src/components/editor/ai/completion-handlers.tsx +26 -7
  283. package/src/components/editor/cell/StagedAICell.tsx +81 -12
  284. package/src/components/editor/cell/code/cell-editor.tsx +2 -3
  285. package/src/components/editor/cell/useRunCells.ts +62 -30
  286. package/src/components/editor/chrome/panels/cache-panel.tsx +2 -2
  287. package/src/components/editor/chrome/panels/packages-panel.tsx +1 -1
  288. package/src/components/editor/chrome/state.ts +1 -1
  289. package/src/components/editor/chrome/wrapper/app-chrome.tsx +2 -0
  290. package/src/components/editor/chrome/wrapper/minimap.tsx +2 -0
  291. package/src/components/editor/chrome/wrapper/pending-ai-cells.tsx +108 -0
  292. package/src/components/editor/chrome/wrapper/sidebar.tsx +1 -1
  293. package/src/components/editor/code/readonly-diff.tsx +49 -0
  294. package/src/components/editor/columns/storage.ts +1 -1
  295. package/src/components/editor/errors/fix-mode.ts +6 -1
  296. package/src/components/editor/inputs/Inputs.styles.ts +1 -1
  297. package/src/components/editor/output/CalloutOutput.tsx +1 -1
  298. package/src/components/editor/output/HtmlOutput.tsx +3 -2
  299. package/src/components/editor/output/JsonOutput.tsx +6 -1
  300. package/src/components/editor/output/MarimoTracebackOutput.tsx +59 -45
  301. package/src/components/editor/output/__tests__/HtmlOutput.test.tsx +134 -0
  302. package/src/components/editor/output/__tests__/traceback.test.tsx +8 -1
  303. package/src/components/editor/output/useWrapText.ts +6 -1
  304. package/src/components/editor/package-alert.tsx +34 -32
  305. package/src/components/editor/renderers/vertical-layout/vertical-layout-wrapper.tsx +5 -2
  306. package/src/components/home/state.ts +3 -2
  307. package/src/components/scratchpad/scratchpad-history.ts +6 -1
  308. package/src/components/slides/slides-component.tsx +25 -21
  309. package/src/components/ui/confirmation-button.tsx +1 -1
  310. package/src/components/ui/context-menu.tsx +14 -4
  311. package/src/components/ui/dropdown-menu.tsx +14 -4
  312. package/src/components/ui/fullscreen.tsx +115 -1
  313. package/src/components/ui/popover.tsx +11 -3
  314. package/src/components/ui/range-slider.tsx +1 -1
  315. package/src/components/ui/select.tsx +7 -3
  316. package/src/components/ui/slider.tsx +1 -1
  317. package/src/components/ui/tooltip.tsx +10 -3
  318. package/src/core/ai/__tests__/staged-cells.test.ts +189 -64
  319. package/src/core/ai/config.ts +6 -2
  320. package/src/core/ai/context/providers/__tests__/__snapshots__/cell-output.test.ts.snap +17 -0
  321. package/src/core/ai/context/providers/__tests__/cell-output.test.ts +194 -10
  322. package/src/core/ai/context/providers/cell-output.ts +170 -112
  323. package/src/core/ai/context/providers/tables.ts +2 -2
  324. package/src/core/ai/staged-cells.ts +32 -16
  325. package/src/core/ai/state.ts +2 -1
  326. package/src/core/ai/tools/__tests__/edit-notebook-tool.test.ts +556 -0
  327. package/src/core/ai/tools/__tests__/registry.test.ts +12 -4
  328. package/src/core/ai/tools/__tests__/run-cells-tool.test.ts +450 -0
  329. package/src/core/ai/tools/__tests__/utils.test.ts +87 -0
  330. package/src/core/ai/tools/base.ts +31 -8
  331. package/src/core/ai/tools/edit-notebook-tool.ts +239 -0
  332. package/src/core/ai/tools/registry.ts +13 -6
  333. package/src/core/ai/tools/run-cells-tool.ts +233 -0
  334. package/src/core/ai/tools/sample-tool.ts +10 -8
  335. package/src/core/ai/tools/utils.ts +23 -0
  336. package/src/core/cells/__tests__/cells.test.ts +19 -1
  337. package/src/core/cells/__tests__/session.test.ts +20 -3
  338. package/src/core/cells/cells.ts +12 -7
  339. package/src/core/cells/session.ts +1 -1
  340. package/src/core/codemirror/ai/resources.ts +13 -2
  341. package/src/core/codemirror/copilot/state.ts +4 -2
  342. package/src/core/codemirror/language/__tests__/extension.test.ts +10 -2
  343. package/src/core/codemirror/language/languages/markdown.ts +16 -153
  344. package/src/core/codemirror/language/languages/python.ts +12 -7
  345. package/src/core/codemirror/language/languages/sql/sql-mode.ts +6 -1
  346. package/src/core/codemirror/language/languages/sql/sql.ts +20 -293
  347. package/src/core/codemirror/language/panel/markdown.tsx +2 -1
  348. package/src/core/codemirror/language/panel/panel.tsx +1 -1
  349. package/src/core/codemirror/lsp/federated-lsp.ts +1 -1
  350. package/src/core/codemirror/lsp/transports.ts +7 -13
  351. package/src/core/config/config-schema.ts +4 -1
  352. package/src/core/hotkeys/hotkeys.ts +12 -0
  353. package/src/core/lsp/__tests__/transport.test.ts +233 -0
  354. package/src/core/lsp/transport.ts +139 -0
  355. package/src/core/rtc/state.ts +6 -1
  356. package/src/core/vscode/is-in-vscode.ts +9 -0
  357. package/src/core/wasm/store.ts +1 -1
  358. package/src/css/app/Cell.css +31 -0
  359. package/src/css/globals.css +5 -0
  360. package/src/hooks/useIframeCapabilities.ts +14 -0
  361. package/src/hooks/useLocalStorage.ts +1 -1
  362. package/src/plugins/core/RenderHTML.tsx +65 -5
  363. package/src/plugins/core/__test__/RenderHTML.test.ts +25 -23
  364. package/src/plugins/core/__test__/renderHTML-sanitization.test.tsx +131 -0
  365. package/src/plugins/core/__test__/sanitize.test.ts +465 -0
  366. package/src/plugins/core/registerReactComponent.tsx +14 -1
  367. package/src/plugins/core/sanitize.ts +76 -0
  368. package/src/plugins/impl/DataTablePlugin.tsx +1 -0
  369. package/src/plugins/impl/FileBrowserPlugin.tsx +1 -3
  370. package/src/plugins/impl/FileUploadPlugin.tsx +1 -3
  371. package/src/plugins/impl/__tests__/DateTimePickerPlugin.test.tsx +8 -1
  372. package/src/plugins/impl/__tests__/DropdownPlugin.test.tsx +6 -0
  373. package/src/plugins/impl/__tests__/MultiSelectPlugin.test.ts +8 -1
  374. package/src/plugins/impl/__tests__/NumberPlugin.test.tsx +3 -0
  375. package/src/plugins/impl/plotly/PlotlyPlugin.tsx +9 -2
  376. package/src/plugins/impl/plotly/parse-from-template.ts +1 -1
  377. package/src/utils/__tests__/arrays.test.ts +42 -0
  378. package/src/utils/__tests__/capabilities.test.ts +453 -0
  379. package/src/utils/__tests__/formatting.test.ts +13 -13
  380. package/src/utils/__tests__/local-storage.test.ts +1 -1
  381. package/src/utils/__tests__/storage.test.ts +21 -21
  382. package/src/utils/arrays.ts +25 -0
  383. package/src/utils/capabilities.ts +114 -0
  384. package/src/utils/numbers.ts +2 -2
  385. package/src/utils/{storage.ts → storage/jotai.ts} +16 -4
  386. package/src/utils/storage/storage.ts +57 -0
  387. package/src/utils/{localStorage.ts → storage/typed.ts} +22 -12
  388. package/dist/any-language-editor-CEXn1vFs.js +0 -156
  389. package/dist/apl-DuVfHsPc.js +0 -4
  390. package/dist/architecture-O4VJ6CD3-lp-opOaL.js +0 -21
  391. package/dist/asciiarmor-qIVWsi4F.js +0 -4
  392. package/dist/asn1-BjPqARr7.js +0 -4
  393. package/dist/assets/__vite-browser-external-lX-sn9m2.js +0 -1
  394. package/dist/brainfuck-DPGTVfkE.js +0 -4
  395. package/dist/classDiagram-KNZD7YFC-azuS_99k.js +0 -39
  396. package/dist/classDiagram-v2-RKCZMP56-CQpyQQOR.js +0 -39
  397. package/dist/clojure-ATksAecl.js +0 -4
  398. package/dist/cmake-CWylaz2C.js +0 -4
  399. package/dist/cobol-BiLLCZIQ.js +0 -4
  400. package/dist/coffeescript-Ca4jipi8.js +0 -4
  401. package/dist/commonlisp-BwFjyEC7.js +0 -4
  402. package/dist/crystal-BhUsQHbh.js +0 -4
  403. package/dist/css-Cf4wlIyV.js +0 -5
  404. package/dist/cypher-Dj8Hzgxa.js +0 -4
  405. package/dist/d-DZI7tbTy.js +0 -4
  406. package/dist/diff-WQISUHG5.js +0 -4
  407. package/dist/dist-BawZu0ix.js +0 -10
  408. package/dist/dist-BiOF7987.js +0 -6
  409. package/dist/dist-Cs3McXEj.js +0 -6
  410. package/dist/dist-D3aaithT.js +0 -6
  411. package/dist/dist-DELcMSpJ.js +0 -6
  412. package/dist/dist-Dgts3WXd.js +0 -6
  413. package/dist/dist-DtpUiDG_.js +0 -6
  414. package/dist/dist-ZjnJq_jD.js +0 -10
  415. package/dist/dist-mof3iuBu.js +0 -12
  416. package/dist/dtd-B2M8dhfC.js +0 -4
  417. package/dist/dylan-CU3Vt8SC.js +0 -4
  418. package/dist/ecl-B8ESAVq4.js +0 -4
  419. package/dist/eiffel-DDfMIKeA.js +0 -4
  420. package/dist/elm-Bj6rj8jf.js +0 -4
  421. package/dist/erlang-BxyshZUq.js +0 -4
  422. package/dist/error-banner-npbEfanI.js +0 -1012
  423. package/dist/esm-svAVli9f.js +0 -26
  424. package/dist/factor-CYk6XT8r.js +0 -5
  425. package/dist/forth-fcoJkd-f.js +0 -4
  426. package/dist/fortran-IxZHu4wc.js +0 -4
  427. package/dist/gas-B8rmKcim.js +0 -4
  428. package/dist/gherkin-BTm-jIdJ.js +0 -4
  429. package/dist/gitGraph-ZV4HHKMB-DFg_OLQb.js +0 -21
  430. package/dist/groovy-01kRHFMD.js +0 -4
  431. package/dist/haskell-B3PhE05w.js +0 -4
  432. package/dist/haxe-DEoAm8oA.js +0 -5
  433. package/dist/idl-DsDJU9cV.js +0 -4
  434. package/dist/info-63CPKGFF-D3DZmDBa.js +0 -21
  435. package/dist/infoDiagram-STP46IZ2-ec08vi_U.js +0 -44
  436. package/dist/javascript-gwczVhuU.js +0 -5
  437. package/dist/jinja2-AkZRdFk3.js +0 -4
  438. package/dist/julia-_s6qe3bf.js +0 -4
  439. package/dist/livescript-CwPHQdv5.js +0 -4
  440. package/dist/lua-s7nRxkCP.js +0 -4
  441. package/dist/mathematica-Ci36yd1q.js +0 -4
  442. package/dist/mbox-DbOYMNCO.js +0 -4
  443. package/dist/mirc-VmNe8AwF.js +0 -4
  444. package/dist/mllike-BdD7SJEa.js +0 -6
  445. package/dist/modelica-BA4VqzC3.js +0 -4
  446. package/dist/mscgen-DF-5WHJm.js +0 -6
  447. package/dist/mumps-c_Uia_QN.js +0 -4
  448. package/dist/nsis-BAANGODV.js +0 -5
  449. package/dist/ntriples-Bslqh2Ki.js +0 -4
  450. package/dist/octave-DYn5ltia.js +0 -4
  451. package/dist/oz-B_N-StZq.js +0 -4
  452. package/dist/packet-HUATNLJX-CkqjFdAv.js +0 -21
  453. package/dist/pascal-DU4CtAUu.js +0 -4
  454. package/dist/perl-Bae6k32u.js +0 -4
  455. package/dist/pie-WTHONI2E-D0rWwX5P.js +0 -21
  456. package/dist/pig-DSIxUEgX.js +0 -4
  457. package/dist/powershell-31lcPgIF.js +0 -4
  458. package/dist/properties-lmYbntDG.js +0 -4
  459. package/dist/protobuf-BTYoCEpV.js +0 -4
  460. package/dist/pug-DMFM7zzO.js +0 -5
  461. package/dist/puppet-B0ub07d-.js +0 -4
  462. package/dist/python-C4jT87Nt.js +0 -5
  463. package/dist/q-YbPYlqRI.js +0 -4
  464. package/dist/r-OfNu6HAI.js +0 -4
  465. package/dist/radar-NJJJXTRR-Bxqv4O5a.js +0 -21
  466. package/dist/rpm-D_3b5peD.js +0 -5
  467. package/dist/ruby-CehsJy_T.js +0 -4
  468. package/dist/sas-DwQHzPoF.js +0 -4
  469. package/dist/scheme-B6ArxiQu.js +0 -4
  470. package/dist/shell-AHmQgDfc.js +0 -4
  471. package/dist/sieve-CgodKOcx.js +0 -4
  472. package/dist/smalltalk-BeFzDkbo.js +0 -4
  473. package/dist/sparql-BWxq-Lnx.js +0 -4
  474. package/dist/stateDiagram-v2-UMBNRL4Z-D9v8fKjF.js +0 -38
  475. package/dist/stex-Dvaq0qsm.js +0 -5
  476. package/dist/stylus-Ge0ofWlZ.js +0 -4
  477. package/dist/swift-CjQfbVxV.js +0 -4
  478. package/dist/tcl-CAGDF11K.js +0 -4
  479. package/dist/textile-CrXreJtf.js +0 -4
  480. package/dist/toml-AdLXKwEi.js +0 -4
  481. package/dist/treemap-75Q7IDZK-Da9Jv6a_.js +0 -21
  482. package/dist/troff-C-LaM2ex.js +0 -4
  483. package/dist/ttcn-DTclUi6T.js +0 -4
  484. package/dist/ttcn-cfg-BtBPbmLX.js +0 -4
  485. package/dist/turtle-BODDDg5O.js +0 -4
  486. package/dist/vb-Cb1HQHii.js +0 -4
  487. package/dist/vbscript-CpXOP4wZ.js +0 -4
  488. package/dist/velocity-Dz0rBQIk.js +0 -4
  489. package/dist/verilog-6Di9aLKw.js +0 -4
  490. package/dist/vhdl-BRNesXYc.js +0 -4
  491. package/dist/webidl-BpRNYIYn.js +0 -4
  492. package/dist/xquery-DXWcJ7b6.js +0 -4
  493. package/dist/yacas-DbSARPz4.js +0 -4
  494. package/dist/z80-DzslPj_l.js +0 -4
  495. package/src/core/codemirror/language/__tests__/ast.test.ts +0 -124
  496. package/src/core/codemirror/language/utils/ast.ts +0 -84
  497. package/src/core/codemirror/language/utils/quotes.ts +0 -18
  498. /package/dist/{_arrayReduce-CVwxyrBP.js → _arrayReduce-Cd9xQjbl.js} +0 -0
  499. /package/dist/{_baseSlice-OgpvpOOJ.js → _baseSlice-CE9WsQZm.js} +0 -0
  500. /package/dist/{_hasUnicode-BgIggCqE.js → _hasUnicode-DkEebvtD.js} +0 -0
  501. /package/dist/{apl-CEHentF4.js → apl-aGhy11IM.js} +0 -0
  502. /package/dist/{array-aAxy08hN.js → array-DYSXIreg.js} +0 -0
  503. /package/dist/{asciiarmor-DURYiCS0.js → asciiarmor-DJKJ3Gkn.js} +0 -0
  504. /package/dist/{asn1-ETAiEoXY.js → asn1-C6f5IeNs.js} +0 -0
  505. /package/dist/{asterisk-DTpbbXPb.js → asterisk-DB1poX9_.js} +0 -0
  506. /package/dist/{brainfuck-BWQep-SA.js → brainfuck-Ch9vjun0.js} +0 -0
  507. /package/dist/{chunk-57QY23SG-0TxCfmy_.js → chunk-57QY23SG-BpXU7ph4.js} +0 -0
  508. /package/dist/{clike-bzZTreP4.js → clike-Bc2PZzZQ.js} +0 -0
  509. /package/dist/{clojure-BzFapDkA.js → clojure-B_lpr3zt.js} +0 -0
  510. /package/dist/{cmake-DvlbIC8x.js → cmake-DaocNF4I.js} +0 -0
  511. /package/dist/{cobol-BrEI4cPR.js → cobol-suTPtt7c.js} +0 -0
  512. /package/dist/{coffeescript-B6cvu8mO.js → coffeescript-CPLIvtqJ.js} +0 -0
  513. /package/dist/{colors-Cr_mZ2aH.js → colors-BXlG8Lmz.js} +0 -0
  514. /package/dist/{common-keywords-WqQm7W8t.js → common-keywords-Bhll7O3b.js} +0 -0
  515. /package/dist/{commonlisp-BIT8PQqi.js → commonlisp-BqM3qFK7.js} +0 -0
  516. /package/dist/{crystal-B_UcPArT.js → crystal-AsSFu4ke.js} +0 -0
  517. /package/dist/{css-dHbnt_zl.js → css-Df7Sdeyh.js} +0 -0
  518. /package/dist/{cypher-Dh3FOpL7.js → cypher-CaVKL6Gu.js} +0 -0
  519. /package/dist/{cytoscape.esm-BTpRoPd2.js → cytoscape.esm-BFEMljQI.js} +0 -0
  520. /package/dist/{d-CQD1IHee.js → d-DCGWK7NQ.js} +0 -0
  521. /package/dist/{defaultLocale-BAgEOGks.js → defaultLocale-CYgZlqDF.js} +0 -0
  522. /package/dist/{defaultLocale-471SYAPk.js → defaultLocale-Cto8YOmX.js} +0 -0
  523. /package/dist/{diff-CpF_IDx0.js → diff-CsxOM4Tr.js} +0 -0
  524. /package/dist/{dist-CK8Gj3GX.js → dist-C76MUPD3.js} +0 -0
  525. /package/dist/{dtd-DYoNpy6c.js → dtd-Dwr0Jmks.js} +0 -0
  526. /package/dist/{duckdb-keywords-CdIsl9L0.js → duckdb-keywords-7wAWf848.js} +0 -0
  527. /package/dist/{dylan-Bc_2G1E-.js → dylan-A7-ZBSey.js} +0 -0
  528. /package/dist/{ebnf-jGVT_YpN.js → ebnf-9_SaGDUz.js} +0 -0
  529. /package/dist/{ecl-UIU-P-Ar.js → ecl-BzJVIQDc.js} +0 -0
  530. /package/dist/{eiffel-C90Oyuix.js → eiffel-CO9eC_Op.js} +0 -0
  531. /package/dist/{elm-B9fWSySj.js → elm-CVAWj8SB.js} +0 -0
  532. /package/dist/{emotion-is-prop-valid.esm-BHMWayAG.js → emotion-is-prop-valid.esm-C3Yi5GQt.js} +0 -0
  533. /package/dist/{erlang-Ccff0UAn.js → erlang-DWbZP546.js} +0 -0
  534. /package/dist/{fcl-CGR8NxAg.js → fcl-CM9t2iay.js} +0 -0
  535. /package/dist/{forth-U1ROGcBY.js → forth-BTYqUuu3.js} +0 -0
  536. /package/dist/{fortran-3nOkjDmc.js → fortran-DgAjHcCq.js} +0 -0
  537. /package/dist/{gas-B_4H5FzV.js → gas-BjDSWPZd.js} +0 -0
  538. /package/dist/{gherkin-B0eru5Uz.js → gherkin-ClRqqpKv.js} +0 -0
  539. /package/dist/{groovy-dqjtZUVf.js → groovy-BzNjnc8x.js} +0 -0
  540. /package/dist/{haskell-DFzCCQzo.js → haskell-DLdk34Jq.js} +0 -0
  541. /package/dist/{haxe-Da8Pj5RT.js → haxe-l6gaY_IS.js} +0 -0
  542. /package/dist/{http-1HACL_9s.js → http-6Qg7z_h2.js} +0 -0
  543. /package/dist/{idl-D3NXs5iM.js → idl-hlWT4D26.js} +0 -0
  544. /package/dist/{init-D6eDd7H0.js → init-tZ42Torz.js} +0 -0
  545. /package/dist/{isArrayLikeObject-BlvK28do.js → isArrayLikeObject-DU5MCuQM.js} +0 -0
  546. /package/dist/{javascript-BfCTmOnk.js → javascript-DGukg1sB.js} +0 -0
  547. /package/dist/{jinja2-gBHAxUdF.js → jinja2-DI5k_Er3.js} +0 -0
  548. /package/dist/{julia-bG-6nJ-_.js → julia-BvDZDiIT.js} +0 -0
  549. /package/dist/{katex-mkWmhPUh.js → katex-DgfMWJY9.js} +0 -0
  550. /package/dist/{livescript-BlsRC8UJ.js → livescript-2YMQfkfI.js} +0 -0
  551. /package/dist/{lua-BbDC0_5w.js → lua-DIUrQRfA.js} +0 -0
  552. /package/dist/{main-Czi9-LVy.js → main-BMTpe7M0.js} +0 -0
  553. /package/dist/{marked.esm-DJM8la36.js → marked.esm-DkVwEwtO.js} +0 -0
  554. /package/dist/{math-C7wLpe9K.js → math-qsHyz2Eo.js} +0 -0
  555. /package/dist/{mathematica-YZTe3-PF.js → mathematica-Dqmg_BwL.js} +0 -0
  556. /package/dist/{mbox-CY5idp08.js → mbox-Cng-P-F1.js} +0 -0
  557. /package/dist/{mirc-CbQuFZKk.js → mirc-CNDqOVhQ.js} +0 -0
  558. /package/dist/{mllike-DsbHMX-5.js → mllike-C1n2UDyX.js} +0 -0
  559. /package/dist/{modelica-CQuvsOQk.js → modelica-QqQC2pFj.js} +0 -0
  560. /package/dist/{mscgen-LIpBP9VR.js → mscgen-C3fl8uhp.js} +0 -0
  561. /package/dist/{mumps-Ct5NXoaG.js → mumps-BeCUbMej.js} +0 -0
  562. /package/dist/{nginx-Dvc62C8z.js → nginx-ejv7DsBz.js} +0 -0
  563. /package/dist/{node-sql-parser-BqKV-TpL.js → node-sql-parser-CoPWN4hn.js} +0 -0
  564. /package/dist/{ntriples-jVkxWUuv.js → ntriples-CUgUpcma.js} +0 -0
  565. /package/dist/{octave-jGOImUB0.js → octave-BD652tGl.js} +0 -0
  566. /package/dist/{oz-Y0FKDMS2.js → oz-DrRsFa0K.js} +0 -0
  567. /package/dist/{pascal-BaLtPWWB.js → pascal-hpcx9sVn.js} +0 -0
  568. /package/dist/{path-VDkDgx1I.js → path-Bbv2tLY1.js} +0 -0
  569. /package/dist/{perl-CjfE0JLo.js → perl-DW8XHeFc.js} +0 -0
  570. /package/dist/{pig-DE4epV99.js → pig-Cv7Nxbfo.js} +0 -0
  571. /package/dist/{powershell-BZx53Ujw.js → powershell-Dr7WZMDU.js} +0 -0
  572. /package/dist/{prop-types-0wNc-99T.js → prop-types-Bd16OEUP.js} +0 -0
  573. /package/dist/{properties-CLyCG5C-.js → properties-D-qJDXAM.js} +0 -0
  574. /package/dist/{protobuf-BjBBs_V4.js → protobuf-B48QZbd3.js} +0 -0
  575. /package/dist/{puppet-ZImLuomA.js → puppet-15JDyiY2.js} +0 -0
  576. /package/dist/{python-C9YN71pR.js → python-DWkQA94h.js} +0 -0
  577. /package/dist/{q-CMoUHJ5Q.js → q-BzRpKgfd.js} +0 -0
  578. /package/dist/{r-DILmKWWW.js → r-dcNRe_Q8.js} +0 -0
  579. /package/dist/{range-PcytnUSJ.js → range-CQvYp_qE.js} +0 -0
  580. /package/dist/{rpm-fpIsm1Kr.js → rpm-Djl3Dsf1.js} +0 -0
  581. /package/dist/{ruby-BuiQI41h.js → ruby-Dd2CZTip.js} +0 -0
  582. /package/dist/{sas-C76sJ1zF.js → sas-DYF5_Iqu.js} +0 -0
  583. /package/dist/{scheme-DHjM-txv.js → scheme-YtWcji1H.js} +0 -0
  584. /package/dist/{shell--7NmGJ9p.js → shell-C3uC3Y0Z.js} +0 -0
  585. /package/dist/{sieve-DaPvBv1M.js → sieve-DHB17sQG.js} +0 -0
  586. /package/dist/{simple-mode-BP3Jd4vf.js → simple-mode-BMmwP_vI.js} +0 -0
  587. /package/dist/{smalltalk-KPvwrjCs.js → smalltalk-Y5v1Np3H.js} +0 -0
  588. /package/dist/{solr-PvZUtEDb.js → solr-DvRJLlRD.js} +0 -0
  589. /package/dist/{sparql-CXSUIQer.js → sparql-BEt3GJwM.js} +0 -0
  590. /package/dist/{spreadsheet-DPJdGPkx.js → spreadsheet-Dp4B9_rc.js} +0 -0
  591. /package/dist/{sql-Dp4ZLSIa.js → sql-DBsUs8nQ.js} +0 -0
  592. /package/dist/{stex-CeXW4zzk.js → stex-C6-x52ei.js} +0 -0
  593. /package/dist/{stylus-BXcmrg9w.js → stylus-DroA8via.js} +0 -0
  594. /package/dist/{swift-DD8I7hKP.js → swift-DR0x1ESK.js} +0 -0
  595. /package/dist/{tcl-B9Lp4GtA.js → tcl-BeuTFc_c.js} +0 -0
  596. /package/dist/{textile-qdiY0teq.js → textile-C0ikhHN3.js} +0 -0
  597. /package/dist/{tiddlywiki-t32lkubq.js → tiddlywiki-C_2Nvsgu.js} +0 -0
  598. /package/dist/{tiki-B0qKrSMl.js → tiki-CKQlhmQQ.js} +0 -0
  599. /package/dist/{timer-CzOhIJuk.js → timer-CcUhugb0.js} +0 -0
  600. /package/dist/{toml-eSl4PUAH.js → toml-BqNUJWRI.js} +0 -0
  601. /package/dist/{treemap-BpgMKHv-.js → treemap-BYLUKIzA.js} +0 -0
  602. /package/dist/{troff-105XJOEu.js → troff-DkK0f2ZH.js} +0 -0
  603. /package/dist/{tslib.es6-DofFyd9S.js → tslib.es6-3ZL768sZ.js} +0 -0
  604. /package/dist/{ttcn-1_BxDcM8.js → ttcn-Bf8vrg-_.js} +0 -0
  605. /package/dist/{ttcn-cfg-Cn_XgXiw.js → ttcn-cfg-DjCKzd95.js} +0 -0
  606. /package/dist/{turtle-BI6LyfEu.js → turtle-SSc84S9m.js} +0 -0
  607. /package/dist/{vb-BecoBfmr.js → vb-CQ6DC3cL.js} +0 -0
  608. /package/dist/{vbscript-De-zpA4i.js → vbscript-Dw0gFssg.js} +0 -0
  609. /package/dist/{velocity-DhlYJTrD.js → velocity-BvJQyBmj.js} +0 -0
  610. /package/dist/{verilog-BDZgxDOW.js → verilog-CKGAvQjj.js} +0 -0
  611. /package/dist/{vhdl-CV0OKTbp.js → vhdl-B40_x6fM.js} +0 -0
  612. /package/dist/{webidl-BOM1Fs0O.js → webidl-Bi9hczCv.js} +0 -0
  613. /package/dist/{xquery-CltP_CGh.js → xquery-DwWUXvP3.js} +0 -0
  614. /package/dist/{yacas-Dch4E2Dg.js → yacas-ClUs0mmH.js} +0 -0
  615. /package/dist/{z80-B5Yly27o.js → z80-DPC4UGzR.js} +0 -0
  616. /package/dist/{zod-ChY6miG5.js → zod-mAEs2ITo.js} +0 -0
@@ -5,7 +5,7 @@ import { useChat } from "@ai-sdk/react";
5
5
  import { storePrompt } from "@marimo-team/codemirror-ai";
6
6
  import type { ReactCodeMirrorRef } from "@uiw/react-codemirror";
7
7
  import { DefaultChatTransport, type ToolUIPart } from "ai";
8
- import { useAtom, useAtomValue, useSetAtom } from "jotai";
8
+ import { useAtom, useAtomValue, useSetAtom, useStore } from "jotai";
9
9
  import {
10
10
  AtSignIcon,
11
11
  BotMessageSquareIcon,
@@ -30,13 +30,19 @@ import {
30
30
  import { replaceMessagesInChat } from "@/core/ai/chat-utils";
31
31
  import { useModelChange } from "@/core/ai/config";
32
32
  import { AiModelId, type ProviderId } from "@/core/ai/ids/ids";
33
+ import { useStagedAICellsActions } from "@/core/ai/staged-cells";
33
34
  import {
34
35
  activeChatAtom,
35
36
  type Chat,
36
37
  type ChatId,
37
38
  chatStateAtom,
38
39
  } from "@/core/ai/state";
39
- import { FRONTEND_TOOL_REGISTRY } from "@/core/ai/tools/registry";
40
+ import type { ToolNotebookContext } from "@/core/ai/tools/base";
41
+ import {
42
+ type CopilotMode,
43
+ FRONTEND_TOOL_REGISTRY,
44
+ } from "@/core/ai/tools/registry";
45
+ import { useCellActions } from "@/core/cells/cells";
40
46
  import { aiAtom, aiEnabledAtom } from "@/core/config/config";
41
47
  import { DEFAULT_AI_MODEL } from "@/core/config/config-schema";
42
48
  import { FeatureFlagged } from "@/core/config/feature-flag";
@@ -45,7 +51,6 @@ import { useRuntimeManager } from "@/core/runtime/config";
45
51
  import { ErrorBanner } from "@/plugins/impl/common/error-banner";
46
52
  import { cn } from "@/utils/cn";
47
53
  import { Logger } from "@/utils/Logger";
48
-
49
54
  import { AIModelDropdown } from "../ai/ai-model-dropdown";
50
55
  import { useOpenSettingsToTab } from "../app-config/state";
51
56
  import { PromptInput } from "../editor/ai/add-cell-with-ai";
@@ -301,7 +306,11 @@ const ChatInputFooter: React.FC<ChatInputFooterProps> = memo(
301
306
 
302
307
  const { saveModeChange } = useModelChange();
303
308
 
304
- const modeOptions = [
309
+ const modeOptions: {
310
+ value: CopilotMode;
311
+ label: string;
312
+ subtitle: string;
313
+ }[] = [
305
314
  {
306
315
  value: "ask",
307
316
  label: "Ask",
@@ -313,6 +322,11 @@ const ChatInputFooter: React.FC<ChatInputFooterProps> = memo(
313
322
  label: "Manual",
314
323
  subtitle: "Pure chat, no tool usage",
315
324
  },
325
+ {
326
+ value: "agent",
327
+ label: "Agent (beta)",
328
+ subtitle: "Use AI with access to read and write tools",
329
+ },
316
330
  ];
317
331
 
318
332
  const isAttachmentSupported =
@@ -511,9 +525,20 @@ const ChatPanelBody = () => {
511
525
  const fileInputRef = useRef<HTMLInputElement>(null);
512
526
  const messagesEndRef = useRef<HTMLDivElement>(null);
513
527
  const runtimeManager = useRuntimeManager();
514
- const { invokeAiTool } = useRequestClient();
528
+ const { invokeAiTool, sendRun } = useRequestClient();
515
529
 
516
530
  const activeChatId = activeChat?.id;
531
+ const store = useStore();
532
+
533
+ const { addStagedCell } = useStagedAICellsActions();
534
+ const { createNewCell, prepareForRun } = useCellActions();
535
+ const toolContext: ToolNotebookContext = {
536
+ addStagedCell,
537
+ createNewCell,
538
+ prepareForRun,
539
+ sendRun,
540
+ store,
541
+ };
517
542
 
518
543
  const {
519
544
  messages,
@@ -555,6 +580,13 @@ const ChatPanelBody = () => {
555
580
  });
556
581
  },
557
582
  onToolCall: async ({ toolCall }) => {
583
+ // Dynamic tool calls will throw an error for toolName
584
+ // https://ai-sdk.dev/docs/ai-sdk-ui/chatbot-tool-usage#client-side-page
585
+ if (toolCall.dynamic) {
586
+ Logger.debug("Skipping dynamic tool call", toolCall);
587
+ return;
588
+ }
589
+
558
590
  await handleToolCall({
559
591
  invokeAiTool,
560
592
  addToolResult,
@@ -563,6 +595,7 @@ const ChatPanelBody = () => {
563
595
  toolCallId: toolCall.toolCallId,
564
596
  input: toolCall.input as Record<string, never>,
565
597
  },
598
+ toolContext,
566
599
  });
567
600
  },
568
601
  onError: (error) => {
@@ -2,6 +2,7 @@
2
2
 
3
3
  import type { components } from "@marimo-team/marimo-api";
4
4
  import type { FileUIPart, ToolUIPart, UIMessage } from "ai";
5
+ import type { ToolNotebookContext } from "@/core/ai/tools/base";
5
6
  import { FRONTEND_TOOL_REGISTRY } from "@/core/ai/tools/registry";
6
7
  import type {
7
8
  InvokeAiToolRequest,
@@ -106,8 +107,9 @@ interface AddToolResult {
106
107
 
107
108
  export async function handleToolCall({
108
109
  invokeAiTool,
109
- addToolResult,
110
+ addToolResult, // Important that we don't await addToolResult to prevent potential deadlocks
110
111
  toolCall,
112
+ toolContext,
111
113
  }: {
112
114
  invokeAiTool: (request: InvokeAiToolRequest) => Promise<InvokeAiToolResponse>;
113
115
  addToolResult: (result: AddToolResult) => Promise<void>;
@@ -116,6 +118,7 @@ export async function handleToolCall({
116
118
  toolCallId: string;
117
119
  input: Record<string, never>;
118
120
  };
121
+ toolContext: ToolNotebookContext;
119
122
  }) {
120
123
  try {
121
124
  if (FRONTEND_TOOL_REGISTRY.has(toolCall.toolName)) {
@@ -123,6 +126,7 @@ export async function handleToolCall({
123
126
  const response = await FRONTEND_TOOL_REGISTRY.invoke(
124
127
  toolCall.toolName,
125
128
  toolCall.input,
129
+ toolContext,
126
130
  );
127
131
  addToolResult({
128
132
  tool: toolCall.toolName,
@@ -33,6 +33,7 @@
33
33
 
34
34
  code {
35
35
  font-size: inherit !important;
36
+ white-space: pre-wrap;
36
37
  }
37
38
 
38
39
  li.task-list-item {
@@ -119,6 +119,8 @@ const ToolArgsRenderer: React.FC<{ input: unknown }> = ({ input }) => {
119
119
  return null;
120
120
  }
121
121
 
122
+ const isEmptyInput = isEmpty(input);
123
+
122
124
  const isObject =
123
125
  typeof input === "object" &&
124
126
  Object.keys(input as Record<string, unknown>).length > 0;
@@ -129,7 +131,11 @@ const ToolArgsRenderer: React.FC<{ input: unknown }> = ({ input }) => {
129
131
  Tool Request
130
132
  </h3>
131
133
  <pre className="bg-[var(--slate-2)] p-2 text-muted-foreground border border-[var(--slate-4)] rounded text-xs overflow-auto scrollbar-thin max-h-64">
132
- {isObject ? JSON.stringify(input, null, 2) : String(input)}
134
+ {isEmptyInput
135
+ ? "{}"
136
+ : isObject
137
+ ? JSON.stringify(input, null, 2)
138
+ : String(input)}
133
139
  </pre>
134
140
  </div>
135
141
  );
@@ -2,8 +2,18 @@
2
2
 
3
3
  import { getDefaultStore } from "jotai";
4
4
  import { beforeEach, describe, expect, it, vi } from "vitest";
5
- import { asMock, SetupMocks } from "@/__mocks__/common";
5
+
6
+ // Mock the storage module to use our mock storage
7
+ vi.mock("@/utils/storage/storage", () => ({
8
+ availableStorage: {
9
+ getItem: vi.fn(),
10
+ setItem: vi.fn(),
11
+ removeItem: vi.fn(),
12
+ },
13
+ }));
14
+
6
15
  import type { CellId } from "@/core/cells/ids";
16
+ import { availableStorage } from "@/utils/storage/storage";
7
17
  import { ChartSchema } from "../schemas";
8
18
  import type { TabName } from "../storage";
9
19
  import { KEY, tabsStorageAtom } from "../storage";
@@ -12,7 +22,6 @@ import { ChartType } from "../types";
12
22
  describe("Chart Transforms Storage", () => {
13
23
  beforeEach(() => {
14
24
  vi.clearAllMocks();
15
- SetupMocks.localStorage();
16
25
  // Reset the store before each test
17
26
  const store = getDefaultStore();
18
27
  store.set(tabsStorageAtom, new Map());
@@ -87,14 +96,11 @@ describe("Chart Transforms Storage", () => {
87
96
 
88
97
  describe("LocalStorage integration", () => {
89
98
  it("should call localStorage.setItem when setting data", () => {
90
- // Reset the mock to ensure clean state
91
- asMock(window.localStorage.setItem).mockReset();
92
-
93
99
  const store = getDefaultStore();
94
100
  const newMap = new Map();
95
101
  store.set(tabsStorageAtom, newMap);
96
102
 
97
- expect(window.localStorage.setItem).toHaveBeenCalledWith(
103
+ expect(availableStorage.setItem).toHaveBeenCalledWith(
98
104
  KEY,
99
105
  JSON.stringify([]),
100
106
  );
@@ -48,6 +48,7 @@ const CHART_HEIGHT = 290;
48
48
 
49
49
  export interface TablePanelProps {
50
50
  cellId: CellId | null;
51
+ data: unknown[];
51
52
  dataTable: JSX.Element;
52
53
  displayHeader: boolean;
53
54
  getDataUrl?: GetDataUrl;
@@ -56,6 +57,7 @@ export interface TablePanelProps {
56
57
 
57
58
  export const TablePanel: React.FC<TablePanelProps> = ({
58
59
  cellId,
60
+ data,
59
61
  dataTable,
60
62
  getDataUrl,
61
63
  fieldTypes,
@@ -211,6 +213,7 @@ export const TablePanel: React.FC<TablePanelProps> = ({
211
213
  return (
212
214
  <TabsContent key={idx} value={tab.tabName} className="h-[400px] mt-1">
213
215
  <ChartPanel
216
+ tableData={data}
214
217
  chartConfig={tab.config}
215
218
  chartType={tab.chartType}
216
219
  saveChart={saveChart}
@@ -228,6 +231,7 @@ export const TablePanel: React.FC<TablePanelProps> = ({
228
231
  const CHART_PLACEHOLDER_CODE = "X and Y columns are not set";
229
232
 
230
233
  export const ChartPanel: React.FC<{
234
+ tableData: unknown[];
231
235
  chartConfig: ChartSchemaType | null;
232
236
  chartType: ChartType;
233
237
  saveChart: (formValues: ChartSchemaType) => void;
@@ -235,6 +239,7 @@ export const ChartPanel: React.FC<{
235
239
  getDataUrl?: GetDataUrl;
236
240
  fieldTypes?: FieldTypesWithExternalType | null;
237
241
  }> = ({
242
+ tableData,
238
243
  chartConfig,
239
244
  chartType,
240
245
  saveChart,
@@ -255,7 +260,7 @@ export const ChartPanel: React.FC<{
255
260
  const { ref: chartContainerRef } = useResizeObserver();
256
261
 
257
262
  const { data, isPending, error } = useAsyncData(async () => {
258
- if (!getDataUrl) {
263
+ if (!getDataUrl || tableData.length === 0) {
259
264
  return [];
260
265
  }
261
266
 
@@ -276,7 +281,8 @@ export const ChartPanel: React.FC<{
276
281
  },
277
282
  );
278
283
  return chartData;
279
- }, []);
284
+ // Re-run when the data table changes
285
+ }, [tableData]);
280
286
 
281
287
  const formValues = form.watch();
282
288
 
@@ -5,7 +5,7 @@ import { capitalize } from "lodash-es";
5
5
  import { z } from "zod";
6
6
  import type { CellId } from "@/core/cells/ids";
7
7
  import { Logger } from "@/utils/Logger";
8
- import { NotebookScopedLocalStorage } from "@/utils/localStorage";
8
+ import { NotebookScopedLocalStorage } from "@/utils/storage/typed";
9
9
  import type { TypedString } from "@/utils/typed";
10
10
  import { ChartSchema, type ChartSchemaType } from "./schemas";
11
11
  import type { ChartType } from "./types";
@@ -13,6 +13,8 @@ import type {
13
13
  ColumnWrappingTableState,
14
14
  } from "./types";
15
15
 
16
+ export const COLUMN_WRAPPING_STYLES = "whitespace-pre-wrap min-w-[200px]";
17
+
16
18
  export const ColumnWrappingFeature: TableFeature = {
17
19
  getInitialState: (state): ColumnWrappingTableState => {
18
20
  return {
@@ -21,6 +21,7 @@ import { Tooltip } from "../ui/tooltip";
21
21
  import { DataTableColumnHeader } from "./column-header";
22
22
  import type { ColumnChartSpecModel } from "./column-summary/chart-spec-model";
23
23
  import { TableColumnSummary } from "./column-summary/column-summary";
24
+ import { COLUMN_WRAPPING_STYLES } from "./column-wrapping/feature";
24
25
  import { DatePopover } from "./date-popover";
25
26
  import type { FilterType } from "./filters";
26
27
  import { getMimeValues, MimeCell } from "./mime-cell";
@@ -315,6 +316,7 @@ const PopoutColumn = ({
315
316
  rawStringValue,
316
317
  contentClassName,
317
318
  buttonText,
319
+ wrapped,
318
320
  children,
319
321
  }: {
320
322
  cellStyles?: string;
@@ -322,6 +324,7 @@ const PopoutColumn = ({
322
324
  rawStringValue: string;
323
325
  contentClassName?: string;
324
326
  buttonText?: string;
327
+ wrapped?: boolean;
325
328
  children: React.ReactNode;
326
329
  }) => {
327
330
  return (
@@ -336,7 +339,10 @@ const PopoutColumn = ({
336
339
  }}
337
340
  >
338
341
  <span
339
- className="cursor-pointer hover:text-link"
342
+ className={cn(
343
+ "cursor-pointer hover:text-link",
344
+ wrapped && COLUMN_WRAPPING_STYLES,
345
+ )}
340
346
  title={rawStringValue}
341
347
  >
342
348
  {rawStringValue}
@@ -408,7 +414,7 @@ function getCellStyleClass(
408
414
  "truncate",
409
415
  justify === "center" && "text-center",
410
416
  justify === "right" && "text-right",
411
- wrapped && "whitespace-pre-wrap min-w-[200px] break-words",
417
+ wrapped && `${COLUMN_WRAPPING_STYLES} break-words`,
412
418
  );
413
419
  }
414
420
 
@@ -517,6 +523,7 @@ export function renderCellValue<TData, TValue>({
517
523
  rawStringValue={stringValue}
518
524
  contentClassName="max-h-64 overflow-auto whitespace-pre-wrap break-words text-sm"
519
525
  buttonText="X"
526
+ wrapped={column.getColumnWrapping?.() === "wrap"}
520
527
  >
521
528
  <UrlDetector parts={parts} />
522
529
  </PopoutColumn>
@@ -558,6 +565,7 @@ export function renderCellValue<TData, TValue>({
558
565
  cellStyles={cellStyles}
559
566
  selectCell={selectCell}
560
567
  rawStringValue={rawStringValue}
568
+ wrapped={column.getColumnWrapping?.() === "wrap"}
561
569
  >
562
570
  <JsonOutput data={value} format="tree" className="max-h-64" />
563
571
  </PopoutColumn>
@@ -20,6 +20,7 @@ import {
20
20
  TableRow,
21
21
  } from "@/components/ui/table";
22
22
  import { cn } from "@/utils/cn";
23
+ import { COLUMN_WRAPPING_STYLES } from "./column-wrapping/feature";
23
24
  import { CellRangeSelectionIndicator } from "./range-focus/cell-selection-indicator";
24
25
  import { useCellRangeSelection } from "./range-focus/use-cell-range-selection";
25
26
  import { useScrollIntoViewOnFocus } from "./range-focus/use-scroll-into-view";
@@ -130,8 +131,8 @@ export const DataTableBody = <TData,>({
130
131
  className={cn(
131
132
  "whitespace-pre truncate max-w-[300px] outline-hidden",
132
133
  cell.column.getColumnWrapping &&
133
- cell.column.getColumnWrapping() === "wrap" &&
134
- "whitespace-pre-wrap min-w-[200px]",
134
+ cell.column.getColumnWrapping?.() === "wrap" &&
135
+ COLUMN_WRAPPING_STYLES,
135
136
  "px-1.5 py-[0.18rem]",
136
137
  className,
137
138
  )}
@@ -26,8 +26,8 @@ import {
26
26
  ExpandIcon,
27
27
  } from "lucide-react";
28
28
  import { useExpandedOutput } from "@/core/cells/outputs";
29
+ import { useIframeCapabilities } from "@/hooks/useIframeCapabilities";
29
30
  import { renderHTML } from "@/plugins/core/RenderHTML";
30
- import { LazyAnyLanguageCodeMirror } from "@/plugins/impl/code/LazyAnyLanguageCodeMirror";
31
31
  import { Banner } from "@/plugins/impl/common/error-banner";
32
32
  import type { TopLevelFacetedUnitSpec } from "@/plugins/impl/data-explorer/queries/types";
33
33
  import { useTheme } from "@/theme/useTheme";
@@ -93,7 +93,14 @@ export const OutputRenderer: React.FC<{
93
93
  typeof data === "string",
94
94
  `Expected string data for mime=${mimetype}. Got ${typeof data}`,
95
95
  );
96
- return <HtmlOutput className={channel} html={data} />;
96
+ // We don't sanitize HTML in text/html to allow for iframes or rich javascript content.
97
+ return (
98
+ <HtmlOutput
99
+ className={channel}
100
+ html={data}
101
+ alwaysSanitizeHtml={false}
102
+ />
103
+ );
97
104
 
98
105
  case "text/plain":
99
106
  invariant(
@@ -124,7 +131,7 @@ export const OutputRenderer: React.FC<{
124
131
  typeof data === "string",
125
132
  `Expected string data for mime=${mimetype}. Got ${typeof data}`,
126
133
  );
127
- return renderHTML({ html: data });
134
+ return renderHTML({ html: data, alwaysSanitizeHtml: true });
128
135
 
129
136
  case "video/mp4":
130
137
  case "video/mpeg":
@@ -164,13 +171,7 @@ export const OutputRenderer: React.FC<{
164
171
  `Expected string data for mime=${mimetype}. Got ${typeof data}`,
165
172
  );
166
173
  return (
167
- <LazyAnyLanguageCodeMirror
168
- theme={theme === "dark" ? "dark" : "light"}
169
- value={data}
170
- readOnly={true}
171
- editable={false}
172
- language="markdown"
173
- />
174
+ <HtmlOutput className={channel} html={data} alwaysSanitizeHtml={true} />
174
175
  );
175
176
  case "application/vnd.vegalite.v5+json":
176
177
  case "application/vnd.vega.v5+json":
@@ -378,6 +379,7 @@ const ExpandableOutput = React.memo(
378
379
  const containerRef = useRef<HTMLDivElement>(null);
379
380
  const [isExpanded, setIsExpanded] = useExpandedOutput(cellId);
380
381
  const [isOverflowing, setIsOverflowing] = useState(false);
382
+ const { hasFullscreen } = useIframeCapabilities();
381
383
 
382
384
  // Create resize observer to detect overflow
383
385
  useEffect(() => {
@@ -403,20 +405,22 @@ const ExpandableOutput = React.memo(
403
405
  <div>
404
406
  <div className="relative print:hidden">
405
407
  <div className="absolute -right-9 top-1 z-1 flex flex-col gap-1">
406
- <Tooltip content="Fullscreen" side="left">
407
- <Button
408
- data-testid="fullscreen-output-button"
409
- className="hover-action hover:bg-muted p-1 hover:border-border border border-transparent"
410
- onClick={async () => {
411
- await containerRef.current?.requestFullscreen();
412
- }}
413
- onMouseDown={Events.preventFocus}
414
- size="xs"
415
- variant="text"
416
- >
417
- <ExpandIcon className="size-4" strokeWidth={1.25} />
418
- </Button>
419
- </Tooltip>
408
+ {hasFullscreen && (
409
+ <Tooltip content="Fullscreen" side="left">
410
+ <Button
411
+ data-testid="fullscreen-output-button"
412
+ className="hover-action hover:bg-muted p-1 hover:border-border border border-transparent"
413
+ onClick={async () => {
414
+ await containerRef.current?.requestFullscreen();
415
+ }}
416
+ onMouseDown={Events.preventFocus}
417
+ size="xs"
418
+ variant="text"
419
+ >
420
+ <ExpandIcon className="size-4" strokeWidth={1.25} />
421
+ </Button>
422
+ </Tooltip>
423
+ )}
420
424
  {(isOverflowing || isExpanded) && !forceExpand && (
421
425
  <Button
422
426
  data-testid="expand-output-button"
@@ -39,7 +39,11 @@ import { Switch } from "@/components/ui/switch";
39
39
  import { toast } from "@/components/ui/use-toast";
40
40
  import { aiCompletionCellAtom } from "@/core/ai/state";
41
41
  import { maybeAddMarimoImport } from "@/core/cells/add-missing-import";
42
- import { hasOnlyOneCellAtom, useCellActions } from "@/core/cells/cells";
42
+ import {
43
+ hasOnlyOneCellAtom,
44
+ SETUP_CELL_ID,
45
+ useCellActions,
46
+ } from "@/core/cells/cells";
43
47
  import type { CellId } from "@/core/cells/ids";
44
48
  import type { CellData } from "@/core/cells/types";
45
49
  import { formatEditorViews } from "@/core/codemirror/format";
@@ -136,6 +140,8 @@ export function useCellActionButtons({ cell, closePopover }: Props) {
136
140
  }
137
141
  };
138
142
 
143
+ const isSetupCell = cellId === SETUP_CELL_ID;
144
+
139
145
  // Actions
140
146
  const actions: ActionButton[][] = [
141
147
  [
@@ -181,6 +187,7 @@ export function useCellActionButtons({ cell, closePopover }: Props) {
181
187
  onEnterKey={() => closePopover?.()}
182
188
  />
183
189
  ),
190
+ hidden: isSetupCell,
184
191
  },
185
192
  {
186
193
  icon: <PlayIcon size={13} strokeWidth={1.5} />,
@@ -254,6 +261,7 @@ export function useCellActionButtons({ cell, closePopover }: Props) {
254
261
  />
255
262
  ),
256
263
  handle: toggleDisabled,
264
+ hidden: isSetupCell,
257
265
  },
258
266
  {
259
267
  icon: <XCircleIcon size={13} strokeWidth={1.5} />,
@@ -282,6 +290,7 @@ export function useCellActionButtons({ cell, closePopover }: Props) {
282
290
  keepCodeAsIs: false,
283
291
  });
284
292
  },
293
+ hidden: isSetupCell,
285
294
  },
286
295
  {
287
296
  icon: <DatabaseIcon size={13} strokeWidth={1.5} />,
@@ -297,6 +306,7 @@ export function useCellActionButtons({ cell, closePopover }: Props) {
297
306
  keepCodeAsIs: false,
298
307
  });
299
308
  },
309
+ hidden: isSetupCell,
300
310
  },
301
311
  {
302
312
  icon: <PythonIcon />,
@@ -309,6 +319,7 @@ export function useCellActionButtons({ cell, closePopover }: Props) {
309
319
  maybeAddMarimoImport({ autoInstantiate, createNewCell: createCell });
310
320
  toggleToLanguage(editorView, "python", { force: true });
311
321
  },
322
+ hidden: isSetupCell,
312
323
  },
313
324
  ],
314
325
 
@@ -324,6 +335,7 @@ export function useCellActionButtons({ cell, closePopover }: Props) {
324
335
  label: "Create cell above",
325
336
  hotkey: "cell.createAbove",
326
337
  handle: () => createCell({ cellId, before: true }),
338
+ hidden: isSetupCell,
327
339
  },
328
340
  {
329
341
  icon: (
@@ -341,26 +353,28 @@ export function useCellActionButtons({ cell, closePopover }: Props) {
341
353
  label: "Move cell up",
342
354
  hotkey: "cell.moveUp",
343
355
  handle: () => moveCell({ cellId, before: true }),
356
+ hidden: isSetupCell,
344
357
  },
345
358
  {
346
359
  icon: <ChevronDownIcon size={13} strokeWidth={1.5} />,
347
360
  label: "Move cell down",
348
361
  hotkey: "cell.moveDown",
349
362
  handle: () => moveCell({ cellId, before: false }),
363
+ hidden: isSetupCell,
350
364
  },
351
365
  {
352
366
  icon: <ChevronLeftIcon size={13} strokeWidth={1.5} />,
353
367
  label: "Move cell left",
354
368
  hotkey: "cell.moveLeft",
355
369
  handle: () => moveCell({ cellId, direction: "left" }),
356
- hidden: appWidth !== "columns",
370
+ hidden: appWidth !== "columns" || isSetupCell,
357
371
  },
358
372
  {
359
373
  icon: <ChevronRightIcon size={13} strokeWidth={1.5} />,
360
374
  label: "Move cell right",
361
375
  hotkey: "cell.moveRight",
362
376
  handle: () => moveCell({ cellId, direction: "right" }),
363
- hidden: appWidth !== "columns",
377
+ hidden: appWidth !== "columns" || isSetupCell,
364
378
  },
365
379
  {
366
380
  icon: <ChevronsUpIcon size={13} strokeWidth={1.5} />,
@@ -369,6 +383,7 @@ export function useCellActionButtons({ cell, closePopover }: Props) {
369
383
  // When using the cell menu, likely the user doesn't want to scroll
370
384
  // and instead just wants to get the cell out of the way
371
385
  handle: () => sendToTop({ cellId, scroll: false }),
386
+ hidden: isSetupCell,
372
387
  },
373
388
  {
374
389
  icon: <ChevronsDownIcon size={13} strokeWidth={1.5} />,
@@ -377,13 +392,14 @@ export function useCellActionButtons({ cell, closePopover }: Props) {
377
392
  // When using the cell menu, likely the user doesn't want to scroll
378
393
  // and instead just wants to get the cell out of the way
379
394
  handle: () => sendToBottom({ cellId, scroll: false }),
395
+ hidden: isSetupCell,
380
396
  },
381
397
  {
382
398
  icon: <Columns2Icon size={13} strokeWidth={1.5} />,
383
399
  label: "Break into new column",
384
400
  hotkey: "cell.addColumnBreakpoint",
385
- hidden: appWidth !== "columns",
386
401
  handle: () => addColumnBreakpoint({ cellId }),
402
+ hidden: appWidth !== "columns" || isSetupCell,
387
403
  },
388
404
  ],
389
405
 
@@ -44,6 +44,8 @@ import {
44
44
  } from "@/components/ui/dropdown-menu";
45
45
  import { toast } from "@/components/ui/use-toast";
46
46
  import { stagedAICellsAtom, useStagedCells } from "@/core/ai/staged-cells";
47
+ import type { ToolNotebookContext } from "@/core/ai/tools/base";
48
+ import { useCellActions } from "@/core/cells/cells";
47
49
  import { resourceExtension } from "@/core/codemirror/ai/resources";
48
50
  import { useRequestClient } from "@/core/network/requests";
49
51
  import type { AiCompletionRequest } from "@/core/network/types";
@@ -51,7 +53,8 @@ import { useRuntimeManager } from "@/core/runtime/config";
51
53
  import { useTheme } from "@/theme/useTheme";
52
54
  import { cn } from "@/utils/cn";
53
55
  import { prettyError } from "@/utils/errors";
54
- import { ZodLocalStorage } from "@/utils/localStorage";
56
+ import { jotaiJsonStorage } from "@/utils/storage/jotai";
57
+ import { ZodLocalStorage } from "@/utils/storage/typed";
55
58
  import { PythonIcon } from "../cell/code/icons";
56
59
  import {
57
60
  CompletionActions,
@@ -64,6 +67,7 @@ import { StreamingChunkTransport } from "./transport/chat-transport";
64
67
  const languageAtom = atomWithStorage<"python" | "sql">(
65
68
  "marimo:ai-language",
66
69
  "python",
70
+ jotaiJsonStorage,
67
71
  );
68
72
 
69
73
  const KEY = "marimo:ai-prompt-history";
@@ -79,15 +83,24 @@ export const AddCellWithAI: React.FC<{
79
83
  const store = useStore();
80
84
  const [input, setInput] = useState("");
81
85
 
82
- const { deleteAllStagedCells, clearStagedCells, onStream } =
86
+ const { deleteAllStagedCells, clearStagedCells, onStream, addStagedCell } =
83
87
  useStagedCells(store);
84
88
  const [language, setLanguage] = useAtom(languageAtom);
85
89
  const runtimeManager = useRuntimeManager();
86
- const { invokeAiTool } = useRequestClient();
90
+ const { invokeAiTool, sendRun } = useRequestClient();
87
91
 
88
92
  const stagedAICells = useAtomValue(stagedAICellsAtom);
89
93
  const inputRef = useRef<ReactCodeMirrorRef>(null);
90
94
 
95
+ const { createNewCell, prepareForRun } = useCellActions();
96
+ const toolContext: ToolNotebookContext = {
97
+ store,
98
+ addStagedCell,
99
+ createNewCell,
100
+ prepareForRun,
101
+ sendRun,
102
+ };
103
+
91
104
  const { sendMessage, stop, status, addToolResult } = useChat({
92
105
  // Throttle the messages and data updates to 100ms
93
106
  experimental_throttle: 100,
@@ -125,6 +138,7 @@ export const AddCellWithAI: React.FC<{
125
138
  toolCallId: toolCall.toolCallId,
126
139
  input: toolCall.input as Record<string, never>,
127
140
  },
141
+ toolContext,
128
142
  });
129
143
  },
130
144
  onError: (error) => {