@marimo-team/islands 0.25.2-dev12 → 0.25.2-dev121

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 (393) hide show
  1. package/dist/{ConnectedDataExplorerComponent-CqhQmp74.js → ConnectedDataExplorerComponent-CNSxdKyJ.js} +15 -15
  2. package/dist/{ErrorBoundary-YddQ6YHW.js → ErrorBoundary-Bo3Tg7Jh.js} +12 -12
  3. package/dist/{ImageComparisonComponent-Cpfz30OZ.js → ImageComparisonComponent-uU8FSKZE.js} +3 -3
  4. package/dist/{Plot-CTyjbQDT.js → Plot-DdYOe1UK.js} +2 -2
  5. package/dist/{abnfDiagram-VCTEODGH-aLGD44M7.js → abnfDiagram-VCTEODGH-DQDjNXt3.js} +3 -3
  6. package/dist/{any-language-editor-dqxlUDlT.js → any-language-editor-B9REGlD9.js} +8 -8
  7. package/dist/{apl-BYaaig9_.js → apl-GEW9-ZP1.js} +1 -1
  8. package/dist/{architectureDiagram-5GKGNRK7-BGL5P81u.js → architectureDiagram-5GKGNRK7-Nmls7Wxn.js} +5 -5
  9. package/dist/{asciiarmor-GKQFJXQG.js → asciiarmor-BWNxzkG7.js} +1 -1
  10. package/dist/{asn1-BsSb7HP5.js → asn1-Bcn2QutK.js} +1 -1
  11. package/dist/assets/__vite-browser-external-BXYkiFsk.js +1 -0
  12. package/dist/assets/worker-HPY9fbhz.js +114 -0
  13. package/dist/{asterisk-B3I8SNb5.js → asterisk-lE36-hJK.js} +1 -1
  14. package/dist/{blockDiagram-I7D4REHJ-CvBmppdy.js → blockDiagram-I7D4REHJ-Cg25UrxT.js} +9 -9
  15. package/dist/{brainfuck-DXjk3bQe.js → brainfuck-BQCYDheZ.js} +1 -1
  16. package/dist/{button-B0Xgl-Qn.js → button-CvjkwdSk.js} +304 -287
  17. package/dist/{c4Diagram-7LVT6UL2-EceL4_jH.js → c4Diagram-7LVT6UL2-BxFgrnNV.js} +7 -7
  18. package/dist/{capabilities-D7Ad8-zw.js → capabilities-CQ5IjhzL.js} +1 -1
  19. package/dist/{cells-5ppES-Un.js → cells-CuYwqnV8.js} +5950 -4893
  20. package/dist/{channel-z7HZXHwv.js → channel-CPObtJXj.js} +1 -1
  21. package/dist/{chat-ui-Dv2V95k6.js → chat-ui-C6oDg4Zu.js} +1595 -1402
  22. package/dist/{check-DGZ74tV2.js → check-EDwSwP89.js} +1 -1
  23. package/dist/{chunk-4HAMMTFA-BPTTOOC5.js → chunk-4HAMMTFA-D4eFPyFh.js} +5 -5
  24. package/dist/{chunk-75Z2AOVW-C4AOleKf.js → chunk-75Z2AOVW-D7gxIs2Q.js} +1 -1
  25. package/dist/{chunk-DU6HZSFF-1TwWR6gh.js → chunk-DU6HZSFF-BwiyaNpg.js} +2 -2
  26. package/dist/{chunk-F27PBJKO-DMI1PBe4.js → chunk-F27PBJKO-ufseIn5y.js} +1 -1
  27. package/dist/{chunk-GMAD6QVW-vStrMz2P.js → chunk-GMAD6QVW-BhaJx0X3.js} +3 -3
  28. package/dist/{chunk-GVQU2GXP-2HwWgs4u.js → chunk-GVQU2GXP-Cwbt-lF0.js} +2 -2
  29. package/dist/{chunk-IMKFNOWR-Cm3RgLDj.js → chunk-IMKFNOWR-CoIFEo-1.js} +6 -6
  30. package/dist/{chunk-L3NEJ4N5-RhC7i0I2.js → chunk-L3NEJ4N5-n-zgIVSy.js} +5 -5
  31. package/dist/{chunk-OSK3NFVY-CZV09N-U.js → chunk-OSK3NFVY-DXa-Cxbn.js} +6 -6
  32. package/dist/{chunk-P2QGCYS3-0TAWai9C.js → chunk-P2QGCYS3-B_Zd3-X0.js} +1 -1
  33. package/dist/{chunk-POPQ4Y6H-Cc3_56GX.js → chunk-POPQ4Y6H-hYOXbYH_.js} +1 -1
  34. package/dist/{chunk-PWAF6VOD-lNxB9k8z.js → chunk-PWAF6VOD-CQw5qATZ.js} +1 -1
  35. package/dist/{chunk-SHT3W25Y-DedDYSP5.js → chunk-SHT3W25Y-lHiGx3ZC.js} +8 -8
  36. package/dist/{chunk-SVP7TREG-B2SFkCAL.js → chunk-SVP7TREG-BvsHIrY_.js} +2 -2
  37. package/dist/{chunk-TICWLB2K-DB6hjNOL.js → chunk-TICWLB2K-BC8YIm_n.js} +6 -6
  38. package/dist/{chunk-YOKDWASO-DrWbKnxA.js → chunk-YOKDWASO-DPZk8vhS.js} +6 -6
  39. package/dist/classDiagram-ZZMXUADV-Bt98lkkv.js +30 -0
  40. package/dist/classDiagram-v2-VYDZK3BY-D9bfbcC3.js +30 -0
  41. package/dist/{clike-E2lFbGVj.js → clike-CxK9W55Z.js} +1 -1
  42. package/dist/{clojure-Dn_K4RlK.js → clojure-Dzcvwpxk.js} +1 -1
  43. package/dist/{cmake-DpN2Top5.js → cmake-DYr-71zp.js} +1 -1
  44. package/dist/{cobol-Chf22-GM.js → cobol-DC3g37Kq.js} +1 -1
  45. package/dist/{code-visibility-C0zE3g0U.js → code-visibility-WFM7uHBf.js} +7 -7
  46. package/dist/{coffeescript-BVe1OiD9.js → coffeescript-C-eFwH5N.js} +1 -1
  47. package/dist/{common-BkjS959w.js → common-BLHW2E-1.js} +9639 -9291
  48. package/dist/{commonlisp-DxoBG7fU.js → commonlisp-CyaNXrJR.js} +1 -1
  49. package/dist/{compiler-runtime-Cj8ZWiNS.js → compiler-runtime-CldRdSsv.js} +2 -2
  50. package/dist/{copy-icon-qmRg_VTX.js → copy-icon-Ft7t9bqz.js} +6 -6
  51. package/dist/{crystal-DCM3yc4r.js → crystal-ih5ax5tQ.js} +1 -1
  52. package/dist/{css-DkZ9mMyI.js → css-CN_wP7_R.js} +1 -1
  53. package/dist/{cynefinDiagram-5FMLGOSQ-DzaZEqgD.js → cynefinDiagram-5FMLGOSQ-CgWra7wt.js} +3 -3
  54. package/dist/{cypher-Drw_8U5I.js → cypher-CqGRcmZo.js} +1 -1
  55. package/dist/{d-CsVGcKMF.js → d-Cj0sOW2z.js} +1 -1
  56. package/dist/{dagre-GXQ25YYZ-Cjf5GjU3.js → dagre-GXQ25YYZ-CFZ8-35c.js} +10 -10
  57. package/dist/{data-grid-overlay-editor-CqoIqvNa.js → data-grid-overlay-editor-Dt75J_Qe.js} +7 -7
  58. package/dist/{data-grid-types-BucVmDDp.js → data-grid-types-BH_r7g7l.js} +1 -1
  59. package/dist/{diagram-S7CK7UJ4-IhLt_khx.js → diagram-S7CK7UJ4-lCNQrW7d.js} +4 -4
  60. package/dist/{diagram-UQ7AKVKN-CQc6KLPB.js → diagram-UQ7AKVKN-CQPQ6pP_.js} +3 -3
  61. package/dist/{diagram-VSXAHHWV-CR7BJygZ.js → diagram-VSXAHHWV-BJWcVVJY.js} +2 -2
  62. package/dist/{diagram-VX7I27RA-DHmW9N1T.js → diagram-VX7I27RA-Cf3b0llz.js} +5 -5
  63. package/dist/{diagram-Z3DM3KII-zVKsg-Ty.js → diagram-Z3DM3KII-Bt4QLrpn.js} +3 -3
  64. package/dist/{dialog-CILKhbsG.js → dialog-CEBFZNyc.js} +29 -29
  65. package/dist/{diff-CBikYCUF.js → diff-B_hUkiat.js} +1 -1
  66. package/dist/{dist-Df0wKI0F.js → dist-BK4Oj99o.js} +1 -1
  67. package/dist/{dist-BVGtK7Ht.js → dist-BLfKmR-l.js} +1 -1
  68. package/dist/{dist-B8D7McG3.js → dist-BMQf5zIS.js} +46 -46
  69. package/dist/{dist-C2KzV-vf.js → dist-BorMD-uX.js} +2 -2
  70. package/dist/{dist-Cs2FijYk.js → dist-BuaRHxOc.js} +2 -2
  71. package/dist/{dist-DPcEtqmG.js → dist-Bvs24R_E.js} +47 -47
  72. package/dist/{dist-lA1Cttkb.js → dist-C8fAKSH1.js} +41 -41
  73. package/dist/{dist-DszxuxS1.js → dist-CLdpGQVr.js} +2 -2
  74. package/dist/{dist-CO1AwwG_.js → dist-CN8zI-XC.js} +209 -209
  75. package/dist/{dist-D1PpnuZB.js → dist-CN_BeG2I.js} +1 -1
  76. package/dist/{dist-CPGxfVGX.js → dist-CSJ0MDRw.js} +1 -1
  77. package/dist/{dist-Cm3iAFMD.js → dist-CSbh1PNP.js} +3 -3
  78. package/dist/{dist-9x1ZRe-e.js → dist-Cg7gzw-a.js} +2 -2
  79. package/dist/{dist-B1vYLK28.js → dist-CkTTIdBe.js} +345 -345
  80. package/dist/{dist-BRxfaJgs.js → dist-CrSP_H1M.js} +296 -296
  81. package/dist/{dist-C2wDlYdD.js → dist-D-wwqlzJ.js} +2 -2
  82. package/dist/{dist-BtKIs9N-.js → dist-D6d86eNJ.js} +1 -1
  83. package/dist/{dist-DHOTQar0.js → dist-DBtSl3sf.js} +1 -1
  84. package/dist/{dist-KzZ7WELx.js → dist-DiDibOYr.js} +120 -120
  85. package/dist/{dist-Kxgjxakw.js → dist-DoE4XJBC.js} +1277 -1222
  86. package/dist/{dist-CcyKTBTF.js → dist-DpBpA_n1.js} +2 -2
  87. package/dist/{dist-BHCHt1NI.js → dist-F8Ep36rk.js} +1 -1
  88. package/dist/{dist-C8xMLVYi.js → dist-OR1OnN-y.js} +44 -44
  89. package/dist/{dist-1HDa70oE.js → dist-PXYI_yuP.js} +3 -3
  90. package/dist/{dist-CMh_W4y4.js → dist-diIx5qJW.js} +2 -2
  91. package/dist/{dockerfile-DJnSntVB.js → dockerfile-D0VKN500.js} +2 -2
  92. package/dist/dropdown-menu-CP_qCYHC.js +4678 -0
  93. package/dist/{dtd-BHa4v0Bn.js → dtd-B8FGSWWe.js} +1 -1
  94. package/dist/{dylan-BypL2Zz8.js → dylan-DbIBYIrw.js} +1 -1
  95. package/dist/{ebnf-5guncNu-.js → ebnf-D-YbYLdk.js} +1 -1
  96. package/dist/{ebnfDiagram-PWID7BFC-DDd5hCRC.js → ebnfDiagram-PWID7BFC-D3NAyPFY.js} +3 -3
  97. package/dist/{ecl-iRcVIKYZ.js → ecl-DBmkdWAd.js} +1 -1
  98. package/dist/{eiffel-BEqF9aU4.js → eiffel-CcWSDDzK.js} +1 -1
  99. package/dist/{elm-DYcfNE9c.js → elm-MC-b8a6C.js} +1 -1
  100. package/dist/{erDiagram-RLTQ6QDP-D10NP0eI.js → erDiagram-RLTQ6QDP-Tlu09_Nm.js} +12 -12
  101. package/dist/{erlang-BtAuIoF0.js → erlang-AdO1-xtV.js} +1 -1
  102. package/dist/error-banner-Da600cwz.js +362 -0
  103. package/dist/{error-entries-B2Ux3Z2X.js → error-entries-zfHL6H60.js} +2 -2
  104. package/dist/{esm-h8f7-1CJ.js → esm-AMFssoNp.js} +380 -374
  105. package/dist/{esm-BElI3qKH.js → esm-D2gTsXEV.js} +579 -579
  106. package/dist/{factor-3nzOwLuN.js → factor-Ys-13HOP.js} +2 -2
  107. package/dist/{fcl-C90TGnJJ.js → fcl-DnwditDr.js} +1 -1
  108. package/dist/{feedback-button-BU771zKS.js → feedback-button-pfhtTNjh.js} +13 -13
  109. package/dist/flowDiagram-HODETNUW-CAYbpJmV.js +16 -0
  110. package/dist/{formats-Q9gwlLyD.js → formats-DLtvJPnj.js} +6 -6
  111. package/dist/{forth-DEaRrLUi.js → forth-DiMuIXFe.js} +1 -1
  112. package/dist/{fortran-Bv6JRUjY.js → fortran-hkrF2eM4.js} +1 -1
  113. package/dist/{ganttDiagram-EL5Y4UJY-cRRaDt88.js → ganttDiagram-EL5Y4UJY-BQT16JSc.js} +2 -2
  114. package/dist/{gas-JNerWj3-.js → gas-DlhqN9k8.js} +1 -1
  115. package/dist/{gherkin-CSrl-H70.js → gherkin-0SlhEZ3t.js} +1 -1
  116. package/dist/{gitGraphDiagram-WWUBYQGX-Pox5k9-Y.js → gitGraphDiagram-WWUBYQGX-D5nSIzdE.js} +2 -2
  117. package/dist/{glide-data-editor-D9TpbHEU.js → glide-data-editor-B3x7mDpj.js} +60 -60
  118. package/dist/{glide-utils-CzzWU59p.js → glide-utils-DJyqh0EM.js} +4 -4
  119. package/dist/{globals-nXV4QUKg.js → globals-6B7ecxsC.js} +3 -3
  120. package/dist/{groovy-X7euO_vE.js → groovy-YhcTMyvX.js} +1 -1
  121. package/dist/{haskell-C48Z70Az.js → haskell-CodLxrtT.js} +1 -1
  122. package/dist/{haxe-CAUWMmwR.js → haxe-CiRWNFkH.js} +1 -1
  123. package/dist/{highlighted-body-KPVGNVTW-Ad3MKZ18.js → highlighted-body-KPVGNVTW-zwjq21tf.js} +4 -4
  124. package/dist/{html-to-image-BZBwkkDG.js → html-to-image-BJJsbNZ1.js} +547 -569
  125. package/dist/{http-BrSBnhDH.js → http-Bh6HhdNR.js} +1 -1
  126. package/dist/{idl-BXuPleZv.js → idl-DZgBq75I.js} +1 -1
  127. package/dist/{infoDiagram-27XIBGKW-DrYu3UZC.js → infoDiagram-27XIBGKW-XrDxhr0x.js} +2 -2
  128. package/dist/{ishikawaDiagram-5VMMS53U-pmkGQJsA.js → ishikawaDiagram-5VMMS53U-CD1muzov.js} +3 -3
  129. package/dist/{javascript-B4EPWJf_.js → javascript-BfNytHiM.js} +1 -1
  130. package/dist/{journeyDiagram-3NMN7TZE-EPJDPlt0.js → journeyDiagram-3NMN7TZE-BaLqn-dZ.js} +2 -2
  131. package/dist/{jsx-runtime-DgDPJV9S.js → jsx-runtime-3BD1kT0s.js} +1 -1
  132. package/dist/{julia-ke9Kh8b7.js → julia--tLIAG7q.js} +1 -1
  133. package/dist/{kanban-definition-UXKFOSKX-wWGD9VLW.js → kanban-definition-UXKFOSKX-Dg9W142_.js} +9 -9
  134. package/dist/{katex-BNCmKUol.js → katex-BIdZGsyO.js} +141 -116
  135. package/dist/label-BDKF3Afc.js +281 -0
  136. package/dist/{livescript-Ce4uqGAC.js → livescript-CVPfYnY_.js} +1 -1
  137. package/dist/{loader-C9OUkMrj.js → loader-BQOfjTIJ.js} +1 -1
  138. package/dist/{lua-D6fti_Jk.js → lua-4Fa-T-qq.js} +1 -1
  139. package/dist/main.js +7036 -6893
  140. package/dist/{mathematica-DcEpZ3Vj.js → mathematica-CtYAy6GG.js} +1 -1
  141. package/dist/{mbox-DFBbOu0X.js → mbox-D0w9Ah1C.js} +1 -1
  142. package/dist/{mermaid-Dfvntf3s.js → mermaid-CiAXjLpA.js} +57 -57
  143. package/dist/mermaid-HWGCJPDP-ByCsZnYF.js +2 -0
  144. package/dist/{mhchem-BEc7A1or.js → mhchem-CdWPJK6g.js} +1 -1
  145. package/dist/{mindmap-definition-YA3MSWOX-C2f1VIBR.js → mindmap-definition-YA3MSWOX-DgCidgYJ.js} +11 -11
  146. package/dist/{mirc-CqeibO3N.js → mirc-De9aSAZM.js} +1 -1
  147. package/dist/{mllike-D54QZYTP.js → mllike-BbugeaY_.js} +1 -1
  148. package/dist/{modelica-DuML2-8V.js → modelica-BjJwWw1F.js} +1 -1
  149. package/dist/{mscgen-CJmKwp3b.js → mscgen-DwiRH5ma.js} +1 -1
  150. package/dist/{mumps-DaVgFtkd.js → mumps--plbDM9o.js} +1 -1
  151. package/dist/{nginx-BXN1rqI0.js → nginx-C4Df7REc.js} +1 -1
  152. package/dist/{nsis-CMfRqf0V.js → nsis-fiiOqLc3.js} +7 -7
  153. package/dist/{ntriples-BiOGlMDR.js → ntriples-jV77I4k8.js} +1 -1
  154. package/dist/{number-overlay-editor-BH4Uo_sZ.js → number-overlay-editor-CyJwIeU1.js} +5 -5
  155. package/dist/{octave-CgVnzxKk.js → octave-Cztd01tF.js} +1 -1
  156. package/dist/{oz-B2mky97X.js → oz-Bl8o3BDl.js} +1 -1
  157. package/dist/{pascal-BoZhBf6s.js → pascal-BO5JqysR.js} +1 -1
  158. package/dist/{pegDiagram-XKGWAZYB-D6v5dz4M.js → pegDiagram-XKGWAZYB-coOYYKB6.js} +3 -3
  159. package/dist/{perl-DjzMqXtt.js → perl-Drlh9s6m.js} +1 -1
  160. package/dist/{pieDiagram-E7YTZNPT-BwFAhpYD.js → pieDiagram-E7YTZNPT-BnXTc3bj.js} +3 -3
  161. package/dist/{pig-B2mB-01d.js → pig-BWGR8wZw.js} +1 -1
  162. package/dist/{powershell-D0zT88Aj.js → powershell-DT99xlz_.js} +1 -1
  163. package/dist/{process-output-BSsWzfnY.js → process-output-C1GGFU6Q.js} +4 -4
  164. package/dist/{properties-3_5qCgOj.js → properties-Q-rkxld0.js} +1 -1
  165. package/dist/{protobuf-Dgoxfi1H.js → protobuf-DKyWZbs7.js} +1 -1
  166. package/dist/{pug-CNRdd8oG.js → pug-42ZJUbEC.js} +2 -2
  167. package/dist/{puppet-DzILxZfz.js → puppet-B4UozHhh.js} +1 -1
  168. package/dist/purify.es-DMv5zIkJ.js +866 -0
  169. package/dist/{python-AfVdMn_l.js → python-DREjAV__.js} +1 -1
  170. package/dist/{q-C6p-CGWh.js → q-Bi63IpBO.js} +1 -1
  171. package/dist/{quadrantDiagram-AXDQQJYC--kqzFC3w.js → quadrantDiagram-AXDQQJYC-Ccw0xMjN.js} +1 -1
  172. package/dist/{r-CzKF1D2X.js → r-DSwXWKMR.js} +1 -1
  173. package/dist/{railroadDiagram-O6MQD6OU-D6eOFr6Z.js → railroadDiagram-O6MQD6OU-B28-u83n.js} +3 -3
  174. package/dist/{react-dom-BUgJ-ab_.js → react-dom-DUmH0GXv.js} +29 -21
  175. package/dist/{react-ofJbxM4x.js → react-sHtZdjeP.js} +103 -94
  176. package/dist/{react-vega-ewj7q_U5.js → react-vega-BED0DjiB.js} +3 -3
  177. package/dist/{requirementDiagram-BXWQKSXE-CHYsMgDR.js → requirementDiagram-BXWQKSXE-CdYCTMu0.js} +11 -11
  178. package/dist/{reveal-component-_A40NW1c.js → reveal-component-CPohnNHB.js} +906 -878
  179. package/dist/{rpm-Bx7FkjTO.js → rpm-DPb1DeKM.js} +1 -1
  180. package/dist/{ruby-BMzgq2bf.js → ruby-U7fZA4DP.js} +2 -2
  181. package/dist/{sankeyDiagram-P5KCCOFB-BdzhT0BM.js → sankeyDiagram-P5KCCOFB-ELvOcnZH.js} +1 -1
  182. package/dist/{sas-ClGVnK3F.js → sas-CLk1JpTn.js} +1 -1
  183. package/dist/{scheme-C0MXqXep.js → scheme-CT-2k2Tl.js} +1 -1
  184. package/dist/select-BButFi-d.js +1344 -0
  185. package/dist/{sequenceDiagram-WJ2MYXX4-BPAknhBp.js → sequenceDiagram-WJ2MYXX4-CM3aRAe_.js} +4 -4
  186. package/dist/{shell-CiQZv6oG.js → shell-BLO7fcsk.js} +1 -1
  187. package/dist/{sieve-BiIMePvV.js → sieve-nG3C7WNH.js} +1 -1
  188. package/dist/{simple-mode-8ETW2RS6.js → simple-mode-C683Q7or.js} +1 -1
  189. package/dist/{smalltalk-9-llftyG.js → smalltalk-BROcZybA.js} +1 -1
  190. package/dist/{solr-CxCKEuwq.js → solr-mVltHNc5.js} +1 -1
  191. package/dist/{sparql-BRmy7pzx.js → sparql-Cv1Ksr4v.js} +1 -1
  192. package/dist/{spec-D62vWpMT.js → spec-BwarBpUJ.js} +116 -135
  193. package/dist/{spreadsheet-UCNUIGsn.js → spreadsheet-BwTnp5K_.js} +1 -1
  194. package/dist/{sql-D0hSGZ-H.js → sql-CjLt0122.js} +1 -1
  195. package/dist/{stateDiagram-D77RDMKH-Cq249IQ4.js → stateDiagram-D77RDMKH-DOZUMVj8.js} +13 -13
  196. package/dist/stateDiagram-v2-MP3YSRHH-CISYxma6.js +30 -0
  197. package/dist/{stex-UeT_Aofp.js → stex-Btf3omL8.js} +1 -1
  198. package/dist/style.css +1 -1
  199. package/dist/{stylus-Fi4waA2H.js → stylus-Dt4VvLXL.js} +1 -1
  200. package/dist/{swift-NqPyaBye.js → swift-DHsn_CVI.js} +1 -1
  201. package/dist/{swimlanes-42K2YHIH-Bh_S_HKD.js → swimlanes-42K2YHIH-BkSppxp8.js} +10 -10
  202. package/dist/swimlanesDiagram-VR7AAH4N-c8G5pGxC.js +30 -0
  203. package/dist/{swiper-component-DkV7T44B.js → swiper-component-DKntyn8p.js} +5 -5
  204. package/dist/{tcl-B4f0xfmM.js → tcl-CV0OLBOl.js} +1 -1
  205. package/dist/{textile-CnNbnPTe.js → textile-D320oKVM.js} +1 -1
  206. package/dist/{tiddlywiki-CSGSOg38.js → tiddlywiki-BVVNvfy4.js} +1 -1
  207. package/dist/{tiki-9F02WBA6.js → tiki-BF2aDPlB.js} +1 -1
  208. package/dist/{timeline-definition-24CTP7MA-ByNMgBE7.js → timeline-definition-24CTP7MA-CaMQayqK.js} +3 -3
  209. package/dist/{toDate-DWVp6uE1.js → toDate-Dwcg_x_5.js} +5 -6
  210. package/dist/{toast-DcoJGS3-.js → toast-B9UMEi8u.js} +161 -165
  211. package/dist/{toml-AesZ6RBt.js → toml-CaUN7UHo.js} +1 -1
  212. package/dist/{tooltip-Bi36DgYh.js → tooltip-BO1REbqs.js} +548 -584
  213. package/dist/{troff-DlfvveK1.js → troff-DQUFcClZ.js} +1 -1
  214. package/dist/{ttcn--YVSkGs_.js → ttcn-CQL1duJS.js} +1 -1
  215. package/dist/{ttcn-cfg-Bb1Knl_J.js → ttcn-cfg-BMmEFJPu.js} +1 -1
  216. package/dist/{turtle-DC24v1bz.js → turtle-C3esgsRr.js} +1 -1
  217. package/dist/{use-restore-focus-ZgG5Br63.js → use-restore-focus-BEM7sFWl.js} +2430 -2007
  218. package/dist/{use-vega-container-remeasure-4DwJbPWu.js → use-vega-container-remeasure-Bz4PZMtt.js} +2 -2
  219. package/dist/{useAsyncData-BD7NLQ3_.js → useAsyncData-Deh5kszT.js} +3 -3
  220. package/dist/{useDateFormatter-D8XWr8lL.js → useDateFormatter-D8XruNGG.js} +53 -32
  221. package/dist/{useDeepCompareMemoize-CawMGSRU.js → useDeepCompareMemoize-DXwzRINI.js} +2 -2
  222. package/dist/{useIframeCapabilities-BUMBOpsM.js → useIframeCapabilities-DBETvvPl.js} +2 -2
  223. package/dist/{useLifecycle-3vGhRa1o.js → useLifecycle-j7D9uD1o.js} +6 -6
  224. package/dist/{useTheme-BOw801nZ.js → useTheme-CRnjkku0.js} +7 -7
  225. package/dist/{vb-Dpc8vhvF.js → vb-RK1eDXRl.js} +1 -1
  226. package/dist/{vbscript-B-Y1XnZe.js → vbscript-BCOeM0de.js} +1 -1
  227. package/dist/{vega-component-9siY74NS.js → vega-component-DLBAQLSf.js} +14 -14
  228. package/dist/{vega-embed-container-sSR5hAsy.js → vega-embed-container-BNHE18G9.js} +5 -5
  229. package/dist/{velocity-DHMu9kc-.js → velocity-CZKOFbOI.js} +1 -1
  230. package/dist/{vennDiagram-4TSXK5OY-DY8CySdO.js → vennDiagram-4TSXK5OY-CF8pfaK3.js} +3 -3
  231. package/dist/{verilog-DhiEaoUl.js → verilog-DqQTzVn8.js} +1 -1
  232. package/dist/{vhdl-D4X23YKO.js → vhdl-vQr2bfmi.js} +1 -1
  233. package/dist/{wardleyDiagram-VM6X3IG4-DYC1AFni.js → wardleyDiagram-VM6X3IG4-dGPu39d-.js} +3 -3
  234. package/dist/{webidl-SyzNxWpJ.js → webidl-DzX7N40e.js} +1 -1
  235. package/dist/{xquery-BC2R4Hk6.js → xquery-Cw_Q_hGR.js} +1 -1
  236. package/dist/{xychartDiagram-S5SC5T6Z-Df8LLnuY.js → xychartDiagram-S5SC5T6Z-CP6-9q56.js} +5 -5
  237. package/dist/{yacas-DLNXPMmH.js → yacas-DiC4jJBE.js} +1 -1
  238. package/dist/{z80-CDXWHOO6.js → z80-CUOQDEJO.js} +1 -1
  239. package/package.json +38 -37
  240. package/src/__tests__/mount.test.ts +6 -6
  241. package/src/components/chat/__tests__/chat-history-popover.test.tsx +157 -0
  242. package/src/components/chat/chat-history-popover.tsx +98 -17
  243. package/src/components/chat/chat-panel.tsx +29 -0
  244. package/src/components/chat/tool-call/__tests__/tool-result.test.tsx +56 -0
  245. package/src/components/chat/tool-call/tool-result.tsx +3 -3
  246. package/src/components/data-table/TableTopBar.tsx +4 -0
  247. package/src/components/data-table/__tests__/export-actions.test.tsx +1111 -14
  248. package/src/components/data-table/__tests__/pagination.test.tsx +85 -1
  249. package/src/components/data-table/__tests__/schemas.test.ts +57 -0
  250. package/src/components/data-table/charts/__tests__/schemas.test.ts +25 -0
  251. package/src/components/data-table/charts/__tests__/slider-field.test.tsx +54 -0
  252. package/src/components/data-table/charts/__tests__/spec.test.ts +26 -23
  253. package/src/components/data-table/charts/components/form-fields.tsx +3 -1
  254. package/src/components/data-table/charts/constants.ts +11 -10
  255. package/src/components/data-table/charts/types.ts +1 -0
  256. package/src/components/data-table/data-table.tsx +3 -0
  257. package/src/components/data-table/export-actions.tsx +365 -81
  258. package/src/components/data-table/pagination.tsx +16 -2
  259. package/src/components/data-table/schemas.ts +90 -14
  260. package/src/components/editor/actions/__tests__/pair-with-agent-commands.test.ts +32 -46
  261. package/src/components/editor/actions/__tests__/pair-with-agent-modal.test.tsx +29 -40
  262. package/src/components/editor/actions/pair-with-agent-commands.ts +3 -4
  263. package/src/components/editor/actions/pair-with-agent-modal.tsx +4 -7
  264. package/src/components/editor/actions/useRestartKernel.tsx +2 -2
  265. package/src/components/editor/alerts/__tests__/connection-notice.test.tsx +224 -17
  266. package/src/components/editor/alerts/connection-details.tsx +61 -0
  267. package/src/components/editor/alerts/connection-notice.tsx +46 -53
  268. package/src/components/editor/alerts/startup-progress.tsx +73 -129
  269. package/src/components/editor/app-container.tsx +2 -2
  270. package/src/components/editor/boundary/__tests__/ErrorBoundary.test.tsx +2 -2
  271. package/src/components/editor/cell/CreateCellButton.tsx +2 -2
  272. package/src/components/editor/cell/DeleteButton.tsx +2 -2
  273. package/src/components/editor/cell/RunButton.tsx +3 -3
  274. package/src/components/editor/cell/StopButton.tsx +2 -2
  275. package/src/components/editor/chrome/components/__tests__/feedback-button.test.tsx +4 -4
  276. package/src/components/editor/chrome/components/feedback-button.tsx +3 -3
  277. package/src/components/editor/chrome/panels/__tests__/packages-panel.test.tsx +8 -8
  278. package/src/components/editor/chrome/panels/__tests__/{sandbox-details.test.tsx → runtime-details.test.tsx} +94 -22
  279. package/src/components/editor/chrome/panels/__tests__/sandbox-recovery.test.tsx +4 -4
  280. package/src/components/editor/chrome/panels/packages-panel.tsx +8 -29
  281. package/src/components/editor/chrome/panels/{sandbox-details-state.ts → runtime-details-state.ts} +1 -1
  282. package/src/components/editor/chrome/panels/{sandbox-panel.tsx → runtime-panel.tsx} +38 -66
  283. package/src/components/editor/chrome/panels/runtime-status-toggle.tsx +56 -0
  284. package/src/components/editor/chrome/panels/sandbox-controller.tsx +2 -2
  285. package/src/components/editor/chrome/wrapper/app-chrome.tsx +3 -3
  286. package/src/components/editor/chrome/wrapper/footer-items/machine-stats.tsx +2 -2
  287. package/src/components/editor/controls/Controls.tsx +3 -3
  288. package/src/components/editor/controls/__tests__/notebook-menu-dropdown.test.tsx +2 -2
  289. package/src/components/editor/header/__tests__/status.test.tsx +4 -4
  290. package/src/components/editor/header/app-header.tsx +2 -2
  291. package/src/components/editor/header/status.tsx +3 -3
  292. package/src/components/editor/navigation/__tests__/navigation.test.ts +8 -8
  293. package/src/components/editor/output/console/ConsoleOutput.tsx +5 -3
  294. package/src/components/editor/output/console/__tests__/ConsoleOutput.test.tsx +18 -0
  295. package/src/components/ui/__tests__/slider.test.tsx +37 -0
  296. package/src/components/ui/progress-stages.tsx +114 -0
  297. package/src/components/ui/slider.tsx +2 -0
  298. package/src/core/ai/__tests__/state.test.ts +120 -0
  299. package/src/core/ai/state.ts +36 -10
  300. package/src/core/cells/__tests__/document-roundtrip.test.ts +16 -0
  301. package/src/core/codemirror/copilot/__tests__/completion-integration.test.ts +447 -0
  302. package/src/core/codemirror/copilot/__tests__/inline-completion.test.ts +395 -0
  303. package/src/core/codemirror/copilot/__tests__/language-server.test.ts +511 -2
  304. package/src/core/codemirror/copilot/__tests__/rpc-cancellation.test.ts +201 -0
  305. package/src/core/codemirror/copilot/extension.ts +22 -11
  306. package/src/core/codemirror/copilot/language-server.ts +109 -60
  307. package/src/core/codemirror/language/embedded/__tests__/embedded-python.test.ts +138 -26
  308. package/src/core/codemirror/language/embedded/embedded-python.ts +47 -13
  309. package/src/core/codemirror/language/embedded/latex.ts +20 -13
  310. package/src/core/codemirror/lsp/__tests__/notebook-lsp.test.ts +106 -5
  311. package/src/core/codemirror/lsp/notebook-lsp.ts +16 -2
  312. package/src/core/codemirror/readonly/__tests__/extension.test.ts +6 -6
  313. package/src/core/codemirror/readonly/extension.ts +2 -2
  314. package/src/core/config/pair.ts +0 -1
  315. package/src/core/datasets/__tests__/data-source-discovery.test.ts +2 -2
  316. package/src/core/edit-app.tsx +5 -1
  317. package/src/core/export/hooks.ts +2 -2
  318. package/src/core/islands/bootstrap.ts +1 -0
  319. package/src/core/kernel/session.ts +9 -0
  320. package/src/core/network/__tests__/api.test.ts +114 -1
  321. package/src/core/network/__tests__/connection.test.ts +3 -3
  322. package/src/core/network/api.ts +3 -2
  323. package/src/core/network/connection-notice.ts +5 -5
  324. package/src/core/network/connection.ts +9 -9
  325. package/src/core/network/requests-lazy.ts +2 -2
  326. package/src/core/packages/__tests__/useSandboxController.test.tsx +2 -2
  327. package/src/core/packages/useSandboxController.ts +6 -6
  328. package/src/core/runtime/__tests__/adapter.test.ts +6 -6
  329. package/src/core/runtime/adapter.ts +7 -7
  330. package/src/core/runtime/config.ts +2 -2
  331. package/src/core/saving/filename.ts +2 -2
  332. package/src/core/saving/save-component.tsx +5 -5
  333. package/src/core/saving/useAutoSave.ts +2 -2
  334. package/src/core/wasm/__tests__/bootstrap.test.ts +33 -1
  335. package/src/core/wasm/worker/bootstrap.ts +22 -3
  336. package/src/core/websocket/__tests__/useMarimoKernelConnection.hook.test.tsx +30 -25
  337. package/src/core/websocket/__tests__/useMarimoKernelConnection.test.ts +5 -5
  338. package/src/core/websocket/connection-utils.ts +21 -21
  339. package/src/core/websocket/types.ts +8 -9
  340. package/src/core/websocket/useMarimoKernelConnection.tsx +33 -22
  341. package/src/css/katex-css.test.ts +166 -0
  342. package/src/css/katex.min.css +175 -169
  343. package/src/hooks/__tests__/useEventListener.test.tsx +45 -1
  344. package/src/hooks/useEventListener.ts +6 -1
  345. package/src/mount.tsx +2 -2
  346. package/src/plugins/core/__test__/registerReactComponent.test.ts +55 -0
  347. package/src/plugins/core/registerReactComponent.tsx +3 -1
  348. package/src/plugins/impl/CheckboxPlugin.tsx +1 -1
  349. package/src/plugins/impl/DataTablePlugin.tsx +23 -2
  350. package/src/plugins/impl/DatePickerPlugin.tsx +5 -3
  351. package/src/plugins/impl/DateRangePlugin.tsx +5 -3
  352. package/src/plugins/impl/DateTimePickerPlugin.tsx +5 -3
  353. package/src/plugins/impl/DropdownPlugin.tsx +1 -1
  354. package/src/plugins/impl/MultiselectPlugin.tsx +1 -1
  355. package/src/plugins/impl/NumberPlugin.tsx +1 -1
  356. package/src/plugins/impl/RadioPlugin.tsx +5 -1
  357. package/src/plugins/impl/RangeSliderPlugin.tsx +1 -1
  358. package/src/plugins/impl/SearchableSelect.tsx +1 -1
  359. package/src/plugins/impl/SliderPlugin.tsx +5 -1
  360. package/src/plugins/impl/SwitchPlugin.tsx +6 -1
  361. package/src/plugins/impl/TextAreaPlugin.tsx +23 -4
  362. package/src/plugins/impl/TextInputPlugin.tsx +10 -2
  363. package/src/plugins/impl/__test__/slider-labels.test.tsx +136 -0
  364. package/src/plugins/impl/__test__/text-labels.test.tsx +141 -0
  365. package/src/plugins/impl/__tests__/DataTablePlugin.test.tsx +65 -8
  366. package/src/plugins/impl/__tests__/widget-labels.test.tsx +122 -0
  367. package/src/plugins/impl/chat/ChatPlugin.tsx +1 -1
  368. package/src/plugins/impl/common/labeled.tsx +9 -3
  369. package/src/plugins/impl/data-frames/DataFramePlugin.tsx +15 -3
  370. package/src/plugins/impl/data-frames/forms/__tests__/__snapshots__/form.test.tsx.snap +0 -22
  371. package/src/stories/cell.stories.tsx +2 -2
  372. package/src/stories/dataframe.stories.tsx +7 -0
  373. package/src/stories/layout/vertical/one-column.stories.tsx +5 -5
  374. package/src/stories/progress-stages.stories.tsx +62 -0
  375. package/src/stories/runtime-existing.stories.tsx +44 -0
  376. package/src/stories/runtime-maintenance.stories.tsx +40 -0
  377. package/src/stories/runtime-pixi.stories.tsx +28 -0
  378. package/src/stories/{sandbox.stories.tsx → runtime-story.tsx} +191 -152
  379. package/src/stories/runtime-uv.stories.tsx +56 -0
  380. package/dist/assets/__vite-browser-external-C9iR87Zl.js +0 -1
  381. package/dist/assets/worker-D7hWi02M.js +0 -109
  382. package/dist/classDiagram-ZZMXUADV-BwYhrSEX.js +0 -30
  383. package/dist/classDiagram-v2-VYDZK3BY-HecM04TM.js +0 -30
  384. package/dist/dropdown-menu-BaqM0t4N.js +0 -4502
  385. package/dist/error-banner-DzAmP0AQ.js +0 -391
  386. package/dist/flowDiagram-HODETNUW-DgcjSdPV.js +0 -16
  387. package/dist/label-MNhNNoN6.js +0 -278
  388. package/dist/mermaid-HWGCJPDP-DYCzSILp.js +0 -2
  389. package/dist/purify.es-DgKyQviY.js +0 -805
  390. package/dist/select-BcObMjGz.js +0 -970
  391. package/dist/stateDiagram-v2-MP3YSRHH-Dk5QgdXF.js +0 -30
  392. package/dist/swimlanesDiagram-VR7AAH4N-CbztusY8.js +0 -30
  393. package/src/components/editor/chrome/panels/sandbox-toggle.tsx +0 -52
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { renderHook } from "@testing-library/react";
4
4
  import { useRef } from "react";
