@marimo-team/islands 0.23.15-dev6 → 0.23.15-dev62

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (578) hide show
  1. package/dist/{ConnectedDataExplorerComponent-CU4fZJzG.js → ConnectedDataExplorerComponent-CJaUI-S-.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-P9tjkj4n.js} +21 -21
  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-DXwkyAaM.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-CIOjvxeD.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-B6dZC_oU.js} +6 -6
  17. package/dist/{capabilities-D_4LYhSU.js → capabilities-BYLFYTYv.js} +2 -2
  18. package/dist/{channel-D_PHgcig.js → channel-BN070S0F.js} +1 -1
  19. package/dist/{chat-ui-DinOvbWu.js → chat-ui-BdSDiVjk.js} +3122 -3116
  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-BxBDji1u.js} +3 -3
  26. package/dist/{chunk-ATLVNIR6-o0Z5MZLd.js → chunk-ATLVNIR6-qFiszptQ.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-B_z2FEHm.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-D4Y8yV8B.js} +6 -6
  31. package/dist/{chunk-EXTU4WIE-9sNjmQrB.js → chunk-EXTU4WIE-BQPBhApE.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-CY4CRbV5.js} +3 -3
  36. package/dist/{chunk-JZLCHNYA-C6ftyVMN.js → chunk-JZLCHNYA-DWIR9m5O.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-Bw2HcMNc.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-DPBNNzpR.js} +2 -2
  41. package/dist/{chunk-QXUST7PY-DMhsRpYK.js → chunk-QXUST7PY-DtC2t9Mk.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-BdgLc8AM.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-BzSHcq-K.js} +3 -3
  48. package/dist/{chunk-UMXZTB3W-D7uwvNjd.js → chunk-UMXZTB3W-D1uHz8MN.js} +1 -1
  49. package/dist/classDiagram-2ON5EDUG-BiQPjMNY.js +30 -0
  50. package/dist/classDiagram-v2-WZHVMYZB-YHdR8fqM.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-Dpab3kCj.js → code-visibility-D7Oaafvl.js} +1554 -1471
  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-DpYjBqQs.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-D4ftnaua.js} +22 -22
  69. package/dist/{diagram-QEK2KX5R-CKdBR2sb.js → diagram-QEK2KX5R-DVlUOgs1.js} +17 -17
  70. package/dist/{diagram-S2PKOQOG-Dpi7mo5W.js → diagram-S2PKOQOG-CGh4OMEV.js} +17 -17
  71. package/dist/diff-DJIRmJ1g.js +4 -0
  72. package/dist/{dist-DyyjKEYf.js → dist-3NCqaWjt.js} +2 -2
  73. package/dist/{dist-D-W5ny5a.js → dist-4lVIWUT3.js} +1 -1
  74. package/dist/dist-5o9uz19x.js +5 -0
  75. package/dist/{dist-GZXUmt0b.js → dist-B2jmQKKx.js} +2 -2
  76. package/dist/{dist--2Bqjvs0.js → dist-B96tMAst.js} +2 -2
  77. package/dist/{dist-BaoDKvdy.js → dist-BCX980mU.js} +2 -2
  78. package/dist/{dist-DMjWuVs8.js → dist-BIEt-mlF.js} +1 -1
  79. package/dist/{dist-BR_gyG9L.js → dist-BO5HRiTf.js} +2 -2
  80. package/dist/{dist-Dv_Y15yk.js → dist-BOMbzyb3.js} +85 -85
  81. package/dist/{dist-CIYBwstr.js → dist-BP39XM8u.js} +1 -1
  82. package/dist/{dist-DZo4nSS0.js → dist-BPF0gTRZ.js} +6 -6
  83. package/dist/{dist-BSAt6RhH.js → dist-BTdrwBWP.js} +22 -22
  84. package/dist/{dist-BY018Paw.js → dist-BdqCKQ1O.js} +2 -2
  85. package/dist/dist-BpDH0DEP.js +5 -0
  86. package/dist/dist-BpXhbQXO.js +8 -0
  87. package/dist/{dist-CcWX6tmx.js → dist-BpeiYpG2.js} +2 -2
  88. package/dist/{dist-A2846XWO.js → dist-BwhXBwMd.js} +1 -1
  89. package/dist/dist-ByadAk_L.js +5 -0
  90. package/dist/{dist-abid3KgM.js → dist-C18MUWTj.js} +2 -2
  91. package/dist/{dist-DZORgqKY.js → dist-C2_4pjuS.js} +1 -1
  92. package/dist/{dist-BzEzfugY.js → dist-CFSb_Frm.js} +1 -1
  93. package/dist/dist-CK0g7JvP.js +8 -0
  94. package/dist/{dist-C_Y3oV3C.js → dist-CRmSjkLP.js} +2 -2
  95. package/dist/{dist-hT4QzYX-.js → dist-CSlJrrAw.js} +86 -81
  96. package/dist/{dist-Du8WkPuU.js → dist-CV79CsQ0.js} +2 -2
  97. package/dist/dist-CfzCtiq2.js +5 -0
  98. package/dist/{dist-CoXAujgg.js → dist-D3bdsa1d.js} +4 -4
  99. package/dist/dist-D8JtVFrW.js +8 -0
  100. package/dist/dist-DK2Oocpu.js +6 -0
  101. package/dist/{dist-LTU8Hdvn.js → dist-DZwp8lro.js} +3 -3
  102. package/dist/{dist-t9Kf7xqC.js → dist-DaXJPX8F.js} +2 -2
  103. package/dist/{dist-U4F-tbMs.js → dist-De-GlSAs.js} +246 -184
  104. package/dist/{dist-M9Vag9Y0.js → dist-DgjbnqTg.js} +125 -125
  105. package/dist/dist-DnSu977r.js +5 -0
  106. package/dist/{dist-CxJDU6Bh.js → dist-DviUBLUp.js} +4 -4
  107. package/dist/{dist-CpxNdDkw.js → dist-DwqBJ014.js} +2 -2
  108. package/dist/{dist-Bf7SHuNp.js → dist-JGehap7K.js} +5 -5
  109. package/dist/{dist-Bk75fBZA.js → dist-LpLXa9Lb.js} +2 -2
  110. package/dist/{dist-Bf9f8MuT.js → dist-SXNmlE8A.js} +1 -1
  111. package/dist/dist-UmxJm6sW.js +8 -0
  112. package/dist/dist-aYSBQSyM.js +5 -0
  113. package/dist/dist-kkZ1Ztlh.js +6 -0
  114. package/dist/dist-ngPczwNi.js +5 -0
  115. package/dist/{dist-DgGbNavJ.js → dist-pqIwD8VD.js} +2 -2
  116. package/dist/dist-wQRyxyTV.js +5 -0
  117. package/dist/{dist-Dax--nl9.js → dist-w_gWE5Wf.js} +1 -1
  118. package/dist/{dockerfile-twL37N91.js → dockerfile-B82Pkz_V.js} +1 -1
  119. package/dist/dtd-Dyiazv4N.js +4 -0
  120. package/dist/dylan-D8Fcw7NA.js +4 -0
  121. package/dist/ecl-CjKp8Vii.js +4 -0
  122. package/dist/eiffel-K9ViOX5r.js +4 -0
  123. package/dist/elm-B5NVtRco.js +4 -0
  124. package/dist/{erDiagram-Q2GNP2WA-BU-m41EQ.js → erDiagram-Q2GNP2WA-BcKAHFqF.js} +15 -15
  125. package/dist/erlang-BnLzgk7R.js +4 -0
  126. package/dist/{error-banner-DFPfz_Qf.js → error-banner-DR7o3CbX.js} +68 -68
  127. package/dist/{esm-ga2Bf3O2.js → esm-DKOv6P2M.js} +424 -424
  128. package/dist/esm-k8PIvuZW.js +1180 -0
  129. package/dist/{extends-9MVIxxRo.js → extends-Cq2JYHKy.js} +36 -20
  130. package/dist/{factor-CajWS6mS.js → factor-Bq2mGIHt.js} +1 -1
  131. package/dist/factor-C7f9Jz5R.js +4 -0
  132. package/dist/{flowDiagram-NV44I4VS-CRoXKjGq.js → flowDiagram-NV44I4VS-BRhSg-ro.js} +17 -17
  133. package/dist/{formats-Dzx4J_z1.js → formats-BFhkZJwd.js} +3 -3
  134. package/dist/forth-rGM8jLao.js +4 -0
  135. package/dist/fortran-B3acSe0i.js +4 -0
  136. package/dist/{ganttDiagram-JELNMOA3-7mq5f9cO.js → ganttDiagram-JELNMOA3-CXXCN7LN.js} +10 -10
  137. package/dist/gas-Bb1Vmv_N.js +4 -0
  138. package/dist/gherkin-C9Lyidgd.js +4 -0
  139. package/dist/{gitGraph-G5XIXVHT-DiniR35k.js → gitGraph-G5XIXVHT-BjTx0kww.js} +3 -3
  140. package/dist/{gitGraphDiagram-V2S2FVAM-Dfuokq6w.js → gitGraphDiagram-V2S2FVAM-BOlkMSqK.js} +17 -17
  141. package/dist/{glide-data-editor-CjTu7ukN.js → glide-data-editor--CaN-f27.js} +13 -13
  142. package/dist/groovy-DQk6XcGH.js +4 -0
  143. package/dist/haskell-mV0Vw9gv.js +4 -0
  144. package/dist/haxe-DqxN89zH.js +5 -0
  145. package/dist/{html-to-image-_wGfk8V-.js → html-to-image-DDENewl2.js} +2649 -2607
  146. package/dist/idl-ya8W561J.js +4 -0
  147. package/dist/{info-VBDWY6EO-DVZvGhkQ.js → info-VBDWY6EO-CA67FznA.js} +3 -3
  148. package/dist/infoDiagram-HS3SLOUP-D3TyKnL_.js +30 -0
  149. package/dist/{input-DtsN7xm-.js → input-DStQIuqD.js} +51 -51
  150. package/dist/javascript-CgqgptVu.js +4 -0
  151. package/dist/{journeyDiagram-XKPGCS4Q-8XYSU1GI.js → journeyDiagram-XKPGCS4Q-DEal0aT1.js} +7 -7
  152. package/dist/julia-CFQ-HusI.js +4 -0
  153. package/dist/{kanban-definition-3W4ZIXB7--9pT9z1R.js → kanban-definition-3W4ZIXB7-Dl90wENN.js} +12 -12
  154. package/dist/{katex-9-9QRhxz.js → katex-C4t-BmrK.js} +1 -1
  155. package/dist/{label-WfTSU8L4.js → label-DIk0QoFe.js} +2 -2
  156. package/dist/{line-C5s_12ee.js → line-C43FIPBd.js} +3 -3
  157. package/dist/{linear-B5-AFRiR.js → linear-H_vsH9ao.js} +4 -4
  158. package/dist/livescript-D__3TmDo.js +4 -0
  159. package/dist/{loader-Boph2xIS.js → loader-CTHCI-qe.js} +5 -16
  160. package/dist/lua-Bytcgj_W.js +4 -0
  161. package/dist/main.js +2217 -2116
  162. package/dist/mathematica-DJhvVKvl.js +4 -0
  163. package/dist/mbox-IGHPCjfR.js +4 -0
  164. package/dist/{mermaid-4DMBBIKO-Eg3D4FVz.js → mermaid-4DMBBIKO-FXbOziy9.js} +1 -1
  165. package/dist/{mermaid-BYqXy_NE.js → mermaid-CdSvixW2.js} +47 -47
  166. package/dist/{mermaid-parser.core-C3XRsazI.js → mermaid-parser.core-DoivvxPd.js} +8 -8
  167. package/dist/{mhchem-yiCCuiEF.js → mhchem-EGhUZR1V.js} +1 -1
  168. package/dist/{mindmap-definition-VGOIOE7T-B-4mnfFG.js → mindmap-definition-VGOIOE7T-CCDupjWW.js} +14 -14
  169. package/dist/mirc-tcwvVugm.js +4 -0
  170. package/dist/mllike-Dx91i62r.js +6 -0
  171. package/dist/modelica-_SRt-yU5.js +4 -0
  172. package/dist/mscgen-GZrGS9gt.js +6 -0
  173. package/dist/mumps-Cv3ygyod.js +4 -0
  174. package/dist/nsis-BU7GeGbI.js +4 -0
  175. package/dist/{nsis-ClF3r5Tr.js → nsis-i9_sgigf.js} +1 -1
  176. package/dist/ntriples-CL-FCYXb.js +4 -0
  177. package/dist/{number-overlay-editor-BLJXvX9c.js → number-overlay-editor-Ck_mc_gT.js} +1 -1
  178. package/dist/objects-De59twF-.js +56 -0
  179. package/dist/octave-Dc6_3DIu.js +4 -0
  180. package/dist/{ordinal-ArJavP1Q.js → ordinal-Bkv2-veX.js} +1 -1
  181. package/dist/oz-DpUAJCXf.js +4 -0
  182. package/dist/{packet-DYOGHKS2-34raHOiB.js → packet-DYOGHKS2-Bkgofxf3.js} +3 -3
  183. package/dist/pascal-B17mncXs.js +4 -0
  184. package/dist/perl-BTpK97q9.js +4 -0
  185. package/dist/{pie-VRWISCQL-BaLlzZa3.js → pie-VRWISCQL-B1AMhN_7.js} +3 -3
  186. package/dist/{pieDiagram-ADFJNKIX-Cr3cNpZY.js → pieDiagram-ADFJNKIX-JvXG_6hk.js} +22 -22
  187. package/dist/pig-CFb638Ap.js +4 -0
  188. package/dist/powershell-Cxo-_2A5.js +4 -0
  189. package/dist/{precisionRound-Tqb4mg-H.js → precisionRound-CnHPY_5v.js} +1 -1
  190. package/dist/{process-output-Mh4UrjwM.js → process-output-2QPcgBQg.js} +4 -4
  191. package/dist/properties-BPgT1xTB.js +4 -0
  192. package/dist/protobuf-BgHBaIIK.js +4 -0
  193. package/dist/pug-25-oS0SG.js +4 -0
  194. package/dist/{pug-B_rby2yb.js → pug-BhE2JRSg.js} +1 -1
  195. package/dist/puppet-DarIr20S.js +4 -0
  196. package/dist/purify.es-EnR5yhgI.js +783 -0
  197. package/dist/python-BqmOsBsi.js +4 -0
  198. package/dist/q-D3QJCTup.js +4 -0
  199. package/dist/{quadrantDiagram-AYHSOK5B-BuNL8Q93.js → quadrantDiagram-AYHSOK5B-BqDB9tUC.js} +5 -5
  200. package/dist/r-Cz_yBX4z.js +4 -0
  201. package/dist/{radar-ZZBFDIW7-Ci7bfoZa.js → radar-ZZBFDIW7-C2b7A32s.js} +3 -3
  202. package/dist/{react-vega-B0sAlDTL.js → react-vega-BazDALhI.js} +469 -469
  203. package/dist/{requirementDiagram-UZGBJVZJ-BG2lLUN1.js → requirementDiagram-UZGBJVZJ-KbVt8SPH.js} +14 -14
  204. package/dist/{reveal-component-BfYO8h-9.js → reveal-component-TK3vi1Xl.js} +629 -622
  205. package/dist/rpm-DGOtYwAI.js +5 -0
  206. package/dist/ruby-DBZu4rPc.js +4 -0
  207. package/dist/{sankeyDiagram-TZEHDZUN-DMal8sps.js → sankeyDiagram-TZEHDZUN-DgkF38jx.js} +5 -5
  208. package/dist/sas-Dd1D9qTq.js +4 -0
  209. package/dist/scheme-BmDjvTHX.js +4 -0
  210. package/dist/{sequenceDiagram-WL72ISMW-DT6Tk-Eo.js → sequenceDiagram-WL72ISMW-BDmx9n95.js} +8 -8
  211. package/dist/shell-BL8zFSaj.js +4 -0
  212. package/dist/sieve-BAx2WqUP.js +4 -0
  213. package/dist/smalltalk-CYRzF7VV.js +4 -0
  214. package/dist/sparql-YWaDRO4A.js +4 -0
  215. package/dist/{spec-Cz-Bj1JI.js → spec-CnaxwDqy.js} +4 -4
  216. package/dist/{src-Bf2iLOlr.js → src-DV3ha_nA.js} +1 -1
  217. package/dist/{stateDiagram-FKZM4ZOC-CB_lodq3.js → stateDiagram-FKZM4ZOC-ByOvQf2n.js} +17 -17
  218. package/dist/stateDiagram-v2-4FDKWEC3-C3xqeavR.js +29 -0
  219. package/dist/{step-CWipAYTY.js → step-BqHnkgWE.js} +1 -1
  220. package/dist/stex-B5O-env2.js +4 -0
  221. package/dist/{strings-Dq_j3Rxw.js → strings-BYAhZnQi.js} +354 -354
  222. package/dist/style.css +1 -1
  223. package/dist/stylus-lYsyLFc1.js +4 -0
  224. package/dist/swift-ClQz9z1n.js +4 -0
  225. package/dist/{swiper-component-5HoSsPi1.js → swiper-component-DE94711u.js} +4 -4
  226. package/dist/tcl-B3jhsfqY.js +4 -0
  227. package/dist/textile-Cb1Dw7Aq.js +4 -0
  228. package/dist/{time-CsmIF9YZ.js → time-Bb4A7I6a.js} +4 -4
  229. package/dist/{timeline-definition-IT6M3QCI-NfSKRvH0.js → timeline-definition-IT6M3QCI-CkD_trIn.js} +4 -4
  230. package/dist/{toDate-CWNNlFEX.js → toDate-B3IRfHhw.js} +16 -7
  231. package/dist/toml-nHZhetdO.js +4 -0
  232. package/dist/{tooltip-Czds6Qr8.js → tooltip-B-qh7UPB.js} +3 -3
  233. package/dist/{treemap-GDKQZRPO-Cl6OQh8D.js → treemap-GDKQZRPO-SDux0AV8.js} +3 -3
  234. package/dist/troff-DuJAGWKH.js +4 -0
  235. package/dist/ttcn-BxrcwP21.js +4 -0
  236. package/dist/ttcn-cfg-BAg_9dcc.js +4 -0
  237. package/dist/turtle-zCq949as.js +4 -0
  238. package/dist/{types-C2Ir191_.js → types-DQl7jVYK.js} +1 -1
  239. package/dist/use-vega-container-remeasure-DGNrIQSk.js +27 -0
  240. package/dist/{useAsyncData-KfHB8wQR.js → useAsyncData-CvO8WUy3.js} +1 -1
  241. package/dist/{useDateFormatter-CMnRuVmN.js → useDateFormatter-BSoGim-G.js} +2 -2
  242. package/dist/{useDeepCompareMemoize-nJMtxhm4.js → useDeepCompareMemoize-J3MKRdA4.js} +1 -1
  243. package/dist/{useIframeCapabilities-DWIYvDh7.js → useIframeCapabilities-POcFXHbw.js} +1 -1
  244. package/dist/{useLifecycle-DegSo0lV.js → useLifecycle-DqPxHgAN.js} +3 -3
  245. package/dist/{useTheme-6eZ3GOTS.js → useTheme-XMq9mNf_.js} +65 -29
  246. package/dist/vb-De5hElus.js +4 -0
  247. package/dist/vbscript-Cypcpv4F.js +4 -0
  248. package/dist/{vega-component-DzyyM9fc.js → vega-component-CrFoZT1S.js} +225 -223
  249. package/dist/vega-embed-container-DAQAMjiO.js +22 -0
  250. package/dist/vega-loader.browser-DmpxCJqx.js +1353 -0
  251. package/dist/velocity-Di7l-yhe.js +4 -0
  252. package/dist/verilog-Bzi-S3g2.js +4 -0
  253. package/dist/vhdl-B0ZZITaW.js +4 -0
  254. package/dist/webidl-0sviiRcN.js +4 -0
  255. package/dist/xquery-B4qMVWaB.js +4 -0
  256. package/dist/{xychartDiagram-PRI3JC2R-BvwftqMA.js → xychartDiagram-PRI3JC2R-BSkNxYNw.js} +13 -13
  257. package/dist/yacas-Jt25Fuv8.js +4 -0
  258. package/dist/z80-CrcbYzmp.js +4 -0
  259. package/dist/{zod-CijjQh4u.js → zod-D0yOqoGe.js} +26 -26
  260. package/package.json +3 -1
  261. package/src/__mocks__/requests.ts +3 -0
  262. package/src/components/charts/lazy.tsx +3 -1
  263. package/src/components/charts/vega-embed-container.tsx +18 -0
  264. package/src/components/chat/__tests__/chat-utils.test.ts +244 -1
  265. package/src/components/chat/__tests__/message-queue.test.tsx +121 -0
  266. package/src/components/chat/chat-panel.tsx +196 -67
  267. package/src/components/chat/chat-utils.ts +111 -2
  268. package/src/components/editor/RecoveryButton.tsx +2 -2
  269. package/src/components/editor/SortableCell.tsx +6 -2
  270. package/src/components/editor/__tests__/output-persistence.test.tsx +241 -0
  271. package/src/components/editor/actions/__tests__/pair-with-agent-commands.test.ts +153 -0
  272. package/src/components/editor/actions/pair-with-agent-commands.ts +109 -0
  273. package/src/components/editor/actions/pair-with-agent-modal.tsx +20 -64
  274. package/src/components/editor/actions/useNotebookActions.tsx +8 -0
  275. package/src/components/editor/ai/add-cell-with-ai.tsx +14 -5
  276. package/src/components/editor/ai/ai-completion-editor.tsx +4 -1
  277. package/src/components/editor/cell/cell-context-menu.tsx +7 -0
  278. package/src/components/editor/chrome/components/__tests__/feedback-button.test.tsx +221 -0
  279. package/src/components/editor/chrome/components/feedback-button.tsx +308 -77
  280. package/src/components/editor/chrome/panels/packages-panel.tsx +11 -1
  281. package/src/components/editor/chrome/panels/write-secret-modal.tsx +3 -2
  282. package/src/components/editor/columns/__tests__/cell-column.test.tsx +105 -0
  283. package/src/components/editor/columns/cell-column.tsx +34 -4
  284. package/src/components/editor/columns/sortable-column.tsx +24 -4
  285. package/src/components/editor/connections/__tests__/secret-combobox.test.ts +134 -0
  286. package/src/components/editor/connections/database/schemas.ts +35 -27
  287. package/src/components/editor/connections/form-renderers.tsx +42 -110
  288. package/src/components/editor/connections/secret-combobox.tsx +253 -0
  289. package/src/components/editor/connections/storage/schemas.ts +12 -6
  290. package/src/components/editor/file-tree/download.ts +46 -0
  291. package/src/components/editor/file-tree/file-explorer.tsx +3 -21
  292. package/src/components/editor/file-tree/file-viewer.tsx +4 -27
  293. package/src/components/editor/navigation/__tests__/navigation.test.ts +33 -0
  294. package/src/components/editor/navigation/navigation.ts +8 -1
  295. package/src/components/editor/notebook-cell.tsx +203 -106
  296. package/src/components/editor/renderers/__tests__/cells-renderer.test.tsx +66 -0
  297. package/src/components/editor/renderers/cell-array.tsx +26 -13
  298. package/src/components/editor/renderers/cells-renderer.tsx +8 -2
  299. package/src/components/editor/renderers/slides-layout/__tests__/plugin.test.ts +29 -0
  300. package/src/components/editor/renderers/slides-layout/types.ts +4 -0
  301. package/src/components/editor/renderers/vertical-layout/vertical-layout.tsx +19 -19
  302. package/src/components/slides/reveal-component.tsx +37 -17
  303. package/src/components/slides/slide-form.tsx +72 -0
  304. package/src/components/ui/toast.tsx +11 -3
  305. package/src/components/ui/toaster.tsx +65 -9
  306. package/src/core/ai/context/providers/error.ts +6 -158
  307. package/src/core/cells/__tests__/utils.test.ts +59 -0
  308. package/src/core/cells/utils.ts +51 -0
  309. package/src/core/codemirror/completion/__tests__/signature-hint.test.ts +97 -3
  310. package/src/core/codemirror/completion/signature-hint.ts +78 -11
  311. package/src/core/constants.ts +8 -0
  312. package/src/core/diagnostics/__tests__/issue-details.test.ts +173 -0
  313. package/src/core/diagnostics/issue-details.ts +139 -0
  314. package/src/core/errors/__tests__/error-entries.test.ts +25 -0
  315. package/src/core/errors/error-entries.ts +176 -0
  316. package/src/core/islands/__tests__/bridge.test.ts +341 -46
  317. package/src/core/islands/__tests__/main.test.ts +176 -0
  318. package/src/core/islands/__tests__/parse.test.ts +105 -0
  319. package/src/core/islands/bootstrap.ts +8 -3
  320. package/src/core/islands/bridge.ts +117 -23
  321. package/src/core/islands/components/__tests__/web-components.test.tsx +214 -0
  322. package/src/core/islands/components/web-components.tsx +76 -15
  323. package/src/core/islands/constants.ts +1 -0
  324. package/src/core/islands/main.ts +69 -3
  325. package/src/core/islands/parse.ts +70 -23
  326. package/src/core/islands/worker/__tests__/controller.test.ts +173 -0
  327. package/src/core/islands/worker/worker.tsx +145 -57
  328. package/src/core/network/__tests__/requests-lazy.test.ts +18 -0
  329. package/src/core/network/__tests__/requests-network.test.ts +7 -0
  330. package/src/core/network/requests-lazy.ts +13 -1
  331. package/src/core/network/requests-network.ts +3 -0
  332. package/src/core/network/requests-static.ts +1 -0
  333. package/src/core/network/requests-toasting.tsx +1 -0
  334. package/src/core/network/types.ts +3 -0
  335. package/src/core/runtime/__tests__/runtime.test.ts +64 -0
  336. package/src/core/runtime/runtime.ts +30 -10
  337. package/src/core/wasm/bridge.ts +8 -0
  338. package/src/core/wasm/worker/bootstrap.ts +113 -20
  339. package/src/core/wasm/worker/types.ts +2 -0
  340. package/src/css/app/Cell.css +10 -0
  341. package/src/hooks/__tests__/useHotkey.test.tsx +88 -0
  342. package/src/hooks/useHotkey.ts +29 -4
  343. package/src/plugins/impl/anywidget/__tests__/host.test.ts +6 -9
  344. package/src/plugins/impl/anywidget/__tests__/registry.test.ts +3 -1
  345. package/src/plugins/impl/anywidget/__tests__/widget-binding.test.ts +32 -61
  346. package/src/plugins/impl/anywidget/model-proxy.ts +0 -13
  347. package/src/plugins/impl/anywidget/runtime.ts +1 -0
  348. package/src/plugins/impl/anywidget/widget-binding.ts +8 -34
  349. package/src/plugins/impl/image-comparison/ImageComparisonComponent.tsx +53 -2
  350. package/src/plugins/impl/image-comparison/__tests__/ImageComparisonComponent.test.tsx +71 -0
  351. package/src/plugins/impl/vega/__tests__/use-vega-container-remeasure.test.ts +102 -0
  352. package/src/plugins/impl/vega/use-vega-container-remeasure.ts +39 -0
  353. package/src/plugins/impl/vega/vega-component.tsx +5 -4
  354. package/src/theme/__tests__/useTheme.test.ts +68 -0
  355. package/src/theme/useTheme.ts +16 -1
  356. package/dist/apl-Bdc61P1y.js +0 -4
  357. package/dist/architecture-7HQA4BMR-Kyc44TmC.js +0 -6
  358. package/dist/asciiarmor-DVRHDGzT.js +0 -4
  359. package/dist/asn1-BmuKfkfu.js +0 -4
  360. package/dist/assets/__vite-browser-external-BQCLNwri.js +0 -1
  361. package/dist/assets/worker-DAWRHcPq.js +0 -73
  362. package/dist/brainfuck-DPrRpyTV.js +0 -4
  363. package/dist/classDiagram-2ON5EDUG-QjoAcuFE.js +0 -30
  364. package/dist/classDiagram-v2-WZHVMYZB-bUCv4gu2.js +0 -30
  365. package/dist/clojure-DEttQW5T.js +0 -4
  366. package/dist/cmake-jNlx_DaM.js +0 -4
  367. package/dist/cobol-BvvIm5MJ.js +0 -4
  368. package/dist/coffeescript-DTpBMyFU.js +0 -4
  369. package/dist/commonlisp-BmmUG8jb.js +0 -4
  370. package/dist/crystal-BxyqmEWC.js +0 -4
  371. package/dist/css-BGoCtuG3.js +0 -4
  372. package/dist/cypher-BmCbdl3u.js +0 -4
  373. package/dist/d-CFrlbjZt.js +0 -4
  374. package/dist/diff-D6XwL6P8.js +0 -4
  375. package/dist/dist-7QfXoMdB.js +0 -5
  376. package/dist/dist-BEXXyZig.js +0 -5
  377. package/dist/dist-BYj57OV4.js +0 -5
  378. package/dist/dist-BlSvQzNr.js +0 -5
  379. package/dist/dist-CCBlxAgS.js +0 -8
  380. package/dist/dist-CIDTVIUf.js +0 -5
  381. package/dist/dist-CqQyhAM8.js +0 -8
  382. package/dist/dist-CwRu2Xzh.js +0 -5
  383. package/dist/dist-D8CDTVgf.js +0 -6
  384. package/dist/dist-D8DNB0nO.js +0 -8
  385. package/dist/dist-DL6N_q-A.js +0 -5
  386. package/dist/dist-DOFbNV_b.js +0 -8
  387. package/dist/dist-DPrYzMY0.js +0 -6
  388. package/dist/dist-cdmMjgsn.js +0 -5
  389. package/dist/dtd-Bw0lRN0-.js +0 -4
  390. package/dist/dylan-B55eBHTt.js +0 -4
  391. package/dist/ecl-C8G4p0wn.js +0 -4
  392. package/dist/eiffel-BmH46VJl.js +0 -4
  393. package/dist/elm-DhzeFqkl.js +0 -4
  394. package/dist/erlang-CY-wdlsU.js +0 -4
  395. package/dist/esm-M837UxV5.js +0 -1171
  396. package/dist/factor-DWkgl0xw.js +0 -4
  397. package/dist/forth-Cij_ie2t.js +0 -4
  398. package/dist/fortran-Br3X9cfm.js +0 -4
  399. package/dist/gas-DYsGcMN2.js +0 -4
  400. package/dist/gherkin-eVgXQ0fQ.js +0 -4
  401. package/dist/groovy-_NFHIXG7.js +0 -4
  402. package/dist/haskell-D6xNG_bH.js +0 -4
  403. package/dist/haxe-sU_rzAwn.js +0 -5
  404. package/dist/idl-Ds_VbrUx.js +0 -4
  405. package/dist/infoDiagram-HS3SLOUP-CEnzWruK.js +0 -30
  406. package/dist/javascript-CztfIl0i.js +0 -4
  407. package/dist/julia-DDv40QMV.js +0 -4
  408. package/dist/livescript-BEOngLLc.js +0 -4
  409. package/dist/lua-9-7BhQ4Y.js +0 -4
  410. package/dist/mathematica-DDa0Pfxm.js +0 -4
  411. package/dist/mbox-iO03mmoE.js +0 -4
  412. package/dist/mirc-C9z5LT4X.js +0 -4
  413. package/dist/mllike-jGJbdm_C.js +0 -6
  414. package/dist/modelica-DzF7oIEL.js +0 -4
  415. package/dist/mscgen-DB-u125o.js +0 -6
  416. package/dist/mumps-CRTFHhzh.js +0 -4
  417. package/dist/nsis-C4NPTuox.js +0 -4
  418. package/dist/ntriples-BCOoGph1.js +0 -4
  419. package/dist/octave-DTwNlazz.js +0 -4
  420. package/dist/oz-DD38AzSz.js +0 -4
  421. package/dist/pascal-BohSp9jV.js +0 -4
  422. package/dist/perl-f5OutoPM.js +0 -4
  423. package/dist/pig-Dv7wSmHb.js +0 -4
  424. package/dist/powershell-rYgjKB39.js +0 -4
  425. package/dist/properties-BFUNLRDN.js +0 -4
  426. package/dist/protobuf-B9QJQPPv.js +0 -4
  427. package/dist/pug-DzvWpaMC.js +0 -4
  428. package/dist/puppet-B_K-n_xK.js +0 -4
  429. package/dist/purify.es-H92eMd9-.js +0 -557
  430. package/dist/python-CAiFcaA2.js +0 -4
  431. package/dist/q-cLeFIBLK.js +0 -4
  432. package/dist/r-04Y-Wco3.js +0 -4
  433. package/dist/react-vega-B6ncY2Tp.js +0 -9
  434. package/dist/rpm-FUdrIia9.js +0 -5
  435. package/dist/ruby-DMjFXuEW.js +0 -4
  436. package/dist/sas-DzHZxjXK.js +0 -4
  437. package/dist/scheme-DxHd_Rb9.js +0 -4
  438. package/dist/shell-C8Kwypgf.js +0 -4
  439. package/dist/sieve-DdyqOKXZ.js +0 -4
  440. package/dist/smalltalk-pB7X1D9y.js +0 -4
  441. package/dist/sparql-NhBO6oOa.js +0 -4
  442. package/dist/stateDiagram-v2-4FDKWEC3-E0RGjKsm.js +0 -29
  443. package/dist/stex-KfRnSHzF.js +0 -4
  444. package/dist/stylus-SfWSnzPv.js +0 -4
  445. package/dist/swift-jRPdq2zR.js +0 -4
  446. package/dist/tcl-_hpTHGX3.js +0 -4
  447. package/dist/textile-C9h8slqH.js +0 -4
  448. package/dist/toml-DWvtinD4.js +0 -4
  449. package/dist/troff-Dwo_A0y7.js +0 -4
  450. package/dist/ttcn-V--CPFKq.js +0 -4
  451. package/dist/ttcn-cfg-CPSMchTG.js +0 -4
  452. package/dist/turtle-B4rPGBWu.js +0 -4
  453. package/dist/vb-DaMBBd4j.js +0 -4
  454. package/dist/vbscript-BMJQqcE2.js +0 -4
  455. package/dist/vega-loader.browser-CZ-J8Py3.js +0 -1321
  456. package/dist/velocity-CGq2QRq2.js +0 -4
  457. package/dist/verilog-CUNo8F5u.js +0 -4
  458. package/dist/vhdl-CCzA0msW.js +0 -4
  459. package/dist/webidl-CqIMDIBL.js +0 -4
  460. package/dist/xquery-XC5Kbr-1.js +0 -4
  461. package/dist/yacas-CGOv7Dzy.js +0 -4
  462. package/dist/z80-CXhVmi-f.js +0 -4
  463. /package/dist/{Plot-CAYS29h9.js → Plot-YQOuVIei.js} +0 -0
  464. /package/dist/{apl-BCgCq9iM.js → apl-99A7dLQe.js} +0 -0
  465. /package/dist/{array-tvvEqPy7.js → array-O78LT16Y.js} +0 -0
  466. /package/dist/{asciiarmor-BtqU-KJQ.js → asciiarmor-DLEhpFDx.js} +0 -0
  467. /package/dist/{asn1-Dmb-dTMx.js → asn1-CMrcTsT4.js} +0 -0
  468. /package/dist/{asterisk-DaVJJDnV.js → asterisk-CqykImq7.js} +0 -0
  469. /package/dist/{brainfuck-C1HoZKlE.js → brainfuck-ChPt5yBe.js} +0 -0
  470. /package/dist/{chunk-DR5Q36YT-BflwErH1.js → chunk-DR5Q36YT-5Yp2GWwR.js} +0 -0
  471. /package/dist/{click-outside-container-BLPjMamz.js → click-outside-container-BSIeYt4y.js} +0 -0
  472. /package/dist/{clike-CdT0yHjt.js → clike-CE0fXfM_.js} +0 -0
  473. /package/dist/{clojure-CdyrCpUv.js → clojure-QkBEMU-g.js} +0 -0
  474. /package/dist/{cmake-BFlPxym7.js → cmake-CU1jX7Mo.js} +0 -0
  475. /package/dist/{cobol-CcJXewp8.js → cobol-DMOKzzky.js} +0 -0
  476. /package/dist/{coffeescript-DnKuIKRo.js → coffeescript-DjnjLyfk.js} +0 -0
  477. /package/dist/{colors-CQAOa8cK.js → colors-DmiH1bIH.js} +0 -0
  478. /package/dist/{common-keywords-FBrXPTcz.js → common-keywords-D3nPJNQP.js} +0 -0
  479. /package/dist/{commonlisp-B-kok83Z.js → commonlisp-CYd9iOSe.js} +0 -0
  480. /package/dist/{crystal-FYRYjI1I.js → crystal-Dy55yoYG.js} +0 -0
  481. /package/dist/{css-B45lc2V3.js → css-CNU8w3HJ.js} +0 -0
  482. /package/dist/{cypher-DZMLyVY_.js → cypher-q47DGzK7.js} +0 -0
  483. /package/dist/{cytoscape.esm-ayF70frT.js → cytoscape.esm-Dr8XzXWK.js} +0 -0
  484. /package/dist/{d-x-VVT4o9.js → d-jEkaLvxX.js} +0 -0
  485. /package/dist/{defaultLocale-u-3osm0P.js → defaultLocale-BpsHxBd7.js} +0 -0
  486. /package/dist/{defaultLocale-BoHTsDG6.js → defaultLocale-DoeErsX2.js} +0 -0
  487. /package/dist/{diff-Dxe2mpXk.js → diff-vb2-unFN.js} +0 -0
  488. /package/dist/{dist-BGdYVvOu.js → dist-DsoKosxi.js} +0 -0
  489. /package/dist/{dtd-C9VM_Wfu.js → dtd-C9kR-bXa.js} +0 -0
  490. /package/dist/{duckdb-keywords-CvJhR_Yd.js → duckdb-keywords-B6HYCMOT.js} +0 -0
  491. /package/dist/{dylan-DTSnEIFO.js → dylan-BLckrK-V.js} +0 -0
  492. /package/dist/{ebnf-2D4Ctp3y.js → ebnf-Cnp3L9jg.js} +0 -0
  493. /package/dist/{ecl-N04ptnRK.js → ecl-CEsf6XVg.js} +0 -0
  494. /package/dist/{eiffel-Dd8rpqr_.js → eiffel-2KGZNzx6.js} +0 -0
  495. /package/dist/{elm-GT2E866W.js → elm-D2s3K5wF.js} +0 -0
  496. /package/dist/{emotion-is-prop-valid.esm-DzSb5hsH.js → emotion-is-prop-valid.esm-DdVSF4FD.js} +0 -0
  497. /package/dist/{erlang-Cf0Bp5pY.js → erlang-0PMFOndk.js} +0 -0
  498. /package/dist/{esm-BaaaPNGl.js → esm-CuQHjs36.js} +0 -0
  499. /package/dist/{fcl-Ccj8Z5Xd.js → fcl-D9nccAWI.js} +0 -0
  500. /package/dist/{forth-wd_XzGTg.js → forth-DG89iUsu.js} +0 -0
  501. /package/dist/{fortran-DcwUTZFe.js → fortran-ytKsAVvu.js} +0 -0
  502. /package/dist/{gas-DeALIER3.js → gas-Cg2Fm0N2.js} +0 -0
  503. /package/dist/{gherkin-CKTqaJNX.js → gherkin-B87FEnZ-.js} +0 -0
  504. /package/dist/{groovy-Bwdp_d8D.js → groovy-Dcs08AWD.js} +0 -0
  505. /package/dist/{haskell-DCdCcPLK.js → haskell-cwkOuhx6.js} +0 -0
  506. /package/dist/{haxe-DAyktQWJ.js → haxe-DWEo4q10.js} +0 -0
  507. /package/dist/{http-_DVAYWoR.js → http-B8jdG64J.js} +0 -0
  508. /package/dist/{idl-CBuZiRYu.js → idl-WWQwDcRV.js} +0 -0
  509. /package/dist/{init-uv0kkh4g.js → init-DNBbYZd_.js} +0 -0
  510. /package/dist/{javascript-DzigE11c.js → javascript-BeR74dxD.js} +0 -0
  511. /package/dist/{julia-PwfB-0Cm.js → julia-UlvCUYGL.js} +0 -0
  512. /package/dist/{katex-C_XRmjAP.js → katex-Bld7b-fk.js} +0 -0
  513. /package/dist/{livescript-BJLz1EbT.js → livescript-GPmFcmYV.js} +0 -0
  514. /package/dist/{lua-ZC-XC2jf.js → lua-DYoT_0zM.js} +0 -0
  515. /package/dist/{main-Tj_-QTyF.js → main-B1Jo_8pC.js} +0 -0
  516. /package/dist/{math-DFcdCCU8.js → math-CBNc2Ib0.js} +0 -0
  517. /package/dist/{mathematica-DCYMx6qB.js → mathematica-DSFIQlbG.js} +0 -0
  518. /package/dist/{mbox-OxMK_9XI.js → mbox-ej8lFMdL.js} +0 -0
  519. /package/dist/{micromark-factory-space-DF2w36zS.js → micromark-factory-space-CwHmg6iz.js} +0 -0
  520. /package/dist/{mirc-nJVyhA0H.js → mirc-CAdIdvHQ.js} +0 -0
  521. /package/dist/{mllike-DRO89bsU.js → mllike-CjTB1lHF.js} +0 -0
  522. /package/dist/{modelica-Don3E6ZD.js → modelica-BB68FYMa.js} +0 -0
  523. /package/dist/{mscgen-DJfqD3bN.js → mscgen-BkbzgGGI.js} +0 -0
  524. /package/dist/{mumps-SjGTvDYL.js → mumps-Cu-28E9F.js} +0 -0
  525. /package/dist/{nginx-DasThI7R.js → nginx-C1ofKPst.js} +0 -0
  526. /package/dist/{node-sql-parser-B8nBD36q.js → node-sql-parser-DLl_zNw0.js} +0 -0
  527. /package/dist/{ntriples-CNBKRl3I.js → ntriples-D9cQiZxZ.js} +0 -0
  528. /package/dist/{octave-DdeVHNlx.js → octave-BvtAnPX0.js} +0 -0
  529. /package/dist/{once-DPuqGUeo.js → once-B60G2fuJ.js} +0 -0
  530. /package/dist/{oz-CcKSoNvN.js → oz-COaVHk2E.js} +0 -0
  531. /package/dist/{pascal-6leftwNj.js → pascal-BFpqVD2x.js} +0 -0
  532. /package/dist/{path-BGaWgPKg.js → path-DwWbhZFI.js} +0 -0
  533. /package/dist/{perl-BhJIwWzN.js → perl-DaiORxHP.js} +0 -0
  534. /package/dist/{pig-r-xDHqRf.js → pig-DFzRhmsF.js} +0 -0
  535. /package/dist/{powershell-D-BELeNi.js → powershell-BG2LQNKN.js} +0 -0
  536. /package/dist/{properties-CnuDhbll.js → properties-CqJJR5QY.js} +0 -0
  537. /package/dist/{protobuf-CO8RBhvX.js → protobuf-WwDYV1yY.js} +0 -0
  538. /package/dist/{puppet-NmXHjLy8.js → puppet-QNY3w_uN.js} +0 -0
  539. /package/dist/{python-DAQXi720.js → python-4QrQ3Ugi.js} +0 -0
  540. /package/dist/{q-DlikXfV0.js → q-DhwXuxE2.js} +0 -0
  541. /package/dist/{r-CuohilwT.js → r-Df-nkR25.js} +0 -0
  542. /package/dist/{range-C-rmrM1O.js → range-BOiA8qqU.js} +0 -0
  543. /package/dist/{rpm-0Pjwp0Pb.js → rpm-Cokue07s.js} +0 -0
  544. /package/dist/{ruby-Dq8NJTDG.js → ruby-DrYcL3qF.js} +0 -0
  545. /package/dist/{sas-CuwonyVP.js → sas-CoiPirA5.js} +0 -0
  546. /package/dist/{scheme-CYU-RRIf.js → scheme-CwFLjzHv.js} +0 -0
  547. /package/dist/{semaphore-CNDGTzkX.js → semaphore-C8rmHdhj.js} +0 -0
  548. /package/dist/{shell-COPmX2qE.js → shell-BFV-R24I.js} +0 -0
  549. /package/dist/{sieve-B_3zyLne.js → sieve-CxwXF5T9.js} +0 -0
  550. /package/dist/{simple-mode-DSBniks8.js → simple-mode-DTaJtKPt.js} +0 -0
  551. /package/dist/{smalltalk-DRft7iPv.js → smalltalk-QivVOCtX.js} +0 -0
  552. /package/dist/{solr-RZ9uTl59.js → solr-BLvysN-c.js} +0 -0
  553. /package/dist/{sparql-CN6qj55H.js → sparql-nKsFk8j7.js} +0 -0
  554. /package/dist/{spreadsheet-BNNUNXA2.js → spreadsheet-BWc8C2FT.js} +0 -0
  555. /package/dist/{sql-B4x8IkwU.js → sql-CWfUjlV1.js} +0 -0
  556. /package/dist/{stex-BIsgBmK4.js → stex-DtMAhV4-.js} +0 -0
  557. /package/dist/{stylus-Bn_ZjOQ3.js → stylus-BLKQAycn.js} +0 -0
  558. /package/dist/{swift-BLUJhMbz.js → swift-CJoKqiKj.js} +0 -0
  559. /package/dist/{tcl-C86fxecl.js → tcl-YTeYFNUc.js} +0 -0
  560. /package/dist/{textile-DmHh2rsK.js → textile-C6rKQqMQ.js} +0 -0
  561. /package/dist/{tiddlywiki-DI0mF2WJ.js → tiddlywiki-ZXwTHGNT.js} +0 -0
  562. /package/dist/{tiki-2HU6XLLn.js → tiki-C628O_u4.js} +0 -0
  563. /package/dist/{timer-YZl28NYN.js → timer-BpI_FKSA.js} +0 -0
  564. /package/dist/{toml-GWANRNAD.js → toml-DxlPGbRy.js} +0 -0
  565. /package/dist/{treemap-D-ka1hvx.js → treemap-DY3NBr79.js} +0 -0
  566. /package/dist/{troff-BHTsomIy.js → troff-DFCfH7Ku.js} +0 -0
  567. /package/dist/{ttcn-DQuhn5Mn.js → ttcn-DAW-ERVP.js} +0 -0
  568. /package/dist/{ttcn-cfg-HjFYtdB-.js → ttcn-cfg-CpJ8b7EN.js} +0 -0
  569. /package/dist/{turtle-nCay33Nv.js → turtle-BneV2f8L.js} +0 -0
  570. /package/dist/{vb-BG-XlqqJ.js → vb-D973Vxxh.js} +0 -0
  571. /package/dist/{vbscript-B6vyW0-D.js → vbscript-Dckaq3YO.js} +0 -0
  572. /package/dist/{velocity-CWegueqO.js → velocity-DKty-GUC.js} +0 -0
  573. /package/dist/{verilog-CzSQm4cG.js → verilog-aNaK_biA.js} +0 -0
  574. /package/dist/{vhdl-DqnNVL7r.js → vhdl-CQuehnQy.js} +0 -0
  575. /package/dist/{webidl-DXEUpDWH.js → webidl-Bhg8vaMr.js} +0 -0
  576. /package/dist/{xquery-Ba_NB5bD.js → xquery-D2q16GaM.js} +0 -0
  577. /package/dist/{yacas-HKQU6hyk.js → yacas-DHGOHnNa.js} +0 -0
  578. /package/dist/{z80-CXkHXLdj.js → z80-BPhTmO22.js} +0 -0
