@marimo-team/islands 0.25.2-dev13 → 0.25.2-dev130

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 (400) hide show
  1. package/dist/{ConnectedDataExplorerComponent-CqhQmp74.js → ConnectedDataExplorerComponent-CNSxdKyJ.js} +15 -15
  2. package/dist/{ErrorBoundary-C901K0Pa.js → ErrorBoundary-TNyz711o.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-CuYwqnV8.js} +5950 -4893
  20. package/dist/{channel-z7HZXHwv.js → channel-CPObtJXj.js} +1 -1
  21. package/dist/{chat-ui-Dv2V95k6.js → chat-ui-C6oDg4Zu.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-DbDN7P7-.js → code-visibility-D9wWbBZp.js} +7 -7
  46. package/dist/{coffeescript-BVe1OiD9.js → coffeescript-C-eFwH5N.js} +1 -1
  47. package/dist/{common-BT9gbOCH.js → common-yxD2FJe_.js} +9639 -9291
  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-CVzcJKyS.js → data-grid-overlay-editor-DZjQDOjA.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-zfHL6H60.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-CglJWpZl.js → feedback-button-DZTHS4bw.js} +13 -13
  109. package/dist/flowDiagram-HODETNUW-CAYbpJmV.js +16 -0
  110. package/dist/{formats-Q9gwlLyD.js → formats-DLtvJPnj.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-DYVqOapE.js → glide-data-editor-Dwg6aXaX.js} +60 -60
  118. package/dist/{glide-utils-CzzWU59p.js → glide-utils-DJyqh0EM.js} +4 -4
  119. package/dist/{globals-GIct2xJr.js → globals-DDRQd7UN.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-BJJsbNZ1.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 +7060 -6909
  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-D9ZV_sED.js → number-overlay-editor-KgyFjYGb.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-C1GGFU6Q.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-Bl8NIAua.js → reveal-component-BbYNv_VX.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-Dwcg_x_5.js} +5 -6
  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-DLBAQLSf.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__/export-actions.test.tsx +1111 -14
  248. package/src/components/data-table/__tests__/pagination.test.tsx +85 -1
  249. package/src/components/data-table/__tests__/schemas.test.ts +57 -0
  250. package/src/components/data-table/charts/__tests__/schemas.test.ts +25 -0
  251. package/src/components/data-table/charts/__tests__/slider-field.test.tsx +54 -0
  252. package/src/components/data-table/charts/__tests__/spec.test.ts +26 -23
  253. package/src/components/data-table/charts/components/form-fields.tsx +3 -1
  254. package/src/components/data-table/charts/constants.ts +11 -10
  255. package/src/components/data-table/charts/types.ts +1 -0
  256. package/src/components/data-table/data-table.tsx +3 -0
  257. package/src/components/data-table/export-actions.tsx +365 -81
  258. package/src/components/data-table/pagination.tsx +16 -2
  259. package/src/components/data-table/schemas.ts +90 -14
  260. package/src/components/editor/actions/__tests__/pair-with-agent-commands.test.ts +32 -46
  261. package/src/components/editor/actions/__tests__/pair-with-agent-modal.test.tsx +29 -40
  262. package/src/components/editor/actions/pair-with-agent-commands.ts +3 -4
  263. package/src/components/editor/actions/pair-with-agent-modal.tsx +4 -7
  264. package/src/components/editor/actions/useRestartKernel.tsx +2 -2
  265. package/src/components/editor/alerts/__tests__/connection-notice.test.tsx +224 -17
  266. package/src/components/editor/alerts/connection-details.tsx +61 -0
  267. package/src/components/editor/alerts/connection-notice.tsx +46 -53
  268. package/src/components/editor/alerts/startup-progress.tsx +73 -129
  269. package/src/components/editor/app-container.tsx +2 -2
  270. package/src/components/editor/boundary/__tests__/ErrorBoundary.test.tsx +2 -2
  271. package/src/components/editor/cell/CreateCellButton.tsx +2 -2
  272. package/src/components/editor/cell/DeleteButton.tsx +2 -2
  273. package/src/components/editor/cell/RunButton.tsx +3 -3
  274. package/src/components/editor/cell/StopButton.tsx +2 -2
  275. package/src/components/editor/chrome/components/__tests__/feedback-button.test.tsx +4 -4
  276. package/src/components/editor/chrome/components/feedback-button.tsx +3 -3
  277. package/src/components/editor/chrome/panels/__tests__/packages-panel.test.tsx +8 -8
  278. package/src/components/editor/chrome/panels/__tests__/{sandbox-details.test.tsx → runtime-details.test.tsx} +94 -22
  279. package/src/components/editor/chrome/panels/__tests__/sandbox-recovery.test.tsx +4 -4
  280. package/src/components/editor/chrome/panels/packages-panel.tsx +8 -29
  281. package/src/components/editor/chrome/panels/{sandbox-details-state.ts → runtime-details-state.ts} +1 -1
  282. package/src/components/editor/chrome/panels/{sandbox-panel.tsx → runtime-panel.tsx} +38 -66
  283. package/src/components/editor/chrome/panels/runtime-status-toggle.tsx +56 -0
  284. package/src/components/editor/chrome/panels/sandbox-controller.tsx +2 -2
  285. package/src/components/editor/chrome/wrapper/app-chrome.tsx +3 -3
  286. package/src/components/editor/chrome/wrapper/footer-items/machine-stats.tsx +2 -2
  287. package/src/components/editor/controls/Controls.tsx +3 -3
  288. package/src/components/editor/controls/__tests__/notebook-menu-dropdown.test.tsx +6 -5
  289. package/src/components/editor/header/__tests__/status.test.tsx +4 -4
  290. package/src/components/editor/header/app-header.tsx +2 -2
  291. package/src/components/editor/header/status.tsx +3 -3
  292. package/src/components/editor/navigation/__tests__/navigation.test.ts +8 -8
  293. package/src/components/editor/output/console/ConsoleOutput.tsx +5 -3
  294. package/src/components/editor/output/console/__tests__/ConsoleOutput.test.tsx +18 -0
  295. package/src/components/storage/__tests__/storage-file-viewer.test.tsx +2 -1
  296. package/src/components/ui/__tests__/slider.test.tsx +37 -0
  297. package/src/components/ui/progress-stages.tsx +114 -0
  298. package/src/components/ui/slider.tsx +2 -0
  299. package/src/core/ai/__tests__/state.test.ts +120 -0
  300. package/src/core/ai/state.ts +36 -10
  301. package/src/core/cells/__tests__/document-roundtrip.test.ts +16 -0
  302. package/src/core/codemirror/copilot/__tests__/completion-integration.test.ts +447 -0
  303. package/src/core/codemirror/copilot/__tests__/inline-completion.test.ts +395 -0
  304. package/src/core/codemirror/copilot/__tests__/language-server.test.ts +511 -2
  305. package/src/core/codemirror/copilot/__tests__/rpc-cancellation.test.ts +201 -0
  306. package/src/core/codemirror/copilot/extension.ts +22 -11
  307. package/src/core/codemirror/copilot/language-server.ts +109 -60
  308. package/src/core/codemirror/language/__tests__/sql.test.ts +4 -3
  309. package/src/core/codemirror/language/embedded/__tests__/embedded-python.test.ts +138 -26
  310. package/src/core/codemirror/language/embedded/embedded-python.ts +47 -13
  311. package/src/core/codemirror/language/embedded/latex.ts +20 -13
  312. package/src/core/codemirror/lsp/__tests__/notebook-lsp.test.ts +106 -5
  313. package/src/core/codemirror/lsp/notebook-lsp.ts +16 -2
  314. package/src/core/codemirror/readonly/__tests__/extension.test.ts +6 -6
  315. package/src/core/codemirror/readonly/extension.ts +2 -2
  316. package/src/core/config/pair.ts +0 -1
  317. package/src/core/datasets/__tests__/data-source-discovery.test.ts +20 -13
  318. package/src/core/edit-app.tsx +5 -1
  319. package/src/core/export/hooks.ts +2 -2
  320. package/src/core/islands/bootstrap.ts +1 -0
  321. package/src/core/islands/bridge.ts +2 -2
  322. package/src/core/kernel/messages.ts +1 -1
  323. package/src/core/kernel/session.ts +9 -0
  324. package/src/core/network/__tests__/api.test.ts +114 -1
  325. package/src/core/network/__tests__/connection.test.ts +3 -3
  326. package/src/core/network/api.ts +3 -2
  327. package/src/core/network/connection-notice.ts +5 -5
  328. package/src/core/network/connection.ts +9 -9
  329. package/src/core/network/requests-lazy.ts +2 -2
  330. package/src/core/packages/__tests__/useSandboxController.test.tsx +2 -2
  331. package/src/core/packages/useSandboxController.ts +6 -6
  332. package/src/core/runtime/__tests__/adapter.test.ts +6 -6
  333. package/src/core/runtime/adapter.ts +7 -7
  334. package/src/core/runtime/config.ts +2 -2
  335. package/src/core/saving/filename.ts +2 -2
  336. package/src/core/saving/save-component.tsx +5 -5
  337. package/src/core/saving/useAutoSave.ts +2 -2
  338. package/src/core/wasm/__tests__/bootstrap.test.ts +33 -1
  339. package/src/core/wasm/bridge.ts +2 -2
  340. package/src/core/wasm/worker/bootstrap.ts +22 -3
  341. package/src/core/wasm/worker/types.ts +2 -2
  342. package/src/core/websocket/__tests__/useMarimoKernelConnection.hook.test.tsx +30 -25
  343. package/src/core/websocket/__tests__/useMarimoKernelConnection.test.ts +5 -5
  344. package/src/core/websocket/connection-utils.ts +21 -21
  345. package/src/core/websocket/types.ts +8 -9
  346. package/src/core/websocket/useMarimoKernelConnection.tsx +33 -22
  347. package/src/css/katex-css.test.ts +166 -0
  348. package/src/css/katex.min.css +175 -169
  349. package/src/hooks/__tests__/useEventListener.test.tsx +45 -1
  350. package/src/hooks/useEventListener.ts +6 -1
  351. package/src/mount.tsx +2 -2
  352. package/src/plugins/core/__test__/registerReactComponent.test.ts +55 -0
  353. package/src/plugins/core/registerReactComponent.tsx +3 -1
  354. package/src/plugins/impl/CheckboxPlugin.tsx +1 -1
  355. package/src/plugins/impl/DataTablePlugin.tsx +23 -2
  356. package/src/plugins/impl/DatePickerPlugin.tsx +5 -3
  357. package/src/plugins/impl/DateRangePlugin.tsx +5 -3
  358. package/src/plugins/impl/DateTimePickerPlugin.tsx +5 -3
  359. package/src/plugins/impl/DropdownPlugin.tsx +1 -1
  360. package/src/plugins/impl/MultiselectPlugin.tsx +1 -1
  361. package/src/plugins/impl/NumberPlugin.tsx +21 -4
  362. package/src/plugins/impl/RadioPlugin.tsx +5 -1
  363. package/src/plugins/impl/RangeSliderPlugin.tsx +1 -1
  364. package/src/plugins/impl/SearchableSelect.tsx +1 -1
  365. package/src/plugins/impl/SliderPlugin.tsx +5 -1
  366. package/src/plugins/impl/SwitchPlugin.tsx +6 -1
  367. package/src/plugins/impl/TextAreaPlugin.tsx +23 -4
  368. package/src/plugins/impl/TextInputPlugin.tsx +10 -2
  369. package/src/plugins/impl/__test__/slider-labels.test.tsx +136 -0
  370. package/src/plugins/impl/__test__/text-labels.test.tsx +141 -0
  371. package/src/plugins/impl/__tests__/DataTablePlugin.test.tsx +65 -8
  372. package/src/plugins/impl/__tests__/NumberPlugin.test.tsx +159 -1
  373. package/src/plugins/impl/__tests__/widget-labels.test.tsx +122 -0
  374. package/src/plugins/impl/chat/ChatPlugin.tsx +1 -1
  375. package/src/plugins/impl/common/labeled.tsx +9 -3
  376. package/src/plugins/impl/data-frames/DataFramePlugin.tsx +15 -3
  377. package/src/plugins/impl/data-frames/forms/__tests__/__snapshots__/form.test.tsx.snap +0 -22
  378. package/src/stories/cell.stories.tsx +2 -2
  379. package/src/stories/dataframe.stories.tsx +7 -0
  380. package/src/stories/layout/vertical/one-column.stories.tsx +5 -5
  381. package/src/stories/progress-stages.stories.tsx +62 -0
  382. package/src/stories/runtime-existing.stories.tsx +44 -0
  383. package/src/stories/runtime-maintenance.stories.tsx +40 -0
  384. package/src/stories/runtime-pixi.stories.tsx +28 -0
  385. package/src/stories/{sandbox.stories.tsx → runtime-story.tsx} +191 -152
  386. package/src/stories/runtime-uv.stories.tsx +56 -0
  387. package/dist/assets/__vite-browser-external-C9iR87Zl.js +0 -1
  388. package/dist/assets/worker-D7hWi02M.js +0 -109
  389. package/dist/classDiagram-ZZMXUADV-BwYhrSEX.js +0 -30
  390. package/dist/classDiagram-v2-VYDZK3BY-HecM04TM.js +0 -30
  391. package/dist/dropdown-menu-BaqM0t4N.js +0 -4502
  392. package/dist/error-banner-DzAmP0AQ.js +0 -391
  393. package/dist/flowDiagram-HODETNUW-DgcjSdPV.js +0 -16
  394. package/dist/label-MNhNNoN6.js +0 -278
  395. package/dist/mermaid-HWGCJPDP-DYCzSILp.js +0 -2
  396. package/dist/purify.es-DgKyQviY.js +0 -805
  397. package/dist/select-BcObMjGz.js +0 -970
  398. package/dist/stateDiagram-v2-MP3YSRHH-Dk5QgdXF.js +0 -30
  399. package/dist/swimlanesDiagram-VR7AAH4N-CbztusY8.js +0 -30
  400. package/src/components/editor/chrome/panels/sandbox-toggle.tsx +0 -52