5
- import { beforeEach, describe, expect, it, vi } from "vitest";
5
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
6
6
  import {
7
7
  type HTMLElementNotDerivedFromRef,
8
8
  isRefObject,
@@ -28,6 +28,50 @@ describe("isRefObject", () => {
28
28
  });
29
29
  });
30
30
 
31
+ describe.each([1, 2])("with %i anchors named current", (count) => {
32
+ let iframe: HTMLIFrameElement;
33
+ let browserWindow: Window;
34
+
35
+ beforeEach(() => {
36
+ // An iframe preserves named properties hidden by Vitest's global window.
37
+ iframe = document.createElement("iframe");
38
+ document.body.append(iframe);
39
+ if (!iframe.contentWindow) {
40
+ throw new Error("Expected an iframe window");
41
+ }
42
+ browserWindow = iframe.contentWindow;
43
+ const anchors = Array.from({ length: count }, () => {
44
+ const anchor = browserWindow.document.createElement("a");
45
+ anchor.id = "current";
46
+ return anchor;
47
+ });
48
+ browserWindow.document.body.append(...anchors);
49
+ });
50
+
51
+ afterEach(() => {
52
+ iframe.remove();
53
+ });
54
+
55
+ it("does not mistake window for a React ref", () => {
56
+ expect("current" in browserWindow).toBe(true);
57
+ expect(isRefObject(browserWindow)).toBe(false);
58
+ });
59
+
60
+ it("attaches and removes the listener on window", () => {
61
+ const listener = vi.fn();
62
+ const { unmount } = renderHook(() =>
63
+ useEventListener(browserWindow, "resize", listener),
64
+ );
65
+
66
+ browserWindow.dispatchEvent(new Event("resize"));
67
+ expect(listener).toHaveBeenCalledTimes(1);
68
+
69
+ unmount();
70
+ browserWindow.dispatchEvent(new Event("resize"));
71
+ expect(listener).toHaveBeenCalledTimes(1);
72
+ });
73
+ });
74
+
31
75
  describe("useEventListener", () => {
32
76
  beforeEach(() => {
33
77
  vi.clearAllMocks();
@@ -13,7 +13,12 @@ export type HTMLElementNotDerivedFromRef<T = HTMLElement> = T & {
13
13
  };
14
14
 
15
15
  export function isRefObject<T>(target: unknown): target is RefObject<T | null> {
16
- return target !== null && typeof target === "object" && "current" in target;
16
+ return (
17
+ target !== null &&
18
+ typeof target === "object" &&
19
+ !("addEventListener" in target) &&
20
+ "current" in target
21
+ );
17
22
  }
18
23
 
19
24
  export function useEventListener<K extends keyof DocumentEventMap>(
package/src/mount.tsx CHANGED
@@ -62,7 +62,7 @@ import {
62
62
  import { maybeRegisterVSCodeBindings } from "./core/vscode/vscode-bindings";
63
63
  import type { FileStore } from "./core/wasm/store";
64
64
  import { notebookFileStore } from "./core/wasm/store";
65
- import { WebSocketState } from "./core/websocket/types";
65
+ import { ConnectionState } from "./core/websocket/types";
66
66
  import {
67
67
  handleWidgetMessage,
68
68
  WIDGET_REGISTRY,
@@ -359,7 +359,7 @@ function initStore(options: unknown) {
359
359
  });
360
360
  // If the remote runtime is not lazy, start it in CONNECTING
361
361
  if (!firstRuntimeConfig.lazy && !isStaticNotebook()) {
362
- store.set(connectionAtom, { state: WebSocketState.CONNECTING });
362
+ store.set(connectionAtom, { state: ConnectionState.CONNECTING });
363
363
  }
364
364
  } else {
365
365
  store.set(runtimeConfigAtom, {
@@ -32,6 +32,61 @@ function makePlugin(tagName: string) {
32
32
  };
33
33
  }
34
34
 
35
+ describe("stylesheet copying", () => {
36
+ afterEach(() => {
37
+ delete (Document.prototype as Partial<Document>).adoptedStyleSheets;
38
+ vi.restoreAllMocks();
39
+ vi.unstubAllGlobals();
40
+ });
41
+
42
+ test.each([
43
+ {
44
+ name: "linked stylesheet",
45
+ href: "http://localhost/assets/index.css",
46
+ title: "marimo-linked-test",
47
+ expectedBaseURL: "http://localhost/assets/index.css",
48
+ },
49
+ {
50
+ name: "inline stylesheet",
51
+ href: null,
52
+ title: "marimo-inline-test",
53
+ expectedBaseURL: document.baseURI,
54
+ },
55
+ ])(
56
+ "preserves the base URL of a $name",
57
+ ({ href, title, expectedBaseURL }) => {
58
+ const constructedStyleSheet = {
59
+ replaceSync: vi.fn(),
60
+ } as unknown as CSSStyleSheet;
61
+ const constructor = vi.fn(function () {
62
+ return constructedStyleSheet;
63
+ });
64
+ constructor.prototype.replace = vi.fn();
65
+ vi.stubGlobal("CSSStyleSheet", constructor);
66
+ Object.defineProperty(Document.prototype, "adoptedStyleSheets", {
67
+ configurable: true,
68
+ value: [],
69
+ });
70
+
71
+ const source = {
72
+ cssRules: [],
73
+ href,
74
+ ownerNode: null,
75
+ title,
76
+ } as unknown as CSSStyleSheet;
77
+ vi.spyOn(document, "styleSheets", "get").mockReturnValue([
78
+ source,
79
+ ] as unknown as StyleSheetList);
80
+
81
+ const tag = uniqueTag("stylesheet-base-url");
82
+ registerReactComponent(makePlugin(tag));
83
+ document.createElement(tag);
84
+
85
+ expect(constructor).toHaveBeenCalledWith({ baseURL: expectedBaseURL });
86
+ },
87
+ );
88
+ });
89
+
35
90
  describe("isCustomMarimoElement", () => {
36
91
  test("returns false for null", () => {
37
92
  expect(isCustomMarimoElement(null)).toBe(false);
@@ -519,7 +519,9 @@ export function registerReactComponent<T>(plugin: IPlugin<T, unknown>): void {
519
519
  if (!styleSheetCache.has(sheetUniqueKey)) {
520
520
  // We need to create a new stylesheet because we can't use the same
521
521
  // stylesheet otherwise the browser will throw an error.
522
- const newSheet = new CSSStyleSheet();
522
+ const newSheet = new CSSStyleSheet({
523
+ baseURL: sheet.href ?? document.baseURI,
524
+ });
523
525
  try {
524
526
  newSheet.replaceSync(
525
527
  Array.from(sheet.cssRules)
@@ -46,7 +46,7 @@ const CheckboxComponent = ({
46
46
  const id = useId();
47
47
 
48
48
  return (
49
- <Labeled label={data.label} align="right" id={id}>
49
+ <Labeled label={data.label} align="right" controlId={id}>
50
50
  <Checkbox
51
51
  data-testid="marimo-plugin-checkbox"
52
52
  checked={value}
@@ -36,7 +36,12 @@ import { usePanelOwnership } from "@/components/data-table/hooks/use-panel-owner
36
36
  import { LoadingTable } from "@/components/data-table/loading-table";
37
37
  import {
38
38
  type DownloadAsArgs,
39
+ type DownloadAsFunction,
39
40
  DownloadAsSchema,
41
+ type DownloadGeoJSON,
42
+ DownloadGeoJSONSchema,
43
+ type GetExportMetadata,
44
+ GetExportMetadataSchema,
40
45
  } from "@/components/data-table/schemas";
41
46
  import { TableExplorerPanel } from "@/components/data-table/table-explorer-panel/table-explorer-panel";
42
47
  import {
@@ -209,7 +214,9 @@ interface Data<T> {
209
214
 
210
215
  // oxlint-disable-next-line typescript/consistent-type-definitions
211
216
  type DataTableFunctions = {
212
- download_as: DownloadAsArgs;
217
+ download_as: DownloadAsFunction;
218
+ download_geojson: DownloadGeoJSON;
219
+ get_export_metadata: GetExportMetadata;
213
220
  get_column_summaries: <T>(opts: {}) => Promise<ColumnSummaries<T>>;
214
221
  search: <T>(req: {
215
222
  sort?: {
@@ -302,6 +309,8 @@ export const DataTablePlugin = createPlugin<S>("marimo-table")
302
309
  )
303
310
  .withFunctions<DataTableFunctions>({
304
311
  download_as: DownloadAsSchema,
312
+ download_geojson: DownloadGeoJSONSchema,
313
+ get_export_metadata: GetExportMetadataSchema,
305
314
  get_column_summaries: rpc.input(z.looseObject({})).output(
306
315
  z.object({
307
316
  data: z.union([z.string(), z.array(z.looseObject({}))]).nullable(),
@@ -839,7 +848,9 @@ const DataTableComponent = ({
839
848
  fieldTypes,
840
849
  paginationState,
841
850
  setPaginationState,
842
- download_as: downloadAs,
851
+ download_as,
852
+ download_geojson,
853
+ get_export_metadata: getExportMetadata,
843
854
  columnSummaries,
844
855
  className,
845
856
  setValue,
@@ -880,6 +891,15 @@ const DataTableComponent = ({
880
891
  sizeBytesIsLoading?: boolean;
881
892
  }): JSX.Element => {
882
893
  const id = useId();
894
+ const downloadAs = useCallback<DownloadAsArgs>(
895
+ (request) => {
896
+ const { format, ...options } = request;
897
+ return format === "geojson"
898
+ ? download_geojson({ format, ...options })
899
+ : download_as({ format, ...options });
900
+ },
901
+ [download_as, download_geojson],
902
+ );
883
903
  const { locale } = useLocale();
884
904
  const [viewedRowIdx, setViewedRowIdx] = useState(0);
885
905
  const { isPanelOpen, isAnyPanelOpen, togglePanel, panelType, setPanelType } =
@@ -1168,6 +1188,7 @@ const DataTableComponent = ({
1168
1188
  hoverTemplate={hoverTemplate}
1169
1189
  cellHoverTexts={cellHoverTexts}
1170
1190
  downloadAs={showDownload ? downloadAs : undefined}
1191
+ getExportMetadata={showDownload ? getExportMetadata : undefined}
1171
1192
  showSearch={showSearch}
1172
1193
  searchQuery={searchQuery}
1173
1194
  onSearchQueryChange={setSearchQuery}
@@ -1,7 +1,7 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
3
  import { type CalendarDate, parseDate } from "@internationalized/date";
4
- import type { JSX } from "react";
4
+ import { type JSX, useId } from "react";
5
5
  import { z } from "zod";
6
6
  import { DatePicker } from "@/components/ui/date-picker";
7
7
  import type { IPlugin, IPluginProps, Setter } from "../types";
@@ -49,6 +49,7 @@ interface DatePickerProps extends Data {
49
49
  }
50
50
 
51
51
  const DatePickerComponent = (props: DatePickerProps): JSX.Element => {
52
+ const labelId = useId();
52
53
  const handleInput = (valueAsDate: CalendarDate | null) => {
53
54
  if (!valueAsDate) {
54
55
  return;
@@ -59,12 +60,13 @@ const DatePickerComponent = (props: DatePickerProps): JSX.Element => {
59
60
  };
60
61
 
61
62
  return (
62
- <Labeled label={props.label} fullWidth={props.fullWidth}>
63
+ <Labeled labelId={labelId} label={props.label} fullWidth={props.fullWidth}>
63
64
  <DatePicker
64
65
  granularity="day"
65
66
  value={parseDate(props.value)}
66
67
  onChange={handleInput}
67
- aria-label={props.label ?? "date picker"}
68
+ aria-labelledby={props.label ? labelId : undefined}
69
+ aria-label={props.label ? undefined : "date picker"}
68
70
  minValue={parseDate(props.start)}
69
71
  maxValue={parseDate(props.stop)}
70
72
  isDisabled={props.disabled}
@@ -1,7 +1,7 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
3
  import { type CalendarDate, parseDate } from "@internationalized/date";
4
- import type { JSX } from "react";
4
+ import { type JSX, useId } from "react";
5
5
  import { z } from "zod";
6
6
  import { DateRangePicker } from "@/components/ui/date-picker";
7
7
  import type { IPlugin, IPluginProps, Setter } from "../types";
@@ -48,6 +48,7 @@ interface DateRangePickerProps extends Data {
48
48
  }
49
49
 
50
50
  const DateRangePickerComponent = (props: DateRangePickerProps): JSX.Element => {
51
+ const labelId = useId();
51
52
  const handleInput = (
52
53
  valueAsDateRange: {
53
54
  start: CalendarDate;
@@ -64,7 +65,7 @@ const DateRangePickerComponent = (props: DateRangePickerProps): JSX.Element => {
64
65
  };
65
66
 
66
67
  return (
67
- <Labeled label={props.label} fullWidth={props.fullWidth}>
68
+ <Labeled labelId={labelId} label={props.label} fullWidth={props.fullWidth}>
68
69
  <DateRangePicker
69
70
  granularity="day"
70
71
  value={{
@@ -72,7 +73,8 @@ const DateRangePickerComponent = (props: DateRangePickerProps): JSX.Element => {
72
73
  end: parseDate(props.value[1]),
73
74
  }}
74
75
  onChange={handleInput}
75
- aria-label={props.label ?? "date range picker"}
76
+ aria-labelledby={props.label ? labelId : undefined}
77
+ aria-label={props.label ? undefined : "date range picker"}
76
78
  minValue={parseDate(props.start)}
77
79
  maxValue={parseDate(props.stop)}
78
80
  isDisabled={props.disabled}
@@ -1,7 +1,7 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
3
  import { type CalendarDateTime, parseDateTime } from "@internationalized/date";
4
- import type { JSX } from "react";
4
+ import { type JSX, useId } from "react";
5
5
  import { z } from "zod";
6
6
  import { DatePicker } from "@/components/ui/date-picker";
7
7
  import type { IPlugin, IPluginProps, Setter } from "../types";
@@ -50,6 +50,7 @@ interface DateTimePickerProps extends Data {
50
50
  }
51
51
 
52
52
  const DateTimePickerComponent = (props: DateTimePickerProps): JSX.Element => {
53
+ const labelId = useId();
53
54
  const handleInput = (valueAsDateTime: CalendarDateTime | null) => {
54
55
  if (!valueAsDateTime) {
55
56
  return;
@@ -63,12 +64,13 @@ const DateTimePickerComponent = (props: DateTimePickerProps): JSX.Element => {
63
64
  const parsedValue = props.value ? parseDateTime(props.value) : undefined;
64
65
 
65
66
  return (
66
- <Labeled label={props.label} fullWidth={props.fullWidth}>
67
+ <Labeled labelId={labelId} label={props.label} fullWidth={props.fullWidth}>
67
68
  <DatePicker
68
69
  granularity={props.precision}
69
70
  value={parsedValue}
70
71
  onChange={handleInput}
71
- aria-label={props.label ?? "date time picker"}
72
+ aria-labelledby={props.label ? labelId : undefined}
73
+ aria-label={props.label ? undefined : "date time picker"}
72
74
  minValue={parseDateTime(props.start)}
73
75
  maxValue={parseDateTime(props.stop)}
74
76
  isDisabled={props.disabled}
@@ -79,7 +79,7 @@ const Dropdown = (props: DropdownProps): JSX.Element => {
79
79
  const singleValue = value.length === 0 ? defaultValue : value[0];
80
80
 
81
81
  return (
82
- <Labeled label={label} id={id} fullWidth={fullWidth}>
82
+ <Labeled label={label} controlId={id} fullWidth={fullWidth}>
83
83
  <NativeSelect
84
84
  data-testid="marimo-plugin-dropdown"
85
85
  onChange={(e) => {
@@ -68,7 +68,7 @@ export const Multiselect = ({
68
68
  );
69
69
 
70
70
  return (
71
- <Labeled label={label} id={id} fullWidth={fullWidth}>
71
+ <Labeled label={label} controlId={id} fullWidth={fullWidth}>
72
72
  <SelectList<string>
73
73
  id={id}
74
74
  options={items}
@@ -70,7 +70,7 @@ const NumberComponent = (props: NumberComponentProps): JSX.Element => {
70
70
  };
71
71
 
72
72
  return (
73
- <Labeled label={props.label} id={id} fullWidth={props.fullWidth}>
73
+ <Labeled label={props.label} controlId={id} fullWidth={props.fullWidth}>
74
74
  <NumberField
75
75
  data-testid="marimo-plugin-number-input"
76
76
  className={cn("min-w-[3em]", props.fullWidth && "w-full")}
@@ -51,7 +51,11 @@ export const Radio = (props: RadioProps): JSX.Element => {
51
51
  const id = useId();
52
52
 
53
53
  return (
54
- <Labeled label={props.label} id={id} align={props.inline ? "left" : "top"}>
54
+ <Labeled
55
+ label={props.label}
56
+ controlId={id}
57
+ align={props.inline ? "left" : "top"}
58
+ >
55
59
  <RadioGroup
56
60
  data-testid="marimo-plugin-radio"
57
61
  value={props.value ?? ""}
@@ -98,7 +98,7 @@ const RangeSliderComponent = ({
98
98
  const sliderElement = (
99
99
  <Labeled
100
100
  label={label}
101
- id={id}
101
+ controlId={id}
102
102
  align={orientation === "horizontal" ? "left" : "top"}
103
103
  className={cn(fullWidth && "my-1 w-full")}
104
104
  fullWidth={fullWidth}
@@ -33,7 +33,7 @@ export const SearchableSelect = (props: SearchableSelectProps): JSX.Element => {
33
33
  );
34
34
 
35
35
  return (
36
- <Labeled label={label} id={id} fullWidth={fullWidth}>
36
+ <Labeled label={label} controlId={id} fullWidth={fullWidth}>
37
37
  <SelectList<string>
38
38
  id={id}
39
39
  options={items}
@@ -152,6 +152,7 @@ const SliderComponent = ({
152
152
  disabled,
153
153
  }: SliderProps): JSX.Element => {
154
154
  const id = useId();
155
+ const labelId = useId();
155
156
  const { locale } = useLocale();
156
157
 
157
158
  // Hold internal value
@@ -224,7 +225,8 @@ const SliderComponent = ({
224
225
  const sliderElement = (
225
226
  <Labeled
226
227
  label={label}
227
- id={id}
228
+ controlId={id}
229
+ labelId={labelId}
228
230
  align={orientation === "horizontal" ? "left" : "top"}
229
231
  fullWidth={fullWidth}
230
232
  className={cn(fullWidth && "my-1 w-full")}
@@ -238,6 +240,8 @@ const SliderComponent = ({
238
240
  >
239
241
  <Slider
240
242
  id={id}
243
+ aria-labelledby={label ? labelId : undefined}
244
+ aria-label={label ? undefined : "Slider"}
241
245
  className={cn(
242
246
  "relative flex items-center select-none",
243
247
  !fullWidth && "data-[orientation=horizontal]:w-36 ",
@@ -34,7 +34,12 @@ const SwitchComponent = ({
34
34
  const id = useId();
35
35
 
36
36
  return (
37
- <Labeled label={data.label} align="right" id={id} labelClassName="ml-1">
37
+ <Labeled
38
+ label={data.label}
39
+ align="right"
40
+ controlId={id}
41
+ labelClassName="ml-1"
42
+ >
38
43
  <Switch
39
44
  data-testid="marimo-plugin-switch"
40
45
  checked={value}
@@ -1,6 +1,6 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
- import type { JSX } from "react";
3
+ import { type JSX, useId } from "react";
4
4
  import { z } from "zod";
5
5
  import { cn } from "@/utils/cn";
6
6
  import {
@@ -56,6 +56,7 @@ interface TextAreaComponentProps extends Data {
56
56
  }
57
57
 
58
58
  const TextAreaComponent = (props: TextAreaComponentProps) => {
59
+ const textareaId = useId();
59
60
  const bottomAdornment = props.maxLength ? (
60
61
  <span className="text-muted-foreground text-xs font-medium">
61
62
  {props.value.length}/{props.maxLength}
@@ -64,8 +65,14 @@ const TextAreaComponent = (props: TextAreaComponentProps) => {
64
65
 
65
66
  if (props.debounce === true) {
66
67
  return (
67
- <Labeled label={props.label} align="top" fullWidth={props.fullWidth}>
68
+ <Labeled
69
+ controlId={textareaId}
70
+ label={props.label}
71
+ align="top"
72
+ fullWidth={props.fullWidth}
73
+ >
68
74
  <OnBlurredTextarea
75
+ id={textareaId}
69
76
  className={cn("font-code", {
70
77
  "w-full": props.fullWidth,
71
78
  })}
@@ -86,8 +93,14 @@ const TextAreaComponent = (props: TextAreaComponentProps) => {
86
93
 
87
94
  if (typeof props.debounce === "number") {
88
95
  return (
89
- <Labeled label={props.label} align="top" fullWidth={props.fullWidth}>
96
+ <Labeled
97
+ controlId={textareaId}
98
+ label={props.label}
99
+ align="top"
100
+ fullWidth={props.fullWidth}
101
+ >
90
102
  <DebouncedTextarea
103
+ id={textareaId}
91
104
  className={cn("font-code", {
92
105
  "w-full": props.fullWidth,
93
106
  })}
@@ -108,8 +121,14 @@ const TextAreaComponent = (props: TextAreaComponentProps) => {
108
121
  }
109
122
 
110
123
  return (
111
- <Labeled label={props.label} align="top" fullWidth={props.fullWidth}>
124
+ <Labeled
125
+ controlId={textareaId}
126
+ label={props.label}
127
+ align="top"
128
+ fullWidth={props.fullWidth}
129
+ >
112
130
  <Textarea
131
+ id={textareaId}
113
132
  className={cn("font-code", {
114
133
  "w-full": props.fullWidth,
115
134
  })}
@@ -1,7 +1,7 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
3
  import { AtSignIcon, GlobeIcon, LockIcon } from "lucide-react";
4
- import { type JSX, useRef, useState } from "react";
4
+ import { type JSX, useId, useRef, useState } from "react";
5
5
  import { z } from "zod";
6
6
  import {
7
7
  DebouncedInput,
@@ -73,6 +73,7 @@ interface TextComponentProps extends Data {
73
73
  }
74
74
 
75
75
  const TextComponent = (props: TextComponentProps) => {
76
+ const inputId = useId();
76
77
  // Before first real keystroke: show masked placeholder, suppress setValue.
77
78
  // After first keystroke: normal password field.
78
79
  const initiallyMasked =
@@ -125,6 +126,7 @@ const TextComponent = (props: TextComponentProps) => {
125
126
  if (props.debounce === true) {
126
127
  input = (
127
128
  <OnBlurredInput
129
+ id={inputId}
128
130
  data-testid="marimo-plugin-text-input"
129
131
  type={props.kind}
130
132
  icon={icon[props.kind]}
@@ -143,6 +145,7 @@ const TextComponent = (props: TextComponentProps) => {
143
145
  } else if (typeof props.debounce === "number") {
144
146
  input = (
145
147
  <DebouncedInput
148
+ id={inputId}
146
149
  data-testid="marimo-plugin-text-input"
147
150
  type={props.kind}
148
151
  icon={icon[props.kind]}
@@ -163,6 +166,7 @@ const TextComponent = (props: TextComponentProps) => {
163
166
  } else {
164
167
  input = (
165
168
  <Input
169
+ id={inputId}
166
170
  data-testid="marimo-plugin-text-input"
167
171
  type={props.kind}
168
172
  icon={icon[props.kind]}
@@ -182,7 +186,11 @@ const TextComponent = (props: TextComponentProps) => {
182
186
  }
183
187
 
184
188
  return (
185
- <Labeled label={props.label} fullWidth={props.fullWidth}>
189
+ <Labeled
190
+ controlId={inputId}
191
+ label={props.label}
192
+ fullWidth={props.fullWidth}
193
+ >
186
194
  {input}
187
195
  </Labeled>
188
196
  );