@marimo-team/islands 0.23.15-dev5 → 0.23.15-dev53

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 (566) hide show
  1. package/dist/{ConnectedDataExplorerComponent-CU4fZJzG.js → ConnectedDataExplorerComponent-DMcymmpc.js} +85 -84
  2. package/dist/{ErrorBoundary-DE6tzZf-.js → ErrorBoundary-DXlxsrTF.js} +3 -3
  3. package/dist/{ImageComparisonComponent-CHrI72em.js → ImageComparisonComponent-C3y7L3eJ.js} +173 -129
  4. package/dist/{any-language-editor-DN1R-1KZ.js → any-language-editor-BfTj3PPF.js} +20 -20
  5. package/dist/apl-e1B5LPEL.js +4 -0
  6. package/dist/{arc-DfkSnvZm.js → arc-CTIpFoOn.js} +2 -2
  7. package/dist/architecture-7HQA4BMR-DHUrQjL4.js +6 -0
  8. package/dist/{architectureDiagram-VXUJARFQ-CT2SuxNw.js → architectureDiagram-VXUJARFQ-B3jN8fkV.js} +19 -19
  9. package/dist/asciiarmor-B-gwgesP.js +4 -0
  10. package/dist/asn1-DF2ckRB4.js +4 -0
  11. package/dist/assets/__vite-browser-external-CjNAy01L.js +1 -0
  12. package/dist/assets/worker-B3XPCb6y.js +98 -0
  13. package/dist/{blockDiagram-VD42YOAC-Dy7hlFla.js → blockDiagram-VD42YOAC-Dq_8lAbz.js} +12 -12
  14. package/dist/brainfuck-4G-7_gq_.js +4 -0
  15. package/dist/{button-BacYv-bE.js → button-BcSml68y.js} +12 -65
  16. package/dist/{c4Diagram-YG6GDRKO-BXlAmZ8Z.js → c4Diagram-YG6GDRKO-BPzX9a9A.js} +6 -6
  17. package/dist/{capabilities-D_4LYhSU.js → capabilities-BYLFYTYv.js} +2 -2
  18. package/dist/{channel-D_PHgcig.js → channel-D_qwSlm9.js} +1 -1
  19. package/dist/{chat-ui-DinOvbWu.js → chat-ui-CYGIiYqI.js} +3115 -3114
  20. package/dist/{check-C9OoNtR4.js → check-Cs-KV5XY.js} +1 -1
  21. package/dist/{chunk-4BX2VUAB-CzXltWHN.js → chunk-4BX2VUAB-iU5lQTDI.js} +1 -1
  22. package/dist/{chunk-4F5CHEZ2-D9nGEHV8.js → chunk-4F5CHEZ2-VlodlEGo.js} +1 -1
  23. package/dist/{chunk-55IACEB6-B-1mjMMC.js → chunk-55IACEB6-7h71GwyW.js} +1 -1
  24. package/dist/{chunk-5FQGJX7Z-BbqSm5gU.js → chunk-5FQGJX7Z-B9WoXK1R.js} +3 -3
  25. package/dist/{chunk-ABZYJK2D-Dz0-H2B5.js → chunk-ABZYJK2D-CDSMdLBr.js} +3 -3
  26. package/dist/{chunk-ATLVNIR6-o0Z5MZLd.js → chunk-ATLVNIR6-BAW0e_d_.js} +2 -2
  27. package/dist/{chunk-B2363JML-KEJpLGGP.js → chunk-B2363JML-zL3VngtH.js} +1 -1
  28. package/dist/{chunk-B4BG7PRW-BL98U9B4.js → chunk-B4BG7PRW-CfEI05WL.js} +7 -7
  29. package/dist/{chunk-CVBHYZKI-B_c5YBcW.js → chunk-CVBHYZKI-CwazXVlJ.js} +1 -1
  30. package/dist/{chunk-DI55MBZ5-Dwkn0LWm.js → chunk-DI55MBZ5-CZS7hhjV.js} +6 -6
  31. package/dist/{chunk-EXTU4WIE-9sNjmQrB.js → chunk-EXTU4WIE-DHwKB8ls.js} +2 -2
  32. package/dist/{chunk-FMBD7UC4-Ie8M9q0W.js → chunk-FMBD7UC4-quJmebXa.js} +1 -1
  33. package/dist/{chunk-FRFDVMJY-DzQqMWrl.js → chunk-FRFDVMJY-BHBqN-vD.js} +1 -1
  34. package/dist/{chunk-HN2XXSSU-E3n-Ys7Z.js → chunk-HN2XXSSU-Bv0QkeMr.js} +1 -1
  35. package/dist/{chunk-JA3XYJ7Z-C32Y7Epf.js → chunk-JA3XYJ7Z-Cy80gDpz.js} +3 -3
  36. package/dist/{chunk-JZLCHNYA-C6ftyVMN.js → chunk-JZLCHNYA-yfXq27Zq.js} +6 -6
  37. package/dist/{chunk-MI3HLSF2-CUYEasXO.js → chunk-MI3HLSF2-HGWI-8Pg.js} +1 -1
  38. package/dist/{chunk-N4CR4FBY-DUhGZhZs.js → chunk-N4CR4FBY-C9D3Wsot.js} +7 -7
  39. package/dist/{chunk-PL6DKKU2-D7km-08O.js → chunk-PL6DKKU2-CAHKc95s.js} +1 -1
  40. package/dist/{chunk-QN33PNHL-0K6SDYn3.js → chunk-QN33PNHL-Bh2YDyg7.js} +2 -2
  41. package/dist/{chunk-QXUST7PY-DMhsRpYK.js → chunk-QXUST7PY-kDpsCDoY.js} +10 -10
  42. package/dist/{chunk-QZHKN3VN-DRjXVwuJ.js → chunk-QZHKN3VN-Dym5BS7y.js} +1 -1
  43. package/dist/{chunk-S3R3BYOJ-oAe3dEbO.js → chunk-S3R3BYOJ-DkY8Kz3y.js} +4 -4
  44. package/dist/{chunk-SJTYNZTY-BkJrPRFC.js → chunk-SJTYNZTY-DnXoKWpW.js} +1 -1
  45. package/dist/{chunk-TCCFYFTB-D58KeXnC.js → chunk-TCCFYFTB-DPWJa9zL.js} +1 -1
  46. package/dist/{chunk-TQ3KTPDO-D_yA_wAb.js → chunk-TQ3KTPDO-CsDx6v37.js} +1 -1
  47. package/dist/{chunk-TZMSLE5B-yBKS_DQU.js → chunk-TZMSLE5B-CMZoW3vd.js} +3 -3
  48. package/dist/{chunk-UMXZTB3W-D7uwvNjd.js → chunk-UMXZTB3W-D1uHz8MN.js} +1 -1
  49. package/dist/classDiagram-2ON5EDUG-b2d3ZqfR.js +30 -0
  50. package/dist/classDiagram-v2-WZHVMYZB-RvnJbJ5M.js +30 -0
  51. package/dist/{clike-DTxNUn7l.js → clike-7lgyEYRk.js} +1 -1
  52. package/dist/clojure-CUybM11R.js +4 -0
  53. package/dist/cmake-BPjGcuDL.js +4 -0
  54. package/dist/cobol-BETk_nb6.js +4 -0
  55. package/dist/{code-block-37QAKDTI-O6IH6wAi.js → code-block-37QAKDTI-MSxEjskJ.js} +1 -1
  56. package/dist/{code-visibility-DBuB5MVY.js → code-visibility-Ddr-Cesu.js} +1553 -1470
  57. package/dist/coffeescript-CManZxXL.js +4 -0
  58. package/dist/commonlisp-DWkn7GW8.js +4 -0
  59. package/dist/{copy-COam1EG7.js → copy-Cs3yt6Vt.js} +2 -2
  60. package/dist/{cose-bilkent-S5V4N54A-kjoZoid4.js → cose-bilkent-S5V4N54A-BYj0aL7z.js} +2 -2
  61. package/dist/crystal-CCbg5EUH.js +4 -0
  62. package/dist/css-By8eo-XS.js +4 -0
  63. package/dist/cypher-DwfHg3nP.js +4 -0
  64. package/dist/d-Brs1wNbw.js +4 -0
  65. package/dist/{dagre-6UL2VRFP-J0JKgwOt.js → dagre-6UL2VRFP--ruFWg_S.js} +11 -11
  66. package/dist/{data-grid-overlay-editor-C6lxUJp-.js → data-grid-overlay-editor-BWRG2b_o.js} +2 -2
  67. package/dist/{constants-T20xxyNf.js → debounce-BOD3DbfP.js} +1 -24
  68. package/dist/{diagram-PSM6KHXK-DYgJuNk9.js → diagram-PSM6KHXK-CGakapLj.js} +22 -22
  69. package/dist/{diagram-QEK2KX5R-CKdBR2sb.js → diagram-QEK2KX5R-CtqD8u_P.js} +17 -17
  70. package/dist/{diagram-S2PKOQOG-Dpi7mo5W.js → diagram-S2PKOQOG-BS1wa35J.js} +17 -17
  71. package/dist/diff-DJIRmJ1g.js +4 -0
  72. package/dist/{dist-Dv_Y15yk.js → dist-3MT9i_N5.js} +2 -2
  73. package/dist/{dist-CoXAujgg.js → dist-4-bJUNMb.js} +3 -3
  74. package/dist/{dist-DPrYzMY0.js → dist-9yiSURLw.js} +2 -2
  75. package/dist/dist-9zfbSqew.js +8 -0
  76. package/dist/{dist-GZXUmt0b.js → dist-B1k1NmGB.js} +1 -1
  77. package/dist/{dist-abid3KgM.js → dist-B69xyr_D.js} +1 -1
  78. package/dist/{dist--2Bqjvs0.js → dist-B96tMAst.js} +2 -2
  79. package/dist/{dist-t9Kf7xqC.js → dist-BFgLBSJb.js} +1 -1
  80. package/dist/{dist-DyyjKEYf.js → dist-BGLXXYL4.js} +1 -1
  81. package/dist/{dist-Bf7SHuNp.js → dist-BGj6VvC-.js} +4 -4
  82. package/dist/{dist-Bk75fBZA.js → dist-BGtkYshf.js} +1 -1
  83. package/dist/{dist-CpxNdDkw.js → dist-BIdzGb3O.js} +1 -1
  84. package/dist/dist-BZ_VEpg8.js +8 -0
  85. package/dist/{dist-7QfXoMdB.js → dist-BdYVjH1C.js} +1 -1
  86. package/dist/{dist-D8CDTVgf.js → dist-BiIoKp92.js} +2 -2
  87. package/dist/dist-Bow9AUXt.js +5 -0
  88. package/dist/{dist-BSAt6RhH.js → dist-BvCrjp81.js} +2 -2
  89. package/dist/{dist-DgGbNavJ.js → dist-C-RLuUaE.js} +1 -1
  90. package/dist/dist-C8odMDp5.js +8 -0
  91. package/dist/{dist-BY018Paw.js → dist-CLBjD8zw.js} +1 -1
  92. package/dist/dist-CLgjZx38.js +5 -0
  93. package/dist/{dist-C_Y3oV3C.js → dist-CNXNPADS.js} +1 -1
  94. package/dist/{dist-Du8WkPuU.js → dist-CV79CsQ0.js} +2 -2
  95. package/dist/dist-CnMOJtGP.js +5 -0
  96. package/dist/dist-D-5m1nDT.js +5 -0
  97. package/dist/dist-D8AXqiCV.js +5 -0
  98. package/dist/{dist-LTU8Hdvn.js → dist-DBN2w27P.js} +2 -2
  99. package/dist/{dist-DL6N_q-A.js → dist-DMuf8sZd.js} +1 -1
  100. package/dist/{dist-M9Vag9Y0.js → dist-DPH6RMhL.js} +1 -1
  101. package/dist/{dist-CcWX6tmx.js → dist-DgZczohI.js} +1 -1
  102. package/dist/dist-DszXOVSb.js +5 -0
  103. package/dist/dist-GW0m0q65.js +8 -0
  104. package/dist/{dist-Bf9f8MuT.js → dist-SXNmlE8A.js} +1 -1
  105. package/dist/{dist-CxJDU6Bh.js → dist-e29IFSI0.js} +3 -3
  106. package/dist/{dist-BaoDKvdy.js → dist-kcg3gjx6.js} +1 -1
  107. package/dist/{dist-BR_gyG9L.js → dist-tJic1rC-.js} +1 -1
  108. package/dist/{dockerfile-twL37N91.js → dockerfile-B82Pkz_V.js} +1 -1
  109. package/dist/dtd-Dyiazv4N.js +4 -0
  110. package/dist/dylan-D8Fcw7NA.js +4 -0
  111. package/dist/ecl-CjKp8Vii.js +4 -0
  112. package/dist/eiffel-K9ViOX5r.js +4 -0
  113. package/dist/elm-B5NVtRco.js +4 -0
  114. package/dist/{erDiagram-Q2GNP2WA-BU-m41EQ.js → erDiagram-Q2GNP2WA-DmtIJBsT.js} +15 -15
  115. package/dist/erlang-BnLzgk7R.js +4 -0
  116. package/dist/{error-banner-DFPfz_Qf.js → error-banner-DR7o3CbX.js} +68 -68
  117. package/dist/{esm-M837UxV5.js → esm-BxhNWHqh.js} +2 -2
  118. package/dist/{esm-ga2Bf3O2.js → esm-D6_uCZ4z.js} +104 -104
  119. package/dist/{extends-9MVIxxRo.js → extends-B88Yrunj.js} +4 -4
  120. package/dist/{factor-CajWS6mS.js → factor-Bq2mGIHt.js} +1 -1
  121. package/dist/factor-C7f9Jz5R.js +4 -0
  122. package/dist/{flowDiagram-NV44I4VS-CRoXKjGq.js → flowDiagram-NV44I4VS-DZsgBUcQ.js} +17 -17
  123. package/dist/{formats-Dzx4J_z1.js → formats-DSfNdJLH.js} +3 -3
  124. package/dist/forth-rGM8jLao.js +4 -0
  125. package/dist/fortran-B3acSe0i.js +4 -0
  126. package/dist/{ganttDiagram-JELNMOA3-7mq5f9cO.js → ganttDiagram-JELNMOA3-CgFhg_6K.js} +10 -10
  127. package/dist/gas-Bb1Vmv_N.js +4 -0
  128. package/dist/gherkin-C9Lyidgd.js +4 -0
  129. package/dist/{gitGraph-G5XIXVHT-DiniR35k.js → gitGraph-G5XIXVHT-BjTx0kww.js} +3 -3
  130. package/dist/{gitGraphDiagram-V2S2FVAM-Dfuokq6w.js → gitGraphDiagram-V2S2FVAM-DPInyn1F.js} +17 -17
  131. package/dist/{glide-data-editor-CjTu7ukN.js → glide-data-editor--CaN-f27.js} +13 -13
  132. package/dist/groovy-DQk6XcGH.js +4 -0
  133. package/dist/haskell-mV0Vw9gv.js +4 -0
  134. package/dist/haxe-DqxN89zH.js +5 -0
  135. package/dist/{html-to-image-_wGfk8V-.js → html-to-image-BoXPmWps.js} +2648 -2606
  136. package/dist/idl-ya8W561J.js +4 -0
  137. package/dist/{info-VBDWY6EO-DVZvGhkQ.js → info-VBDWY6EO-CA67FznA.js} +3 -3
  138. package/dist/infoDiagram-HS3SLOUP-ETAzKIiE.js +30 -0
  139. package/dist/{input-DtsN7xm-.js → input-DStQIuqD.js} +51 -51
  140. package/dist/javascript-CgqgptVu.js +4 -0
  141. package/dist/{journeyDiagram-XKPGCS4Q-8XYSU1GI.js → journeyDiagram-XKPGCS4Q-Bc94zDj1.js} +7 -7
  142. package/dist/julia-CFQ-HusI.js +4 -0
  143. package/dist/{kanban-definition-3W4ZIXB7--9pT9z1R.js → kanban-definition-3W4ZIXB7-DSk8Ebci.js} +12 -12
  144. package/dist/{katex-9-9QRhxz.js → katex-C4t-BmrK.js} +1 -1
  145. package/dist/{label-WfTSU8L4.js → label-DIk0QoFe.js} +2 -2
  146. package/dist/{line-C5s_12ee.js → line-C43FIPBd.js} +3 -3
  147. package/dist/{linear-B5-AFRiR.js → linear-H_vsH9ao.js} +4 -4
  148. package/dist/livescript-D__3TmDo.js +4 -0
  149. package/dist/{loader-Boph2xIS.js → loader-BUGT0KbC.js} +11 -22
  150. package/dist/lua-Bytcgj_W.js +4 -0
  151. package/dist/main.js +2217 -2116
  152. package/dist/mathematica-DJhvVKvl.js +4 -0
  153. package/dist/mbox-IGHPCjfR.js +4 -0
  154. package/dist/{mermaid-4DMBBIKO-Eg3D4FVz.js → mermaid-4DMBBIKO-FXbOziy9.js} +1 -1
  155. package/dist/{mermaid-BYqXy_NE.js → mermaid-CYkbfJHW.js} +47 -47
  156. package/dist/{mermaid-parser.core-C3XRsazI.js → mermaid-parser.core-DoivvxPd.js} +8 -8
  157. package/dist/{mhchem-yiCCuiEF.js → mhchem-EGhUZR1V.js} +1 -1
  158. package/dist/{mindmap-definition-VGOIOE7T-B-4mnfFG.js → mindmap-definition-VGOIOE7T-BYoCqVAJ.js} +14 -14
  159. package/dist/mirc-tcwvVugm.js +4 -0
  160. package/dist/mllike-Dx91i62r.js +6 -0
  161. package/dist/modelica-_SRt-yU5.js +4 -0
  162. package/dist/mscgen-GZrGS9gt.js +6 -0
  163. package/dist/mumps-Cv3ygyod.js +4 -0
  164. package/dist/nsis-BU7GeGbI.js +4 -0
  165. package/dist/{nsis-ClF3r5Tr.js → nsis-i9_sgigf.js} +1 -1
  166. package/dist/ntriples-CL-FCYXb.js +4 -0
  167. package/dist/{number-overlay-editor-BLJXvX9c.js → number-overlay-editor-Ck_mc_gT.js} +1 -1
  168. package/dist/objects-De59twF-.js +56 -0
  169. package/dist/octave-Dc6_3DIu.js +4 -0
  170. package/dist/{ordinal-ArJavP1Q.js → ordinal-Bkv2-veX.js} +1 -1
  171. package/dist/oz-DpUAJCXf.js +4 -0
  172. package/dist/{packet-DYOGHKS2-34raHOiB.js → packet-DYOGHKS2-Bkgofxf3.js} +3 -3
  173. package/dist/pascal-B17mncXs.js +4 -0
  174. package/dist/perl-BTpK97q9.js +4 -0
  175. package/dist/{pie-VRWISCQL-BaLlzZa3.js → pie-VRWISCQL-B1AMhN_7.js} +3 -3
  176. package/dist/{pieDiagram-ADFJNKIX-Cr3cNpZY.js → pieDiagram-ADFJNKIX-BaAU79Vb.js} +22 -22
  177. package/dist/pig-CFb638Ap.js +4 -0
  178. package/dist/powershell-Cxo-_2A5.js +4 -0
  179. package/dist/{precisionRound-Tqb4mg-H.js → precisionRound-CnHPY_5v.js} +1 -1
  180. package/dist/{process-output-Mh4UrjwM.js → process-output-CbRRhwQo.js} +4 -4
  181. package/dist/properties-BPgT1xTB.js +4 -0
  182. package/dist/protobuf-BgHBaIIK.js +4 -0
  183. package/dist/pug-25-oS0SG.js +4 -0
  184. package/dist/{pug-B_rby2yb.js → pug-BhE2JRSg.js} +1 -1
  185. package/dist/puppet-DarIr20S.js +4 -0
  186. package/dist/python-BqmOsBsi.js +4 -0
  187. package/dist/q-D3QJCTup.js +4 -0
  188. package/dist/{quadrantDiagram-AYHSOK5B-BuNL8Q93.js → quadrantDiagram-AYHSOK5B-BmTWJxzo.js} +5 -5
  189. package/dist/r-Cz_yBX4z.js +4 -0
  190. package/dist/{radar-ZZBFDIW7-Ci7bfoZa.js → radar-ZZBFDIW7-C2b7A32s.js} +3 -3
  191. package/dist/{react-vega-B0sAlDTL.js → react-vega-DfJOSnj6.js} +372 -372
  192. package/dist/{requirementDiagram-UZGBJVZJ-BG2lLUN1.js → requirementDiagram-UZGBJVZJ-Jrs04ua1.js} +14 -14
  193. package/dist/{reveal-component-DfOZrkd6.js → reveal-component-BY5sWajR.js} +628 -621
  194. package/dist/rpm-DGOtYwAI.js +5 -0
  195. package/dist/ruby-DBZu4rPc.js +4 -0
  196. package/dist/{sankeyDiagram-TZEHDZUN-DMal8sps.js → sankeyDiagram-TZEHDZUN-YJnhmG4N.js} +5 -5
  197. package/dist/sas-Dd1D9qTq.js +4 -0
  198. package/dist/scheme-BmDjvTHX.js +4 -0
  199. package/dist/{sequenceDiagram-WL72ISMW-DT6Tk-Eo.js → sequenceDiagram-WL72ISMW-D30L51Bn.js} +8 -8
  200. package/dist/shell-BL8zFSaj.js +4 -0
  201. package/dist/sieve-BAx2WqUP.js +4 -0
  202. package/dist/smalltalk-CYRzF7VV.js +4 -0
  203. package/dist/sparql-YWaDRO4A.js +4 -0
  204. package/dist/{spec-Cz-Bj1JI.js → spec-CnaxwDqy.js} +4 -4
  205. package/dist/{src-Bf2iLOlr.js → src-DV3ha_nA.js} +1 -1
  206. package/dist/{stateDiagram-FKZM4ZOC-CB_lodq3.js → stateDiagram-FKZM4ZOC-C0nZuUP8.js} +17 -17
  207. package/dist/stateDiagram-v2-4FDKWEC3-BmovmS-G.js +29 -0
  208. package/dist/{step-CWipAYTY.js → step-BqHnkgWE.js} +1 -1
  209. package/dist/stex-B5O-env2.js +4 -0
  210. package/dist/{strings-Dq_j3Rxw.js → strings-BYAhZnQi.js} +354 -354
  211. package/dist/style.css +1 -1
  212. package/dist/stylus-lYsyLFc1.js +4 -0
  213. package/dist/swift-ClQz9z1n.js +4 -0
  214. package/dist/{swiper-component-5HoSsPi1.js → swiper-component-DE94711u.js} +4 -4
  215. package/dist/tcl-B3jhsfqY.js +4 -0
  216. package/dist/textile-Cb1Dw7Aq.js +4 -0
  217. package/dist/{time-CsmIF9YZ.js → time-Bb4A7I6a.js} +4 -4
  218. package/dist/{timeline-definition-IT6M3QCI-NfSKRvH0.js → timeline-definition-IT6M3QCI-DEoIEWAl.js} +4 -4
  219. package/dist/{toDate-CWNNlFEX.js → toDate-B3IRfHhw.js} +16 -7
  220. package/dist/toml-nHZhetdO.js +4 -0
  221. package/dist/{tooltip-Czds6Qr8.js → tooltip-B-qh7UPB.js} +3 -3
  222. package/dist/{treemap-GDKQZRPO-Cl6OQh8D.js → treemap-GDKQZRPO-SDux0AV8.js} +3 -3
  223. package/dist/troff-DuJAGWKH.js +4 -0
  224. package/dist/ttcn-BxrcwP21.js +4 -0
  225. package/dist/ttcn-cfg-BAg_9dcc.js +4 -0
  226. package/dist/turtle-zCq949as.js +4 -0
  227. package/dist/{types-C2Ir191_.js → types-DQl7jVYK.js} +1 -1
  228. package/dist/use-vega-container-remeasure-DGNrIQSk.js +27 -0
  229. package/dist/{useAsyncData-KfHB8wQR.js → useAsyncData-CvO8WUy3.js} +1 -1
  230. package/dist/{useDateFormatter-CMnRuVmN.js → useDateFormatter-BSoGim-G.js} +2 -2
  231. package/dist/{useDeepCompareMemoize-nJMtxhm4.js → useDeepCompareMemoize-J3MKRdA4.js} +1 -1
  232. package/dist/{useIframeCapabilities-DWIYvDh7.js → useIframeCapabilities-POcFXHbw.js} +1 -1
  233. package/dist/{useLifecycle-DegSo0lV.js → useLifecycle-DqPxHgAN.js} +3 -3
  234. package/dist/{useTheme-6eZ3GOTS.js → useTheme-XMq9mNf_.js} +65 -29
  235. package/dist/vb-De5hElus.js +4 -0
  236. package/dist/vbscript-Cypcpv4F.js +4 -0
  237. package/dist/{vega-component-DzyyM9fc.js → vega-component-uL9ZaXcH.js} +225 -223
  238. package/dist/vega-embed-container-DgZMMVL3.js +22 -0
  239. package/dist/{vega-loader.browser-CZ-J8Py3.js → vega-loader.browser-IU8eTDwM.js} +98 -86
  240. package/dist/velocity-Di7l-yhe.js +4 -0
  241. package/dist/verilog-Bzi-S3g2.js +4 -0
  242. package/dist/vhdl-B0ZZITaW.js +4 -0
  243. package/dist/webidl-0sviiRcN.js +4 -0
  244. package/dist/xquery-B4qMVWaB.js +4 -0
  245. package/dist/{xychartDiagram-PRI3JC2R-BvwftqMA.js → xychartDiagram-PRI3JC2R-iwKXEnYZ.js} +13 -13
  246. package/dist/yacas-Jt25Fuv8.js +4 -0
  247. package/dist/z80-CrcbYzmp.js +4 -0
  248. package/dist/{zod-CijjQh4u.js → zod-D0yOqoGe.js} +26 -26
  249. package/package.json +1 -1
  250. package/src/__mocks__/requests.ts +3 -0
  251. package/src/components/charts/lazy.tsx +3 -1
  252. package/src/components/charts/vega-embed-container.tsx +18 -0
  253. package/src/components/chat/__tests__/chat-utils.test.ts +244 -1
  254. package/src/components/chat/__tests__/message-queue.test.tsx +121 -0
  255. package/src/components/chat/chat-panel.tsx +196 -67
  256. package/src/components/chat/chat-utils.ts +111 -2
  257. package/src/components/editor/RecoveryButton.tsx +2 -2
  258. package/src/components/editor/SortableCell.tsx +6 -2
  259. package/src/components/editor/__tests__/output-persistence.test.tsx +241 -0
  260. package/src/components/editor/actions/__tests__/pair-with-agent-commands.test.ts +153 -0
  261. package/src/components/editor/actions/pair-with-agent-commands.ts +109 -0
  262. package/src/components/editor/actions/pair-with-agent-modal.tsx +20 -64
  263. package/src/components/editor/actions/useNotebookActions.tsx +8 -0
  264. package/src/components/editor/ai/add-cell-with-ai.tsx +14 -5
  265. package/src/components/editor/ai/ai-completion-editor.tsx +4 -1
  266. package/src/components/editor/cell/cell-context-menu.tsx +7 -0
  267. package/src/components/editor/chrome/components/__tests__/feedback-button.test.tsx +221 -0
  268. package/src/components/editor/chrome/components/feedback-button.tsx +308 -77
  269. package/src/components/editor/chrome/panels/packages-panel.tsx +11 -1
  270. package/src/components/editor/columns/__tests__/cell-column.test.tsx +105 -0
  271. package/src/components/editor/columns/cell-column.tsx +34 -4
  272. package/src/components/editor/columns/sortable-column.tsx +24 -4
  273. package/src/components/editor/file-tree/download.ts +46 -0
  274. package/src/components/editor/file-tree/file-explorer.tsx +3 -21
  275. package/src/components/editor/file-tree/file-viewer.tsx +4 -27
  276. package/src/components/editor/navigation/__tests__/navigation.test.ts +33 -0
  277. package/src/components/editor/navigation/navigation.ts +8 -1
  278. package/src/components/editor/notebook-cell.tsx +203 -106
  279. package/src/components/editor/renderers/__tests__/cells-renderer.test.tsx +66 -0
  280. package/src/components/editor/renderers/cell-array.tsx +26 -13
  281. package/src/components/editor/renderers/cells-renderer.tsx +8 -2
  282. package/src/components/editor/renderers/slides-layout/__tests__/plugin.test.ts +29 -0
  283. package/src/components/editor/renderers/slides-layout/types.ts +4 -0
  284. package/src/components/editor/renderers/vertical-layout/vertical-layout.tsx +19 -19
  285. package/src/components/slides/reveal-component.tsx +37 -17
  286. package/src/components/slides/slide-form.tsx +72 -0
  287. package/src/components/ui/toast.tsx +11 -3
  288. package/src/components/ui/toaster.tsx +65 -9
  289. package/src/core/ai/context/providers/error.ts +6 -158
  290. package/src/core/cells/__tests__/utils.test.ts +59 -0
  291. package/src/core/cells/utils.ts +51 -0
  292. package/src/core/codemirror/completion/__tests__/signature-hint.test.ts +97 -3
  293. package/src/core/codemirror/completion/signature-hint.ts +78 -11
  294. package/src/core/constants.ts +8 -0
  295. package/src/core/diagnostics/__tests__/issue-details.test.ts +173 -0
  296. package/src/core/diagnostics/issue-details.ts +139 -0
  297. package/src/core/errors/__tests__/error-entries.test.ts +25 -0
  298. package/src/core/errors/error-entries.ts +176 -0
  299. package/src/core/islands/__tests__/bridge.test.ts +341 -46
  300. package/src/core/islands/__tests__/main.test.ts +176 -0
  301. package/src/core/islands/__tests__/parse.test.ts +105 -0
  302. package/src/core/islands/bootstrap.ts +8 -3
  303. package/src/core/islands/bridge.ts +117 -23
  304. package/src/core/islands/components/__tests__/web-components.test.tsx +214 -0
  305. package/src/core/islands/components/web-components.tsx +76 -15
  306. package/src/core/islands/constants.ts +1 -0
  307. package/src/core/islands/main.ts +69 -3
  308. package/src/core/islands/parse.ts +70 -23
  309. package/src/core/islands/worker/__tests__/controller.test.ts +173 -0
  310. package/src/core/islands/worker/worker.tsx +145 -57
  311. package/src/core/network/__tests__/requests-lazy.test.ts +18 -0
  312. package/src/core/network/__tests__/requests-network.test.ts +7 -0
  313. package/src/core/network/requests-lazy.ts +13 -1
  314. package/src/core/network/requests-network.ts +3 -0
  315. package/src/core/network/requests-static.ts +1 -0
  316. package/src/core/network/requests-toasting.tsx +1 -0
  317. package/src/core/network/types.ts +3 -0
  318. package/src/core/runtime/__tests__/runtime.test.ts +64 -0
  319. package/src/core/runtime/runtime.ts +30 -10
  320. package/src/core/wasm/bridge.ts +8 -0
  321. package/src/core/wasm/worker/bootstrap.ts +113 -20
  322. package/src/core/wasm/worker/types.ts +2 -0
  323. package/src/css/app/Cell.css +10 -0
  324. package/src/hooks/__tests__/useHotkey.test.tsx +88 -0
  325. package/src/hooks/useHotkey.ts +29 -4
  326. package/src/plugins/impl/anywidget/__tests__/host.test.ts +6 -9
  327. package/src/plugins/impl/anywidget/__tests__/registry.test.ts +3 -1
  328. package/src/plugins/impl/anywidget/__tests__/widget-binding.test.ts +32 -61
  329. package/src/plugins/impl/anywidget/model-proxy.ts +0 -13
  330. package/src/plugins/impl/anywidget/runtime.ts +1 -0
  331. package/src/plugins/impl/anywidget/widget-binding.ts +8 -34
  332. package/src/plugins/impl/image-comparison/ImageComparisonComponent.tsx +53 -2
  333. package/src/plugins/impl/image-comparison/__tests__/ImageComparisonComponent.test.tsx +71 -0
  334. package/src/plugins/impl/matplotlib/__tests__/matplotlib-renderer.test.ts +71 -3
  335. package/src/plugins/impl/matplotlib/matplotlib-renderer.ts +1 -0
  336. package/src/plugins/impl/vega/__tests__/use-vega-container-remeasure.test.ts +102 -0
  337. package/src/plugins/impl/vega/use-vega-container-remeasure.ts +39 -0
  338. package/src/plugins/impl/vega/vega-component.tsx +5 -4
  339. package/src/theme/__tests__/useTheme.test.ts +68 -0
  340. package/src/theme/useTheme.ts +16 -1
  341. package/dist/apl-Bdc61P1y.js +0 -4
  342. package/dist/architecture-7HQA4BMR-Kyc44TmC.js +0 -6
  343. package/dist/asciiarmor-DVRHDGzT.js +0 -4
  344. package/dist/asn1-BmuKfkfu.js +0 -4
  345. package/dist/assets/__vite-browser-external-BQCLNwri.js +0 -1
  346. package/dist/assets/worker-DAWRHcPq.js +0 -73
  347. package/dist/brainfuck-DPrRpyTV.js +0 -4
  348. package/dist/classDiagram-2ON5EDUG-QjoAcuFE.js +0 -30
  349. package/dist/classDiagram-v2-WZHVMYZB-bUCv4gu2.js +0 -30
  350. package/dist/clojure-DEttQW5T.js +0 -4
  351. package/dist/cmake-jNlx_DaM.js +0 -4
  352. package/dist/cobol-BvvIm5MJ.js +0 -4
  353. package/dist/coffeescript-DTpBMyFU.js +0 -4
  354. package/dist/commonlisp-BmmUG8jb.js +0 -4
  355. package/dist/crystal-BxyqmEWC.js +0 -4
  356. package/dist/css-BGoCtuG3.js +0 -4
  357. package/dist/cypher-BmCbdl3u.js +0 -4
  358. package/dist/d-CFrlbjZt.js +0 -4
  359. package/dist/diff-D6XwL6P8.js +0 -4
  360. package/dist/dist-BEXXyZig.js +0 -5
  361. package/dist/dist-BYj57OV4.js +0 -5
  362. package/dist/dist-BlSvQzNr.js +0 -5
  363. package/dist/dist-CCBlxAgS.js +0 -8
  364. package/dist/dist-CIDTVIUf.js +0 -5
  365. package/dist/dist-CqQyhAM8.js +0 -8
  366. package/dist/dist-CwRu2Xzh.js +0 -5
  367. package/dist/dist-D8DNB0nO.js +0 -8
  368. package/dist/dist-DOFbNV_b.js +0 -8
  369. package/dist/dist-cdmMjgsn.js +0 -5
  370. package/dist/dtd-Bw0lRN0-.js +0 -4
  371. package/dist/dylan-B55eBHTt.js +0 -4
  372. package/dist/ecl-C8G4p0wn.js +0 -4
  373. package/dist/eiffel-BmH46VJl.js +0 -4
  374. package/dist/elm-DhzeFqkl.js +0 -4
  375. package/dist/erlang-CY-wdlsU.js +0 -4
  376. package/dist/factor-DWkgl0xw.js +0 -4
  377. package/dist/forth-Cij_ie2t.js +0 -4
  378. package/dist/fortran-Br3X9cfm.js +0 -4
  379. package/dist/gas-DYsGcMN2.js +0 -4
  380. package/dist/gherkin-eVgXQ0fQ.js +0 -4
  381. package/dist/groovy-_NFHIXG7.js +0 -4
  382. package/dist/haskell-D6xNG_bH.js +0 -4
  383. package/dist/haxe-sU_rzAwn.js +0 -5
  384. package/dist/idl-Ds_VbrUx.js +0 -4
  385. package/dist/infoDiagram-HS3SLOUP-CEnzWruK.js +0 -30
  386. package/dist/javascript-CztfIl0i.js +0 -4
  387. package/dist/julia-DDv40QMV.js +0 -4
  388. package/dist/livescript-BEOngLLc.js +0 -4
  389. package/dist/lua-9-7BhQ4Y.js +0 -4
  390. package/dist/mathematica-DDa0Pfxm.js +0 -4
  391. package/dist/mbox-iO03mmoE.js +0 -4
  392. package/dist/mirc-C9z5LT4X.js +0 -4
  393. package/dist/mllike-jGJbdm_C.js +0 -6
  394. package/dist/modelica-DzF7oIEL.js +0 -4
  395. package/dist/mscgen-DB-u125o.js +0 -6
  396. package/dist/mumps-CRTFHhzh.js +0 -4
  397. package/dist/nsis-C4NPTuox.js +0 -4
  398. package/dist/ntriples-BCOoGph1.js +0 -4
  399. package/dist/octave-DTwNlazz.js +0 -4
  400. package/dist/oz-DD38AzSz.js +0 -4
  401. package/dist/pascal-BohSp9jV.js +0 -4
  402. package/dist/perl-f5OutoPM.js +0 -4
  403. package/dist/pig-Dv7wSmHb.js +0 -4
  404. package/dist/powershell-rYgjKB39.js +0 -4
  405. package/dist/properties-BFUNLRDN.js +0 -4
  406. package/dist/protobuf-B9QJQPPv.js +0 -4
  407. package/dist/pug-DzvWpaMC.js +0 -4
  408. package/dist/puppet-B_K-n_xK.js +0 -4
  409. package/dist/python-CAiFcaA2.js +0 -4
  410. package/dist/q-cLeFIBLK.js +0 -4
  411. package/dist/r-04Y-Wco3.js +0 -4
  412. package/dist/react-vega-B6ncY2Tp.js +0 -9
  413. package/dist/rpm-FUdrIia9.js +0 -5
  414. package/dist/ruby-DMjFXuEW.js +0 -4
  415. package/dist/sas-DzHZxjXK.js +0 -4
  416. package/dist/scheme-DxHd_Rb9.js +0 -4
  417. package/dist/shell-C8Kwypgf.js +0 -4
  418. package/dist/sieve-DdyqOKXZ.js +0 -4
  419. package/dist/smalltalk-pB7X1D9y.js +0 -4
  420. package/dist/sparql-NhBO6oOa.js +0 -4
  421. package/dist/stateDiagram-v2-4FDKWEC3-E0RGjKsm.js +0 -29
  422. package/dist/stex-KfRnSHzF.js +0 -4
  423. package/dist/stylus-SfWSnzPv.js +0 -4
  424. package/dist/swift-jRPdq2zR.js +0 -4
  425. package/dist/tcl-_hpTHGX3.js +0 -4
  426. package/dist/textile-C9h8slqH.js +0 -4
  427. package/dist/toml-DWvtinD4.js +0 -4
  428. package/dist/troff-Dwo_A0y7.js +0 -4
  429. package/dist/ttcn-V--CPFKq.js +0 -4
  430. package/dist/ttcn-cfg-CPSMchTG.js +0 -4
  431. package/dist/turtle-B4rPGBWu.js +0 -4
  432. package/dist/vb-DaMBBd4j.js +0 -4
  433. package/dist/vbscript-BMJQqcE2.js +0 -4
  434. package/dist/velocity-CGq2QRq2.js +0 -4
  435. package/dist/verilog-CUNo8F5u.js +0 -4
  436. package/dist/vhdl-CCzA0msW.js +0 -4
  437. package/dist/webidl-CqIMDIBL.js +0 -4
  438. package/dist/xquery-XC5Kbr-1.js +0 -4
  439. package/dist/yacas-CGOv7Dzy.js +0 -4
  440. package/dist/z80-CXhVmi-f.js +0 -4
  441. /package/dist/{Plot-CAYS29h9.js → Plot-YQOuVIei.js} +0 -0
  442. /package/dist/{apl-BCgCq9iM.js → apl-99A7dLQe.js} +0 -0
  443. /package/dist/{array-tvvEqPy7.js → array-O78LT16Y.js} +0 -0
  444. /package/dist/{asciiarmor-BtqU-KJQ.js → asciiarmor-DLEhpFDx.js} +0 -0
  445. /package/dist/{asn1-Dmb-dTMx.js → asn1-CMrcTsT4.js} +0 -0
  446. /package/dist/{asterisk-DaVJJDnV.js → asterisk-CqykImq7.js} +0 -0
  447. /package/dist/{brainfuck-C1HoZKlE.js → brainfuck-ChPt5yBe.js} +0 -0
  448. /package/dist/{chunk-DR5Q36YT-BflwErH1.js → chunk-DR5Q36YT-5Yp2GWwR.js} +0 -0
  449. /package/dist/{click-outside-container-BLPjMamz.js → click-outside-container-BSIeYt4y.js} +0 -0
  450. /package/dist/{clike-CdT0yHjt.js → clike-CE0fXfM_.js} +0 -0
  451. /package/dist/{clojure-CdyrCpUv.js → clojure-QkBEMU-g.js} +0 -0
  452. /package/dist/{cmake-BFlPxym7.js → cmake-CU1jX7Mo.js} +0 -0
  453. /package/dist/{cobol-CcJXewp8.js → cobol-DMOKzzky.js} +0 -0
  454. /package/dist/{coffeescript-DnKuIKRo.js → coffeescript-DjnjLyfk.js} +0 -0
  455. /package/dist/{colors-CQAOa8cK.js → colors-DmiH1bIH.js} +0 -0
  456. /package/dist/{common-keywords-FBrXPTcz.js → common-keywords-D3nPJNQP.js} +0 -0
  457. /package/dist/{commonlisp-B-kok83Z.js → commonlisp-CYd9iOSe.js} +0 -0
  458. /package/dist/{crystal-FYRYjI1I.js → crystal-Dy55yoYG.js} +0 -0
  459. /package/dist/{css-B45lc2V3.js → css-CNU8w3HJ.js} +0 -0
  460. /package/dist/{cypher-DZMLyVY_.js → cypher-q47DGzK7.js} +0 -0
  461. /package/dist/{cytoscape.esm-ayF70frT.js → cytoscape.esm-Dr8XzXWK.js} +0 -0
  462. /package/dist/{d-x-VVT4o9.js → d-jEkaLvxX.js} +0 -0
  463. /package/dist/{defaultLocale-u-3osm0P.js → defaultLocale-BpsHxBd7.js} +0 -0
  464. /package/dist/{defaultLocale-BoHTsDG6.js → defaultLocale-DoeErsX2.js} +0 -0
  465. /package/dist/{diff-Dxe2mpXk.js → diff-vb2-unFN.js} +0 -0
  466. /package/dist/{dist-D-W5ny5a.js → dist-95kpvRSY.js} +0 -0
  467. /package/dist/{dist-BzEzfugY.js → dist-B56Dml3A.js} +0 -0
  468. /package/dist/{dist-hT4QzYX-.js → dist-D3T8fCFo.js} +0 -0
  469. /package/dist/{dist-DZORgqKY.js → dist-DPdzbDlL.js} +0 -0
  470. /package/dist/{dist-A2846XWO.js → dist-Db1W16d-.js} +0 -0
  471. /package/dist/{dist-DZo4nSS0.js → dist-DijFs2Lk.js} +0 -0
  472. /package/dist/{dist-BGdYVvOu.js → dist-DsoKosxi.js} +0 -0
  473. /package/dist/{dist-Dax--nl9.js → dist-DvOfvWFi.js} +0 -0
  474. /package/dist/{dist-CIYBwstr.js → dist-Dx3eDsHX.js} +0 -0
  475. /package/dist/{dist-DMjWuVs8.js → dist-c6wTyIhD.js} +0 -0
  476. /package/dist/{dtd-C9VM_Wfu.js → dtd-C9kR-bXa.js} +0 -0
  477. /package/dist/{duckdb-keywords-CvJhR_Yd.js → duckdb-keywords-B6HYCMOT.js} +0 -0
  478. /package/dist/{dylan-DTSnEIFO.js → dylan-BLckrK-V.js} +0 -0
  479. /package/dist/{ebnf-2D4Ctp3y.js → ebnf-Cnp3L9jg.js} +0 -0
  480. /package/dist/{ecl-N04ptnRK.js → ecl-CEsf6XVg.js} +0 -0
  481. /package/dist/{eiffel-Dd8rpqr_.js → eiffel-2KGZNzx6.js} +0 -0
  482. /package/dist/{elm-GT2E866W.js → elm-D2s3K5wF.js} +0 -0
  483. /package/dist/{emotion-is-prop-valid.esm-DzSb5hsH.js → emotion-is-prop-valid.esm-DdVSF4FD.js} +0 -0
  484. /package/dist/{erlang-Cf0Bp5pY.js → erlang-0PMFOndk.js} +0 -0
  485. /package/dist/{esm-BaaaPNGl.js → esm-CuQHjs36.js} +0 -0
  486. /package/dist/{fcl-Ccj8Z5Xd.js → fcl-D9nccAWI.js} +0 -0
  487. /package/dist/{forth-wd_XzGTg.js → forth-DG89iUsu.js} +0 -0
  488. /package/dist/{fortran-DcwUTZFe.js → fortran-ytKsAVvu.js} +0 -0
  489. /package/dist/{gas-DeALIER3.js → gas-Cg2Fm0N2.js} +0 -0
  490. /package/dist/{gherkin-CKTqaJNX.js → gherkin-B87FEnZ-.js} +0 -0
  491. /package/dist/{groovy-Bwdp_d8D.js → groovy-Dcs08AWD.js} +0 -0
  492. /package/dist/{haskell-DCdCcPLK.js → haskell-cwkOuhx6.js} +0 -0
  493. /package/dist/{haxe-DAyktQWJ.js → haxe-DWEo4q10.js} +0 -0
  494. /package/dist/{http-_DVAYWoR.js → http-B8jdG64J.js} +0 -0
  495. /package/dist/{idl-CBuZiRYu.js → idl-WWQwDcRV.js} +0 -0
  496. /package/dist/{init-uv0kkh4g.js → init-DNBbYZd_.js} +0 -0
  497. /package/dist/{javascript-DzigE11c.js → javascript-BeR74dxD.js} +0 -0
  498. /package/dist/{julia-PwfB-0Cm.js → julia-UlvCUYGL.js} +0 -0
  499. /package/dist/{katex-C_XRmjAP.js → katex-Bld7b-fk.js} +0 -0
  500. /package/dist/{livescript-BJLz1EbT.js → livescript-GPmFcmYV.js} +0 -0
  501. /package/dist/{lua-ZC-XC2jf.js → lua-DYoT_0zM.js} +0 -0
  502. /package/dist/{main-Tj_-QTyF.js → main-B1Jo_8pC.js} +0 -0
  503. /package/dist/{math-DFcdCCU8.js → math-CBNc2Ib0.js} +0 -0
  504. /package/dist/{mathematica-DCYMx6qB.js → mathematica-DSFIQlbG.js} +0 -0
  505. /package/dist/{mbox-OxMK_9XI.js → mbox-ej8lFMdL.js} +0 -0
  506. /package/dist/{micromark-factory-space-DF2w36zS.js → micromark-factory-space-CwHmg6iz.js} +0 -0
  507. /package/dist/{mirc-nJVyhA0H.js → mirc-CAdIdvHQ.js} +0 -0
  508. /package/dist/{mllike-DRO89bsU.js → mllike-CjTB1lHF.js} +0 -0
  509. /package/dist/{modelica-Don3E6ZD.js → modelica-BB68FYMa.js} +0 -0
  510. /package/dist/{mscgen-DJfqD3bN.js → mscgen-BkbzgGGI.js} +0 -0
  511. /package/dist/{mumps-SjGTvDYL.js → mumps-Cu-28E9F.js} +0 -0
  512. /package/dist/{nginx-DasThI7R.js → nginx-C1ofKPst.js} +0 -0
  513. /package/dist/{node-sql-parser-B8nBD36q.js → node-sql-parser-DLl_zNw0.js} +0 -0
  514. /package/dist/{ntriples-CNBKRl3I.js → ntriples-D9cQiZxZ.js} +0 -0
  515. /package/dist/{octave-DdeVHNlx.js → octave-BvtAnPX0.js} +0 -0
  516. /package/dist/{once-DPuqGUeo.js → once-B60G2fuJ.js} +0 -0
  517. /package/dist/{oz-CcKSoNvN.js → oz-COaVHk2E.js} +0 -0
  518. /package/dist/{pascal-6leftwNj.js → pascal-BFpqVD2x.js} +0 -0
  519. /package/dist/{path-BGaWgPKg.js → path-DwWbhZFI.js} +0 -0
  520. /package/dist/{perl-BhJIwWzN.js → perl-DaiORxHP.js} +0 -0
  521. /package/dist/{pig-r-xDHqRf.js → pig-DFzRhmsF.js} +0 -0
  522. /package/dist/{powershell-D-BELeNi.js → powershell-BG2LQNKN.js} +0 -0
  523. /package/dist/{properties-CnuDhbll.js → properties-CqJJR5QY.js} +0 -0
  524. /package/dist/{protobuf-CO8RBhvX.js → protobuf-WwDYV1yY.js} +0 -0
  525. /package/dist/{puppet-NmXHjLy8.js → puppet-QNY3w_uN.js} +0 -0
  526. /package/dist/{purify.es-H92eMd9-.js → purify.es-C-fIGuQm.js} +0 -0
  527. /package/dist/{python-DAQXi720.js → python-4QrQ3Ugi.js} +0 -0
  528. /package/dist/{q-DlikXfV0.js → q-DhwXuxE2.js} +0 -0
  529. /package/dist/{r-CuohilwT.js → r-Df-nkR25.js} +0 -0
  530. /package/dist/{range-C-rmrM1O.js → range-BOiA8qqU.js} +0 -0
  531. /package/dist/{rpm-0Pjwp0Pb.js → rpm-Cokue07s.js} +0 -0
  532. /package/dist/{ruby-Dq8NJTDG.js → ruby-DrYcL3qF.js} +0 -0
  533. /package/dist/{sas-CuwonyVP.js → sas-CoiPirA5.js} +0 -0
  534. /package/dist/{scheme-CYU-RRIf.js → scheme-CwFLjzHv.js} +0 -0
  535. /package/dist/{semaphore-CNDGTzkX.js → semaphore-C8rmHdhj.js} +0 -0
  536. /package/dist/{shell-COPmX2qE.js → shell-BFV-R24I.js} +0 -0
  537. /package/dist/{sieve-B_3zyLne.js → sieve-CxwXF5T9.js} +0 -0
  538. /package/dist/{simple-mode-DSBniks8.js → simple-mode-DTaJtKPt.js} +0 -0
  539. /package/dist/{smalltalk-DRft7iPv.js → smalltalk-QivVOCtX.js} +0 -0
  540. /package/dist/{solr-RZ9uTl59.js → solr-BLvysN-c.js} +0 -0
  541. /package/dist/{sparql-CN6qj55H.js → sparql-nKsFk8j7.js} +0 -0
  542. /package/dist/{spreadsheet-BNNUNXA2.js → spreadsheet-BWc8C2FT.js} +0 -0
  543. /package/dist/{sql-B4x8IkwU.js → sql-CWfUjlV1.js} +0 -0
  544. /package/dist/{stex-BIsgBmK4.js → stex-DtMAhV4-.js} +0 -0
  545. /package/dist/{stylus-Bn_ZjOQ3.js → stylus-BLKQAycn.js} +0 -0
  546. /package/dist/{swift-BLUJhMbz.js → swift-CJoKqiKj.js} +0 -0
  547. /package/dist/{tcl-C86fxecl.js → tcl-YTeYFNUc.js} +0 -0
  548. /package/dist/{textile-DmHh2rsK.js → textile-C6rKQqMQ.js} +0 -0
  549. /package/dist/{tiddlywiki-DI0mF2WJ.js → tiddlywiki-ZXwTHGNT.js} +0 -0
  550. /package/dist/{tiki-2HU6XLLn.js → tiki-C628O_u4.js} +0 -0
  551. /package/dist/{timer-YZl28NYN.js → timer-BpI_FKSA.js} +0 -0
  552. /package/dist/{toml-GWANRNAD.js → toml-DxlPGbRy.js} +0 -0
  553. /package/dist/{treemap-D-ka1hvx.js → treemap-DY3NBr79.js} +0 -0
  554. /package/dist/{troff-BHTsomIy.js → troff-DFCfH7Ku.js} +0 -0
  555. /package/dist/{ttcn-DQuhn5Mn.js → ttcn-DAW-ERVP.js} +0 -0
  556. /package/dist/{ttcn-cfg-HjFYtdB-.js → ttcn-cfg-CpJ8b7EN.js} +0 -0
  557. /package/dist/{turtle-nCay33Nv.js → turtle-BneV2f8L.js} +0 -0
  558. /package/dist/{vb-BG-XlqqJ.js → vb-D973Vxxh.js} +0 -0
  559. /package/dist/{vbscript-B6vyW0-D.js → vbscript-Dckaq3YO.js} +0 -0
  560. /package/dist/{velocity-CWegueqO.js → velocity-DKty-GUC.js} +0 -0
  561. /package/dist/{verilog-CzSQm4cG.js → verilog-aNaK_biA.js} +0 -0
  562. /package/dist/{vhdl-DqnNVL7r.js → vhdl-CQuehnQy.js} +0 -0
  563. /package/dist/{webidl-DXEUpDWH.js → webidl-Bhg8vaMr.js} +0 -0
  564. /package/dist/{xquery-Ba_NB5bD.js → xquery-D2q16GaM.js} +0 -0
  565. /package/dist/{yacas-HKQU6hyk.js → yacas-DHGOHnNa.js} +0 -0
  566. /package/dist/{z80-CXkHXLdj.js → z80-BPhTmO22.js} +0 -0
