@marimo-team/islands 0.25.2-dev14 → 0.25.2-dev140

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 (404) hide show
  1. package/dist/{ConnectedDataExplorerComponent-CqhQmp74.js → ConnectedDataExplorerComponent-CNSxdKyJ.js} +15 -15
  2. package/dist/{ErrorBoundary-M1CN91UQ.js → ErrorBoundary-BkQSYCZo.js} +12 -12
  3. package/dist/{ImageComparisonComponent-Cpfz30OZ.js → ImageComparisonComponent-uU8FSKZE.js} +3 -3
  4. package/dist/{Plot-CTyjbQDT.js → Plot-DdYOe1UK.js} +2 -2
  5. package/dist/{abnfDiagram-VCTEODGH-aLGD44M7.js → abnfDiagram-VCTEODGH-DQDjNXt3.js} +3 -3
  6. package/dist/{any-language-editor-dqxlUDlT.js → any-language-editor-B9REGlD9.js} +8 -8
  7. package/dist/{apl-BYaaig9_.js → apl-GEW9-ZP1.js} +1 -1
  8. package/dist/{architectureDiagram-5GKGNRK7-BGL5P81u.js → architectureDiagram-5GKGNRK7-Nmls7Wxn.js} +5 -5
  9. package/dist/{asciiarmor-GKQFJXQG.js → asciiarmor-BWNxzkG7.js} +1 -1
  10. package/dist/{asn1-BsSb7HP5.js → asn1-Bcn2QutK.js} +1 -1
  11. package/dist/assets/__vite-browser-external-BXYkiFsk.js +1 -0
  12. package/dist/assets/worker-HPY9fbhz.js +114 -0
  13. package/dist/{asterisk-B3I8SNb5.js → asterisk-lE36-hJK.js} +1 -1
  14. package/dist/{blockDiagram-I7D4REHJ-CvBmppdy.js → blockDiagram-I7D4REHJ-Cg25UrxT.js} +9 -9
  15. package/dist/{brainfuck-DXjk3bQe.js → brainfuck-BQCYDheZ.js} +1 -1
  16. package/dist/{button-B0Xgl-Qn.js → button-CvjkwdSk.js} +304 -287
  17. package/dist/{c4Diagram-7LVT6UL2-EceL4_jH.js → c4Diagram-7LVT6UL2-BxFgrnNV.js} +7 -7
  18. package/dist/{capabilities-D7Ad8-zw.js → capabilities-CQ5IjhzL.js} +1 -1
  19. package/dist/{cells-5ppES-Un.js → cells-C8iCYvLU.js} +5949 -4892
  20. package/dist/{channel-z7HZXHwv.js → channel-CPObtJXj.js} +1 -1
  21. package/dist/{chat-ui-Dv2V95k6.js → chat-ui-BDpymeoe.js} +1595 -1402
  22. package/dist/{check-DGZ74tV2.js → check-EDwSwP89.js} +1 -1
  23. package/dist/{chunk-4HAMMTFA-BPTTOOC5.js → chunk-4HAMMTFA-D4eFPyFh.js} +5 -5
  24. package/dist/{chunk-75Z2AOVW-C4AOleKf.js → chunk-75Z2AOVW-D7gxIs2Q.js} +1 -1
  25. package/dist/{chunk-DU6HZSFF-1TwWR6gh.js → chunk-DU6HZSFF-BwiyaNpg.js} +2 -2
  26. package/dist/{chunk-F27PBJKO-DMI1PBe4.js → chunk-F27PBJKO-ufseIn5y.js} +1 -1
  27. package/dist/{chunk-GMAD6QVW-vStrMz2P.js → chunk-GMAD6QVW-BhaJx0X3.js} +3 -3
  28. package/dist/{chunk-GVQU2GXP-2HwWgs4u.js → chunk-GVQU2GXP-Cwbt-lF0.js} +2 -2
  29. package/dist/{chunk-IMKFNOWR-Cm3RgLDj.js → chunk-IMKFNOWR-CoIFEo-1.js} +6 -6
  30. package/dist/{chunk-L3NEJ4N5-RhC7i0I2.js → chunk-L3NEJ4N5-n-zgIVSy.js} +5 -5
  31. package/dist/{chunk-OSK3NFVY-CZV09N-U.js → chunk-OSK3NFVY-DXa-Cxbn.js} +6 -6
  32. package/dist/{chunk-P2QGCYS3-0TAWai9C.js → chunk-P2QGCYS3-B_Zd3-X0.js} +1 -1
  33. package/dist/{chunk-POPQ4Y6H-Cc3_56GX.js → chunk-POPQ4Y6H-hYOXbYH_.js} +1 -1
  34. package/dist/{chunk-PWAF6VOD-lNxB9k8z.js → chunk-PWAF6VOD-CQw5qATZ.js} +1 -1
  35. package/dist/{chunk-SHT3W25Y-DedDYSP5.js → chunk-SHT3W25Y-lHiGx3ZC.js} +8 -8
  36. package/dist/{chunk-SVP7TREG-B2SFkCAL.js → chunk-SVP7TREG-BvsHIrY_.js} +2 -2
  37. package/dist/{chunk-TICWLB2K-DB6hjNOL.js → chunk-TICWLB2K-BC8YIm_n.js} +6 -6
  38. package/dist/{chunk-YOKDWASO-DrWbKnxA.js → chunk-YOKDWASO-DPZk8vhS.js} +6 -6
  39. package/dist/classDiagram-ZZMXUADV-Bt98lkkv.js +30 -0
  40. package/dist/classDiagram-v2-VYDZK3BY-D9bfbcC3.js +30 -0
  41. package/dist/{clike-E2lFbGVj.js → clike-CxK9W55Z.js} +1 -1
  42. package/dist/{clojure-Dn_K4RlK.js → clojure-Dzcvwpxk.js} +1 -1
  43. package/dist/{cmake-DpN2Top5.js → cmake-DYr-71zp.js} +1 -1
  44. package/dist/{cobol-Chf22-GM.js → cobol-DC3g37Kq.js} +1 -1
  45. package/dist/{code-visibility-Clbu601l.js → code-visibility-DSbYTcxC.js} +8 -8
  46. package/dist/{coffeescript-BVe1OiD9.js → coffeescript-C-eFwH5N.js} +1 -1
  47. package/dist/{common-DnmYjCVM.js → common-CZoGPEDT.js} +13579 -14584
  48. package/dist/{commonlisp-DxoBG7fU.js → commonlisp-CyaNXrJR.js} +1 -1
  49. package/dist/{compiler-runtime-Cj8ZWiNS.js → compiler-runtime-CldRdSsv.js} +2 -2
  50. package/dist/{copy-icon-qmRg_VTX.js → copy-icon-Ft7t9bqz.js} +6 -6
  51. package/dist/{crystal-DCM3yc4r.js → crystal-ih5ax5tQ.js} +1 -1
  52. package/dist/{css-DkZ9mMyI.js → css-CN_wP7_R.js} +1 -1
  53. package/dist/{cynefinDiagram-5FMLGOSQ-DzaZEqgD.js → cynefinDiagram-5FMLGOSQ-CgWra7wt.js} +3 -3
  54. package/dist/{cypher-Drw_8U5I.js → cypher-CqGRcmZo.js} +1 -1
  55. package/dist/{d-CsVGcKMF.js → d-Cj0sOW2z.js} +1 -1
  56. package/dist/{dagre-GXQ25YYZ-Cjf5GjU3.js → dagre-GXQ25YYZ-CFZ8-35c.js} +10 -10
  57. package/dist/{data-grid-overlay-editor-CYhrcE4X.js → data-grid-overlay-editor-Bahjo5W-.js} +7 -7
  58. package/dist/{data-grid-types-BucVmDDp.js → data-grid-types-BH_r7g7l.js} +1 -1
  59. package/dist/{diagram-S7CK7UJ4-IhLt_khx.js → diagram-S7CK7UJ4-lCNQrW7d.js} +4 -4
  60. package/dist/{diagram-UQ7AKVKN-CQc6KLPB.js → diagram-UQ7AKVKN-CQPQ6pP_.js} +3 -3
  61. package/dist/{diagram-VSXAHHWV-CR7BJygZ.js → diagram-VSXAHHWV-BJWcVVJY.js} +2 -2
  62. package/dist/{diagram-VX7I27RA-DHmW9N1T.js → diagram-VX7I27RA-Cf3b0llz.js} +5 -5
  63. package/dist/{diagram-Z3DM3KII-zVKsg-Ty.js → diagram-Z3DM3KII-Bt4QLrpn.js} +3 -3
  64. package/dist/{dialog-CILKhbsG.js → dialog-CEBFZNyc.js} +29 -29
  65. package/dist/{diff-CBikYCUF.js → diff-B_hUkiat.js} +1 -1
  66. package/dist/{dist-Df0wKI0F.js → dist-BK4Oj99o.js} +1 -1
  67. package/dist/{dist-BVGtK7Ht.js → dist-BLfKmR-l.js} +1 -1
  68. package/dist/{dist-B8D7McG3.js → dist-BMQf5zIS.js} +46 -46
  69. package/dist/{dist-C2KzV-vf.js → dist-BorMD-uX.js} +2 -2
  70. package/dist/{dist-Cs2FijYk.js → dist-BuaRHxOc.js} +2 -2
  71. package/dist/{dist-DPcEtqmG.js → dist-Bvs24R_E.js} +47 -47
  72. package/dist/{dist-lA1Cttkb.js → dist-C8fAKSH1.js} +41 -41
  73. package/dist/{dist-DszxuxS1.js → dist-CLdpGQVr.js} +2 -2
  74. package/dist/{dist-CO1AwwG_.js → dist-CN8zI-XC.js} +209 -209
  75. package/dist/{dist-D1PpnuZB.js → dist-CN_BeG2I.js} +1 -1
  76. package/dist/{dist-CPGxfVGX.js → dist-CSJ0MDRw.js} +1 -1
  77. package/dist/{dist-Cm3iAFMD.js → dist-CSbh1PNP.js} +3 -3
  78. package/dist/{dist-9x1ZRe-e.js → dist-Cg7gzw-a.js} +2 -2
  79. package/dist/{dist-B1vYLK28.js → dist-CkTTIdBe.js} +345 -345
  80. package/dist/{dist-BRxfaJgs.js → dist-CrSP_H1M.js} +296 -296
  81. package/dist/{dist-C2wDlYdD.js → dist-D-wwqlzJ.js} +2 -2
  82. package/dist/{dist-BtKIs9N-.js → dist-D6d86eNJ.js} +1 -1
  83. package/dist/{dist-DHOTQar0.js → dist-DBtSl3sf.js} +1 -1
  84. package/dist/{dist-KzZ7WELx.js → dist-DiDibOYr.js} +120 -120
  85. package/dist/{dist-Kxgjxakw.js → dist-DoE4XJBC.js} +1277 -1222
  86. package/dist/{dist-CcyKTBTF.js → dist-DpBpA_n1.js} +2 -2
  87. package/dist/{dist-BHCHt1NI.js → dist-F8Ep36rk.js} +1 -1
  88. package/dist/{dist-C8xMLVYi.js → dist-OR1OnN-y.js} +44 -44
  89. package/dist/{dist-1HDa70oE.js → dist-PXYI_yuP.js} +3 -3
  90. package/dist/{dist-CMh_W4y4.js → dist-diIx5qJW.js} +2 -2
  91. package/dist/{dockerfile-DJnSntVB.js → dockerfile-D0VKN500.js} +2 -2
  92. package/dist/dropdown-menu-CP_qCYHC.js +4678 -0
  93. package/dist/{dtd-BHa4v0Bn.js → dtd-B8FGSWWe.js} +1 -1
  94. package/dist/{dylan-BypL2Zz8.js → dylan-DbIBYIrw.js} +1 -1
  95. package/dist/{ebnf-5guncNu-.js → ebnf-D-YbYLdk.js} +1 -1
  96. package/dist/{ebnfDiagram-PWID7BFC-DDd5hCRC.js → ebnfDiagram-PWID7BFC-D3NAyPFY.js} +3 -3
  97. package/dist/{ecl-iRcVIKYZ.js → ecl-DBmkdWAd.js} +1 -1
  98. package/dist/{eiffel-BEqF9aU4.js → eiffel-CcWSDDzK.js} +1 -1
  99. package/dist/{elm-DYcfNE9c.js → elm-MC-b8a6C.js} +1 -1
  100. package/dist/{erDiagram-RLTQ6QDP-D10NP0eI.js → erDiagram-RLTQ6QDP-Tlu09_Nm.js} +12 -12
  101. package/dist/{erlang-BtAuIoF0.js → erlang-AdO1-xtV.js} +1 -1
  102. package/dist/error-banner-Da600cwz.js +362 -0
  103. package/dist/{error-entries-B2Ux3Z2X.js → error-entries-CzoYkIQZ.js} +2 -2
  104. package/dist/{esm-h8f7-1CJ.js → esm-AMFssoNp.js} +380 -374
  105. package/dist/{esm-BElI3qKH.js → esm-D2gTsXEV.js} +579 -579
  106. package/dist/{factor-3nzOwLuN.js → factor-Ys-13HOP.js} +2 -2
  107. package/dist/{fcl-C90TGnJJ.js → fcl-DnwditDr.js} +1 -1
  108. package/dist/{feedback-button-DQUXhzxG.js → feedback-button-DzW23W2G.js} +13 -13
  109. package/dist/flowDiagram-HODETNUW-CAYbpJmV.js +16 -0
  110. package/dist/{formats-Q9gwlLyD.js → formats-BGh2thRc.js} +6 -6
  111. package/dist/{forth-DEaRrLUi.js → forth-DiMuIXFe.js} +1 -1
  112. package/dist/{fortran-Bv6JRUjY.js → fortran-hkrF2eM4.js} +1 -1
  113. package/dist/{ganttDiagram-EL5Y4UJY-cRRaDt88.js → ganttDiagram-EL5Y4UJY-BQT16JSc.js} +2 -2
  114. package/dist/{gas-JNerWj3-.js → gas-DlhqN9k8.js} +1 -1
  115. package/dist/{gherkin-CSrl-H70.js → gherkin-0SlhEZ3t.js} +1 -1
  116. package/dist/{gitGraphDiagram-WWUBYQGX-Pox5k9-Y.js → gitGraphDiagram-WWUBYQGX-D5nSIzdE.js} +2 -2
  117. package/dist/{glide-data-editor-B4sl2a3f.js → glide-data-editor-VRZlRc-O.js} +60 -60
  118. package/dist/{glide-utils-CzzWU59p.js → glide-utils-DJyqh0EM.js} +4 -4
  119. package/dist/{globals-DZ0cKrtp.js → globals-FYJ8OxBd.js} +3 -3
  120. package/dist/{groovy-X7euO_vE.js → groovy-YhcTMyvX.js} +1 -1
  121. package/dist/{haskell-C48Z70Az.js → haskell-CodLxrtT.js} +1 -1
  122. package/dist/{haxe-CAUWMmwR.js → haxe-CiRWNFkH.js} +1 -1
  123. package/dist/{highlighted-body-KPVGNVTW-Ad3MKZ18.js → highlighted-body-KPVGNVTW-zwjq21tf.js} +4 -4
  124. package/dist/{html-to-image-BZBwkkDG.js → html-to-image-CZY1pIZH.js} +547 -569
  125. package/dist/{http-BrSBnhDH.js → http-Bh6HhdNR.js} +1 -1
  126. package/dist/{idl-BXuPleZv.js → idl-DZgBq75I.js} +1 -1
  127. package/dist/{infoDiagram-27XIBGKW-DrYu3UZC.js → infoDiagram-27XIBGKW-XrDxhr0x.js} +2 -2
  128. package/dist/{ishikawaDiagram-5VMMS53U-pmkGQJsA.js → ishikawaDiagram-5VMMS53U-CD1muzov.js} +3 -3
  129. package/dist/{javascript-B4EPWJf_.js → javascript-BfNytHiM.js} +1 -1
  130. package/dist/{journeyDiagram-3NMN7TZE-EPJDPlt0.js → journeyDiagram-3NMN7TZE-BaLqn-dZ.js} +2 -2
  131. package/dist/{jsx-runtime-DgDPJV9S.js → jsx-runtime-3BD1kT0s.js} +1 -1
  132. package/dist/{julia-ke9Kh8b7.js → julia--tLIAG7q.js} +1 -1
  133. package/dist/{kanban-definition-UXKFOSKX-wWGD9VLW.js → kanban-definition-UXKFOSKX-Dg9W142_.js} +9 -9
  134. package/dist/{katex-BNCmKUol.js → katex-BIdZGsyO.js} +141 -116
  135. package/dist/label-BDKF3Afc.js +281 -0
  136. package/dist/{livescript-Ce4uqGAC.js → livescript-CVPfYnY_.js} +1 -1
  137. package/dist/{loader-C9OUkMrj.js → loader-BQOfjTIJ.js} +1 -1
  138. package/dist/{lua-D6fti_Jk.js → lua-4Fa-T-qq.js} +1 -1
  139. package/dist/main.js +7059 -6908
  140. package/dist/{mathematica-DcEpZ3Vj.js → mathematica-CtYAy6GG.js} +1 -1
  141. package/dist/{mbox-DFBbOu0X.js → mbox-D0w9Ah1C.js} +1 -1
  142. package/dist/{mermaid-Dfvntf3s.js → mermaid-CiAXjLpA.js} +57 -57
  143. package/dist/mermaid-HWGCJPDP-ByCsZnYF.js +2 -0
  144. package/dist/{mhchem-BEc7A1or.js → mhchem-CdWPJK6g.js} +1 -1
  145. package/dist/{mindmap-definition-YA3MSWOX-C2f1VIBR.js → mindmap-definition-YA3MSWOX-DgCidgYJ.js} +11 -11
  146. package/dist/{mirc-CqeibO3N.js → mirc-De9aSAZM.js} +1 -1
  147. package/dist/{mllike-D54QZYTP.js → mllike-BbugeaY_.js} +1 -1
  148. package/dist/{modelica-DuML2-8V.js → modelica-BjJwWw1F.js} +1 -1
  149. package/dist/{mscgen-CJmKwp3b.js → mscgen-DwiRH5ma.js} +1 -1
  150. package/dist/{mumps-DaVgFtkd.js → mumps--plbDM9o.js} +1 -1
  151. package/dist/{nginx-BXN1rqI0.js → nginx-C4Df7REc.js} +1 -1
  152. package/dist/{nsis-CMfRqf0V.js → nsis-fiiOqLc3.js} +7 -7
  153. package/dist/{ntriples-BiOGlMDR.js → ntriples-jV77I4k8.js} +1 -1
  154. package/dist/{number-overlay-editor-CbKIioUo.js → number-overlay-editor-BZVTQDVj.js} +5 -5
  155. package/dist/{octave-CgVnzxKk.js → octave-Cztd01tF.js} +1 -1
  156. package/dist/{oz-B2mky97X.js → oz-Bl8o3BDl.js} +1 -1
  157. package/dist/{pascal-BoZhBf6s.js → pascal-BO5JqysR.js} +1 -1
  158. package/dist/{pegDiagram-XKGWAZYB-D6v5dz4M.js → pegDiagram-XKGWAZYB-coOYYKB6.js} +3 -3
  159. package/dist/{perl-DjzMqXtt.js → perl-Drlh9s6m.js} +1 -1
  160. package/dist/{pieDiagram-E7YTZNPT-BwFAhpYD.js → pieDiagram-E7YTZNPT-BnXTc3bj.js} +3 -3
  161. package/dist/{pig-B2mB-01d.js → pig-BWGR8wZw.js} +1 -1
  162. package/dist/{powershell-D0zT88Aj.js → powershell-DT99xlz_.js} +1 -1
  163. package/dist/{process-output-BSsWzfnY.js → process-output-e4jj9Ijt.js} +4 -4
  164. package/dist/{properties-3_5qCgOj.js → properties-Q-rkxld0.js} +1 -1
  165. package/dist/{protobuf-Dgoxfi1H.js → protobuf-DKyWZbs7.js} +1 -1
  166. package/dist/{pug-CNRdd8oG.js → pug-42ZJUbEC.js} +2 -2
  167. package/dist/{puppet-DzILxZfz.js → puppet-B4UozHhh.js} +1 -1
  168. package/dist/purify.es-DMv5zIkJ.js +866 -0
  169. package/dist/{python-AfVdMn_l.js → python-DREjAV__.js} +1 -1
  170. package/dist/{q-C6p-CGWh.js → q-Bi63IpBO.js} +1 -1
  171. package/dist/{quadrantDiagram-AXDQQJYC--kqzFC3w.js → quadrantDiagram-AXDQQJYC-Ccw0xMjN.js} +1 -1
  172. package/dist/{r-CzKF1D2X.js → r-DSwXWKMR.js} +1 -1
  173. package/dist/{railroadDiagram-O6MQD6OU-D6eOFr6Z.js → railroadDiagram-O6MQD6OU-B28-u83n.js} +3 -3
  174. package/dist/{react-dom-BUgJ-ab_.js → react-dom-DUmH0GXv.js} +29 -21
  175. package/dist/{react-ofJbxM4x.js → react-sHtZdjeP.js} +103 -94
  176. package/dist/{react-vega-ewj7q_U5.js → react-vega-BED0DjiB.js} +3 -3
  177. package/dist/{requirementDiagram-BXWQKSXE-CHYsMgDR.js → requirementDiagram-BXWQKSXE-CdYCTMu0.js} +11 -11
  178. package/dist/{reveal-component-CSChrj7R.js → reveal-component-BU1x-Q6a.js} +906 -878
  179. package/dist/{rpm-Bx7FkjTO.js → rpm-DPb1DeKM.js} +1 -1
  180. package/dist/{ruby-BMzgq2bf.js → ruby-U7fZA4DP.js} +2 -2
  181. package/dist/{sankeyDiagram-P5KCCOFB-BdzhT0BM.js → sankeyDiagram-P5KCCOFB-ELvOcnZH.js} +1 -1
  182. package/dist/{sas-ClGVnK3F.js → sas-CLk1JpTn.js} +1 -1
  183. package/dist/{scheme-C0MXqXep.js → scheme-CT-2k2Tl.js} +1 -1
  184. package/dist/select-BButFi-d.js +1344 -0
  185. package/dist/{sequenceDiagram-WJ2MYXX4-BPAknhBp.js → sequenceDiagram-WJ2MYXX4-CM3aRAe_.js} +4 -4
  186. package/dist/{shell-CiQZv6oG.js → shell-BLO7fcsk.js} +1 -1
  187. package/dist/{sieve-BiIMePvV.js → sieve-nG3C7WNH.js} +1 -1
  188. package/dist/{simple-mode-8ETW2RS6.js → simple-mode-C683Q7or.js} +1 -1
  189. package/dist/{smalltalk-9-llftyG.js → smalltalk-BROcZybA.js} +1 -1
  190. package/dist/{solr-CxCKEuwq.js → solr-mVltHNc5.js} +1 -1
  191. package/dist/{sparql-BRmy7pzx.js → sparql-Cv1Ksr4v.js} +1 -1
  192. package/dist/{spec-D62vWpMT.js → spec-BwarBpUJ.js} +116 -135
  193. package/dist/{spreadsheet-UCNUIGsn.js → spreadsheet-BwTnp5K_.js} +1 -1
  194. package/dist/{sql-D0hSGZ-H.js → sql-CjLt0122.js} +1 -1
  195. package/dist/{stateDiagram-D77RDMKH-Cq249IQ4.js → stateDiagram-D77RDMKH-DOZUMVj8.js} +13 -13
  196. package/dist/stateDiagram-v2-MP3YSRHH-CISYxma6.js +30 -0
  197. package/dist/{stex-UeT_Aofp.js → stex-Btf3omL8.js} +1 -1
  198. package/dist/style.css +1 -1
  199. package/dist/{stylus-Fi4waA2H.js → stylus-Dt4VvLXL.js} +1 -1
  200. package/dist/{swift-NqPyaBye.js → swift-DHsn_CVI.js} +1 -1
  201. package/dist/{swimlanes-42K2YHIH-Bh_S_HKD.js → swimlanes-42K2YHIH-BkSppxp8.js} +10 -10
  202. package/dist/swimlanesDiagram-VR7AAH4N-c8G5pGxC.js +30 -0
  203. package/dist/{swiper-component-DkV7T44B.js → swiper-component-DKntyn8p.js} +5 -5
  204. package/dist/{tcl-B4f0xfmM.js → tcl-CV0OLBOl.js} +1 -1
  205. package/dist/{textile-CnNbnPTe.js → textile-D320oKVM.js} +1 -1
  206. package/dist/{tiddlywiki-CSGSOg38.js → tiddlywiki-BVVNvfy4.js} +1 -1
  207. package/dist/{tiki-9F02WBA6.js → tiki-BF2aDPlB.js} +1 -1
  208. package/dist/{timeline-definition-24CTP7MA-ByNMgBE7.js → timeline-definition-24CTP7MA-CaMQayqK.js} +3 -3
  209. package/dist/{toDate-DWVp6uE1.js → toDate-BNJf01u1.js} +8 -9
  210. package/dist/{toast-DcoJGS3-.js → toast-B9UMEi8u.js} +161 -165
  211. package/dist/{toml-AesZ6RBt.js → toml-CaUN7UHo.js} +1 -1
  212. package/dist/{tooltip-Bi36DgYh.js → tooltip-BO1REbqs.js} +548 -584
  213. package/dist/{troff-DlfvveK1.js → troff-DQUFcClZ.js} +1 -1
  214. package/dist/{ttcn--YVSkGs_.js → ttcn-CQL1duJS.js} +1 -1
  215. package/dist/{ttcn-cfg-Bb1Knl_J.js → ttcn-cfg-BMmEFJPu.js} +1 -1
  216. package/dist/{turtle-DC24v1bz.js → turtle-C3esgsRr.js} +1 -1
  217. package/dist/{use-restore-focus-ZgG5Br63.js → use-restore-focus-BEM7sFWl.js} +2430 -2007
  218. package/dist/{use-vega-container-remeasure-4DwJbPWu.js → use-vega-container-remeasure-Bz4PZMtt.js} +2 -2
  219. package/dist/{useAsyncData-BD7NLQ3_.js → useAsyncData-Deh5kszT.js} +3 -3
  220. package/dist/{useDateFormatter-D8XWr8lL.js → useDateFormatter-D8XruNGG.js} +53 -32
  221. package/dist/{useDeepCompareMemoize-CawMGSRU.js → useDeepCompareMemoize-DXwzRINI.js} +2 -2
  222. package/dist/{useIframeCapabilities-BUMBOpsM.js → useIframeCapabilities-DBETvvPl.js} +2 -2
  223. package/dist/{useLifecycle-3vGhRa1o.js → useLifecycle-j7D9uD1o.js} +6 -6
  224. package/dist/{useTheme-BOw801nZ.js → useTheme-CRnjkku0.js} +7 -7
  225. package/dist/{vb-Dpc8vhvF.js → vb-RK1eDXRl.js} +1 -1
  226. package/dist/{vbscript-B-Y1XnZe.js → vbscript-BCOeM0de.js} +1 -1
  227. package/dist/{vega-component-9siY74NS.js → vega-component-DG29TAB7.js} +14 -14
  228. package/dist/{vega-embed-container-sSR5hAsy.js → vega-embed-container-BNHE18G9.js} +5 -5
  229. package/dist/{velocity-DHMu9kc-.js → velocity-CZKOFbOI.js} +1 -1
  230. package/dist/{vennDiagram-4TSXK5OY-DY8CySdO.js → vennDiagram-4TSXK5OY-CF8pfaK3.js} +3 -3
  231. package/dist/{verilog-DhiEaoUl.js → verilog-DqQTzVn8.js} +1 -1
  232. package/dist/{vhdl-D4X23YKO.js → vhdl-vQr2bfmi.js} +1 -1
  233. package/dist/{wardleyDiagram-VM6X3IG4-DYC1AFni.js → wardleyDiagram-VM6X3IG4-dGPu39d-.js} +3 -3
  234. package/dist/{webidl-SyzNxWpJ.js → webidl-DzX7N40e.js} +1 -1
  235. package/dist/{xquery-BC2R4Hk6.js → xquery-Cw_Q_hGR.js} +1 -1
  236. package/dist/{xychartDiagram-S5SC5T6Z-Df8LLnuY.js → xychartDiagram-S5SC5T6Z-CP6-9q56.js} +5 -5
  237. package/dist/{yacas-DLNXPMmH.js → yacas-DiC4jJBE.js} +1 -1
  238. package/dist/{z80-CDXWHOO6.js → z80-CUOQDEJO.js} +1 -1
  239. package/package.json +38 -37
  240. package/src/__tests__/mount.test.ts +6 -6
  241. package/src/components/chat/__tests__/chat-history-popover.test.tsx +157 -0
  242. package/src/components/chat/chat-history-popover.tsx +98 -17
  243. package/src/components/chat/chat-panel.tsx +29 -0
  244. package/src/components/chat/tool-call/__tests__/tool-result.test.tsx +56 -0
  245. package/src/components/chat/tool-call/tool-result.tsx +3 -3
  246. package/src/components/data-table/TableTopBar.tsx +4 -0
  247. package/src/components/data-table/__tests__/column_formatting.test.ts +30 -0
  248. package/src/components/data-table/__tests__/columns.test.tsx +70 -0
  249. package/src/components/data-table/__tests__/export-actions.test.tsx +1111 -14
  250. package/src/components/data-table/__tests__/pagination.test.tsx +85 -1
  251. package/src/components/data-table/__tests__/schemas.test.ts +57 -0
  252. package/src/components/data-table/charts/__tests__/schemas.test.ts +25 -0
  253. package/src/components/data-table/charts/__tests__/slider-field.test.tsx +54 -0
  254. package/src/components/data-table/charts/__tests__/spec.test.ts +26 -23
  255. package/src/components/data-table/charts/components/form-fields.tsx +3 -1
  256. package/src/components/data-table/charts/constants.ts +11 -10
  257. package/src/components/data-table/charts/types.ts +1 -0
  258. package/src/components/data-table/column-formatting/feature.ts +20 -1
  259. package/src/components/data-table/columns.tsx +25 -18
  260. package/src/components/data-table/data-table.tsx +3 -0
  261. package/src/components/data-table/export-actions.tsx +365 -81
  262. package/src/components/data-table/pagination.tsx +16 -2
  263. package/src/components/data-table/schemas.ts +90 -14
  264. package/src/components/editor/actions/__tests__/pair-with-agent-commands.test.ts +32 -46
  265. package/src/components/editor/actions/__tests__/pair-with-agent-modal.test.tsx +29 -40
  266. package/src/components/editor/actions/pair-with-agent-commands.ts +3 -4
  267. package/src/components/editor/actions/pair-with-agent-modal.tsx +4 -7
  268. package/src/components/editor/actions/useRestartKernel.tsx +2 -2
  269. package/src/components/editor/alerts/__tests__/connection-notice.test.tsx +224 -17
  270. package/src/components/editor/alerts/connection-details.tsx +61 -0
  271. package/src/components/editor/alerts/connection-notice.tsx +46 -53
  272. package/src/components/editor/alerts/startup-progress.tsx +73 -129
  273. package/src/components/editor/app-container.tsx +2 -2
  274. package/src/components/editor/boundary/__tests__/ErrorBoundary.test.tsx +2 -2
  275. package/src/components/editor/cell/CreateCellButton.tsx +2 -2
  276. package/src/components/editor/cell/DeleteButton.tsx +2 -2
  277. package/src/components/editor/cell/RunButton.tsx +3 -3
  278. package/src/components/editor/cell/StopButton.tsx +2 -2
  279. package/src/components/editor/chrome/components/__tests__/feedback-button.test.tsx +4 -4
  280. package/src/components/editor/chrome/components/feedback-button.tsx +3 -3
  281. package/src/components/editor/chrome/panels/__tests__/packages-panel.test.tsx +8 -8
  282. package/src/components/editor/chrome/panels/__tests__/{sandbox-details.test.tsx → runtime-details.test.tsx} +94 -22
  283. package/src/components/editor/chrome/panels/__tests__/sandbox-recovery.test.tsx +4 -4
  284. package/src/components/editor/chrome/panels/packages-panel.tsx +8 -29
  285. package/src/components/editor/chrome/panels/{sandbox-details-state.ts → runtime-details-state.ts} +1 -1
  286. package/src/components/editor/chrome/panels/{sandbox-panel.tsx → runtime-panel.tsx} +38 -66
  287. package/src/components/editor/chrome/panels/runtime-status-toggle.tsx +56 -0
  288. package/src/components/editor/chrome/panels/sandbox-controller.tsx +2 -2
  289. package/src/components/editor/chrome/wrapper/app-chrome.tsx +3 -3
  290. package/src/components/editor/chrome/wrapper/footer-items/machine-stats.tsx +2 -2
  291. package/src/components/editor/controls/Controls.tsx +3 -3
  292. package/src/components/editor/controls/__tests__/notebook-menu-dropdown.test.tsx +6 -5
  293. package/src/components/editor/header/__tests__/status.test.tsx +4 -4
  294. package/src/components/editor/header/app-header.tsx +2 -2
  295. package/src/components/editor/header/status.tsx +3 -3
  296. package/src/components/editor/navigation/__tests__/navigation.test.ts +8 -8
  297. package/src/components/editor/output/console/ConsoleOutput.tsx +5 -3
  298. package/src/components/editor/output/console/__tests__/ConsoleOutput.test.tsx +18 -0
  299. package/src/components/storage/__tests__/storage-file-viewer.test.tsx +2 -1
  300. package/src/components/ui/__tests__/slider.test.tsx +37 -0
  301. package/src/components/ui/progress-stages.tsx +114 -0
  302. package/src/components/ui/slider.tsx +2 -0
  303. package/src/core/ai/__tests__/state.test.ts +120 -0
  304. package/src/core/ai/state.ts +36 -10
  305. package/src/core/cells/__tests__/document-roundtrip.test.ts +16 -0
  306. package/src/core/codemirror/copilot/__tests__/completion-integration.test.ts +447 -0
  307. package/src/core/codemirror/copilot/__tests__/inline-completion.test.ts +395 -0
  308. package/src/core/codemirror/copilot/__tests__/language-server.test.ts +511 -2
  309. package/src/core/codemirror/copilot/__tests__/rpc-cancellation.test.ts +201 -0
  310. package/src/core/codemirror/copilot/extension.ts +22 -11
  311. package/src/core/codemirror/copilot/language-server.ts +109 -60
  312. package/src/core/codemirror/language/__tests__/sql.test.ts +4 -3
  313. package/src/core/codemirror/language/embedded/__tests__/embedded-python.test.ts +138 -26
  314. package/src/core/codemirror/language/embedded/embedded-python.ts +47 -13
  315. package/src/core/codemirror/language/embedded/latex.ts +20 -13
  316. package/src/core/codemirror/lsp/__tests__/notebook-lsp.test.ts +106 -5
  317. package/src/core/codemirror/lsp/notebook-lsp.ts +16 -2
  318. package/src/core/codemirror/readonly/__tests__/extension.test.ts +6 -6
  319. package/src/core/codemirror/readonly/extension.ts +2 -2
  320. package/src/core/config/pair.ts +0 -1
  321. package/src/core/datasets/__tests__/data-source-discovery.test.ts +20 -13
  322. package/src/core/edit-app.tsx +5 -1
  323. package/src/core/export/hooks.ts +2 -2
  324. package/src/core/islands/bootstrap.ts +1 -0
  325. package/src/core/islands/bridge.ts +2 -2
  326. package/src/core/kernel/messages.ts +4 -7
  327. package/src/core/kernel/session.ts +9 -0
  328. package/src/core/network/__tests__/api.test.ts +114 -1
  329. package/src/core/network/__tests__/connection.test.ts +3 -3
  330. package/src/core/network/api.ts +3 -2
  331. package/src/core/network/connection-notice.ts +5 -5
  332. package/src/core/network/connection.ts +9 -9
  333. package/src/core/network/requests-lazy.ts +2 -2
  334. package/src/core/packages/__tests__/useSandboxController.test.tsx +2 -2
  335. package/src/core/packages/useSandboxController.ts +6 -6
  336. package/src/core/runtime/__tests__/adapter.test.ts +6 -6
  337. package/src/core/runtime/adapter.ts +7 -7
  338. package/src/core/runtime/config.ts +2 -2
  339. package/src/core/saving/filename.ts +2 -2
  340. package/src/core/saving/save-component.tsx +5 -5
  341. package/src/core/saving/useAutoSave.ts +2 -2
  342. package/src/core/wasm/__tests__/bootstrap.test.ts +33 -1
  343. package/src/core/wasm/bridge.ts +2 -2
  344. package/src/core/wasm/worker/bootstrap.ts +22 -3
  345. package/src/core/wasm/worker/types.ts +2 -2
  346. package/src/core/websocket/__tests__/useMarimoKernelConnection.hook.test.tsx +30 -25
  347. package/src/core/websocket/__tests__/useMarimoKernelConnection.test.ts +5 -5
  348. package/src/core/websocket/connection-utils.ts +21 -21
  349. package/src/core/websocket/types.ts +8 -9
  350. package/src/core/websocket/useMarimoKernelConnection.tsx +33 -22
  351. package/src/css/katex-css.test.ts +166 -0
  352. package/src/css/katex.min.css +175 -169
  353. package/src/hooks/__tests__/useEventListener.test.tsx +45 -1
  354. package/src/hooks/useEventListener.ts +6 -1
  355. package/src/mount.tsx +2 -2
  356. package/src/plugins/core/__test__/registerReactComponent.test.ts +55 -0
  357. package/src/plugins/core/registerReactComponent.tsx +3 -1
  358. package/src/plugins/impl/CheckboxPlugin.tsx +1 -1
  359. package/src/plugins/impl/DataTablePlugin.tsx +23 -2
  360. package/src/plugins/impl/DatePickerPlugin.tsx +5 -3
  361. package/src/plugins/impl/DateRangePlugin.tsx +5 -3
  362. package/src/plugins/impl/DateTimePickerPlugin.tsx +5 -3
  363. package/src/plugins/impl/DropdownPlugin.tsx +1 -1
  364. package/src/plugins/impl/MultiselectPlugin.tsx +1 -1
  365. package/src/plugins/impl/NumberPlugin.tsx +21 -4
  366. package/src/plugins/impl/RadioPlugin.tsx +5 -1
  367. package/src/plugins/impl/RangeSliderPlugin.tsx +1 -1
  368. package/src/plugins/impl/SearchableSelect.tsx +1 -1
  369. package/src/plugins/impl/SliderPlugin.tsx +5 -1
  370. package/src/plugins/impl/SwitchPlugin.tsx +6 -1
  371. package/src/plugins/impl/TextAreaPlugin.tsx +23 -4
  372. package/src/plugins/impl/TextInputPlugin.tsx +10 -2
  373. package/src/plugins/impl/__test__/slider-labels.test.tsx +136 -0
  374. package/src/plugins/impl/__test__/text-labels.test.tsx +141 -0
  375. package/src/plugins/impl/__tests__/DataTablePlugin.test.tsx +65 -8
  376. package/src/plugins/impl/__tests__/NumberPlugin.test.tsx +159 -1
  377. package/src/plugins/impl/__tests__/widget-labels.test.tsx +122 -0
  378. package/src/plugins/impl/chat/ChatPlugin.tsx +1 -1
  379. package/src/plugins/impl/common/labeled.tsx +9 -3
  380. package/src/plugins/impl/data-frames/DataFramePlugin.tsx +15 -3
  381. package/src/plugins/impl/data-frames/forms/__tests__/__snapshots__/form.test.tsx.snap +0 -22
  382. package/src/stories/cell.stories.tsx +2 -2
  383. package/src/stories/dataframe.stories.tsx +7 -0
  384. package/src/stories/layout/vertical/one-column.stories.tsx +5 -5
  385. package/src/stories/progress-stages.stories.tsx +62 -0
  386. package/src/stories/runtime-existing.stories.tsx +44 -0
  387. package/src/stories/runtime-maintenance.stories.tsx +40 -0
  388. package/src/stories/runtime-pixi.stories.tsx +28 -0
  389. package/src/stories/{sandbox.stories.tsx → runtime-story.tsx} +191 -152
  390. package/src/stories/runtime-uv.stories.tsx +56 -0
  391. package/dist/assets/__vite-browser-external-C9iR87Zl.js +0 -1
  392. package/dist/assets/worker-D7hWi02M.js +0 -109
  393. package/dist/classDiagram-ZZMXUADV-BwYhrSEX.js +0 -30
  394. package/dist/classDiagram-v2-VYDZK3BY-HecM04TM.js +0 -30
  395. package/dist/dropdown-menu-BaqM0t4N.js +0 -4502
  396. package/dist/error-banner-DzAmP0AQ.js +0 -391
  397. package/dist/flowDiagram-HODETNUW-DgcjSdPV.js +0 -16
  398. package/dist/label-MNhNNoN6.js +0 -278
  399. package/dist/mermaid-HWGCJPDP-DYCzSILp.js +0 -2
  400. package/dist/purify.es-DgKyQviY.js +0 -805
  401. package/dist/select-BcObMjGz.js +0 -970
  402. package/dist/stateDiagram-v2-MP3YSRHH-Dk5QgdXF.js +0 -30
  403. package/dist/swimlanesDiagram-VR7AAH4N-CbztusY8.js +0 -30
  404. package/src/components/editor/chrome/panels/sandbox-toggle.tsx +0 -52
