@marimo-team/islands 0.24.3-dev4 → 0.24.3-dev41

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 (370) hide show
  1. package/dist/{ConnectedDataExplorerComponent-C9OF_75w.js → ConnectedDataExplorerComponent-KVhjDMSe.js} +1066 -1066
  2. package/dist/ErrorBoundary-Cg8Ff5uL.js +200 -0
  3. package/dist/{ImageComparisonComponent-2a9TMMm2.js → ImageComparisonComponent-RspMflu6.js} +3 -3
  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-BajL8aoc.js +1 -0
  12. package/dist/assets/worker-BemUy60C.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-BhNoIBSU.js → cells-BSgNCBZ8.js} +6740 -10126
  18. package/dist/{channel-CyiYUzJv.js → channel-B5XnTarr.js} +1 -1
  19. package/dist/chat-ui-CygzVJ9s.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-BB9okzzY.js +138 -0
  46. package/dist/{common-BDlauhCU.js → common-aCHtzRnQ.js} +8853 -12653
  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-yiwy9Vea.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-iJn-Nryx.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-CfL-qWDi.js +380 -0
  99. package/dist/flowDiagram-HODETNUW-6dMdB8pR.js +16 -0
  100. package/dist/{formats-CJMVUfb3.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-MNFAmb3B.js} +2143 -1910
  105. package/dist/{glide-utils-NShAPPtn.js → glide-utils-B3rUT5PI.js} +15 -15
  106. package/dist/globals-DZfCplvV.js +19 -0
  107. package/dist/highlighted-body-KPVGNVTW-Ad3MKZ18.js +38 -0
  108. package/dist/html-to-image-kpuRfdfZ.js +3253 -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 +8105 -13485
  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-BZuSsCs5.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-CpK6fX_C.js → process-output-DFe2tVIY.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-BthxSdRc.js → reveal-component-ONiOVUUx.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-D-Rx3ux5.js → toDate-WXg1yLcI.js} +10 -9
  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-CPehZbUb.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__/requests.ts +7 -0
  185. package/src/__tests__/__snapshots__/CellStatus.test.tsx.snap +12 -12
  186. package/src/components/chat/acp/__tests__/agent-panel.test.tsx +270 -0
  187. package/src/components/chat/acp/agent-panel.tsx +45 -44
  188. package/src/components/data-table/column-explorer-panel/column-explorer.tsx +2 -6
  189. package/src/components/data-table/column-summary/chart-spec-model.tsx +1 -1
  190. package/src/components/data-table/column-visibility-dropdown.tsx +9 -3
  191. package/src/components/data-table/columns.tsx +64 -67
  192. package/src/components/datasources/components.tsx +4 -2
  193. package/src/components/editor/RecoveryButton.tsx +1 -0
  194. package/src/components/editor/__tests__/dynamic-favicon.test.tsx +36 -2
  195. package/src/components/editor/alerts/connecting-alert.tsx +1 -66
  196. package/src/components/editor/alerts/connection-notice.tsx +140 -0
  197. package/src/components/editor/app-container.tsx +9 -3
  198. package/src/components/editor/boundary/ErrorBoundary.tsx +38 -16
  199. package/src/components/editor/boundary/__tests__/ErrorBoundary.test.tsx +311 -0
  200. package/src/components/editor/cell/code/__tests__/rtc-editor-config.test.ts +50 -0
  201. package/src/components/editor/cell/code/cell-editor.tsx +41 -42
  202. package/src/components/editor/chrome/components/__tests__/feedback-button.test.tsx +94 -0
  203. package/src/components/editor/chrome/components/feedback-button.tsx +63 -42
  204. package/src/components/editor/chrome/panels/__tests__/packages-panel.test.tsx +114 -7
  205. package/src/components/editor/chrome/panels/__tests__/sandbox-recovery.test.tsx +165 -0
  206. package/src/components/editor/chrome/panels/packages-panel.tsx +93 -166
  207. package/src/components/editor/chrome/panels/sandbox-controller.tsx +106 -0
  208. package/src/components/editor/chrome/panels/sandbox-panel.tsx +173 -0
  209. package/src/components/editor/chrome/wrapper/footer-items/backend-status.tsx +3 -1
  210. package/src/components/editor/code/__tests__/readonly-diff.test.tsx +65 -0
  211. package/src/components/editor/code/readonly-diff.tsx +1 -1
  212. package/src/components/editor/dynamic-favicon.tsx +17 -10
  213. package/src/components/editor/file-tree/__tests__/tree-actions.test.tsx +54 -0
  214. package/src/components/editor/file-tree/tree-actions.tsx +11 -14
  215. package/src/components/editor/header/__tests__/status.test.tsx +8 -20
  216. package/src/components/editor/header/filename-input.tsx +2 -0
  217. package/src/components/editor/header/status.tsx +5 -3
  218. package/src/components/editor/notebook-cell.tsx +4 -2
  219. package/src/components/editor/output/JsonOutput.tsx +182 -632
  220. package/src/components/editor/output/Outputs.css +50 -17
  221. package/src/components/editor/output/__tests__/JsonOutput-interactions.test.tsx +254 -0
  222. package/src/components/editor/output/__tests__/JsonOutput-mimetype.test.tsx +41 -46
  223. package/src/components/editor/output/__tests__/{json-output.test.ts → json-output-formatting.test.ts} +113 -75
  224. package/src/components/editor/output/__tests__/json-output-pagination.test.ts +252 -0
  225. package/src/components/editor/output/json-output/formatting.ts +167 -0
  226. package/src/components/editor/output/json-output/pagination.ts +155 -0
  227. package/src/components/editor/output/json-output/renderers.tsx +196 -0
  228. package/src/components/editor/output/json-output/themes.ts +52 -0
  229. package/src/components/editor/renderers/cell-array.tsx +1 -5
  230. package/src/components/home/components.tsx +17 -0
  231. package/src/components/pages/gallery-page.tsx +2 -4
  232. package/src/components/pages/home-page.tsx +2 -4
  233. package/src/components/slides/slide-form.tsx +1 -0
  234. package/src/components/slides/slide-notes-editor.tsx +1 -0
  235. package/src/components/terminal/terminal.tsx +4 -4
  236. package/src/components/tracing/tracing-spec.ts +1 -1
  237. package/src/components/ui/table.tsx +1 -1
  238. package/src/components/ui/use-toast.ts +8 -0
  239. package/src/core/MarimoApp.tsx +0 -2
  240. package/src/core/cells/__tests__/cell.test.ts +61 -0
  241. package/src/core/cells/cell.ts +9 -1
  242. package/src/core/cells/pending-delete-service.ts +12 -16
  243. package/src/core/codemirror/language/__tests__/sql.test.ts +70 -2
  244. package/src/core/codemirror/language/languages/sql/sql.ts +16 -1
  245. package/src/core/codemirror/rtc/extension.ts +5 -2
  246. package/src/core/datasets/__tests__/data-source.test.ts +2 -0
  247. package/src/core/datasets/data-source-connections.ts +15 -10
  248. package/src/core/edit-app.tsx +8 -5
  249. package/src/core/errors/state.ts +1 -2
  250. package/src/core/islands/__tests__/parse.test.ts +140 -7
  251. package/src/core/islands/bootstrap.ts +1 -0
  252. package/src/core/islands/bridge.ts +3 -0
  253. package/src/core/islands/parse.ts +20 -0
  254. package/src/core/network/connection-notice.ts +84 -0
  255. package/src/core/network/requests-lazy.ts +3 -0
  256. package/src/core/network/requests-network.ts +12 -0
  257. package/src/core/network/requests-static.ts +3 -0
  258. package/src/core/network/requests-toasting.tsx +3 -0
  259. package/src/core/network/resolve.ts +2 -1
  260. package/src/core/network/types.ts +7 -0
  261. package/src/core/packages/__tests__/usePackageAction.test.tsx +129 -0
  262. package/src/core/packages/__tests__/useSandboxController.test.tsx +165 -0
  263. package/src/core/packages/package-data.ts +35 -0
  264. package/src/core/packages/sandbox-state.ts +15 -0
  265. package/src/core/packages/toast-components.tsx +11 -0
  266. package/src/core/packages/useInstallPackage.ts +1 -1
  267. package/src/core/packages/usePackageAction.ts +51 -0
  268. package/src/core/packages/usePackageDependencies.ts +22 -0
  269. package/src/core/packages/useSandboxController.ts +188 -0
  270. package/src/core/run-app.tsx +2 -0
  271. package/src/core/runtime/__tests__/runtime.test.ts +11 -0
  272. package/src/core/runtime/runtime.ts +7 -2
  273. package/src/core/wasm/bridge.ts +11 -0
  274. package/src/core/websocket/__tests__/useMarimoKernelConnection.hook.test.tsx +212 -2
  275. package/src/core/websocket/transports/transport.ts +1 -1
  276. package/src/core/websocket/transports/ws.ts +1 -1
  277. package/src/core/websocket/types.ts +11 -1
  278. package/src/core/websocket/useMarimoKernelConnection.tsx +43 -8
  279. package/src/css/app/Cell.css +2 -0
  280. package/src/hooks/useDebounce.ts +2 -0
  281. package/src/plugins/core/BadPlugin.tsx +3 -14
  282. package/src/plugins/core/RenderHTML.tsx +22 -2
  283. package/src/plugins/core/__test__/RenderHTML.test.ts +187 -0
  284. package/src/plugins/core/registerReactComponent.tsx +0 -1
  285. package/src/plugins/impl/FormPlugin.tsx +2 -0
  286. package/src/plugins/impl/MatrixPlugin.tsx +2 -0
  287. package/src/plugins/impl/RangeSliderPlugin.tsx +2 -0
  288. package/src/plugins/impl/SliderPlugin.tsx +2 -0
  289. package/src/plugins/impl/data-editor/__tests__/glide-data-editor.test.tsx +23 -18
  290. package/src/plugins/impl/data-frames/panel.tsx +1 -0
  291. package/src/plugins/layout/AccordionPlugin.tsx +7 -2
  292. package/src/plugins/layout/JsonOutputPlugin.tsx +7 -10
  293. package/src/plugins/layout/__test__/AccordionPlugin.test.tsx +66 -0
  294. package/src/stories/sandbox.stories.tsx +308 -0
  295. package/dist/ErrorBoundary-CR-ZQN_c.js +0 -125
  296. package/dist/_baseMerge-Dv8bBloN.js +0 -73
  297. package/dist/_initCloneObject---vediN2.js +0 -95
  298. package/dist/arc-DOVLrCPd.js +0 -82
  299. package/dist/architecture-TIHT7OUA-MiJpPpQW.js +0 -3
  300. package/dist/array-CApNbSU9.js +0 -6
  301. package/dist/assets/__vite-browser-external-BdKGjRZ4.js +0 -1
  302. package/dist/assets/worker-DlIBfp9S.js +0 -98
  303. package/dist/blockDiagram-VBNYF7ZC-Bc--I65C.js +0 -3158
  304. package/dist/chat-ui-DjTMZRVP.js +0 -8455
  305. package/dist/chunk-3NCLNEKW-BIp_lB_4.js +0 -14
  306. package/dist/chunk-5FCAYU7R-C_HO9A1J.js +0 -23
  307. package/dist/chunk-5HE753X5-Bixm_MV-.js +0 -38
  308. package/dist/chunk-5JV3BV7I-CH5J3iZY.js +0 -54
  309. package/dist/chunk-5TONJI2A-DG6gDiSS.js +0 -62
  310. package/dist/chunk-7BUUIJ7U-5afmIPeo.js +0 -82
  311. package/dist/chunk-BIQX33UG-7TMBUf89.js +0 -23
  312. package/dist/chunk-CQNSW5MT-Cnqqsxt-.js +0 -38
  313. package/dist/chunk-CYSBUYHQ-BAbymFHR.js +0 -23
  314. package/dist/chunk-EMLP6XTP-Bsz-QL77.js +0 -23
  315. package/dist/chunk-J7OUQ5F2-CM_meqZH.js +0 -57
  316. package/dist/chunk-JG7HCLWE-DUnCDgPk.js +0 -62
  317. package/dist/chunk-MOZMSUNE-BG6IHvzT.js +0 -35
  318. package/dist/chunk-OSBZ3O6U-CYwj_bvR.js +0 -23
  319. package/dist/chunk-QBLGF6JB-B4vJ4j8J.js +0 -23
  320. package/dist/chunk-QR6OTTB3-D4wH2ldi.js +0 -3738
  321. package/dist/chunk-R7FJI6CG-Blf8FcmZ.js +0 -64
  322. package/dist/chunk-RYQCIY6F-BWbIlBIH.js +0 -241
  323. package/dist/chunk-U6XO7XAA-COw445DS.js +0 -63
  324. package/dist/chunk-UBXNYLIW-BHigVU4H.js +0 -32
  325. package/dist/chunk-YOTPTUD7-Dn044Q_d.js +0 -30
  326. package/dist/chunk-ZIRB5QZD-BR4TMfOa.js +0 -1153
  327. package/dist/classDiagram-JCYQIIEL-DmXSLxe_.js +0 -30
  328. package/dist/classDiagram-v2-OCEON4UE-CooqVexA.js +0 -30
  329. package/dist/click-outside-container-D_URcm3D.js +0 -167
  330. package/dist/code-block-37QAKDTI-CQrzBOr-.js +0 -107
  331. package/dist/copy-CD7S58CY.js +0 -141
  332. package/dist/cynefin-VYW2F7L2-CeHAxOEX.js +0 -3
  333. package/dist/dagre-VZM6K2ZE-CJggWPTJ.js +0 -328
  334. package/dist/dist-3_o3T78I.js +0 -1360
  335. package/dist/dist-ABQjhuek.js +0 -64
  336. package/dist/dist-CO5R6VMi.js +0 -538
  337. package/dist/dropdown-menu-DhCfcscX.js +0 -5858
  338. package/dist/emotion-is-prop-valid.esm-M57VsT8j.js +0 -14
  339. package/dist/error-banner-CsXbEEjo.js +0 -611
  340. package/dist/eventmodeling-45OFAUF4-B_lWZ-Pd.js +0 -3
  341. package/dist/flowDiagram-UKHOOZJN-g1AmrZzM.js +0 -17
  342. package/dist/gitGraph-TEB2WS4Q-Dj-eXUph.js +0 -3
  343. package/dist/info-DKCQHKI2-Bhb-pe2e.js +0 -3
  344. package/dist/line-CuKjIQa1.js +0 -34
  345. package/dist/map-BJpOfPlL.js +0 -149
  346. package/dist/math-BXtKgYah.js +0 -10
  347. package/dist/mermaid-4DMBBIKO-Ddp9TgNp.js +0 -2
  348. package/dist/mermaid-Bi23Ibnw.js +0 -1173
  349. package/dist/mermaid-parser.core-Din9FvSi.js +0 -99
  350. package/dist/packet-7NZHBO7P-fbkIIyKE.js +0 -3
  351. package/dist/path-BNHuHZP8.js +0 -87
  352. package/dist/pie-RZYD4A2V-CLRIsxY1.js +0 -3
  353. package/dist/purify.es-CB-YO1Hn.js +0 -774
  354. package/dist/radar-I7S5WNFK-BGzCbgXu.js +0 -3
  355. package/dist/railroad-3IZDKUUU-CvQIIcuU.js +0 -3
  356. package/dist/railroad-abnf-AHOZXSZD-CMwtlNtu.js +0 -3
  357. package/dist/railroad-ebnf-EBAXGLYW-n1QUOAsh.js +0 -3
  358. package/dist/railroad-peg-LSFZ7HO6-PjnrpmCs.js +0 -3
  359. package/dist/schemas-DzK6U94N.js +0 -6057
  360. package/dist/stateDiagram-v2-UEYNNEHI-BTRUs8Il.js +0 -30
  361. package/dist/step-CKczO72Q.js +0 -670
  362. package/dist/swimlanesDiagram-ULZ7WXOC-NBmgBl9G.js +0 -31
  363. package/dist/timer-DpDyj9G0.js +0 -596
  364. package/dist/tooltip-Dt77sBeT.js +0 -390
  365. package/dist/treeView-QDETBFTQ-DU8LwHuf.js +0 -3
  366. package/dist/treemap-6X3UGDF4-DUk4-k_O.js +0 -3
  367. package/dist/useTheme-CVJ0UOf2.js +0 -841
  368. package/dist/vega-loader.browser-DEggZzni.js +0 -1083
  369. package/dist/wardley-OPB4EBWU-Db-AaGas.js +0 -3
  370. package/src/components/editor/output/EmotionCacheProvider.tsx +0 -32