@@ -8,11 +8,13 @@ import {
8
8
  } from "@/core/cells/cells";
9
9
  import { CellId } from "@/core/cells/ids";
10
10
  import type { CellData, CellRuntimeState } from "@/core/cells/types";
11
+ import type { OutputMessage } from "@/core/kernel/messages";
11
12
  import { MultiColumn } from "@/utils/id-tree";
12
13
  import {
13
14
  disabledCellIds,
14
15
  enabledCellIds,
15
16
  isUninstantiated,
17
+ shouldHidePublishedCell,
16
18
  staleCellIds,
17
19
  } from "../utils";
18
20
 
@@ -426,3 +428,60 @@ describe("enabledCellIds", () => {
426
428
  expect(result).toEqual([cellId2, cellId3]);
427
429
  });
428
430
  });
431
+
432
+ describe("shouldHidePublishedCell", () => {
433
+ const base = {
434
+ errored: false,
435
+ interrupted: false,
436
+ stopped: false,
437
+ output: null,
438
+ showErrorTracebacks: false,
439
+ };
440
+ const errorOutput = (traceback?: string): OutputMessage => ({
441
+ channel: "marimo-error",
442
+ mimetype: "application/vnd.marimo+error",
443
+ data: [
444
+ { type: "exception", exception_type: "ValueError", msg: "!", traceback },
445
+ ],
446
+ timestamp: 0,
447
+ });
448
+
449
+ it("does not hide a healthy cell", () => {
450
+ expect(shouldHidePublishedCell(base)).toBe(false);
451
+ });
452
+
453
+ it.each(["errored", "interrupted", "stopped"] as const)(
454
+ "hides a %s cell",
455
+ (key) => {
456
+ expect(shouldHidePublishedCell({ ...base, [key]: true })).toBe(true);
457
+ },
458
+ );
459
+
460
+ it("hides error outputs", () => {
461
+ expect(shouldHidePublishedCell({ ...base, output: errorOutput() })).toBe(
462
+ true,
463
+ );
464
+ });
465
+
466
+ it("shows error outputs with a traceback when show_tracebacks is enabled", () => {
467
+ expect(
468
+ shouldHidePublishedCell({
469
+ ...base,
470
+ errored: true,
471
+ output: errorOutput("Traceback (most recent call last) ..."),
472
+ showErrorTracebacks: true,
473
+ }),
474
+ ).toBe(false);
475
+ });
476
+
477
+ it("hides error outputs without a traceback even when show_tracebacks is enabled", () => {
478
+ expect(
479
+ shouldHidePublishedCell({
480
+ ...base,
481
+ errored: true,
482
+ output: errorOutput(),
483
+ showErrorTracebacks: true,
484
+ }),
485
+ ).toBe(true);
486
+ });
487
+ });
@@ -2,6 +2,8 @@
2
2
 