@@ -194,9 +194,12 @@ export const AiCompletionEditor: React.FC<Props> = ({
194
194
  setCompletion("");
195
195
  };
196
196
 
197
+ // Reject discards the suggestion but keeps the prompt open for refinement.
197
198
  const handleDeclineCompletion = () => {
198
- declineChange();
199
+ stop();
199
200
  setCompletion("");
201
+ setShowInputPrompt(true);
202
+ inputRef.current?.view?.focus();
200
203
  };
201
204
 
202
205
  const showCompletionBanner =
@@ -39,12 +39,18 @@ interface Props extends Pick<
39
39
  "cellId" | "getEditorView"
40
40
  > {
41
41
  children: React.ReactNode;
42
+ /**
43
+ * If true, the custom context menu is disabled and the native one is used
44
+ * (e.g. while presenting).
45
+ */
46
+ disabled?: boolean;
42
47
  }
43
48
 
44
49
  export const CellActionsContextMenu = ({
45
50
  children,
46
51
  cellId,
47
52
  getEditorView,
53
+ disabled,
48
54
  }: Props) => {
49
55
  const cellData = useCellData(cellId);
50
56
  const cellRuntime = useCellRuntime(cellId);
@@ -187,6 +193,7 @@ export const CellActionsContextMenu = ({
187
193
  return (
188
194
  <ContextMenu>
189
195
  <ContextMenuTrigger
196
+ disabled={disabled}
190
197
  onContextMenu={(evt) => {
191
198
  if (evt.target instanceof HTMLImageElement) {
192
199
  setImageRightClicked(evt.target);
@@ -0,0 +1,221 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+
3
+ import { fireEvent, render, screen, waitFor } from "@testing-library/react";
4
+ import { Provider } from "jotai";
5
+ import type React from "react";
6
+ import { beforeEach, describe, expect, it, vi } from "vitest";
7
+ import { MockRequestClient } from "@/__mocks__/requests";
8
+ import { Dialog } from "@/components/ui/dialog";
9
+ import { Constants } from "@/core/constants";
10
+ import { TooltipProvider } from "@/components/ui/tooltip";
11
+ import { viewStateAtom } from "@/core/mode";
12
+ import { connectionAtom } from "@/core/network/connection";
13
+ import { requestClientAtom } from "@/core/network/requests";
14
+ import type { EnvironmentInfo } from "@/core/network/types";
15
+ import { filenameAtom } from "@/core/saving/file-state";
16
+ import { store } from "@/core/state/jotai";
17
+ import { WebSocketState } from "@/core/websocket/types";
18
+ import * as copyModule from "@/utils/copy";
19
+ import { FeedbackModal } from "../feedback-button";
20
+
21
+ vi.mock("@/utils/copy", () => ({
22
+ copyToClipboard: vi.fn().mockResolvedValue(undefined),
23
+ }));
24
+
25
+ const environment: EnvironmentInfo = {
26
+ marimo: "1.2.3",
27
+ editable: false,
28
+ location: "~/.venv/site-packages/marimo",
29
+ OS: "Darwin",
30
+ "OS Version": "25.0",
31
+ Processor: "arm",
32
+ "Python Version": "3.12.9",
33
+ Locale: "en_US",
34
+ Binaries: { Browser: "chrome 140", Node: "v22", uv: "0.11" },
35
+ Dependencies: { click: "8.4.2" },
36
+ "Optional Dependencies": { pandas: "3.0.0" },
37
+ "Experimental Flags": {},
38
+ };
39
+
40
+ function wrapper({ children }: { children: React.ReactNode }) {
41
+ return (
42
+ <Provider store={store}>
43
+ <TooltipProvider>
44
+ <Dialog open={true}>{children}</Dialog>
45
+ </TooltipProvider>
46
+ </Provider>
47
+ );
48
+ }
49
+
50
+ describe("FeedbackModal issue reporting", () => {
51
+ beforeEach(() => {
52
+ vi.clearAllMocks();
53
+ store.set(requestClientAtom, MockRequestClient.create());
54
+ store.set(viewStateAtom, { mode: "edit", cellAnchor: null });
55
+ store.set(connectionAtom, { state: WebSocketState.OPEN });
56
+ store.set(filenameAtom, "/project/example.py");
57
+ });
58
+
59
+ it("loads and previews issue environment details", async () => {
60
+ store.set(
61
+ requestClientAtom,
62
+ MockRequestClient.create({
63
+ getEnvironmentInfo: vi.fn().mockResolvedValue(environment),
64
+ }),
65
+ );
66
+ render(<FeedbackModal onClose={vi.fn()} />, { wrapper });
67
+
68
+ expect(screen.getByText("Loading environment details…")).toBeVisible();
69
+ await screen.findByText("Environment details");
70
+ expect(screen.getByText(/"marimo": "1.2.3"/)).toBeInTheDocument();
71
+ });
72
+
73
+ it("toggles the environment preview between show more and show less", async () => {
74
+ store.set(
75
+ requestClientAtom,
76
+ MockRequestClient.create({
77
+ getEnvironmentInfo: vi.fn().mockResolvedValue(environment),
78
+ }),
79
+ );
80
+ render(<FeedbackModal onClose={vi.fn()} />, { wrapper });
81
+ await screen.findByText("Environment details");
82
+
83
+ const toggle = screen.getByRole("button", { name: "Show more" });
84
+ fireEvent.click(toggle);
85
+ expect(
86
+ screen.getByRole("button", { name: "Show less" }),
87
+ ).toBeInTheDocument();
88
+ });
89
+
90
+ it("copies partial details when the environment request fails", async () => {
91
+ store.set(
92
+ requestClientAtom,
93
+ MockRequestClient.create({
94
+ getEnvironmentInfo: vi.fn().mockRejectedValue(new Error("offline")),
95
+ }),
96
+ );
97
+ render(<FeedbackModal onClose={vi.fn()} />, { wrapper });
98
+
99
+ await screen.findByText("Server environment information unavailable");
100
+ fireEvent.click(screen.getByRole("button", { name: "Copy issue details" }));
101
+ await waitFor(() =>
102
+ expect(copyModule.copyToClipboard).toHaveBeenCalledWith(
103
+ expect.stringContaining("Environment Collection Error"),
104
+ ),
105
+ );
106
+ });
107
+
108
+ it("copies raw environment JSON", async () => {
109
+ store.set(
110
+ requestClientAtom,
111
+ MockRequestClient.create({
112
+ getEnvironmentInfo: vi.fn().mockResolvedValue(environment),
113
+ }),
114
+ );
115
+ render(<FeedbackModal onClose={vi.fn()} />, { wrapper });
116
+ await screen.findByText("Environment details");
117
+
118
+ fireEvent.click(
119
+ screen.getByRole("button", { name: "Copy environment JSON" }),
120
+ );
121
+ await waitFor(() =>
122
+ expect(copyModule.copyToClipboard).toHaveBeenCalledWith(
123
+ expect.stringContaining('"marimo": "1.2.3"'),
124
+ ),
125
+ );
126
+ });
127
+
128
+ it("includes notebook source only after explicit opt-in", async () => {
129
+ const readCode = vi.fn().mockResolvedValue({
130
+ contents: "secret = 'review before posting'",
131
+ });
132
+ store.set(
133
+ requestClientAtom,
134
+ MockRequestClient.create({
135
+ getEnvironmentInfo: vi.fn().mockResolvedValue(environment),
136
+ readCode,
137
+ }),
138
+ );
139
+ render(<FeedbackModal onClose={vi.fn()} />, { wrapper });
140
+ await screen.findByText("Environment details");
141
+
142
+ expect(readCode).not.toHaveBeenCalled();
143
+ fireEvent.click(
144
+ screen.getByRole("checkbox", { name: "Include full notebook source" }),
145
+ );
146
+ await waitFor(() => expect(readCode).toHaveBeenCalledOnce());
147
+
148
+ fireEvent.click(screen.getByRole("button", { name: "Copy issue details" }));
149
+ await waitFor(() =>
150
+ expect(copyModule.copyToClipboard).toHaveBeenCalledWith(
151
+ expect.stringContaining("Notebook source: example.py"),
152
+ ),
153
+ );
154
+ });
155
+
156
+ it("discards notebook source after unchecking", async () => {
157
+ const readCode = vi.fn().mockResolvedValue({ contents: "x = 1" });
158
+ store.set(
159
+ requestClientAtom,
160
+ MockRequestClient.create({
161
+ getEnvironmentInfo: vi.fn().mockResolvedValue(environment),
162
+ readCode,
163
+ }),
164
+ );
165
+ render(<FeedbackModal onClose={vi.fn()} />, { wrapper });
166
+ await screen.findByText("Environment details");
167
+
168
+ const checkbox = screen.getByRole("checkbox", {
169
+ name: "Include full notebook source",
170
+ });
171
+ fireEvent.click(checkbox);
172
+ await waitFor(() => expect(readCode).toHaveBeenCalledOnce());
173
+ fireEvent.click(checkbox);
174
+
175
+ fireEvent.click(screen.getByRole("button", { name: "Copy issue details" }));
176
+ await waitFor(() =>
177
+ expect(copyModule.copyToClipboard).toHaveBeenCalledWith(
178
+ expect.not.stringContaining("Notebook source"),
179
+ ),
180
+ );
181
+ });
182
+
183
+ it("disables the notebook option and explains why when disconnected", async () => {
184
+ store.set(connectionAtom, { state: WebSocketState.CONNECTING });
185
+ store.set(
186
+ requestClientAtom,
187
+ MockRequestClient.create({
188
+ getEnvironmentInfo: vi.fn().mockResolvedValue(environment),
189
+ }),
190
+ );
191
+ render(<FeedbackModal onClose={vi.fn()} />, { wrapper });
192
+ await screen.findByText("Environment details");
193
+
194
+ expect(
195
+ screen.getByRole("checkbox", { name: "Include full notebook source" }),
196
+ ).toBeDisabled();
197
+ expect(
198
+ screen.getByText("Connect the notebook to include its source."),
199
+ ).toBeInTheDocument();
200
+ });
201
+
202
+ it("prefills the GitHub issue link with the environment once loaded", async () => {
203
+ store.set(
204
+ requestClientAtom,
205
+ MockRequestClient.create({
206
+ getEnvironmentInfo: vi.fn().mockResolvedValue(environment),
207
+ }),
208
+ );
209
+ render(<FeedbackModal onClose={vi.fn()} />, { wrapper });
210
+
211
+ const link = screen.getByRole("link", { name: "Open GitHub issue" });
212
+ expect(link).toHaveAttribute("href", Constants.bugReportUrl);
213
+
214
+ await screen.findByText("Environment details");
215
+ await waitFor(() => {
216
+ const href = link.getAttribute("href") ?? "";
217
+ expect(href).toContain("&env=");
218
+ expect(href).toContain(encodeURIComponent('"marimo": "1.2.3"'));
219
+ });
220
+ });
221
+ });
@@ -4,16 +4,75 @@ import { Slot as SlotPrimitive } from "radix-ui";
4
4
 
5
5
  const Slot = SlotPrimitive.Slot;
6
6
 
7
- import React, { type PropsWithChildren } from "react";
7
+ import { useAtomValue } from "jotai";
8
+ import { CheckIcon, ExternalLinkIcon, TriangleAlertIcon } from "lucide-react";
9
+ import React, { type PropsWithChildren, useMemo, useState } from "react";
10
+ import { CopyClipboardIcon } from "@/components/icons/copy-icon";
8
11
  import { useImperativeModal } from "@/components/modal/ImperativeModal";
12
+ import { Button } from "@/components/ui/button";
13
+ import { Checkbox } from "@/components/ui/checkbox";
9
14
  import {
10
15
  DialogContent,
11
16
  DialogDescription,
12
17
  DialogHeader,
13
18
  DialogTitle,
14
19
  } from "@/components/ui/dialog";
20
+ import { Skeleton } from "@/components/ui/skeleton";
15
21
  import { toast } from "@/components/ui/use-toast";
22
+ import { notebookAtom } from "@/core/cells/cells";
16
23
  import { Constants } from "@/core/constants";
24
+ import {
25
+ buildBugReportUrl,
26
+ buildIssueDetails,
27
+ createPartialEnvironment,
28
+ type EnvironmentDiagnostics,
29
+ enrichEnvironment,
30
+ type NotebookSource,
31
+ } from "@/core/diagnostics/issue-details";
32
+ import {
33
+ formatCellError,
34
+ getCellErrorEntries,
35
+ } from "@/core/errors/error-entries";
36
+ import { useNotebookCodeAvailable } from "@/core/meta/code-visibility";
37
+ import { getMarimoVersion } from "@/core/meta/globals";
38
+ import { connectionAtom } from "@/core/network/connection";
39
+ import { useRequestClient } from "@/core/network/requests";
40
+ import { filenameAtom } from "@/core/saving/file-state";
41
+ import { store } from "@/core/state/jotai";
42
+ import { WebSocketState } from "@/core/websocket/types";
43
+ import { useAsyncData } from "@/hooks/useAsyncData";
44
+ import { cn } from "@/utils/cn";
45
+ import { copyToClipboard } from "@/utils/copy";
46
+
47
+ const CollapsiblePreview: React.FC<{ content: string }> = ({ content }) => {
48
+ const [expanded, setExpanded] = useState(false);
49
+ return (
50
+ <div className="flex flex-col gap-1">
51
+ <div className="relative">
52
+ <pre
53
+ className={cn(
54
+ "text-xs bg-muted rounded p-2 overflow-x-auto whitespace-pre-wrap",
55
+ !expanded && "max-h-24 overflow-hidden",
56
+ )}
57
+ >
58
+ {content}
59
+ </pre>
60
+ {!expanded && (
61
+ <div className="pointer-events-none absolute inset-x-0 bottom-0 h-10 rounded-b bg-gradient-to-b from-transparent to-muted" />
62
+ )}
63
+ </div>
64
+ <Button
65
+ type="button"
66
+ variant="link"
67
+ size="xs"
68
+ className="self-start"
69
+ onClick={() => setExpanded((value) => !value)}
70
+ >
71
+ {expanded ? "Show less" : "Show more"}
72
+ </Button>
73
+ </div>
74
+ );
75
+ };
17
76
 
18
77
  export const FeedbackButton: React.FC<PropsWithChildren> = ({ children }) => {
19
78
  const { openModal, closeModal } = useImperativeModal();
@@ -25,84 +84,256 @@ export const FeedbackButton: React.FC<PropsWithChildren> = ({ children }) => {
25
84
  );
26
85
  };
27
86
 
28
- const FeedbackModal: React.FC<{
87
+ export const FeedbackModal: React.FC<{
29
88
  onClose: () => void;
30
- }> = ({ onClose }) => {
89
+ }> = () => {
90
+ const { getEnvironmentInfo, readCode } = useRequestClient();
91
+ const environmentRequest = useAsyncData(
92
+ async () => getEnvironmentInfo(),
93
+ [getEnvironmentInfo],
94
+ );
95
+
96
+ const notebook = useAtomValue(notebookAtom);
97
+ // biome-ignore lint/correctness/useExhaustiveDependencies: recompute when the notebook changes
98
+ const errors = useMemo(() => getCellErrorEntries(store), [notebook]);
99
+
100
+ const cells = notebook.cellIds.inOrderIds.map(
101
+ (cellId) => notebook.cellData[cellId],
102
+ );
103
+ const codeAvailable = useNotebookCodeAvailable(cells);
104
+ const filename = useAtomValue(filenameAtom);
105
+ const connection = useAtomValue(connectionAtom);
106
+ const notebookSourceAvailable =
107
+ filename !== null &&
108
+ codeAvailable &&
109
+ connection.state === WebSocketState.OPEN;
110
+
111
+ const [includeNotebook, setIncludeNotebook] = useState(false);
112
+
113
+ const notebookSourceReason = notebookSourceAvailable
114
+ ? undefined
115
+ : filename === null
116
+ ? "Save the notebook first."
117
+ : !codeAvailable
118
+ ? "Notebook source is hidden in this view."
119
+ : "Connect the notebook to include its source.";
120
+
121
+ const notebookSourceRequest = useAsyncData(async () => {
122
+ if (!includeNotebook || !notebookSourceAvailable || filename === null) {
123
+ return undefined;
124
+ }
125
+ const { contents } = await readCode();
126
+ return { filename, contents } satisfies NotebookSource;
127
+ }, [includeNotebook, notebookSourceAvailable, filename, readCode]);
128
+
129
+ const environment: EnvironmentDiagnostics | undefined =
130
+ environmentRequest.data
131
+ ? enrichEnvironment(environmentRequest.data, navigator.userAgent)
132
+ : environmentRequest.status === "error"
133
+ ? createPartialEnvironment(
134
+ getMarimoVersion(),
135
+ navigator.userAgent,
136
+ navigator.language,
137
+ "Server environment information unavailable",
138
+ )
139
+ : undefined;
140
+
141
+ const [issueDetailsCopied, setIssueDetailsCopied] = useState(false);
142
+
143
+ const githubIssueUrl = useMemo(() => {
144
+ if (!environment) {
145
+ return Constants.bugReportUrl;
146
+ }
147
+ return buildBugReportUrl(
148
+ Constants.bugReportUrl,
149
+ buildIssueDetails({ environment, errors }),
150
+ );
151
+ }, [environment, errors]);
152
+
153
+ const copyIssueDetails = async () => {
154
+ if (!environment) {
155
+ return;
156
+ }
157
+ const notebookForReport = includeNotebook
158
+ ? notebookSourceRequest.data
159
+ : undefined;
160
+ await copyToClipboard(
161
+ buildIssueDetails({ environment, errors, notebook: notebookForReport }),
162
+ );
163
+ setIssueDetailsCopied(true);
164
+ setTimeout(() => setIssueDetailsCopied(false), 2000);
165
+ toast({
166
+ title:
167
+ environmentRequest.status === "error"
168
+ ? "Partial issue details copied"
169
+ : "Issue details copied",
170
+ });
171
+ };
172
+
31
173
  return (
32
- <DialogContent className="w-fit">
33
- <form
34
- onSubmit={async (e) => {
35
- e.preventDefault();
36
-
37
- const formData = new FormData(e.target as HTMLFormElement);
38
- const rating = formData.get("rating");
39
- const message = formData.get("message");
40
-
41
- // Fire-and-forget we don't care about the response
42
- void fetch("https://marimo.io/api/feedback", {
43
- method: "POST",
44
- headers: {
45
- "Content-Type": "application/json",
46
- },
47
- body: JSON.stringify({
48
- rating: rating,
49
- message,
50
- }),
51
- });
52
- onClose();
53
- toast({
54
- title: "Feedback sent!",
55
- description: "Thank you for your feedback!",
56
- });
57
- }}
58
- >
59
- <DialogHeader>
60
- <DialogTitle>Send Feedback</DialogTitle>
61
- <DialogDescription>
62
- <p className="my-2 prose dark:prose-invert">
63
- We want to hear from you — from minor bug reports to wishlist
64
- features and everything in between. Here are some ways you can get
65
- in touch:
66
- </p>
67
- <ul className="list-disc ml-8 my-2 prose dark:prose-invert">
68
- <li className="my-0">
69
- Take our{" "}
70
- <a
71
- href={Constants.feedbackForm}
72
- target="_blank"
73
- className="underline"
74
- >
75
- two-minute survey.
76
- </a>
77
- </li>
78
- <li className="my-0">
79
- File a{" "}
80
- <a
81
- href={Constants.issuesPage}
82
- target="_blank"
83
- className="underline"
84
- >
85
- GitHub issue.
86
- </a>
87
- </li>
88
- <li className="my-0">
89
- Chat with us on{" "}
90
- <a
91
- href={Constants.discordLink}
92
- target="_blank"
93
- className="underline"
94
- >
95
- Discord.
96
- </a>
97
- </li>
98
- </ul>
99
- <p className="my-2 prose dark:prose-invert">
100
- We're excited you're here as we build the future of Python data
101
- tooling. Thanks for being part of our community!
102
- </p>
103
- </DialogDescription>
104
- </DialogHeader>
105
- </form>
174
+ <DialogContent className="w-[540px] max-w-[90vw]">
175
+ <DialogHeader>
176
+ <DialogTitle>Report an issue</DialogTitle>
177
+ <DialogDescription>
178
+ Copy your environment and any current errors to include in a GitHub
179
+ bug report. Nothing is uploaded automatically; review the details
180
+ before posting.
181
+ </DialogDescription>
182
+ </DialogHeader>
183
+
184
+ <div className="flex flex-col gap-4 max-h-[60vh] overflow-y-auto">
185
+ <div className="flex flex-wrap gap-2">
186
+ <Button
187
+ type="button"
188
+ variant="default"
189
+ size="xs"
190
+ disabled={
191
+ !environment ||
192
+ (includeNotebook && notebookSourceRequest.isFetching)
193
+ }
194
+ onClick={copyIssueDetails}
195
+ >
196
+ {issueDetailsCopied && (
197
+ <CheckIcon
198
+ className="w-4 h-4 mr-2 text-(--grass-11)"
199
+ color="white"
200
+ />
201
+ )}
202
+ {issueDetailsCopied ? "Copied!" : "Copy issue details"}
203
+ </Button>
204
+ <Button type="button" variant="outline" size="xs" asChild={true}>
205
+ <a href={githubIssueUrl} target="_blank" rel="noreferrer">
206
+ <ExternalLinkIcon className="w-4 h-4 mr-2" />
207
+ Open GitHub issue
208
+ </a>
209
+ </Button>
210
+ </div>
211
+
212
+ {includeNotebook && (
213
+ <p className="text-xs text-muted-foreground">
214
+ The GitHub link prefills your environment only. Use Copy issue
215
+ details to include the full notebook source.
216
+ </p>
217
+ )}
218
+
219
+ {environmentRequest.status === "pending" && (
220
+ <div className="flex flex-col gap-2">
221
+ <span className="text-sm text-muted-foreground">
222
+ Loading environment details…
223
+ </span>
224
+ <Skeleton className="h-4 w-full" />
225
+ <Skeleton className="h-4 w-3/4" />
226
+ <Skeleton className="h-4 w-1/2" />
227
+ </div>
228
+ )}
229
+
230
+ {environmentRequest.status === "error" && (
231
+ <div className="flex items-center gap-2 text-sm">
232
+ <TriangleAlertIcon className="w-4 h-4 text-(--yellow-11) shrink-0" />
233
+ <span>Server environment information unavailable</span>
234
+ <Button
235
+ type="button"
236
+ variant="link"
237
+ size="xs"
238
+ onClick={() => environmentRequest.refetch()}
239
+ >
240
+ Retry
241
+ </Button>
242
+ </div>
243
+ )}
244
+
245
+ {environment && (
246
+ <div className="flex flex-col gap-1">
247
+ <div className="flex items-center justify-between">
248
+ <span className="text-sm font-medium">Environment details</span>
249
+ <CopyClipboardIcon
250
+ className="w-3.5 h-3.5"
251
+ value={JSON.stringify(environment, null, 2)}
252
+ ariaLabel="Copy environment JSON"
253
+ toastTitle="Environment details copied"
254
+ />
255
+ </div>
256
+ <CollapsiblePreview
257
+ content={JSON.stringify(environment, null, 2)}
258
+ />
259
+ </div>
260
+ )}
261
+
262
+ {environment && errors.length > 0 && (
263
+ <div className="flex flex-col gap-1">
264
+ <span className="text-sm font-medium">Current errors</span>
265
+ <CollapsiblePreview
266
+ content={errors.map(formatCellError).join("\n\n---\n\n")}
267
+ />
268
+ </div>
269
+ )}
270
+
271
+ {environment && errors.length === 0 && (
272
+ <span className="text-sm text-muted-foreground">
273
+ No current errors detected.
274
+ </span>
275
+ )}
276
+
277
+ <div className="flex flex-col gap-1">
278
+ <div className="flex items-start gap-2 text-sm">
279
+ <Checkbox
280
+ id="issue-include-notebook"
281
+ className="mt-0.5"
282
+ checked={includeNotebook}
283
+ disabled={!notebookSourceAvailable}
284
+ onCheckedChange={(checked) =>
285
+ setIncludeNotebook(checked === true)
286
+ }
287
+ aria-label="Include full notebook source"
288
+ />
289
+ <label htmlFor="issue-include-notebook">
290
+ Include full notebook source
291
+ </label>
292
+ </div>
293
+ <p className="text-xs text-muted-foreground ml-6">
294
+ Copies the entire saved Python source, including comments, literal
295
+ data, embedded credentials, and package metadata. Outputs and
296
+ external files are not included. Review it before posting.{" "}
297
+ <span className="font-bold">
298
+ For private notebooks, paste a minimal reproduction instead.
299
+ </span>
300
+ </p>
301
+ {notebookSourceReason && (
302
+ <span className="text-xs text-muted-foreground ml-6">
303
+ {notebookSourceReason}
304
+ </span>
305
+ )}
306
+ {includeNotebook && notebookSourceRequest.status === "error" && (
307
+ <span className="text-xs text-(--red-11) ml-6">
308
+ Notebook source could not be loaded.
309
+ </span>
310
+ )}
311
+ </div>
312
+
313
+ <div className="border-t pt-3">
314
+ <p className="text-sm text-muted-foreground">
315
+ Other feedback? Take our{" "}
316
+ <a
317
+ href={Constants.feedbackForm}
318
+ target="_blank"
319
+ rel="noreferrer"
320
+ className="underline"
321
+ >
322
+ two-minute survey
323
+ </a>{" "}
324
+ or chat with us on{" "}
325
+ <a
326
+ href={Constants.discordLink}
327
+ target="_blank"
328
+ rel="noreferrer"
329
+ className="underline"
330
+ >
331
+ Discord
332
+ </a>
333
+ .
334
+ </p>
335
+ </div>
336
+ </div>
106
337
  </DialogContent>
107
338
  );
108
339
  };