@@ -1,8 +1,10 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
  import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
3
+ import { requestId } from "@/__tests__/branded";
4
+ import type { DataSourceDiscoveryResult } from "@/core/kernel/messages";
3
5
  import { connectionAtom } from "@/core/network/connection";
4
6
  import { store } from "@/core/state/jotai";
5
- import { WebSocketState } from "@/core/websocket/types";
7
+ import { ConnectionState } from "@/core/websocket/types";
6
8
  import {
7
9
  fetchDataSourceDiscovery,
8
10
  invalidateDataSourceDiscovery,
@@ -30,7 +32,7 @@ describe("fetchDataSourceDiscovery", () => {
30
32
  beforeEach(() => {
31
33
  // Discovery waits for the session's websocket connection to be open
32
34
  // before requesting, so it doesn't race a still-connecting session.
33
- store.set(connectionAtom, { state: WebSocketState.OPEN });
35
+ store.set(connectionAtom, { state: ConnectionState.OPEN });
34
36
  });
35
37
 
36
38
  afterEach(() => {
@@ -41,7 +43,7 @@ describe("fetchDataSourceDiscovery", () => {
41
43
  it("shares a single in-flight request across concurrent callers", async () => {
42
44
  const request = vi
43
45
  .spyOn(DiscoverDataSources, "request")
44
- .mockResolvedValue({ request_id: "request-id", sources: [] });
46
+ .mockResolvedValue({ request_id: requestId("request-id"), sources: [] });
45
47
 
46
48
  await Promise.all([
47
49
  fetchDataSourceDiscovery(),
@@ -55,7 +57,7 @@ describe("fetchDataSourceDiscovery", () => {
55
57
  it("re-runs discovery after the cache is invalidated", async () => {
56
58
  const request = vi
57
59
  .spyOn(DiscoverDataSources, "request")
58
- .mockResolvedValue({ request_id: "request-id", sources: [] });
60
+ .mockResolvedValue({ request_id: requestId("request-id"), sources: [] });
59
61
 
60
62
  await fetchDataSourceDiscovery();
61
63
  invalidateDataSourceDiscovery();
@@ -68,7 +70,10 @@ describe("fetchDataSourceDiscovery", () => {
68
70
  const request = vi
69
71
  .spyOn(DiscoverDataSources, "request")
70
72
  .mockRejectedValueOnce(new Error("boom"))
71
- .mockResolvedValueOnce({ request_id: "request-id", sources: [] });
73
+ .mockResolvedValueOnce({
74
+ request_id: requestId("request-id"),
75
+ sources: [],
76
+ });
72
77
 
73
78
  await expect(fetchDataSourceDiscovery()).rejects.toThrow("boom");
74
79
  await expect(fetchDataSourceDiscovery()).resolves.toEqual([]);
@@ -77,16 +82,18 @@ describe("fetchDataSourceDiscovery", () => {
77
82
 
78
83
  it("does not clear a newer cache entry when an invalidated request fails", async () => {
79
84
  let rejectFirstRequest: ((error: Error) => void) | undefined;
80
- const firstRequest = new Promise<{
81
- request_id: string;
82
- sources: DetectedDataSource[];
83
- }>((_resolve, reject) => {
84
- rejectFirstRequest = reject;
85
- });
85
+ const firstRequest = new Promise<DataSourceDiscoveryResult>(
86
+ (_resolve, reject) => {
87
+ rejectFirstRequest = reject;
88
+ },
89
+ );
86
90
  const request = vi
87
91
  .spyOn(DiscoverDataSources, "request")
88
92
  .mockReturnValueOnce(firstRequest)
89
- .mockResolvedValueOnce({ request_id: "request-id", sources: [] });
93
+ .mockResolvedValueOnce({
94
+ request_id: requestId("request-id"),
95
+ sources: [],
96
+ });
90
97
 
91
98
  const staleResult = fetchDataSourceDiscovery().catch((error) => error);
92
99
  await vi.waitFor(() => expect(request).toHaveBeenCalledTimes(1));
@@ -116,7 +123,7 @@ describe("fetchDataSourceDiscovery", () => {
116
123
  }),
117
124
  ];
118
125
  vi.spyOn(DiscoverDataSources, "request").mockResolvedValue({
119
- request_id: "request-id",
126
+ request_id: requestId("request-id"),
120
127
  sources,
121
128
  });
122
129
 
@@ -197,7 +197,11 @@ export const EditApp: React.FC<AppProps> = ({
197
197
  )}
198
198
  </div>
199
199
 
200
- <ConnectionNotice appConfig={appConfig} onRetry={reconnect} />
200
+ <ConnectionNotice
201
+ appConfig={appConfig}
202
+ onRetry={reconnect}
203
+ canOpenPackages={!hideControls}
204
+ />
201
205
 
202
206
  {/* Don't render until we have a single cell. NotStartedConnectionAlert
203
207
  still covers the "no remote runtime started" prompt. */}
@@ -16,7 +16,7 @@ import { connectionAtom } from "../network/connection";
16
16
  import { useRequestClient } from "../network/requests";
17
17
  import type { UpdateCellOutputsRequest } from "../network/types";
18
18
  import { VirtualFileTracker } from "../static/virtual-file-tracker";
19
- import { WebSocketState } from "../websocket/types";
19
+ import { ConnectionState } from "../websocket/types";
20
20
 
21
21
  const DELAY = 5000; // 5 seconds;
22
22
 
@@ -28,7 +28,7 @@ export function useAutoExport() {
28
28
  const htmlEnabled = appConfig.auto_download.includes("html");
29
29
  const ipynbEnabled = appConfig.auto_download.includes("ipynb");
30
30
 
31
- const isConnected = state === WebSocketState.OPEN;
31
+ const isConnected = state === ConnectionState.OPEN;
32
32
  const markdownDisabled = !markdownEnabled || !isConnected;
33
33
  const htmlDisabled = !htmlEnabled || !isConnected;
34
34
  const ipynbDisabled = !ipynbEnabled || !isConnected;
@@ -283,6 +283,7 @@ function handleMessage(
283
283
  return;
284
284
 
285
285
  case "consumer-capabilities":
286
+ case "execution":
286
287
  return;
287
288
  default:
288
289
  logNever(msg);
@@ -7,7 +7,7 @@ import { throwNotImplemented } from "@/utils/functions";
7
7
  import { Logger } from "@/utils/Logger";
8
8
  import { generateUUID } from "@/utils/uuid";
9
9
  import { initialNotebookState, notebookAtom } from "../cells/cells";
10
- import type { CommandMessage } from "../kernel/messages";
10
+ import type { ClientCommand } from "../kernel/messages";
11
11
  import type { EditRequests, RunRequests } from "../network/types";
12
12
  import { store as defaultStore } from "../state/jotai";
13
13
  import { getMarimoExportContext } from "../static/export-context";
@@ -392,7 +392,7 @@ export class IslandsPyodideBridge implements RunRequests, EditRequests {
392
392
  // The kernel uses msgspec to parse control requests, which requires a 'type'
393
393
  // field for discriminated union deserialization.
394
394
  private async putControlRequest(
395
- operation: CommandMessage,
395
+ operation: ClientCommand,
396
396
  session?: AppSession,
397
397
  ): Promise<void> {
398
398
  session ??= await this.getActiveSession();
@@ -2,7 +2,7 @@
2
2
  import type { components } from "@marimo-team/marimo-api";
3
3
 
4
4
  export type schemas = components["schemas"];
5
- export type DataType = schemas["KnownUnions"]["data_type"];
5
+ export type DataType = schemas["DataType"];
6
6
  export const DATA_TYPES = [
7
7
  "string",
8
8
  "boolean",
@@ -24,10 +24,7 @@ export type DatabaseSchema = schemas["Schema"];
24
24
  export type DataSourceConnection = schemas["DataSourceConnection"];
25
25
  export type OutputChannel = schemas["CellChannel"];
26
26
  export type CellOutput = schemas["CellOutput"];
27
- export type MarimoError = Extract<
28
- CellOutput["data"],
29
- { type: string }[]
30
- >[number];
27
+ export type MarimoError = schemas["MarimoError"];
31
28
  export type OutputMessage = schemas["CellOutput"];
32
29
  export type CompletionOption =
33
30
  schemas["CompletionResultNotification"]["options"][0];
@@ -54,8 +51,8 @@ export type Capabilities =
54
51
  NotificationMessageData<"kernel-ready">["capabilities"];
55
52
  export type CacheInfoFetched = NotificationMessageData<"cache-info">;
56
53
 
57
- export type NotificationMessage = schemas["KnownUnions"]["notification"];
58
- export type CommandMessage = schemas["KnownUnions"]["command"];
54
+ export type NotificationMessage = schemas["NotificationMessage"];
55
+ export type ClientCommand = schemas["ClientCommand"];
59
56
 
60
57
  export type NotificationMessageType = NotificationMessage["op"];
61
58
  export interface NotificationPayload {
@@ -1,5 +1,6 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
  import { init } from "@paralleldrive/cuid2";
3
+ import { atom } from "jotai";
3
4
  import { Logger } from "@/utils/Logger";
4
5
  import type { TypedString } from "@/utils/typed";
5
6
  import { updateQueryParams } from "@/utils/urls";
@@ -9,6 +10,14 @@ import { store } from "../state/jotai";
9
10
 
10
11
  export type SessionId = TypedString<"SessionId">;
11
12
 
13
+ /**
14
+ * Server-owned identity of the notebook Session. It survives browser reloads
15
+ * and reconnects and ends with the Session.
16
+ */
17
+ export type StableSessionId = TypedString<"StableSessionId">;
18
+
19
+ export const stableSessionIdAtom = atom<StableSessionId | null>(null);
20
+
12
21
  const createId = init({ length: 6 });
13
22
 
14
23
  export function generateSessionId(): SessionId {
@@ -1,7 +1,8 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
- import { beforeEach, describe, expect, it, vi } from "vitest";
3
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
4
4
  import { HTTPError } from "@/utils/errors";
5
+ import { Logger } from "@/utils/Logger";
5
6
  import { API } from "../api";
6
7
 
7
8
  // Mock fetch globally
@@ -25,6 +26,118 @@ describe("API", () => {
25
26
  baseUrl = "http://localhost:8000";
26
27
  });
27
28
 
29
+ afterEach(() => {
30
+ vi.restoreAllMocks();
31
+ });
32
+
33
+ it.each(["before fetch", "during fetch"])(
34
+ "API.post propagates cancellation %s without logging it",
35
+ async (timing) => {
36
+ const log = vi.spyOn(Logger, "error").mockReturnValue(undefined);
37
+ const controller = new AbortController();
38
+ mockFetch.mockImplementation(
39
+ (_url: string, { signal }: RequestInit) =>
40
+ new Promise<Response>((_resolve, reject) => {
41
+ if (signal?.aborted) {
42
+ reject(signal.reason);
43
+ } else {
44
+ signal?.addEventListener("abort", () => reject(signal.reason), {
45
+ once: true,
46
+ });
47
+ }
48
+ }),
49
+ );
50
+ if (timing === "before fetch") {
51
+ controller.abort();
52
+ }
53
+
54
+ const response = API.post("/foo", {}, { signal: controller.signal });
55
+ controller.abort();
56
+
57
+ await expect(response).rejects.toBe(controller.signal.reason);
58
+ expect(mockFetch).toHaveBeenCalledWith(
59
+ "http://localhost:8000/api/foo",
60
+ expect.objectContaining({ signal: controller.signal }),
61
+ );
62
+ expect(log).not.toHaveBeenCalled();
63
+ },
64
+ );
65
+
66
+ it.each(["application/json", "text/plain"])(
67
+ "API.post propagates an abort while reading %s without logging it",
68
+ async (contentType) => {
69
+ const log = vi.spyOn(Logger, "error").mockReturnValue(undefined);
70
+ const error = new DOMException("Body read aborted", "AbortError");
71
+ const readBody = vi.fn().mockRejectedValue(error);
72
+ mockFetch.mockResolvedValue({
73
+ ok: true,
74
+ headers: new Headers({ "Content-Type": contentType }),
75
+ json: readBody,
76
+ text: readBody,
77
+ });
78
+
79
+ await expect(API.post("/foo", {})).rejects.toBe(error);
80
+ expect(readBody).toHaveBeenCalledExactlyOnceWith();
81
+ expect(log).not.toHaveBeenCalled();
82
+ },
83
+ );
84
+
85
+ it.each([new TypeError("Failed to fetch"), null, "Request failed"])(
86
+ "API.post logs and preserves non-abort fetch failures: %s",
87
+ async (error) => {
88
+ const log = vi.spyOn(Logger, "error").mockReturnValue(undefined);
89
+ const controller = new AbortController();
90
+ controller.abort();
91
+ mockFetch.mockRejectedValue(error);
92
+
93
+ await expect(
94
+ API.post("/foo", {}, { signal: controller.signal }),
95
+ ).rejects.toBe(error);
96
+ expect(log).toHaveBeenCalledExactlyOnceWith(
97
+ "Error requesting http://localhost:8000/api/foo",
98
+ error,
99
+ );
100
+ },
101
+ );
102
+
103
+ it("API.post logs HTTP failures and preserves their status and body", async () => {
104
+ const log = vi.spyOn(Logger, "error").mockReturnValue(undefined);
105
+ const body = { detail: "Service unavailable" };
106
+ mockFetch.mockResolvedValue(
107
+ new Response(JSON.stringify(body), {
108
+ status: 503,
109
+ statusText: "Service Unavailable",
110
+ headers: { "Content-Type": "application/json" },
111
+ }),
112
+ );
113
+
114
+ await expect(API.post("/foo", {})).rejects.toMatchObject({
115
+ name: "HTTPError",
116
+ status: 503,
117
+ message: "Service Unavailable",
118
+ cause: body,
119
+ });
120
+ expect(log).toHaveBeenCalledExactlyOnceWith(
121
+ "Error requesting http://localhost:8000/api/foo",
122
+ expect.any(HTTPError),
123
+ );
124
+ });
125
+
126
+ it("API.post logs malformed JSON responses", async () => {
127
+ const log = vi.spyOn(Logger, "error").mockReturnValue(undefined);
128
+ mockFetch.mockResolvedValue(
129
+ new Response("invalid json", {
130
+ headers: { "Content-Type": "application/json" },
131
+ }),
132
+ );
133
+
134
+ await expect(API.post("/foo", {})).rejects.toBeInstanceOf(SyntaxError);
135
+ expect(log).toHaveBeenCalledExactlyOnceWith(
136
+ "Error requesting http://localhost:8000/api/foo",
137
+ expect.any(SyntaxError),
138
+ );
139
+ });
140
+
28
141
  it("API.post calls fetch with POST and correct URL", async () => {
29
142
  mockFetch.mockResolvedValue({
30
143
  ok: true,
@@ -3,7 +3,7 @@
3
3
  import { afterEach, describe, expect, it } from "vitest";
4
4
  import { initialModeAtom } from "@/core/mode";
5
5
  import { store } from "@/core/state/jotai";
6
- import { WebSocketState } from "../../websocket/types";
6
+ import { ConnectionState } from "../../websocket/types";
7
7
  import { connectionAtom, waitForConnectionOpenIfNotebook } from "../connection";
8
8
 
9
9
  const NEVER = Symbol("never");
@@ -20,7 +20,7 @@ function settledOrNever(promise: Promise<unknown>) {
20
20
 
21
21
  describe("waitForConnectionOpenIfNotebook", () => {
22
22
  afterEach(() => {
23
- store.set(connectionAtom, { state: WebSocketState.NOT_STARTED });
23
+ store.set(connectionAtom, { state: ConnectionState.NOT_STARTED });
24
24
  store.set(initialModeAtom, undefined);
25
25
  });
26
26
 
@@ -39,7 +39,7 @@ describe("waitForConnectionOpenIfNotebook", () => {
39
39
  const promise = waitForConnectionOpenIfNotebook();
40
40
  await expect(settledOrNever(promise)).resolves.toBe(NEVER);
41
41
 
42
- store.set(connectionAtom, { state: WebSocketState.OPEN });
42
+ store.set(connectionAtom, { state: ConnectionState.OPEN });
43
43
  await expect(settledOrNever(promise)).resolves.not.toBe(NEVER);
44
44
  });
45
45
  });
@@ -101,8 +101,9 @@ export const API = {
101
101
  return response.text() as unknown as RESP;
102
102
  })
103
103
  .catch((error) => {
104
- // Catch and rethrow
105
- Logger.error(`Error requesting ${fullUrl}`, error);
104
+ if (error?.name !== "AbortError") {
105
+ Logger.error(`Error requesting ${fullUrl}`, error);
106
+ }
106
107
  throw error;
107
108
  });
108
109
  },
@@ -5,7 +5,7 @@ import { sandboxAtom, sandboxSyncAtom } from "@/core/packages/sandbox-state";
5
5
  import {
6
6
  type ConnectionPhase,
7
7
  WebSocketClosedReason,
8
- WebSocketState,
8
+ ConnectionState,
9
9
  } from "@/core/websocket/types";
10
10
  import { connectionAtom } from "./connection";
11
11
 
@@ -37,7 +37,7 @@ export const connectionNoticeAtom = atom<ConnectionNotice | null>((get) => {
37
37
  if (
38
38
  sandbox &&
39
39
  (syncing || syncError !== null) &&
40
- connection.state === WebSocketState.OPEN
40
+ connection.state === ConnectionState.OPEN
41
41
  ) {
42
42
  return {
43
43
  kind: "sync",
@@ -56,7 +56,7 @@ export const connectionNoticeAtom = atom<ConnectionNotice | null>((get) => {
56
56
  error: syncError,
57
57
  };
58
58
  }
59
- if (connection.state === WebSocketState.CONNECTING) {
59
+ if (connection.state === ConnectionState.CONNECTING) {
60
60
  const messages = {
61
61
  "preparing-environment": {
62
62
  title: "Preparing environment…",
@@ -88,11 +88,11 @@ export const connectionNoticeAtom = atom<ConnectionNotice | null>((get) => {
88
88
  error: null,
89
89
  };
90
90
  }
91
- if (connection.state === WebSocketState.CLOSED) {
91
+ if (connection.state === ConnectionState.CLOSED) {
92
92
  const startupFailed =
93
93
  connection.code === WebSocketClosedReason.KERNEL_STARTUP_ERROR;
94
94
  const environmentFailed =
95
- startupFailed && connection.phase === "preparing-environment";
95
+ sandbox && startupFailed && connection.phase === "preparing-environment";
96
96
  return {
97
97
  kind: startupFailed ? "startup" : "connection",
98
98
  phase: connection.phase,
@@ -4,14 +4,14 @@ import { atomWithReducer } from "jotai/utils";
4
4
  import type { NotificationMessageData } from "../kernel/messages";
5
5
  import { isNotebookPage } from "../mode";
6
6
  import { waitFor } from "../state/jotai";
7
- import { type ConnectionStatus, WebSocketState } from "../websocket/types";
7
+ import { type ConnectionStatus, ConnectionState } from "../websocket/types";
8
8
 
9
9
  /**
10
10
  * Atom for storing the connection status.
11
11
  * Initialized to NOT_STARTED.
12
12
  */
13
13
  export const connectionAtom = atom<ConnectionStatus>({
14
- state: WebSocketState.NOT_STARTED,
14
+ state: ConnectionState.NOT_STARTED,
15
15
  });
16
16
 
17
17
  type StartupProgress = NotificationMessageData<"startup-progress">;
@@ -33,7 +33,7 @@ export const startupProgressAtom = atomWithReducer<
33
33
 
34
34
  export function waitForConnectionOpen() {
35
35
  return waitFor(connectionAtom, (value) => {
36
- return value.state === WebSocketState.OPEN;
36
+ return value.state === ConnectionState.OPEN;
37
37
  });
38
38
  }
39
39
 
@@ -53,28 +53,28 @@ export function waitForConnectionOpenIfNotebook() {
53
53
 
54
54
  export const isConnectingAtom = atom((get) => {
55
55
  const connection = get(connectionAtom);
56
- return connection.state === WebSocketState.CONNECTING;
56
+ return connection.state === ConnectionState.CONNECTING;
57
57
  });
58
58
 
59
59
  export const isConnectedAtom = atom((get) => {
60
60
  const connection = get(connectionAtom);
61
- return connection.state === WebSocketState.OPEN;
61
+ return connection.state === ConnectionState.OPEN;
62
62
  });
63
63
 
64
64
  export const canInteractWithAppAtom = atom((get) => {
65
65
  const connection = get(connectionAtom);
66
66
  return (
67
- connection.state === WebSocketState.OPEN ||
68
- connection.state === WebSocketState.NOT_STARTED
67
+ connection.state === ConnectionState.OPEN ||
68
+ connection.state === ConnectionState.NOT_STARTED
69
69
  );
70
70
  });
71
71
 
72
72
  export const isClosedAtom = atom((get) => {
73
73
  const connection = get(connectionAtom);
74
- return connection.state === WebSocketState.CLOSED;
74
+ return connection.state === ConnectionState.CLOSED;
75
75
  });
76
76
 
77
77
  export const isNotStartedAtom = atom((get) => {
78
78
  const connection = get(connectionAtom);
79
- return connection.state === WebSocketState.NOT_STARTED;
79
+ return connection.state === ConnectionState.NOT_STARTED;
80
80
  });
@@ -7,7 +7,7 @@ import { memoizeLastValue } from "@/utils/once";
7
7
  import { waitForKernelToBeInstantiated } from "../kernel/state";
8
8
  import type { RuntimeManager } from "../runtime/runtime";
9
9
  import { store } from "../state/jotai";
10
- import { WebSocketState } from "../websocket/types";
10
+ import { ConnectionState } from "../websocket/types";
11
11
  import { connectionAtom, waitForConnectionOpen } from "./connection";
12
12
  import type { EditRequests, RunRequests } from "./types";
13
13
 
@@ -159,7 +159,7 @@ export function createLazyRequests(
159
159
  ): AllRequests {
160
160
  // Memoize the init call, just once per runtime manager
161
161
  const initOnce = memoizeLastValue(async (runtimeManager: RuntimeManager) => {
162
- store.set(connectionAtom, { state: WebSocketState.CONNECTING });
162
+ store.set(connectionAtom, { state: ConnectionState.CONNECTING });
163
163
  await runtimeManager.init();
164
164
  });
165
165
 
@@ -17,7 +17,7 @@ import type {
17
17
  } from "@/core/network/types";
18
18
  import { filenameAtom } from "@/core/saving/file-state";
19
19
  import { store } from "@/core/state/jotai";
20
- import { WebSocketState } from "@/core/websocket/types";
20
+ import { ConnectionState } from "@/core/websocket/types";
21
21
  import { HTTPError } from "@/utils/errors";
22
22
  import { packageDataVersionAtom } from "../package-data";
23
23
  import {
@@ -52,7 +52,7 @@ beforeEach(() => {
52
52
  store.set(sandboxAtom, null);
53
53
  store.set(sandboxSyncAtom, { kind: "succeeded" });
54
54
  store.set(sandboxActionsAtom, null);
55
- store.set(connectionAtom, { state: WebSocketState.OPEN });
55
+ store.set(connectionAtom, { state: ConnectionState.OPEN });
56
56
  store.set(kernelStartupErrorAtom, null);
57
57
  store.set(filenameAtom, "notebook.py");
58
58
  store.set(packageDataVersionAtom, 0);
@@ -8,7 +8,7 @@ import { useRequestClient } from "@/core/network/requests";
8
8
  import { useFilename } from "@/core/saving/filename";
9
9
  import { waitFor } from "@/core/state/jotai";
10
10
  import { isWasm } from "@/core/wasm/utils";
11
- import { WebSocketState } from "@/core/websocket/types";
11
+ import { ConnectionState } from "@/core/websocket/types";
12
12
  import { HTTPError, prettyError } from "@/utils/errors";
13
13
  import { invalidatePackageData } from "./package-data";
14
14
  import {
@@ -67,7 +67,7 @@ export function useSandboxController(onReconnect: () => Promise<void>) {
67
67
  if (
68
68
  inFlight.current ||
69
69
  operation.kind === "running" ||
70
- connection.state === WebSocketState.CONNECTING
70
+ connection.state === ConnectionState.CONNECTING
71
71
  ) {
72
72
  return false;
73
73
  }
@@ -91,10 +91,10 @@ export function useSandboxController(onReconnect: () => Promise<void>) {
91
91
  const status = await waitFor(
92
92
  connectionAtom,
93
93
  (value) =>
94
- value.state === WebSocketState.OPEN ||
95
- value.state === WebSocketState.CLOSED,
94
+ value.state === ConnectionState.OPEN ||
95
+ value.state === ConnectionState.CLOSED,
96
96
  );
97
- if (status.state === WebSocketState.CLOSED) {
97
+ if (status.state === ConnectionState.CLOSED) {
98
98
  setOperation({ kind: "idle" });
99
99
  return false;
100
100
  }
@@ -177,7 +177,7 @@ export function useSandboxController(onReconnect: () => Promise<void>) {
177
177
  saving ||
178
178
  loading ||
179
179
  operation.kind === "running" ||
180
- connection.state === WebSocketState.CONNECTING;
180
+ connection.state === ConnectionState.CONNECTING;
181
181
  const diagnostic =
182
182
  error ??
183
183
  (operation.kind === "failed"
@@ -6,7 +6,7 @@ import { islandsInitializedAtom } from "../../islands/state";
6
6
  import { kernelStateAtom } from "../../kernel/state";
7
7
  import { connectionAtom } from "../../network/connection";
8
8
  import { wasmInitStateAtom } from "../../wasm/state";
9
- import { WebSocketState } from "../../websocket/types";
9
+ import { ConnectionState } from "../../websocket/types";
10
10
  import {
11
11
  canRunCellsAtom,
12
12
  islandsAdapter,
@@ -50,13 +50,13 @@ describe("wasmAdapter", () => {
50
50
 
51
51
  describe("remoteAdapter", () => {
52
52
  it.each([
53
- [{ state: WebSocketState.OPEN }, { kind: "ready" }],
53
+ [{ state: ConnectionState.OPEN }, { kind: "ready" }],
54
54
  [
55
- { state: WebSocketState.CONNECTING },
55
+ { state: ConnectionState.CONNECTING },
56
56
  { kind: "connecting", progress: { label: "Connecting…" } },
57
57
  ],
58
58
  [
59
- { state: WebSocketState.NOT_STARTED },
59
+ { state: ConnectionState.NOT_STARTED },
60
60
  { kind: "connecting", progress: { label: "Not connected" } },
61
61
  ],
62
62
  ] as const)("maps %j to %j", (conn, expected) => {
@@ -68,7 +68,7 @@ describe("remoteAdapter", () => {
68
68
  it("surfaces the close reason when closed", () => {
69
69
  const store = createStore();
70
70
  store.set(connectionAtom, {
71
- state: WebSocketState.CLOSED,
71
+ state: ConnectionState.CLOSED,
72
72
  code: "KERNEL_DISCONNECTED",
73
73
  reason: "Kernel went away",
74
74
  });
@@ -125,7 +125,7 @@ describe("canRunCellsAtom", () => {
125
125
  it("is false on a remote adapter until kernel acks", () => {
126
126
  const store = createStore();
127
127
  // Default adapter in test env is remote.
128
- store.set(connectionAtom, { state: WebSocketState.OPEN });
128
+ store.set(connectionAtom, { state: ConnectionState.OPEN });
129
129
  expect(store.get(canRunCellsAtom)).toBe(false);
130
130
 
131
131
  store.set(kernelStateAtom, { isInstantiated: true, error: null });
@@ -8,7 +8,7 @@ import { connectionAtom } from "../network/connection";
8
8
  import { isStaticNotebook } from "../static/static-state";
9
9
  import { wasmInitStateAtom } from "../wasm/state";
10
10
  import { isWasm } from "../wasm/utils";
11
- import { WebSocketState } from "../websocket/types";
11
+ import { ConnectionState } from "../websocket/types";
12
12
 
13
13
  export type RuntimeKind = "wasm" | "remote" | "static" | "islands";
14
14
 
@@ -76,19 +76,19 @@ export const wasmAdapter: RuntimeAdapter = {
76
76
  const remoteStateAtom = atom<AdapterState>((get) => {
77
77
  const conn = get(connectionAtom);
78
78
  switch (conn.state) {
79
- case WebSocketState.OPEN:
79
+ case ConnectionState.OPEN:
80
80
  return { kind: "ready" };
81
- case WebSocketState.CONNECTING:
81
+ case ConnectionState.CONNECTING:
82
82
  return { kind: "connecting", progress: { label: "Connecting…" } };
83
- case WebSocketState.NOT_STARTED:
83
+ case ConnectionState.NOT_STARTED:
84
84
  return { kind: "connecting", progress: { label: "Not connected" } };
85
- case WebSocketState.CLOSING:
86
- case WebSocketState.CLOSED:
85
+ case ConnectionState.CLOSING:
86
+ case ConnectionState.CLOSED:
87
87
  return {
88
88
  kind: "failed",
89
89
  error: {
90
90
  message:
91
- conn.state === WebSocketState.CLOSED
91
+ conn.state === ConnectionState.CLOSED
92
92
  ? conn.reason
93
93
  : "Disconnecting",
94
94
  errorKind: "runtime",
@@ -5,7 +5,7 @@ import { Logger } from "@/utils/Logger";
5
5
  import { connectionAtom } from "../network/connection";
6
6
  import { store } from "../state/jotai";
7
7
  import { isAppNotStarted } from "../websocket/connection-utils";
8
- import { WebSocketState } from "../websocket/types";
8
+ import { ConnectionState } from "../websocket/types";
9
9
  import { RuntimeManager } from "./runtime";
10
10
  import type { RuntimeConfig } from "./types";
11
11
 
@@ -36,7 +36,7 @@ export function useConnectToRuntime(): () => Promise<void> {
36
36
  const [connection, setConnection] = useAtom(connectionAtom);
37
37
  return useEvent(async () => {
38
38
  if (isAppNotStarted(connection.state)) {
39
- setConnection({ state: WebSocketState.CONNECTING });
39
+ setConnection({ state: ConnectionState.CONNECTING });
40
40
  await runtimeManager.init();
41
41
  } else {
42
42
  Logger.log("Runtime already started or starting...");