@marimo-team/islands 0.24.3-dev9 → 0.25.1-dev1

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 (440) hide show
  1. package/dist/{ConnectedDataExplorerComponent-C9OF_75w.js → ConnectedDataExplorerComponent-KVhjDMSe.js} +1066 -1066
  2. package/dist/ErrorBoundary-pXXIvlr3.js +200 -0
  3. package/dist/{ImageComparisonComponent-2a9TMMm2.js → ImageComparisonComponent-Dlm5aWnH.js} +4 -4
  4. package/dist/{Plot-C-9MQeGP.js → Plot-CTyjbQDT.js} +21032 -20666
  5. package/dist/_baseMerge-BiGRwuqv.js +165 -0
  6. package/dist/{abnfDiagram-N423BO3Z-CQKwzX8t.js → abnfDiagram-VCTEODGH-CpN0FRda.js} +17 -18
  7. package/dist/{any-language-editor-DmQ7dyCx.js → any-language-editor-CycIVIeP.js} +17 -17
  8. package/dist/arc-7ra3iNdN.js +81 -0
  9. package/dist/architecture-7GRP2DOG-BWLylgiA.js +3 -0
  10. package/dist/{architectureDiagram-T3A2C74G-CncrDpfa.js → architectureDiagram-5GKGNRK7-DDyj5SRB.js} +25 -25
  11. package/dist/assets/__vite-browser-external-C9iR87Zl.js +1 -0
  12. package/dist/assets/worker-D7hWi02M.js +109 -0
  13. package/dist/blockDiagram-I7D4REHJ-BbXEXJRu.js +1922 -0
  14. package/dist/{button-CKBkqR9J.js → button-DdXAm8iz.js} +5 -5
  15. package/dist/{c4Diagram-5PPSVZJV-DarUk3Yq.js → c4Diagram-7LVT6UL2-DcLsbQmR.js} +696 -668
  16. package/dist/{capabilities-CMBBJTcc.js → capabilities-B3ce_GNu.js} +1 -1
  17. package/dist/{html-to-image-BtFMe_Nq.js → cells-DYIkSxs6.js} +6757 -10137
  18. package/dist/{channel-CyiYUzJv.js → channel-B5XnTarr.js} +1 -1
  19. package/dist/chat-ui-BXj3uYjy.js +5786 -0
  20. package/dist/{check-CHig47QV.js → check-B7cIK6gb.js} +1 -1
  21. package/dist/{chunk-2Q5K7J3B-BMuJl2jB.js → chunk-2Q5K7J3B-BMkUkeuy.js} +2 -2
  22. package/dist/chunk-4HAMMTFA-D2qv8E0X.js +4188 -0
  23. package/dist/{chunk-5VM5RSS4-Bcq0ftdy.js → chunk-5VM5RSS4-DKsmPCL6.js} +2 -2
  24. package/dist/{chunk-NSK5VX7P-CDTMcJB0.js → chunk-75Z2AOVW-5_HsvXwr.js} +23 -23
  25. package/dist/{chunk-I66GZJ75-BqyTCAPf.js → chunk-DU6HZSFF-BUgAHvnM.js} +21 -4
  26. package/dist/{chunk-2GRJ4B5K-DgO8Qudq.js → chunk-F27PBJKO-DHmYWZXr.js} +4 -4
  27. package/dist/{chunk-KEIR6QF5-C4KX3XYh.js → chunk-FOHPRMQF-BpYR8RqP.js} +4 -4
  28. package/dist/{chunk-WRU74C26-BpWsbiDK.js → chunk-GMAD6QVW-Czynz8aA.js} +486 -258
  29. package/dist/chunk-GVQU2GXP-yQEdulRS.js +37 -0
  30. package/dist/{chunk-5RXB4S5H-tLNUVDdO.js → chunk-IMKFNOWR-BfwTebD0.js} +11 -11
  31. package/dist/{chunk-JWPE2WC7-BJwjGUnF.js → chunk-JWPE2WC7-DJvv1t8U.js} +2 -2
  32. package/dist/chunk-L3NEJ4N5-DwRWnDDK.js +245 -0
  33. package/dist/{chunk-7Z6QIM7H-Dc18hFxH.js → chunk-OSK3NFVY-BBKU_Ign.js} +222 -144
  34. package/dist/{chunk-W5SLKNZC-DLnvpEtV.js → chunk-P2QGCYS3-C0iGU29N.js} +20 -20
  35. package/dist/{chunk-KBJHAD2P-BuqWqkcW.js → chunk-POPQ4Y6H-BCbS3Ozc.js} +4 -4
  36. package/dist/{chunk-4I5QYGJK-DpytHuZQ.js → chunk-PWAF6VOD-CTFCL0jI.js} +4 -4
  37. package/dist/{chunk-JQJVKLGR-CgqCwe8E.js → chunk-SHT3W25Y-BspJEJ5H.js} +109 -63
  38. package/dist/{chunk-6Q2QTUOP-DmTcEBMn.js → chunk-SVP7TREG-DX3rFNTe.js} +5 -5
  39. package/dist/{chunk-GF5L2VYU-B0wgCQgS.js → chunk-TICWLB2K-fVF7Uujg.js} +13 -13
  40. package/dist/{chunk-XXDRQBXY-D73H4IN0.js → chunk-XXDRQBXY-Dnl5VBqG.js} +3 -3
  41. package/dist/{chunk-Y2CYZVJY-DoegUj_e.js → chunk-Y2CYZVJY-DKKS1VyV.js} +1 -1
  42. package/dist/{chunk-5FQGJX7Z-B85XCPv6.js → chunk-YOKDWASO-DrWbKnxA.js} +6925 -5460
  43. package/dist/classDiagram-ZZMXUADV-Fe-V14Sc.js +30 -0
  44. package/dist/classDiagram-v2-VYDZK3BY-xTDg7lOs.js +30 -0
  45. package/dist/code-visibility-BC_yF09p.js +138 -0
  46. package/dist/{common-Cv-4hMa0.js → common-Dv227ygK.js} +8838 -12645
  47. package/dist/{compiler-runtime-CAH9RLw2.js → compiler-runtime-Cj8ZWiNS.js} +2 -2
  48. package/dist/copy-icon-CLdENY__.js +190 -0
  49. package/dist/{cose-bilkent-JH36ORCC-FUWHkXFX.js → cose-bilkent-JH36ORCC-_LyRKVqm.js} +2 -2
  50. package/dist/cubic-OaEBhQPK.js +1404 -0
  51. package/dist/cynefin-OW5HDTMX-obq-i80l.js +3 -0
  52. package/dist/{cynefinDiagram-MW4NZA55-BXSFK93J.js → cynefinDiagram-5FMLGOSQ-CFQrqzSX.js} +10 -10
  53. package/dist/{dagre-CGyalH38.js → dagre-BGSfXNEb.js} +678 -537
  54. package/dist/dagre-GXQ25YYZ-xHNAUTyG.js +425 -0
  55. package/dist/{data-grid-overlay-editor-DZM4BAaI.js → data-grid-overlay-editor-B-I2K7z3.js} +8 -9
  56. package/dist/{data-grid-types-BnZwWG8z.js → data-grid-types-BucVmDDp.js} +1 -1
  57. package/dist/{defaultLocale-DKaU_opG.js → defaultLocale-JI_lnoCe.js} +1 -1
  58. package/dist/{diagram-7IWD3JNH-BjfzDNvj.js → diagram-S7CK7UJ4-Bt1rPbAx.js} +40 -39
  59. package/dist/{diagram-UB23O5K3-DDg-7wLA.js → diagram-UQ7AKVKN-D1sq5FoZ.js} +10 -10
  60. package/dist/{diagram-B4RE2ZJO-CKccR9eE.js → diagram-VSXAHHWV-BKpmG23x.js} +10 -10
  61. package/dist/{diagram-Q27KOJAE-Zhz01ss7.js → diagram-VX7I27RA-BMwGFVD6.js} +21 -21
  62. package/dist/{diagram-LBJQPF4R-CJ-bOruh.js → diagram-Z3DM3KII--KLDR9Pl.js} +10 -10
  63. package/dist/dialog-CgNq6y9-.js +94 -0
  64. package/dist/{dist-dAqZAPcF.js → dist-1HDa70oE.js} +3 -3
  65. package/dist/{dist-Re9sOPOx.js → dist-9x1ZRe-e.js} +2 -2
  66. package/dist/{dist-DEeLqRlU.js → dist-B1vYLK28.js} +1 -1
  67. package/dist/{dist-C5Bn52W4.js → dist-B8D7McG3.js} +3 -3
  68. package/dist/{dist-_XvgytiS.js → dist-BHCHt1NI.js} +1 -1
  69. package/dist/{dist-CRjAdnqF.js → dist-BRxfaJgs.js} +3 -3
  70. package/dist/{dist-Byj2bV8o.js → dist-BVGtK7Ht.js} +1 -1
  71. package/dist/{dist-BIN5LKyE.js → dist-BaHjhkpZ.js} +2 -2
  72. package/dist/{dist-DVFbIwc5.js → dist-BtKIs9N-.js} +1 -1
  73. package/dist/{dist-BrQGcfQ9.js → dist-C2KzV-vf.js} +2 -2
  74. package/dist/{dist-DJFiGP2k.js → dist-C2wDlYdD.js} +2 -2
  75. package/dist/{dist-BVRM2y1P.js → dist-C8xMLVYi.js} +2 -2
  76. package/dist/dist-CMh_W4y4.js +538 -0
  77. package/dist/{extends-BPB6_lTK.js → dist-CO1AwwG_.js} +516 -561
  78. package/dist/{dist-BzN60Z2s.js → dist-CPGxfVGX.js} +1 -1
  79. package/dist/{dist-C7v-9nUK.js → dist-Cm3iAFMD.js} +3 -3
  80. package/dist/{dist-CGAxEiaM.js → dist-Cs2FijYk.js} +2 -2
  81. package/dist/{dist-hXd65f0_.js → dist-D1PpnuZB.js} +1 -1
  82. package/dist/{dist-VdvbxG72.js → dist-DHOTQar0.js} +1 -1
  83. package/dist/{dist-DcgzXCfy.js → dist-DPcEtqmG.js} +2 -2
  84. package/dist/{dist-D4Z_qdP4.js → dist-Df0wKI0F.js} +1 -1
  85. package/dist/{dist-qhLI-SHd.js → dist-DszxuxS1.js} +2 -2
  86. package/dist/{dist-BEmkrGoQ.js → dist-Kxgjxakw.js} +1 -1
  87. package/dist/{dist-BbSMhhD2.js → dist-KzZ7WELx.js} +2 -2
  88. package/dist/{dist-jWUab2d1.js → dist-lA1Cttkb.js} +1 -1
  89. package/dist/dropdown-menu-CZgjYSAh.js +4502 -0
  90. package/dist/{ebnfDiagram-BXEA7PRR-Dm75pCAS.js → ebnfDiagram-PWID7BFC-WnG4cvSQ.js} +17 -18
  91. package/dist/{erDiagram-JOGREHBK-rVDG3VSQ.js → erDiagram-RLTQ6QDP-DhzKiYHc.js} +1037 -798
  92. package/dist/error-banner-B94dcDmP.js +391 -0
  93. package/dist/error-entries-C0NsUqXl.js +56 -0
  94. package/dist/{esm-CR1nhb1c.js → esm-BElI3qKH.js} +22 -22
  95. package/dist/{esm-C1d0g6Bv.js → esm-G4Fhsgng.js} +51 -37
  96. package/dist/{esm-CesmlDrs.js → esm-h8f7-1CJ.js} +423 -423
  97. package/dist/eventmodeling-NTZA5JFV-D7nP7Uyu.js +3 -0
  98. package/dist/feedback-button-D2hUXe09.js +380 -0
  99. package/dist/flowDiagram-HODETNUW-6dMdB8pR.js +16 -0
  100. package/dist/{formats-CslNOKy0.js → formats-BR5iGb4s.js} +8 -8
  101. package/dist/{ganttDiagram-PKOTCBZU-9D-LXF6P.js → ganttDiagram-EL5Y4UJY-DbzEBLbl.js} +15 -15
  102. package/dist/gitGraph-4MIJSDKK-Dy9uQXGh.js +3 -0
  103. package/dist/{gitGraphDiagram-DS77QQ5N-BfpsXTLf.js → gitGraphDiagram-WWUBYQGX-BMf0iKi1.js} +10 -10
  104. package/dist/{glide-data-editor-sPZ8fUFn.js → glide-data-editor-B851uguN.js} +2143 -1910
  105. package/dist/{glide-utils-NShAPPtn.js → glide-utils-B3rUT5PI.js} +15 -15
  106. package/dist/globals-CmijFoIU.js +19 -0
  107. package/dist/highlighted-body-KPVGNVTW-Ad3MKZ18.js +38 -0
  108. package/dist/html-to-image-CeYYvQNb.js +3272 -0
  109. package/dist/info-A6RAGUB7-DKoayiHY.js +3 -0
  110. package/dist/{infoDiagram-6WML65LV-DqCTXHVy.js → infoDiagram-27XIBGKW-BagtCX_5.js} +7 -7
  111. package/dist/{ishikawaDiagram-WSZJBQD7-BCUYmZ1v.js → ishikawaDiagram-5VMMS53U-DByDehYy.js} +8 -8
  112. package/dist/{journeyDiagram-NVQOT4AX-BXB6M4zN.js → journeyDiagram-3NMN7TZE-D2LcKDUO.js} +8 -8
  113. package/dist/{jsx-runtime-CpoKNRgu.js → jsx-runtime-DgDPJV9S.js} +1 -1
  114. package/dist/{kanban-definition-27J2QSJJ-CGRhrDUX.js → kanban-definition-UXKFOSKX-BxwkbBI_.js} +29 -29
  115. package/dist/katex-DFBiSucW.js +21840 -0
  116. package/dist/{label-lwzzBHUW.js → label-BJ49YTvk.js} +6 -6
  117. package/dist/{linear-D5r_1YqD.js → linear-Cnaq3Tfb.js} +4 -4
  118. package/dist/{loader-VZ__bv4g.js → loader-D2W4oM-3.js} +15 -15
  119. package/dist/main.js +8113 -13475
  120. package/dist/mermaid-DPNuhemn.js +3084 -0
  121. package/dist/mermaid-HWGCJPDP-DYCzSILp.js +2 -0
  122. package/dist/mermaid-parser.core-DxuSfYwJ.js +638 -0
  123. package/dist/{mhchem-BjwrxcV-.js → mhchem-DWCF06w9.js} +1 -1
  124. package/dist/{micromark-factory-space-DruVGzeG.js → micromark-factory-space-DGxAzmw8.js} +2 -2
  125. package/dist/{mindmap-definition-FAOFIHXS-C9gRhzZq.js → mindmap-definition-YA3MSWOX-Cgvojw3y.js} +17 -17
  126. package/dist/{node-sql-parser-DesT1xNw.js → node-sql-parser-BiZOJ-FS.js} +0 -3
  127. package/dist/{number-overlay-editor-De2CabLL.js → number-overlay-editor-BtdoxWiD.js} +5 -5
  128. package/dist/objectWithoutPropertiesLoose-BRDcTsfB.js +23 -0
  129. package/dist/packet-AYTQ26CC-Yw7ajchJ.js +3 -0
  130. package/dist/{pegDiagram-VL7TDLO6-Df9IUjMD.js → pegDiagram-XKGWAZYB-DahHhYyN.js} +19 -20
  131. package/dist/{pick-SnHlmIBN.js → pick-CJeoxYOS.js} +1 -1
  132. package/dist/pie-WAS4IAKB-BKdKOAkL.js +3 -0
  133. package/dist/{pieDiagram-7S7Q4E2Y-BmRzQ8ZP.js → pieDiagram-E7YTZNPT-CCtX0oCK.js} +29 -31
  134. package/dist/{process-output-CPy0YKUe.js → process-output-BCTjlyuH.js} +7 -6
  135. package/dist/purify.es-DgKyQviY.js +805 -0
  136. package/dist/{quadrantDiagram-CIZ2JOQS-wFBvWcxS.js → quadrantDiagram-AXDQQJYC-DftINo6g.js} +5 -5
  137. package/dist/radar-RG4KPBEZ-ScR_D_Ts.js +3 -0
  138. package/dist/railroad-74A4TZTK-DQvPSdo5.js +3 -0
  139. package/dist/railroad-abnf-HS5TGJTU-CsJQG2O8.js +3 -0
  140. package/dist/railroad-ebnf-LZEXJU2U-BgEobkSn.js +3 -0
  141. package/dist/railroad-peg-WCYAUIDC-DjLAjofI.js +3 -0
  142. package/dist/{railroadDiagram-AXF67PYL-DxbIatiN.js → railroadDiagram-O6MQD6OU-Du5NsPUb.js} +17 -18
  143. package/dist/{react-dom-C94wmq5w.js → react-dom-BUgJ-ab_.js} +3 -3
  144. package/dist/{react-DMWcHin-.js → react-ofJbxM4x.js} +2 -2
  145. package/dist/{react-vega-DSD5aT7_.js → react-vega-5AcMW8gG.js} +10012 -9369
  146. package/dist/{requirementDiagram-LRYGKXZP-X_x-Y713.js → requirementDiagram-BXWQKSXE-0pmmxL6_.js} +20 -19
  147. package/dist/{reveal-component-CVsYlb9J.js → reveal-component-DQq7NUGJ.js} +1303 -1237
  148. package/dist/{sankeyDiagram-W5VNT64P-BYJALbbm.js → sankeyDiagram-P5KCCOFB-CDKR5TJH.js} +4 -4
  149. package/dist/{select-3qHpFKF9.js → select-C6plhmZr.js} +317 -562
  150. package/dist/{sequenceDiagram-SI44F4Z6-BiPBe3Sv.js → sequenceDiagram-WJ2MYXX4-DB-ChWwU.js} +11 -11
  151. package/dist/{sizeCapture-X5ZJPWSS-BKLDeh5H.js → sizeCapture-INFHLROL-Dx5SpkQF.js} +2 -2
  152. package/dist/{spec-CutWdqo3.js → spec-CAYwFeV6.js} +4 -4
  153. package/dist/{src-C31ngt98.js → src-CA_m4ONl.js} +298 -303
  154. package/dist/{stateDiagram-OKZ733FA-B7QyNBxH.js → stateDiagram-D77RDMKH-orN6AwMx.js} +19 -20
  155. package/dist/stateDiagram-v2-MP3YSRHH-o05_rJN8.js +30 -0
  156. package/dist/style.css +2 -2
  157. package/dist/{swimlanes-SLNWSIFB-B4f8VP3b.js → swimlanes-42K2YHIH-BkSDcqDT.js} +1501 -1591
  158. package/dist/swimlanesDiagram-VR7AAH4N-D_nFQfRc.js +30 -0
  159. package/dist/{swiper-component-C90YjhaV.js → swiper-component-IOUowglM.js} +39 -26
  160. package/dist/{time-aWGfjN8x.js → time-BieKwdYS.js} +42 -42
  161. package/dist/{timeline-definition-Z64GVDOM-Dacq_5lr.js → timeline-definition-24CTP7MA-BuqJUIRZ.js} +7 -7
  162. package/dist/{toDate-CpXBeDq0.js → toDate-WXg1yLcI.js} +7 -7
  163. package/dist/toast-DvY70eFX.js +1834 -0
  164. package/dist/tooltip-qB8NlSqV.js +1742 -0
  165. package/dist/treeView-Q6P3EWNA-DuRV97YF.js +3 -0
  166. package/dist/treemap-WGGIJYW6-AsLq-uwC.js +3 -0
  167. package/dist/use-restore-focus-D5D9xEjZ.js +5946 -0
  168. package/dist/{use-vega-container-remeasure-DUW4tRxq.js → use-vega-container-remeasure-4DwJbPWu.js} +2 -2
  169. package/dist/{useAsyncData-CH6-CgJF.js → useAsyncData-BD6AStMt.js} +3 -3
  170. package/dist/{useDateFormatter-Cp9Jdxls.js → useDateFormatter-BRTPsUK7.js} +8 -8
  171. package/dist/{useDeepCompareMemoize-JC87C_jO.js → useDeepCompareMemoize-D_HNdyvI.js} +2 -2
  172. package/dist/{useIframeCapabilities-De3C-9b4.js → useIframeCapabilities-CVtNkI3Y.js} +2 -2
  173. package/dist/{useLifecycle-B4RGlyf0.js → useLifecycle-DPgiiwwU.js} +6 -6
  174. package/dist/useNumberFormatter-BfDpa21j.js +251 -0
  175. package/dist/useTheme-DzXmYZ5V.js +904 -0
  176. package/dist/{vega-component-ovBXgp91.js → vega-component-D0QXopU8.js} +34 -34
  177. package/dist/{vega-embed-container-TJ5z5dZw.js → vega-embed-container-CbnTccZi.js} +6 -6
  178. package/dist/vega-loader.browser-D95WfUcj.js +1139 -0
  179. package/dist/{vennDiagram-T6HMQDX7-D-Rcq3Iu.js → vennDiagram-4TSXK5OY-CTUlJ2PK.js} +9 -9
  180. package/dist/wardley-WFR3VGLG-Na-tFhQJ.js +3 -0
  181. package/dist/{wardleyDiagram-T6FBY63Y-Z-Og7_Wd.js → wardleyDiagram-VM6X3IG4-3evLUb0M.js} +10 -10
  182. package/dist/{xychartDiagram-ELKLHX3M-BDJ2dITA.js → xychartDiagram-S5SC5T6Z-DL2E3K8-.js} +248 -139
  183. package/package.json +54 -57
  184. package/src/__mocks__/notebook.ts +1 -0
  185. package/src/__mocks__/requests.ts +7 -0
  186. package/src/__tests__/__snapshots__/CellStatus.test.tsx.snap +12 -12
  187. package/src/__tests__/fixtures/pair-preview.ts +19 -0
  188. package/src/__tests__/mount.test.ts +18 -0
  189. package/src/components/app-config/optional-features.tsx +6 -0
  190. package/src/components/chat/acp/__tests__/agent-panel-initialization.test.tsx +394 -0
  191. package/src/components/chat/acp/__tests__/agent-panel.test.tsx +272 -0
  192. package/src/components/chat/acp/__tests__/state.test.ts +2 -2
  193. package/src/components/chat/acp/agent-panel.tsx +115 -74
  194. package/src/components/chat/acp/state.ts +1 -1
  195. package/src/components/data-table/__tests__/filters.test.ts +21 -21
  196. package/src/components/data-table/charts/__tests__/spec.test.ts +5 -10
  197. package/src/components/data-table/column-explorer-panel/column-explorer.tsx +2 -6
  198. package/src/components/data-table/column-summary/chart-spec-model.tsx +1 -1
  199. package/src/components/data-table/columns.tsx +64 -67
  200. package/src/components/editor/RecoveryButton.tsx +1 -0
  201. package/src/components/editor/__tests__/dynamic-favicon.test.tsx +36 -2
  202. package/src/components/editor/actions/__tests__/pair-with-agent-commands.test.ts +115 -0
  203. package/src/components/editor/actions/__tests__/pair-with-agent-modal.test.tsx +218 -0
  204. package/src/components/editor/actions/pair-with-agent-commands.ts +46 -9
  205. package/src/components/editor/actions/pair-with-agent-modal.tsx +49 -23
  206. package/src/components/editor/ai/add-cell-with-ai.tsx +1 -0
  207. package/src/components/editor/ai/ai-completion-editor.tsx +3 -1
  208. package/src/components/editor/alerts/__tests__/connection-notice.test.tsx +186 -0
  209. package/src/components/editor/alerts/__tests__/startup-progress.test.tsx +185 -0
  210. package/src/components/editor/alerts/connecting-alert.tsx +1 -66
  211. package/src/components/editor/alerts/connection-notice.tsx +186 -0
  212. package/src/components/editor/alerts/startup-output.tsx +173 -0
  213. package/src/components/editor/alerts/startup-progress.tsx +204 -0
  214. package/src/components/editor/app-container.tsx +9 -3
  215. package/src/components/editor/boundary/ErrorBoundary.tsx +38 -16
  216. package/src/components/editor/boundary/__tests__/ErrorBoundary.test.tsx +311 -0
  217. package/src/components/editor/cell/__tests__/toolbar.test.tsx +73 -0
  218. package/src/components/editor/cell/code/__tests__/rtc-editor-config.test.ts +50 -0
  219. package/src/components/editor/cell/code/cell-editor.tsx +41 -42
  220. package/src/components/editor/cell/toolbar.tsx +11 -0
  221. package/src/components/editor/chrome/components/__tests__/feedback-button.test.tsx +94 -0
  222. package/src/components/editor/chrome/components/feedback-button.tsx +63 -42
  223. package/src/components/editor/chrome/panels/__tests__/packages-panel.test.tsx +164 -8
  224. package/src/components/editor/chrome/panels/__tests__/sandbox-details.test.tsx +358 -0
  225. package/src/components/editor/chrome/panels/__tests__/sandbox-recovery.test.tsx +168 -0
  226. package/src/components/editor/chrome/panels/packages-panel.tsx +113 -175
  227. package/src/components/editor/chrome/panels/sandbox-controller.tsx +106 -0
  228. package/src/components/editor/chrome/panels/sandbox-details-state.ts +38 -0
  229. package/src/components/editor/chrome/panels/sandbox-panel.tsx +230 -0
  230. package/src/components/editor/chrome/panels/sandbox-toggle.tsx +52 -0
  231. package/src/components/editor/chrome/wrapper/app-chrome.tsx +7 -0
  232. package/src/components/editor/chrome/wrapper/footer-items/backend-status.tsx +3 -1
  233. package/src/components/editor/code/__tests__/readonly-diff.test.tsx +65 -0
  234. package/src/components/editor/code/readonly-diff.tsx +1 -1
  235. package/src/components/editor/connections/database/__tests__/__snapshots__/as-code.test.ts.snap +98 -98
  236. package/src/components/editor/connections/database/__tests__/as-code.test.ts +11 -5
  237. package/src/components/editor/dynamic-favicon.tsx +17 -10
  238. package/src/components/editor/file-tree/__tests__/file-explorer-navigation.test.tsx +13 -11
  239. package/src/components/editor/file-tree/__tests__/tree-actions.test.tsx +54 -0
  240. package/src/components/editor/file-tree/tree-actions.tsx +11 -14
  241. package/src/components/editor/header/__tests__/status.test.tsx +8 -20
  242. package/src/components/editor/header/filename-input.tsx +2 -0
  243. package/src/components/editor/header/status.tsx +5 -3
  244. package/src/components/editor/navigation/clipboard.ts +1 -0
  245. package/src/components/editor/notebook-cell.tsx +4 -2
  246. package/src/components/editor/output/JsonOutput.tsx +182 -632
  247. package/src/components/editor/output/Outputs.css +49 -17
  248. package/src/components/editor/output/__tests__/JsonOutput-interactions.test.tsx +254 -0
  249. package/src/components/editor/output/__tests__/JsonOutput-mimetype.test.tsx +41 -46
  250. package/src/components/editor/output/__tests__/{json-output.test.ts → json-output-formatting.test.ts} +113 -75
  251. package/src/components/editor/output/__tests__/json-output-pagination.test.ts +252 -0
  252. package/src/components/editor/output/json-output/formatting.ts +167 -0
  253. package/src/components/editor/output/json-output/pagination.ts +155 -0
  254. package/src/components/editor/output/json-output/renderers.tsx +196 -0
  255. package/src/components/editor/output/json-output/themes.ts +52 -0
  256. package/src/components/editor/package-alert.tsx +112 -66
  257. package/src/components/editor/renderers/cell-array.tsx +1 -5
  258. package/src/components/editor/renderers/slides-layout/__tests__/plugin.test.ts +3 -7
  259. package/src/components/slides/slide-form.tsx +1 -0
  260. package/src/components/slides/slide-notes-editor.tsx +1 -0
  261. package/src/components/tracing/tracing-spec.ts +1 -1
  262. package/src/components/ui/__tests__/badge.test.ts +6 -4
  263. package/src/components/ui/use-toast.ts +8 -0
  264. package/src/core/MarimoApp.tsx +0 -2
  265. package/src/core/ai/context/providers/__tests__/error.test.ts +16 -22
  266. package/src/core/alerts/__tests__/environment.test.ts +183 -0
  267. package/src/core/alerts/__tests__/state.test.tsx +240 -0
  268. package/src/core/alerts/environment.ts +57 -0
  269. package/src/core/alerts/state.ts +155 -99
  270. package/src/core/cells/__tests__/__snapshots__/cells.test.ts.snap +296 -259
  271. package/src/core/cells/__tests__/apply-transaction.test.ts +34 -0
  272. package/src/core/cells/__tests__/cell.test.ts +61 -0
  273. package/src/core/cells/__tests__/cells.test.ts +182 -37
  274. package/src/core/cells/__tests__/document-changes.test.ts +39 -1
  275. package/src/core/cells/__tests__/outputs.test.tsx +117 -0
  276. package/src/core/cells/__tests__/pending-delete-service.test.tsx +4 -3
  277. package/src/core/cells/__tests__/session.test.ts +7 -0
  278. package/src/core/cells/cell.ts +9 -1
  279. package/src/core/cells/cells.ts +13 -18
  280. package/src/core/cells/document-changes.ts +11 -1
  281. package/src/core/cells/outputs.ts +66 -9
  282. package/src/core/cells/pending-delete-service.ts +12 -16
  283. package/src/core/cells/session.ts +2 -0
  284. package/src/core/cells/types.ts +2 -0
  285. package/src/core/codemirror/find-replace/__tests__/navigate.test.ts +8 -16
  286. package/src/core/codemirror/language/__tests__/sql.test.ts +70 -2
  287. package/src/core/codemirror/language/embedded/__tests__/embedded-python.test.ts +4 -8
  288. package/src/core/codemirror/language/languages/sql/sql.ts +16 -1
  289. package/src/core/codemirror/rtc/extension.ts +5 -2
  290. package/src/core/config/pair.ts +19 -0
  291. package/src/core/datasets/__tests__/data-source.test.ts +2 -0
  292. package/src/core/datasets/data-source-connections.ts +15 -10
  293. package/src/core/edit-app.tsx +8 -5
  294. package/src/core/errors/state.ts +1 -2
  295. package/src/core/export/__tests__/hooks.test.ts +1 -6
  296. package/src/core/islands/bootstrap.ts +3 -1
  297. package/src/core/islands/bridge.ts +3 -0
  298. package/src/core/islands/worker-factory.ts +2 -12
  299. package/src/core/kernel/messages.ts +2 -2
  300. package/src/core/network/__tests__/requests-network.test.ts +4 -3
  301. package/src/core/network/connection-notice.ts +117 -0
  302. package/src/core/network/connection.ts +19 -0
  303. package/src/core/network/requests-lazy.ts +3 -0
  304. package/src/core/network/requests-network.ts +12 -0
  305. package/src/core/network/requests-static.ts +3 -0
  306. package/src/core/network/requests-toasting.tsx +3 -0
  307. package/src/core/network/resolve.ts +2 -1
  308. package/src/core/network/types.ts +7 -0
  309. package/src/core/network/useConnectionNotice.ts +53 -0
  310. package/src/core/packages/__tests__/usePackageAction.test.tsx +129 -0
  311. package/src/core/packages/__tests__/useSandboxController.test.tsx +246 -0
  312. package/src/core/packages/package-data.ts +35 -0
  313. package/src/core/packages/sandbox-state.ts +67 -0
  314. package/src/core/packages/toast-components.tsx +11 -0
  315. package/src/core/packages/useInstallPackage.ts +1 -1
  316. package/src/core/packages/usePackageAction.ts +51 -0
  317. package/src/core/packages/usePackageDependencies.ts +22 -0
  318. package/src/core/packages/useSandboxController.ts +208 -0
  319. package/src/core/run-app.tsx +2 -0
  320. package/src/core/static/__tests__/files.test.ts +12 -30
  321. package/src/core/wasm/__tests__/bootstrap.test.ts +63 -0
  322. package/src/core/wasm/__tests__/bridge.test.ts +13 -4
  323. package/src/core/wasm/__tests__/fs.test.ts +22 -0
  324. package/src/core/wasm/__tests__/runtime-config.test.ts +65 -0
  325. package/src/core/wasm/bridge.ts +35 -23
  326. package/src/core/wasm/rpc.ts +2 -0
  327. package/src/core/wasm/runtime-config.ts +31 -0
  328. package/src/core/wasm/worker/bootstrap.ts +21 -11
  329. package/src/core/wasm/worker/constants.ts +1 -0
  330. package/src/core/wasm/worker/fs.ts +4 -0
  331. package/src/core/wasm/worker/getController.ts +3 -1
  332. package/src/core/wasm/worker/save-worker.ts +10 -9
  333. package/src/core/wasm/worker/types.ts +6 -4
  334. package/src/core/wasm/worker/worker.ts +9 -9
  335. package/src/core/websocket/__tests__/useMarimoKernelConnection.hook.test.tsx +404 -3
  336. package/src/core/websocket/__tests__/useMarimoKernelConnection.test.ts +8 -6
  337. package/src/core/websocket/transports/transport.ts +1 -1
  338. package/src/core/websocket/transports/ws.ts +1 -1
  339. package/src/core/websocket/types.ts +11 -1
  340. package/src/core/websocket/useMarimoKernelConnection.tsx +63 -16
  341. package/src/hooks/useDebounce.ts +2 -0
  342. package/src/mount.tsx +3 -0
  343. package/src/plugins/core/BadPlugin.tsx +3 -14
  344. package/src/plugins/core/RenderHTML.tsx +22 -2
  345. package/src/plugins/core/__test__/RenderHTML.test.ts +187 -0
  346. package/src/plugins/core/registerReactComponent.tsx +0 -1
  347. package/src/plugins/impl/FileBrowserPlugin.tsx +10 -4
  348. package/src/plugins/impl/FormPlugin.tsx +2 -0
  349. package/src/plugins/impl/MatrixPlugin.tsx +2 -0
  350. package/src/plugins/impl/RangeSliderPlugin.tsx +2 -0
  351. package/src/plugins/impl/SliderPlugin.tsx +2 -0
  352. package/src/plugins/impl/__tests__/FileBrowserPlugin.test.tsx +50 -1
  353. package/src/plugins/impl/data-editor/__tests__/glide-data-editor.test.tsx +23 -18
  354. package/src/plugins/impl/data-frames/panel.tsx +1 -0
  355. package/src/plugins/impl/image-comparison/ImageComparisonComponent.tsx +1 -1
  356. package/src/plugins/impl/image-comparison/__tests__/ImageComparisonComponent.test.tsx +15 -0
  357. package/src/plugins/impl/vega/__tests__/make-selectable.test.ts +42 -48
  358. package/src/plugins/layout/AccordionPlugin.tsx +7 -2
  359. package/src/plugins/layout/JsonOutputPlugin.tsx +7 -10
  360. package/src/plugins/layout/__test__/AccordionPlugin.test.tsx +66 -0
  361. package/src/stories/sandbox.stories.tsx +488 -0
  362. package/src/utils/__tests__/path.test.ts +6 -5
  363. package/src/utils/__tests__/worker.test.ts +81 -0
  364. package/src/utils/worker.ts +22 -0
  365. package/dist/ErrorBoundary-CR-ZQN_c.js +0 -125
  366. package/dist/_baseMerge-Dv8bBloN.js +0 -73
  367. package/dist/_initCloneObject---vediN2.js +0 -95
  368. package/dist/arc-DOVLrCPd.js +0 -82
  369. package/dist/architecture-TIHT7OUA-MiJpPpQW.js +0 -3
  370. package/dist/array-CApNbSU9.js +0 -6
  371. package/dist/assets/__vite-browser-external-BdKGjRZ4.js +0 -1
  372. package/dist/assets/worker-DlIBfp9S.js +0 -98
  373. package/dist/blockDiagram-VBNYF7ZC-Bc--I65C.js +0 -3158
  374. package/dist/chat-ui-BSwr409J.js +0 -8455
  375. package/dist/chunk-3NCLNEKW-BIp_lB_4.js +0 -14
  376. package/dist/chunk-5FCAYU7R-C_HO9A1J.js +0 -23
  377. package/dist/chunk-5HE753X5-Bixm_MV-.js +0 -38
  378. package/dist/chunk-5JV3BV7I-CH5J3iZY.js +0 -54
  379. package/dist/chunk-5TONJI2A-DG6gDiSS.js +0 -62
  380. package/dist/chunk-7BUUIJ7U-5afmIPeo.js +0 -82
  381. package/dist/chunk-BIQX33UG-7TMBUf89.js +0 -23
  382. package/dist/chunk-CQNSW5MT-Cnqqsxt-.js +0 -38
  383. package/dist/chunk-CYSBUYHQ-BAbymFHR.js +0 -23
  384. package/dist/chunk-EMLP6XTP-Bsz-QL77.js +0 -23
  385. package/dist/chunk-J7OUQ5F2-CM_meqZH.js +0 -57
  386. package/dist/chunk-JG7HCLWE-DUnCDgPk.js +0 -62
  387. package/dist/chunk-MOZMSUNE-BG6IHvzT.js +0 -35
  388. package/dist/chunk-OSBZ3O6U-CYwj_bvR.js +0 -23
  389. package/dist/chunk-QBLGF6JB-B4vJ4j8J.js +0 -23
  390. package/dist/chunk-QR6OTTB3-D4wH2ldi.js +0 -3738
  391. package/dist/chunk-R7FJI6CG-Blf8FcmZ.js +0 -64
  392. package/dist/chunk-RYQCIY6F-BWbIlBIH.js +0 -241
  393. package/dist/chunk-U6XO7XAA-COw445DS.js +0 -63
  394. package/dist/chunk-UBXNYLIW-BHigVU4H.js +0 -32
  395. package/dist/chunk-YOTPTUD7-Dn044Q_d.js +0 -30
  396. package/dist/chunk-ZIRB5QZD-BR4TMfOa.js +0 -1153
  397. package/dist/classDiagram-JCYQIIEL-DmXSLxe_.js +0 -30
  398. package/dist/classDiagram-v2-OCEON4UE-CooqVexA.js +0 -30
  399. package/dist/click-outside-container-D_URcm3D.js +0 -167
  400. package/dist/code-block-37QAKDTI-CQrzBOr-.js +0 -107
  401. package/dist/copy-CD7S58CY.js +0 -141
  402. package/dist/cynefin-VYW2F7L2-CeHAxOEX.js +0 -3
  403. package/dist/dagre-VZM6K2ZE-CJggWPTJ.js +0 -328
  404. package/dist/dist-3_o3T78I.js +0 -1360
  405. package/dist/dist-ABQjhuek.js +0 -64
  406. package/dist/dist-CO5R6VMi.js +0 -538
  407. package/dist/dropdown-menu-DhCfcscX.js +0 -5858
  408. package/dist/emotion-is-prop-valid.esm-M57VsT8j.js +0 -14
  409. package/dist/error-banner-CsXbEEjo.js +0 -611
  410. package/dist/eventmodeling-45OFAUF4-B_lWZ-Pd.js +0 -3
  411. package/dist/flowDiagram-UKHOOZJN-g1AmrZzM.js +0 -17
  412. package/dist/gitGraph-TEB2WS4Q-Dj-eXUph.js +0 -3
  413. package/dist/info-DKCQHKI2-Bhb-pe2e.js +0 -3
  414. package/dist/line-CuKjIQa1.js +0 -34
  415. package/dist/map-BJpOfPlL.js +0 -149
  416. package/dist/math-BXtKgYah.js +0 -10
  417. package/dist/mermaid-4DMBBIKO-Ddp9TgNp.js +0 -2
  418. package/dist/mermaid-Bi23Ibnw.js +0 -1173
  419. package/dist/mermaid-parser.core-Din9FvSi.js +0 -99
  420. package/dist/packet-7NZHBO7P-fbkIIyKE.js +0 -3
  421. package/dist/path-BNHuHZP8.js +0 -87
  422. package/dist/pie-RZYD4A2V-CLRIsxY1.js +0 -3
  423. package/dist/purify.es-CB-YO1Hn.js +0 -774
  424. package/dist/radar-I7S5WNFK-BGzCbgXu.js +0 -3
  425. package/dist/railroad-3IZDKUUU-CvQIIcuU.js +0 -3
  426. package/dist/railroad-abnf-AHOZXSZD-CMwtlNtu.js +0 -3
  427. package/dist/railroad-ebnf-EBAXGLYW-n1QUOAsh.js +0 -3
  428. package/dist/railroad-peg-LSFZ7HO6-PjnrpmCs.js +0 -3
  429. package/dist/schemas-DzK6U94N.js +0 -6057
  430. package/dist/stateDiagram-v2-UEYNNEHI-BTRUs8Il.js +0 -30
  431. package/dist/step-CKczO72Q.js +0 -670
  432. package/dist/swimlanesDiagram-ULZ7WXOC-NBmgBl9G.js +0 -31
  433. package/dist/timer-DpDyj9G0.js +0 -596
  434. package/dist/tooltip-Dt77sBeT.js +0 -390
  435. package/dist/treeView-QDETBFTQ-DU8LwHuf.js +0 -3
  436. package/dist/treemap-6X3UGDF4-DUk4-k_O.js +0 -3
  437. package/dist/useTheme-CVJ0UOf2.js +0 -841
  438. package/dist/vega-loader.browser-DEggZzni.js +0 -1083
  439. package/dist/wardley-OPB4EBWU-Db-AaGas.js +0 -3
  440. package/src/components/editor/output/EmotionCacheProvider.tsx +0 -32