3
3
  import type { EditorView } from "@codemirror/view";
4
4
  import { Objects } from "@/utils/objects";
5
+ import type { MarimoError, OutputMessage } from "../kernel/messages";
6
+ import { isErrorMime } from "../mime";
5
7
  import type { RuntimeState } from "../network/types";
6
8
  import type { NotebookState } from "./cells";
7
9
  import type { CellId } from "./ids";
@@ -196,3 +198,52 @@ export function cellStatusClasses({
196
198
  stale: status === "disabled-transitively",
197
199
  };
198
200
  }
201
+
202
+ /**
203
+ * Status classes for a published cell (read or present mode, output only).
204
+ */
205
+ export function publishedCellClasses({
206
+ errored,
207
+ stopped,
208
+ }: {
209
+ errored: boolean;
210
+ stopped: boolean;
211
+ }) {
212
+ return {
213
+ published: true,
214
+ "has-error": errored,
215
+ stopped: stopped,
216
+ };
217
+ }
218
+
219
+ /**
220
+ * Whether a published cell (read or present mode) should be hidden.
221
+ *
222
+ * Errored, interrupted, and stopped cells (and error outputs) are hidden in
223
+ * published views, unless `show_tracebacks` is enabled and the output carries
224
+ * an exception traceback to display inline.
225
+ */
226
+ export function shouldHidePublishedCell({
227
+ errored,
228
+ interrupted,
229
+ stopped,
230
+ output,
231
+ showErrorTracebacks,
232
+ }: {
233
+ errored: boolean;
234
+ interrupted: boolean;
235
+ stopped: boolean;
236
+ output: OutputMessage | null;
237
+ showErrorTracebacks: boolean;
238
+ }): boolean {
239
+ const outputIsError = isErrorMime(output?.mimetype);
240
+ const hasTraceback =
241
+ showErrorTracebacks &&
242
+ outputIsError &&
243
+ Array.isArray(output?.data) &&
244
+ output.data.some(
245
+ (e: MarimoError) =>
246
+ e.type === "exception" && "traceback" in e && e.traceback,
247
+ );
248
+ return (errored || interrupted || stopped || outputIsError) && !hasTraceback;
249
+ }
@@ -5,6 +5,7 @@ import { EditorView, type Tooltip } from "@codemirror/view";
5
5
  import { describe, expect, it } from "vitest";
