@marimo-team/islands 0.25.3-dev31 → 0.25.3-dev311

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 (1036) hide show
  1. package/dist/{ConnectedDataExplorerComponent-7EaP9VWb.js → ConnectedDataExplorerComponent-DieU6L4x.js} +153 -177
  2. package/dist/{ErrorBoundary-DrVykO0s.js → ErrorBoundary-DdteSMhq.js} +79 -85
  3. package/dist/{ImageComparisonComponent-uU8FSKZE.js → ImageComparisonComponent-DgvSuY9B.js} +20 -20
  4. package/dist/{Plot-DdYOe1UK.js → Plot-Bfd0pJea.js} +2474 -3107
  5. package/dist/_baseSet-Bd5zh2yg.js +327 -0
  6. package/dist/{abnfDiagram-VCTEODGH-z_OSynK8.js → abnfDiagram-VCTEODGH-LOVrjbdp.js} +5 -5
  7. package/dist/any-language-editor-DMC2JE9_.js +75 -0
  8. package/dist/{apl-GEW9-ZP1.js → apl-stFrI2NB.js} +1 -1
  9. package/dist/{arc-7ra3iNdN.js → arc-4W6H62B5.js} +1 -1
  10. package/dist/architecture-7GRP2DOG-GlkXha5_.js +2 -0
  11. package/dist/{architectureDiagram-5GKGNRK7-Cs8J8BZr.js → architectureDiagram-5GKGNRK7-RZsm312h.js} +48 -64
  12. package/dist/{arrays-CN1djC4k.js → arrays-DoQ-AILx.js} +15 -27
  13. package/dist/{asciiarmor-BWNxzkG7.js → asciiarmor-DHwFuaIC.js} +1 -1
  14. package/dist/{asn1-Bcn2QutK.js → asn1-KIH4fwAq.js} +1 -1
  15. package/dist/assertNever-efcK_v3t.js +507 -0
  16. package/dist/assets/__vite-browser-external-BSp9tJ_k.js +1 -0
  17. package/dist/assets/worker-BdfPA0g5.js +171 -0
  18. package/dist/{blockDiagram-I7D4REHJ-Cg25UrxT.js → blockDiagram-I7D4REHJ-B4cvqWJn.js} +28 -39
  19. package/dist/{brainfuck-BQCYDheZ.js → brainfuck-UPAij4U9.js} +1 -1
  20. package/dist/{button-CvjkwdSk.js → button-BuSV-mLI.js} +64 -64
  21. package/dist/{c4Diagram-7LVT6UL2-BxFgrnNV.js → c4Diagram-7LVT6UL2-k-4SLDdM.js} +8 -8
  22. package/dist/{capabilities-CQ5IjhzL.js → capabilities-BiN90k7v.js} +2 -2
  23. package/dist/{channel-CPObtJXj.js → channel-CuTaWMxU.js} +1 -1
  24. package/dist/{chat-ui-BeKQyQQI.js → chat-ui-DkuxGEDp.js} +2153 -1880
  25. package/dist/{check-BMKBBrdc.js → check-DCQEEsUn.js} +1 -1
  26. package/dist/{chunk-4HAMMTFA-D4eFPyFh.js → chunk-4HAMMTFA-Bk_5S_m9.js} +6 -6
  27. package/dist/{chunk-75Z2AOVW-D7gxIs2Q.js → chunk-75Z2AOVW-9jQIEAxd.js} +4 -4
  28. package/dist/{chunk-DU6HZSFF-BwiyaNpg.js → chunk-DU6HZSFF-B20LZ-hE.js} +14 -22
  29. package/dist/{chunk-F27PBJKO-ufseIn5y.js → chunk-F27PBJKO-YjRXlNkT.js} +3 -3
  30. package/dist/{chunk-FOHPRMQF-BpYR8RqP.js → chunk-FOHPRMQF-ezmr_yWy.js} +49 -58
  31. package/dist/{chunk-GMAD6QVW-BhaJx0X3.js → chunk-GMAD6QVW-DokpSFdf.js} +16 -75
  32. package/dist/{chunk-GVQU2GXP-Cwbt-lF0.js → chunk-GVQU2GXP-DGvySV5W.js} +3 -3
  33. package/dist/{chunk-IMKFNOWR-aoSFasqF.js → chunk-IMKFNOWR-B6agbLjo.js} +8 -8
  34. package/dist/{chunk-L3NEJ4N5-n-zgIVSy.js → chunk-L3NEJ4N5-D9-ekjZc.js} +6 -6
  35. package/dist/{chunk-OSK3NFVY-DXa-Cxbn.js → chunk-OSK3NFVY-p7meGiY-.js} +8 -8
  36. package/dist/{chunk-P2QGCYS3-B_Zd3-X0.js → chunk-P2QGCYS3-74rxrEwb.js} +1 -1
  37. package/dist/{chunk-POPQ4Y6H-hYOXbYH_.js → chunk-POPQ4Y6H-EOTPk9Tj.js} +2 -2
  38. package/dist/{chunk-PWAF6VOD-CQw5qATZ.js → chunk-PWAF6VOD-oT_Qd2OU.js} +2 -2
  39. package/dist/{chunk-SHT3W25Y-CMaybO3O.js → chunk-SHT3W25Y-CfULafYG.js} +10 -10
  40. package/dist/{chunk-SVP7TREG-BNBrTAw1.js → chunk-SVP7TREG-DEOpPMJp.js} +3 -3
  41. package/dist/{chunk-TICWLB2K-DXNxvUJn.js → chunk-TICWLB2K-DaH-gkX5.js} +10 -10
  42. package/dist/{chunk-XXDRQBXY-Dnl5VBqG.js → chunk-XXDRQBXY-BM-YIt-_.js} +1 -1
  43. package/dist/{chunk-YOKDWASO-DKplTrBY.js → chunk-YOKDWASO-KxncHymC.js} +153 -378
  44. package/dist/classDiagram-ZZMXUADV-C0CyiWQ7.js +30 -0
  45. package/dist/classDiagram-v2-VYDZK3BY-xfIc9e2Y.js +30 -0
  46. package/dist/{clike-CxK9W55Z.js → clike-xU8sCVU1.js} +2 -6
  47. package/dist/{clojure-Dzcvwpxk.js → clojure-psoSEo36.js} +1 -1
  48. package/dist/{cmake-DYr-71zp.js → cmake-DDHBwlE7.js} +1 -1
  49. package/dist/{cobol-DC3g37Kq.js → cobol-C4qjDcIq.js} +1 -1
  50. package/dist/code-visibility-BzqsfUpE.js +131 -0
  51. package/dist/{coffeescript-C-eFwH5N.js → coffeescript-D6UgrGgo.js} +1 -1
  52. package/dist/{common-C6uebScP.js → common-CfI-FyP-.js} +10653 -10149
  53. package/dist/{commonlisp-CyaNXrJR.js → commonlisp-B0ChVjnu.js} +1 -1
  54. package/dist/{compiler-runtime-CldRdSsv.js → compiler-runtime-DNezxW8I.js} +2 -2
  55. package/dist/config-BVYA1P0C.js +660 -0
  56. package/dist/{copy-icon-BgUO8jsi.js → copy-icon-oHFcxX_y.js} +21 -22
  57. package/dist/{cose-bilkent-JH36ORCC-_LyRKVqm.js → cose-bilkent-JH36ORCC-B_Oz4vMP.js} +58 -71
  58. package/dist/createReducer-DHfURLCk.js +67 -0
  59. package/dist/{crystal-ih5ax5tQ.js → crystal-DZsc9Ue0.js} +1 -1
  60. package/dist/{css-CN_wP7_R.js → css-DkYRnQ9U.js} +1 -1
  61. package/dist/{cubic-OaEBhQPK.js → cubic-CA80xY_e.js} +6 -7
  62. package/dist/cynefin-OW5HDTMX-0-HehVvH.js +2 -0
  63. package/dist/{cynefinDiagram-5FMLGOSQ-DWHuKJs8.js → cynefinDiagram-5FMLGOSQ-DwGYhKu0.js} +5 -5
  64. package/dist/{cypher-CqGRcmZo.js → cypher-CpWPqgvy.js} +1 -1
  65. package/dist/{cytoscape.esm-jJhXJpLB.js → cytoscape.esm-BbeMznK5.js} +411 -512
  66. package/dist/{d-Cj0sOW2z.js → d-Bx2ggfYO.js} +1 -1
  67. package/dist/{dagre-BGSfXNEb.js → dagre-CpjuekF1.js} +550 -700
  68. package/dist/{dagre-GXQ25YYZ-DYLu-OCU.js → dagre-GXQ25YYZ-DfMaWJOV.js} +14 -16
  69. package/dist/{data-grid-overlay-editor-DhdeVwuk.js → data-grid-overlay-editor-BM-WjDgA.js} +5 -5
  70. package/dist/{data-grid-types-0PJ-9N5n.js → data-grid-types-CSElxhxo.js} +1 -1
  71. package/dist/{debounce-C3jyATpc.js → debounce-DrhhziJv.js} +2 -2
  72. package/dist/{diagram-S7CK7UJ4-PwwcUOHP.js → diagram-S7CK7UJ4-Bw_L87GZ.js} +7 -15
  73. package/dist/{diagram-UQ7AKVKN-CvJbL_IM.js → diagram-UQ7AKVKN-nsrs3Fbz.js} +5 -5
  74. package/dist/{diagram-VSXAHHWV-BJWcVVJY.js → diagram-VSXAHHWV-CodTjaL3.js} +6 -6
  75. package/dist/{diagram-VX7I27RA-B5RkqnzN.js → diagram-VX7I27RA-7ST9lEqP.js} +7 -7
  76. package/dist/{diagram-Z3DM3KII-CyijwTR2.js → diagram-Z3DM3KII-BnGte-HX.js} +5 -5
  77. package/dist/{dialog-Cc479ZEH.js → dialog-BIUdMLIS.js} +36 -36
  78. package/dist/{diff-B_hUkiat.js → diff-DNXaJS8v.js} +1 -1
  79. package/dist/{dist-D6d86eNJ.js → dist-B-Id1kt3.js} +48 -47
  80. package/dist/{dist-DiDibOYr.js → dist-BDw9g6PC.js} +152 -151
  81. package/dist/{dist-diIx5qJW.js → dist-B_EswY8r.js} +33 -32
  82. package/dist/{dist-DoE4XJBC.js → dist-B_xgcU0N.js} +9800 -10654
  83. package/dist/{dist-CLdpGQVr.js → dist-BcGGwW1q.js} +119 -121
  84. package/dist/dist-BdZQUzPS.js +850 -0
  85. package/dist/{dist-CN_BeG2I.js → dist-Bj8s59mu.js} +59 -58
  86. package/dist/{dist-CkTTIdBe.js → dist-C3dYgyiI.js} +337 -337
  87. package/dist/{dist-PXYI_yuP.js → dist-C6ttp2Iy.js} +24 -23
  88. package/dist/{dist-DUAh96QY.js → dist-CB9MzCXv.js} +1 -1
  89. package/dist/{dist-CSbh1PNP.js → dist-CCYz0qJ2.js} +24 -23
  90. package/dist/{dist-BMQf5zIS.js → dist-CDjivQ67.js} +124 -123
  91. package/dist/{dist-D-wwqlzJ.js → dist-CNT4u03u.js} +159 -158
  92. package/dist/{dist-F8Ep36rk.js → dist-DVVzH9mP.js} +60 -59
  93. package/dist/{dist-OR1OnN-y.js → dist-DlniJvh2.js} +32 -31
  94. package/dist/{dist-CSJ0MDRw.js → dist-Dq-hanx8.js} +57 -56
  95. package/dist/{dist-Lm-D-Vr6.js → dist-Du4PgaYp.js} +2 -2
  96. package/dist/{dist-C8fAKSH1.js → dist-FakvNY2e.js} +54 -53
  97. package/dist/{dist-BuaRHxOc.js → dist-K-qmZv0f.js} +45 -44
  98. package/dist/{dist-Cg7gzw-a.js → dist-NPImE_g9.js} +79 -78
  99. package/dist/{dist-CN8zI-XC.js → dist-PKX4HaX5.js} +239 -239
  100. package/dist/{dist-CrSP_H1M.js → dist-U4WlxEDL.js} +243 -243
  101. package/dist/{dist-BK4Oj99o.js → dist-UKKHsqHo.js} +19 -18
  102. package/dist/{dist-Bvs24R_E.js → dist-VRN9rDqa.js} +32 -31
  103. package/dist/{dist-BorMD-uX.js → dist-f1h5p-fp.js} +76 -75
  104. package/dist/{dist-BLfKmR-l.js → dist-h8Te4SvD.js} +17 -16
  105. package/dist/{dist-DBtSl3sf.js → dist-ymIUQ4tH.js} +48 -50
  106. package/dist/dropdown-menu-CAejOChE.js +5982 -0
  107. package/dist/{dtd-B8FGSWWe.js → dtd-D1YZQCVT.js} +1 -1
  108. package/dist/{dylan-DbIBYIrw.js → dylan-CxbG-PUm.js} +2 -2
  109. package/dist/{ebnfDiagram-PWID7BFC-DG90ELFp.js → ebnfDiagram-PWID7BFC-zaKyJ1YL.js} +5 -5
  110. package/dist/{ecl-DBmkdWAd.js → ecl-DIXH6vul.js} +1 -1
  111. package/dist/{eiffel-CcWSDDzK.js → eiffel-D0de-eQr.js} +1 -1
  112. package/dist/{elm-MC-b8a6C.js → elm-DrQrn4VD.js} +1 -1
  113. package/dist/{erDiagram-RLTQ6QDP-FMo_SpyX.js → erDiagram-RLTQ6QDP-Cx7g95FZ.js} +14 -14
  114. package/dist/{erlang-AdO1-xtV.js → erlang-2KpKpfC7.js} +1 -1
  115. package/dist/{error-banner-CFPHFw4h.js → error-banner-DkQNU4bn.js} +146 -146
  116. package/dist/error-entries-istW7Xbs.js +2626 -0
  117. package/dist/{esm-G4Fhsgng.js → esm-BUoz9Vvv.js} +4 -4
  118. package/dist/{esm-AMFssoNp.js → esm-BvhFNYzM.js} +333 -333
  119. package/dist/{esm-D2gTsXEV.js → esm-wKplZtOX.js} +580 -581
  120. package/dist/eventmodeling-NTZA5JFV-DoBvB4Lj.js +2 -0
  121. package/dist/{factor-Ys-13HOP.js → factor-Bwu3ZGOk.js} +1 -1
  122. package/dist/feedback-button-BGtR35Ev.js +371 -0
  123. package/dist/flowDiagram-HODETNUW-C7nIqaHP.js +15 -0
  124. package/dist/{formats-DRHUWwSK.js → formats-CMa7L3E8.js} +9 -9
  125. package/dist/{forth-DiMuIXFe.js → forth-DYatDpr6.js} +2 -3
  126. package/dist/{fortran-hkrF2eM4.js → fortran-n8mcQPkL.js} +1 -1
  127. package/dist/{ganttDiagram-EL5Y4UJY-Dh_4cBJZ.js → ganttDiagram-EL5Y4UJY-DyUab7aO.js} +17 -17
  128. package/dist/{gas-DlhqN9k8.js → gas-BUZOHBVw.js} +1 -1
  129. package/dist/{gherkin-0SlhEZ3t.js → gherkin-CrSjX26K.js} +1 -1
  130. package/dist/gitGraph-4MIJSDKK-Ch7kj-d2.js +2 -0
  131. package/dist/{gitGraphDiagram-WWUBYQGX-D5nSIzdE.js → gitGraphDiagram-WWUBYQGX-BPeDECwG.js} +4 -4
  132. package/dist/{glide-data-editor-E8Z7sC5t.js → glide-data-editor-BQCggnhx.js} +6619 -2875
  133. package/dist/{glide-utils-pisbYVjH.js → glide-utils-C4TKZeBA.js} +109 -78
  134. package/dist/{globals-D7sKfXY8.js → globals-DJuYoG49.js} +3 -3
  135. package/dist/{graphlib-BmY_CCV9.js → graphlib-nlwT3Wvy.js} +177 -220
  136. package/dist/{groovy-YhcTMyvX.js → groovy-IgGNjeU9.js} +1 -1
  137. package/dist/hasIn-C20JsQ2m.js +28 -0
  138. package/dist/{haskell-CodLxrtT.js → haskell-Bs1k3a9s.js} +1 -1
  139. package/dist/{haxe-CiRWNFkH.js → haxe-CQ8Yb3XF.js} +1 -1
  140. package/dist/{highlighted-body-KPVGNVTW-3Ziwfz-V.js → highlighted-body-KPVGNVTW-XbLtWlYz.js} +4 -4
  141. package/dist/{error-entries-CnqKxhU9.js → html-to-image-pPbR2cDx.js} +26259 -26556
  142. package/dist/{idl-DZgBq75I.js → idl-DjnxoAWx.js} +1 -1
  143. package/dist/info-A6RAGUB7-DCz_Egh9.js +2 -0
  144. package/dist/{infoDiagram-27XIBGKW-CRSDtRrd.js → infoDiagram-27XIBGKW-BTM_NXsn.js} +4 -4
  145. package/dist/isArrayLikeObject-B-HXCsex.js +626 -0
  146. package/dist/isEmpty-CdX7MTE1.js +14 -0
  147. package/dist/{ishikawaDiagram-5VMMS53U-DxLEUldB.js → ishikawaDiagram-5VMMS53U-K0FZrlvv.js} +5 -7
  148. package/dist/{javascript-BfNytHiM.js → javascript-BQtCoAFy.js} +2 -2
  149. package/dist/{journeyDiagram-3NMN7TZE-BaLqn-dZ.js → journeyDiagram-3NMN7TZE-D7hcb3Vx.js} +4 -4
  150. package/dist/{jsx-runtime-3BD1kT0s.js → jsx-runtime-6ZiU38At.js} +1 -1
  151. package/dist/{julia--tLIAG7q.js → julia-BfgtHJE5.js} +1 -1
  152. package/dist/{kanban-definition-UXKFOSKX-BLhvu8o4.js → kanban-definition-UXKFOSKX-ftznOyrz.js} +10 -10
  153. package/dist/{katex-BIdZGsyO.js → katex-BmPSeP5t.js} +15 -24
  154. package/dist/{linear-DWERh7eI.js → linear-BhKepphY.js} +2 -3
  155. package/dist/{livescript-CVPfYnY_.js → livescript-gIdRPKtg.js} +1 -1
  156. package/dist/{loader-BPdQhmlq.js → loader-BIlwkY0d.js} +3 -3
  157. package/dist/{lua-4Fa-T-qq.js → lua-CxFpWvnv.js} +2 -2
  158. package/dist/main.js +10728 -8440
  159. package/dist/{mathematica-CtYAy6GG.js → mathematica-QSveeEoW.js} +1 -1
  160. package/dist/{mbox-D0w9Ah1C.js → mbox-2JtaCPNT.js} +1 -1
  161. package/dist/{mermaid-Bjm6C1qN.js → mermaid-CNgH43ED.js} +170 -176
  162. package/dist/mermaid-HWGCJPDP-_lKUMvTM.js +1 -0
  163. package/dist/{mermaid-parser.core-DxuSfYwJ.js → mermaid-parser.core-DtOnl7m4.js} +19 -25
  164. package/dist/{mhchem-CdWPJK6g.js → mhchem-CjWbCsjZ.js} +1 -1
  165. package/dist/{micromark-factory-space-DGxAzmw8.js → micromark-factory-space-C5soVmaM.js} +1 -1
  166. package/dist/{mindmap-definition-YA3MSWOX-g2LwxnYQ.js → mindmap-definition-YA3MSWOX-CmzbxKfM.js} +13 -13
  167. package/dist/{mirc-De9aSAZM.js → mirc-BqD6ade4.js} +1 -1
  168. package/dist/{mllike-BbugeaY_.js → mllike-CT0hgEOO.js} +1 -1
  169. package/dist/{modelica-BjJwWw1F.js → modelica-DKKebcvq.js} +1 -1
  170. package/dist/{mscgen-DwiRH5ma.js → mscgen-BJCCsWjR.js} +1 -1
  171. package/dist/{mumps--plbDM9o.js → mumps-DVQAXZkU.js} +1 -1
  172. package/dist/{nginx-C4Df7REc.js → nginx-AP4LH2NN.js} +1 -1
  173. package/dist/{node-sql-parser-BiZOJ-FS.js → node-sql-parser-C9dndbfr.js} +7184 -7195
  174. package/dist/{now-jM8-M7IR.js → now-BKZCLE5P.js} +12 -13
  175. package/dist/{nsis-fiiOqLc3.js → nsis-Cah9xkdT.js} +1 -1
  176. package/dist/{ntriples-jV77I4k8.js → ntriples-CQoaLOV6.js} +2 -2
  177. package/dist/{number-overlay-editor-BV4UMoL2.js → number-overlay-editor-rhy7Cfzx.js} +14 -19
  178. package/dist/{objects-CzUgoMIF.js → objects-DCmMvZtn.js} +1 -3
  179. package/dist/{octave-Cztd01tF.js → octave-CeDj2bTn.js} +1 -1
  180. package/dist/{once-BtE-wKRL.js → once-NnpX_HnX.js} +1 -1
  181. package/dist/{oz-Bl8o3BDl.js → oz-BksQrg3k.js} +1 -1
  182. package/dist/packet-AYTQ26CC-DEMHgLPq.js +2 -0
  183. package/dist/{pascal-BO5JqysR.js → pascal-BKL17mpl.js} +1 -1
  184. package/dist/{pegDiagram-XKGWAZYB-CpMAt3Qs.js → pegDiagram-XKGWAZYB-DfTAWfGE.js} +5 -5
  185. package/dist/pencil-BUfnNZAE.js +10 -0
  186. package/dist/{perl-Drlh9s6m.js → perl-CacqJ-Ss.js} +1 -1
  187. package/dist/pick-DgpAbcwP.js +35 -0
  188. package/dist/pie-WAS4IAKB-DMjTEeHd.js +2 -0
  189. package/dist/{pieDiagram-E7YTZNPT-CVTthoZo.js → pieDiagram-E7YTZNPT-_kGQstZj.js} +7 -7
  190. package/dist/{pig-BWGR8wZw.js → pig-CXSGZ_K9.js} +1 -1
  191. package/dist/{powershell-DT99xlz_.js → powershell-DY_yIxBM.js} +3 -6
  192. package/dist/{process-output-DgQrilBD.js → process-output-BySO1nIs.js} +6 -6
  193. package/dist/{properties-Q-rkxld0.js → properties-Om0IDE07.js} +1 -1
  194. package/dist/{protobuf-DKyWZbs7.js → protobuf-B8nxxb4Q.js} +1 -1
  195. package/dist/{pug-42ZJUbEC.js → pug-lkUBPvVS.js} +3 -7
  196. package/dist/{puppet-B4UozHhh.js → puppet-DMkXsi4d.js} +1 -1
  197. package/dist/purify.es-DmnrIjg4.js +877 -0
  198. package/dist/{python-DREjAV__.js → python-JQVycMgr.js} +1 -1
  199. package/dist/{q-Bi63IpBO.js → q-DqE__nNB.js} +1 -1
  200. package/dist/{quadrantDiagram-AXDQQJYC-Blrm7V7_.js → quadrantDiagram-AXDQQJYC-DLJJzlPi.js} +3 -3
  201. package/dist/{r-DSwXWKMR.js → r-Cbliap7Q.js} +1 -1
  202. package/dist/radar-RG4KPBEZ-9PwdCvai.js +2 -0
  203. package/dist/railroad-74A4TZTK-8N9kF5jl.js +2 -0
  204. package/dist/railroad-abnf-HS5TGJTU-Sg6YmzlR.js +2 -0
  205. package/dist/railroad-ebnf-LZEXJU2U-CYwp2Oee.js +2 -0
  206. package/dist/railroad-peg-WCYAUIDC-BfDkAuQ3.js +2 -0
  207. package/dist/{railroadDiagram-O6MQD6OU-ao8cqqFB.js → railroadDiagram-O6MQD6OU-D41WmIff.js} +5 -5
  208. package/dist/{react-sHtZdjeP.js → react-CHbZqgBF.js} +1 -1
  209. package/dist/{react-dom-DUmH0GXv.js → react-dom-DhWGW7e0.js} +3 -3
  210. package/dist/{react-vega-BDpbvBCb.js → react-vega-DVr24mNk.js} +8514 -8597
  211. package/dist/{requirementDiagram-BXWQKSXE--J8vyfm-.js → requirementDiagram-BXWQKSXE-Bh53ZI3I.js} +13 -13
  212. package/dist/{reveal-component-CpEtzUCU.js → reveal-component-Deq9swmP.js} +1171 -1284
  213. package/dist/{rolldown-runtime-Cb76FRpK.js → rolldown-runtime-BPCzCO3I.js} +1 -1
  214. package/dist/{rpm-DPb1DeKM.js → rpm-DmT_LNpE.js} +1 -1
  215. package/dist/{ruby-U7fZA4DP.js → ruby-BHVZTtLW.js} +1 -1
  216. package/dist/{sankeyDiagram-P5KCCOFB-ELvOcnZH.js → sankeyDiagram-P5KCCOFB-Bd7wvmbF.js} +2 -2
  217. package/dist/{sas-CLk1JpTn.js → sas-CrG5N1he.js} +1 -1
  218. package/dist/{scheme-CT-2k2Tl.js → scheme-BHUnz-IB.js} +1 -1
  219. package/dist/select-XmXyen3r.js +1200 -0
  220. package/dist/{semaphore-89jsoHtS.js → semaphore-8KhQouXt.js} +4 -5
  221. package/dist/{sequenceDiagram-WJ2MYXX4-CiQbn62x.js → sequenceDiagram-WJ2MYXX4-DBX27dNm.js} +6 -6
  222. package/dist/{shell-BLO7fcsk.js → shell-C5IBmRU5.js} +1 -1
  223. package/dist/{sieve-nG3C7WNH.js → sieve-BzCnt_E6.js} +2 -2
  224. package/dist/{sizeCapture-INFHLROL-Dx5SpkQF.js → sizeCapture-INFHLROL-DBeZ20mI.js} +1 -1
  225. package/dist/{smalltalk-BROcZybA.js → smalltalk-DQFAQul3.js} +1 -1
  226. package/dist/{solr-mVltHNc5.js → solr-BiapYPCk.js} +1 -1
  227. package/dist/{sparql-Cv1Ksr4v.js → sparql-BcUKO1is.js} +1 -1
  228. package/dist/{spec-D_u2ipzF.js → spec-CSS9g9Su.js} +42 -12
  229. package/dist/{src-CA_m4ONl.js → src-D5uZaZib.js} +8 -14
  230. package/dist/{stateDiagram-D77RDMKH-DVEeGs5b.js → stateDiagram-D77RDMKH-CSYz2IZi.js} +18 -18
  231. package/dist/stateDiagram-v2-MP3YSRHH-DVLvtOqn.js +30 -0
  232. package/dist/{stex-Btf3omL8.js → stex-CQ_aCGTF.js} +1 -1
  233. package/dist/style.css +1 -1
  234. package/dist/{stylus-Dt4VvLXL.js → stylus-D4gHF5lg.js} +1 -1
  235. package/dist/{swift-DHsn_CVI.js → swift-CnvIBnbt.js} +1 -1
  236. package/dist/{swimlanes-42K2YHIH-CqkGoGqn.js → swimlanes-42K2YHIH-D59N0ktA.js} +37 -59
  237. package/dist/swimlanesDiagram-VR7AAH4N-CRgpmVSW.js +30 -0
  238. package/dist/{swiper-component-DKntyn8p.js → swiper-component-FBPvIqLf.js} +45 -78
  239. package/dist/{tcl-CV0OLBOl.js → tcl-DkOjjZYO.js} +1 -1
  240. package/dist/{textile-D320oKVM.js → textile-DgzBVSEW.js} +1 -1
  241. package/dist/{tiki-BF2aDPlB.js → tiki-MighF8A_.js} +1 -1
  242. package/dist/{time-BaMbJs4z.js → time-Cc-G3e31.js} +2 -2
  243. package/dist/{timeline-definition-24CTP7MA-DLRUNVAx.js → timeline-definition-24CTP7MA-C_xIIZDM.js} +5 -5
  244. package/dist/toDate-5qPtZ6HL.js +94 -0
  245. package/dist/toast-xEFvuGpt.js +491 -0
  246. package/dist/{toml-CaUN7UHo.js → toml-B0B7UAba.js} +1 -1
  247. package/dist/{tooltip-CtBZ5q8p.js → tooltip-BekOCQ3v.js} +326 -302
  248. package/dist/treeView-Q6P3EWNA-BQywp0E1.js +2 -0
  249. package/dist/treemap-WGGIJYW6-P2ZJnldw.js +2 -0
  250. package/dist/{troff-DQUFcClZ.js → troff-B4IRX71y.js} +1 -1
  251. package/dist/{ttcn-CQL1duJS.js → ttcn-B4tpvdJD.js} +1 -1
  252. package/dist/{ttcn-cfg-BMmEFJPu.js → ttcn-cfg-pfE-1FV8.js} +1 -1
  253. package/dist/{turtle-C3esgsRr.js → turtle-Bc97ufp6.js} +1 -1
  254. package/dist/use-restore-focus-DyrKLdSB.js +7602 -0
  255. package/dist/{use-vega-container-remeasure-Bz4PZMtt.js → use-vega-container-remeasure-DFBTESqc.js} +4 -8
  256. package/dist/{useAsyncData-BneN349z.js → useAsyncData-DMBliR6D.js} +21 -20
  257. package/dist/{useDateFormatter-DkajGwwd.js → useDateFormatter-Brx-S2sN.js} +4 -4
  258. package/dist/{useDeepCompareMemoize-Z_7R8wTt.js → useDeepCompareMemoize-CxywEb3a.js} +3 -3
  259. package/dist/useEvent-xDnF2X04.js +19 -0
  260. package/dist/{useIframeCapabilities-DBETvvPl.js → useIframeCapabilities--px_wpZL.js} +2 -2
  261. package/dist/useLifecycle-BMlFy2yY.js +112 -0
  262. package/dist/{vb-RK1eDXRl.js → vb-C5kpOY_q.js} +1 -1
  263. package/dist/{vbscript-BCOeM0de.js → vbscript-Ck0hgOg5.js} +1 -1
  264. package/dist/{vega-component-1lFfDE_8.js → vega-component-Bly2lDhz.js} +172 -177
  265. package/dist/{vega-embed-container-BgKnsDbB.js → vega-embed-container-DAT8OHp9.js} +7 -7
  266. package/dist/{vega-loader.browser-CpbZAXub.js → vega-loader.browser-Cnf7IHA8.js} +236 -239
  267. package/dist/{velocity-CZKOFbOI.js → velocity-2Doc6dgJ.js} +1 -1
  268. package/dist/{vennDiagram-4TSXK5OY-CypgoBVZ.js → vennDiagram-4TSXK5OY-DlOf0Mjs.js} +4 -4
  269. package/dist/{verilog-DqQTzVn8.js → verilog-CmZmYe4R.js} +2 -2
  270. package/dist/{vhdl-vQr2bfmi.js → vhdl-esMnUHZm.js} +1 -1
  271. package/dist/wardley-WFR3VGLG-CIBJ6O2G.js +2 -0
  272. package/dist/{wardleyDiagram-VM6X3IG4-B6xjiQ_g.js → wardleyDiagram-VM6X3IG4-zD_2guVe.js} +5 -5
  273. package/dist/{webidl-DzX7N40e.js → webidl-G_RlXG7G.js} +1 -1
  274. package/dist/{xquery-Cw_Q_hGR.js → xquery-IUQpMoMl.js} +1 -1
  275. package/dist/{xychartDiagram-S5SC5T6Z-e0PefDVs.js → xychartDiagram-S5SC5T6Z-CA0Dy1ZM.js} +8 -8
  276. package/dist/{yacas-DiC4jJBE.js → yacas-ObL0t2h9.js} +1 -1
  277. package/dist/{z80-CUOQDEJO.js → z80-jyuJhy0k.js} +1 -1
  278. package/package.json +16 -21
  279. package/src/__mocks__/document.tsx +63 -0
  280. package/src/__mocks__/executions.ts +219 -0
  281. package/src/__mocks__/notebook.ts +3 -7
  282. package/src/__mocks__/partial.ts +26 -0
  283. package/src/__mocks__/requests.ts +1 -5
  284. package/src/__tests__/CellStatus.test.tsx +25 -26
  285. package/src/__tests__/fixtures/pair-config.ts +1 -1
  286. package/src/__tests__/main.test.tsx +24 -1
  287. package/src/__tests__/module-entry.test.ts +44 -0
  288. package/src/__tests__/mount.test.ts +1 -21
  289. package/src/__tests__/{host-imports.test.ts → replica-imports.test.ts} +12 -11
  290. package/src/components/ai/__tests__/ai-model-dropdown.test.tsx +63 -0
  291. package/src/components/ai/__tests__/ai-utils.test.ts +8 -0
  292. package/src/components/ai/ai-model-dropdown.tsx +11 -6
  293. package/src/components/app-config/__tests__/state.test.tsx +50 -0
  294. package/src/components/app-config/ai-config.tsx +154 -150
  295. package/src/components/app-config/app-config-button.tsx +6 -5
  296. package/src/components/app-config/app-config-form.tsx +5 -9
  297. package/src/components/app-config/common.tsx +7 -9
  298. package/src/components/app-config/data-form.tsx +113 -116
  299. package/src/components/app-config/get-dirty-values.ts +4 -4
  300. package/src/components/app-config/mcp-config.tsx +30 -53
  301. package/src/components/app-config/user-config-form.css +91 -0
  302. package/src/components/app-config/user-config-form.tsx +266 -349
  303. package/src/components/chat/__tests__/capabilities-popover.test.tsx +0 -1
  304. package/src/components/chat/__tests__/chat-display.test.tsx +196 -0
  305. package/src/components/chat/__tests__/chat-markdown.test.tsx +43 -0
  306. package/src/components/chat/__tests__/chat-utils.test.ts +93 -1
  307. package/src/components/chat/__tests__/message-queue.test.tsx +17 -0
  308. package/src/components/chat/__tests__/notebook-access-selector.test.tsx +64 -0
  309. package/src/components/chat/__tests__/turn-timing.test.ts +84 -0
  310. package/src/components/chat/__tests__/use-assistant-turn.test.ts +95 -0
  311. package/src/components/chat/__tests__/user-message.test.tsx +27 -0
  312. package/src/components/chat/acp/__tests__/agent-panel-initialization.test.tsx +1 -1
  313. package/src/components/chat/acp/__tests__/agent-panel.test.tsx +22 -17
  314. package/src/components/chat/acp/__tests__/session-tabs.test.tsx +43 -0
  315. package/src/components/chat/acp/__tests__/state.test.ts +2 -2
  316. package/src/components/chat/acp/agent-panel.tsx +6 -3
  317. package/src/components/chat/acp/blocks.tsx +13 -12
  318. package/src/components/chat/acp/common.tsx +4 -5
  319. package/src/components/chat/acp/model-selector.tsx +1 -1
  320. package/src/components/chat/acp/session-tabs.tsx +8 -3
  321. package/src/components/chat/agent-activity.tsx +132 -0
  322. package/src/components/chat/capabilities-popover.tsx +2 -11
  323. package/src/components/chat/chat-components.tsx +9 -4
  324. package/src/components/chat/chat-display.tsx +131 -57
  325. package/src/components/chat/chat-history-popover.tsx +6 -1
  326. package/src/components/chat/chat-markdown.tsx +15 -0
  327. package/src/components/chat/chat-panel.tsx +216 -294
  328. package/src/components/chat/chat-typography.css +108 -0
  329. package/src/components/chat/chat-utils.ts +24 -35
  330. package/src/components/chat/notebook-access-selector.stories.tsx +22 -0
  331. package/src/components/chat/notebook-access-selector.tsx +100 -0
  332. package/src/components/chat/tool-call/__tests__/tool-labels.test.ts +76 -0
  333. package/src/components/chat/tool-call/__tests__/tool-step.test.tsx +57 -0
  334. package/src/components/chat/tool-call/shared.ts +6 -0
  335. package/src/components/chat/tool-call/tool-call-view.tsx +22 -76
  336. package/src/components/chat/tool-call/tool-labels.ts +172 -0
  337. package/src/components/chat/tool-call/tool-result.tsx +1 -1
  338. package/src/components/chat/tool-call/tool-step.tsx +145 -0
  339. package/src/components/chat/turn-timing.ts +73 -0
  340. package/src/components/chat/use-assistant-turn.ts +65 -0
  341. package/src/components/chat/use-chat-generation.ts +20 -0
  342. package/src/components/chat/user-message.tsx +145 -0
  343. package/src/components/data-table/TableBottomBar.tsx +4 -1
  344. package/src/components/data-table/TableTopBar.tsx +2 -0
  345. package/src/components/data-table/__tests__/chart-spec-model.test.ts +195 -195
  346. package/src/components/data-table/__tests__/column-explorer.test.tsx +27 -1
  347. package/src/components/data-table/__tests__/columns.test.tsx +105 -0
  348. package/src/components/data-table/__tests__/context-menu-interaction.test.tsx +130 -0
  349. package/src/components/data-table/__tests__/data-table.test.tsx +1 -0
  350. package/src/components/data-table/__tests__/date-popover.test.tsx +72 -0
  351. package/src/components/data-table/__tests__/export-actions.test.tsx +105 -0
  352. package/src/components/data-table/__tests__/keyboard-selection.test.tsx +188 -0
  353. package/src/components/data-table/__tests__/pagination.test.tsx +28 -1
  354. package/src/components/data-table/__tests__/search-highlight.test.tsx +109 -0
  355. package/src/components/data-table/__tests__/url-detector.test.tsx +74 -0
  356. package/src/components/data-table/cell-selection/feature.ts +2 -2
  357. package/src/components/data-table/cell-selection/types.ts +2 -2
  358. package/src/components/data-table/charts/__tests__/chart-panel.test.tsx +74 -1
  359. package/src/components/data-table/charts/__tests__/spec-snapshot.test.ts +20 -20
  360. package/src/components/data-table/charts/__tests__/spec.test.ts +78 -52
  361. package/src/components/data-table/charts/__tests__/storage.test.ts +4 -1
  362. package/src/components/data-table/charts/chart-spec/spec.ts +68 -43
  363. package/src/components/data-table/charts/charts.tsx +40 -30
  364. package/src/components/data-table/charts/storage.ts +16 -5
  365. package/src/components/data-table/column-explorer-panel/column-explorer.tsx +1 -1
  366. package/src/components/data-table/column-formatting/types.ts +1 -2
  367. package/src/components/data-table/column-summary/chart-spec-model.tsx +23 -16
  368. package/src/components/data-table/column-summary/column-summary.tsx +2 -4
  369. package/src/components/data-table/column-visibility-dropdown.tsx +8 -13
  370. package/src/components/data-table/columns.tsx +45 -46
  371. package/src/components/data-table/context-menu.tsx +36 -20
  372. package/src/components/data-table/data-table.tsx +17 -1
  373. package/src/components/data-table/date-popover.tsx +6 -4
  374. package/src/components/data-table/export-actions.tsx +76 -48
  375. package/src/components/data-table/pagination.tsx +44 -33
  376. package/src/components/data-table/range-focus/atoms.ts +4 -6
  377. package/src/components/data-table/range-focus/use-cell-range-selection.ts +65 -38
  378. package/src/components/data-table/range-focus/use-scroll-into-view.ts +21 -2
  379. package/src/components/data-table/renderers.tsx +16 -7
  380. package/src/components/data-table/row-viewer-panel/__tests__/row-viewer.test.tsx +24 -1
  381. package/src/components/data-table/row-viewer-panel/row-viewer.tsx +4 -4
  382. package/src/components/data-table/search-highlight.tsx +79 -0
  383. package/src/components/data-table/types.ts +1 -0
  384. package/src/components/data-table/url-detector.tsx +49 -9
  385. package/src/components/datasources/__tests__/column-actions.test.tsx +97 -0
  386. package/src/components/datasources/__tests__/column-preview.test.tsx +96 -5
  387. package/src/components/datasources/__tests__/datasources-interactions.test.tsx +181 -0
  388. package/src/components/datasources/__tests__/table-list.test.tsx +118 -0
  389. package/src/components/datasources/__tests__/utils.test.ts +57 -6
  390. package/src/components/datasources/column-preview.tsx +17 -12
  391. package/src/components/datasources/datasources.tsx +56 -43
  392. package/src/components/datasources/utils.ts +32 -23
  393. package/src/components/debugger/debugger-code.tsx +5 -0
  394. package/src/components/dependency-graph/custom-node.tsx +1 -1
  395. package/src/components/dependency-graph/dependency-graph-tree.tsx +8 -8
  396. package/src/components/dependency-graph/elements.ts +24 -21
  397. package/src/components/dependency-graph/minimap-content.tsx +15 -20
  398. package/src/components/dependency-graph/panels.tsx +4 -2
  399. package/src/components/dependency-graph/utils/__tests__/layout.test.ts +18 -11
  400. package/src/components/editor/SortableCell.tsx +1 -3
  401. package/src/components/editor/__tests__/Output.test.tsx +50 -32
  402. package/src/{core/attachments/__tests__/toast.test.tsx → components/editor/__tests__/agent-toast.test.tsx} +1 -1
  403. package/src/components/editor/__tests__/data-attributes.test.tsx +38 -26
  404. package/src/components/editor/__tests__/output-persistence.test.tsx +28 -9
  405. package/src/components/editor/__tests__/package-alert.test.tsx +22 -1
  406. package/src/components/editor/actions/__tests__/name-cell-input.test.tsx +69 -0
  407. package/src/components/editor/actions/__tests__/pair-with-agent-commands.test.ts +21 -40
  408. package/src/components/editor/actions/__tests__/pair-with-agent-modal.test.tsx +41 -14
  409. package/src/components/editor/actions/__tests__/pair-with-agent.test.tsx +6 -24
  410. package/src/components/editor/actions/__tests__/useCellActionButton.test.tsx +131 -0
  411. package/src/components/editor/actions/__tests__/useSetOutputsExpanded.test.ts +2 -1
  412. package/src/components/editor/actions/name-cell-input.tsx +4 -3
  413. package/src/components/editor/actions/pair-with-agent-commands.ts +10 -7
  414. package/src/components/editor/actions/pair-with-agent-modal.tsx +29 -30
  415. package/src/components/editor/actions/pair-with-agent.tsx +16 -39
  416. package/src/components/editor/actions/useCellActionButton.tsx +47 -35
  417. package/src/components/editor/actions/useConfigActions.tsx +3 -4
  418. package/src/components/editor/actions/useNotebookActions.tsx +25 -29
  419. package/src/components/editor/actions/useRestartKernel.tsx +1 -1
  420. package/src/components/editor/actions/useSetCodeVisibility.ts +11 -12
  421. package/src/components/editor/actions/useSetOutputsExpanded.ts +15 -23
  422. package/src/components/editor/ai/ai-completion-editor.tsx +2 -1
  423. package/src/components/editor/ai/completion-handlers.tsx +0 -37
  424. package/src/components/editor/ai/prompt-input.tsx +189 -0
  425. package/src/components/editor/alerts/__tests__/connection-notice.test.tsx +1 -1
  426. package/src/components/editor/alerts/connection-notice.tsx +1 -1
  427. package/src/components/editor/alerts/startup-logs-alert.tsx +1 -0
  428. package/src/components/editor/alerts/stdin-blocking-alert.tsx +4 -2
  429. package/src/components/editor/app-container.tsx +1 -1
  430. package/src/components/editor/boundary/__tests__/ErrorBoundary.test.tsx +1 -1
  431. package/src/components/editor/cell/CellStatus.tsx +28 -23
  432. package/src/components/editor/cell/CreateCellButton.tsx +15 -21
  433. package/src/components/editor/cell/DeleteButton.tsx +3 -2
  434. package/src/components/editor/cell/RunButton.tsx +18 -8
  435. package/src/components/editor/cell/StagedAICell.tsx +52 -137
  436. package/src/components/editor/cell/StopButton.tsx +2 -2
  437. package/src/components/editor/cell/__tests__/useRunCells.test.tsx +154 -0
  438. package/src/components/editor/cell/__tests__/useShouldShowInterrupt.test.ts +39 -0
  439. package/src/components/editor/cell/cell-actions.tsx +12 -1
  440. package/src/components/editor/cell/cell-context-menu.tsx +4 -1
  441. package/src/components/editor/cell/code/__tests__/language-toggle.test.tsx +54 -0
  442. package/src/components/editor/cell/code/cell-editor.tsx +65 -169
  443. package/src/components/editor/cell/code/language-toggle.tsx +8 -7
  444. package/src/components/editor/cell/collapse.tsx +16 -6
  445. package/src/components/editor/cell/useAddCell.ts +4 -8
  446. package/src/components/editor/cell/useDeleteCell.tsx +10 -36
  447. package/src/components/editor/cell/useRunCells.ts +72 -58
  448. package/src/components/editor/cell/useShouldShowInterrupt.ts +2 -12
  449. package/src/components/editor/cell/useSplitCell.tsx +10 -6
  450. package/src/components/editor/chrome/components/__tests__/feedback-button.test.tsx +1 -1
  451. package/src/components/editor/chrome/components/feedback-button.tsx +2 -8
  452. package/src/components/editor/chrome/panels/__tests__/packages-panel.test.tsx +31 -2
  453. package/src/components/editor/chrome/panels/__tests__/runtime-details.test.tsx +1 -1
  454. package/src/components/editor/chrome/panels/__tests__/sandbox-recovery.test.tsx +1 -1
  455. package/src/components/editor/chrome/panels/cache-panel.tsx +1 -0
  456. package/src/components/editor/chrome/panels/dependency-graph-panel.tsx +1 -1
  457. package/src/components/editor/chrome/panels/logs-panel.tsx +2 -1
  458. package/src/components/editor/chrome/panels/outline/__tests__/outline-keyboard.test.tsx +84 -0
  459. package/src/components/editor/chrome/panels/outline/floating-outline.tsx +39 -14
  460. package/src/components/editor/chrome/panels/outline/useActiveOutline.tsx +3 -2
  461. package/src/components/editor/chrome/panels/packages-panel.tsx +4 -7
  462. package/src/components/editor/chrome/panels/panel-header.tsx +13 -0
  463. package/src/components/editor/chrome/panels/secrets-panel.tsx +1 -0
  464. package/src/components/editor/chrome/panels/session-panel.tsx +1 -1
  465. package/src/components/editor/chrome/panels/snippets-panel.tsx +10 -12
  466. package/src/components/editor/chrome/panels/variable-panel.tsx +1 -5
  467. package/src/components/editor/chrome/types.ts +1 -1
  468. package/src/components/editor/chrome/wrapper/__tests__/attachment-status.test.tsx +7 -9
  469. package/src/components/editor/chrome/wrapper/__tests__/document-sync-status.test.tsx +92 -0
  470. package/src/components/editor/chrome/wrapper/__tests__/pending-ai-cells.test.tsx +265 -37
  471. package/src/components/editor/chrome/wrapper/__tests__/useAskAiAboutCell.test.tsx +58 -0
  472. package/src/components/editor/chrome/wrapper/app-chrome.tsx +91 -74
  473. package/src/components/editor/chrome/wrapper/footer-items/attachment-status.tsx +4 -4
  474. package/src/components/editor/chrome/wrapper/footer-items/backend-status.tsx +1 -1
  475. package/src/components/editor/chrome/wrapper/footer-items/document-sync-status.tsx +54 -0
  476. package/src/components/editor/chrome/wrapper/footer-items/lsp-status.tsx +1 -1
  477. package/src/components/editor/chrome/wrapper/footer-items/machine-stats.tsx +1 -1
  478. package/src/components/editor/chrome/wrapper/footer-items/runtime-settings.tsx +1 -7
  479. package/src/components/editor/chrome/wrapper/footer.tsx +2 -2
  480. package/src/components/editor/chrome/wrapper/minimap-state.ts +1 -1
  481. package/src/components/editor/chrome/wrapper/pending-ai-cells.tsx +143 -72
  482. package/src/components/editor/chrome/wrapper/pending-ai-changes-badge.tsx +25 -0
  483. package/src/components/editor/chrome/wrapper/sidebar.tsx +8 -4
  484. package/src/components/editor/chrome/wrapper/storage.ts +1 -1
  485. package/src/components/editor/chrome/wrapper/useAskAiAboutCell.ts +36 -0
  486. package/src/components/editor/columns/__tests__/cell-column.test.tsx +1 -1
  487. package/src/components/editor/columns/cell-column.tsx +1 -1
  488. package/src/components/editor/columns/sortable-column.tsx +2 -2
  489. package/src/components/editor/connections/components.tsx +5 -10
  490. package/src/components/editor/controls/Controls.tsx +4 -4
  491. package/src/components/editor/controls/__tests__/keyboard-shortcuts.test.tsx +61 -0
  492. package/src/components/editor/controls/__tests__/notebook-menu-dropdown.test.tsx +10 -4
  493. package/src/components/editor/controls/keyboard-shortcuts.tsx +14 -5
  494. package/src/components/editor/documentation.css +34 -11
  495. package/src/components/editor/errors/__tests__/send-error-report-button.test.tsx +26 -22
  496. package/src/components/editor/errors/auto-fix.tsx +4 -8
  497. package/src/components/editor/errors/send-error-report-button.tsx +3 -6
  498. package/src/components/editor/file-tree/__tests__/file-explorer-interactions.test.tsx +6 -0
  499. package/src/components/editor/file-tree/__tests__/file-explorer-navigation.test.tsx +47 -0
  500. package/src/components/editor/file-tree/__tests__/use-file-search.test.tsx +91 -0
  501. package/src/components/editor/file-tree/file-explorer.tsx +48 -15
  502. package/src/components/editor/file-tree/file-name-input.tsx +1 -0
  503. package/src/components/editor/file-tree/file-viewer.tsx +4 -2
  504. package/src/components/editor/file-tree/use-file-search.ts +35 -21
  505. package/src/components/editor/header/__tests__/filename-form.test.tsx +1 -4
  506. package/src/components/editor/header/__tests__/status.test.tsx +5 -3
  507. package/src/components/editor/header/app-header.tsx +1 -1
  508. package/src/components/editor/header/filename-form.tsx +1 -1
  509. package/src/components/editor/header/status.tsx +44 -22
  510. package/src/components/editor/links/__tests__/cell-link.test.tsx +148 -0
  511. package/src/components/editor/links/cell-link-list.tsx +1 -1
  512. package/src/components/editor/links/cell-link.tsx +21 -11
  513. package/src/components/editor/navigation/__tests__/clipboard.test.ts +60 -38
  514. package/src/components/editor/navigation/__tests__/navigation.test.ts +109 -85
  515. package/src/components/editor/navigation/__tests__/selection.test.ts +43 -21
  516. package/src/components/editor/navigation/clipboard.ts +17 -14
  517. package/src/components/editor/navigation/focus-utils.ts +23 -4
  518. package/src/components/editor/navigation/multi-cell-action-toolbar.tsx +17 -33
  519. package/src/components/editor/navigation/navigation.ts +74 -72
  520. package/src/components/editor/navigation/selection.ts +30 -29
  521. package/src/components/editor/notebook-banner.tsx +1 -0
  522. package/src/components/editor/notebook-cell.tsx +158 -172
  523. package/src/components/editor/output/MarimoErrorOutput.tsx +41 -4
  524. package/src/components/editor/output/MarimoTracebackOutput.tsx +19 -17
  525. package/src/components/editor/output/Outputs.css +8 -0
  526. package/src/components/editor/output/VideoOutput.tsx +6 -0
  527. package/src/components/editor/output/__tests__/VideoOutput.test.tsx +131 -0
  528. package/src/components/editor/output/__tests__/traceback.test.tsx +27 -1
  529. package/src/components/editor/output/ansi-reduce.ts +40 -20
  530. package/src/components/editor/output/console/ConsoleOutput.tsx +19 -25
  531. package/src/components/editor/output/console/__tests__/ConsoleOutput.test.tsx +125 -69
  532. package/src/components/editor/package-alert.tsx +14 -7
  533. package/src/components/editor/renderers/__tests__/add-cell-buttons.test.tsx +18 -0
  534. package/src/components/editor/renderers/cell-array.tsx +32 -100
  535. package/src/components/editor/renderers/grid-layout/__tests__/grid-layout.test.tsx +75 -0
  536. package/src/components/editor/renderers/grid-layout/grid-layout.tsx +28 -22
  537. package/src/components/editor/renderers/slides-layout/__tests__/plugin.test.ts +0 -4
  538. package/src/components/editor/renderers/slides-layout/slides-layout.tsx +1 -1
  539. package/src/components/editor/renderers/vertical-layout/__tests__/useFocusFirstEditor.test.ts +4 -4
  540. package/src/components/editor/renderers/vertical-layout/sidebar/toggle.tsx +7 -1
  541. package/src/components/editor/renderers/vertical-layout/useFocusFirstEditor.ts +1 -1
  542. package/src/components/editor/renderers/vertical-layout/vertical-layout.tsx +19 -37
  543. package/src/components/editor/stdin-blocking-alert.tsx +4 -2
  544. package/src/components/home/components.tsx +17 -31
  545. package/src/components/icons/__tests__/large-spinner.test.tsx +39 -0
  546. package/src/components/icons/large-spinner.tsx +3 -14
  547. package/src/components/icons/spinner.tsx +1 -1
  548. package/src/components/markdown/__tests__/markdown-renderer.test.tsx +32 -2
  549. package/src/components/markdown/markdown-renderer.tsx +43 -28
  550. package/src/components/mcp/mcp-status-indicator.tsx +18 -14
  551. package/src/components/pages/__tests__/home-page.test.tsx +116 -0
  552. package/src/components/pages/edit-page.tsx +19 -17
  553. package/src/components/pages/home-page.tsx +164 -91
  554. package/src/components/scratchpad/scratchpad.test.tsx +89 -0
  555. package/src/components/scratchpad/scratchpad.tsx +47 -33
  556. package/src/components/scratchpad/state.ts +7 -0
  557. package/src/components/slides/__tests__/minimap-actions.test.tsx +22 -29
  558. package/src/components/slides/__tests__/minimap.test.ts +38 -19
  559. package/src/components/slides/__tests__/slide-scroll-hint.test.tsx +37 -0
  560. package/src/components/slides/minimap.tsx +22 -14
  561. package/src/components/slides/reveal-component.tsx +73 -36
  562. package/src/components/slides/reveal-slides.css +5 -4
  563. package/src/components/slides/slide-cell-view.tsx +37 -34
  564. package/src/components/slides/slide-form.tsx +1 -0
  565. package/src/components/slides/slide-scroll-hint.tsx +3 -1
  566. package/src/components/slides/slide.tsx +3 -4
  567. package/src/components/sort/SortableCellsProvider.tsx +8 -25
  568. package/src/components/static-html/__tests__/static-banner.test.tsx +1 -1
  569. package/src/components/tracing/tracing-keyboard.test.tsx +85 -0
  570. package/src/components/tracing/tracing.tsx +46 -42
  571. package/src/components/ui/__tests__/draggable-popover.test.tsx +24 -0
  572. package/src/components/ui/__tests__/fullscreen.test.tsx +44 -2
  573. package/src/components/ui/__tests__/range-slider.test.tsx +165 -0
  574. package/src/components/ui/alert-dialog.tsx +1 -1
  575. package/src/components/ui/draggable-popover.tsx +24 -2
  576. package/src/components/ui/fullscreen.tsx +25 -1
  577. package/src/components/ui/range-slider.tsx +22 -9
  578. package/src/components/ui/toast.tsx +1 -1
  579. package/src/core/MarimoApp.tsx +3 -1
  580. package/src/core/ai/__tests__/staged-cells.test.ts +90 -609
  581. package/src/core/ai/context/context.ts +2 -0
  582. package/src/core/ai/context/providers/__tests__/cell-output.test.ts +8 -12
  583. package/src/core/ai/context/providers/__tests__/cell.test.ts +49 -0
  584. package/src/core/ai/context/providers/cell-output.ts +2 -2
  585. package/src/core/ai/context/providers/cell.ts +54 -0
  586. package/src/core/ai/context/providers/datasource.ts +6 -2
  587. package/src/core/ai/staged-cells.ts +56 -323
  588. package/src/core/ai/state.ts +3 -0
  589. package/src/core/ai/tools/__tests__/edit-notebook-tool.test.ts +47 -91
  590. package/src/core/ai/tools/__tests__/registry.test.ts +17 -0
  591. package/src/core/ai/tools/base.ts +18 -15
  592. package/src/core/ai/tools/edit-notebook-tool.ts +86 -80
  593. package/src/core/ai/tools/registry.ts +13 -10
  594. package/src/core/ai/tools/sample-tool.ts +6 -7
  595. package/src/core/cells/__tests__/__snapshots__/cells.test.ts.snap +6 -529
  596. package/src/core/cells/__tests__/actions.test.ts +623 -35
  597. package/src/core/cells/__tests__/add-missing-import.test.ts +7 -8
  598. package/src/core/cells/__tests__/arrange.test.ts +432 -0
  599. package/src/core/cells/__tests__/cell.test.ts +148 -150
  600. package/src/core/cells/__tests__/cells.test.ts +384 -2930
  601. package/src/core/cells/__tests__/collapseConsoleOutputs.test.ts +69 -0
  602. package/src/core/cells/__tests__/document.test.ts +158 -0
  603. package/src/core/cells/__tests__/editor.test.ts +57 -0
  604. package/src/core/cells/__tests__/flush-document.test.ts +40 -0
  605. package/src/core/cells/__tests__/harness.ts +109 -0
  606. package/src/core/cells/__tests__/layout.test.ts +176 -0
  607. package/src/core/cells/__tests__/logs.test.ts +0 -13
  608. package/src/core/cells/__tests__/notebook-outline.test.ts +23 -14
  609. package/src/core/cells/__tests__/outputs.test.tsx +71 -53
  610. package/src/core/cells/__tests__/pending-delete-service.test.tsx +11 -20
  611. package/src/core/cells/__tests__/session.test.ts +546 -211
  612. package/src/core/cells/__tests__/utils.test.ts +135 -337
  613. package/src/core/cells/actions.ts +677 -6
  614. package/src/core/cells/add-missing-import.ts +48 -47
  615. package/src/core/cells/arrange.ts +529 -0
  616. package/src/core/cells/cell.ts +79 -146
  617. package/src/core/cells/cells.ts +106 -1459
  618. package/src/core/cells/columns.ts +38 -0
  619. package/src/core/cells/document.ts +167 -0
  620. package/src/core/cells/edit.ts +30 -0
  621. package/src/core/cells/editor.ts +82 -0
  622. package/src/core/cells/focus.ts +27 -6
  623. package/src/core/cells/layout.ts +221 -0
  624. package/src/core/cells/outputs.ts +12 -28
  625. package/src/core/cells/pending-delete-service.ts +8 -14
  626. package/src/core/cells/scrollCellIntoView.ts +6 -0
  627. package/src/core/cells/session.ts +166 -68
  628. package/src/core/cells/types.ts +21 -51
  629. package/src/core/cells/utils.ts +85 -87
  630. package/src/core/codemirror/__tests__/format.test.ts +4 -35
  631. package/src/core/codemirror/__tests__/setup.test.ts +67 -33
  632. package/src/core/codemirror/ai/__tests__/resources.test.ts +117 -0
  633. package/src/core/codemirror/ai/resources.ts +1 -1
  634. package/src/core/codemirror/cells/__tests__/extensions.test.ts +2 -6
  635. package/src/core/codemirror/cells/extensions.ts +18 -30
  636. package/src/core/codemirror/cells/state.ts +2 -6
  637. package/src/core/codemirror/cm.ts +5 -1
  638. package/src/core/codemirror/config/types.ts +1 -1
  639. package/src/core/codemirror/copilot/__tests__/completion-integration.test.ts +4 -0
  640. package/src/core/codemirror/copilot/__tests__/getCodes.test.ts +13 -10
  641. package/src/core/codemirror/copilot/getCodes.ts +2 -2
  642. package/src/core/codemirror/format.ts +6 -23
  643. package/src/core/codemirror/keymaps/vim.ts +4 -8
  644. package/src/core/codemirror/language/__tests__/extension.test.ts +7 -3
  645. package/src/core/codemirror/language/__tests__/sql.test.ts +22 -20
  646. package/src/core/codemirror/language/__tests__/utils.test.ts +194 -17
  647. package/src/core/codemirror/language/cell-code.ts +114 -0
  648. package/src/core/codemirror/language/extension.ts +52 -35
  649. package/src/core/codemirror/language/languages/markdown.ts +8 -6
  650. package/src/core/codemirror/language/languages/python.ts +19 -13
  651. package/src/core/codemirror/language/languages/sql/sql.ts +16 -24
  652. package/src/core/codemirror/language/panel/panel.tsx +1 -0
  653. package/src/core/codemirror/language/types.ts +7 -7
  654. package/src/core/codemirror/language/utils.ts +9 -39
  655. package/src/core/codemirror/lsp/__tests__/notebook-lsp.test.ts +1 -2
  656. package/src/core/codemirror/lsp/notebook-lsp.ts +6 -5
  657. package/src/core/codemirror/lsp/utils.ts +1 -1
  658. package/src/core/codemirror/misc/__tests__/paste.test.ts +3 -1
  659. package/src/core/codemirror/misc/paste.ts +1 -1
  660. package/src/core/codemirror/placeholder/__tests__/extensions.test.ts +75 -0
  661. package/src/core/codemirror/placeholder/extensions.ts +80 -19
  662. package/src/core/codemirror/readonly/__tests__/extension.test.ts +1 -1
  663. package/src/core/codemirror/readonly/extension.ts +2 -2
  664. package/src/core/codemirror/utils.ts +1 -0
  665. package/src/core/config/__tests__/app-config.test.ts +64 -0
  666. package/src/core/config/__tests__/config-schema.test.ts +177 -17
  667. package/src/core/config/config-schema.ts +116 -18
  668. package/src/core/config/config.ts +65 -20
  669. package/src/core/config/feature-flag.tsx +0 -2
  670. package/src/core/datasets/__tests__/data-source-discovery.test.ts +5 -5
  671. package/src/core/datasets/data-source-discovery.ts +4 -6
  672. package/src/core/documentation/doc-lookup.ts +1 -1
  673. package/src/core/dom/outline.ts +4 -1
  674. package/src/core/edit-app.tsx +22 -28
  675. package/src/core/errors/__tests__/error-entries.test.ts +40 -1
  676. package/src/core/errors/error-entries.ts +6 -4
  677. package/src/core/executions/__tests__/atoms.test.ts +282 -0
  678. package/src/core/executions/__tests__/freshness.test.ts +482 -0
  679. package/src/core/executions/__tests__/hooks.test.tsx +150 -0
  680. package/src/core/executions/__tests__/input.test.ts +86 -0
  681. package/src/core/executions/__tests__/output.test.ts +266 -0
  682. package/src/core/executions/__tests__/run.test.ts +390 -0
  683. package/src/core/executions/__tests__/select.test.ts +343 -0
  684. package/src/core/executions/atoms.ts +378 -0
  685. package/src/core/executions/freshness.ts +171 -0
  686. package/src/core/executions/hooks.ts +86 -0
  687. package/src/core/executions/index.ts +49 -0
  688. package/src/core/executions/input.ts +55 -0
  689. package/src/core/executions/output.ts +242 -0
  690. package/src/core/executions/run.ts +120 -0
  691. package/src/core/executions/select.ts +210 -0
  692. package/src/core/export/__tests__/hooks.test.ts +0 -5
  693. package/src/core/export/hooks.ts +1 -1
  694. package/src/core/export/layout.ts +2 -2
  695. package/src/core/hotkeys/actions.ts +2 -4
  696. package/src/core/hotkeys/hotkeys.ts +2 -1
  697. package/src/core/islands/__tests__/bootstrap.test.ts +69 -17
  698. package/src/core/islands/__tests__/bridge.test.ts +104 -65
  699. package/src/core/islands/bootstrap.ts +53 -54
  700. package/src/core/islands/bridge.ts +88 -41
  701. package/src/core/islands/components/IslandControls.tsx +15 -7
  702. package/src/core/islands/components/__tests__/IslandControls.test.tsx +36 -51
  703. package/src/core/islands/components/__tests__/web-components.test.tsx +63 -0
  704. package/src/core/islands/components/output-wrapper.tsx +5 -5
  705. package/src/core/islands/components/web-components.tsx +12 -1
  706. package/src/core/islands/worker/__tests__/controller.test.ts +62 -4
  707. package/src/core/islands/worker/controller.ts +4 -10
  708. package/src/core/islands/worker/worker.tsx +78 -52
  709. package/src/core/kernel/__tests__/RuntimeState.test.ts +1 -1
  710. package/src/core/kernel/__tests__/handlers.test.ts +7 -157
  711. package/src/core/kernel/handlers.ts +13 -79
  712. package/src/core/kernel/state.ts +0 -15
  713. package/src/core/lifecycle/render-policy.ts +12 -26
  714. package/src/core/meta/__tests__/code-visibility.test.tsx +78 -70
  715. package/src/core/meta/code-visibility.ts +18 -9
  716. package/src/core/network/__tests__/connection.test.ts +1 -1
  717. package/src/core/network/__tests__/requests-lazy.test.ts +20 -32
  718. package/src/core/network/__tests__/requests-toasting.test.tsx +7 -7
  719. package/src/core/network/connection-notice.ts +1 -1
  720. package/src/core/network/connection.ts +1 -1
  721. package/src/core/network/requests-lazy.ts +5 -9
  722. package/src/core/network/requests-network.ts +5 -40
  723. package/src/core/network/requests-static.ts +1 -5
  724. package/src/core/network/requests-toasting.tsx +1 -5
  725. package/src/core/network/types.ts +6 -16
  726. package/src/core/network/useConnectionNotice.ts +8 -2
  727. package/src/core/notebook/__tests__/operations.test.ts +51 -0
  728. package/src/core/notebook/attachments.ts +38 -0
  729. package/src/core/notebook/document/__tests__/codemirror.test.ts +765 -0
  730. package/src/core/notebook/document/__tests__/draft.test.ts +363 -0
  731. package/src/core/notebook/document/__tests__/fixtures.ts +92 -0
  732. package/src/core/notebook/document/__tests__/hooks.test.tsx +391 -0
  733. package/src/core/notebook/document/__tests__/lifecycle-scenarios.test.ts +61 -0
  734. package/src/core/notebook/document/__tests__/model.test.ts +247 -0
  735. package/src/core/notebook/document/__tests__/protocol-fixtures.ts +38 -0
  736. package/src/core/notebook/document/__tests__/recovery-scenarios.test.ts +230 -0
  737. package/src/core/notebook/document/__tests__/scenario-fixture.ts +43 -0
  738. package/src/core/notebook/document/__tests__/scenarios.test.ts +205 -0
  739. package/src/core/notebook/document/__tests__/state.test.ts +459 -0
  740. package/src/core/notebook/document/__tests__/submission.test.ts +203 -0
  741. package/src/core/notebook/document/__tests__/test-host.test.ts +92 -0
  742. package/src/core/notebook/document/__tests__/test-host.ts +247 -0
  743. package/src/core/notebook/document/__tests__/test-notebook.ts +149 -0
  744. package/src/core/notebook/document/__tests__/user.ts +61 -0
  745. package/src/core/notebook/document/codemirror.ts +216 -0
  746. package/src/core/notebook/document/draft.ts +502 -0
  747. package/src/core/notebook/document/hooks.tsx +118 -0
  748. package/src/core/notebook/document/index.ts +24 -0
  749. package/src/core/notebook/document/model.ts +102 -0
  750. package/src/core/notebook/document/select.ts +41 -0
  751. package/src/core/notebook/document/state.ts +378 -0
  752. package/src/core/notebook/document/sync.ts +369 -0
  753. package/src/core/notebook/index.ts +19 -0
  754. package/src/core/notebook/operations.ts +30 -0
  755. package/src/core/notebook/replica/AGENTS.md +11 -0
  756. package/src/core/{host → notebook/replica}/__tests__/attachments.test.ts +9 -10
  757. package/src/core/{host → notebook/replica}/__tests__/document.test.ts +18 -16
  758. package/src/core/notebook/replica/__tests__/executions.test.ts +200 -0
  759. package/src/core/notebook/replica/__tests__/fixtures.ts +95 -0
  760. package/src/core/notebook/replica/__tests__/replica.test.ts +559 -0
  761. package/src/core/notebook/replica/__tests__/results.test.ts +193 -0
  762. package/src/core/notebook/replica/__tests__/runtime.test.ts +78 -0
  763. package/src/core/notebook/replica/backend.ts +21 -0
  764. package/src/core/notebook/replica/connection.ts +42 -0
  765. package/src/core/notebook/replica/index.ts +20 -0
  766. package/src/core/notebook/replica/replica.ts +336 -0
  767. package/src/core/{host → notebook/replica}/resources/attachments.ts +6 -3
  768. package/src/core/{host → notebook/replica}/resources/document.ts +3 -3
  769. package/src/core/notebook/replica/resources/executions.ts +157 -0
  770. package/src/core/notebook/replica/resources/results.ts +48 -0
  771. package/src/core/notebook/replica/resources/runtime.ts +14 -0
  772. package/src/core/packages/__tests__/useSandboxController.test.tsx +1 -1
  773. package/src/core/packages/useSandboxController.ts +1 -1
  774. package/src/core/run-app.tsx +49 -51
  775. package/src/core/runtime/__tests__/adapter.test.ts +4 -4
  776. package/src/core/runtime/__tests__/createWsUrl.test.ts +77 -7
  777. package/src/core/runtime/__tests__/runtime.test.ts +68 -74
  778. package/src/core/runtime/adapter.ts +5 -5
  779. package/src/core/runtime/config.ts +38 -3
  780. package/src/core/runtime/runtime.ts +54 -47
  781. package/src/core/runtime/types.ts +0 -2
  782. package/src/core/saving/__tests__/document.test.tsx +123 -0
  783. package/src/core/saving/__tests__/state.test.ts +111 -0
  784. package/src/core/saving/__tests__/useAutoSave.test.tsx +67 -0
  785. package/src/core/saving/document.ts +33 -0
  786. package/src/core/saving/filename.ts +1 -1
  787. package/src/core/saving/save-component.tsx +39 -60
  788. package/src/core/saving/state.ts +38 -39
  789. package/src/core/saving/useAutoSave.ts +17 -53
  790. package/src/core/session/__tests__/backend.test.ts +236 -0
  791. package/src/core/session/__tests__/useNotebookReplica.hook.test.tsx +186 -0
  792. package/src/core/{websocket → session}/__tests__/useNotebookSession.hook.test.tsx +245 -262
  793. package/src/core/session/active-notebook.ts +28 -0
  794. package/src/core/session/backend.ts +123 -0
  795. package/src/core/session/embedded.ts +7 -0
  796. package/src/core/{websocket → session}/types.ts +2 -2
  797. package/src/core/session/useNotebookReplica.ts +74 -0
  798. package/src/core/{websocket → session}/useNotebookSession.tsx +80 -67
  799. package/src/core/state/__tests__/jotai.test.tsx +108 -0
  800. package/src/core/state/jotai.ts +1 -1
  801. package/src/core/static/__tests__/files.test.ts +38 -10
  802. package/src/core/static/files.ts +2 -0
  803. package/src/core/{websocket → transports}/__tests__/connection-state.test.ts +1 -13
  804. package/src/core/transports/__tests__/server.test.ts +408 -0
  805. package/src/core/transports/__tests__/static.test.ts +340 -0
  806. package/src/core/transports/__tests__/wasm.test.ts +166 -0
  807. package/src/core/{websocket → transports}/connection-state.ts +9 -16
  808. package/src/core/transports/server.ts +152 -0
  809. package/src/core/transports/static.ts +174 -0
  810. package/src/core/transports/wasm.ts +97 -0
  811. package/src/core/vscode/__tests__/vscode-bindings.test.ts +125 -0
  812. package/src/core/vscode/vscode-bindings.ts +14 -2
  813. package/src/core/wasm/__tests__/bridge.test.ts +210 -64
  814. package/src/core/wasm/__tests__/worker.test.ts +191 -0
  815. package/src/core/wasm/bridge.ts +111 -81
  816. package/src/core/wasm/rpc.ts +15 -3
  817. package/src/core/wasm/store.ts +3 -3
  818. package/src/core/wasm/worker/bootstrap.ts +55 -51
  819. package/src/core/wasm/worker/getMarimoWheel.ts +1 -1
  820. package/src/core/wasm/worker/save-worker.ts +9 -10
  821. package/src/core/wasm/worker/types.ts +31 -18
  822. package/src/core/wasm/worker/worker.ts +120 -72
  823. package/src/css/app/Cell.css +7 -36
  824. package/src/css/app/codemirror.css +1 -1
  825. package/src/css/common.css +1 -1
  826. package/src/css/globals.css +72 -24
  827. package/src/hooks/__tests__/useAsyncData.test.tsx +148 -0
  828. package/src/hooks/__tests__/useDebounce.test.tsx +51 -0
  829. package/src/hooks/__tests__/useDeepCompareMemoize.test.tsx +39 -0
  830. package/src/hooks/__tests__/useDelayElapsed.test.tsx +28 -0
  831. package/src/hooks/__tests__/useInternalStateWithSync.test.tsx +20 -0
  832. package/src/hooks/__tests__/useScript.test.tsx +77 -0
  833. package/src/hooks/__tests__/useStateForKey.test.tsx +257 -0
  834. package/src/hooks/useAsyncData.ts +3 -3
  835. package/src/hooks/useDataSourceDiscovery.ts +6 -4
  836. package/src/hooks/useDebounce.ts +6 -10
  837. package/src/hooks/useDeepCompareMemoize.ts +1 -1
  838. package/src/hooks/useDelayElapsed.ts +14 -10
  839. package/src/hooks/useElapsedTime.ts +3 -3
  840. package/src/hooks/useEventListener.ts +1 -2
  841. package/src/hooks/useInputHistory.ts +4 -7
  842. package/src/hooks/useInternalStateWithSync.ts +6 -6
  843. package/src/hooks/useResizeObserver.ts +4 -7
  844. package/src/hooks/useScript.ts +67 -70
  845. package/src/hooks/useStateForKey.ts +93 -0
  846. package/src/mount.tsx +20 -15
  847. package/src/plugins/__tests__/plugin-object-schemas.test.ts +104 -0
  848. package/src/plugins/core/RenderHTML.tsx +3 -5
  849. package/src/plugins/core/__test__/PluginSlot.test.tsx +202 -0
  850. package/src/plugins/core/__test__/RenderHTML-copy.test.tsx +60 -0
  851. package/src/plugins/core/__test__/registerReactComponent.test.ts +45 -0
  852. package/src/plugins/core/__test__/sanitize.test.ts +8 -0
  853. package/src/plugins/core/registerReactComponent.tsx +29 -29
  854. package/src/plugins/core/sanitize-html.ts +6 -0
  855. package/src/plugins/impl/CodeEditorPlugin.tsx +1 -1
  856. package/src/plugins/impl/DataEditorPlugin.tsx +34 -13
  857. package/src/plugins/impl/DataTablePlugin.tsx +69 -37
  858. package/src/plugins/impl/DropdownPlugin.tsx +2 -6
  859. package/src/plugins/impl/FileBrowserPlugin.tsx +4 -16
  860. package/src/plugins/impl/FormPlugin.tsx +1 -1
  861. package/src/plugins/impl/RangeSliderPlugin.tsx +16 -2
  862. package/src/plugins/impl/RefreshPlugin.tsx +1 -0
  863. package/src/plugins/impl/SliderPlugin.tsx +6 -8
  864. package/src/plugins/impl/__tests__/DataEditorPlugin.test.ts +93 -4
  865. package/src/plugins/impl/__tests__/DataTablePlugin.test.tsx +387 -1
  866. package/src/plugins/impl/__tests__/FileBrowserPlugin.test.tsx +45 -0
  867. package/src/plugins/impl/__tests__/RangeSliderPlugin.test.tsx +109 -0
  868. package/src/plugins/impl/__tests__/SliderPlugin.test.tsx +24 -3
  869. package/src/plugins/impl/anywidget/__tests__/registry.test.ts +153 -0
  870. package/src/plugins/impl/anywidget/__tests__/widget-binding.test.ts +241 -2
  871. package/src/plugins/impl/anywidget/model.ts +3 -1
  872. package/src/plugins/impl/anywidget/registry.ts +18 -14
  873. package/src/plugins/impl/anywidget/runtime.ts +21 -9
  874. package/src/plugins/impl/anywidget/widget-binding.ts +160 -82
  875. package/src/plugins/impl/chat/__tests__/chat-prompts.test.tsx +93 -0
  876. package/src/plugins/impl/chat/chat-ui.tsx +17 -15
  877. package/src/plugins/impl/code/any-language-editor.tsx +2 -2
  878. package/src/plugins/impl/common/error-banner.tsx +5 -3
  879. package/src/plugins/impl/data-editor/__tests__/column-types.test.ts +42 -0
  880. package/src/plugins/impl/data-editor/__tests__/editor-state.test.ts +52 -1
  881. package/src/plugins/impl/data-editor/__tests__/glide-data-editor.test.tsx +120 -4
  882. package/src/plugins/impl/data-editor/__tests__/glide-utils.test.ts +116 -0
  883. package/src/plugins/impl/data-editor/column-types.ts +55 -0
  884. package/src/plugins/impl/data-editor/editor-state.ts +18 -2
  885. package/src/plugins/impl/data-editor/glide-data-editor.tsx +74 -12
  886. package/src/plugins/impl/data-editor/glide-utils.ts +39 -38
  887. package/src/plugins/impl/data-editor/types.ts +5 -0
  888. package/src/plugins/impl/data-explorer/ConnectedDataExplorerComponent.tsx +1 -1
  889. package/src/plugins/impl/data-explorer/components/column-summary.tsx +4 -2
  890. package/src/plugins/impl/data-explorer/state/reducer.ts +1 -1
  891. package/src/plugins/impl/data-frames/DataFramePlugin.tsx +1 -2
  892. package/src/plugins/impl/data-frames/__tests__/sidebar.test.tsx +160 -0
  893. package/src/plugins/impl/data-frames/forms/__tests__/__snapshots__/form.test.tsx.snap +66 -66
  894. package/src/plugins/impl/data-frames/panel.tsx +44 -16
  895. package/src/plugins/impl/mpl-interactive/MplInteractivePlugin.tsx +5 -3
  896. package/src/plugins/impl/panel/PanelPlugin.tsx +16 -17
  897. package/src/plugins/impl/panel/__tests__/utils.test.ts +39 -1
  898. package/src/plugins/impl/panel/utils.ts +17 -0
  899. package/src/plugins/impl/plotly/PlotlyPlugin.tsx +2 -5
  900. package/src/plugins/impl/plotly/selection.ts +25 -19
  901. package/src/plugins/impl/vega/VegaPlugin.tsx +2 -3
  902. package/src/plugins/impl/vega/make-selectable.ts +4 -7
  903. package/src/plugins/layout/DownloadPlugin.tsx +7 -11
  904. package/src/plugins/layout/LazyPlugin.tsx +7 -4
  905. package/src/plugins/layout/RoutesPlugin.tsx +1 -1
  906. package/src/plugins/layout/__test__/DownloadPlugin.test.tsx +205 -0
  907. package/src/plugins/layout/__tests__/LazyPlugin.test.tsx +98 -0
  908. package/src/stories/__tests__/editor-story.test.tsx +33 -0
  909. package/src/stories/button.stories.tsx +1 -0
  910. package/src/stories/cell-status.stories.tsx +29 -24
  911. package/src/stories/cell.stories.tsx +46 -46
  912. package/src/stories/data-table.stories.tsx +31 -0
  913. package/src/stories/editor.stories.tsx +28 -17
  914. package/src/stories/form-wrapper.stories.tsx +2 -2
  915. package/src/stories/layout/vertical/one-column.stories.tsx +28 -42
  916. package/src/stories/runtime-story.tsx +23 -17
  917. package/src/stories/select.stories.tsx +2 -2
  918. package/src/stories/switchable-multi-select.stories.tsx +1 -1
  919. package/src/stories/theme.stories.tsx +4 -1
  920. package/src/theme/__tests__/islands-theme.test.tsx +276 -0
  921. package/src/theme/namespace.tsx +4 -3
  922. package/src/theme/useTheme.ts +71 -41
  923. package/src/utils/__tests__/arrays.test.ts +35 -0
  924. package/src/utils/__tests__/batch-requests.test.ts +3 -3
  925. package/src/utils/__tests__/{createReducer.test.ts → createReducer.test.tsx} +127 -1
  926. package/src/utils/__tests__/download.test.tsx +183 -23
  927. package/src/utils/__tests__/numbers.test.ts +105 -1
  928. package/src/utils/__tests__/objects.test.ts +21 -0
  929. package/src/utils/arrays.ts +11 -2
  930. package/src/utils/blob.ts +1 -1
  931. package/src/utils/createReducer.ts +115 -79
  932. package/src/utils/download.ts +67 -6
  933. package/src/utils/maps.ts +0 -3
  934. package/src/utils/numbers.ts +79 -18
  935. package/src/utils/objects.ts +4 -9
  936. package/src/utils/time.ts +10 -0
  937. package/src/utils/tracer.ts +9 -5
  938. package/src/utils/zod-utils.ts +1 -3
  939. package/dist/_baseMerge-BiGRwuqv.js +0 -165
  940. package/dist/any-language-editor-D4q-IFcM.js +0 -76
  941. package/dist/architecture-7GRP2DOG-BWLylgiA.js +0 -3
  942. package/dist/assets/__vite-browser-external-BXYkiFsk.js +0 -1
  943. package/dist/assets/worker-HPY9fbhz.js +0 -114
  944. package/dist/classDiagram-ZZMXUADV-DXdCCDOg.js +0 -30
  945. package/dist/classDiagram-v2-VYDZK3BY-DyZqrtLP.js +0 -30
  946. package/dist/code-visibility-UR3IN3fl.js +0 -138
  947. package/dist/cynefin-OW5HDTMX-obq-i80l.js +0 -3
  948. package/dist/dropdown-menu-BuE2b8Yb.js +0 -4678
  949. package/dist/eventmodeling-NTZA5JFV-D7nP7Uyu.js +0 -3
  950. package/dist/feedback-button-DGkGODB3.js +0 -379
  951. package/dist/flowDiagram-HODETNUW-DQ4JuadE.js +0 -16
  952. package/dist/gitGraph-4MIJSDKK-Dy9uQXGh.js +0 -3
  953. package/dist/hasIn-o2Us0uVx.js +0 -132
  954. package/dist/html-to-image-BsG_zyNW.js +0 -3251
  955. package/dist/info-A6RAGUB7-DKoayiHY.js +0 -3
  956. package/dist/isArrayLikeObject-BZl-15ir.js +0 -450
  957. package/dist/isEmpty-BSZ1LaUo.js +0 -35
  958. package/dist/isSymbol-kQcfYbNX.js +0 -8
  959. package/dist/label-DoysmLMW.js +0 -281
  960. package/dist/mermaid-HWGCJPDP-Du3-HPQA.js +0 -2
  961. package/dist/packet-AYTQ26CC-Yw7ajchJ.js +0 -3
  962. package/dist/pick-CJeoxYOS.js +0 -51
  963. package/dist/pie-WAS4IAKB-BKdKOAkL.js +0 -3
  964. package/dist/purify.es-DMv5zIkJ.js +0 -866
  965. package/dist/radar-RG4KPBEZ-ScR_D_Ts.js +0 -3
  966. package/dist/railroad-74A4TZTK-DQvPSdo5.js +0 -3
  967. package/dist/railroad-abnf-HS5TGJTU-CsJQG2O8.js +0 -3
  968. package/dist/railroad-ebnf-LZEXJU2U-BgEobkSn.js +0 -3
  969. package/dist/railroad-peg-WCYAUIDC-DjLAjofI.js +0 -3
  970. package/dist/select-DemoKT4G.js +0 -1344
  971. package/dist/stateDiagram-v2-MP3YSRHH-1OQRe6iA.js +0 -30
  972. package/dist/swimlanesDiagram-VR7AAH4N-CszjkrKo.js +0 -30
  973. package/dist/toDate-gyi35XS2.js +0 -1185
  974. package/dist/toast-PkdZraM8.js +0 -1830
  975. package/dist/treeView-Q6P3EWNA-DuRV97YF.js +0 -3
  976. package/dist/treemap-WGGIJYW6-AsLq-uwC.js +0 -3
  977. package/dist/use-restore-focus-CKjfFjLM.js +0 -6369
  978. package/dist/useLifecycle-Dfq8UD-b.js +0 -169
  979. package/dist/useTheme-Bu5bBgrh.js +0 -904
  980. package/dist/wardley-WFR3VGLG-Na-tFhQJ.js +0 -3
  981. package/src/components/chat/reasoning-accordion.tsx +0 -61
  982. package/src/components/chat/tool-call/tool-error-card.tsx +0 -81
  983. package/src/components/chat/tool-call/tool-history-row.tsx +0 -174
  984. package/src/components/editor/ai/__tests__/staged-cell-submission.test.ts +0 -106
  985. package/src/components/editor/ai/add-cell-with-ai.tsx +0 -506
  986. package/src/components/editor/ai/staged-cell-submission.ts +0 -46
  987. package/src/components/editor/cell/__tests__/StagedAICell.test.tsx +0 -64
  988. package/src/components/editor/cell/code/__tests__/rtc-editor-config.test.ts +0 -50
  989. package/src/components/editor/chrome/wrapper/footer-items/rtc-status.tsx +0 -65
  990. package/src/components/editor/navigation/__tests__/state.test.ts +0 -81
  991. package/src/components/editor/navigation/state.ts +0 -65
  992. package/src/components/icons/loading-ellipsis.tsx +0 -46
  993. package/src/core/ai/tools/__tests__/run-cells-tool.test.ts +0 -656
  994. package/src/core/ai/tools/run-cells-tool.ts +0 -303
  995. package/src/core/attachments/state.ts +0 -18
  996. package/src/core/cells/__tests__/apply-transaction.test.ts +0 -991
  997. package/src/core/cells/__tests__/document-changes.test.ts +0 -1140
  998. package/src/core/cells/__tests__/document-roundtrip.test.ts +0 -392
  999. package/src/core/cells/document-changes.ts +0 -944
  1000. package/src/core/codemirror/rtc/extension.ts +0 -453
  1001. package/src/core/codemirror/rtc/loro/__tests__/sync.test.ts +0 -52
  1002. package/src/core/codemirror/rtc/loro/awareness.ts +0 -531
  1003. package/src/core/codemirror/rtc/loro/colors.ts +0 -38
  1004. package/src/core/codemirror/rtc/loro/sync.ts +0 -168
  1005. package/src/core/host/AGENTS.md +0 -11
  1006. package/src/core/host/__tests__/events.test.ts +0 -46
  1007. package/src/core/host/__tests__/fixtures.ts +0 -39
  1008. package/src/core/host/__tests__/notebook-client.test.ts +0 -433
  1009. package/src/core/host/__tests__/protocol.test.ts +0 -229
  1010. package/src/core/host/__tests__/stream.test.ts +0 -209
  1011. package/src/core/host/connection.ts +0 -81
  1012. package/src/core/host/events.ts +0 -61
  1013. package/src/core/host/notebook-client.ts +0 -290
  1014. package/src/core/host/protocol.ts +0 -1948
  1015. package/src/core/host/resources/resource.ts +0 -47
  1016. package/src/core/host/stream.ts +0 -211
  1017. package/src/core/rtc/state.ts +0 -34
  1018. package/src/core/state/__tests__/jotai.test.ts +0 -25
  1019. package/src/core/wasm/worker/message-buffer.ts +0 -33
  1020. package/src/core/websocket/__tests__/createConnectionTransport.test.ts +0 -49
  1021. package/src/core/websocket/__tests__/useNotebookClient.hook.test.tsx +0 -170
  1022. package/src/core/websocket/state.ts +0 -7
  1023. package/src/core/websocket/transports/__tests__/basic.test.ts +0 -275
  1024. package/src/core/websocket/transports/__tests__/sse.test.ts +0 -335
  1025. package/src/core/websocket/transports/__tests__/transport.test.ts +0 -308
  1026. package/src/core/websocket/transports/__tests__/ws.test.ts +0 -125
  1027. package/src/core/websocket/transports/basic.ts +0 -102
  1028. package/src/core/websocket/transports/create.ts +0 -31
  1029. package/src/core/websocket/transports/sse.ts +0 -308
  1030. package/src/core/websocket/transports/transport.ts +0 -50
  1031. package/src/core/websocket/transports/ws.ts +0 -98
  1032. package/src/core/websocket/useNotebookClient.ts +0 -88
  1033. package/src/utils/__tests__/id-tree.test.ts +0 -2145
  1034. package/src/utils/id-tree.tsx +0 -1134
  1035. /package/src/{core/attachments/toast.ts → components/editor/agent-toast.ts} +0 -0
  1036. /package/src/core/{websocket → session}/connection-utils.ts +0 -0