@@ -797,7 +797,7 @@ describe("cell reducer", () => {
797
797
  expect(cell.status).toBe("idle");
798
798
  expect(cell.lastCodeRun).toBe(null);
799
799
  expect(cell.edited).toBe(false);
800
- expect(cell).toMatchSnapshot(); // snapshot everything as a catch all
800
+ expect(cell).toMatchSnapshot("initial state");
801
801
 
802
802
  // Update code
803
803
  actions.updateCellCode({
@@ -809,7 +809,7 @@ describe("cell reducer", () => {
809
809
  expect(cell.status).toBe("idle");
810
810
  expect(cell.lastCodeRun).toBe(null);
811
811
  expect(cell.edited).toBe(true);
812
- expect(cell).toMatchSnapshot(); // snapshot everything as a catch all
812
+ expect(cell).toMatchSnapshot("code edited");
813
813
 
814
814
  // Prepare for run
815
815
  actions.prepareForRun({
@@ -819,7 +819,7 @@ describe("cell reducer", () => {
819
819
  expect(cell.status).toBe("queued");
820
820
  expect(cell.lastCodeRun).toBe("import marimo as mo");
821
821
  expect(cell.edited).toBe(false);
822
- expect(cell).toMatchSnapshot(); // snapshot everything as a catch all
822
+ expect(cell).toMatchSnapshot("prepared for run");
823
823
 
824
824
  // Receive queued messages
825
825
  actions.handleCellMessage({
@@ -837,7 +837,7 @@ describe("cell reducer", () => {
837
837
  expect(cell.runElapsedTimeMs).toBe(null);
838
838
  expect(cell.runStartTimestamp).toBe(null);
839
839
  expect(cell.lastRunStartTimestamp).toBe(null);
840
- expect(cell).toMatchSnapshot(); // snapshot everything as a catch all
840
+ expect(cell).toMatchSnapshot("queued message received");
841
841
 
842
842
  // Receive running messages
843
843
  actions.handleCellMessage({
@@ -855,7 +855,7 @@ describe("cell reducer", () => {
855
855
  expect(cell.runElapsedTimeMs).toBe(null);
856
856
  expect(cell.runStartTimestamp).toBe(20);
857
857
  expect(cell.lastRunStartTimestamp).toBe(20);
858
- expect(cell).toMatchSnapshot(); // snapshot everything as a catch all
858
+ expect(cell).toMatchSnapshot("running message received");
859
859
 
860
860
  // Console messages shouldn't transition status
861
861
  actions.handleCellMessage({
@@ -877,7 +877,7 @@ describe("cell reducer", () => {
877
877
  expect(cell.runElapsedTimeMs).toBe(null);
878
878
  expect(cell.runStartTimestamp).toBe(20);
879
879
  expect(cell.lastRunStartTimestamp).toBe(20);
880
- expect(cell).toMatchSnapshot(); // snapshot everything as a catch all
880
+ expect(cell).toMatchSnapshot("console message received");
881
881
 
882
882
  // Receive output messages
883
883
  actions.handleCellMessage({
@@ -904,7 +904,7 @@ describe("cell reducer", () => {
904
904
  expect(cell.runElapsedTimeMs).toBe(13_000);
905
905
  expect(cell.runStartTimestamp).toBe(null);
906
906
  expect(cell.lastRunStartTimestamp).toBe(20);
907
- expect(cell).toMatchSnapshot(); // snapshot everything as a catch all
907
+ expect(cell).toMatchSnapshot("output received");
908
908
 
909
909
  // EDITING BACK AND FORTH
910
910
  /////////////////
@@ -917,7 +917,7 @@ describe("cell reducer", () => {
917
917
  cell = cells[0];
918
918
  expect(cell.status).toBe("idle");
919
919
  expect(cell.edited).toBe(true);
920
- expect(cell).toMatchSnapshot(); // snapshot everything as a catch all
920
+ expect(cell).toMatchSnapshot("code edited again");
921
921
 
922
922
  // Update code should be unedited
923
923
  actions.updateCellCode({
@@ -927,7 +927,7 @@ describe("cell reducer", () => {
927
927
  });
928
928
  cell = cells[0];
929
929
  expect(cell.edited).toBe(false);
930
- expect(cell).toMatchSnapshot(); // snapshot everything as a catch all
930
+ expect(cell).toMatchSnapshot("code reverted");
931
931
 
932
932
  // Update code should be edited again
933
933
  actions.updateCellCode({
@@ -939,7 +939,7 @@ describe("cell reducer", () => {
939
939
  expect(cell.status).toBe("idle");
940
940
  expect(cell.lastCodeRun).toBe("import marimo as mo");
941
941
  expect(cell.edited).toBe(true);
942
- expect(cell).toMatchSnapshot(); // snapshot everything as a catch all
942
+ expect(cell).toMatchSnapshot("code changed after revert");
943
943
 
944
944
  // ERROR RESPONSE
945
945
  /////////////////
@@ -994,7 +994,7 @@ describe("cell reducer", () => {
994
994
  expect(cell.edited).toBe(false);
995
995
  expect(cell.runElapsedTimeMs).toBe(11_000);
996
996
  expect(cell.runStartTimestamp).toBe(null);
997
- expect(cell).toMatchSnapshot(); // snapshot everything as a catch all
997
+ expect(cell).toMatchSnapshot("error response received");
998
998
 
999
999
  // INTERRUPT RESPONSE
1000
1000
  /////////////////
@@ -1046,7 +1046,7 @@ describe("cell reducer", () => {
1046
1046
  expect(cell.edited).toBe(false);
1047
1047
  expect(cell.runElapsedTimeMs).toBe(11_000);
1048
1048
  expect(cell.runStartTimestamp).toBe(null);
1049
- expect(cell).toMatchSnapshot(); // snapshot everything as a catch all
1049
+ expect(cell).toMatchSnapshot("interruption response received");
1050
1050
  });
1051
1051
 
1052
1052
  it("errors reset status to idle", () => {
@@ -1055,7 +1055,7 @@ describe("cell reducer", () => {
1055
1055
  expect(cell.status).toBe("idle");
1056
1056
  expect(cell.lastCodeRun).toBe(null);
1057
1057
  expect(cell.edited).toBe(false);
1058
- expect(cell).toMatchSnapshot(); // snapshot everything as a catch all
1058
+ expect(cell).toMatchSnapshot("initial state");
1059
1059
 
1060
1060
  // Update code
1061
1061
  actions.updateCellCode({
@@ -1067,7 +1067,7 @@ describe("cell reducer", () => {
1067
1067
  expect(cell.status).toBe("idle");
1068
1068
  expect(cell.lastCodeRun).toBe(null);
1069
1069
  expect(cell.edited).toBe(true);
1070
- expect(cell).toMatchSnapshot(); // snapshot everything as a catch all
1070
+ expect(cell).toMatchSnapshot("code edited");
1071
1071
 
1072
1072
  // Prepare for run
1073
1073
  actions.prepareForRun({
@@ -1077,7 +1077,7 @@ describe("cell reducer", () => {
1077
1077
  expect(cell.status).toBe("queued");
1078
1078
  expect(cell.lastCodeRun).toBe("import marimo as mo");
1079
1079
  expect(cell.edited).toBe(false);
1080
- expect(cell).toMatchSnapshot(); // snapshot everything as a catch all
1080
+ expect(cell).toMatchSnapshot("prepared for run");
1081
1081
 
1082
1082
  // ERROR RESPONSE
1083
1083
  //
@@ -1109,7 +1109,7 @@ describe("cell reducer", () => {
1109
1109
  expect(cell.edited).toBe(false);
1110
1110
  expect(cell.runElapsedTimeMs).toBe(null);
1111
1111
  expect(cell.runStartTimestamp).toBe(null);
1112
- expect(cell).toMatchSnapshot(); // snapshot everything as a catch all
1112
+ expect(cell).toMatchSnapshot("error response received");
1113
1113
  });
1114
1114
 
1115
1115
  it("can run a stale cell", () => {
@@ -1152,7 +1152,7 @@ describe("cell reducer", () => {
1152
1152
  expect(cell.edited).toBe(false);
1153
1153
  expect(cell.runElapsedTimeMs).toBe(null);
1154
1154
  expect(cell.runStartTimestamp).toBe(null);
1155
- expect(cell).toMatchSnapshot(); // snapshot everything as a catch all
1155
+ expect(cell).toMatchSnapshot("queued message received");
1156
1156
 
1157
1157
  // Receive stale message
1158
1158
  actions.handleCellMessage({
@@ -1169,7 +1169,7 @@ describe("cell reducer", () => {
1169
1169
  expect(cell.edited).toBe(false);
1170
1170
  expect(cell.runElapsedTimeMs).toBe(null);
1171
1171
  expect(cell.runStartTimestamp).toBe(null);
1172
- expect(cell).toMatchSnapshot(); // snapshot everything as a catch all
1172
+ expect(cell).toMatchSnapshot("stale inputs received");
1173
1173
  });
1174
1174
 
1175
1175
  it("can format code and update cell", () => {
@@ -1233,6 +1233,7 @@ describe("cell reducer", () => {
1233
1233
  disabled: false,
1234
1234
  hide_code: false,
1235
1235
  column: null,
1236
+ expand_output: false,
1236
1237
  });
1237
1238
 
1238
1239
  actions.updateCellConfig({
@@ -1281,7 +1282,7 @@ describe("cell reducer", () => {
1281
1282
  expect(cell.edited).toBe(false);
1282
1283
  expect(cell.runElapsedTimeMs).toBe(null);
1283
1284
  expect(cell.runStartTimestamp).toBe(null);
1284
- expect(cell).toMatchSnapshot(); // snapshot everything as a catch all
1285
+ expect(cell).toMatchSnapshot("queued message received");
1285
1286
 
1286
1287
  // Receive idle message
1287
1288
  actions.handleCellMessage({
@@ -1293,7 +1294,7 @@ describe("cell reducer", () => {
1293
1294
  timestamp: new Date(20).getTime() as Seconds,
1294
1295
  });
1295
1296
  cell = cells[0];
1296
- expect(cell).toMatchSnapshot(); // snapshot everything as a catch all
1297
+ expect(cell).toMatchSnapshot("idle message received");
1297
1298
 
1298
1299
  // Receive stop output
1299
1300
  actions.handleCellMessage({
@@ -1322,7 +1323,7 @@ describe("cell reducer", () => {
1322
1323
  "This cell wasn't run because an ancestor was stopped with `mo.stop`: ",
1323
1324
  );
1324
1325
  expect(cell.stopped).toBe(true);
1325
- expect(cell).toMatchSnapshot(); // snapshot everything as a catch all
1326
+ expect(cell).toMatchSnapshot("ancestor stopped");
1326
1327
 
1327
1328
  // Receive queued message
1328
1329
  actions.handleCellMessage({
@@ -1336,7 +1337,7 @@ describe("cell reducer", () => {
1336
1337
  cell = cells[0];
1337
1338
  expect(cell.status).toBe("queued");
1338
1339
  expect(cell.stopped).toBe(true);
1339
- expect(cell).toMatchSnapshot(); // snapshot everything as a catch all
1340
+ expect(cell).toMatchSnapshot("queued after stop");
1340
1341
 
1341
1342
  // Receive running message
1342
1343
  actions.handleCellMessage({
@@ -1351,7 +1352,7 @@ describe("cell reducer", () => {
1351
1352
  expect(cell.status).toBe("running");
1352
1353
  expect(cell.stopped).toBe(false);
1353
1354
  expect(cell.output).toBe(null);
1354
- expect(cell).toMatchSnapshot(); // snapshot everything as a catch all
1355
+ expect(cell).toMatchSnapshot("running after stop");
1355
1356
  });
1356
1357
 
1357
1358
  it("can initialize stdin", () => {
@@ -1378,7 +1379,7 @@ describe("cell reducer", () => {
1378
1379
  let cell = cells[0];
1379
1380
  expect(cell.status).toBe("idle");
1380
1381
  expect(cell.consoleOutputs).toEqual([]);
1381
- expect(cell).toMatchSnapshot(); // snapshot everything as a catch all
1382
+ expect(cell).toMatchSnapshot("initial state");
1382
1383
 
1383
1384
  // Prepare for run
1384
1385
  actions.prepareForRun({
@@ -1387,7 +1388,7 @@ describe("cell reducer", () => {
1387
1388
  cell = cells[0];
1388
1389
  expect(cell.status).toBe("queued");
1389
1390
  expect(cell.consoleOutputs).toEqual([]);
1390
- expect(cell).toMatchSnapshot(); // snapshot everything as a catch all
1391
+ expect(cell).toMatchSnapshot("prepared for run");
1391
1392
 
1392
1393
  // Receive queued messages
1393
1394
  actions.handleCellMessage({
@@ -1400,7 +1401,7 @@ describe("cell reducer", () => {
1400
1401
  });
1401
1402
  cell = cells[0];
1402
1403
  expect(cell.status).toBe("queued");
1403
- expect(cell).toMatchSnapshot(); // snapshot everything as a catch all
1404
+ expect(cell).toMatchSnapshot("queued message received");
1404
1405
 
1405
1406
  // Receive running messages
1406
1407
  actions.handleCellMessage({
@@ -1413,7 +1414,7 @@ describe("cell reducer", () => {
1413
1414
  });
1414
1415
  cell = cells[0];
1415
1416
  expect(cell.status).toBe("running");
1416
- expect(cell).toMatchSnapshot(); // snapshot everything as a catch all
1417
+ expect(cell).toMatchSnapshot("running message received");
1417
1418
 
1418
1419
  // Add console
1419
1420
  actions.handleCellMessage({
@@ -1426,12 +1427,12 @@ describe("cell reducer", () => {
1426
1427
  });
1427
1428
  cell = cells[0];
1428
1429
  expect(cell.status).toBe("running");
1429
- expect(cell).toMatchSnapshot(); // snapshot everything as a catch all
1430
+ expect(cell).toMatchSnapshot("stdout received");
1430
1431
 
1431
1432
  cell = cells[0];
1432
1433
  expect(cell.consoleOutputs[0]).toMatchObject(STDOUT);
1433
1434
  expect(cell.status).toBe("running");
1434
- expect(cell).toMatchSnapshot(); // snapshot everything as a catch all
1435
+ expect(cell).toMatchSnapshot("stdout verified");
1435
1436
 
1436
1437
  // Ask via stdin
1437
1438
  actions.handleCellMessage({
@@ -1446,7 +1447,7 @@ describe("cell reducer", () => {
1446
1447
  expect(cell.consoleOutputs[0]).toMatchObject(STDOUT);
1447
1448
  expect(cell.consoleOutputs[1]).toMatchObject(STD_IN_1);
1448
1449
  expect(cell.status).toBe("running");
1449
- expect(cell).toMatchSnapshot(); // snapshot everything as a catch all
1450
+ expect(cell).toMatchSnapshot("stdin requested");
1450
1451
 
1451
1452
  // Response to stdin
1452
1453
  actions.setStdinResponse({
@@ -1460,7 +1461,7 @@ describe("cell reducer", () => {
1460
1461
  response: "Marimo!",
1461
1462
  });
1462
1463
  expect(cell.status).toBe("running");
1463
- expect(cell).toMatchSnapshot(); // snapshot everything as a catch all
1464
+ expect(cell).toMatchSnapshot("stdin answered");
1464
1465
 
1465
1466
  // Ask via stdin, again
1466
1467
  actions.handleCellMessage({
@@ -1478,7 +1479,7 @@ describe("cell reducer", () => {
1478
1479
  STD_IN_2,
1479
1480
  ]);
1480
1481
  expect(cell.status).toBe("running");
1481
- expect(cell).toMatchSnapshot(); // snapshot everything as a catch all
1482
+ expect(cell).toMatchSnapshot("second stdin requested");
1482
1483
 
1483
1484
  // Interrupt, so we respond with ""
1484
1485
  actions.handleCellMessage({
@@ -1562,7 +1563,7 @@ describe("cell reducer", () => {
1562
1563
  let cell = cells[0];
1563
1564
  expect(cell.status).toBe("idle");
1564
1565
  expect(cell.consoleOutputs).toEqual([]);
1565
- expect(cell).toMatchSnapshot(); // snapshot everything as a catch all
1566
+ expect(cell).toMatchSnapshot("initial state");
1566
1567
 
1567
1568
  // Add console
1568
1569
  actions.handleCellMessage({
@@ -1581,7 +1582,7 @@ describe("cell reducer", () => {
1581
1582
  cell = cells[0];
1582
1583
  expect(cell.status).toBe("queued");
1583
1584
  expect(cell.consoleOutputs).toMatchObject([OLD_STDOUT]); // Old stays there until it starts running
1584
- expect(cell).toMatchSnapshot(); // snapshot everything as a catch all
1585
+ expect(cell).toMatchSnapshot("prepared for run");
1585
1586
 
1586
1587
  // Receive queued messages
1587
1588
  actions.handleCellMessage({
@@ -1595,7 +1596,7 @@ describe("cell reducer", () => {
1595
1596
  cell = cells[0];
1596
1597
  expect(cell.status).toBe("queued");
1597
1598
  expect(cell.consoleOutputs).toMatchObject([OLD_STDOUT]); // Old stays there until it starts running
1598
- expect(cell).toMatchSnapshot(); // snapshot everything as a catch all
1599
+ expect(cell).toMatchSnapshot("queued message received");
1599
1600
 
1600
1601
  // Receive running messages
1601
1602
  actions.handleCellMessage({
@@ -1609,7 +1610,7 @@ describe("cell reducer", () => {
1609
1610
  cell = cells[0];
1610
1611
  expect(cell.status).toBe("running");
1611
1612
  expect(cell.consoleOutputs).toMatchObject([]);
1612
- expect(cell).toMatchSnapshot(); // snapshot everything as a catch all
1613
+ expect(cell).toMatchSnapshot("console cleared while running");
1613
1614
 
1614
1615
  // Add console
1615
1616
  actions.handleCellMessage({
@@ -1623,7 +1624,7 @@ describe("cell reducer", () => {
1623
1624
  cell = cells[0];
1624
1625
  expect(cell.consoleOutputs).toMatchObject([STDOUT]);
1625
1626
  expect(cell.status).toBe("idle");
1626
- expect(cell).toMatchSnapshot(); // snapshot everything as a catch all
1627
+ expect(cell).toMatchSnapshot("console received while idle");
1627
1628
  });
1628
1629
 
1629
1630
  it("can send a cell to the top", () => {
@@ -2037,6 +2038,150 @@ describe("cell reducer", () => {
2037
2038
  );
2038
2039
  });
2039
2040
 
2041
+ it("can collapse all cells when nested heading ranges end at the same cell", () => {
2042
+ actions.createNewCell({ cellId: firstCellId, before: false });
2043
+ actions.createNewCell({
2044
+ cellId: cellId("1"),
2045
+ before: false,
2046
+ code: "# Header",
2047
+ });
2048
+ actions.createNewCell({
2049
+ cellId: cellId("2"),
2050
+ before: false,
2051
+ code: "## Subheader",
2052
+ });
2053
+ actions.createNewCell({
2054
+ cellId: cellId("3"),
2055
+ before: false,
2056
+ code: "### Subsubheader",
2057
+ });
2058
+
2059
+ const headerId = state.cellIds.atOrThrow(FIRST_COLUMN).atOrThrow(1);
2060
+ state.cellRuntime[headerId] = {
2061
+ ...state.cellRuntime[headerId],
2062
+ outline: {
2063
+ items: [{ name: "Header", level: 1, by: { id: "header" } }],
2064
+ },
2065
+ };
2066
+
2067
+ const subheaderId = state.cellIds.atOrThrow(FIRST_COLUMN).atOrThrow(2);
2068
+ state.cellRuntime[subheaderId] = {
2069
+ ...state.cellRuntime[subheaderId],
2070
+ outline: {
2071
+ items: [{ name: "Subheader", level: 2, by: { id: "subheader" } }],
2072
+ },
2073
+ };
2074
+
2075
+ const subsubheaderId = state.cellIds.atOrThrow(FIRST_COLUMN).atOrThrow(3);
2076
+ state.cellRuntime[subsubheaderId] = {
2077
+ ...state.cellRuntime[subsubheaderId],
2078
+ outline: {
2079
+ items: [{ name: "Subsubheader", level: 3, by: { id: "subsubheader" } }],
2080
+ },
2081
+ };
2082
+
2083
+ // The header, subheader and subsubheader ranges all end at the last
2084
+ // cell. Collapsing all used to throw "Node ... not found in tree" and
2085
+ // leave the whole notebook unchanged.
2086
+ actions.collapseAllCells();
2087
+ expect(state.cellIds.atOrThrow(FIRST_COLUMN).isCollapsed(headerId)).toBe(
2088
+ true,
2089
+ );
2090
+ expect(state.cellIds.atOrThrow(FIRST_COLUMN).topLevelIds).toEqual([
2091
+ firstCellId,
2092
+ headerId,
2093
+ ]);
2094
+
2095
+ // Each level is nested under its parent, collapsed
2096
+ actions.expandCell({ cellId: headerId });
2097
+ expect(state.cellIds.atOrThrow(FIRST_COLUMN).isCollapsed(subheaderId)).toBe(
2098
+ true,
2099
+ );
2100
+ actions.expandCell({ cellId: subheaderId });
2101
+ expect(
2102
+ state.cellIds.atOrThrow(FIRST_COLUMN).isCollapsed(subsubheaderId),
2103
+ ).toBe(true);
2104
+ });
2105
+
2106
+ it("can collapse all cells when a deep chain is followed by a later section", () => {
2107
+ actions.createNewCell({ cellId: firstCellId, before: false });
2108
+ actions.createNewCell({
2109
+ cellId: cellId("1"),
2110
+ before: false,
2111
+ code: "# Header",
2112
+ });
2113
+ actions.createNewCell({
2114
+ cellId: cellId("2"),
2115
+ before: false,
2116
+ code: "## Section A",
2117
+ });
2118
+ actions.createNewCell({
2119
+ cellId: cellId("3"),
2120
+ before: false,
2121
+ code: "### Sub of A",
2122
+ });
2123
+ actions.createNewCell({
2124
+ cellId: cellId("4"),
2125
+ before: false,
2126
+ code: "## Section B",
2127
+ });
2128
+
2129
+ const headerId = state.cellIds.atOrThrow(FIRST_COLUMN).atOrThrow(1);
2130
+ state.cellRuntime[headerId] = {
2131
+ ...state.cellRuntime[headerId],
2132
+ outline: {
2133
+ items: [{ name: "Header", level: 1, by: { id: "header" } }],
2134
+ },
2135
+ };
2136
+
2137
+ const sectionAId = state.cellIds.atOrThrow(FIRST_COLUMN).atOrThrow(2);
2138
+ state.cellRuntime[sectionAId] = {
2139
+ ...state.cellRuntime[sectionAId],
2140
+ outline: {
2141
+ items: [{ name: "Section A", level: 2, by: { id: "section-a" } }],
2142
+ },
2143
+ };
2144
+
2145
+ const subsectionId = state.cellIds.atOrThrow(FIRST_COLUMN).atOrThrow(3);
2146
+ state.cellRuntime[subsectionId] = {
2147
+ ...state.cellRuntime[subsectionId],
2148
+ outline: {
2149
+ items: [{ name: "Sub of A", level: 3, by: { id: "sub-of-a" } }],
2150
+ },
2151
+ };
2152
+
2153
+ const sectionBId = state.cellIds.atOrThrow(FIRST_COLUMN).atOrThrow(4);
2154
+ state.cellRuntime[sectionBId] = {
2155
+ ...state.cellRuntime[sectionBId],
2156
+ outline: {
2157
+ items: [{ name: "Section B", level: 2, by: { id: "section-b" } }],
2158
+ },
2159
+ };
2160
+
2161
+ actions.collapseAllCells();
2162
+ expect(state.cellIds.atOrThrow(FIRST_COLUMN).isCollapsed(headerId)).toBe(
2163
+ true,
2164
+ );
2165
+ expect(state.cellIds.atOrThrow(FIRST_COLUMN).topLevelIds).toEqual([
2166
+ firstCellId,
2167
+ headerId,
2168
+ ]);
2169
+
2170
+ // Both sections sit under the header, collapsed, with the subsection
2171
+ // nested under section A
2172
+ actions.expandCell({ cellId: headerId });
2173
+ expect(state.cellIds.atOrThrow(FIRST_COLUMN).isCollapsed(sectionAId)).toBe(
2174
+ true,
2175
+ );
2176
+ expect(state.cellIds.atOrThrow(FIRST_COLUMN).isCollapsed(sectionBId)).toBe(
2177
+ true,
2178
+ );
2179
+ actions.expandCell({ cellId: sectionAId });
2180
+ expect(
2181
+ state.cellIds.atOrThrow(FIRST_COLUMN).isCollapsed(subsectionId),
2182
+ ).toBe(true);
2183
+ });
2184
+
2040
2185
  it("can show hidden cells", () => {
2041
2186
  actions.createNewCell({ cellId: firstCellId, before: false });
2042
2187
  actions.createNewCell({ cellId: cellId("1"), before: false });
@@ -153,6 +153,7 @@ describe("toDocumentChanges", () => {
153
153
  "config": {
154
154
  "column": null,
155
155
  "disabled": false,
156
+ "expand_output": false,
156
157
  "hide_code": false,
157
158
  },
158
159
  "name": "_",
@@ -183,6 +184,7 @@ describe("toDocumentChanges", () => {
183
184
  "config": {
184
185
  "column": null,
185
186
  "disabled": false,
187
+ "expand_output": false,
186
188
  "hide_code": false,
187
189
  },
188
190
  "name": "_",
@@ -229,6 +231,7 @@ describe("toDocumentChanges", () => {
229
231
  "cellId": "0",
230
232
  "column": null,
231
233
  "disabled": false,
234
+ "expandOutput": false,
232
235
  "hideCode": true,
233
236
  "type": "set-config",
234
237
  },
@@ -236,6 +239,29 @@ describe("toDocumentChanges", () => {
236
239
  `);
237
240
  });
238
241
 
242
+ it("maps expand_output to expandOutput in set-config", () => {
243
+ setup("a");
244
+ const [a] = state.cellIds.inOrderIds;
245
+
246
+ const { changes } = resolve(state, {
247
+ type: "updateCellConfig",
248
+ payload: { cellId: a, config: { expand_output: true } },
249
+ });
250
+
251
+ expect(changes).toMatchInlineSnapshot(`
252
+ [
253
+ {
254
+ "cellId": "0",
255
+ "column": null,
256
+ "disabled": false,
257
+ "expandOutput": true,
258
+ "hideCode": false,
259
+ "type": "set-config",
260
+ },
261
+ ]
262
+ `);
263
+ });
264
+
239
265
  it("includes full CellConfig in create-cell", () => {
240
266
  setup("a");
241
267
 
@@ -246,13 +272,14 @@ describe("toDocumentChanges", () => {
246
272
  before: false,
247
273
  code: "hidden",
248
274
  newCellId: CellId.create(),
275
+ config: { expand_output: true },
249
276
  hideCode: true,
250
277
  },
251
278
  });
252
279
 
253
280
  expect(changes[0]).toMatchObject({
254
281
  type: "create-cell",
255
- config: { hide_code: true },
282
+ config: { hide_code: true, expand_output: true },
256
283
  });
257
284
  });
258
285
  });
@@ -273,6 +300,7 @@ describe("toDocumentChanges", () => {
273
300
  "cellId": "1",
274
301
  "column": 1,
275
302
  "disabled": false,
303
+ "expandOutput": false,
276
304
  "hideCode": false,
277
305
  "type": "set-config",
278
306
  },
@@ -302,6 +330,7 @@ describe("toDocumentChanges", () => {
302
330
  "cellId": "1",
303
331
  "column": 1,
304
332
  "disabled": false,
333
+ "expandOutput": false,
305
334
  "hideCode": false,
306
335
  "type": "set-config",
307
336
  },
@@ -309,6 +338,7 @@ describe("toDocumentChanges", () => {
309
338
  "cellId": "2",
310
339
  "column": 1,
311
340
  "disabled": false,
341
+ "expandOutput": false,
312
342
  "hideCode": false,
313
343
  "type": "set-config",
314
344
  },
@@ -343,6 +373,7 @@ describe("toDocumentChanges", () => {
343
373
  "cellId": "1",
344
374
  "column": 0,
345
375
  "disabled": false,
376
+ "expandOutput": false,
346
377
  "hideCode": false,
347
378
  "type": "set-config",
348
379
  },
@@ -350,6 +381,7 @@ describe("toDocumentChanges", () => {
350
381
  "cellId": "2",
351
382
  "column": 0,
352
383
  "disabled": false,
384
+ "expandOutput": false,
353
385
  "hideCode": false,
354
386
  "type": "set-config",
355
387
  },
@@ -386,6 +418,7 @@ describe("toDocumentChanges", () => {
386
418
  "config": {
387
419
  "column": null,
388
420
  "disabled": false,
421
+ "expand_output": false,
389
422
  "hide_code": false,
390
423
  },
391
424
  "name": "_",
@@ -395,6 +428,7 @@ describe("toDocumentChanges", () => {
395
428
  "cellId": "1",
396
429
  "column": 1,
397
430
  "disabled": false,
431
+ "expandOutput": false,
398
432
  "hideCode": false,
399
433
  "type": "set-config",
400
434
  },
@@ -458,6 +492,7 @@ describe("toDocumentChanges", () => {
458
492
  "config": {
459
493
  "column": null,
460
494
  "disabled": false,
495
+ "expand_output": false,
461
496
  "hide_code": false,
462
497
  },
463
498
  "name": "_",
@@ -521,6 +556,7 @@ describe("toDocumentChanges", () => {
521
556
  "config": {
522
557
  "column": null,
523
558
  "disabled": false,
559
+ "expand_output": false,
524
560
  "hide_code": false,
525
561
  },
526
562
  "name": "_",
@@ -559,6 +595,7 @@ describe("toDocumentChanges", () => {
559
595
  "config": {
560
596
  "column": null,
561
597
  "disabled": false,
598
+ "expand_output": false,
562
599
  "hide_code": false,
563
600
  },
564
601
  "name": "setup",
@@ -648,6 +685,7 @@ describe("coalesceChanges", () => {
648
685
  column: null,
649
686
  disabled: true,
650
687
  hideCode: false,
688
+ expandOutput: false,
651
689
  },
652
690
  { type: "move-cell", cellId: X, after: A },
653
691
  { type: "delete-cell", cellId: X },