6
6
  import {
7
7
  asSignatureHint,
8
+ closeSignatureHint,
8
9
  setSignatureHintEffect,
9
10
  signatureHintField,
10
11
  } from "../signature-hint";
@@ -51,12 +52,79 @@ describe("signatureHintField", () => {
51
52
  expect(state.field(signatureHintField)).toBeNull();
52
53
  });
53
54
 
54
- it("keeps and re-anchors the tooltip across edits", () => {
55
+ it("keeps and re-anchors the tooltip across edits inside the call", () => {
55
56
  let state = stateWithHint("plt.plot(", 9);
56
- // Insert before the tooltip position; it should shift to stay anchored.
57
- state = state.update({ changes: { from: 0, insert: "xy" } }).state;
57
+ // Insert before the tooltip position while the cursor stays inside the
58
+ // call; the anchor should shift but the hint should remain.
59
+ state = state.update({
60
+ changes: { from: 0, insert: "xy" },
61
+ selection: { anchor: 11 },
62
+ }).state;
58
63
  expect(state.field(signatureHintField)?.pos).toBe(11);
59
64
  });
65
+
66
+ it("dismisses the tooltip when the closing paren is typed", () => {
67
+ let state = stateWithHint("plt.plot(", 9);
68
+ // Type the closing paren; the cursor is now outside the call.
69
+ state = state.update({
70
+ changes: { from: 9, insert: ")" },
71
+ selection: { anchor: 10 },
72
+ }).state;
73
+ expect(state.field(signatureHintField)).toBeNull();
74
+ });
75
+
76
+ it("dismisses the tooltip when the anchored call closes inside grouping parens", () => {
77
+ // Regression for the `(plt.plot())` case: the outer grouping paren must not
78
+ // keep the (now-closed) plt.plot hint alive.
79
+ let state = stateWithHint("(plt.plot(", 10);
80
+ // Close plt.plot's call; the outer `(` is still open but we've left the
81
+ // anchored call.
82
+ state = state.update({
83
+ changes: { from: 10, insert: ")" },
84
+ selection: { anchor: 11 },
85
+ }).state;
86
+ expect(state.field(signatureHintField)).toBeNull();
87
+ });
88
+
89
+ it("keeps the tooltip while typing a nested call inside the anchored call", () => {
90
+ // Cursor inside the anchored call of `f(g(<cursor>`; opening/typing a nested
91
+ // call stays inside the anchored call, so the hint should remain.
92
+ let state = stateWithHint("f(g(", 4);
93
+ state = state.update({
94
+ changes: { from: 4, insert: "x(" },
95
+ selection: { anchor: 6 },
96
+ }).state;
97
+ expect(state.field(signatureHintField)?.pos).toBe(4);
98
+ });
99
+
100
+ it("keeps the tooltip when a nested call closes inside the anchored call", () => {
101
+ const anchor = "f(".length;
102
+ let state = stateWithHint("f(g(x", anchor);
103
+ state = state.update({
104
+ changes: { from: 5, insert: ")" },
105
+ selection: { anchor: 6 },
106
+ }).state;
107
+ expect(state.field(signatureHintField)?.pos).toBe(anchor);
108
+ });
109
+
110
+ it("dismisses the tooltip when the closing paren is typed in a large multi-line call", () => {
111
+ const anchor = "f(".length;
112
+ const prefix = `f(\n${" x,\n".repeat(25)}`;
113
+ let state = EditorState.create({
114
+ doc: prefix,
115
+ selection: { anchor: prefix.length },
116
+ extensions: [signatureHintField],
117
+ });
118
+ state = state.update({
119
+ effects: setSignatureHintEffect.of(fakeTooltip(anchor)),
120
+ }).state;
121
+ const head = prefix.length;
122
+ state = state.update({
123
+ changes: { from: head, insert: ")" },
124
+ selection: { anchor: head + 1 },
125
+ }).state;
126
+ expect(state.field(signatureHintField)).toBeNull();
127
+ });
60
128
  });