@@ -0,0 +1,378 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+
3
+ /** The active notebook's executions and runtime as the editor reads them. */
4
+
5
+ import type * as Protocol from "@marimo-team/client/protocol";
6
+ import { atom, type createStore } from "jotai";
7
+ import type { CellMessage } from "@/core/kernel/messages";
8
+ import {
9
+ ConnectionState,
10
+ type Executions,
11
+ type NotebookReplica,
12
+ type Results,
13
+ } from "@/core/notebook/replica";
14
+ import { activeNotebookReplicaAtom } from "@/core/session/active-notebook";
15
+ import { type CellFreshnessInputs, freshnessOf } from "./freshness";
16
+ import type { CellOutputInputs } from "./output";
17
+ import {
18
+ anyRunning,
19
+ type CellExecutionInputs,
20
+ queuedOrRunningCount,
21
+ } from "./select";
22
+
23
+ type Store = ReturnType<typeof createStore>;
24
+
25
+ const NO_EXECUTIONS: Executions = {
26
+ runs: new Map(),
27
+ executions: new Map(),
28
+ latest: new Map(),
29
+ };
30
+ const NO_RESULTS: Results = new Map();
31
+ const NO_CELLS: ReadonlyMap<Protocol.CellId, Protocol.Cell> = new Map();
32
+ const NO_REQUESTS: ReadonlySet<RunRequest> = new Set();
33
+ const NO_REQUESTED: ReadonlySet<Protocol.CellId> = new Set();
34
+ const NO_BLOCKED: ReadonlySet<Protocol.CellId> = new Set();
35
+ const NO_CLEARED: ReadonlyMap<Protocol.CellId, Protocol.ExecutionId> =
36
+ new Map();
37
+
38
+ /** The notebook a replica is showing, which the editor's marks belong to. */
39
+ interface ShownNotebook {
40
+ readonly replica: NotebookReplica;
41
+ readonly id: Protocol.NotebookId;
42
+ }
43
+
44
+ /**
45
+ * What the editor marks about cells of one replica's notebook.
46
+ *
47
+ * The marks refer to cells by id, which another notebook, or the same one
48
+ * after a reconnect, reuses with different executions behind it. They
49
+ * therefore count only for the replica and host notebook they belong to.
50
+ */
51
+ type Marks<T> = {
52
+ readonly notebook: ShownNotebook;
53
+ readonly value: T;
54
+ } | null;
55
+
56
+ /**
57
+ * A run this browser has asked the host for.
58
+ *
59
+ * The host answers some time after the request is made, and by then the
60
+ * notebook may have been replaced or the same cells asked for again. So
61
+ * the functions that handle the answer are given the request back, and
62
+ * they act only on it, in the notebook it was made in.
63
+ */
64
+ export interface RunRequest {
65
+ readonly notebook: ShownNotebook;
66
+ readonly cells: readonly Protocol.CellId[];
67
+ }
68
+
69
+ /**
70
+ * Requests whose run has not appeared on the stream yet.
71
+ *
72
+ * They let a requested cell read as queued right away. Once the host
73
+ * accepts the run, the stream shows it with the same cells named on it,
74
+ * and the request is no longer needed. A request the host refuses, or
75
+ * that the browser gives up on, is withdrawn instead.
76
+ */
77
+ const requestsAtom = atom<Marks<ReadonlySet<RunRequest>>>(null);
78
+
79
+ /**
80
+ * Cells the kernel reports as blocked by a disabled ancestor. Written only
81
+ * by `observeCellMessage`.
82
+ *
83
+ * TODO(MO-8463): Derive from the document and the analysis stream.
84
+ */
85
+ const blockedCellsAtom = atom<Marks<ReadonlySet<Protocol.CellId>>>(null);
86
+
87
+ function current<T>(
88
+ marks: Marks<T>,
89
+ replica: NotebookReplica | null,
90
+ notebookId: Protocol.NotebookId | null,
91
+ empty: T,
92
+ ): T {
93
+ return marks !== null &&
94
+ marks.notebook.replica === replica &&
95
+ marks.notebook.id === notebookId
96
+ ? marks.value
97
+ : empty;
98
+ }
99
+
100
+ function shownNotebook(store: Store): ShownNotebook | null {
101
+ const replica = store.get(activeNotebookReplicaAtom);
102
+ const notebook = replica === null ? null : store.get(replica.notebookAtom);
103
+ return replica === null || notebook === null
104
+ ? null
105
+ : { replica, id: notebook.id };
106
+ }
107
+
108
+ function mark<T>(store: Store, value: T): Marks<T> {
109
+ const notebook = shownNotebook(store);
110
+ return notebook === null ? null : { notebook, value };
111
+ }
112
+
113
+ /**
114
+ * Whether `request` still belongs to the notebook being shown.
115
+ *
116
+ * Between a reset and the next snapshot the replica has no notebook for a
117
+ * moment. That says nothing about where the request belongs, so it does
118
+ * not count against it. Another replica, or another notebook on the same
119
+ * replica, does.
120
+ */
121
+ export function isCurrent(store: Store, request: RunRequest): boolean {
122
+ const replica = store.get(activeNotebookReplicaAtom);
123
+ if (replica !== request.notebook.replica) {
124
+ return false;
125
+ }
126
+ const notebook = store.get(replica.notebookAtom);
127
+ return notebook === null || notebook.id === request.notebook.id;
128
+ }
129
+
130
+ /** Cells named by pending requests made in the notebook now shown. */
131
+ const requestedCellsAtom = atom((get) => {
132
+ const replica = get(activeNotebookReplicaAtom);
133
+ const notebookId =
134
+ replica === null ? null : (get(replica.notebookAtom)?.id ?? null);
135
+ const requests = current(get(requestsAtom), replica, notebookId, NO_REQUESTS);
136
+ return requests.size === 0
137
+ ? NO_REQUESTED
138
+ : new Set([...requests].flatMap((request) => request.cells));
139
+ });
140
+
141
+ /** What every cell's view derives from. Pair with `cellExecutionView`. */
142
+ export const cellExecutionInputsAtom = atom((get): CellExecutionInputs => {
143
+ const replica = get(activeNotebookReplicaAtom);
144
+ const notebookId =
145
+ replica === null ? null : (get(replica.notebookAtom)?.id ?? null);
146
+ const document = replica === null ? null : get(replica.documentAtom);
147
+ return {
148
+ executions: replica === null ? NO_EXECUTIONS : get(replica.executionsAtom),
149
+ results: replica === null ? NO_RESULTS : get(replica.resultsAtom),
150
+ cells: document?.cells ?? NO_CELLS,
151
+ requested: get(requestedCellsAtom),
152
+ blocked: current(get(blockedCellsAtom), replica, notebookId, NO_BLOCKED),
153
+ };
154
+ });
155
+
156
+ const cellFreshnessInputsAtom = atom((get): CellFreshnessInputs => {
157
+ const replica = get(activeNotebookReplicaAtom);
158
+ const document = replica === null ? null : get(replica.documentAtom);
159
+ // Results can arrive before the confirmed document on a snapshot. Until
160
+ // the document is ready there is nothing to compare them against.
161
+ if (replica === null || document === null) {
162
+ return { cells: NO_CELLS, executions: NO_EXECUTIONS, results: NO_RESULTS };
163
+ }
164
+ return {
165
+ cells: document.cells,
166
+ executions: get(replica.executionsAtom),
167
+ results: get(replica.resultsAtom),
168
+ };
169
+ });
170
+
171
+ /** Freshness by cell id, indexed once per change to its inputs. */
172
+ export const cellFreshnessAtom = atom((get) =>
173
+ freshnessOf(get(cellFreshnessInputsAtom)),
174
+ );
175
+
176
+ /** Results this browser cleared, by execution id, until a newer one lands. */
177
+ const clearedOutputsAtom =
178
+ atom<Marks<ReadonlyMap<Protocol.CellId, Protocol.ExecutionId>>>(null);
179
+
180
+ /** What every cell's output derives from. Pair with `cellOutputView`. */
181
+ export const cellOutputInputsAtom = atom((get): CellOutputInputs => {
182
+ const replica = get(activeNotebookReplicaAtom);
183
+ const notebookId =
184
+ replica === null ? null : (get(replica.notebookAtom)?.id ?? null);
185
+ return {
186
+ executions: replica === null ? NO_EXECUTIONS : get(replica.executionsAtom),
187
+ results: replica === null ? NO_RESULTS : get(replica.resultsAtom),
188
+ cleared: current(get(clearedOutputsAtom), replica, notebookId, NO_CLEARED),
189
+ };
190
+ });
191
+
192
+ /** Hide what `cellIds` show now, until each has a newer result. */
193
+ export function clearCellOutputs(
194
+ store: Store,
195
+ cellIds: readonly Protocol.CellId[],
196
+ ): void {
197
+ const inputs = store.get(cellOutputInputsAtom);
198
+ const next = new Map(inputs.cleared);
199
+ for (const cellId of cellIds) {
200
+ const result = inputs.results.get(cellId);
201
+ if (result !== null && result !== undefined) {
202
+ next.set(cellId, result.id);
203
+ }
204
+ }
205
+ store.set(clearedOutputsAtom, mark(store, next));
206
+ }
207
+
208
+ /** The runtime's status, null while the notebook has none or the stream is not ready. */
209
+ export const runtimeStatusAtom = atom((get) => {
210
+ const replica = get(activeNotebookReplicaAtom);
211
+ return replica === null ? null : (get(replica.runtimeAtom)?.status ?? null);
212
+ });
213
+
214
+ export const notebookIsRunningAtom = atom((get) =>
215
+ anyRunning(get(cellExecutionInputsAtom).executions),
216
+ );
217
+
218
+ export const notebookQueuedOrRunningCountAtom = atom((get) =>
219
+ queuedOrRunningCount(get(cellExecutionInputsAtom)),
220
+ );
221
+
222
+ type RuntimeReadiness = "running" | "waiting" | { refused: string };
223
+
224
+ /**
225
+ * Whether a run can go to the host now, should wait, or has nothing to wait for.
226
+ *
227
+ * A runtime that is starting, or a stream that has not reported yet, will
228
+ * settle one way or the other. A failed or absent runtime, or a connection
229
+ * that has closed, will not, so a run waiting on it is refused instead.
230
+ */
231
+ const runtimeReadinessAtom = atom((get): RuntimeReadiness => {
232
+ const replica = get(activeNotebookReplicaAtom);
233
+ if (replica === null) {
234
+ return { refused: "No notebook is connected" };
235
+ }
236
+ if (get(replica.connectionAtom).state === ConnectionState.CLOSED) {
237
+ return { refused: "The notebook is disconnected" };
238
+ }
239
+ // Until the stream's snapshot is complete there is no notebook to speak
240
+ // of, and nothing it reports about the runtime counts yet.
241
+ if (get(replica.notebookAtom) === null) {
242
+ return "waiting";
243
+ }
244
+ const runtime = get(replica.runtimeAtom);
245
+ if (runtime === null) {
246
+ return { refused: "The notebook has no runtime" };
247
+ }
248
+ switch (runtime.status) {
249
+ case "running":
250
+ return "running";
251
+ case "failed":
252
+ return { refused: runtime.message ?? "The runtime failed" };
253
+ default:
254
+ return "waiting";
255
+ }
256
+ });
257
+
258
+ /** Resolve once the host reports the runtime running; reject once it cannot. */
259
+ export function waitForRuntimeRunning(store: Store): Promise<void> {
260
+ return new Promise((resolve, reject) => {
261
+ const unsubscribe = store.sub(runtimeReadinessAtom, check);
262
+ function check() {
263
+ const readiness = store.get(runtimeReadinessAtom);
264
+ if (readiness === "waiting") {
265
+ return;
266
+ }
267
+ unsubscribe();
268
+ if (readiness === "running") {
269
+ resolve();
270
+ } else {
271
+ reject(new Error(readiness.refused));
272
+ }
273
+ }
274
+ check();
275
+ });
276
+ }
277
+
278
+ /**
279
+ * Record that this browser is asking the host to run `cellIds`, so that
280
+ * they read as queued before the host has answered.
281
+ *
282
+ * A disabled cell, or one the kernel reports as blocked, may be among them
283
+ * so the kernel can set it aside, but the views do not show it as queued.
284
+ * Returns null while no notebook is shown, since there is nothing to
285
+ * record the request against.
286
+ */
287
+ export function requestRun(
288
+ store: Store,
289
+ cellIds: readonly Protocol.CellId[],
290
+ ): RunRequest | null {
291
+ const notebook = shownNotebook(store);
292
+ if (notebook === null) {
293
+ return null;
294
+ }
295
+ const request: RunRequest = { notebook, cells: [...cellIds] };
296
+ const marks = store.get(requestsAtom);
297
+ const kept =
298
+ marks !== null &&
299
+ marks.notebook.replica === notebook.replica &&
300
+ marks.notebook.id === notebook.id
301
+ ? marks.value
302
+ : NO_REQUESTS;
303
+ store.set(requestsAtom, { notebook, value: new Set(kept).add(request) });
304
+ return request;
305
+ }
306
+
307
+ /** Forget a request the host refused or the browser gave up on. */
308
+ export function withdrawRequest(store: Store, request: RunRequest): void {
309
+ const marks = store.get(requestsAtom);
310
+ if (marks === null || !marks.value.has(request)) {
311
+ return;
312
+ }
313
+ const value = new Set(marks.value);
314
+ value.delete(request);
315
+ store.set(requestsAtom, { notebook: marks.notebook, value });
316
+ }
317
+
318
+ /**
319
+ * Keep a request until the run the host accepted for it appears on the
320
+ * stream, which can happen after the response has arrived. From then on
321
+ * the run itself says which cells are queued. If the notebook is no
322
+ * longer shown by then, the request is simply dropped.
323
+ */
324
+ export function acceptRun(
325
+ store: Store,
326
+ request: RunRequest,
327
+ run: Protocol.Run,
328
+ ): void {
329
+ const { replica } = request.notebook;
330
+ const unsubscribe = store.sub(replica.executionsAtom, check);
331
+ function check() {
332
+ if (
333
+ isCurrent(store, request) &&
334
+ !store.get(replica.executionsAtom).runs.has(run.id)
335
+ ) {
336
+ return;
337
+ }
338
+ unsubscribe();
339
+ withdrawRequest(store, request);
340
+ }
341
+ check();
342
+ }
343
+
344
+ function setCellBlocked(
345
+ store: Store,
346
+ cellId: Protocol.CellId,
347
+ blocked: boolean,
348
+ ): void {
349
+ const known = store.get(cellExecutionInputsAtom).blocked;
350
+ if (known.has(cellId) === blocked) {
351
+ return;
352
+ }
353
+ const next = new Set(known);
354
+ if (blocked) {
355
+ next.add(cellId);
356
+ } else {
357
+ next.delete(cellId);
358
+ }
359
+ store.set(blockedCellsAtom, mark(store, next));
360
+ }
361
+
362
+ /**
363
+ * Learn from a cell-op whether the kernel considers the cell blocked by a
364
+ * disabled ancestor. A blocked cell will not run, so a run that names it
365
+ * does not show it as queued.
366
+ *
367
+ * TODO(MO-8407): Delete with the cell-op case. The blocked read goes with
368
+ * MO-8463.
369
+ */
370
+ export function observeCellMessage(store: Store, message: CellMessage): void {
371
+ if (message.status != null) {
372
+ setCellBlocked(
373
+ store,
374
+ message.cell_id,
375
+ message.status === "disabled-transitively",
376
+ );
377
+ }
378
+ }
@@ -0,0 +1,171 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+
3
+ /**
4
+ * Whether each cell's result still reflects the document and the values
5
+ * it read, by the host protocol's rules.
6
+ *
7
+ * A completed execution is current when its code fingerprint equals the
8
+ * cell's, every variable it depends on still holds the recorded revision,
9
+ * every name it depends on that was unbound is still unbound, and the
10
+ * executions that bound those variables are current. See the freshness
11
+ * section of `protocols/host/spec.md`.
12
+ *
13
+ * The protocol also ranks why a result is outdated. The editor asks two
14
+ * questions of its own, so that is what this reports; the ranked reason
15
+ * can come back with a reader. Two editor concerns are folded in: a name
16
+ * bound only by an earlier runtime is unbound in this one, and a queued or
17
+ * running execution for the cell's current source already covers it.
18
+ */
19
+
20
+ import type * as Protocol from "@marimo-team/client/protocol";
21
+ import type { Executions, Results } from "@/core/notebook/replica";
22
+
23
+ export interface CellFreshness {
24
+ /** This cell's source differs from its pending execution, or its last result. */
25
+ readonly sourceChanged: boolean;
26
+ /**
27
+ * A value the result read changed since, by a rerun or an update, here
28
+ * or upstream. An ancestor that was only edited does not count: its
29
+ * values are still the ones this result read.
30
+ */
31
+ readonly inputsChanged: boolean;
32
+ }
33
+
34
+ /** Current, and also a cell with no completed execution to compare. */
35
+ const CURRENT: CellFreshness = { sourceChanged: false, inputsChanged: false };
36
+
37
+ /** What freshness is derived from. */
38
+ export interface CellFreshnessInputs {
39
+ /** The document's cells, for the fingerprint of each cell's source. */
40
+ readonly cells: ReadonlyMap<Protocol.CellId, Protocol.Cell>;
41
+ /** The stream's executions, for the variables currently bound. */
42
+ readonly executions: Executions;
43
+ /** Each cell's last completed record, the result being compared. */
44
+ readonly results: Results;
45
+ }
46
+
47
+ /** Freshness by cell id, as `freshnessOf` builds it. */
48
+ export type CellFreshnessLookup = (id: Protocol.CellId) => CellFreshness;
49
+
50
+ /** The variables bound in the namespace right now, by name. */
51
+ function boundVariables(
52
+ executions: Executions,
53
+ ): ReadonlyMap<string, Protocol.Variable[]> {
54
+ const byName = new Map<string, Protocol.Variable[]>();
55
+ for (const execution of executions.executions.values()) {
56
+ for (const variable of execution.variables.values()) {
57
+ const bound = byName.get(variable.name);
58
+ if (bound === undefined) {
59
+ byName.set(variable.name, [variable]);
60
+ } else {
61
+ bound.push(variable);
62
+ }
63
+ }
64
+ }
65
+ return byName;
66
+ }
67
+
68
+ /**
69
+ * Compares results against the document and the namespace.
70
+ *
71
+ * Build one per set of inputs and ask it about each cell, since the
72
+ * bound variables are indexed once and a binding execution's freshness is
73
+ * computed once however many results depend on it.
74
+ */
75
+ export function freshnessOf(inputs: CellFreshnessInputs): CellFreshnessLookup {
76
+ const bound = boundVariables(inputs.executions);
77
+ const memo = new Map<Protocol.ExecutionId, CellFreshness>();
78
+ const recordOf = (id: Protocol.ExecutionId) =>
79
+ inputs.executions.executions.get(id)?.record;
80
+
81
+ /** Whether a value the record read has changed, or one upstream has. */
82
+ function inputsChanged(
83
+ record: Protocol.Execution,
84
+ visiting: ReadonlySet<Protocol.ExecutionId>,
85
+ ): boolean {
86
+ const path = new Set(visiting).add(record.id);
87
+ for (const [name, revision] of Object.entries(record.depends_on)) {
88
+ const variables = bound.get(name) ?? [];
89
+ if (revision === null) {
90
+ // Older runtimes bind nothing here, but a later binding invalidates
91
+ // the result even if its runtime has since stopped.
92
+ if (
93
+ variables.some((v) => {
94
+ const binder = recordOf(v.execution_id);
95
+ if (binder === undefined) {
96
+ return false;
97
+ }
98
+ if (binder.runtime_id === record.runtime_id) {
99
+ return true;
100
+ }
101
+ const boundAt = binder.completed_at ?? binder.started_at;
102
+ return (
103
+ boundAt !== null &&
104
+ record.completed_at !== null &&
105
+ Date.parse(boundAt) > Date.parse(record.completed_at)
106
+ );
107
+ })
108
+ ) {
109
+ return true;
110
+ }
111
+ continue;
112
+ }
113
+ const variable = variables.find(
114
+ (candidate) => candidate.revision.execution === revision.execution,
115
+ );
116
+ if (
117
+ variable === undefined ||
118
+ variable.revision.update !== revision.update
119
+ ) {
120
+ return true;
121
+ }
122
+ const binder = recordOf(variable.execution_id);
123
+ if (binder === undefined) {
124
+ return true;
125
+ }
126
+ if (!path.has(binder.id) && ofRecord(binder, path).inputsChanged) {
127
+ return true;
128
+ }
129
+ }
130
+ return false;
131
+ }
132
+
133
+ /** Compare against pending work before the result it will replace. */
134
+ function sourceChanged(
135
+ cell: Protocol.Cell,
136
+ result: Protocol.Execution,
137
+ ): boolean {
138
+ const latest = inputs.executions.latest.get(cell.id);
139
+ const pending = latest === undefined ? undefined : recordOf(latest);
140
+ const source =
141
+ pending !== undefined && pending.status !== "completed"
142
+ ? pending
143
+ : result;
144
+ return cell.code_fingerprint !== source.code_fingerprint;
145
+ }
146
+
147
+ function ofRecord(
148
+ record: Protocol.Execution,
149
+ visiting: ReadonlySet<Protocol.ExecutionId>,
150
+ ): CellFreshness {
151
+ const known = memo.get(record.id);
152
+ if (known !== undefined) {
153
+ return known;
154
+ }
155
+ const cell =
156
+ record.cell_id === null ? undefined : inputs.cells.get(record.cell_id);
157
+ const freshness: CellFreshness = {
158
+ sourceChanged: cell === undefined || sourceChanged(cell, record),
159
+ inputsChanged: inputsChanged(record, visiting),
160
+ };
161
+ memo.set(record.id, freshness);
162
+ return freshness;
163
+ }
164
+
165
+ return (id) => {
166
+ const result = inputs.results.get(id);
167
+ return result === null || result === undefined
168
+ ? CURRENT
169
+ : ofRecord(result, new Set());
170
+ };
171
+ }
@@ -0,0 +1,86 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+
3
+ import type * as Protocol from "@marimo-team/client/protocol";
4
+ import { dequal } from "dequal";
5
+ import { useAtomValue } from "jotai";
6
+ import { selectAtom } from "jotai/utils";
7
+ import { useMemo } from "react";
8
+ import { parseOutline } from "@/core/dom/outline";
9
+ import {
10
+ cellExecutionInputsAtom,
11
+ cellFreshnessAtom,
12
+ cellOutputInputsAtom,
13
+ } from "./atoms";
14
+ import type { CellFreshness } from "./freshness";
15
+ import { type CellOutput, cellOutputView, scratchOutputView } from "./output";
16
+ import { type CellExecutionView, cellExecutionView } from "./select";
17
+
18
+ /**
19
+ * A cell's status, timing, and how it last ended.
20
+ *
21
+ * Read from the host's executions, with the editor's own marks for a run
22
+ * it has requested and the kernel has not planned yet, and for a cell the
23
+ * kernel reports blocked by a disabled ancestor.
24
+ */
25
+ export function useCellExecution(id: Protocol.CellId): CellExecutionView {
26
+ // One atom per mounted cell, kept for its subscription and compared by
27
+ // value so the cell renders only when its own view changes.
28
+ const cellAtom = useMemo(
29
+ () =>
30
+ selectAtom(
31
+ cellExecutionInputsAtom,
32
+ (inputs) => cellExecutionView(inputs, id),
33
+ dequal,
34
+ ),
35
+ [id],
36
+ );
37
+ return useAtomValue(cellAtom);
38
+ }
39
+
40
+ /**
41
+ * Whether a cell's result is current, by the host protocol's rules.
42
+ *
43
+ * The comparison reads the confirmed document, so an edit counts once the
44
+ * host has it, not on the keystroke.
45
+ */
46
+ export function useCellFreshness(id: Protocol.CellId): CellFreshness {
47
+ const cellAtom = useMemo(
48
+ () => selectAtom(cellFreshnessAtom, (freshness) => freshness(id), dequal),
49
+ [id],
50
+ );
51
+ return useAtomValue(cellAtom);
52
+ }
53
+
54
+ /** What the cell shows: its running value so far, else its result's outcome. */
55
+ export function useCellOutput(id: Protocol.CellId): CellOutput | null {
56
+ const cellAtom = useMemo(
57
+ () =>
58
+ selectAtom(
59
+ cellOutputInputsAtom,
60
+ (inputs) => cellOutputView(inputs, id),
61
+ dequal,
62
+ ),
63
+ [id],
64
+ );
65
+ return useAtomValue(cellAtom);
66
+ }
67
+
68
+ /** The headings in the cell's output, for the table of contents. */
69
+ export function useCellOutline(id: Protocol.CellId) {
70
+ const output = useCellOutput(id);
71
+ return useMemo(() => parseOutline(output), [output]);
72
+ }
73
+
74
+ /** What the scratchpad shows, from its latest scratch execution. */
75
+ export function useScratchOutput(): CellOutput | null {
76
+ const scratchAtom = useMemo(
77
+ () =>
78
+ selectAtom(
79
+ cellOutputInputsAtom,
80
+ (inputs) => scratchOutputView(inputs.executions),
81
+ dequal,
82
+ ),
83
+ [],
84
+ );
85
+ return useAtomValue(scratchAtom);
86
+ }
@@ -0,0 +1,49 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+
3
+ /**
4
+ * Cell status, timing, and output, as the editor reads them.
5
+ *
6
+ * The host's notebook stream is the source of truth. Its runs, executions,
7
+ * and results say what every cell is doing. The atoms here derive views
8
+ * from that stream, adding only what the host cannot know yet, such as a
9
+ * run this browser has asked for but not heard back about.
10
+ */
11
+
12
+ export {
13
+ cellExecutionInputsAtom,
14
+ cellFreshnessAtom,
15
+ cellOutputInputsAtom,
16
+ clearCellOutputs,
17
+ notebookIsRunningAtom,
18
+ notebookQueuedOrRunningCountAtom,
19
+ observeCellMessage,
20
+ runtimeStatusAtom,
21
+ waitForRuntimeRunning,
22
+ } from "./atoms";
23
+ export type { CellFreshness, CellFreshnessLookup } from "./freshness";
24
+ export { replyInput } from "./input";
25
+ export { runCells, syncEdits, waitForRuntime } from "./run";
26
+ export {
27
+ useCellExecution,
28
+ useCellFreshness,
29
+ useCellOutline,
30
+ useCellOutput,
31
+ useScratchOutput,
32
+ } from "./hooks";
33
+ export {
34
+ type CellError,
35
+ type CellOutput,
36
+ cellOutputView,
37
+ type HostDiagnostic,
38
+ scratchOutputView,
39
+ } from "./output";
40
+ export {
41
+ type CellExecutionInputs,
42
+ type CellExecutionView,
43
+ type CellOutcome,
44
+ type CellRunStatus,
45
+ cellExecutionView,
46
+ onlyScratchRunning,
47
+ runningCellIds,
48
+ scratchStatus,
49
+ } from "./select";