@marimo-team/islands 0.24.3-dev3 → 0.24.3-dev30

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 (289) hide show
  1. package/dist/{ConnectedDataExplorerComponent-qIKbwYin.js → ConnectedDataExplorerComponent-BLO7UDpo.js} +18 -18
  2. package/dist/{ErrorBoundary-CR-ZQN_c.js → ErrorBoundary-B7uSdDUm.js} +6 -6
  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-Bnytch8P.js +165 -0
  6. package/dist/{abnfDiagram-N423BO3Z-CQKwzX8t.js → abnfDiagram-VCTEODGH-DCb2K_RB.js} +17 -18
  7. package/dist/{any-language-editor-CpTnK43-.js → any-language-editor-C0dftc2Z.js} +8 -8
  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-Bb_n642s.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/{channel-CyiYUzJv.js → channel-B5XnTarr.js} +1 -1
  18. package/dist/chat-ui-DiMxe-GH.js +5835 -0
  19. package/dist/{check-CHig47QV.js → check-mcQyZmFG.js} +1 -1
  20. package/dist/{chunk-2Q5K7J3B-BMuJl2jB.js → chunk-2Q5K7J3B-BMkUkeuy.js} +2 -2
  21. package/dist/chunk-4HAMMTFA-D2qv8E0X.js +4188 -0
  22. package/dist/{chunk-5VM5RSS4-Bcq0ftdy.js → chunk-5VM5RSS4-DKsmPCL6.js} +2 -2
  23. package/dist/{chunk-NSK5VX7P-CDTMcJB0.js → chunk-75Z2AOVW-5_HsvXwr.js} +23 -23
  24. package/dist/{chunk-I66GZJ75-BqyTCAPf.js → chunk-DU6HZSFF-BUgAHvnM.js} +21 -4
  25. package/dist/{chunk-2GRJ4B5K-DgO8Qudq.js → chunk-F27PBJKO-DHmYWZXr.js} +4 -4
  26. package/dist/{chunk-KEIR6QF5-C4KX3XYh.js → chunk-FOHPRMQF-BpYR8RqP.js} +4 -4
  27. package/dist/{chunk-WRU74C26-BpWsbiDK.js → chunk-GMAD6QVW-Czynz8aA.js} +486 -258
  28. package/dist/chunk-GVQU2GXP-yQEdulRS.js +37 -0
  29. package/dist/{chunk-5RXB4S5H-tLNUVDdO.js → chunk-IMKFNOWR-Du9BN2Ul.js} +11 -11
  30. package/dist/{chunk-JWPE2WC7-BJwjGUnF.js → chunk-JWPE2WC7-DJvv1t8U.js} +2 -2
  31. package/dist/chunk-L3NEJ4N5-DwRWnDDK.js +245 -0
  32. package/dist/{chunk-7Z6QIM7H-Dc18hFxH.js → chunk-OSK3NFVY-BBKU_Ign.js} +222 -144
  33. package/dist/{chunk-W5SLKNZC-DLnvpEtV.js → chunk-P2QGCYS3-C0iGU29N.js} +20 -20
  34. package/dist/{chunk-KBJHAD2P-BuqWqkcW.js → chunk-POPQ4Y6H-BCbS3Ozc.js} +4 -4
  35. package/dist/{chunk-4I5QYGJK-DpytHuZQ.js → chunk-PWAF6VOD-CTFCL0jI.js} +4 -4
  36. package/dist/{chunk-JQJVKLGR-CgqCwe8E.js → chunk-SHT3W25Y-tUelricH.js} +109 -63
  37. package/dist/{chunk-6Q2QTUOP-DmTcEBMn.js → chunk-SVP7TREG-DK3egkfQ.js} +5 -5
  38. package/dist/{chunk-GF5L2VYU-B0wgCQgS.js → chunk-TICWLB2K-DRANTdnp.js} +13 -13
  39. package/dist/{chunk-XXDRQBXY-D73H4IN0.js → chunk-XXDRQBXY-Dnl5VBqG.js} +3 -3
  40. package/dist/{chunk-Y2CYZVJY-DoegUj_e.js → chunk-Y2CYZVJY-DKKS1VyV.js} +1 -1
  41. package/dist/{chunk-5FQGJX7Z-B85XCPv6.js → chunk-YOKDWASO-DrWbKnxA.js} +6925 -5460
  42. package/dist/classDiagram-ZZMXUADV-7wCSVH7o.js +30 -0
  43. package/dist/classDiagram-v2-VYDZK3BY-QwnvcnhB.js +30 -0
  44. package/dist/{common-CwJerb7K.js → common-_pES-ftX.js} +7398 -6912
  45. package/dist/{compiler-runtime-CAH9RLw2.js → compiler-runtime-Cj8ZWiNS.js} +2 -2
  46. package/dist/{copy-CD7S58CY.js → copy-C0N4m1lm.js} +4 -4
  47. package/dist/{cose-bilkent-JH36ORCC-FUWHkXFX.js → cose-bilkent-JH36ORCC-_LyRKVqm.js} +2 -2
  48. package/dist/cubic-OaEBhQPK.js +1404 -0
  49. package/dist/cynefin-OW5HDTMX-obq-i80l.js +3 -0
  50. package/dist/{cynefinDiagram-MW4NZA55-BXSFK93J.js → cynefinDiagram-5FMLGOSQ-CB7O4IZB.js} +10 -10
  51. package/dist/{dagre-CGyalH38.js → dagre-DfYd3btw.js} +678 -537
  52. package/dist/dagre-GXQ25YYZ-C-a95ISW.js +425 -0
  53. package/dist/{data-grid-overlay-editor-DZM4BAaI.js → data-grid-overlay-editor-C5eUZVTo.js} +8 -9
  54. package/dist/{data-grid-types-BnZwWG8z.js → data-grid-types-BucVmDDp.js} +1 -1
  55. package/dist/{defaultLocale-DKaU_opG.js → defaultLocale-JI_lnoCe.js} +1 -1
  56. package/dist/{diagram-7IWD3JNH-BjfzDNvj.js → diagram-S7CK7UJ4-BsKLYQaH.js} +40 -39
  57. package/dist/{diagram-UB23O5K3-DDg-7wLA.js → diagram-UQ7AKVKN-ppYdvuTN.js} +10 -10
  58. package/dist/{diagram-B4RE2ZJO-CKccR9eE.js → diagram-VSXAHHWV-BKpmG23x.js} +10 -10
  59. package/dist/{diagram-Q27KOJAE-Zhz01ss7.js → diagram-VX7I27RA-CAMK2l0E.js} +21 -21
  60. package/dist/{diagram-LBJQPF4R-CJ-bOruh.js → diagram-Z3DM3KII-CxQ7MggT.js} +10 -10
  61. package/dist/{dist-dAqZAPcF.js → dist-1HDa70oE.js} +3 -3
  62. package/dist/{dist-3_o3T78I.js → dist-6ChWbo8z.js} +13 -13
  63. package/dist/{dist-Re9sOPOx.js → dist-9x1ZRe-e.js} +2 -2
  64. package/dist/{dist-DEeLqRlU.js → dist-B1vYLK28.js} +1 -1
  65. package/dist/{dist-C5Bn52W4.js → dist-B8D7McG3.js} +3 -3
  66. package/dist/{dist-_XvgytiS.js → dist-BHCHt1NI.js} +1 -1
  67. package/dist/{dist-CRjAdnqF.js → dist-BRxfaJgs.js} +3 -3
  68. package/dist/{dist-Byj2bV8o.js → dist-BVGtK7Ht.js} +1 -1
  69. package/dist/{dist-BIN5LKyE.js → dist-BaHjhkpZ.js} +2 -2
  70. package/dist/{dist-DVFbIwc5.js → dist-BtKIs9N-.js} +1 -1
  71. package/dist/{dist-BrQGcfQ9.js → dist-C2KzV-vf.js} +2 -2
  72. package/dist/{dist-DJFiGP2k.js → dist-C2wDlYdD.js} +2 -2
  73. package/dist/{dist-BVRM2y1P.js → dist-C8xMLVYi.js} +2 -2
  74. package/dist/dist-CMh_W4y4.js +538 -0
  75. package/dist/{dist-BzN60Z2s.js → dist-CPGxfVGX.js} +1 -1
  76. package/dist/{dist-C7v-9nUK.js → dist-Cm3iAFMD.js} +3 -3
  77. package/dist/{dist-CGAxEiaM.js → dist-Cs2FijYk.js} +2 -2
  78. package/dist/{dist-hXd65f0_.js → dist-D1PpnuZB.js} +1 -1
  79. package/dist/{dist-VdvbxG72.js → dist-DHOTQar0.js} +1 -1
  80. package/dist/{dist-DcgzXCfy.js → dist-DPcEtqmG.js} +2 -2
  81. package/dist/{dist-D4Z_qdP4.js → dist-Df0wKI0F.js} +1 -1
  82. package/dist/{dist-qhLI-SHd.js → dist-DszxuxS1.js} +2 -2
  83. package/dist/{dist-BEmkrGoQ.js → dist-Kxgjxakw.js} +1 -1
  84. package/dist/{dist-BbSMhhD2.js → dist-KzZ7WELx.js} +2 -2
  85. package/dist/{dist-jWUab2d1.js → dist-lA1Cttkb.js} +1 -1
  86. package/dist/{dropdown-menu-DhCfcscX.js → dropdown-menu-C73aTomr.js} +184 -184
  87. package/dist/{ebnfDiagram-BXEA7PRR-Dm75pCAS.js → ebnfDiagram-PWID7BFC-DzybELvk.js} +17 -18
  88. package/dist/{erDiagram-JOGREHBK-rVDG3VSQ.js → erDiagram-RLTQ6QDP-BVxV97ld.js} +1037 -798
  89. package/dist/{error-banner-WDhUzJyg.js → error-banner-hCaH06e3.js} +207 -207
  90. package/dist/{esm-CR1nhb1c.js → esm-BElI3qKH.js} +22 -22
  91. package/dist/{esm-C1d0g6Bv.js → esm-G4Fhsgng.js} +51 -37
  92. package/dist/{esm-CesmlDrs.js → esm-blALgIVy.js} +332 -319
  93. package/dist/eventmodeling-NTZA5JFV-D7nP7Uyu.js +3 -0
  94. package/dist/{extends-BPB6_lTK.js → extends-Do6pRuJa.js} +8 -8
  95. package/dist/flowDiagram-HODETNUW-BKvXsWYX.js +16 -0
  96. package/dist/{formats-CJMVUfb3.js → formats-vDAoRpYs.js} +8 -8
  97. package/dist/{ganttDiagram-PKOTCBZU-9D-LXF6P.js → ganttDiagram-EL5Y4UJY-DbzEBLbl.js} +15 -15
  98. package/dist/gitGraph-4MIJSDKK-Dy9uQXGh.js +3 -0
  99. package/dist/{gitGraphDiagram-DS77QQ5N-BfpsXTLf.js → gitGraphDiagram-WWUBYQGX-BMf0iKi1.js} +10 -10
  100. package/dist/{glide-data-editor-sPZ8fUFn.js → glide-data-editor-Bcy8iaZa.js} +2785 -2562
  101. package/dist/{glide-utils-NShAPPtn.js → glide-utils-BMnFm0vZ.js} +4 -4
  102. package/dist/highlighted-body-KPVGNVTW-Ad3MKZ18.js +38 -0
  103. package/dist/{html-to-image-BTYnN4ev.js → html-to-image-mVIbKn_Y.js} +5720 -5452
  104. package/dist/info-A6RAGUB7-DKoayiHY.js +3 -0
  105. package/dist/{infoDiagram-6WML65LV-DqCTXHVy.js → infoDiagram-27XIBGKW-B_ucqo-U.js} +7 -7
  106. package/dist/{ishikawaDiagram-WSZJBQD7-BCUYmZ1v.js → ishikawaDiagram-5VMMS53U-BZFx9b-o.js} +8 -8
  107. package/dist/{journeyDiagram-NVQOT4AX-BXB6M4zN.js → journeyDiagram-3NMN7TZE-D2LcKDUO.js} +8 -8
  108. package/dist/{jsx-runtime-CpoKNRgu.js → jsx-runtime-DgDPJV9S.js} +1 -1
  109. package/dist/{kanban-definition-27J2QSJJ-CGRhrDUX.js → kanban-definition-UXKFOSKX-BpIfcu3G.js} +29 -29
  110. package/dist/katex-DFBiSucW.js +21840 -0
  111. package/dist/{label-lwzzBHUW.js → label-e37ixur5.js} +6 -6
  112. package/dist/{linear-D5r_1YqD.js → linear-Cnaq3Tfb.js} +4 -4
  113. package/dist/{loader-VZ__bv4g.js → loader-D2W4oM-3.js} +15 -15
  114. package/dist/main.js +7018 -12382
  115. package/dist/mermaid-B1Jb9HfY.js +3084 -0
  116. package/dist/mermaid-HWGCJPDP-DYCzSILp.js +2 -0
  117. package/dist/mermaid-parser.core-DxuSfYwJ.js +638 -0
  118. package/dist/{mhchem-BjwrxcV-.js → mhchem-DWCF06w9.js} +1 -1
  119. package/dist/{micromark-factory-space-DruVGzeG.js → micromark-factory-space-DGxAzmw8.js} +2 -2
  120. package/dist/{mindmap-definition-FAOFIHXS-C9gRhzZq.js → mindmap-definition-YA3MSWOX-CmpAfv8K.js} +17 -17
  121. package/dist/{node-sql-parser-DesT1xNw.js → node-sql-parser-BiZOJ-FS.js} +0 -3
  122. package/dist/{number-overlay-editor-De2CabLL.js → number-overlay-editor-CFofZaOi.js} +5 -5
  123. package/dist/packet-AYTQ26CC-Yw7ajchJ.js +3 -0
  124. package/dist/{pegDiagram-VL7TDLO6-Df9IUjMD.js → pegDiagram-XKGWAZYB-DO-0Q8SE.js} +19 -20
  125. package/dist/{pick-SnHlmIBN.js → pick-B7vX8zxG.js} +1 -1
  126. package/dist/pie-WAS4IAKB-BKdKOAkL.js +3 -0
  127. package/dist/{pieDiagram-7S7Q4E2Y-BmRzQ8ZP.js → pieDiagram-E7YTZNPT-B1MbuA_g.js} +29 -31
  128. package/dist/{process-output-CsALk6tp.js → process-output-Cr6U5ULK.js} +4 -4
  129. package/dist/purify.es-DgKyQviY.js +805 -0
  130. package/dist/{quadrantDiagram-CIZ2JOQS-wFBvWcxS.js → quadrantDiagram-AXDQQJYC-DftINo6g.js} +5 -5
  131. package/dist/radar-RG4KPBEZ-ScR_D_Ts.js +3 -0
  132. package/dist/railroad-74A4TZTK-DQvPSdo5.js +3 -0
  133. package/dist/railroad-abnf-HS5TGJTU-CsJQG2O8.js +3 -0
  134. package/dist/railroad-ebnf-LZEXJU2U-BgEobkSn.js +3 -0
  135. package/dist/railroad-peg-WCYAUIDC-DjLAjofI.js +3 -0
  136. package/dist/{railroadDiagram-AXF67PYL-DxbIatiN.js → railroadDiagram-O6MQD6OU-DPVOQUXC.js} +17 -18
  137. package/dist/{react-dom-C94wmq5w.js → react-dom-BUgJ-ab_.js} +3 -3
  138. package/dist/{react-DMWcHin-.js → react-ofJbxM4x.js} +2 -2
  139. package/dist/{react-vega-DSD5aT7_.js → react-vega-5AcMW8gG.js} +10012 -9369
  140. package/dist/{requirementDiagram-LRYGKXZP-X_x-Y713.js → requirementDiagram-BXWQKSXE-CC7wZ-tM.js} +20 -19
  141. package/dist/{reveal-component-DVMzBxwv.js → reveal-component-DAv6PYTL.js} +1171 -1105
  142. package/dist/{sankeyDiagram-W5VNT64P-BYJALbbm.js → sankeyDiagram-P5KCCOFB-CDKR5TJH.js} +4 -4
  143. package/dist/schemas-BDZr-nP0.js +5727 -0
  144. package/dist/{select-3qHpFKF9.js → select-UMOSCa3W.js} +246 -246
  145. package/dist/{sequenceDiagram-SI44F4Z6-BiPBe3Sv.js → sequenceDiagram-WJ2MYXX4-DomSyoJI.js} +11 -11
  146. package/dist/{sizeCapture-X5ZJPWSS-BKLDeh5H.js → sizeCapture-INFHLROL-Dx5SpkQF.js} +2 -2
  147. package/dist/{spec-CutWdqo3.js → spec-g740fOWu.js} +4 -4
  148. package/dist/{src-C31ngt98.js → src-CA_m4ONl.js} +298 -303
  149. package/dist/{stateDiagram-OKZ733FA-B7QyNBxH.js → stateDiagram-D77RDMKH-SQLLjdtF.js} +19 -20
  150. package/dist/stateDiagram-v2-MP3YSRHH-Dup4KkIr.js +30 -0
  151. package/dist/style.css +2 -2
  152. package/dist/{swimlanes-SLNWSIFB-B4f8VP3b.js → swimlanes-42K2YHIH-ZXbhyGv6.js} +1501 -1591
  153. package/dist/swimlanesDiagram-VR7AAH4N-CluwxV0g.js +30 -0
  154. package/dist/{swiper-component-C90YjhaV.js → swiper-component-IOUowglM.js} +39 -26
  155. package/dist/{time-aWGfjN8x.js → time-BieKwdYS.js} +42 -42
  156. package/dist/{timeline-definition-Z64GVDOM-Dacq_5lr.js → timeline-definition-24CTP7MA-B8i6B9RR.js} +7 -7
  157. package/dist/{toDate-D-Rx3ux5.js → toDate-C3JOXlJT.js} +10 -9
  158. package/dist/{tooltip-Dt77sBeT.js → tooltip-CdE8k0pS.js} +42 -42
  159. package/dist/treeView-Q6P3EWNA-DuRV97YF.js +3 -0
  160. package/dist/treemap-WGGIJYW6-AsLq-uwC.js +3 -0
  161. package/dist/{use-vega-container-remeasure-DUW4tRxq.js → use-vega-container-remeasure-4DwJbPWu.js} +2 -2
  162. package/dist/{useAsyncData-CH6-CgJF.js → useAsyncData-C0f7qnnN.js} +3 -3
  163. package/dist/{useDateFormatter-Cp9Jdxls.js → useDateFormatter-BKpQHt-W.js} +8 -8
  164. package/dist/{useDeepCompareMemoize-JC87C_jO.js → useDeepCompareMemoize-QCa0HbWB.js} +2 -2
  165. package/dist/{useIframeCapabilities-De3C-9b4.js → useIframeCapabilities-CVtNkI3Y.js} +2 -2
  166. package/dist/{useLifecycle-B4RGlyf0.js → useLifecycle-BGRBkTFT.js} +6 -6
  167. package/dist/useTheme-iQ0VoptU.js +904 -0
  168. package/dist/{vega-component-D-IXRnlx.js → vega-component-DRI4BDLQ.js} +15 -15
  169. package/dist/{vega-embed-container-TJ5z5dZw.js → vega-embed-container-CbnTccZi.js} +6 -6
  170. package/dist/vega-loader.browser-D95WfUcj.js +1139 -0
  171. package/dist/{vennDiagram-T6HMQDX7-D-Rcq3Iu.js → vennDiagram-4TSXK5OY-CS7lHhxI.js} +9 -9
  172. package/dist/wardley-WFR3VGLG-Na-tFhQJ.js +3 -0
  173. package/dist/{wardleyDiagram-T6FBY63Y-Z-Og7_Wd.js → wardleyDiagram-VM6X3IG4-BSm-L8JI.js} +10 -10
  174. package/dist/{xychartDiagram-ELKLHX3M-BDJ2dITA.js → xychartDiagram-S5SC5T6Z-8fKCJGrJ.js} +248 -139
  175. package/package.json +52 -52
  176. package/src/__mocks__/requests.ts +7 -2
  177. package/src/__tests__/__snapshots__/CellStatus.test.tsx.snap +12 -12
  178. package/src/components/chat/acp/__tests__/agent-panel.test.tsx +270 -0
  179. package/src/components/chat/acp/agent-panel.tsx +45 -44
  180. package/src/components/data-table/column-explorer-panel/column-explorer.tsx +2 -6
  181. package/src/components/data-table/column-visibility-dropdown.tsx +9 -3
  182. package/src/components/datasources/components.tsx +4 -2
  183. package/src/components/editor/chrome/components/feedback-button.tsx +10 -9
  184. package/src/components/editor/chrome/panels/__tests__/packages-panel.test.tsx +143 -0
  185. package/src/components/editor/chrome/panels/packages-panel.tsx +145 -51
  186. package/src/components/editor/code/__tests__/readonly-diff.test.tsx +65 -0
  187. package/src/components/editor/code/readonly-diff.tsx +1 -1
  188. package/src/components/editor/file-tree/__tests__/tree-actions.test.tsx +54 -0
  189. package/src/components/editor/file-tree/tree-actions.tsx +11 -14
  190. package/src/components/editor/notebook-cell.tsx +4 -2
  191. package/src/components/editor/output/Outputs.css +1 -0
  192. package/src/components/editor/package-alert.tsx +25 -1
  193. package/src/components/home/components.tsx +17 -0
  194. package/src/components/pages/gallery-page.tsx +2 -4
  195. package/src/components/pages/home-page.tsx +2 -4
  196. package/src/components/terminal/terminal.tsx +4 -4
  197. package/src/components/tracing/tracing-spec.ts +1 -1
  198. package/src/components/ui/table.tsx +1 -1
  199. package/src/core/cells/__tests__/cell.test.ts +61 -0
  200. package/src/core/cells/cell.ts +9 -1
  201. package/src/core/cells/pending-delete-service.ts +12 -16
  202. package/src/core/codemirror/language/__tests__/sql.test.ts +70 -2
  203. package/src/core/codemirror/language/languages/sql/sql.ts +16 -1
  204. package/src/core/codemirror/rtc/extension.ts +5 -2
  205. package/src/core/datasets/__tests__/data-source.test.ts +2 -0
  206. package/src/core/datasets/data-source-connections.ts +15 -10
  207. package/src/core/islands/__tests__/parse.test.ts +140 -7
  208. package/src/core/islands/parse.ts +20 -0
  209. package/src/core/packages/__tests__/useInstallPackage.test.tsx +47 -1
  210. package/src/core/packages/toast-components.tsx +26 -0
  211. package/src/core/packages/useInstallPackage.ts +7 -2
  212. package/src/core/runtime/__tests__/runtime.test.ts +11 -0
  213. package/src/core/runtime/runtime.ts +7 -2
  214. package/src/core/wasm/bridge.ts +1 -0
  215. package/src/core/websocket/transports/transport.ts +1 -1
  216. package/src/core/websocket/transports/ws.ts +1 -1
  217. package/src/css/app/Cell.css +2 -0
  218. package/src/plugins/core/RenderHTML.tsx +22 -2
  219. package/src/plugins/core/__test__/RenderHTML.test.ts +187 -0
  220. package/src/plugins/layout/AccordionPlugin.tsx +7 -2
  221. package/src/plugins/layout/__test__/AccordionPlugin.test.tsx +66 -0
  222. package/dist/_baseMerge-Dv8bBloN.js +0 -73
  223. package/dist/_initCloneObject---vediN2.js +0 -95
  224. package/dist/arc-DOVLrCPd.js +0 -82
  225. package/dist/architecture-TIHT7OUA-MiJpPpQW.js +0 -3
  226. package/dist/array-CApNbSU9.js +0 -6
  227. package/dist/assets/__vite-browser-external-BdKGjRZ4.js +0 -1
  228. package/dist/assets/worker-DlIBfp9S.js +0 -98
  229. package/dist/blockDiagram-VBNYF7ZC-Bc--I65C.js +0 -3158
  230. package/dist/chat-ui-DttQ-5Ut.js +0 -8455
  231. package/dist/chunk-3NCLNEKW-BIp_lB_4.js +0 -14
  232. package/dist/chunk-5FCAYU7R-C_HO9A1J.js +0 -23
  233. package/dist/chunk-5HE753X5-Bixm_MV-.js +0 -38
  234. package/dist/chunk-5JV3BV7I-CH5J3iZY.js +0 -54
  235. package/dist/chunk-5TONJI2A-DG6gDiSS.js +0 -62
  236. package/dist/chunk-7BUUIJ7U-5afmIPeo.js +0 -82
  237. package/dist/chunk-BIQX33UG-7TMBUf89.js +0 -23
  238. package/dist/chunk-CQNSW5MT-Cnqqsxt-.js +0 -38
  239. package/dist/chunk-CYSBUYHQ-BAbymFHR.js +0 -23
  240. package/dist/chunk-EMLP6XTP-Bsz-QL77.js +0 -23
  241. package/dist/chunk-J7OUQ5F2-CM_meqZH.js +0 -57
  242. package/dist/chunk-JG7HCLWE-DUnCDgPk.js +0 -62
  243. package/dist/chunk-MOZMSUNE-BG6IHvzT.js +0 -35
  244. package/dist/chunk-OSBZ3O6U-CYwj_bvR.js +0 -23
  245. package/dist/chunk-QBLGF6JB-B4vJ4j8J.js +0 -23
  246. package/dist/chunk-QR6OTTB3-D4wH2ldi.js +0 -3738
  247. package/dist/chunk-R7FJI6CG-Blf8FcmZ.js +0 -64
  248. package/dist/chunk-RYQCIY6F-BWbIlBIH.js +0 -241
  249. package/dist/chunk-U6XO7XAA-COw445DS.js +0 -63
  250. package/dist/chunk-UBXNYLIW-BHigVU4H.js +0 -32
  251. package/dist/chunk-YOTPTUD7-Dn044Q_d.js +0 -30
  252. package/dist/chunk-ZIRB5QZD-BR4TMfOa.js +0 -1153
  253. package/dist/classDiagram-JCYQIIEL-DmXSLxe_.js +0 -30
  254. package/dist/classDiagram-v2-OCEON4UE-CooqVexA.js +0 -30
  255. package/dist/click-outside-container-D_URcm3D.js +0 -167
  256. package/dist/code-block-37QAKDTI-CQrzBOr-.js +0 -107
  257. package/dist/cynefin-VYW2F7L2-CeHAxOEX.js +0 -3
  258. package/dist/dagre-VZM6K2ZE-CJggWPTJ.js +0 -328
  259. package/dist/dist-ABQjhuek.js +0 -64
  260. package/dist/dist-CO5R6VMi.js +0 -538
  261. package/dist/eventmodeling-45OFAUF4-B_lWZ-Pd.js +0 -3
  262. package/dist/flowDiagram-UKHOOZJN-g1AmrZzM.js +0 -17
  263. package/dist/gitGraph-TEB2WS4Q-Dj-eXUph.js +0 -3
  264. package/dist/info-DKCQHKI2-Bhb-pe2e.js +0 -3
  265. package/dist/line-CuKjIQa1.js +0 -34
  266. package/dist/map-BJpOfPlL.js +0 -149
  267. package/dist/math-BXtKgYah.js +0 -10
  268. package/dist/mermaid-4DMBBIKO-Ddp9TgNp.js +0 -2
  269. package/dist/mermaid-BsHdQeQf.js +0 -1173
  270. package/dist/mermaid-parser.core-Din9FvSi.js +0 -99
  271. package/dist/packet-7NZHBO7P-fbkIIyKE.js +0 -3
  272. package/dist/path-BNHuHZP8.js +0 -87
  273. package/dist/pie-RZYD4A2V-CLRIsxY1.js +0 -3
  274. package/dist/purify.es-CB-YO1Hn.js +0 -774
  275. package/dist/radar-I7S5WNFK-BGzCbgXu.js +0 -3
  276. package/dist/railroad-3IZDKUUU-CvQIIcuU.js +0 -3
  277. package/dist/railroad-abnf-AHOZXSZD-CMwtlNtu.js +0 -3
  278. package/dist/railroad-ebnf-EBAXGLYW-n1QUOAsh.js +0 -3
  279. package/dist/railroad-peg-LSFZ7HO6-PjnrpmCs.js +0 -3
  280. package/dist/schemas-DzK6U94N.js +0 -6057
  281. package/dist/stateDiagram-v2-UEYNNEHI-BTRUs8Il.js +0 -30
  282. package/dist/step-CKczO72Q.js +0 -670
  283. package/dist/swimlanesDiagram-ULZ7WXOC-NBmgBl9G.js +0 -31
  284. package/dist/timer-DpDyj9G0.js +0 -596
  285. package/dist/treeView-QDETBFTQ-DU8LwHuf.js +0 -3
  286. package/dist/treemap-6X3UGDF4-DUk4-k_O.js +0 -3
  287. package/dist/useTheme-CVJ0UOf2.js +0 -841
  288. package/dist/vega-loader.browser-DEggZzni.js +0 -1083
  289. package/dist/wardley-OPB4EBWU-Db-AaGas.js +0 -3
