@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
@@ -6,6 +6,7 @@ import { beforeEach, describe, expect, it, vi } from "vitest";
6
6
  import { CellId } from "@/core/cells/ids";
7
7
  import { updateEditorCodeFromPython } from "../../codemirror/language/utils";
8
8
  import {
9
+ type StagedAICells,
9
10
  stagedAICellsAtom,
10
11
  useStagedCells,
11
12
  visibleForTesting,
@@ -35,6 +36,7 @@ vi.mock("../../cells/cells", () => ({
35
36
  cellHandleAtom: vi.fn(() => ({
36
37
  read: vi.fn(() => mockCellHandle),
37
38
  })),
39
+ getCellEditorView: vi.fn(() => mockCellHandle.current.editorViewOrNull),
38
40
  }));
39
41
 
40
42
  vi.mock("@/components/editor/cell/useDeleteCell", () => ({
@@ -66,32 +68,77 @@ describe("staged-cells", () => {
66
68
  vi.clearAllMocks();
67
69
 
68
70
  // Reset the atom state
69
- store.set(stagedAICellsAtom, new Set<CellId>());
71
+ store.set(stagedAICellsAtom, new Map());
70
72
  });
71
73
 
72
74
  describe("reducer and actions", () => {
73
75
  it("should initialize with empty map", () => {
74
76
  const state = initialState();
75
- expect(state).toEqual(new Set());
77
+ expect(state).toEqual(new Map());
76
78
  });
77
79
 
78
- it("should add cell IDs", () => {
80
+ it("should add cells with update_cell edit", () => {
79
81
  let state = initialState();
80
82
  state = reducer(state, {
81
83
  type: "addStagedCell",
82
- payload: { cellId: cellId1 },
84
+ payload: {
85
+ cellId: cellId1,
86
+ edit: { type: "update_cell", previousCode: "old code 1" },
87
+ },
83
88
  });
84
89
  state = reducer(state, {
85
90
  type: "addStagedCell",
86
- payload: { cellId: cellId2 },
91
+ payload: {
92
+ cellId: cellId2,
93
+ edit: { type: "update_cell", previousCode: "old code 2" },
94
+ },
87
95
  });
88
96
 
89
97
  expect(state.has(cellId1)).toBe(true);
90
98
  expect(state.has(cellId2)).toBe(true);
99
+ expect(state.get(cellId1)).toEqual({
100
+ type: "update_cell",
101
+ previousCode: "old code 1",
102
+ });
103
+ expect(state.get(cellId2)).toEqual({
104
+ type: "update_cell",
105
+ previousCode: "old code 2",
106
+ });
107
+ });
108
+
109
+ it("should add cells with add_cell edit", () => {
110
+ let state = initialState();
111
+ state = reducer(state, {
112
+ type: "addStagedCell",
113
+ payload: { cellId: cellId1, edit: { type: "add_cell" } },
114
+ });
115
+
116
+ expect(state.has(cellId1)).toBe(true);
117
+ expect(state.get(cellId1)).toEqual({ type: "add_cell" });
118
+ });
119
+
120
+ it("should add cells with delete_cell edit", () => {
121
+ let state = initialState();
122
+ state = reducer(state, {
123
+ type: "addStagedCell",
124
+ payload: {
125
+ cellId: cellId1,
126
+ edit: { type: "delete_cell", previousCode: "deleted code" },
127
+ },
128
+ });
129
+
130
+ expect(state.has(cellId1)).toBe(true);
131
+ expect(state.get(cellId1)).toEqual({
132
+ type: "delete_cell",
133
+ previousCode: "deleted code",
134
+ });
91
135
  });
92
136
 
93
137
  it("should remove cell IDs", () => {
94
- const state = new Set([cellId1, cellId2]);
138
+ const state = new Map([
139
+ [cellId1, { type: "add_cell" as const }],
140
+ [cellId2, { type: "add_cell" as const }],
141
+ ]);
95
142
  const newState = reducer(state, {
96
143
  type: "removeStagedCell",
97
144
  payload: cellId1,
@@ -101,23 +148,26 @@ describe("staged-cells", () => {
101
148
  expect(newState.has(cellId2)).toBe(true);
102
149
  });
103
150
 
104
- it("should clear all cell IDs", () => {
105
- const state = new Set([cellId1, cellId2]);
151
+ it("should clear all cells", () => {
152
+ const state = new Map([
153
+ [cellId1, { type: "add_cell" as const }],
154
+ [cellId2, { type: "add_cell" as const }],
155
+ ]);
106
156
  const newState = reducer(state, {
107
157
  type: "clearStagedCells",
108
158
  payload: undefined,
109
159
  });
110
160
 
111
- expect(newState).toEqual(new Set());
161
+ expect(newState).toEqual(new Map());
112
162
  });
113
163
 
114
- it("should not mutate original state", () => {
115
- const state = new Set([cellId1]);
164
+ it("should not mutate original state when adding", () => {
165
+ const state = new Map([[cellId1, { type: "add_cell" as const }]]);
116
166
  const originalSize = state.size;
117
167
 
118
168
  reducer(state, {
119
169
  type: "addStagedCell",
120
- payload: { cellId: cellId2 },
170
+ payload: { cellId: cellId2, edit: { type: "add_cell" } },
121
171
  });
122
172
 
123
173
  expect(state.size).toBe(originalSize);
@@ -125,6 +175,23 @@ describe("staged-cells", () => {
125
175
  expect(state.has(cellId2)).toBe(false);
126
176
  });
127
177
 
178
+ it("should not mutate original state when removing", () => {
179
+ const state = new Map([
180
+ [cellId1, { type: "add_cell" as const }],
181
+ [cellId2, { type: "add_cell" as const }],
182
+ ]);
183
+ const originalSize = state.size;
184
+
185
+ reducer(state, {
186
+ type: "removeStagedCell",
187
+ payload: cellId1,
188
+ });
189
+
190
+ expect(state.size).toBe(originalSize);
191
+ expect(state.has(cellId1)).toBe(true);
192
+ expect(state.has(cellId2)).toBe(true);
193
+ });
194
+
128
195
  it("should create action functions", () => {
129
196
  const mockDispatch = vi.fn();
130
197
  const actions = createActions(mockDispatch);
@@ -136,7 +203,7 @@ describe("staged-cells", () => {
136
203
 
137
204
  it("should initialize atom with empty map", () => {
138
205
  const state = store.get(stagedAICellsAtom);
139
- expect(state).toEqual(new Set());
206
+ expect(state).toEqual(new Map());
140
207
  });
141
208
  });
142
209
 
@@ -181,7 +248,11 @@ describe("staged-cells", () => {
181
248
 
182
249
  it("should delete all staged cells when cells exist", () => {
183
250
  // First set the atom state before rendering the hook
184
- store.set(stagedAICellsAtom, new Set([cellId1, cellId2]));
251
+ const initialState: StagedAICells = new Map([
252
+ [cellId1, { type: "add_cell" }],
253
+ [cellId2, { type: "add_cell" }],
254
+ ]);
255
+ store.set(stagedAICellsAtom, initialState);
185
256
 
186
257
  const { result } = renderHook(() => useStagedCells(store));
187
258
  result.current.deleteAllStagedCells();
@@ -192,76 +263,130 @@ describe("staged-cells", () => {
192
263
 
193
264
  // Verify cells were cleared from the atom
194
265
  const state = store.get(stagedAICellsAtom);
195
- expect(state).toEqual(new Set());
266
+ expect(state).toEqual(new Map());
196
267
  });
197
- });
198
268
 
199
- it("should add staged cell", () => {
200
- const { result } = renderHook(() => useStagedCells(store));
269
+ it("should add staged cell with edit info", () => {
270
+ const { result } = renderHook(() => useStagedCells(store));
201
271
 
202
- result.current.addStagedCell({ cellId: cellId1 });
272
+ result.current.addStagedCell({
273
+ cellId: cellId1,
274
+ edit: { type: "update_cell", previousCode: "old code" },
275
+ });
203
276
 
204
- // Check that the cell was added to the atom
205
- const state = store.get(stagedAICellsAtom);
206
- expect(state.has(cellId1)).toBe(true);
207
- });
277
+ // Check that the cell was added to the atom with edit info
278
+ const state = store.get(stagedAICellsAtom);
279
+ expect(state.has(cellId1)).toBe(true);
280
+ expect(state.get(cellId1)).toEqual({
281
+ type: "update_cell",
282
+ previousCode: "old code",
283
+ });
284
+ });
208
285
 
209
- it("should remove staged cell", () => {
210
- const { result } = renderHook(() => useStagedCells(store));
286
+ it("should remove staged cell", () => {
287
+ const { result } = renderHook(() => useStagedCells(store));
211
288
 
212
- // First add cells
213
- result.current.addStagedCell({ cellId: cellId1 });
214
- result.current.addStagedCell({ cellId: cellId2 });
289
+ // First add cells
290
+ result.current.addStagedCell({
291
+ cellId: cellId1,
292
+ edit: { type: "add_cell" },
293
+ });
294
+ result.current.addStagedCell({
295
+ cellId: cellId2,
296
+ edit: { type: "add_cell" },
297
+ });
215
298
 
216
- // Then remove one
217
- result.current.removeStagedCell(cellId1);
299
+ // Then remove one
300
+ result.current.removeStagedCell(cellId1);
218
301
 
219
- // Check that only the remaining cell is in the map
220
- const state = store.get(stagedAICellsAtom);
221
- expect(state.has(cellId1)).toBe(false);
222
- expect(state.has(cellId2)).toBe(true);
223
- });
302
+ // Check that only the remaining cell is in the map
303
+ const state = store.get(stagedAICellsAtom);
304
+ expect(state.has(cellId1)).toBe(false);
305
+ expect(state.has(cellId2)).toBe(true);
306
+ });
224
307
 
225
- it("should clear all staged cells", () => {
226
- const { result } = renderHook(() => useStagedCells(store));
308
+ it("should clear all staged cells", () => {
309
+ const { result } = renderHook(() => useStagedCells(store));
227
310
 
228
- // First add some cells
229
- result.current.addStagedCell({ cellId: cellId1 });
230
- result.current.addStagedCell({ cellId: cellId2 });
311
+ // First add some cells
312
+ result.current.addStagedCell({
313
+ cellId: cellId1,
314
+ edit: { type: "add_cell" },
315
+ });
316
+ result.current.addStagedCell({
317
+ cellId: cellId2,
318
+ edit: { type: "add_cell" },
319
+ });
231
320
 
232
- // Then clear all
233
- result.current.clearStagedCells();
321
+ // Then clear all
322
+ result.current.clearStagedCells();
234
323
 
235
- // Check that no cells remain
236
- const state = store.get(stagedAICellsAtom);
237
- expect(state).toEqual(new Set());
238
- });
324
+ // Check that no cells remain
325
+ const state = store.get(stagedAICellsAtom);
326
+ expect(state).toEqual(new Map());
327
+ });
239
328
 
240
- it("should handle multiple operations correctly", () => {
241
- const { result } = renderHook(() => useStagedCells(store));
329
+ it("should handle multiple operations correctly", () => {
330
+ const { result } = renderHook(() => useStagedCells(store));
242
331
 
243
- // Create a staged cell
244
- const mockCellId = "mock-cell-id" as CellId;
245
- vi.mocked(CellId.create).mockReturnValue(mockCellId);
332
+ // Create a staged cell
333
+ const mockCellId = "mock-cell-id" as CellId;
334
+ vi.mocked(CellId.create).mockReturnValue(mockCellId);
246
335
 
247
- const createdCellId = result.current.createStagedCell("test code");
336
+ const createdCellId = result.current.createStagedCell("test code");
248
337
 
249
- // Verify it was created and added
250
- expect(createdCellId).toBe(mockCellId);
251
- expect(mockCreateNewCell).toHaveBeenCalled();
338
+ // Verify it was created and added
339
+ expect(createdCellId).toBe(mockCellId);
340
+ expect(mockCreateNewCell).toHaveBeenCalled();
252
341
 
253
- let state = store.get(stagedAICellsAtom);
254
- expect(state.has(mockCellId)).toBe(true);
342
+ let state = store.get(stagedAICellsAtom);
343
+ expect(state.has(mockCellId)).toBe(true);
344
+ expect(state.get(mockCellId)).toEqual({ type: "add_cell" });
255
345
 
256
- // Delete the staged cell
257
- result.current.deleteStagedCell(mockCellId);
258
- expect(mockDeleteCellCallback).toHaveBeenCalledWith({
259
- cellId: mockCellId,
346
+ // Delete the staged cell
347
+ result.current.deleteStagedCell(mockCellId);
348
+ expect(mockDeleteCellCallback).toHaveBeenCalledWith({
349
+ cellId: mockCellId,
350
+ });
351
+
352
+ // Verify it was removed from staged cells
353
+ state = store.get(stagedAICellsAtom);
354
+ expect(state.has(mockCellId)).toBe(false);
260
355
  });
261
356
 
262
- // Verify it was removed from staged cells
263
- state = store.get(stagedAICellsAtom);
264
- expect(state.has(mockCellId)).toBe(false);
357
+ it("should track edit history for updated cells", () => {
358
+ const { result } = renderHook(() => useStagedCells(store));
359
+
360
+ // Add a cell with update_cell edit type
361
+ result.current.addStagedCell({
362
+ cellId: cellId1,
363
+ edit: { type: "update_cell", previousCode: "previous code" },
364
+ });
365
+
366
+ const state = store.get(stagedAICellsAtom);
367
+ const edit = state.get(cellId1);
368
+ expect(edit).toEqual({
369
+ type: "update_cell",
370
+ previousCode: "previous code",
371
+ });
372
+ });
373
+
374
+ it("should track edit history for deleted cells", () => {
375
+ const { result } = renderHook(() => useStagedCells(store));
376
+
377
+ // Add a cell with delete_cell edit type
378
+ result.current.addStagedCell({
379
+ cellId: cellId1,
380
+ edit: { type: "delete_cell", previousCode: "deleted content" },
381
+ });
382
+
383
+ const state = store.get(stagedAICellsAtom);
384
+ const edit = state.get(cellId1);
385
+ expect(edit).toEqual({
386
+ type: "delete_cell",
387
+ previousCode: "deleted content",
388
+ });
389
+ });
265
390
  });
266
391
  });
267
392
 
@@ -4,7 +4,11 @@ import type { Role } from "@marimo-team/llm-info";
4
4
  import { useAtom } from "jotai";
5
5
  import type { QualifiedModelId } from "@/core/ai/ids/ids";
6
6
  import { userConfigAtom } from "@/core/config/config";
7
- import type { AIModelKey, UserConfig } from "@/core/config/config-schema";
7
+ import type {
8
+ AIModelKey,
9
+ CopilotMode,
10
+ UserConfig,
11
+ } from "@/core/config/config-schema";
8
12
  import { useRequestClient } from "@/core/network/requests";
9
13
 
10
14
  // Extract only the supported roles from the Role type
@@ -60,7 +64,7 @@ export const useModelChange = () => {
60
64
  saveConfig(newConfig);
61
65
  };
62
66
 
63
- const saveModeChange = async (newMode: "ask" | "manual") => {
67
+ const saveModeChange = async (newMode: CopilotMode) => {
64
68
  const newConfig: UserConfig = {
65
69
  ...userConfig,
66
70
  ai: {
@@ -0,0 +1,17 @@
1
+ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
+
3
+ exports[`CellOutputContextProvider > formatContext > should format media output context correctly > media-output-context 1`] = `
4
+ "<cell-output name="cell-1" cellId="cell2" outputType="media" mimetype="image/png">Cell Code:
5
+ import matplotlib.pyplot as plt
6
+ plt.plot([1,2,3])
7
+
8
+ Media Output: Contains image/png content</cell-output>"
9
+ `;
10
+
11
+ exports[`CellOutputContextProvider > formatContext > should format text output context correctly > text-output-context 1`] = `
12
+ "<cell-output name="My Cell" cellId="cell1" outputType="text" mimetype="text/plain">Cell Code:
13
+ print('hello world')
14
+
15
+ Output:
16
+ hello world</cell-output>"
17
+ `;
@@ -16,7 +16,7 @@ import type { NotebookState } from "@/core/cells/cells";
16
16
  import type { CellId } from "@/core/cells/ids";
17
17
  import type { OutputMessage } from "@/core/kernel/messages";
18
18
  import type { JotaiStore } from "@/core/state/jotai";
19
- import { CellOutputContextProvider } from "../cell-output";
19
+ import { CellOutputContextProvider, getCellContextData } from "../cell-output";
20
20
 
21
21
  // Test helper to create mock store
22
22
  function createMockStore(notebook: NotebookState): JotaiStore {
@@ -104,23 +104,23 @@ describe("CellOutputContextProvider", () => {
104
104
  const textItem = items.find((item) => item.data.cellId === "cell1");
105
105
  const mediaItem = items.find((item) => item.data.cellId === "cell2");
106
106
 
107
- expect(textItem?.data.outputType).toBe("text");
108
- expect(mediaItem?.data.outputType).toBe("media");
107
+ expect(textItem?.data.cellOutput.outputType).toBe("text");
108
+ expect(mediaItem?.data.cellOutput.outputType).toBe("media");
109
109
  });
110
110
 
111
111
  it("should process text content correctly", () => {
112
112
  const items = provider.getItems();
113
113
  const textItem = items.find((item) => item.data.cellId === "cell1");
114
114
 
115
- expect(textItem?.data.processedContent).toBe("hello world");
115
+ expect(textItem?.data.cellOutput.processedContent).toBe("hello world");
116
116
  });
117
117
 
118
118
  it("should mark media items for download when no direct URL available", () => {
119
119
  const items = provider.getItems();
120
120
  const mediaItem = items.find((item) => item.data.cellId === "cell2");
121
121
 
122
- expect(mediaItem?.data.shouldDownloadImage).toBe(true);
123
- expect(mediaItem?.data.imageUrl).toBeUndefined();
122
+ expect(mediaItem?.data.cellOutput.shouldDownloadImage).toBe(true);
123
+ expect(mediaItem?.data.cellOutput.imageUrl).toBeUndefined();
124
124
  });
125
125
 
126
126
  it("should include cell code and names", () => {
@@ -156,6 +156,8 @@ describe("CellOutputContextProvider", () => {
156
156
  expect(context).toContain("print('hello world')");
157
157
  expect(context).toContain("Output:");
158
158
  expect(context).toContain("hello world");
159
+
160
+ expect(context).toMatchSnapshot("text-output-context");
159
161
  });
160
162
 
161
163
  it("should format media output context correctly", () => {
@@ -173,6 +175,8 @@ describe("CellOutputContextProvider", () => {
173
175
  expect(context).toContain("Cell Code:");
174
176
  expect(context).toContain("import matplotlib.pyplot as plt");
175
177
  expect(context).toContain("Media Output: Contains image/png content");
178
+
179
+ expect(context).toMatchSnapshot("media-output-context");
176
180
  });
177
181
  });
178
182
 
@@ -239,7 +243,7 @@ describe("Cell output utility functions", () => {
239
243
  provider = new CellOutputContextProvider(mockStore);
240
244
  const items = provider.getItems();
241
245
 
242
- expect(items[0]?.data.outputType).toBe(testCase.expected);
246
+ expect(items[0]?.data.cellOutput.outputType).toBe(testCase.expected);
243
247
  }
244
248
  });
245
249
 
@@ -274,7 +278,7 @@ describe("Cell output utility functions", () => {
274
278
  provider = new CellOutputContextProvider(mockStore);
275
279
  const items = provider.getItems();
276
280
 
277
- expect(items[0]?.data.outputType).toBe(testCase.expected);
281
+ expect(items[0]?.data.cellOutput.outputType).toBe(testCase.expected);
278
282
  }
279
283
  });
280
284
 
@@ -308,7 +312,7 @@ describe("Cell output utility functions", () => {
308
312
  provider = new CellOutputContextProvider(mockStore);
309
313
  const items = provider.getItems();
310
314
 
311
- expect(items[0]?.data.outputType).toBe(testCase.expected);
315
+ expect(items[0]?.data.cellOutput.outputType).toBe(testCase.expected);
312
316
  }
313
317
  });
314
318
  });
@@ -371,7 +375,187 @@ describe("Cell output utility functions", () => {
371
375
  provider = new CellOutputContextProvider(mockStore);
372
376
  const items = provider.getItems();
373
377
 
374
- expect(items[0]?.data.processedContent).toBe("Hello world!");
378
+ expect(items[0]?.data.cellOutput.processedContent).toBe("Hello world!");
379
+ });
380
+ });
381
+
382
+ describe("getCellContextData", () => {
383
+ let mockNotebook: NotebookState;
384
+
385
+ beforeEach(() => {
386
+ mockNotebook = {
387
+ cellIds: {
388
+ inOrderIds: ["cell1" as CellId, "cell2" as CellId],
389
+ },
390
+ cellData: {
391
+ cell1: {
392
+ id: "cell1" as CellId,
393
+ name: "My Named Cell",
394
+ code: "x = 42",
395
+ },
396
+ cell2: {
397
+ id: "cell2" as CellId,
398
+ name: "",
399
+ code: "y = x * 2",
400
+ },
401
+ },
402
+ cellRuntime: {
403
+ cell1: {
404
+ output: {
405
+ mimetype: "text/plain",
406
+ data: "42",
407
+ } as OutputMessage,
408
+ consoleOutputs: [],
409
+ },
410
+ cell2: {
411
+ output: null,
412
+ consoleOutputs: [
413
+ {
414
+ mimetype: "text/plain",
415
+ data: "console log message",
416
+ } as OutputMessage,
417
+ ],
418
+ },
419
+ },
420
+ } as unknown as NotebookState;
421
+ });
422
+
423
+ it("should extract basic cell data", () => {
424
+ const result = getCellContextData("cell1" as CellId, mockNotebook);
425
+
426
+ expect(result.cellId).toBe("cell1");
427
+ expect(result.cellName).toBe("My Named Cell");
428
+ expect(result.cellCode).toBe("x = 42");
429
+ });
430
+
431
+ it("should generate cell name for unnamed cells", () => {
432
+ const result = getCellContextData("cell2" as CellId, mockNotebook);
433
+
434
+ expect(result.cellName).toBe("cell-1"); // 0-indexed, so cell2 is at index 1
435
+ });
436
+
437
+ it("should include cell output when present", () => {
438
+ const result = getCellContextData("cell1" as CellId, mockNotebook);
439
+
440
+ expect(result.cellOutput).toBeDefined();
441
+ expect(result.cellOutput?.outputType).toBe("text");
442
+ expect(result.cellOutput?.processedContent).toBe("42");
443
+ });
444
+
445
+ it("should not include cell output when not present", () => {
446
+ const result = getCellContextData("cell2" as CellId, mockNotebook);
447
+
448
+ expect(result.cellOutput).toBeUndefined();
449
+ });
450
+
451
+ it("should not include console outputs by default", () => {
452
+ const result = getCellContextData("cell2" as CellId, mockNotebook);
453
+
454
+ expect(result.consoleOutputs).toBeUndefined();
455
+ });
456
+
457
+ it("should include console outputs when opted in", () => {
458
+ const result = getCellContextData("cell2" as CellId, mockNotebook, {
459
+ includeConsoleOutput: true,
460
+ });
461
+
462
+ expect(result.consoleOutputs).toBeDefined();
463
+ expect(result.consoleOutputs).toHaveLength(1);
464
+ expect(result.consoleOutputs?.[0]?.processedContent).toBe(
465
+ "console log message",
466
+ );
467
+ });
468
+
469
+ it("should filter out empty console outputs", () => {
470
+ const cell2Runtime = mockNotebook.cellRuntime["cell2" as CellId];
471
+ if (cell2Runtime) {
472
+ (cell2Runtime as { consoleOutputs: OutputMessage[] }).consoleOutputs = [
473
+ {
474
+ mimetype: "text/plain",
475
+ data: "valid output",
476
+ } as OutputMessage,
477
+ {
478
+ mimetype: "text/plain",
479
+ data: "",
480
+ } as OutputMessage,
481
+ ];
482
+ }
483
+
484
+ const result = getCellContextData("cell2" as CellId, mockNotebook, {
485
+ includeConsoleOutput: true,
486
+ });
487
+
488
+ expect(result.consoleOutputs).toHaveLength(1);
489
+ expect(result.consoleOutputs?.[0]?.processedContent).toBe("valid output");
490
+ });
491
+
492
+ it("should handle cells with both cell output and console outputs", () => {
493
+ const cell1Runtime = mockNotebook.cellRuntime["cell1" as CellId];
494
+ if (cell1Runtime) {
495
+ (cell1Runtime as { consoleOutputs: OutputMessage[] }).consoleOutputs = [
496
+ {
497
+ mimetype: "text/plain",
498
+ data: "debug message",
499
+ } as OutputMessage,
500
+ ];
501
+ }
502
+
503
+ const result = getCellContextData("cell1" as CellId, mockNotebook, {
504
+ includeConsoleOutput: true,
505
+ });
506
+
507
+ expect(result.cellOutput).toBeDefined();
508
+ expect(result.cellOutput?.processedContent).toBe("42");
509
+ expect(result.consoleOutputs).toHaveLength(1);
510
+ expect(result.consoleOutputs?.[0]?.processedContent).toBe(
511
+ "debug message",
512
+ );
513
+ });
514
+
515
+ it("should handle empty console outputs array", () => {
516
+ const result = getCellContextData("cell1" as CellId, mockNotebook, {
517
+ includeConsoleOutput: true,
518
+ });
519
+
520
+ expect(result.consoleOutputs).toEqual([]);
521
+ });
522
+
523
+ it("should handle media outputs in cell output", () => {
524
+ const cell1Runtime = mockNotebook.cellRuntime["cell1" as CellId];
525
+ if (cell1Runtime) {
526
+ (cell1Runtime as { output: OutputMessage | null }).output = {
527
+ mimetype: "image/png",
528
+ data: "data:image/png;base64,test",
529
+ } as OutputMessage;
530
+ }
531
+
532
+ const result = getCellContextData("cell1" as CellId, mockNotebook);
533
+
534
+ expect(result.cellOutput).toBeDefined();
535
+ expect(result.cellOutput?.outputType).toBe("media");
536
+ expect(result.cellOutput?.imageUrl).toBe("data:image/png;base64,test");
537
+ });
538
+
539
+ it("should handle media outputs in console outputs", () => {
540
+ const cell2Runtime = mockNotebook.cellRuntime["cell2" as CellId];
541
+ if (cell2Runtime) {
542
+ (cell2Runtime as { consoleOutputs: OutputMessage[] }).consoleOutputs = [
543
+ {
544
+ mimetype: "image/png",
545
+ data: "https://example.com/image.png",
546
+ } as OutputMessage,
547
+ ];
548
+ }
549
+
550
+ const result = getCellContextData("cell2" as CellId, mockNotebook, {
551
+ includeConsoleOutput: true,
552
+ });
553
+
554
+ expect(result.consoleOutputs).toHaveLength(1);
555
+ expect(result.consoleOutputs?.[0]?.outputType).toBe("media");
556
+ expect(result.consoleOutputs?.[0]?.imageUrl).toBe(
557
+ "https://example.com/image.png",
558
+ );
375
559
  });
376
560
  });
377
561
  });