@marimo-team/islands 0.24.3-dev5 → 0.24.3-dev50

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 (376) hide show
  1. package/dist/{ConnectedDataExplorerComponent-C9OF_75w.js → ConnectedDataExplorerComponent-KVhjDMSe.js} +1066 -1066
  2. package/dist/ErrorBoundary-BW0xr_AR.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-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-BdKqYmPi.js +138 -0
  46. package/dist/{common-xHoep60C.js → common-D9PY0k7A.js} +8839 -12646
  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-BZiw7m3d.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-BAHeJT2Q.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-Bp9hhneH.js} +2143 -1910
  105. package/dist/{glide-utils-NShAPPtn.js → glide-utils-B3rUT5PI.js} +15 -15
  106. package/dist/globals-BUgvsAck.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-C743iqsh.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-DwuC-61O.js → reveal-component-CgMzL2w5.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/columns.tsx +64 -67
  191. package/src/components/editor/RecoveryButton.tsx +1 -0
  192. package/src/components/editor/__tests__/dynamic-favicon.test.tsx +36 -2
  193. package/src/components/editor/ai/add-cell-with-ai.tsx +1 -0
  194. package/src/components/editor/ai/ai-completion-editor.tsx +3 -1
  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/connections/database/__tests__/__snapshots__/as-code.test.ts.snap +98 -98
  213. package/src/components/editor/connections/database/__tests__/as-code.test.ts +11 -5
  214. package/src/components/editor/dynamic-favicon.tsx +17 -10
  215. package/src/components/editor/file-tree/__tests__/tree-actions.test.tsx +54 -0
  216. package/src/components/editor/file-tree/tree-actions.tsx +11 -14
  217. package/src/components/editor/header/__tests__/status.test.tsx +8 -20
  218. package/src/components/editor/header/filename-input.tsx +2 -0
  219. package/src/components/editor/header/status.tsx +5 -3
  220. package/src/components/editor/notebook-cell.tsx +4 -2
  221. package/src/components/editor/output/JsonOutput.tsx +182 -632
  222. package/src/components/editor/output/Outputs.css +50 -17
  223. package/src/components/editor/output/__tests__/JsonOutput-interactions.test.tsx +254 -0
  224. package/src/components/editor/output/__tests__/JsonOutput-mimetype.test.tsx +41 -46
  225. package/src/components/editor/output/__tests__/{json-output.test.ts → json-output-formatting.test.ts} +113 -75
  226. package/src/components/editor/output/__tests__/json-output-pagination.test.ts +252 -0
  227. package/src/components/editor/output/json-output/formatting.ts +167 -0
  228. package/src/components/editor/output/json-output/pagination.ts +155 -0
  229. package/src/components/editor/output/json-output/renderers.tsx +196 -0
  230. package/src/components/editor/output/json-output/themes.ts +52 -0
  231. package/src/components/editor/renderers/cell-array.tsx +1 -5
  232. package/src/components/home/components.tsx +17 -0
  233. package/src/components/pages/gallery-page.tsx +2 -4
  234. package/src/components/pages/home-page.tsx +2 -4
  235. package/src/components/slides/slide-form.tsx +1 -0
  236. package/src/components/slides/slide-notes-editor.tsx +1 -0
  237. package/src/components/terminal/terminal.tsx +4 -4
  238. package/src/components/tracing/tracing-spec.ts +1 -1
  239. package/src/components/ui/table.tsx +1 -1
  240. package/src/components/ui/use-toast.ts +8 -0
  241. package/src/core/MarimoApp.tsx +0 -2
  242. package/src/core/cells/__tests__/__snapshots__/cells.test.ts.snap +259 -259
  243. package/src/core/cells/__tests__/cell.test.ts +61 -0
  244. package/src/core/cells/__tests__/cells.test.ts +37 -37
  245. package/src/core/cells/cell.ts +9 -1
  246. package/src/core/cells/pending-delete-service.ts +12 -16
  247. package/src/core/codemirror/language/__tests__/sql.test.ts +70 -2
  248. package/src/core/codemirror/language/languages/sql/sql.ts +16 -1
  249. package/src/core/codemirror/rtc/extension.ts +5 -2
  250. package/src/core/datasets/__tests__/data-source.test.ts +2 -0
  251. package/src/core/datasets/data-source-connections.ts +15 -10
  252. package/src/core/edit-app.tsx +8 -5
  253. package/src/core/errors/state.ts +1 -2
  254. package/src/core/islands/__tests__/parse.test.ts +140 -7
  255. package/src/core/islands/bootstrap.ts +1 -0
  256. package/src/core/islands/bridge.ts +3 -0
  257. package/src/core/islands/parse.ts +20 -0
  258. package/src/core/network/connection-notice.ts +84 -0
  259. package/src/core/network/requests-lazy.ts +3 -0
  260. package/src/core/network/requests-network.ts +12 -0
  261. package/src/core/network/requests-static.ts +3 -0
  262. package/src/core/network/requests-toasting.tsx +3 -0
  263. package/src/core/network/resolve.ts +2 -1
  264. package/src/core/network/types.ts +7 -0
  265. package/src/core/packages/__tests__/usePackageAction.test.tsx +129 -0
  266. package/src/core/packages/__tests__/useSandboxController.test.tsx +165 -0
  267. package/src/core/packages/package-data.ts +35 -0
  268. package/src/core/packages/sandbox-state.ts +15 -0
  269. package/src/core/packages/toast-components.tsx +11 -0
  270. package/src/core/packages/useInstallPackage.ts +1 -1
  271. package/src/core/packages/usePackageAction.ts +51 -0
  272. package/src/core/packages/usePackageDependencies.ts +22 -0
  273. package/src/core/packages/useSandboxController.ts +188 -0
  274. package/src/core/run-app.tsx +2 -0
  275. package/src/core/runtime/__tests__/runtime.test.ts +11 -0
  276. package/src/core/runtime/runtime.ts +7 -2
  277. package/src/core/wasm/bridge.ts +11 -0
  278. package/src/core/websocket/__tests__/useMarimoKernelConnection.hook.test.tsx +212 -2
  279. package/src/core/websocket/transports/transport.ts +1 -1
  280. package/src/core/websocket/transports/ws.ts +1 -1
  281. package/src/core/websocket/types.ts +11 -1
  282. package/src/core/websocket/useMarimoKernelConnection.tsx +43 -8
  283. package/src/css/app/Cell.css +2 -0
  284. package/src/hooks/useDebounce.ts +2 -0
  285. package/src/plugins/core/BadPlugin.tsx +3 -14
  286. package/src/plugins/core/RenderHTML.tsx +22 -2
  287. package/src/plugins/core/__test__/RenderHTML.test.ts +187 -0
  288. package/src/plugins/core/registerReactComponent.tsx +0 -1
  289. package/src/plugins/impl/FormPlugin.tsx +2 -0
  290. package/src/plugins/impl/MatrixPlugin.tsx +2 -0
  291. package/src/plugins/impl/RangeSliderPlugin.tsx +2 -0
  292. package/src/plugins/impl/SliderPlugin.tsx +2 -0
  293. package/src/plugins/impl/data-editor/__tests__/glide-data-editor.test.tsx +23 -18
  294. package/src/plugins/impl/data-frames/panel.tsx +1 -0
  295. package/src/plugins/impl/image-comparison/ImageComparisonComponent.tsx +1 -1
  296. package/src/plugins/impl/image-comparison/__tests__/ImageComparisonComponent.test.tsx +15 -0
  297. package/src/plugins/layout/AccordionPlugin.tsx +7 -2
  298. package/src/plugins/layout/JsonOutputPlugin.tsx +7 -10
  299. package/src/plugins/layout/__test__/AccordionPlugin.test.tsx +66 -0
  300. package/src/stories/sandbox.stories.tsx +308 -0
  301. package/dist/ErrorBoundary-CR-ZQN_c.js +0 -125
  302. package/dist/_baseMerge-Dv8bBloN.js +0 -73
  303. package/dist/_initCloneObject---vediN2.js +0 -95
  304. package/dist/arc-DOVLrCPd.js +0 -82
  305. package/dist/architecture-TIHT7OUA-MiJpPpQW.js +0 -3
  306. package/dist/array-CApNbSU9.js +0 -6
  307. package/dist/assets/__vite-browser-external-BdKGjRZ4.js +0 -1
  308. package/dist/assets/worker-DlIBfp9S.js +0 -98
  309. package/dist/blockDiagram-VBNYF7ZC-Bc--I65C.js +0 -3158
  310. package/dist/chat-ui-DjTMZRVP.js +0 -8455
  311. package/dist/chunk-3NCLNEKW-BIp_lB_4.js +0 -14
  312. package/dist/chunk-5FCAYU7R-C_HO9A1J.js +0 -23
  313. package/dist/chunk-5HE753X5-Bixm_MV-.js +0 -38
  314. package/dist/chunk-5JV3BV7I-CH5J3iZY.js +0 -54
  315. package/dist/chunk-5TONJI2A-DG6gDiSS.js +0 -62
  316. package/dist/chunk-7BUUIJ7U-5afmIPeo.js +0 -82
  317. package/dist/chunk-BIQX33UG-7TMBUf89.js +0 -23
  318. package/dist/chunk-CQNSW5MT-Cnqqsxt-.js +0 -38
  319. package/dist/chunk-CYSBUYHQ-BAbymFHR.js +0 -23
  320. package/dist/chunk-EMLP6XTP-Bsz-QL77.js +0 -23
  321. package/dist/chunk-J7OUQ5F2-CM_meqZH.js +0 -57
  322. package/dist/chunk-JG7HCLWE-DUnCDgPk.js +0 -62
  323. package/dist/chunk-MOZMSUNE-BG6IHvzT.js +0 -35
  324. package/dist/chunk-OSBZ3O6U-CYwj_bvR.js +0 -23
  325. package/dist/chunk-QBLGF6JB-B4vJ4j8J.js +0 -23
  326. package/dist/chunk-QR6OTTB3-D4wH2ldi.js +0 -3738
  327. package/dist/chunk-R7FJI6CG-Blf8FcmZ.js +0 -64
  328. package/dist/chunk-RYQCIY6F-BWbIlBIH.js +0 -241
  329. package/dist/chunk-U6XO7XAA-COw445DS.js +0 -63
  330. package/dist/chunk-UBXNYLIW-BHigVU4H.js +0 -32
  331. package/dist/chunk-YOTPTUD7-Dn044Q_d.js +0 -30
  332. package/dist/chunk-ZIRB5QZD-BR4TMfOa.js +0 -1153
  333. package/dist/classDiagram-JCYQIIEL-DmXSLxe_.js +0 -30
  334. package/dist/classDiagram-v2-OCEON4UE-CooqVexA.js +0 -30
  335. package/dist/click-outside-container-D_URcm3D.js +0 -167
  336. package/dist/code-block-37QAKDTI-CQrzBOr-.js +0 -107
  337. package/dist/copy-CD7S58CY.js +0 -141
  338. package/dist/cynefin-VYW2F7L2-CeHAxOEX.js +0 -3
  339. package/dist/dagre-VZM6K2ZE-CJggWPTJ.js +0 -328
  340. package/dist/dist-3_o3T78I.js +0 -1360
  341. package/dist/dist-ABQjhuek.js +0 -64
  342. package/dist/dist-CO5R6VMi.js +0 -538
  343. package/dist/dropdown-menu-DhCfcscX.js +0 -5858
  344. package/dist/emotion-is-prop-valid.esm-M57VsT8j.js +0 -14
  345. package/dist/error-banner-CsXbEEjo.js +0 -611
  346. package/dist/eventmodeling-45OFAUF4-B_lWZ-Pd.js +0 -3
  347. package/dist/flowDiagram-UKHOOZJN-g1AmrZzM.js +0 -17
  348. package/dist/gitGraph-TEB2WS4Q-Dj-eXUph.js +0 -3
  349. package/dist/info-DKCQHKI2-Bhb-pe2e.js +0 -3
  350. package/dist/line-CuKjIQa1.js +0 -34
  351. package/dist/map-BJpOfPlL.js +0 -149
  352. package/dist/math-BXtKgYah.js +0 -10
  353. package/dist/mermaid-4DMBBIKO-Ddp9TgNp.js +0 -2
  354. package/dist/mermaid-Bi23Ibnw.js +0 -1173
  355. package/dist/mermaid-parser.core-Din9FvSi.js +0 -99
  356. package/dist/packet-7NZHBO7P-fbkIIyKE.js +0 -3
  357. package/dist/path-BNHuHZP8.js +0 -87
  358. package/dist/pie-RZYD4A2V-CLRIsxY1.js +0 -3
  359. package/dist/purify.es-CB-YO1Hn.js +0 -774
  360. package/dist/radar-I7S5WNFK-BGzCbgXu.js +0 -3
  361. package/dist/railroad-3IZDKUUU-CvQIIcuU.js +0 -3
  362. package/dist/railroad-abnf-AHOZXSZD-CMwtlNtu.js +0 -3
  363. package/dist/railroad-ebnf-EBAXGLYW-n1QUOAsh.js +0 -3
  364. package/dist/railroad-peg-LSFZ7HO6-PjnrpmCs.js +0 -3
  365. package/dist/schemas-DzK6U94N.js +0 -6057
  366. package/dist/stateDiagram-v2-UEYNNEHI-BTRUs8Il.js +0 -30
  367. package/dist/step-CKczO72Q.js +0 -670
  368. package/dist/swimlanesDiagram-ULZ7WXOC-NBmgBl9G.js +0 -31
  369. package/dist/timer-DpDyj9G0.js +0 -596
  370. package/dist/tooltip-Dt77sBeT.js +0 -390
  371. package/dist/treeView-QDETBFTQ-DU8LwHuf.js +0 -3
  372. package/dist/treemap-6X3UGDF4-DUk4-k_O.js +0 -3
  373. package/dist/useTheme-CVJ0UOf2.js +0 -841
  374. package/dist/vega-loader.browser-DEggZzni.js +0 -1083
  375. package/dist/wardley-OPB4EBWU-Db-AaGas.js +0 -3
  376. package/src/components/editor/output/EmotionCacheProvider.tsx +0 -32