@@ -42,7 +42,9 @@ export const BackendConnectionStatus: React.FC = () => {
42
42
  const { isFetching, error, data, refetch } = useAsyncData(async () => {
43
43
  // If the connection is not connected, return
44
44
  if (!isAppConnected(connection)) {
45
- setConnectionStatus("disconnected");
45
+ setConnectionStatus(
46
+ isAppConnecting(connection) ? "connecting" : "disconnected",
47
+ );
46
48
  return;
47
49
  }
48
50
 
@@ -0,0 +1,65 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+
3
+ import { render, screen } from "@testing-library/react";
4
+ import { beforeEach, describe, expect, it, vi } from "vitest";
5
+ import { ReadonlyDiff } from "../readonly-diff";
6
+
7
+ const mocks = vi.hoisted(() => ({
8
+ mergeView: vi.fn(),
9
+ useTheme: vi.fn(),
10
+ }));
11
+
12
+ vi.mock("@codemirror/merge", () => ({
13
+ unifiedMergeView: mocks.mergeView,
14
+ }));
15
+
16
+ vi.mock("@uiw/react-codemirror", () => ({
17
+ default: ({ theme, value }: { theme: string; value: string }) => (
18
+ <div data-testid="code-mirror" data-theme={theme} data-value={value} />
19
+ ),
20
+ }));
21
+
22
+ vi.mock("@/theme/useTheme", () => ({
23
+ useTheme: mocks.useTheme,
24
+ }));
25
+
26
+ describe("ReadonlyDiff", () => {
27
+ beforeEach(() => {
28
+ mocks.mergeView.mockReset();
29
+ mocks.mergeView.mockReturnValue([]);
30
+ mocks.useTheme.mockReturnValue({ theme: "light" });
31
+ });
32
+
33
+ it("updates modified code without rebuilding the diff extensions", () => {
34
+ const { rerender } = render(
35
+ <ReadonlyDiff original="before" modified="first revision" />,
36
+ );
37
+
38
+ expect(screen.getByTestId("code-mirror")).toHaveAttribute(
39
+ "data-value",
40
+ "first revision",
41
+ );
42
+ expect(mocks.mergeView).toHaveBeenCalledTimes(1);
43
+
44
+ rerender(<ReadonlyDiff original="before" modified="second revision" />);
45
+
46
+ expect(screen.getByTestId("code-mirror")).toHaveAttribute(
47
+ "data-value",
48
+ "second revision",
49
+ );
50
+ expect(mocks.mergeView).toHaveBeenCalledTimes(1);
51
+ });
52
+
53
+ it("rebuilds diff extensions when the original code changes", () => {
54
+ const { rerender } = render(
55
+ <ReadonlyDiff original="before" modified="after" />,
56
+ );
57
+
58
+ rerender(<ReadonlyDiff original="earlier" modified="after" />);
59
+
60
+ expect(mocks.mergeView).toHaveBeenCalledTimes(2);
61
+ expect(mocks.mergeView).toHaveBeenLastCalledWith(
62
+ expect.objectContaining({ original: "earlier" }),
63
+ );
64
+ });
65
+ });
@@ -21,7 +21,7 @@ export const ReadonlyDiff = memo(
21
21
  },
22
22
  }),
23
23
  ];