@@ -1,10 +1,22 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
- import { act, renderHook } from "@testing-library/react";
2
+ import {
3
+ act,
4
+ fireEvent,
5
+ render,
6
+ renderHook,
7
+ screen,
8
+ } from "@testing-library/react";
3
9
  import { beforeEach, describe, expect, it, vi } from "vitest";
4
10
  import { useInstallPackages } from "../useInstallPackage";
11
+ import { Toast, ToastProvider, ToastViewport } from "@/components/ui/toast";
5
12
 
6
13
  const toast = vi.fn();
7
14
  const addPackage = vi.fn();
15
+ const restartKernel = vi.fn();
16
+
17
+ vi.mock("@/components/editor/actions/useRestartKernel", () => ({
18
+ useRestartKernel: () => restartKernel,
19
+ }));
8
20
 
9
21
  vi.mock("@/components/ui/use-toast", () => ({
10
22
  toast: (...args: unknown[]) => toast(...args),
@@ -20,6 +32,7 @@ describe("useInstallPackages", () => {
20
32
  beforeEach(() => {
21
33
  toast.mockClear();
22
34
  addPackage.mockClear();
35
+ restartKernel.mockClear();
23
36
  });
24
37
 
25
38
  it("batches all packages into a single install call", async () => {
@@ -109,6 +122,39 @@ describe("useInstallPackages", () => {
109
122
  );
110
123
  });
111
124
 
125
+ it("reports saved changes requiring restart without claiming installation", async () => {
126
+ addPackage.mockResolvedValue({
127
+ success: false,
128
+ error: null,
129
+ restartRequired: true,
130
+ });
131
+ const { result } = renderHook(() => useInstallPackages());
132
+ await act(async () => {
133
+ await result.current.handleInstallPackages(["boltons", "six"]);
134
+ });
135
+ expect(toast).toHaveBeenCalledTimes(1);
136
+ expect(toast).toHaveBeenCalledWith(
137
+ expect.objectContaining({
138
+ title: "Changes saved — restart required",
139
+ description: expect.stringContaining(
140
+ "Restarting clears in-memory variables",
141
+ ),
142
+ duration: Infinity,
143
+ action: expect.anything(),
144
+ }),
145
+ );
146
+ expect(toast.mock.calls[0][0].variant).not.toBe("danger");
147
+ render(
148
+ <ToastProvider>
149
+ <Toast>{toast.mock.calls[0][0].action}</Toast>
150
+ <ToastViewport />
151
+ </ToastProvider>,
152
+ );
153
+ expect(restartKernel).not.toHaveBeenCalled();
154
+ fireEvent.click(screen.getByRole("button", { name: "Restart Kernel" }));
155
+ expect(restartKernel).toHaveBeenCalledTimes(1);
156
+ });
157
+
112
158
  it("calls onSuccess after a successful install", async () => {
113
159
  addPackage.mockResolvedValue({ success: true, error: null });
114
160
  const onSuccess = vi.fn();
@@ -1,8 +1,34 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
+ import { useRestartKernel } from "@/components/editor/actions/useRestartKernel";
3
4
  import { Kbd } from "@/components/ui/kbd";
5
+ import { ToastAction } from "@/components/ui/toast";
4
6
  import { toast } from "@/components/ui/use-toast";
5
7
 
8
+ export const RESTART_REQUIRED_DESCRIPTION =
9
+ "Your dependency changes are saved. Restart the kernel to use the updated environment. Restarting clears in-memory variables.";
10
+
11
+ const RestartKernelAction = () => {
12
+ const restartKernel = useRestartKernel();
13
+ return (
14
+ <ToastAction
15
+ altText="Restart the kernel to use the updated dependencies"
16
+ onClick={restartKernel}
17
+ >
18
+ Restart Kernel
19
+ </ToastAction>
20
+ );
21
+ };
22
+
23
+ export const showPackageRestartToast = () => {
24
+ toast({
25
+ title: "Changes saved — restart required",
26
+ description: RESTART_REQUIRED_DESCRIPTION,
27
+ duration: Infinity,
28
+ action: <RestartKernelAction />,
29
+ });
30
+ };
31
+
6
32
  export const showAddPackageToast = (
7
33
  packageName: string | string[],
8
34
  error?: string | null,
@@ -3,7 +3,10 @@
3
3
  import { useState } from "react";
4
4
  import { Logger } from "@/utils/Logger";
5
5
  import { useRequestClient } from "../network/requests";
6
- import { showAddPackageToast } from "./toast-components";
6
+ import {
7
+ showAddPackageToast,
8
+ showPackageRestartToast,
9
+ } from "./toast-components";
7
10
 
8
11
  export function useInstallPackages(): {
9
12
  handleInstallPackages: (
@@ -30,7 +33,9 @@ export function useInstallPackages(): {
30
33
  // response only carries an aggregate success/error. Report a single
31
34
  // toast covering all requested packages rather than implying a
32
35
  // per-package outcome we don't actually have.
33
- if (response.success) {
36
+ if (response.restartRequired) {
37
+ showPackageRestartToast();
38
+ } else if (response.success) {
34
39
  showAddPackageToast(packages);
35
40
  } else {
36
41
  showAddPackageToast(packages, response.error);
@@ -276,6 +276,17 @@ describe("RuntimeManager", () => {
276
276
  });
277
277
 
278
278
  describe("getTerminalWsURL", () => {
279
+ it("should include dimensions in the terminal handshake", () => {
280
+ const runtime = new RuntimeManager(mockConfig);
281
+ const url = runtime.getTerminalWsURL({ rows: 30, cols: 140 });
282
+
283
+ expect(Object.fromEntries(url.searchParams)).toEqual({
284
+ access_token: "test-token",
285
+ rows: "30",
286
+ cols: "140",
287
+ });
288
+ });
289
+
279
290
  it("should return terminal WebSocket URL", () => {
280
291
  const runtime = new RuntimeManager(mockConfig);
281
292
  const url = runtime.getTerminalWsURL();
@@ -183,8 +183,13 @@ export class RuntimeManager {
183
183
  /**
184
184
  * The WebSocket URL of the terminal.
185
185
  */
186
- getTerminalWsURL(): URL {
187
- return this.formatWsURL("/terminal/ws");
186
+ getTerminalWsURL(size?: { rows: number; cols: number }): URL {
187
+ const url = this.formatWsURL("/terminal/ws");
188
+ if (size) {
189
+ url.searchParams.set("rows", String(size.rows));
190
+ url.searchParams.set("cols", String(size.cols));
191
+ }
192
+ return url;
188
193
  }
189
194
 
190
195
  /**
@@ -649,6 +649,7 @@ export class PyodideBridge implements RunRequests, EditRequests {
649
649
  tags: [],
650
650
  version: null,
651
651
  },
652
+ context: { kind: "package-manager", name: "micropip" },
652
653
  };
653
654
  };
654
655
 
@@ -15,7 +15,7 @@ export type ConnectionTransportCallback<T extends ConnectionEvent> = (
15
15
  export interface IConnectionTransport {
16
16
  reconnect(code?: number | undefined, reason?: string | undefined): void;
17
17
  close(): void;
18
- send(data: string | ArrayBuffer | Blob | ArrayBufferView): void;
18
+ send(data: string | ArrayBuffer | Blob | ArrayBufferView<ArrayBuffer>): void;
19
19
  addEventListener<T extends ConnectionEvent>(
20
20
  event: T,
21
21
  callback: ConnectionTransportCallback<T>,
@@ -42,7 +42,7 @@ export class WsTransport implements IConnectionTransport {
42
42
  this.inner.close();
43
43
  }
44
44
 
45
- send(data: string | ArrayBuffer | Blob | ArrayBufferView): void {
45
+ send(data: string | ArrayBuffer | Blob | ArrayBufferView<ArrayBuffer>): void {
46
46
  this.inner.send(data);
47
47
  }
48
48
 
@@ -82,6 +82,7 @@
82
82
  .console-output-area {
83
83
  max-height: 610px;
84
84
  overflow: auto;
85
+ overscroll-behavior: contain;
85
86
  }
86
87
 
87
88
  /* Special case for particular components */
@@ -521,6 +522,7 @@
521
522
  display: flow-root;
522
523
 
523
524
  overflow: auto;
525
+ overscroll-behavior: contain;
524
526
  }
525
527
 
526
528
  .marimo-output-stale,
@@ -262,9 +262,29 @@ const wrapTooltipTargets: TransformFn = (
262
262
  if (tagName.startsWith("marimo-")) {
263
263
  return undefined;
264
264
  }
265
- const tooltipContent = domNode.attribs["data-tooltip"];
265
+ const tooltipContent = domNode.attribs["data-tooltip"].replace(
266
+ /^[\r\n]+|[\r\n]+$/g,
267
+ "",
268
+ );
266
269
  return (
267
- <Tooltip content={tooltipContent}>{reactNode as JSX.Element}</Tooltip>
270
+ <Tooltip
271
+ content={
272
+ tooltipContent.includes("\n") ? (
273
+ <span className="whitespace-pre-wrap">
274
+ {tooltipContent.split(/\r?\n/).map((line, i) => (
275
+ <React.Fragment key={i}>
276
+ {i > 0 && <br />}
277
+ {line}
278
+ </React.Fragment>
279
+ ))}
280
+ </span>
281
+ ) : (
282
+ tooltipContent
283
+ )
284
+ }
285
+ >
286
+ {reactNode as JSX.Element}
287
+ </Tooltip>
268
288
  );
269
289
  }
270
290
  };
@@ -1,5 +1,7 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
  import type { ExtractAtomValue } from "jotai";
3
+ import { isValidElement, type ReactNode } from "react";
4
+ import { renderToStaticMarkup } from "react-dom/server";
3
5
  import { afterEach, beforeEach, describe, expect, test } from "vitest";
4
6
  import { hasRunAnyCellAtom } from "@/components/editor/cell/useRunCells";
5
7
  import { userConfigAtom } from "@/core/config/config";
@@ -450,6 +452,191 @@ describe("wrapTooltipTargets", () => {
450
452
  </Tooltip>
451
453
  `);
452
454
  });
455
+
456
+ test("data-tooltip multiline via &#10; entity renders <br/>", () => {
457
+ const html =
458
+ '<span data-tooltip="Line A&#10;Line B&#10;Line C">hover</span>';
459
+ const result = parseHtml({ html });
460
+ expect(result).toMatchInlineSnapshot(`
461
+ <Tooltip
462
+ content={
463
+ <span
464
+ className="whitespace-pre-wrap"
465
+ >
466
+ <React.Fragment>
467
+ Line A
468
+ </React.Fragment>
469
+ <React.Fragment>
470
+ <br />
471
+ Line B
472
+ </React.Fragment>
473
+ <React.Fragment>
474
+ <br />
475
+ Line C
476
+ </React.Fragment>
477
+ </span>
478
+ }
479
+ >
480
+ <span
481
+ data-tooltip="Line A
482
+ Line B
483
+ Line C"
484
+ >
485
+ hover
486
+ </span>
487
+ </Tooltip>
488
+ `);
489
+ });
490
+
491
+ test("data-tooltip multiline via literal \\n renders <br/>", () => {
492
+ const html = '<span data-tooltip="Line A\nLine B">hover</span>';
493
+ expect(parseHtml({ html })).toMatchInlineSnapshot(`
494
+ <Tooltip
495
+ content={
496
+ <span
497
+ className="whitespace-pre-wrap"
498
+ >
499
+ <React.Fragment>
500
+ Line A
501
+ </React.Fragment>
502
+ <React.Fragment>
503
+ <br />
504
+ Line B
505
+ </React.Fragment>
506
+ </span>
507
+ }
508
+ >
509
+ <span
510
+ data-tooltip="Line A
511
+ Line B"
512
+ >
513
+ hover
514
+ </span>
515
+ </Tooltip>
516
+ `);
517
+ });
518
+
519
+ test("data-tooltip single line still works as before", () => {
520
+ const html = '<span data-tooltip="Single line">hover</span>';
521
+ expect(parseHtml({ html })).toMatchInlineSnapshot(`
522
+ <Tooltip
523
+ content="Single line"
524
+ >
525
+ <span
526
+ data-tooltip="Single line"
527
+ >
528
+ hover
529
+ </span>
530
+ </Tooltip>
531
+ `);
532
+ });
533
+
534
+ test.each([
535
+ ["CRLF", "A\r\nB", '<span class="whitespace-pre-wrap">A<br/>B</span>'],
536
+ [
537
+ "encoded CRLF",
538
+ "A&#13;&#10;B",
539
+ '<span class="whitespace-pre-wrap">A<br/>B</span>',
540
+ ],
541
+ ["leading newline", "\nA", "A"],
542
+ ["trailing newline", "A\n", "A"],
543
+ [
544
+ "boundary newlines",
545
+ "\n\nA\nB\n\n",
546
+ '<span class="whitespace-pre-wrap">A<br/>B</span>',
547
+ ],
548
+ [
549
+ "boundary CRLF",
550
+ "&#13;&#10;A&#13;&#10;B&#13;&#10;",
551
+ '<span class="whitespace-pre-wrap">A<br/>B</span>',
552
+ ],
553
+ ["only newlines", "\n\n", ""],
554
+ ["only CRLF", "&#13;&#10;&#13;&#10;", ""],
555
+ [
556
+ "internal blank line",
557
+ "A\n\nB",
558
+ '<span class="whitespace-pre-wrap">A<br/><br/>B</span>',
559
+ ],
560
+ [
561
+ "spaces and tabs",
562
+ "\n A\t\n\tB \n",
563
+ '<span class="whitespace-pre-wrap"> A\t<br/>\tB </span>',
564
+ ],
565
+ [
566
+ "HTML text",
567
+ "&lt;b&gt;A&lt;/b&gt;\nB",
568
+ '<span class="whitespace-pre-wrap">&lt;b&gt;A&lt;/b&gt;<br/>B</span>',
569
+ ],
570
+ ])("data-tooltip handles %s", (_, content, expected) => {
571
+ const result = parseHtml({
572
+ html: `<span data-tooltip="${content}">Hover me</span>`,
573
+ });
574
+ if (!isValidElement<{ content: ReactNode }>(result)) {
575
+ throw new Error("Expected a Tooltip element");
576
+ }
577
+ expect(renderToStaticMarkup(result.props.content)).toBe(expected);
578
+ });
579
+
580
+ test("data-tooltip with newline renders as line breaks", () => {
581
+ const html = '<span data-tooltip="Line one\nLine two">Hover me</span>';
582
+ expect(parseHtml({ html })).toMatchInlineSnapshot(`
583
+ <Tooltip
584
+ content={
585
+ <span
586
+ className="whitespace-pre-wrap"
587
+ >
588
+ <React.Fragment>
589
+ Line one
590
+ </React.Fragment>
591
+ <React.Fragment>
592
+ <br />
593
+ Line two
594
+ </React.Fragment>
595
+ </span>
596
+ }
597
+ >
598
+ <span
599
+ data-tooltip="Line one
600
+ Line two"
601
+ >
602
+ Hover me
603
+ </span>
604
+ </Tooltip>
605
+ `);
606
+ });
607
+
608
+ test("data-tooltip with multiple newlines renders all as line breaks", () => {
609
+ const html = '<span data-tooltip="A\nB\nC">Hover me</span>';
610
+ expect(parseHtml({ html })).toMatchInlineSnapshot(`
611
+ <Tooltip
612
+ content={
613
+ <span
614
+ className="whitespace-pre-wrap"
615
+ >
616
+ <React.Fragment>
617
+ A
618
+ </React.Fragment>
619
+ <React.Fragment>
620
+ <br />
621
+ B
622
+ </React.Fragment>
623
+ <React.Fragment>
624
+ <br />
625
+ C
626
+ </React.Fragment>
627
+ </span>
628
+ }
629
+ >
630
+ <span
631
+ data-tooltip="A
632
+ B
633
+ C"
634
+ >
635
+ Hover me
636
+ </span>
637
+ </Tooltip>
638
+ `);
639
+ });
453
640
  });
454
641
 
455
642
  describe("parseHtml with < nad >", () => {
@@ -23,6 +23,7 @@ interface Data {
23
23
  * Whether to allow multiple tabs to be open.
24
24
  */
25
25
  multiple: boolean;
26
+ expanded: string[];
26
27
  }
27
28
 
28
29
  export class AccordionPlugin implements IStatelessPlugin<Data> {
@@ -31,6 +32,7 @@ export class AccordionPlugin implements IStatelessPlugin<Data> {
31
32
  validator = z.object({
32
33
  labels: z.array(z.string()),
33
34
  multiple: z.boolean(),
35
+ expanded: z.array(z.string()).default([]),
34
36
  });
35
37
 
36
38
  render(props: IStatelessPluginProps<Data>): JSX.Element {
@@ -43,11 +45,14 @@ export class AccordionPlugin implements IStatelessPlugin<Data> {
43
45
  const AccordionComponent = ({
44
46
  labels,
45
47
  multiple,
48
+ expanded,
46
49
  children,
47
50
  }: PropsWithChildren<Data>): JSX.Element => {
48
- const type = multiple ? "multiple" : "single";
51
+ const expansionProps = multiple
52
+ ? { type: "multiple" as const, defaultValue: expanded }
53
+ : { type: "single" as const, defaultValue: expanded[0], collapsible: true };
49
54
  return (
50
- <Accordion type={type} className="text-muted-foreground" collapsible={true}>
55
+ <Accordion {...expansionProps} className="text-muted-foreground">
51
56
  {React.Children.map(children, (child, index) => {
52
57
  return (
53
58
  <AccordionItem key={index} value={index.toString()}>
@@ -0,0 +1,66 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+ import { cleanup, fireEvent, render } from "@testing-library/react";
3
+ import { afterEach, describe, expect, it } from "vitest";
4
+ import { AccordionPlugin } from "../AccordionPlugin";
5
+
6
+ const plugin = new AccordionPlugin();
7
+
8
+ function renderAccordion(multiple: boolean, expanded?: string[]) {
9
+ return plugin.render({
10
+ host: document.createElement("marimo-accordion"),
11
+ data: plugin.validator.parse({
12
+ labels: ["Summary", "Details"],
13
+ multiple,
14
+ expanded,
15
+ }),
16
+ children: [
17
+ <p key="summary">Overview</p>,
18
+ <p key="details">More information</p>,
19
+ ],
20
+ });
21
+ }
22
+
23
+ describe("AccordionPlugin", () => {
24
+ afterEach(cleanup);
25
+
26
+ it.each([
27
+ { multiple: false, expanded: undefined, expected: ["false", "false"] },
28
+ { multiple: true, expanded: [], expected: ["false", "false"] },
29
+ { multiple: false, expanded: ["0"], expected: ["true", "false"] },
30
+ { multiple: false, expanded: ["1"], expected: ["false", "true"] },
31
+ { multiple: true, expanded: ["0", "1"], expected: ["true", "true"] },
32
+ ])(
33
+ "sets initial expansion: $multiple, $expanded",
34
+ ({ multiple, expanded, expected }) => {
35
+ const { getAllByRole } = render(renderAccordion(multiple, expanded));
36
+ expect(
37
+ getAllByRole("button").map((button) =>
38
+ button.getAttribute("aria-expanded"),
39
+ ),
40
+ ).toEqual(expected);
41
+ },
42
+ );
43
+
44
+ it("lets users collapse and switch the initially expanded item", () => {
45
+ const { getAllByRole, rerender } = render(renderAccordion(false, ["1"]));
46
+ const [summary, details] = getAllByRole("button");
47
+ fireEvent.click(details);
48
+ expect(details.getAttribute("aria-expanded")).toBe("false");
49
+ rerender(renderAccordion(false, ["1"]));
50
+ expect(details.getAttribute("aria-expanded")).toBe("false");
51
+ fireEvent.click(details);
52
+ fireEvent.click(summary);
53
+ expect(
54
+ [summary, details].map((button) => button.getAttribute("aria-expanded")),
55
+ ).toEqual(["true", "false"]);
56
+ });
57
+
58
+ it("lets users collapse items independently with multiple enabled", () => {
59
+ const { getAllByRole } = render(renderAccordion(true, ["0", "1"]));
60
+ const [summary, details] = getAllByRole("button");
61
+ fireEvent.click(summary);
62
+ expect(
63
+ [summary, details].map((button) => button.getAttribute("aria-expanded")),
64
+ ).toEqual(["false", "true"]);
65
+ });
66
+ });
@@ -1,73 +0,0 @@
1
- import { A as e, E as t, O as n, _ as r, b as i, f as a, h as o, i as s, j as c, k as l, l as u, n as d, p as f, t as p, y as m } from "./isArrayLikeObject-BZl-15ir.js";
2
- import { a as h, i as g, l as _, n as v, o as y, s as b, t as x, u as S } from "./_initCloneObject---vediN2.js";
3
- //#region ../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_isIterateeCall.js
4
- function C(e, t, r) {
5
- if (!n(r)) return !1;
6
- var a = typeof t;
7
- return (a == "number" ? o(r) && i(t, r.length) : a == "string" && t in r) ? m(r[t], e) : !1;
8
- }
9
- //#endregion
10
- //#region ../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_createAssigner.js
11
- function w(e) {
12
- return r(function(t, n) {
13
- var r = -1, i = n.length, a = i > 1 ? n[i - 1] : void 0, o = i > 2 ? n[2] : void 0;
14
- for (a = e.length > 3 && typeof a == "function" ? (i--, a) : void 0, o && C(n[0], n[1], o) && (a = i < 3 ? void 0 : a, i = 1), t = Object(t); ++r < i;) {
15
- var s = n[r];
16
- s && e(t, s, r, a);
17
- }
18
- return t;
19
- });
20
- }
21
- //#endregion
22
- //#region ../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/isPlainObject.js
23
- var T = "[object Object]", E = Function.prototype, D = Object.prototype, O = E.toString, k = D.hasOwnProperty, A = O.call(Object);
24
- function j(t) {
25
- if (!e(t) || c(t) != T) return !1;
26
- var n = h(t);
27
- if (n === null) return !0;
28
- var r = k.call(n, "constructor") && n.constructor;
29
- return typeof r == "function" && r instanceof r && O.call(r) == A;
30
- }
31
- //#endregion
32
- //#region ../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_assignMergeValue.js
33
- function M(e, t, n) {
34
- (n !== void 0 && !m(e[t], n) || n === void 0 && !(t in e)) && _(e, t, n);
35
- }
36
- //#endregion
37
- //#region ../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_safeGet.js
38
- function N(e, t) {
39
- if ((t !== "constructor" || typeof e[t] != "function") && t != "__proto__") return e[t];
40
- }
41
- //#endregion
42
- //#region ../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/toPlainObject.js
43
- function P(e) {
44
- return b(e, y(e));
45
- }
46
- //#endregion
47
- //#region ../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseMergeDeep.js
48
- function F(e, r, i, o, s, c, d) {
49
- var m = N(e, i), h = N(r, i), _ = d.get(h);
50
- if (_) {
51
- M(e, i, _);
52
- return;
53
- }
54
- var y = c ? c(m, h, i + "", e, r, d) : void 0, b = y === void 0;
55
- if (b) {
56
- var C = l(h), w = !C && a(h), T = !C && !w && u(h);
57
- y = h, C || w || T ? l(m) ? y = m : p(m) ? y = S(m) : w ? (b = !1, y = g(h, !0)) : T ? (b = !1, y = v(h, !0)) : y = [] : j(h) || f(h) ? (y = m, f(m) ? y = P(m) : (!n(m) || t(m)) && (y = x(h))) : b = !1;
58
- }
59
- b && (d.set(h, y), s(y, h, o, c, d), d.delete(h)), M(e, i, y);
60
- }
61
- //#endregion
62
- //#region ../node_modules/.pnpm/lodash-es@4.18.1/node_modules/lodash-es/_baseMerge.js
63
- function I(e, t, r, i, a) {
64
- e !== t && d(t, function(o, c) {
65
- if (a ||= new s(), n(o)) F(e, t, c, r, I, i, a);
66
- else {
67
- var l = i ? i(N(e, c), o, c + "", e, t, a) : void 0;
68
- l === void 0 && (l = o), M(e, c, l);
69
- }
70
- }, y);
71
- }
72
- //#endregion
73
- export { w as n, C as r, I as t };