61
129
 
62
130
  describe("asSignatureHint", () => {
@@ -92,3 +160,29 @@ describe("asSignatureHint", () => {
92
160
  expect(wrapped.above).toBe(true);
93
161
  });
94
162
  });
163
+
164
+ describe("closeSignatureHint", () => {
165
+ it("returns false when no hint is showing", () => {
166
+ const view = new EditorView({
167
+ state: EditorState.create({ extensions: [signatureHintField] }),
168
+ });
169
+ expect(closeSignatureHint(view)).toBe(false);
170
+ expect(view.state.field(signatureHintField)).toBeNull();
171
+ view.destroy();
172
+ });
173
+
174
+ it("dismisses the hint and returns true when one is showing", () => {
175
+ const view = new EditorView({
176
+ state: EditorState.create({
177
+ doc: "plt.plot(",
178
+ extensions: [signatureHintField],
179
+ }),
180
+ });
181
+ view.dispatch({ effects: setSignatureHintEffect.of(fakeTooltip(9)) });
182
+ expect(view.state.field(signatureHintField)?.pos).toBe(9);
183
+
184
+ expect(closeSignatureHint(view)).toBe(true);
185
+ expect(view.state.field(signatureHintField)).toBeNull();
186
+ view.destroy();
187
+ });
188
+ });
@@ -1,12 +1,61 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
+ import type { EditorState } from "@codemirror/state";
2
3
  import { StateEffect, StateField } from "@codemirror/state";