@@ -10,6 +10,7 @@ import {
10
10
  import { Provider } from "jotai";
11
11
  import type React from "react";
12
12
  import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
13
+ import { requestId } from "@/__tests__/branded";
13
14
  import { MockRequestClient } from "@/__mocks__/requests";
14
15
  import { ModalProvider } from "@/components/modal/ImperativeModal";
15
16
  import { TooltipProvider } from "@/components/ui/tooltip";
@@ -25,7 +26,7 @@ import { requestClientAtom } from "@/core/network/requests";
25
26
  import { filenameAtom } from "@/core/saving/file-state";
26
27
  import { store } from "@/core/state/jotai";
27
28
  import { isWasm } from "@/core/wasm/utils";
28
- import { WebSocketState } from "@/core/websocket/types";
29
+ import { ConnectionState } from "@/core/websocket/types";
29
30
  import {
30
31
  DEFAULT_EXPORT_OPTIONS,
31
32
  exportOptionsAtom,
@@ -111,7 +112,7 @@ describe("NotebookMenuDropdown", () => {
111
112
  store.set(requestClientAtom, MockRequestClient.create());
112
113
  store.set(filenameAtom, "/project/notebook.py");
113
114
  store.set(viewStateAtom, { mode: "edit", cellAnchor: null });
114
- store.set(connectionAtom, { state: WebSocketState.OPEN });
115
+ store.set(connectionAtom, { state: ConnectionState.OPEN });
115
116
  store.set(kioskModeAtom, false);
116
117
  store.set(layoutStateAtom, {
117
118
  selectedLayout: "vertical",
@@ -129,7 +130,7 @@ describe("NotebookMenuDropdown", () => {
129
130
  }));
130
131
  invalidateDataSourceDiscovery();
131
132
  vi.spyOn(DiscoverDataSources, "request").mockResolvedValue({
132
- request_id: "request-id",
133
+ request_id: requestId("request-id"),
133
134
  sources: [],
134
135
  });
135
136
  });
@@ -142,7 +143,7 @@ describe("NotebookMenuDropdown", () => {
142
143
 
143
144
  it("shows detected databases in the add connection submenu", async () => {
144
145
  vi.mocked(DiscoverDataSources.request).mockResolvedValue({
145
- request_id: "request-id",
146
+ request_id: requestId("request-id"),
146
147
  sources: [POSTGRES_SOURCE],
147
148
  });
148
149
 
@@ -172,7 +173,7 @@ describe("NotebookMenuDropdown", () => {
172
173
 
173
174
  it("shows detected storage in the add remote storage submenu", async () => {
174
175
  vi.mocked(DiscoverDataSources.request).mockResolvedValue({
175
- request_id: "request-id",
176
+ request_id: requestId("request-id"),
176
177
  sources: [S3_SOURCE],
177
178
  });
178
179
 
@@ -10,7 +10,7 @@ import { viewStateAtom } from "@/core/mode";
10
10
  import {
11
11
  type ConnectionStatus,
12
12
  WebSocketClosedReason,
13
- WebSocketState,
13
+ ConnectionState,
14
14
  } from "@/core/websocket/types";
15
15
  import { StatusOverlay } from "../status";
16
16
 
@@ -40,7 +40,7 @@ describe("StatusOverlay disconnect indicator", () => {
40
40
  const onReconnect = vi.fn();
41
41
  const { getByTestId } = renderOverlay(
42
42
  {
43
- state: WebSocketState.CLOSED,
43
+ state: ConnectionState.CLOSED,
44
44
  code: WebSocketClosedReason.KERNEL_DISCONNECTED,
45
45
  reason: "kernel not found",
46
46
  },
@@ -57,7 +57,7 @@ describe("StatusOverlay disconnect indicator", () => {
57
57
 
58
58
  it("renders a disabled button when no onReconnect is provided", () => {
59
59
  const { getByTestId } = renderOverlay({
60
- state: WebSocketState.CLOSED,
60
+ state: ConnectionState.CLOSED,
61
61
  code: WebSocketClosedReason.KERNEL_DISCONNECTED,
62
62
  reason: "kernel not found",
63
63
  });
@@ -68,7 +68,7 @@ describe("StatusOverlay disconnect indicator", () => {
68
68
 
69
69
  it("leaves editor startup failures to the inline notice", () => {
70
70
  const { queryByTestId } = renderOverlay({
71
- state: WebSocketState.CLOSED,
71
+ state: ConnectionState.CLOSED,
72
72
  code: WebSocketClosedReason.KERNEL_STARTUP_ERROR,
73
73
  reason: "Failed to start kernel sandbox",
74
74
  });
@@ -1,7 +1,7 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
3
  import React, { type PropsWithChildren } from "react";
4
- import { type ConnectionStatus, WebSocketState } from "@/core/websocket/types";
4
+ import { type ConnectionStatus, ConnectionState } from "@/core/websocket/types";
5
5
  import { Disconnected } from "../Disconnected";
6
6
 
7
7
  interface Props {
@@ -17,7 +17,7 @@ export const AppHeader: React.FC<PropsWithChildren<Props>> = ({
17
17
  return (
18
18
  <div className={className}>
19
19
  {children}
20
- {connection.state === WebSocketState.CLOSED && (
20
+ {connection.state === ConnectionState.CLOSED && (
21
21
  <Disconnected reason={connection.reason} />
22
22
  )}
23
23
  </div>
@@ -10,7 +10,7 @@ import { viewStateAtom } from "@/core/mode";
10
10
  import {
11
11
  type ConnectionStatus,
12
12
  WebSocketClosedReason,
13
- WebSocketState,
13
+ ConnectionState,
14
14
  } from "@/core/websocket/types";
15
15
  import { cn } from "@/utils/cn";
16
16
 
@@ -21,10 +21,10 @@ export const StatusOverlay: React.FC<{
21
21
  }> = ({ connection, isRunning, onReconnect }) => {
22
22
  const { mode } = useAtomValue(viewStateAtom);
23
23
  const isClosed =
24
- connection.state === WebSocketState.CLOSED &&
24
+ connection.state === ConnectionState.CLOSED &&
25
25
  (mode === "read" ||
26
26
  connection.code !== WebSocketClosedReason.KERNEL_STARTUP_ERROR);
27
- const isOpen = connection.state === WebSocketState.OPEN;
27
+ const isOpen = connection.state === ConnectionState.OPEN;
28
28
  // Editor startup failures have their own recovery UI.
29
29
  const canReconnect =
30
30
  isClosed && connection.code === WebSocketClosedReason.KERNEL_DISCONNECTED;
@@ -703,7 +703,7 @@ describe("useCellNavigationProps", () => {
703
703
  });
704
704
 
705
705
  expect(mockCopyCell).not.toHaveBeenCalled();
706
- expect(mockEvent.continuePropagation).not.toHaveBeenCalled();
706
+ expect(mockEvent.stopPropagation).not.toHaveBeenCalled();
707
707
  });
708
708
  });
709
709
 
@@ -714,7 +714,7 @@ describe("useCellNavigationProps", () => {
714
714
  );
715
715
 
716
716
  const mockEvent = Mocks.keyboardEvent({
717
- key: "x",
717
+ key: "F24",
718
718
  target: document.createElement("div"),
719
719
  });
720
720
 
@@ -722,7 +722,7 @@ describe("useCellNavigationProps", () => {
722
722
  result.current.onKeyDown?.(mockEvent);
723
723
  });
724
724
 
725
- expect(mockEvent.continuePropagation).not.toHaveBeenCalled();
725
+ expect(mockEvent.stopPropagation).not.toHaveBeenCalled();
726
726
  });
727
727
  });
728
728
 
@@ -1749,7 +1749,7 @@ describe("useCellEditorNavigationProps", () => {
1749
1749
  });
1750
1750
 
1751
1751
  expect(focusCell).toHaveBeenCalledWith(mockCellId);
1752
- expect(mockEvent.continuePropagation).not.toHaveBeenCalled();
1752
+ expect(mockEvent.stopPropagation).not.toHaveBeenCalled();
1753
1753
  });
1754
1754
 
1755
1755
  it("should clear text selection when Escape is pressed with selection", () => {
@@ -1901,7 +1901,7 @@ describe("useCellEditorNavigationProps", () => {
1901
1901
  });
1902
1902
 
1903
1903
  expect(focusCell).not.toHaveBeenCalled();
1904
- expect(mockEvent.continuePropagation).not.toHaveBeenCalled();
1904
+ expect(mockEvent.stopPropagation).not.toHaveBeenCalled();
1905
1905
  });
1906
1906
  });
1907
1907
 
@@ -1932,7 +1932,7 @@ describe("useCellEditorNavigationProps", () => {
1932
1932
  });
1933
1933
 
1934
1934
  expect(focusCell).toHaveBeenCalledWith(mockCellId);
1935
- expect(mockEvent.continuePropagation).not.toHaveBeenCalled();
1935
+ expect(mockEvent.stopPropagation).not.toHaveBeenCalled();
1936
1936
  });
1937
1937
  });
1938
1938
 
@@ -1954,7 +1954,7 @@ describe("useCellEditorNavigationProps", () => {
1954
1954
  });
1955
1955
 
1956
1956
  expect(focusCell).toHaveBeenCalledWith(mockCellId);
1957
- expect(mockEvent.continuePropagation).not.toHaveBeenCalled();
1957
+ expect(mockEvent.stopPropagation).not.toHaveBeenCalled();
1958
1958
  });
1959
1959
  });
1960
1960
 
@@ -1979,7 +1979,7 @@ describe("useCellEditorNavigationProps", () => {
1979
1979
  });
1980
1980
 
1981
1981
  expect(focusCell).toHaveBeenCalledWith(mockCellId);
1982
- expect(mockEvent.continuePropagation).not.toHaveBeenCalled();
1982
+ expect(mockEvent.stopPropagation).not.toHaveBeenCalled();
1983
1983
  });
1984
1984
  });
1985
1985
  });
@@ -360,10 +360,12 @@ const StdInput = (props: {
360
360
  }
361
361
 
362
362
  if (e.key === "Enter" && !e.shiftKey) {
363
- if (value && !isPassword) {
364
- addToHistory(value);
363
+ // Submit the visible input even if its change has not committed yet.
364
+ const submittedValue = e.currentTarget.value;
365
+ if (submittedValue && !isPassword) {
366
+ addToHistory(submittedValue);
365
367
  }
366
- onSubmit(value);
368
+ onSubmit(submittedValue);
367
369
  setValue("");
368
370
  e.preventDefault();
369
371
  e.stopPropagation();
@@ -179,6 +179,24 @@ describe("ConsoleOutput pdb history", () => {
179
179
  expect(nextInput).toHaveValue("");
180
180
  });
181
181
 
182
+ it("submits the visible input when its change has not reached React state", () => {
183
+ const onSubmitDebugger = vi.fn();
184
+ renderWithProvider(
185
+ <ConsoleOutput
186
+ {...defaultProps}
187
+ consoleOutputs={[stdinPrompt("Name: ")]}
188
+ onSubmitDebugger={onSubmitDebugger}
189
+ />,
190
+ );
191
+
192
+ const input = screen.getByTestId<HTMLInputElement>("console-input");
193
+ // Browser autofill or input events can precede the controlled-state update.
194
+ input.value = "marimo";
195
+ fireEvent.keyDown(input, { key: "Enter" });
196
+
197
+ expect(onSubmitDebugger).toHaveBeenCalledWith("marimo", 0);
198
+ });
199
+
182
200
  it("should submit an empty string when Enter is pressed with no input", () => {
183
201
  // Many CLIs prompt "Press Enter to continue" and expect "" back.
184
202
  const onSubmitDebugger = vi.fn();
@@ -2,6 +2,7 @@
2
2
 
3
3
  import { render, screen } from "@testing-library/react";
4
4
  import { afterEach, describe, expect, it, vi } from "vitest";
5
+ import { requestId } from "@/__tests__/branded";
5
6
  import { TooltipProvider } from "@/components/ui/tooltip";
6
7
  import { DownloadStorage } from "@/core/storage/request-registry";
7
8
  import { StorageFileViewer } from "../storage-file-viewer";
@@ -41,7 +42,7 @@ describe("StorageFileViewer", () => {
41
42
 
42
43
  it("renders TOML from generic storage metadata as read-only TOML", async () => {
43
44
  const request = vi.spyOn(DownloadStorage, "request").mockResolvedValue({
44
- request_id: "request-id",
45
+ request_id: requestId("request-id"),
45
46
  url: "https://example.com/pyproject.toml?signature=secret",
46
47
  });
47
48
  vi.stubGlobal(
@@ -0,0 +1,37 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+ import { fireEvent, render } from "@testing-library/react";
3
+ import { describe, expect, it, vi } from "vitest";
4
+ import { SetupMocks } from "@/__mocks__/common";
5
+ import { Slider } from "../slider";
6
+
7
+ SetupMocks.resizeObserver();
8
+
9
+ describe("Slider", () => {
10
+ // Regression for #2593: steps below 1e-6 stringify in exponent notation
11
+ // ("1e-7"), which older radix versions counted as 0 decimal places, so
12
+ // every value was rounded to an integer and the slider never moved.
13
+ it.each([1e-6, 1e-7, 1e-9])("moves by a tiny step of %s", (step) => {
14
+ const onValueChange = vi.fn();
15
+ const { getByRole } = render(
16
+ <Slider
17
+ value={[step]}
18
+ min={step}
19
+ max={100 * step}
20
+ step={step}
21
+ onValueChange={onValueChange}
22
+ valueMap={(v) => v}
23
+ />,
24
+ );
25
+
26
+ fireEvent.keyDown(getByRole("slider"), { key: "ArrowRight" });
27
+
28
+ expect(onValueChange).toHaveBeenCalledWith([2 * step]);
29
+ });
30
+
31
+ it("forwards a direct accessible name to the thumb", () => {
32
+ const { getByRole } = render(
33
+ <Slider aria-label="Opacity" value={[50]} valueMap={(v) => v} />,
34
+ );
35
+ expect(getByRole("slider")).toHaveAccessibleName("Opacity");
36
+ });
37
+ });
@@ -0,0 +1,114 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+ import { AlertCircleIcon, CheckIcon, CircleIcon } from "lucide-react";
3
+ import type { ReactNode } from "react";
4
+ import { Spinner } from "@/components/icons/spinner";
5
+ import { cn } from "@/utils/cn";
6
+
7
+ export type ProgressState = "waiting" | "running" | "succeeded" | "failed";
8
+
9
+ export interface ProgressStage {
10
+ id: string;
11
+ state: ProgressState;
12
+ title: string;
13
+ description: string;
14
+ details?: ReactNode;
15
+ }
16
+
17
+ export function ProgressStatusIcon({
18
+ state,
19
+ variant = "icon",
20
+ }: {
21
+ state: ProgressState;
22
+ variant?: "icon" | "dot";
23
+ }) {
24
+ if (variant === "dot") {
25
+ return (
26
+ <span
27
+ aria-hidden={true}
28
+ className={cn(
29
+ "size-1.5 shrink-0 rounded-full",
30
+ {
31
+ waiting: "bg-muted-foreground",
32
+ running: "bg-muted-foreground motion-safe:animate-pulse",
33
+ succeeded: "bg-(--grass-9)",
34
+ failed: "bg-(--red-9)",
35
+ }[state],
36
+ )}
37
+ />
38
+ );
39
+ }
40
+ const Icon = {
41
+ waiting: CircleIcon,
42
+ running: Spinner,
43
+ succeeded: CheckIcon,
44
+ failed: AlertCircleIcon,
45
+ }[state];
46
+ return (
47
+ <Icon
48
+ aria-hidden={true}
49
+ className={cn(
50
+ "size-4 shrink-0",
51
+ {
52
+ waiting: "text-muted-foreground/50",
53
+ running: "motion-reduce:animate-none",
54
+ succeeded: "text-(--grass-11)",
55
+ failed: "text-(--red-11)",
56
+ }[state],
57
+ )}
58
+ />
59
+ );
60
+ }
61
+
62
+ export function ProgressStages({
63
+ stages,
64
+ label,
65
+ className,
66
+ }: {
67
+ stages: readonly ProgressStage[];
68
+ label: string;
69
+ className?: string;
70
+ }) {
71
+ return (
72
+ <ol aria-label={label} className={cn("space-y-6", className)}>
73
+ {stages.map((stage, index) => (
74
+ <li
75
+ key={stage.id}
76
+ aria-current={
77
+ stage.state === "running" || stage.state === "failed"
78
+ ? "step"
79
+ : undefined
80
+ }
81
+ className="relative flex items-start gap-3"
82
+ >
83
+ {index < stages.length - 1 && (
84
+ <span
85
+ aria-hidden={true}
86
+ className="absolute left-2 top-4.5 -bottom-6.5 border-l border-border"
87
+ />
88
+ )}
89
+ <span className="mt-0.5 text-muted-foreground">
90
+ <ProgressStatusIcon state={stage.state} />
91
+ </span>
92
+ <div className="min-w-0 flex-1">
93
+ <div
94
+ className={cn(
95
+ "text-sm",
96
+ stage.state === "failed"
97
+ ? "text-(--red-11)"
98
+ : stage.state === "waiting"
99
+ ? "text-muted-foreground"
100
+ : "text-foreground",
101
+ )}
102
+ >
103
+ {stage.title}
104
+ </div>
105
+ <p className="mt-1 text-xs text-muted-foreground">
106
+ {stage.description}
107
+ </p>
108
+ {stage.details}
109
+ </div>
110
+ </li>
111
+ ))}
112
+ </ol>
113
+ );
114
+ }
@@ -57,6 +57,8 @@ const Slider = React.forwardRef<
57
57
  <TooltipRoot delayDuration={0} open={open}>
58
58
  <TooltipTrigger asChild={true}>
59
59
  <SliderPrimitive.Thumb
60
+ aria-label={props["aria-label"]}
61
+ aria-labelledby={props["aria-labelledby"]}
60
62
  data-testid="thumb"
61
63
  className="block h-4 w-4 rounded-full shadow-xs-solid border border-blue-500 dark:border-primary dark:bg-accent bg-white hover:bg-blue-300 focus:bg-blue-300 transition-colors focus-visible:outline-hidden data-disabled:pointer-events-none data-disabled:opacity-50"
62
64
  onFocus={openActions.setTrue}
@@ -0,0 +1,120 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+
3
+ import { createStore } from "jotai";
4
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
5
+ import { toast } from "@/components/ui/use-toast";
6
+ import { type Chat, type ChatId, chatStateAtom } from "../state";
7
+
8
+ vi.mock("@/components/ui/use-toast", () => ({ toast: vi.fn() }));
9
+
10
+ const KEY = "marimo:ai:chatState:v5";
11
+ const chatId = "saved-chat" as ChatId;
12
+ const chat: Chat = {
13
+ id: chatId,
14
+ title: "Saved conversation",
15
+ messages: [
16
+ { id: "message", role: "user", parts: [{ type: "text", text: "Hello" }] },
17
+ ],
18
+ createdAt: 1,
19
+ updatedAt: 1,
20
+ };
21
+
22
+ const unsubscribers: (() => void)[] = [];
23
+
24
+ function loadStore() {
25
+ const store = createStore();
26
+ unsubscribers.push(store.sub(chatStateAtom, vi.fn()));
27
+ return store;
28
+ }
29
+
30
+ function fillStorage() {
31
+ vi.spyOn(Storage.prototype, "setItem").mockImplementation(() => {
32
+ throw new DOMException("Storage is full", "QuotaExceededError");
33
+ });
34
+ }
35
+
36
+ describe("chat history storage", () => {
37
+ beforeEach(() => {
38
+ window.localStorage.clear();
39
+ window.localStorage.setItem(
40
+ KEY,
41
+ JSON.stringify({
42
+ chats: [[chatId, chat]],
43
+ activeChatId: chatId,
44
+ }),
45
+ );
46
+ });
47
+
48
+ afterEach(() => {
49
+ for (const unsubscribe of unsubscribers.splice(0)) {
50
+ unsubscribe();
51
+ }
52
+ vi.restoreAllMocks();
53
+ });
54
+
55
+ it("loads saved history when storage is full", () => {
56
+ fillStorage();
57
+ expect(loadStore().get(chatStateAtom)).toEqual({
58
+ chats: new Map([[chatId, chat]]),
59
+ activeChatId: chatId,
60
+ });
61
+ });
62
+
63
+ it("warns on save failure without interrupting in-memory updates", () => {
64
+ const store = loadStore();
65
+ const savedHistory = window.localStorage.getItem(KEY);
66
+ fillStorage();
67
+ const updatedChat = { ...chat, title: "Unsaved conversation" };
68
+ expect(() =>
69
+ store.set(chatStateAtom, {
70
+ chats: new Map([[chatId, updatedChat]]),
71
+ activeChatId: chatId,
72
+ }),
73
+ ).not.toThrow();
74
+
75
+ expect(store.get(chatStateAtom).chats.get(chatId)).toEqual(updatedChat);
76
+ expect(window.localStorage.getItem(KEY)).toBe(savedHistory);
77
+ expect(toast).toHaveBeenCalledWith(
78
+ expect.objectContaining({
79
+ id: "chat-storage-error",
80
+ once: true,
81
+ title: "Chat history couldn't be saved",
82
+ }),
83
+ );
84
+ });
85
+
86
+ it("frees storage when history is cleared even if further writes fail", () => {
87
+ window.localStorage.setItem("unrelated-setting", "keep");
88
+ const store = loadStore();
89
+ fillStorage();
90
+ store.set(chatStateAtom, { chats: new Map(), activeChatId: null });
91
+
92
+ expect(window.localStorage.getItem(KEY)).toBeNull();
93
+ expect(window.localStorage.getItem("unrelated-setting")).toBe("keep");
94
+ expect(loadStore().get(chatStateAtom)).toEqual({
95
+ chats: new Map(),
96
+ activeChatId: null,
97
+ });
98
+ expect(toast).not.toHaveBeenCalled();
99
+ });
100
+
101
+ it("removes saved history when only an empty chat remains and writes fail", () => {
102
+ const store = loadStore();
103
+ const emptyChat = { ...chat, messages: [] };
104
+ const state = {
105
+ chats: new Map([[chatId, emptyChat]]),
106
+ activeChatId: chatId,
107
+ };
108
+ fillStorage();
109
+
110
+ store.set(chatStateAtom, state);
111
+
112
+ expect(window.localStorage.getItem(KEY)).toBeNull();
113
+ expect(store.get(chatStateAtom)).toEqual(state);
114
+ expect(loadStore().get(chatStateAtom)).toEqual({
115
+ chats: new Map(),
116
+ activeChatId: null,
117
+ });
118
+ expect(toast).not.toHaveBeenCalled();
119
+ });
120
+ });
@@ -4,7 +4,9 @@ import type { UIMessage } from "@ai-sdk/react";
4
4
  import type { FileUIPart } from "ai";
5
5
  import { atom } from "jotai";
6
6
  import { atomWithStorage } from "jotai/utils";
7
+ import { toast } from "@/components/ui/use-toast";
7
8
  import { uniqueBy } from "@/utils/arrays";
9
+ import { Logger } from "@/utils/Logger";
8
10
  import { adaptForLocalStorage, jotaiJsonStorage } from "@/utils/storage/jotai";
9
11
  import type { TypedString } from "@/utils/typed";
10
12
  import type { CellId } from "../cells/ids";
@@ -85,22 +87,46 @@ function removeEmptyChats(chatState: Map<ChatId, Chat>): Map<ChatId, Chat> {
85
87
  return result;
86
88
  }
87
89
 
90
+ const chatStorage = adaptForLocalStorage({
91
+ toSerializable: (value: ChatState) => ({
92
+ chats: [...removeEmptyChats(value.chats).entries()],
93
+ activeChatId: value.activeChatId,
94
+ }),
95
+ fromSerializable: (value) => ({
96
+ chats: new Map(value.chats),
97
+ activeChatId: value.activeChatId,
98
+ }),
99
+ });
100
+
88
101
  export const chatStateAtom = atomWithStorage<ChatState>(
89
102
  KEY,
90
103
  {
91
104
  chats: new Map(),
92
105
  activeChatId: null,
93
106
  },
94
- adaptForLocalStorage({
95
- toSerializable: (value: ChatState) => ({
96
- chats: [...removeEmptyChats(value.chats).entries()],
97
- activeChatId: value.activeChatId,
98
- }),
99
- fromSerializable: (value) => ({
100
- chats: new Map(value.chats),
101
- activeChatId: value.activeChatId,
102
- }),
103
- }),
107
+ {
108
+ ...chatStorage,
109
+ setItem: (key, value) => {
110
+ try {
111
+ // Removing the key frees space even when no further writes can fit.
112
+ if (removeEmptyChats(value.chats).size === 0) {
113
+ chatStorage.removeItem(key);
114
+ } else {
115
+ chatStorage.setItem(key, value);
116
+ }
117
+ } catch (error) {
118
+ Logger.warn("Could not save chat history", error);
119
+ toast({
120
+ id: "chat-storage-error",
121
+ once: true,
122
+ title: "Chat history couldn't be saved",
123
+ description:
124
+ "Try deleting old chats. New messages may be lost when you reload.",
125
+ variant: "danger",
126
+ });
127
+ }
128
+ },
129
+ },
104
130
  );
105
131
 
106
132
  export const activeChatAtom = atom(
@@ -178,6 +178,22 @@ function documentSnapshot(state: NotebookState) {
178
178
  }
179
179
 
180
180
  describe("document round-trip", () => {
181
+ it("applies a server transaction that deletes every cell", () => {
182
+ setup("a", "b");
183
+ applyTransactionChanges(
184
+ [
185
+ ...replica.cellIds.inOrderIds.map((cellId) => ({
186
+ type: "delete-cell" as const,
187
+ cellId,
188
+ })),
189
+ { type: "reorder-cells", cellIds: [] },
190
+ ],
191
+ replicaActions,
192
+ () => replica.cellIds.inOrderIds,
193
+ );
194
+ expect(documentSnapshot(replica)).toEqual([]);
195
+ });
196
+
181
197
  it("initial setup converges", () => {
182
198
  setup("a", "b", "c");
183
199
  expect(documentSnapshot(primary)).toEqual(documentSnapshot(replica));