24
- }, [props.original, props.modified, theme]);
24
+ }, [props.original]);
25
25
 
26
26
  return (
27
27
  <CodeMirror
@@ -22,6 +22,19 @@ async function getFaviconUrl(key: FaviconKey): Promise<string> {
22
22
  return FAVICON_PATHS[key];
23
23
  }
24
24
 
25
+ function getOrCreateFavicon(): HTMLLinkElement {
26
+ const existingFavicon =
27
+ document.querySelector<HTMLLinkElement>("link[rel~='icon']");
28
+ if (existingFavicon) {
29
+ return existingFavicon;
30
+ }
31
+
32
+ const favicon = document.createElement("link");
33
+ favicon.rel = "icon";
34
+ document.head.append(favicon);
35
+ return favicon;
36
+ }
37
+
25
38
  interface Props {
26
39
  isRunning: boolean;
27
40
  }
@@ -64,16 +77,9 @@ export const DynamicFavicon = (props: Props) => {
64
77
  const { isRunning } = props;
65
78
  const errors = useCellErrors();
66
79
 
67
- let favicon: HTMLLinkElement | null =
68
- document.querySelector("link[rel~='icon']");
69
-
70
- if (!favicon) {
71
- favicon = document.createElement("link");
72
- favicon.rel = "icon";
73
- document.getElementsByTagName("head")[0].append(favicon);
74
- }
75
-
76
80
  useEffect(() => {
81
+ const favicon = getOrCreateFavicon();
82
+
77
83
  // No change on startup (autorun enabled or not)
78
84
  // Treat the default marimo favicon as "idle"
79
85
  if (!isRunning && favicon.href.includes("favicon")) {
@@ -105,7 +111,7 @@ export const DynamicFavicon = (props: Props) => {
105
111
  };
106
112
 
107
113
  updateFavicon();
108
- }, [isRunning, errors, favicon]);
114
+ }, [isRunning, errors]);
109
115
 
110
116
  // Send user notification when run has completed
111
117
  const prevRunning = usePrevious(isRunning) ?? isRunning;
@@ -118,6 +124,7 @@ export const DynamicFavicon = (props: Props) => {
118
124
  // When notebook comes back in focus, reset favicon
119
125
  useEventListener(window, "focus", async (_) => {
120
126
  if (!isRunning) {
127
+ const favicon = getOrCreateFavicon();
121
128
  favicon.href = await getFaviconUrl("idle");
122
129
  }
123
130
  });
@@ -0,0 +1,54 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+
3
+ import { act, fireEvent, render, screen } from "@testing-library/react";
4
+ import type React from "react";
5
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
6
+ import { RefreshIconButton } from "../tree-actions";
7
+
8
+ vi.mock("@/components/ui/tooltip", () => ({
9
+ Tooltip: ({ children }: { children: React.ReactNode }) => children,
10
+ }));
11
+
12
+ describe("RefreshIconButton", () => {
13
+ beforeEach(() => {
14
+ vi.useFakeTimers();
15
+ });
16
+
17
+ afterEach(() => {
18
+ vi.useRealTimers();
19
+ });
20
+
21
+ it("spins for at least 500ms after a refresh completes", async () => {
22
+ const onClick = vi.fn().mockResolvedValue(undefined);
23
+ const { container } = render(<RefreshIconButton onClick={onClick} />);
24
+
25
+ fireEvent.click(screen.getByRole("button"));
26
+
27
+ expect(onClick).toHaveBeenCalledOnce();
28
+ expect(container.querySelector("svg")).toHaveClass("animate-[spin_0.5s]");
29
+
30
+ await act(async () => {
31
+ await vi.advanceTimersByTimeAsync(500);
32
+ });
33
+
34
+ expect(container.querySelector("svg")).not.toHaveClass(
35
+ "animate-[spin_0.5s]",
36
+ );
37
+ });
38
+
39
+ it("uses the latest refresh callback after a rerender", async () => {
40
+ const initialOnClick = vi.fn().mockResolvedValue(undefined);
41
+ const updatedOnClick = vi.fn().mockResolvedValue(undefined);
42
+ const { rerender } = render(<RefreshIconButton onClick={initialOnClick} />);
43
+
44
+ rerender(<RefreshIconButton onClick={updatedOnClick} />);
45
+ fireEvent.click(screen.getByRole("button"));
46
+
47
+ expect(initialOnClick).not.toHaveBeenCalled();
48
+ expect(updatedOnClick).toHaveBeenCalledOnce();
49
+
50
+ await act(async () => {
51
+ await vi.advanceTimersByTimeAsync(500);
52
+ });
53
+ });
54
+ });
@@ -7,7 +7,7 @@ import {
7
7
  MoreVerticalIcon,
8
8
  RefreshCwIcon,
9
9
  } from "lucide-react";
10
- import React, { useCallback, useState } from "react";
10
+ import React, { useState } from "react";
11
11
  import { Button, type ButtonProps } from "@/components/ui/button";
12
12
  import { Tooltip } from "@/components/ui/tooltip";
13
13
  import { cn } from "@/utils/cn";
@@ -41,19 +41,16 @@ export const RefreshIconButton: React.FC<{
41
41
  }> = ({ onClick, tooltip = "Refresh", className, iconClassName }) => {
42
42
  const [isSpinning, setIsSpinning] = useState(false);
43
43
 
44
- const handleClick = useCallback(
45
- async (e: React.MouseEvent) => {
46
- setIsSpinning(true);
47
- // Artificially spin for 500ms to show the user that the button is working.
48
- const minDelay = new Promise<void>((r) => setTimeout(r, 500));
49
- try {
50
- await Promise.all([onClick(e), minDelay]);
51
- } finally {
52
- setIsSpinning(false);
53
- }
54
- },
55
- [onClick],
56
- );
44
+ const handleClick = async (e: React.MouseEvent) => {
45
+ setIsSpinning(true);
46
+ // Artificially spin for 500ms to show the user that the button is working.
47
+ const minDelay = new Promise<void>((r) => setTimeout(r, 500));
48
+ try {
49
+ await Promise.all([onClick(e), minDelay]);
50
+ } finally {
51
+ setIsSpinning(false);
52
+ }
53
+ };
57
54
 
58
55
  const button = (
59
56
  <Button
@@ -66,24 +66,12 @@ describe("StatusOverlay disconnect indicator", () => {
66
66
  expect((button as HTMLButtonElement).disabled).toBe(true);
67
67
  });
68
68
 
69
- it.each([
70
- [
71
- WebSocketClosedReason.KERNEL_STARTUP_ERROR,
72
- "Failed to start kernel sandbox",
73
- ],
74
- ])(
75
- "renders a disabled button for non-recoverable close reason %s",
76
- (code, reason) => {
77
- const onReconnect = vi.fn();
78
- const { getByTestId } = renderOverlay(
79
- { state: WebSocketState.CLOSED, code, reason },
80
- onReconnect,
81
- );
82
-
83
- const button = getByTestId("disconnected-indicator") as HTMLButtonElement;
84
- expect(button.disabled).toBe(true);
85
- fireEvent.click(button);
86
- expect(onReconnect).not.toHaveBeenCalled();
87
- },
88
- );
69
+ it("leaves editor startup failures to the inline notice", () => {
70
+ const { queryByTestId } = renderOverlay({
71
+ state: WebSocketState.CLOSED,
72
+ code: WebSocketClosedReason.KERNEL_STARTUP_ERROR,
73
+ reason: "Failed to start kernel sandbox",
74
+ });
75
+ expect(queryByTestId("disconnected-indicator")).not.toBeInTheDocument();
76
+ });
89
77
  });
@@ -53,6 +53,8 @@ export const FilenameInput = ({
53
53
  const skipReset = useRef<boolean>(false);
54
54
 
55
55
  useEffect(() => {
56
+ // TODO: Reset the editable draft without synchronizing state in an effect.
57
+ // oxlint-disable-next-line react/no-deriving-state-in-effects -- Reset the editable draft when the external filename changes.
56
58
  setSearchValue(initialValue);
57
59
  }, [initialValue]);
58
60
 
@@ -20,10 +20,12 @@ export const StatusOverlay: React.FC<{
20
20
  onReconnect?: () => void;
21
21
  }> = ({ connection, isRunning, onReconnect }) => {
22
22
  const { mode } = useAtomValue(viewStateAtom);
23
- const isClosed = connection.state === WebSocketState.CLOSED;
23
+ const isClosed =
24
+ connection.state === WebSocketState.CLOSED &&
25
+ (mode === "read" ||
26
+ connection.code !== WebSocketClosedReason.KERNEL_STARTUP_ERROR);
24
27
  const isOpen = connection.state === WebSocketState.OPEN;
25
- // Only KERNEL_DISCONNECTED is recoverable by a retry. KERNEL_STARTUP_ERROR
26
- // would deterministically fail the same way.
28
+ // Editor startup failures have their own recovery UI.
27
29
  const canReconnect =
28
30
  isClosed && connection.code === WebSocketClosedReason.KERNEL_DISCONNECTED;
29
31
 
@@ -451,7 +451,8 @@ const EditableCellComponent = ({
451
451
  cellRuntime.staleInputs) &&
452
452
  !cellRuntime.interrupted;
453
453
 
454
- // Callback to get the editor view.
454
+ // This getter is called during render, so useEvent cannot be used here.
455
+ // oxlint-disable-next-line react/preserve-manual-memoization
455
456
  const getEditorView = useCallback(() => editorView.current, [editorView]);
456
457
 
457
458
  // Use the extracted hooks
@@ -1096,7 +1097,8 @@ const SetupCellComponent = ({
1096
1097
  cellRuntime.staleInputs) &&
1097
1098
  !cellRuntime.interrupted;
1098
1099
 
1099
- // Callback to get the editor view.
1100
+ // This getter is called during render, so useEvent cannot be used here.
1101
+ // oxlint-disable-next-line react/preserve-manual-memoization
1100
1102
  const getEditorView = useCallback(() => editorView.current, [editorView]);
1101
1103
 
1102
1104
  const { isCellCodeShown, showHiddenCode } = useCellHiddenLogic({