3
- import { showTooltip, type Tooltip } from "@codemirror/view";
4
+ import { type EditorView, showTooltip, type Tooltip } from "@codemirror/view";
4
5
 
5
6
  /**
6
7
  * Effect to set (or clear, with `null`) the floating signature hint.
7
8
  */
8
9
  export const setSignatureHintEffect = StateEffect.define<Tooltip | null>();
9
10
 
11
+ // Bound the scan so large cells stay cheap on every keystroke.
12
+ const MAX_LINES_BACK = 20;
13
+
14
+ /**
15
+ * Whether the cursor is still inside the anchored call (just inside its `(`).
16
+ *
17
+ * Anchor-relative paren scan, bounded to {@link MAX_LINES_BACK} lines.
18
+ * Good enough for hint dismissal — not a full parse (ignores strings/comments).
19
+ */
20
+ function isCursorInsideAnchoredCall(options: {
21
+ state: EditorState;
22
+ anchor: number;
23
+ head: number;
24
+ }): boolean {
25
+ const { state, anchor, head } = options;
26
+ if (head < anchor) {
27
+ return false;
28
+ }
29
+
30
+ const headLine = state.doc.lineAt(head).number;
31
+ const anchorLine = state.doc.lineAt(anchor).number;
32
+ const startLine = Math.max(anchorLine, headLine - MAX_LINES_BACK + 1);
33
+ const from = Math.max(anchor, state.doc.line(startLine).from);
34
+
35
+ // If the anchor is outside the bounded window, assume its `(` is still open.
36
+ const assumedOpen = from > anchor;
37
+ let balance = assumedOpen ? 1 : 0;
38
+ const iter = state.doc.iterRange(from, head);
39
+ for (;;) {
40
+ const { value, done } = iter.next();
41
+ if (done) {
42
+ break;
43
+ }
44
+ for (const char of value) {
45
+ if (char === "(") {
46
+ balance++;
47
+ } else if (char === ")") {
48
+ balance--;
49
+ const closed = assumedOpen ? balance <= 0 : balance < 0;
50
+ if (closed) {
51
+ return false;
52
+ }
53
+ }
54
+ }
55
+ }
56
+ return true;
57
+ }
58
+
10
59
  /**
11
60
  * Wrap a tooltip so it renders like the completion popup's info box.
12
61
  *
@@ -34,13 +83,7 @@ export function asSignatureHint(tooltip: Tooltip): Tooltip {
34
83
  * Holds the floating "signature hint" shown after typing `(` or `,` inside a
35
84
  * call on the non-LSP (Jedi) completion path.
36
85
  *
37
- * The LSP path has its own signature help; this fills the gap for users
38
- * without a language server. The completion source (`pythonCompletionSource`)
39
- * drives it: it dispatches `setSignatureHintEffect` with the tooltip when the
40
- * backend returns a signature and with `null` otherwise. The hint is also
41
- * cleared when the cursor moves via a selection-only change (e.g. clicking
42
- * away or arrowing out of the call), and kept anchored across edits so it
43
- * doesn't flicker while a fresh result is in flight.
86
+ * The LSP path has its own signature help; this fills the gap for users without a language server.
44
87
  */