@@ -353,7 +353,9 @@ describe("generateDatabaseCode", () => {
353
353
  ];
354
354
 
355
355
  it.each(testCases)("%s", (_name, connection, orm) => {
356
- expect(generateDatabaseCode(connection, orm)).toMatchSnapshot();
356
+ expect(generateDatabaseCode(connection, orm)).toMatchSnapshot(
357
+ "generated code",
358
+ );
357
359
  });
358
360
  });
359
361
 
@@ -458,7 +460,7 @@ describe("generateDatabaseCode", () => {
458
460
  ])("%s", (_name, connection, orm) => {
459
461
  expect(
460
462
  generateDatabaseCode(connection, orm as ConnectionLibrary),
461
- ).toMatchSnapshot();
463
+ ).toMatchSnapshot("generated code");
462
464
  });
463
465
  });
464
466
 
@@ -703,7 +705,7 @@ describe("generateDatabaseCode", () => {
703
705
  it.each(testCases)("%s", (_name, connection, orm) => {
704
706
  expect(
705
707
  generateDatabaseCode(connection, orm as ConnectionLibrary),
706
- ).toMatchSnapshot();
708
+ ).toMatchSnapshot("generated code");
707
709
  });
708
710
  });
709
711
 
@@ -745,8 +747,12 @@ describe("generateDatabaseCode", () => {
745
747
  },
746
748
  ],
747
749
  ])("%s", (_name, connection) => {
748
- expect(generateDatabaseCode(connection, "sqlmodel")).toMatchSnapshot();
749
- expect(generateDatabaseCode(connection, "sqlalchemy")).toMatchSnapshot();
750
+ expect(generateDatabaseCode(connection, "sqlmodel")).toMatchSnapshot(
751
+ "sqlmodel",
752
+ );
753
+ expect(generateDatabaseCode(connection, "sqlalchemy")).toMatchSnapshot(
754
+ "sqlalchemy",
755
+ );
750
756
  });
751
757
  });
752
758
 
@@ -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({