45
88
  export const signatureHintField = StateField.define<Tooltip | null>({
46
89
  create: () => null,
@@ -57,12 +100,36 @@ export const signatureHintField = StateField.define<Tooltip | null>({
57
100
  if (tr.selection && !tr.docChanged) {
58
101
  return null;
59
102
  }
60
- // Keep the hint anchored across edits; the completion source refreshes or
61
- // clears it as new results arrive.
103
+ // Dismiss once the cursor leaves the anchored call (e.g. the closing paren
104
+ // is typed). Otherwise keep the hint anchored across edits so it doesn't
105
+ // flicker while a fresh result is in flight; the completion source refreshes
106
+ // or clears it as results arrive.
62
107
  if (tr.docChanged) {
63
- return { ...tooltip, pos: tr.changes.mapPos(tooltip.pos) };
108
+ const anchor = tr.changes.mapPos(tooltip.pos);
109
+ if (
110
+ !isCursorInsideAnchoredCall({
111
+ state: tr.state,
112
+ anchor,
113
+ head: tr.state.selection.main.head,
114
+ })
115
+ ) {
116
+ return null;
117
+ }
118
+ return { ...tooltip, pos: anchor };
64
119
  }
65
120
  return tooltip;
66
121
  },
67
122
  provide: (field) => showTooltip.from(field),
68
123
  });
124
+
125
+ /**
126
+ * Dismiss the floating signature hint if one is showing.
127
+ * Returns `true` if a hint was dismissed.
128
+ */
129
+ export function closeSignatureHint(view: EditorView): boolean {
130
+ if (view.state.field(signatureHintField, false)) {
131
+ view.dispatch({ effects: setSignatureHintEffect.of(null) });
132
+ return true;
133
+ }
134
+ return false;
135
+ }
@@ -3,6 +3,8 @@ export const Constants = {
3
3
  githubPage: "https://github.com/marimo-team/marimo",
4
4
  releasesPage: "https://github.com/marimo-team/marimo/releases",
5
5
  issuesPage: "https://github.com/marimo-team/marimo/issues",
6
+ bugReportUrl:
7
+ "https://github.com/marimo-team/marimo/issues/new?template=bug_report.yaml",
6
8
  feedbackForm: "https://marimo.io/feedback",
7
9
  discordLink: "https://marimo.io/discord?ref=notebook",
8
10
  docsPage: "https://docs.marimo.io",
@@ -50,6 +52,12 @@ export const KnownQueryParams = {
50
52
  * If false, the chrome will be hidden.
51
53
  */
52
54
  showChrome: "show-chrome",
55
+ /**
56
+ * Override the display theme: `light`, `dark`, or `system`.
57
+ * Takes precedence over the notebook's saved `display.theme`.
58
+ * Ignored for embedded islands, which infer the theme from their host page.
59
+ */
60
+ theme: "theme",
53
61
  };
54
62
 
55
63
  /**
@@ -0,0 +1,173 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+
3
+ import { describe, expect, it } from "vitest";
4
+ import { cellId } from "@/__tests__/branded";
5
+ import type { CellErrorEntry } from "@/core/errors/error-entries";
6
+ import type { EnvironmentInfo } from "@/core/network/types";
7
+ import {
8
+ buildBugReportUrl,
9
+ buildIssueDetails,
10
+ createPartialEnvironment,
11
+ enrichEnvironment,
12
+ markdownCodeFence,
13
+ MAX_PREFILL_URL_LENGTH,
14
+ } from "../issue-details";
15
+
16
+ const environment: EnvironmentInfo = {
17
+ marimo: "1.2.3",
18
+ editable: false,
19
+ location: "~/.venv/site-packages/marimo",
20
+ OS: "Darwin",
21
+ "OS Version": "25.0",
22
+ Processor: "arm",
23
+ "Python Version": "3.12.9",
24
+ Locale: "en_US",
25
+ Binaries: { Browser: "chrome 140", Node: "v22", uv: "0.11" },
26
+ Dependencies: { click: "8.4.2" },
27
+ "Optional Dependencies": { pandas: "3.0.0" },
28
+ "Experimental Flags": {},
29
+ };
30
+
31
+ describe("enrichEnvironment", () => {
32
+ it("replaces server Chrome detection with the active browser", () => {
33
+ const result = enrichEnvironment(environment, "Firefox/140");
34
+ expect(result.Binaries.Browser).toBe("Firefox/140");
35
+ expect(result.Binaries.Node).toBe("v22");
36
+ });
37
+
38
+ it("does not mutate the input", () => {
39
+ enrichEnvironment(environment, "Firefox/140");
40
+ expect(environment.Binaries.Browser).toBe("chrome 140");
41
+ });
42
+ });
43
+
44
+ describe("createPartialEnvironment", () => {
45
+ it("records the collection error and keeps the active browser", () => {
46
+ const partial = createPartialEnvironment(
47
+ "1.2.3",
48
+ "Firefox/140",
49
+ "en_US",
50
+ "Server environment information unavailable",
51
+ );
52
+ expect(partial.marimo).toBe("1.2.3");
53
+ expect(partial.Binaries?.Browser).toBe("Firefox/140");
54
+ expect(partial.Locale).toBe("en_US");
55
+ expect(partial["Environment Collection Error"]).toBe(
56
+ "Server environment information unavailable",
57
+ );
58
+ });
59
+
60
+ it("omits empty fields rather than filling placeholders", () => {
61
+ const partial = createPartialEnvironment(
62
+ "1.2.3",
63
+ "Firefox/140",
64
+ "",
65
+ "boom",
66
+ );
67
+ expect(partial.Locale).toBeUndefined();
68
+ expect(partial.location).toBeUndefined();
69
+ expect(partial.OS).toBeUndefined();
70
+ expect(partial.Dependencies).toBeUndefined();
71
+ });
72
+ });
73
+
74
+ describe("markdownCodeFence", () => {
75
+ it("uses a fence longer than any backtick run in the content", () => {
76
+ const block = markdownCodeFence("python", 'text = "```"');
77
+ expect(block.startsWith("````python\n")).toBe(true);
78
+ expect(block.endsWith("\n````")).toBe(true);
79
+ expect(block).toContain('text = "```"');
80
+ });
81
+
82
+ it("uses a minimum fence of three backticks", () => {
83
+ const block = markdownCodeFence("json", "{}");
84
+ expect(block.startsWith("```json\n")).toBe(true);
85
+ expect(block.endsWith("\n```")).toBe(true);
86
+ });
87
+ });
88
+
89
+ describe("buildIssueDetails", () => {
90
+ it("includes the environment and omits notebook source unless provided", () => {
91
+ const markdown = buildIssueDetails({
92
+ environment,
93
+ errors: [],
94
+ notebook: undefined,
95
+ });
96
+ expect(markdown).toContain("<summary>Environment</summary>");
97
+ expect(markdown).toContain('"marimo": "1.2.3"');
98
+ expect(markdown).not.toContain("Notebook source");
99
+ expect(markdown).not.toContain("Current errors");
100
+ });
101
+
102
+ it("includes current errors as plain text without notebook source", () => {
103
+ const errors: CellErrorEntry[] = [
104
+ {
105
+ cellId: cellId("cell-1"),
106
+ cellName: "Cell 1",
107
+ cellCode: "password = 'private'",
108
+ errorData: [],
109
+ tracebackHtml:
110
+ '<span class="gr">ValueError</span>: <span class="n">bad value</span>',
111
+ },
112
+ ];
113
+ const markdown = buildIssueDetails({ environment, errors });
114
+ expect(markdown).toContain("<summary>Current errors</summary>");
115
+ expect(markdown).toContain("ValueError: bad value");
116
+ expect(markdown).not.toContain("password");
117
+ });
118
+
119
+ it("includes notebook source under its basename when provided", () => {
120
+ const markdown = buildIssueDetails({
121
+ environment,
122
+ errors: [],
123
+ notebook: {
124
+ filename: "/project/example.py",
125
+ contents: "x = 1",
126
+ },
127
+ });
128
+ expect(markdown).toContain(
129
+ "<summary>Notebook source: example.py</summary>",
130
+ );
131
+ expect(markdown).toContain("x = 1");
132
+ });
133
+
134
+ it("escapes the summary label as text", () => {
135
+ const markdown = buildIssueDetails({
136
+ environment,
137
+ errors: [],
138
+ notebook: {
139
+ filename: "/project/<script>.py",
140
+ contents: "x = 1",
141
+ },
142
+ });
143
+ expect(markdown).toContain("&lt;script&gt;.py");
144
+ expect(markdown).not.toContain("<script>.py");
145
+ });
146
+ });
147
+
148
+ describe("buildBugReportUrl", () => {
149
+ const baseUrl =
150
+ "https://github.com/marimo-team/marimo/issues/new?template=bug_report.yaml";
151
+
152
+ it("prefills the env field with the encoded issue details", () => {
153
+ const url = buildBugReportUrl(baseUrl, "hello world");
154
+ expect(url).toBe(`${baseUrl}&env=hello%20world`);
155
+ });
156
+
157
+ it("appends env with a query separator when the base URL has none", () => {
158
+ const url = buildBugReportUrl("https://example.com/new", "x");
159
+ expect(url).toBe("https://example.com/new?env=x");
160
+ });
161
+
162
+ it("encodes markdown so it survives as a single query param", () => {
163
+ const details = buildIssueDetails({ environment, errors: [] });
164
+ const url = buildBugReportUrl(baseUrl, details);
165
+ expect(url).toContain("&env=");
166
+ expect(new URL(url).searchParams.get("env")).toBe(details);
167
+ });
168
+
169
+ it("falls back to the plain base URL when the prefill exceeds the cap", () => {
170
+ const huge = "x".repeat(MAX_PREFILL_URL_LENGTH);
171
+ expect(buildBugReportUrl(baseUrl, huge)).toBe(baseUrl);
172
+ });
173
+ });