@marimo-team/islands 0.21.2-dev64 → 0.21.2-dev70

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 (423) hide show
  1. package/dist/{ConnectedDataExplorerComponent-DkSulho5.js → ConnectedDataExplorerComponent-CLLlotD4.js} +1 -1
  2. package/dist/{any-language-editor-B_YcSEs7.js → any-language-editor-BBegsg-m.js} +10 -10
  3. package/dist/apl-e1B5LPEL.js +4 -0
  4. package/dist/{arc-DfkSnvZm.js → arc-CHF8PiiF.js} +2 -2
  5. package/dist/{architecture-7HQA4BMR-BVuGBj38.js → architecture-7HQA4BMR-KeUc82D1.js} +1 -1
  6. package/dist/{architectureDiagram-VXUJARFQ-CTttozWW.js → architectureDiagram-VXUJARFQ-CIl7H_7A.js} +16 -16
  7. package/dist/asciiarmor-B-gwgesP.js +4 -0
  8. package/dist/asn1-DF2ckRB4.js +4 -0
  9. package/dist/{blockDiagram-VD42YOAC-DPCYZecD.js → blockDiagram-VD42YOAC-Bxg4bo7H.js} +11 -11
  10. package/dist/brainfuck-4G-7_gq_.js +4 -0
  11. package/dist/{c4Diagram-YG6GDRKO-BAE3Buci.js → c4Diagram-YG6GDRKO-k4TEDUb8.js} +5 -5
  12. package/dist/{channel-DApRnm6b.js → channel-CCR8wXOx.js} +1 -1
  13. package/dist/{chat-ui-DIuq4Mn6.js → chat-ui-D4ay_SFE.js} +2 -3
  14. package/dist/{chunk-4BX2VUAB-BtdcCA7H.js → chunk-4BX2VUAB-BwfrWBqN.js} +1 -1
  15. package/dist/{chunk-55IACEB6-hJraQgx2.js → chunk-55IACEB6-D8THf2mi.js} +1 -1
  16. package/dist/{chunk-5FQGJX7Z-DwBOYBMa.js → chunk-5FQGJX7Z-Cz2QbNIw.js} +1502 -2844
  17. package/dist/{chunk-ABZYJK2D-DFnIGLNd.js → chunk-ABZYJK2D-NPoevJcI.js} +2 -2
  18. package/dist/{chunk-ATLVNIR6-4HgRPLgX.js → chunk-ATLVNIR6-DAhC1FCG.js} +2 -2
  19. package/dist/{chunk-B4BG7PRW-Bp8FDZTb.js → chunk-B4BG7PRW-BDmytgmO.js} +7 -7
  20. package/dist/{chunk-CVBHYZKI-B_c5YBcW.js → chunk-CVBHYZKI-B6xhgaBd.js} +1 -1
  21. package/dist/{chunk-DI55MBZ5-CtD9lSpd.js → chunk-DI55MBZ5-C6iNEV8U.js} +6 -6
  22. package/dist/{chunk-EXTU4WIE-QrN2mPtn.js → chunk-EXTU4WIE-BtA6WdD4.js} +2 -2
  23. package/dist/{chunk-FMBD7UC4-B34QcQBj.js → chunk-FMBD7UC4-CHdus51S.js} +1 -1
  24. package/dist/{chunk-HN2XXSSU-E3n-Ys7Z.js → chunk-HN2XXSSU-2Vfbq-kU.js} +1 -1
  25. package/dist/{chunk-JA3XYJ7Z-B9-EWihm.js → chunk-JA3XYJ7Z-BeXqAsc9.js} +3 -3
  26. package/dist/{chunk-JZLCHNYA-CIx__-bR.js → chunk-JZLCHNYA-ibE7xTEx.js} +6 -6
  27. package/dist/{chunk-MI3HLSF2-CUYEasXO.js → chunk-MI3HLSF2-Do0-KRc0.js} +1 -1
  28. package/dist/{chunk-N4CR4FBY-Cl9KH_W1.js → chunk-N4CR4FBY-CHAcubAf.js} +7 -7
  29. package/dist/{chunk-QN33PNHL-DV6ID85v.js → chunk-QN33PNHL-CDWJY_kT.js} +2 -2
  30. package/dist/{chunk-QXUST7PY-CaiIvoL5.js → chunk-QXUST7PY-CV37xRZd.js} +10 -10
  31. package/dist/{chunk-QZHKN3VN-CBBP4d0M.js → chunk-QZHKN3VN-B_Mdb8GC.js} +1 -1
  32. package/dist/{chunk-S3R3BYOJ-CQOhwRBS.js → chunk-S3R3BYOJ-CGlk8NH-.js} +4 -4
  33. package/dist/{chunk-TZMSLE5B-BkqhN89K.js → chunk-TZMSLE5B-DfY6C3FB.js} +3 -3
  34. package/dist/classDiagram-2ON5EDUG-DbWOiPgs.js +30 -0
  35. package/dist/classDiagram-v2-WZHVMYZB-COnXBrRA.js +30 -0
  36. package/dist/{clike-jRoJKo3I.js → clike-7lgyEYRk.js} +1 -1
  37. package/dist/clojure-CUybM11R.js +4 -0
  38. package/dist/cmake-BPjGcuDL.js +4 -0
  39. package/dist/cobol-BETk_nb6.js +4 -0
  40. package/dist/{code-block-37QAKDTI-Dae3xvB0.js → code-block-37QAKDTI-DW3JC11U.js} +1 -1
  41. package/dist/coffeescript-CManZxXL.js +4 -0
  42. package/dist/commonlisp-DWkn7GW8.js +4 -0
  43. package/dist/{cose-bilkent-S5V4N54A-DvPVjKwP.js → cose-bilkent-S5V4N54A-DXHZkJKX.js} +2 -2
  44. package/dist/crystal-CCbg5EUH.js +4 -0
  45. package/dist/css-By8eo-XS.js +4 -0
  46. package/dist/cypher-DwfHg3nP.js +4 -0
  47. package/dist/d-Brs1wNbw.js +4 -0
  48. package/dist/{dagre-6UL2VRFP-ABg-WzQ3.js → dagre-6UL2VRFP-B8UW0fXE.js} +10 -10
  49. package/dist/{data-grid-overlay-editor-eVOR1Bqn.js → data-grid-overlay-editor-CpL5Zajy.js} +2 -2
  50. package/dist/{diagram-PSM6KHXK-D6zP_W1d.js → diagram-PSM6KHXK-DGD-j1bM.js} +18 -18
  51. package/dist/{diagram-QEK2KX5R-CuHhFHzr.js → diagram-QEK2KX5R-DgsT6ZW4.js} +14 -14
  52. package/dist/{diagram-S2PKOQOG-B2AqkaRk.js → diagram-S2PKOQOG-CDh5Ij8z.js} +14 -14
  53. package/dist/diff-DJIRmJ1g.js +4 -0
  54. package/dist/dist-BHGf2Zey.js +5 -0
  55. package/dist/dist-BImOGJZM.js +5 -0
  56. package/dist/dist-BbJfmCHJ.js +5 -0
  57. package/dist/{dist-Cxn9man7.js → dist-C0v-nFs_.js} +1 -1
  58. package/dist/{dist-CZ4qwYvJ.js → dist-C9TDg2aq.js} +1 -1
  59. package/dist/{dist-BwZY8Lt9.js → dist-CKVkWFcB.js} +1 -1
  60. package/dist/dist-CN4RKgNR.js +5 -0
  61. package/dist/{dist-CXayp1fR.js → dist-CVOkf_3P.js} +1 -1
  62. package/dist/dist-CwEBZkrQ.js +550 -0
  63. package/dist/dist-D6YTv0Kj.js +5 -0
  64. package/dist/{dist-DUTgSV0a.js → dist-D9vawryf.js} +1 -1
  65. package/dist/{dist-DcoiQ51H.js → dist-DasJgTvL.js} +1 -1
  66. package/dist/{dist-Don9K0di.js → dist-Ui51qXMz.js} +1 -1
  67. package/dist/dist-d2msfN-B.js +5 -0
  68. package/dist/{dist-DD2s3ocF.js → dist-uR-o9IVx.js} +1 -1
  69. package/dist/{dockerfile-Bhphd7by.js → dockerfile-DG6A2DdH.js} +1 -1
  70. package/dist/dtd-Dyiazv4N.js +4 -0
  71. package/dist/dylan-D8Fcw7NA.js +4 -0
  72. package/dist/ecl-CjKp8Vii.js +4 -0
  73. package/dist/eiffel-K9ViOX5r.js +4 -0
  74. package/dist/elm-B5NVtRco.js +4 -0
  75. package/dist/{erDiagram-Q2GNP2WA-DEGS1PP7.js → erDiagram-Q2GNP2WA-CGK0SUdu.js} +14 -14
  76. package/dist/erlang-BnLzgk7R.js +4 -0
  77. package/dist/{esm-dotk-2cB.js → esm-CCD9xN05.js} +96 -96
  78. package/dist/{factor-DNC3EI9I.js → factor-Bq2mGIHt.js} +1 -1
  79. package/dist/factor-C7f9Jz5R.js +4 -0
  80. package/dist/{flowDiagram-NV44I4VS-_NtC_MIa.js → flowDiagram-NV44I4VS-PjhviPI_.js} +16 -16
  81. package/dist/forth-rGM8jLao.js +4 -0
  82. package/dist/fortran-B3acSe0i.js +4 -0
  83. package/dist/{ganttDiagram-JELNMOA3-0iqJp9II.js → ganttDiagram-JELNMOA3-CUVtQqgT.js} +7 -7
  84. package/dist/gas-Bb1Vmv_N.js +4 -0
  85. package/dist/gherkin-C9Lyidgd.js +4 -0
  86. package/dist/{gitGraph-G5XIXVHT-D5dIC-Yj.js → gitGraph-G5XIXVHT-B6b-Z3mr.js} +1 -1
  87. package/dist/{gitGraphDiagram-V2S2FVAM-DmWsIkI5.js → gitGraphDiagram-V2S2FVAM-CNdrlK1I.js} +14 -14
  88. package/dist/{glide-data-editor-BkO3-23t.js → glide-data-editor-DQEuWuu_.js} +4 -4
  89. package/dist/groovy-DQk6XcGH.js +4 -0
  90. package/dist/haskell-mV0Vw9gv.js +4 -0
  91. package/dist/haxe-DqxN89zH.js +5 -0
  92. package/dist/idl-ya8W561J.js +4 -0
  93. package/dist/{info-VBDWY6EO-DTO3vFfS.js → info-VBDWY6EO-DfFl0Z8H.js} +1 -1
  94. package/dist/{infoDiagram-HS3SLOUP-UrOFax1c.js → infoDiagram-HS3SLOUP-DGimKb9k.js} +12 -12
  95. package/dist/javascript-CgqgptVu.js +4 -0
  96. package/dist/{journeyDiagram-XKPGCS4Q-m64vZmxT.js → journeyDiagram-XKPGCS4Q-CyoESVVb.js} +6 -6
  97. package/dist/julia-CFQ-HusI.js +4 -0
  98. package/dist/{kanban-definition-3W4ZIXB7-ZLe0Kp41.js → kanban-definition-3W4ZIXB7-Doc2YV80.js} +11 -11
  99. package/dist/{katex-DAGMFHph.js → katex-qPqrBHZ8.js} +1 -1
  100. package/dist/{line-C5s_12ee.js → line-BWRi3U3S.js} +3 -3
  101. package/dist/{linear-Cii2AMNm.js → linear-DZ8_CGCd.js} +2 -2
  102. package/dist/livescript-D__3TmDo.js +4 -0
  103. package/dist/lua-Bytcgj_W.js +4 -0
  104. package/dist/main.js +34 -28
  105. package/dist/mathematica-DJhvVKvl.js +4 -0
  106. package/dist/mbox-IGHPCjfR.js +4 -0
  107. package/dist/{mermaid-4DMBBIKO-0oQV6SKJ.js → mermaid-4DMBBIKO-DQdI9xDR.js} +1 -1
  108. package/dist/{mermaid-CP8gAOdP.js → mermaid-CzWpf81s.js} +41 -41
  109. package/dist/{mermaid-parser.core-Ldbqm2U2.js → mermaid-parser.core-CrrqF1ZZ.js} +7 -7
  110. package/dist/{mhchem-BGHMIfq6.js → mhchem-BwoRNwg_.js} +1 -1
  111. package/dist/micromark-factory-space-DQCQsiYz.js +1341 -0
  112. package/dist/{mindmap-definition-VGOIOE7T-BkJfqjP5.js → mindmap-definition-VGOIOE7T-L2ybicpO.js} +13 -13
  113. package/dist/mirc-tcwvVugm.js +4 -0
  114. package/dist/mllike-Dx91i62r.js +6 -0
  115. package/dist/modelica-_SRt-yU5.js +4 -0
  116. package/dist/mscgen-GZrGS9gt.js +6 -0
  117. package/dist/mumps-Cv3ygyod.js +4 -0
  118. package/dist/nsis-BU7GeGbI.js +4 -0
  119. package/dist/{nsis-CROWDZ9a.js → nsis-i9_sgigf.js} +1 -1
  120. package/dist/ntriples-CL-FCYXb.js +4 -0
  121. package/dist/{number-overlay-editor-B5y1rc-k.js → number-overlay-editor-D2Y0RpcH.js} +1 -1
  122. package/dist/octave-Dc6_3DIu.js +4 -0
  123. package/dist/{ordinal-Bz8O-XbW.js → ordinal-B4zYMadD.js} +1 -1
  124. package/dist/oz-DpUAJCXf.js +4 -0
  125. package/dist/{packet-DYOGHKS2-BWNLyWLh.js → packet-DYOGHKS2-DIf3Dotq.js} +1 -1
  126. package/dist/pascal-B17mncXs.js +4 -0
  127. package/dist/perl-BTpK97q9.js +4 -0
  128. package/dist/{pie-VRWISCQL-BNm0ZeOM.js → pie-VRWISCQL-Dj_gvPcD.js} +1 -1
  129. package/dist/{pieDiagram-ADFJNKIX-CLJoguev.js → pieDiagram-ADFJNKIX-x5w7q6Yp.js} +19 -19
  130. package/dist/pig-CFb638Ap.js +4 -0
  131. package/dist/powershell-Cxo-_2A5.js +4 -0
  132. package/dist/{process-output-BzDV74px.js → process-output-Cv8vQ4At.js} +4238 -4809
  133. package/dist/properties-BPgT1xTB.js +4 -0
  134. package/dist/protobuf-BgHBaIIK.js +4 -0
  135. package/dist/pug-25-oS0SG.js +4 -0
  136. package/dist/{pug-CSWat1rd.js → pug-BhE2JRSg.js} +1 -1
  137. package/dist/puppet-DarIr20S.js +4 -0
  138. package/dist/python-BqmOsBsi.js +4 -0
  139. package/dist/q-D3QJCTup.js +4 -0
  140. package/dist/{quadrantDiagram-AYHSOK5B-Bym-JxLx.js → quadrantDiagram-AYHSOK5B-D5j_5qG_.js} +3 -3
  141. package/dist/r-Cz_yBX4z.js +4 -0
  142. package/dist/{radar-ZZBFDIW7-CEhz-hUS.js → radar-ZZBFDIW7-DXDVq3gi.js} +1 -1
  143. package/dist/{react-vega-DZOOS-W4.js → react-vega-BBUxfZoV.js} +13 -13
  144. package/dist/{react-vega-CY82WAG3.js → react-vega-Cs3lfDw8.js} +1 -1
  145. package/dist/{requirementDiagram-UZGBJVZJ-CD_V4itb.js → requirementDiagram-UZGBJVZJ-3SoJH6yP.js} +13 -13
  146. package/dist/rpm-DGOtYwAI.js +5 -0
  147. package/dist/ruby-DBZu4rPc.js +4 -0
  148. package/dist/{sankeyDiagram-TZEHDZUN-CW3Bo_62.js → sankeyDiagram-TZEHDZUN-fGkFNe5q.js} +4 -4
  149. package/dist/sas-Dd1D9qTq.js +4 -0
  150. package/dist/scheme-BmDjvTHX.js +4 -0
  151. package/dist/{sequenceDiagram-WL72ISMW-BfAHIhk3.js → sequenceDiagram-WL72ISMW-BE2uTn_d.js} +7 -7
  152. package/dist/shell-BL8zFSaj.js +4 -0
  153. package/dist/sieve-BAx2WqUP.js +4 -0
  154. package/dist/smalltalk-CYRzF7VV.js +4 -0
  155. package/dist/sparql-YWaDRO4A.js +4 -0
  156. package/dist/{src-Bf2iLOlr.js → src-BY0BGg6V.js} +1 -1
  157. package/dist/{stateDiagram-FKZM4ZOC-CCfvnS3_.js → stateDiagram-FKZM4ZOC-Dmk9IAOx.js} +16 -16
  158. package/dist/stateDiagram-v2-4FDKWEC3-BGF0BvU6.js +29 -0
  159. package/dist/{step-CWipAYTY.js → step-DGAGWg3y.js} +1 -1
  160. package/dist/stylus-lYsyLFc1.js +4 -0
  161. package/dist/swift-ClQz9z1n.js +4 -0
  162. package/dist/tcl-B3jhsfqY.js +4 -0
  163. package/dist/textile-Cb1Dw7Aq.js +4 -0
  164. package/dist/{time-B31vFOEZ.js → time-C_pvjzP0.js} +2 -2
  165. package/dist/{timeline-definition-IT6M3QCI-BwyDPLz1.js → timeline-definition-IT6M3QCI-CvB4yGrN.js} +3 -3
  166. package/dist/toml-nHZhetdO.js +4 -0
  167. package/dist/{treemap-GDKQZRPO-BdsKcX7e.js → treemap-GDKQZRPO-CIG6WH-x.js} +1 -1
  168. package/dist/troff-DuJAGWKH.js +4 -0
  169. package/dist/ttcn-BxrcwP21.js +4 -0
  170. package/dist/ttcn-cfg-BAg_9dcc.js +4 -0
  171. package/dist/turtle-zCq949as.js +4 -0
  172. package/dist/vb-De5hElus.js +4 -0
  173. package/dist/vbscript-Cypcpv4F.js +4 -0
  174. package/dist/{vega-component-DX1QtRQE.js → vega-component-BQNW4qnB.js} +1 -1
  175. package/dist/velocity-Di7l-yhe.js +4 -0
  176. package/dist/verilog-Bzi-S3g2.js +4 -0
  177. package/dist/vhdl-B0ZZITaW.js +4 -0
  178. package/dist/webidl-0sviiRcN.js +4 -0
  179. package/dist/xquery-B4qMVWaB.js +4 -0
  180. package/dist/{xychartDiagram-PRI3JC2R-D-Of-r2y.js → xychartDiagram-PRI3JC2R-BbEInSqY.js} +10 -10
  181. package/dist/yacas-Jt25Fuv8.js +4 -0
  182. package/dist/z80-CrcbYzmp.js +4 -0
  183. package/package.json +1 -1
  184. package/src/__mocks__/requests.ts +1 -0
  185. package/src/components/data-table/range-focus/__tests__/use-cell-range-selection.test.ts +119 -0
  186. package/src/components/data-table/range-focus/use-cell-range-selection.ts +19 -0
  187. package/src/components/datasources/datasources.tsx +45 -0
  188. package/src/components/markdown/markdown-renderer.tsx +18 -2
  189. package/src/core/datasets/__tests__/data-source.test.ts +88 -1
  190. package/src/core/datasets/data-source-connections.ts +44 -0
  191. package/src/core/datasets/request-registry.ts +13 -0
  192. package/src/core/islands/bridge.ts +1 -0
  193. package/src/core/islands/main.ts +1 -0
  194. package/src/core/kernel/messages.ts +2 -0
  195. package/src/core/network/requests-lazy.ts +1 -0
  196. package/src/core/network/requests-network.ts +8 -0
  197. package/src/core/network/requests-static.ts +1 -0
  198. package/src/core/network/requests-toasting.tsx +1 -0
  199. package/src/core/network/types.ts +2 -0
  200. package/src/core/wasm/bridge.ts +10 -0
  201. package/src/core/websocket/useMarimoKernelConnection.tsx +4 -0
  202. package/dist/apl-Bw2VYJky.js +0 -4
  203. package/dist/asciiarmor-eqY4ZaG6.js +0 -4
  204. package/dist/asn1-Ch439-Sl.js +0 -4
  205. package/dist/brainfuck-CYhvoM5D.js +0 -4
  206. package/dist/classDiagram-2ON5EDUG-BKvGPmV7.js +0 -30
  207. package/dist/classDiagram-v2-WZHVMYZB-CUmRCVhz.js +0 -30
  208. package/dist/clojure-Dlp86hGI.js +0 -4
  209. package/dist/cmake-CW_qEITI.js +0 -4
  210. package/dist/cobol-XHu3WWjZ.js +0 -4
  211. package/dist/coffeescript-Bb6YS_bL.js +0 -4
  212. package/dist/commonlisp-BjSiOQCp.js +0 -4
  213. package/dist/crystal-BqTYUvZ7.js +0 -4
  214. package/dist/css-DADryIYo.js +0 -4
  215. package/dist/cypher-CNn306Oc.js +0 -4
  216. package/dist/d-D-tppFsq.js +0 -4
  217. package/dist/diff-BWHM7ple.js +0 -4
  218. package/dist/dist-BV8p87LG.js +0 -5
  219. package/dist/dist-CHmkCdpG.js +0 -5
  220. package/dist/dist-C__dRIDe.js +0 -5
  221. package/dist/dist-DjYymnvA.js +0 -5
  222. package/dist/dist-E9OVwuXi.js +0 -5
  223. package/dist/dist-s8cGIbEf.js +0 -5
  224. package/dist/dtd-_uCqoALQ.js +0 -4
  225. package/dist/dylan-C9RDQBgd.js +0 -4
  226. package/dist/ecl-D-cNcvrL.js +0 -4
  227. package/dist/eiffel-pwlnpFTa.js +0 -4
  228. package/dist/elm-Bw5cHXv0.js +0 -4
  229. package/dist/erlang-_hA30h6l.js +0 -4
  230. package/dist/factor-DmR0sS2X.js +0 -4
  231. package/dist/forth-Cp4B_BYs.js +0 -4
  232. package/dist/fortran-2KtXs5Vb.js +0 -4
  233. package/dist/gas-106_zOMN.js +0 -4
  234. package/dist/gherkin-CHK85w0F.js +0 -4
  235. package/dist/groovy-Bl2mjKn9.js +0 -4
  236. package/dist/haskell-BzHGL977.js +0 -4
  237. package/dist/haxe-BWQFLp-3.js +0 -5
  238. package/dist/idl-C28UwC1n.js +0 -4
  239. package/dist/javascript-DgLCEZTn.js +0 -4
  240. package/dist/julia-BPiwS_8t.js +0 -4
  241. package/dist/livescript-D--_lQnE.js +0 -4
  242. package/dist/lua-CsDs748O.js +0 -4
  243. package/dist/mathematica-BYQ9GF6F.js +0 -4
  244. package/dist/mbox-C7kaFMhK.js +0 -4
  245. package/dist/mirc-C2209Et3.js +0 -4
  246. package/dist/mllike-BLT4EygN.js +0 -6
  247. package/dist/modelica-DdJRZ_hL.js +0 -4
  248. package/dist/mscgen-CG9noCbk.js +0 -6
  249. package/dist/mumps-V-rMtaoS.js +0 -4
  250. package/dist/nsis-BaCxxbYc.js +0 -4
  251. package/dist/ntriples-2dOF8Rwr.js +0 -4
  252. package/dist/octave-DgJBCpUf.js +0 -4
  253. package/dist/oz-B4DqLn0e.js +0 -4
  254. package/dist/pascal-CzxJky4Q.js +0 -4
  255. package/dist/perl-BXxwSvR1.js +0 -4
  256. package/dist/pig-C6uUbdgq.js +0 -4
  257. package/dist/powershell-ByH1IK0s.js +0 -4
  258. package/dist/properties-D9ixNGHK.js +0 -4
  259. package/dist/protobuf-CL5MO5Bo.js +0 -4
  260. package/dist/pug-j1GtIGnO.js +0 -4
  261. package/dist/puppet-DAaSZQRF.js +0 -4
  262. package/dist/python-DWLse_Hh.js +0 -4
  263. package/dist/q-JRlUfaV4.js +0 -4
  264. package/dist/r-J8uFHie7.js +0 -4
  265. package/dist/rpm-C85hbO48.js +0 -5
  266. package/dist/ruby-D9HeYYQS.js +0 -4
  267. package/dist/sas-D4mSim4H.js +0 -4
  268. package/dist/scheme-DNmM-DGy.js +0 -4
  269. package/dist/shell-BS8ZwLUy.js +0 -4
  270. package/dist/sieve-B8TCe-_m.js +0 -4
  271. package/dist/smalltalk-CkAXTqlf.js +0 -4
  272. package/dist/sparql-Bt75sj2n.js +0 -4
  273. package/dist/stateDiagram-v2-4FDKWEC3-Dd_xAZiD.js +0 -29
  274. package/dist/stylus-BM4XGc6j.js +0 -4
  275. package/dist/swift-BRG-gyk5.js +0 -4
  276. package/dist/tcl-Bp61skpb.js +0 -4
  277. package/dist/textile-vndc5V2p.js +0 -4
  278. package/dist/toml-CMpRzNl5.js +0 -4
  279. package/dist/troff-BNSfnnQn.js +0 -4
  280. package/dist/ttcn-CILP7Q2P.js +0 -4
  281. package/dist/ttcn-cfg-Cs5Ekdhk.js +0 -4
  282. package/dist/turtle-1zFjsw2L.js +0 -4
  283. package/dist/vb-CCqDJO0q.js +0 -4
  284. package/dist/vbscript-CtqCxNqL.js +0 -4
  285. package/dist/velocity-BRacwoCp.js +0 -4
  286. package/dist/verilog-CdotQ5hS.js +0 -4
  287. package/dist/vhdl-CRMFlLc_.js +0 -4
  288. package/dist/webidl-Bo-4Hfyi.js +0 -4
  289. package/dist/xquery-CgMQN-7i.js +0 -4
  290. package/dist/yacas-6ORYe5fj.js +0 -4
  291. package/dist/z80-tFLqkB9-.js +0 -4
  292. /package/dist/{ImageComparisonComponent-gxt3EfyS.js → ImageComparisonComponent-BC00mJmw.js} +0 -0
  293. /package/dist/{Plot-Do8S2SQJ.js → Plot-B1ahrLui.js} +0 -0
  294. /package/dist/{apl-hy2nkDJ0.js → apl-99A7dLQe.js} +0 -0
  295. /package/dist/{array-tvvEqPy7.js → array-B-MVxRIF.js} +0 -0
  296. /package/dist/{asciiarmor-Bp85a1XA.js → asciiarmor-DLEhpFDx.js} +0 -0
  297. /package/dist/{asn1-CCINh2Tb.js → asn1-CMrcTsT4.js} +0 -0
  298. /package/dist/{asterisk-DaVJJDnV.js → asterisk-BUZwqih-.js} +0 -0
  299. /package/dist/{brainfuck-CWERNqpi.js → brainfuck-ChPt5yBe.js} +0 -0
  300. /package/dist/{chunk-4F5CHEZ2-trdcsslU.js → chunk-4F5CHEZ2-BigWQaTs.js} +0 -0
  301. /package/dist/{chunk-B2363JML-BFAcnt5i.js → chunk-B2363JML-DOYwB798.js} +0 -0
  302. /package/dist/{chunk-DR5Q36YT-BflwErH1.js → chunk-DR5Q36YT-CP69aZS_.js} +0 -0
  303. /package/dist/{chunk-FRFDVMJY-Bdi7sRSt.js → chunk-FRFDVMJY-Bo7Hv3UF.js} +0 -0
  304. /package/dist/{chunk-PL6DKKU2-BBQnb9JJ.js → chunk-PL6DKKU2-D3wYz-iW.js} +0 -0
  305. /package/dist/{chunk-SJTYNZTY-upm-bCUI.js → chunk-SJTYNZTY-Bauwp2-p.js} +0 -0
  306. /package/dist/{chunk-TQ3KTPDO-BYnhW5aQ.js → chunk-TQ3KTPDO-TjHW8xfv.js} +0 -0
  307. /package/dist/{chunk-UMXZTB3W-CmrAYToU.js → chunk-UMXZTB3W-DdRiIIOF.js} +0 -0
  308. /package/dist/{click-outside-container-D6Q_AEkf.js → click-outside-container-DB_bTXRG.js} +0 -0
  309. /package/dist/{clike-BclwMGdw.js → clike-CE0fXfM_.js} +0 -0
  310. /package/dist/{clojure-ygiDe_M6.js → clojure-QkBEMU-g.js} +0 -0
  311. /package/dist/{cmake-CqV32d9p.js → cmake-CU1jX7Mo.js} +0 -0
  312. /package/dist/{cobol-BC90RNzo.js → cobol-DMOKzzky.js} +0 -0
  313. /package/dist/{coffeescript-XlUo917R.js → coffeescript-DjnjLyfk.js} +0 -0
  314. /package/dist/{colors-CQAOa8cK.js → colors-Cn2p_FA3.js} +0 -0
  315. /package/dist/{common-keywords-FBrXPTcz.js → common-keywords-hbLeU7VU.js} +0 -0
  316. /package/dist/{commonlisp-BlMWxO2z.js → commonlisp-CYd9iOSe.js} +0 -0
  317. /package/dist/{crystal-BJriHwL7.js → crystal-Dy55yoYG.js} +0 -0
  318. /package/dist/{css-De5CPzak.js → css-CNU8w3HJ.js} +0 -0
  319. /package/dist/{cypher-CF3pgZHB.js → cypher-q47DGzK7.js} +0 -0
  320. /package/dist/{cytoscape.esm-GAzDZorR.js → cytoscape.esm-WbbDoCfu.js} +0 -0
  321. /package/dist/{d-DnmSJuVB.js → d-jEkaLvxX.js} +0 -0
  322. /package/dist/{diff-5fTcVlce.js → diff-vb2-unFN.js} +0 -0
  323. /package/dist/{dist-CWmTJeFK.js → dist-1-E4bC9V.js} +0 -0
  324. /package/dist/{dist-BcxBN3cs.js → dist-APyhcmvq.js} +0 -0
  325. /package/dist/{dist-9a7ktdXy.js → dist-B5thW2rT.js} +0 -0
  326. /package/dist/{dist-DaQ8gl6t.js → dist-BJvk9DSp.js} +0 -0
  327. /package/dist/{dist-WV8DSzVp.js → dist-BLrc9iNb.js} +0 -0
  328. /package/dist/{dist-BGdYVvOu.js → dist-C89sHDXk.js} +0 -0
  329. /package/dist/{dist-D_qEwdMV.js → dist-CGH6Jw-c.js} +0 -0
  330. /package/dist/{dist-C4UxHJAP.js → dist-CQ3XmGIH.js} +0 -0
  331. /package/dist/{dist-Ddms9oaj.js → dist-CYuoqvce.js} +0 -0
  332. /package/dist/{dist-B1fHT_HN.js → dist-CxczluAk.js} +0 -0
  333. /package/dist/{dist-BU99V51x.js → dist-DFBjYgbq.js} +0 -0
  334. /package/dist/{dist-CiisiGJh.js → dist-DbyoYfBn.js} +0 -0
  335. /package/dist/{dist-DkQrPBbq.js → dist-Dk13KZ54.js} +0 -0
  336. /package/dist/{dist-BJ43gqCe.js → dist-Dl9_0tkc.js} +0 -0
  337. /package/dist/{dist-BS0c9rME.js → dist-aW74oyUt.js} +0 -0
  338. /package/dist/{dist-XpVxGq0K.js → dist-iM9VwH8Z.js} +0 -0
  339. /package/dist/{dist-CMY2xBYw.js → dist-zGOEySUQ.js} +0 -0
  340. /package/dist/{dtd-CExSJ830.js → dtd-C9kR-bXa.js} +0 -0
  341. /package/dist/{duckdb-keywords-CvJhR_Yd.js → duckdb-keywords-CZ_ZTscu.js} +0 -0
  342. /package/dist/{dylan-D45mme_B.js → dylan-BLckrK-V.js} +0 -0
  343. /package/dist/{ebnf-2D4Ctp3y.js → ebnf-WEXPLEWb.js} +0 -0
  344. /package/dist/{ecl-Dt8H2ySk.js → ecl-CEsf6XVg.js} +0 -0
  345. /package/dist/{eiffel-BVH48wKK.js → eiffel-2KGZNzx6.js} +0 -0
  346. /package/dist/{elm-lLkDwz-w.js → elm-D2s3K5wF.js} +0 -0
  347. /package/dist/{erlang-Ct2FydHU.js → erlang-0PMFOndk.js} +0 -0
  348. /package/dist/{esm-CuMA4YP0.js → esm-Bb_hbWan.js} +0 -0
  349. /package/dist/{fcl-Ccj8Z5Xd.js → fcl-B_Gv5Jfx.js} +0 -0
  350. /package/dist/{forth-CXoVo3MY.js → forth-DG89iUsu.js} +0 -0
  351. /package/dist/{fortran-CgtioF-z.js → fortran-ytKsAVvu.js} +0 -0
  352. /package/dist/{gas-DA6wSQkj.js → gas-Cg2Fm0N2.js} +0 -0
  353. /package/dist/{gherkin-Cn3rybYZ.js → gherkin-B87FEnZ-.js} +0 -0
  354. /package/dist/{groovy-CGOZjiuH.js → groovy-Dcs08AWD.js} +0 -0
  355. /package/dist/{haskell-BWI76WET.js → haskell-cwkOuhx6.js} +0 -0
  356. /package/dist/{haxe-CovtkFbk.js → haxe-DWEo4q10.js} +0 -0
  357. /package/dist/{http-_DVAYWoR.js → http-Dc2fv19V.js} +0 -0
  358. /package/dist/{idl-SJSctwSZ.js → idl-WWQwDcRV.js} +0 -0
  359. /package/dist/{init-uv0kkh4g.js → init-D-g0ONX1.js} +0 -0
  360. /package/dist/{javascript-BzIdRGKh.js → javascript-BeR74dxD.js} +0 -0
  361. /package/dist/{julia-B3EQ2bxh.js → julia-UlvCUYGL.js} +0 -0
  362. /package/dist/{katex-CywHdYBC.js → katex-B7pMJpE0.js} +0 -0
  363. /package/dist/{livescript-BtVSE9jj.js → livescript-GPmFcmYV.js} +0 -0
  364. /package/dist/{lua-B1Esbvm1.js → lua-DYoT_0zM.js} +0 -0
  365. /package/dist/{math-DFcdCCU8.js → math-BYK36kWZ.js} +0 -0
  366. /package/dist/{mathematica-BLPJnY-e.js → mathematica-DSFIQlbG.js} +0 -0
  367. /package/dist/{mbox-C86ZBpjz.js → mbox-ej8lFMdL.js} +0 -0
  368. /package/dist/{mirc-Cqv8ECOt.js → mirc-CAdIdvHQ.js} +0 -0
  369. /package/dist/{mllike-BCn8p2Mf.js → mllike-CjTB1lHF.js} +0 -0
  370. /package/dist/{modelica-eD-847KF.js → modelica-BB68FYMa.js} +0 -0
  371. /package/dist/{mscgen-BtzXm_zS.js → mscgen-BkbzgGGI.js} +0 -0
  372. /package/dist/{mumps-BUx23-bh.js → mumps-Cu-28E9F.js} +0 -0
  373. /package/dist/{nginx-DasThI7R.js → nginx-ComVAAGN.js} +0 -0
  374. /package/dist/{node-sql-parser-CHcmQ9Ms.js → node-sql-parser-DNGGJ-Rw.js} +0 -0
  375. /package/dist/{ntriples-naSVo-bH.js → ntriples-D9cQiZxZ.js} +0 -0
  376. /package/dist/{octave-B-zftwnK.js → octave-BvtAnPX0.js} +0 -0
  377. /package/dist/{oz-OUZbVKrv.js → oz-COaVHk2E.js} +0 -0
  378. /package/dist/{pascal-C-c-17Ts.js → pascal-BFpqVD2x.js} +0 -0
  379. /package/dist/{path-BGaWgPKg.js → path-Du6n3sOU.js} +0 -0
  380. /package/dist/{perl-BBIS1zw3.js → perl-DaiORxHP.js} +0 -0
  381. /package/dist/{pig-B10mtuLC.js → pig-DFzRhmsF.js} +0 -0
  382. /package/dist/{powershell-SyaENm-A.js → powershell-BG2LQNKN.js} +0 -0
  383. /package/dist/{properties-BiiMVvre.js → properties-CqJJR5QY.js} +0 -0
  384. /package/dist/{protobuf-Cj2_antD.js → protobuf-WwDYV1yY.js} +0 -0
  385. /package/dist/{puppet-ZeJ9I40T.js → puppet-QNY3w_uN.js} +0 -0
  386. /package/dist/{python-mR64qk6D.js → python-4QrQ3Ugi.js} +0 -0
  387. /package/dist/{q-C_IMU433.js → q-DhwXuxE2.js} +0 -0
  388. /package/dist/{r-BKx4ZcIe.js → r-Df-nkR25.js} +0 -0
  389. /package/dist/{rpm-Dc3zEGCn.js → rpm-Cokue07s.js} +0 -0
  390. /package/dist/{ruby-eSClttk1.js → ruby-DrYcL3qF.js} +0 -0
  391. /package/dist/{sas-7VEmwDJB.js → sas-CoiPirA5.js} +0 -0
  392. /package/dist/{scheme-CpP6oEOD.js → scheme-CwFLjzHv.js} +0 -0
  393. /package/dist/{shell-CfNoZJks.js → shell-BFV-R24I.js} +0 -0
  394. /package/dist/{sieve-dzMMB941.js → sieve-CxwXF5T9.js} +0 -0
  395. /package/dist/{simple-mode-CnNH5BDk.js → simple-mode-DTaJtKPt.js} +0 -0
  396. /package/dist/{slides-component-oCf7w4PF.js → slides-component-Cjo6LzW9.js} +0 -0
  397. /package/dist/{smalltalk-BVDNd2a5.js → smalltalk-QivVOCtX.js} +0 -0
  398. /package/dist/{solr-RZ9uTl59.js → solr-DTkyqJ-Z.js} +0 -0
  399. /package/dist/{sparql-Br2qWoOi.js → sparql-nKsFk8j7.js} +0 -0
  400. /package/dist/{spreadsheet-BNNUNXA2.js → spreadsheet-CER0raqY.js} +0 -0
  401. /package/dist/{sql-B4x8IkwU.js → sql-ByOoEONQ.js} +0 -0
  402. /package/dist/{stylus-Ca_-WKcu.js → stylus-BLKQAycn.js} +0 -0
  403. /package/dist/{swift-CiBr8lL9.js → swift-CJoKqiKj.js} +0 -0
  404. /package/dist/{tcl-DpMdOyXx.js → tcl-YTeYFNUc.js} +0 -0
  405. /package/dist/{textile-Dc0EKY-e.js → textile-C6rKQqMQ.js} +0 -0
  406. /package/dist/{tiddlywiki-DI0mF2WJ.js → tiddlywiki-Cr9xyOY1.js} +0 -0
  407. /package/dist/{tiki-2HU6XLLn.js → tiki-D5JONyfZ.js} +0 -0
  408. /package/dist/{timer-YZl28NYN.js → timer-D7JVdX9U.js} +0 -0
  409. /package/dist/{toml-Cz56KCq3.js → toml-DxlPGbRy.js} +0 -0
  410. /package/dist/{treemap-D-ka1hvx.js → treemap-qFGzn7xk.js} +0 -0
  411. /package/dist/{troff-QPYfPg8n.js → troff-DFCfH7Ku.js} +0 -0
  412. /package/dist/{ttcn-Bd8ZFglh.js → ttcn-DAW-ERVP.js} +0 -0
  413. /package/dist/{ttcn-cfg-BRegYnOz.js → ttcn-cfg-CpJ8b7EN.js} +0 -0
  414. /package/dist/{turtle-BtxTFbJ2.js → turtle-BneV2f8L.js} +0 -0
  415. /package/dist/{vb-BPcnlamW.js → vb-D973Vxxh.js} +0 -0
  416. /package/dist/{vbscript-RpXS5Rn-.js → vbscript-Dckaq3YO.js} +0 -0
  417. /package/dist/{velocity-toRwXi-i.js → velocity-DKty-GUC.js} +0 -0
  418. /package/dist/{verilog-B1fdOBGb.js → verilog-aNaK_biA.js} +0 -0
  419. /package/dist/{vhdl-D-vWFb2W.js → vhdl-CQuehnQy.js} +0 -0
  420. /package/dist/{webidl-QJDW0ZyQ.js → webidl-Bhg8vaMr.js} +0 -0
  421. /package/dist/{xquery-DMMT83Vl.js → xquery-D2q16GaM.js} +0 -0
  422. /package/dist/{yacas-CvzqlDJ_.js → yacas-DHGOHnNa.js} +0 -0
  423. /package/dist/{z80-DqdgHy0p.js → z80-BPhTmO22.js} +0 -0
@@ -0,0 +1,119 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+
3
+ import { describe, expect, it } from "vitest";
4
+ import { isInteractiveTarget } from "../use-cell-range-selection";
5
+
6
+ function createMouseEvent(
7
+ target: HTMLElement,
8
+ currentTarget: HTMLElement,
9
+ ): React.MouseEvent {
10
+ return { target, currentTarget } as unknown as React.MouseEvent;
11
+ }
12
+
13
+ describe("isInteractiveTarget", () => {
14
+ it("returns false when target is the cell itself", () => {
15
+ const cell = document.createElement("td");
16
+ expect(isInteractiveTarget(createMouseEvent(cell, cell))).toBe(false);
17
+ });
18
+
19
+ it("returns false when clicking plain text inside a cell", () => {
20
+ const cell = document.createElement("td");
21
+ const span = document.createElement("span");
22
+ cell.append(span);
23
+ expect(isInteractiveTarget(createMouseEvent(span, cell))).toBe(false);
24
+ });
25
+
26
+ it.each([
27
+ "input",
28
+ "button",
29
+ "select",
30
+ "textarea",
31
+ ])("returns true when clicking a <%s>", (tag) => {
32
+ const cell = document.createElement("td");
33
+ const el = document.createElement(tag);
34
+ cell.append(el);
35
+ expect(isInteractiveTarget(createMouseEvent(el, cell))).toBe(true);
36
+ });
37
+
38
+ it("returns true when clicking an <a> link", () => {
39
+ const cell = document.createElement("td");
40
+ const a = document.createElement("a");
41
+ a.href = "#";
42
+ cell.append(a);
43
+ expect(isInteractiveTarget(createMouseEvent(a, cell))).toBe(true);
44
+ });
45
+
46
+ it("returns true when clicking a <label>", () => {
47
+ const cell = document.createElement("td");
48
+ const label = document.createElement("label");
49
+ cell.append(label);
50
+ expect(isInteractiveTarget(createMouseEvent(label, cell))).toBe(true);
51
+ });
52
+
53
+ it('returns true for element with role="checkbox"', () => {
54
+ const cell = document.createElement("td");
55
+ const div = document.createElement("div");
56
+ div.setAttribute("role", "checkbox");
57
+ cell.append(div);
58
+ expect(isInteractiveTarget(createMouseEvent(div, cell))).toBe(true);
59
+ });
60
+
61
+ it('returns true for element with role="button"', () => {
62
+ const cell = document.createElement("td");
63
+ const div = document.createElement("div");
64
+ div.setAttribute("role", "button");
65
+ cell.append(div);
66
+ expect(isInteractiveTarget(createMouseEvent(div, cell))).toBe(true);
67
+ });
68
+
69
+ it('returns true for contenteditable="true"', () => {
70
+ const cell = document.createElement("td");
71
+ const div = document.createElement("div");
72
+ div.setAttribute("contenteditable", "true");
73
+ cell.append(div);
74
+ expect(isInteractiveTarget(createMouseEvent(div, cell))).toBe(true);
75
+ });
76
+
77
+ it("returns true when clicking a child nested inside an interactive element", () => {
78
+ const cell = document.createElement("td");
79
+ const button = document.createElement("button");
80
+ const icon = document.createElement("span");
81
+ button.append(icon);
82
+ cell.append(button);
83
+ expect(isInteractiveTarget(createMouseEvent(icon, cell))).toBe(true);
84
+ });
85
+
86
+ it("returns true when clicking inside a marimo-ui-element", () => {
87
+ const cell = document.createElement("td");
88
+ const marimoEl = document.createElement("marimo-ui-element");
89
+ const inner = document.createElement("div");
90
+ marimoEl.append(inner);
91
+ cell.append(marimoEl);
92
+ expect(isInteractiveTarget(createMouseEvent(inner, cell))).toBe(true);
93
+ });
94
+
95
+ it("returns true when clicking the marimo-ui-element itself", () => {
96
+ const cell = document.createElement("td");
97
+ const marimoEl = document.createElement("marimo-ui-element");
98
+ cell.append(marimoEl);
99
+ expect(isInteractiveTarget(createMouseEvent(marimoEl, cell))).toBe(true);
100
+ });
101
+
102
+ it("returns false when clicking a non-interactive div", () => {
103
+ const cell = document.createElement("td");
104
+ const wrapper = document.createElement("div");
105
+ const text = document.createElement("span");
106
+ wrapper.append(text);
107
+ cell.append(wrapper);
108
+ expect(isInteractiveTarget(createMouseEvent(text, cell))).toBe(false);
109
+ });
110
+
111
+ it("returns false when target is a non-Element (e.g. Text node)", () => {
112
+ const cell = document.createElement("td");
113
+ const textNode = document.createTextNode("hello");
114
+ cell.append(textNode);
115
+ expect(isInteractiveTarget(createMouseEvent(textNode as never, cell))).toBe(
116
+ false,
117
+ );
118
+ });
119
+ });
@@ -91,6 +91,10 @@ export const useCellRangeSelection = <TData>({
91
91
  return;
92
92
  }
93
93
 
94
+ if (isInteractiveTarget(e)) {
95
+ return;
96
+ }
97
+
94
98
  actions.handleCellMouseDown({
95
99
  cell,
96
100
  isShiftKey: e.shiftKey,
@@ -122,3 +126,18 @@ export const useCellRangeSelection = <TData>({
122
126
  clearSelection: actions.clearSelection,
123
127
  };
124
128
  };
129
+
130
+ const INTERACTIVE_SELECTOR =
131
+ 'input, button, select, textarea, a, label, [role="checkbox"], [role="button"], [contenteditable="true"], marimo-ui-element';
132
+
133
+ /**
134
+ * Skip cell selection when the click target is inside an interactive element
135
+ * (e.g. a checkbox or button rendered as rich cell content).
136
+ */
137
+ export function isInteractiveTarget(e: React.MouseEvent): boolean {
138
+ const target = e.target;
139
+ if (target === e.currentTarget || !(target instanceof Element)) {
140
+ return false;
141
+ }
142
+ return target.closest(INTERACTIVE_SELECTOR) !== null;
143
+ }
@@ -28,6 +28,7 @@ import {
28
28
  INTERNAL_SQL_ENGINES,
29
29
  } from "@/core/datasets/engines";
30
30
  import {
31
+ PreviewSQLSchemaList,
31
32
  PreviewSQLTable,
32
33
  PreviewSQLTableList,
33
34
  } from "@/core/datasets/request-registry";
@@ -80,6 +81,7 @@ const INDENT = {
80
81
  database: "pl-4",
81
82
  schemaEmpty: "pl-8",
82
83
  schema: "pl-7",
84
+ schemaLoading: "pl-8",
83
85
  tableLoading: "pl-11",
84
86
  tableSchemaless: "pl-8",
85
87
  tableWithSchema: "pl-12",
@@ -369,6 +371,49 @@ const SchemaList: React.FC<{
369
371
  hasSearch,
370
372
  searchValue,
371
373
  }) => {
374
+ const { addSchemaList } = useDataSourceActions();
375
+ const [schemasRequested, setSchemasRequested] = React.useState(false);
376
+
377
+ // Custom loading state, we need to wait for the data to propagate once requested
378
+ // useAsyncData's loading state may return false before data has propagated
379
+ const [schemasLoading, setSchemasLoading] = React.useState(false);
380
+
381
+ const { isPending, error } = useAsyncData(async () => {
382
+ if (schemas.length === 0 && engineName && !schemasRequested) {
383
+ setSchemasRequested(true);
384
+ setSchemasLoading(true);
385
+ try {
386
+ const previewSchemaList = await PreviewSQLSchemaList.request({
387
+ engine: engineName,
388
+ database: databaseName,
389
+ });
390
+
391
+ addSchemaList({
392
+ schemas: previewSchemaList.schemas ?? [],
393
+ sqlSchemaContext: {
394
+ engine: engineName,
395
+ database: databaseName,
396
+ },
397
+ });
398
+ } finally {
399
+ setSchemasLoading(false);
400
+ }
401
+ }
402
+ }, [schemas.length, engineName, databaseName, schemasRequested]);
403
+
404
+ if (isPending || schemasLoading) {
405
+ return (
406
+ <LoadingState
407
+ message="Loading schemas..."
408
+ className={INDENT.schemaLoading}
409
+ />
410
+ );
411
+ }
412
+
413
+ if (error) {
414
+ return <ErrorState error={error} className={INDENT.schemaLoading} />;
415
+ }
416
+
372
417
  if (schemas.length === 0) {
373
418
  return (
374
419
  <EmptyState
@@ -1,7 +1,6 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
 
3
3
  import { EditorView } from "@codemirror/view";
4
- import { math } from "@streamdown/math";
5
4
  import { useAtomValue } from "jotai";
6
5
  import { BetweenHorizontalStartIcon } from "lucide-react";
7
6
  import { memo, Suspense, useState } from "react";
@@ -13,6 +12,7 @@ import { useLastFocusedCellId } from "@/core/cells/focus";
13
12
  import { MarkdownLanguageAdapter } from "@/core/codemirror/language/languages/markdown";
14
13
  import { SQLLanguageAdapter } from "@/core/codemirror/language/languages/sql/sql";
15
14
  import { autoInstantiateAtom } from "@/core/config/config";
15
+ import { useAsyncData } from "@/hooks/useAsyncData";
16
16
  import { LazyAnyLanguageCodeMirror } from "@/plugins/impl/code/LazyAnyLanguageCodeMirror";
17
17
  import { useTheme } from "@/theme/useTheme";
18
18
  import { copyToClipboard } from "@/utils/copy";
@@ -166,11 +166,27 @@ const COMPONENTS: Components = {
166
166
  },
167
167
  };
168
168
 
169
+ // Lazy-load the math plugin to keep katex (~264 KB) out of the critical path.
170
+ // The first render works without math; once loaded, it re-renders with math support.
171
+ let mathPluginCache: StreamdownProps["plugins"] | undefined;
172
+ const useMathPlugin = () => {
173
+ const { data: plugins } = useAsyncData(async () => {
174
+ if (mathPluginCache) {
175
+ return mathPluginCache;
176
+ }
177
+ const mod = await import("@streamdown/math");
178
+ mathPluginCache = { math: mod.math };
179
+ return mathPluginCache;
180
+ }, []);
181
+ return plugins;
182
+ };
183
+
169
184
  export const MarkdownRenderer = memo(({ content }: { content: string }) => {
185
+ const plugins = useMathPlugin();
170
186
  return (
171
187
  <Streamdown
172
188
  components={COMPONENTS}
173
- plugins={{ math }}
189
+ plugins={plugins}
174
190
  className="mo-markdown-renderer"
175
191
  >
176
192
  {content}
@@ -1,7 +1,7 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
  import { beforeEach, describe, expect, it } from "vitest";
3
3
  import { variableName } from "@/__tests__/branded";
4
- import type { DataTable } from "@/core/kernel/messages";
4
+ import type { DatabaseSchema, DataTable } from "@/core/kernel/messages";
5
5
  import type { VariableName } from "@/core/variables/types";
6
6
  import {
7
7
  type DataSourceConnection,
@@ -209,6 +209,93 @@ describe("filtering data sources", () => {
209
209
  });
210
210
  });
211
211
 
212
+ describe("add schema list", () => {
213
+ const connections: DataSourceConnection[] = [
214
+ {
215
+ name: "conn1" as ConnectionName,
216
+ source: "sqlite",
217
+ display_name: "SQLite DB",
218
+ dialect: "sqlite",
219
+ databases: [
220
+ {
221
+ name: "db1",
222
+ schemas: [],
223
+ dialect: "sqlite",
224
+ },
225
+ ],
226
+ },
227
+ ];
228
+
229
+ // Helper function to add schema list
230
+ const addSchemaList = (
231
+ schemas: DatabaseSchema[],
232
+ engine: string,
233
+ database: string,
234
+ ) => {
235
+ return reducer(baseState, {
236
+ type: "addSchemaList",
237
+ payload: {
238
+ schemas,
239
+ sqlSchemaContext: { engine, database },
240
+ },
241
+ });
242
+ };
243
+
244
+ let baseState: DataSourceState;
245
+
246
+ beforeEach(() => {
247
+ baseState = addConnection(connections, baseState);
248
+ expect(baseState.connectionsMap.size).toBe(defaultConnSize + 1);
249
+ });
250
+
251
+ it("adds schema list to a specific database", () => {
252
+ const schemaList: DatabaseSchema[] = [
253
+ { name: "public", tables: [] },
254
+ { name: "analytics", tables: [] },
255
+ ];
256
+ const newState = addSchemaList(schemaList, "conn1", "db1");
257
+
258
+ const conn1 = newState.connectionsMap.get("conn1" as ConnectionName);
259
+ const db1 = conn1?.databases.find((db) => db.name === "db1");
260
+ expect(db1?.schemas).toEqual(schemaList);
261
+ });
262
+
263
+ it("updates schema list for a database", () => {
264
+ const schemaList: DatabaseSchema[] = [
265
+ { name: "public", tables: [] },
266
+ { name: "analytics", tables: [] },
267
+ ];
268
+ const newState = addSchemaList(schemaList, "conn1", "db1");
269
+
270
+ const conn1 = newState.connectionsMap.get("conn1" as ConnectionName);
271
+ const db1 = conn1?.databases.find((db) => db.name === "db1");
272
+ expect(db1?.schemas).toEqual(schemaList);
273
+
274
+ // update with new schema list
275
+ const newSchemaList: DatabaseSchema[] = [
276
+ { name: "public", tables: [] },
277
+ { name: "sales", tables: [] },
278
+ ];
279
+ const updatedState = addSchemaList(newSchemaList, "conn1", "db1");
280
+
281
+ const newConn = updatedState.connectionsMap.get("conn1" as ConnectionName);
282
+ const newDb1 = newConn?.databases.find((db) => db.name === "db1");
283
+ expect(newDb1?.schemas).toEqual(newSchemaList);
284
+ });
285
+
286
+ it("does not add schema list if database does not exist", () => {
287
+ const schemaList: DatabaseSchema[] = [
288
+ { name: "public", tables: [] },
289
+ { name: "analytics", tables: [] },
290
+ ];
291
+ const newState = addSchemaList(schemaList, "conn1", "non_existent_db");
292
+
293
+ const conn1 = newState.connectionsMap.get("conn1" as ConnectionName);
294
+ const db1 = conn1?.databases.find((db) => db.name === "db1");
295
+ expect(db1?.schemas.length).toBe(0);
296
+ });
297
+ });
298
+
212
299
  describe("add table list", () => {
213
300
  const connections: DataSourceConnection[] = [
214
301
  {
@@ -5,6 +5,7 @@ import { isSchemaless } from "@/components/datasources/utils";
5
5
  import { createReducerAndAtoms } from "@/utils/createReducer";
6
6
  import { Logger } from "@/utils/Logger";
7
7
  import type {
8
+ DatabaseSchema,
8
9
  DataSourceConnection as DataSourceConnectionType,
9
10
  DataTable,
10
11
  } from "../kernel/messages";
@@ -43,6 +44,11 @@ export interface DataSourceState {
43
44
  connectionsMap: ConnectionsMap;
44
45
  }
45
46
 
47
+ export interface SQLSchemaContext {
48
+ engine: string;
49
+ database: string;
50
+ }
51
+
46
52
  export interface SQLTableContext {
47
53
  engine: string;
48
54
  database: string;
@@ -134,6 +140,44 @@ const {
134
140
  };
135
141
  },
136
142
 
143
+ // Add schema list to a specific database in a connection
144
+ addSchemaList: (
145
+ state: DataSourceState,
146
+ opts: {
147
+ schemas: DatabaseSchema[];
148
+ sqlSchemaContext: SQLSchemaContext;
149
+ },
150
+ ): DataSourceState => {
151
+ const { schemas, sqlSchemaContext } = opts;
152
+ const { connectionsMap, latestEngineSelected } = state;
153
+ const connectionName = sqlSchemaContext.engine as ConnectionName;
154
+ const conn = connectionsMap.get(connectionName);
155
+
156
+ if (!conn) {
157
+ return state;
158
+ }
159
+
160
+ const newMap = new Map(connectionsMap);
161
+ const newConn: DataSourceConnection = {
162
+ ...conn,
163
+ databases: conn.databases.map((db) => {
164
+ if (db.name !== sqlSchemaContext.database) {
165
+ return db;
166
+ }
167
+ return {
168
+ ...db,
169
+ schemas: schemas,
170
+ };
171
+ }),
172
+ };
173
+ newMap.set(connectionName, newConn);
174
+
175
+ return {
176
+ latestEngineSelected: latestEngineSelected,
177
+ connectionsMap: newMap,
178
+ };
179
+ },
180
+
137
181
  // Add table list to a specific schema in a connection
138
182
  addTableList: (
139
183
  state: DataSourceState,
@@ -1,5 +1,6 @@
1
1
  /* Copyright 2026 Marimo. All rights reserved. */
2
2
  import type {
3
+ SQLSchemaListPreview,
3
4
  SQLTableListPreview,
4
5
  SQLTablePreview,
5
6
  ValidateSQLResult,
@@ -8,6 +9,7 @@ import { CachingRequestRegistry } from "../network/CachingRequestRegistry";
8
9
  import { DeferredRequestRegistry } from "../network/DeferredRequestRegistry";
9
10
  import { getRequestClient } from "../network/requests";
10
11
  import type {
12
+ ListSQLSchemasRequest,
11
13
  ListSQLTablesRequest,
12
14
  PreviewSQLTableRequest,
13
15
  ValidateSQLRequest,
@@ -28,6 +30,17 @@ export const PreviewSQLTable = new DeferredRequestRegistry<
28
30
  });
29
31
  });
30
32
 
33
+ export const PreviewSQLSchemaList = new DeferredRequestRegistry<
34
+ Omit<ListSQLSchemasRequest, "requestId">,
35
+ SQLSchemaListPreview
36
+ >("sql-schema-list-preview", async (requestId, req) => {
37
+ const client = getRequestClient();
38
+ await client.previewSQLSchemaList({
39
+ requestId: requestId,
40
+ ...req,
41
+ });
42
+ });
43
+
31
44
  export const PreviewSQLTableList = new DeferredRequestRegistry<
32
45
  Omit<ListSQLTablesRequest, "requestId">,
33
46
  SQLTableListPreview
@@ -169,6 +169,7 @@ export class IslandsPyodideBridge implements RunRequests, EditRequests {
169
169
  previewDatasetColumn = throwNotImplemented;
170
170
  previewSQLTable = throwNotImplemented;
171
171
  previewSQLTableList = throwNotImplemented;
172
+ previewSQLSchemaList = throwNotImplemented;
172
173
  previewDataSourceConnection = throwNotImplemented;
173
174
  validateSQL = throwNotImplemented;
174
175
  openFile = throwNotImplemented;
@@ -121,6 +121,7 @@ export async function initialize() {
121
121
  case "data-column-preview":
122
122
  case "sql-table-preview":
123
123
  case "sql-table-list-preview":
124
+ case "sql-schema-list-preview":
124
125
  case "datasets":
125
126
  case "data-source-connections":
126
127
  case "validate-sql-result":
@@ -41,6 +41,8 @@ export type DataColumnPreview = NotificationMessageData<"data-column-preview">;
41
41
  export type SQLTablePreview = NotificationMessageData<"sql-table-preview">;
42
42
  export type SQLTableListPreview =
43
43
  NotificationMessageData<"sql-table-list-preview">;
44
+ export type SQLSchemaListPreview =
45
+ NotificationMessageData<"sql-schema-list-preview">;
44
46
  export type ValidateSQLResult = NotificationMessageData<"validate-sql-result">;
45
47
  export type SecretKeysResult = NotificationMessageData<"secret-keys-result">;
46
48
  export type StartupLogs = NotificationMessageData<"startup-logs">;
@@ -112,6 +112,7 @@ const ACTIONS: Record<keyof AllRequests, Action> = {
112
112
  previewDatasetColumn: "waitForConnectionOpen",
113
113
  previewSQLTable: "waitForConnectionOpen",
114
114
  previewSQLTableList: "waitForConnectionOpen",
115
+ previewSQLSchemaList: "waitForConnectionOpen",
115
116
  previewDataSourceConnection: "waitForConnectionOpen",
116
117
  validateSQL: "waitForConnectionOpen",
117
118
  listStorageEntries: "waitForConnectionOpen",
@@ -244,6 +244,14 @@ export function createNetworkRequests(): EditRequests & RunRequests {
244
244
  })
245
245
  .then(handleResponseReturnNull);
246
246
  },
247
+ previewSQLSchemaList: (request) => {
248
+ return getClient()
249
+ .POST("/api/datasources/preview_sql_schema_list", {
250
+ body: request,
251
+ params: getParams(),
252
+ })
253
+ .then(handleResponseReturnNull);
254
+ },
247
255
  previewDataSourceConnection: (request) => {
248
256
  return getClient()
249
257
  .POST("/api/datasources/preview_datasource_connection", {
@@ -57,6 +57,7 @@ export function createStaticRequests(): EditRequests & RunRequests {
57
57
  previewDatasetColumn: throwNotInEditMode,
58
58
  previewSQLTable: throwNotInEditMode,
59
59
  previewSQLTableList: throwNotInEditMode,
60
+ previewSQLSchemaList: throwNotInEditMode,
60
61
  previewDataSourceConnection: throwNotInEditMode,
61
62
  validateSQL: throwNotInEditMode,
62
63
  openFile: throwNotInEditMode,
@@ -42,6 +42,7 @@ export function createErrorToastingRequests(
42
42
  previewDatasetColumn: "Failed to fetch data sources",
43
43
  previewSQLTable: "Failed to fetch SQL table",
44
44
  previewSQLTableList: "Failed to fetch SQL table list",
45
+ previewSQLSchemaList: "Failed to fetch SQL schema list",
45
46
  previewDataSourceConnection: "Failed to preview data source connection",
46
47
  validateSQL: "Failed to validate SQL",
47
48
  openFile: "Failed to open file",
@@ -59,6 +59,7 @@ export type PreviewDatasetColumnRequest =
59
59
  schemas["PreviewDatasetColumnRequest"];
60
60
  export type PreviewSQLTableRequest = schemas["PreviewSQLTableRequest"];
61
61
  export type ListSQLTablesRequest = schemas["ListSQLTablesRequest"];
62
+ export type ListSQLSchemasRequest = schemas["ListSQLSchemasRequest"];
62
63
  export type ListDataSourceConnectionRequest =
63
64
  schemas["ListDataSourceConnectionRequest"];
64
65
  export type ValidateSQLRequest = schemas["ValidateSQLRequest"];
@@ -151,6 +152,7 @@ export interface EditRequests {
151
152
  previewDatasetColumn: (request: PreviewDatasetColumnRequest) => Promise<null>;
152
153
  previewSQLTable: (request: PreviewSQLTableRequest) => Promise<null>;
153
154
  previewSQLTableList: (request: ListSQLTablesRequest) => Promise<null>;
155
+ previewSQLSchemaList: (request: ListSQLSchemasRequest) => Promise<null>;
154
156
  previewDataSourceConnection: (
155
157
  request: ListDataSourceConnectionRequest,
156
158
  ) => Promise<null>;
@@ -523,6 +523,16 @@ export class PyodideBridge implements RunRequests, EditRequests {
523
523
  return null;
524
524
  };
525
525
 
526
+ previewSQLSchemaList: EditRequests["previewSQLSchemaList"] = async (
527
+ request,
528
+ ) => {
529
+ await this.putControlRequest({
530
+ type: "list-sql-schemas",
531
+ ...request,
532
+ });
533
+ return null;
534
+ };
535
+
526
536
  previewDataSourceConnection: EditRequests["previewDataSourceConnection"] =
527
537
  async (request) => {
528
538
  await this.putControlRequest({
@@ -37,6 +37,7 @@ import { useSetAppConfig } from "../config/config";
37
37
  import { useDataSourceActions } from "../datasets/data-source-connections";
38
38
  import type { ConnectionName } from "../datasets/engines";
39
39
  import {
40
+ PreviewSQLSchemaList,
40
41
  PreviewSQLTable,
41
42
  PreviewSQLTableList,
42
43
  ValidateSQL,
@@ -288,6 +289,9 @@ export function useMarimoKernelConnection(opts: {
288
289
  case "sql-table-list-preview":
289
290
  PreviewSQLTableList.resolve(msg.data.request_id, msg.data);
290
291
  return;
292
+ case "sql-schema-list-preview":
293
+ PreviewSQLSchemaList.resolve(msg.data.request_id, msg.data);
294
+ return;
291
295
  case "validate-sql-result":
292
296
  ValidateSQL.resolve(msg.data.request_id as RequestId, msg.data);
293
297
  return;
@@ -1,4 +0,0 @@
1
- import { t as apl } from "./apl-hy2nkDJ0.js";
2
- export {
3
- apl
4
- };
@@ -1,4 +0,0 @@
1
- import { t as asciiArmor } from "./asciiarmor-Bp85a1XA.js";
2
- export {
3
- asciiArmor
4
- };
@@ -1,4 +0,0 @@
1
- import { t as asn1 } from "./asn1-CCINh2Tb.js";
2
- export {
3
- asn1
4
- };
@@ -1,4 +0,0 @@
1
- import { t as brainfuck } from "./brainfuck-CWERNqpi.js";
2
- export {
3
- brainfuck
4
- };
@@ -1,30 +0,0 @@
1
- import "./purify.es-Co_dANLh.js";
2
- import "./chunk-S3R3BYOJ-CQOhwRBS.js";
3
- import { r as __name } from "./src-Bf2iLOlr.js";
4
- import "./chunk-ABZYJK2D-DFnIGLNd.js";
5
- import "./chunk-HN2XXSSU-E3n-Ys7Z.js";
6
- import "./chunk-CVBHYZKI-B_c5YBcW.js";
7
- import "./chunk-ATLVNIR6-4HgRPLgX.js";
8
- import "./dist-BGdYVvOu.js";
9
- import "./chunk-JA3XYJ7Z-B9-EWihm.js";
10
- import "./chunk-JZLCHNYA-CIx__-bR.js";
11
- import "./chunk-QXUST7PY-CaiIvoL5.js";
12
- import "./chunk-N4CR4FBY-Cl9KH_W1.js";
13
- import "./chunk-FMBD7UC4-B34QcQBj.js";
14
- import "./chunk-55IACEB6-hJraQgx2.js";
15
- import "./chunk-QN33PNHL-DV6ID85v.js";
16
- import { i as styles_default, n as classDiagram_default, r as classRenderer_v3_unified_default, t as ClassDB } from "./chunk-B4BG7PRW-Bp8FDZTb.js";
17
- var diagram = {
18
- parser: classDiagram_default,
19
- get db() {
20
- return new ClassDB();
21
- },
22
- renderer: classRenderer_v3_unified_default,
23
- styles: styles_default,
24
- init: /* @__PURE__ */ __name((e) => {
25
- e.class || (e.class = {}), e.class.arrowMarkerAbsolute = e.arrowMarkerAbsolute;
26
- }, "init")
27
- };
28
- export {
29
- diagram
30
- };
@@ -1,30 +0,0 @@
1
- import "./purify.es-Co_dANLh.js";
2
- import "./chunk-S3R3BYOJ-CQOhwRBS.js";
3
- import { r as __name } from "./src-Bf2iLOlr.js";
4
- import "./chunk-ABZYJK2D-DFnIGLNd.js";
5
- import "./chunk-HN2XXSSU-E3n-Ys7Z.js";
6
- import "./chunk-CVBHYZKI-B_c5YBcW.js";
7
- import "./chunk-ATLVNIR6-4HgRPLgX.js";
8
- import "./dist-BGdYVvOu.js";
9
- import "./chunk-JA3XYJ7Z-B9-EWihm.js";
10
- import "./chunk-JZLCHNYA-CIx__-bR.js";
11
- import "./chunk-QXUST7PY-CaiIvoL5.js";
12
- import "./chunk-N4CR4FBY-Cl9KH_W1.js";
13
- import "./chunk-FMBD7UC4-B34QcQBj.js";
14
- import "./chunk-55IACEB6-hJraQgx2.js";
15
- import "./chunk-QN33PNHL-DV6ID85v.js";
16
- import { i as styles_default, n as classDiagram_default, r as classRenderer_v3_unified_default, t as ClassDB } from "./chunk-B4BG7PRW-Bp8FDZTb.js";
17
- var diagram = {
18
- parser: classDiagram_default,
19
- get db() {
20
- return new ClassDB();
21
- },
22
- renderer: classRenderer_v3_unified_default,
23
- styles: styles_default,
24
- init: /* @__PURE__ */ __name((e) => {
25
- e.class || (e.class = {}), e.class.arrowMarkerAbsolute = e.arrowMarkerAbsolute;
26
- }, "init")
27
- };
28
- export {
29
- diagram
30
- };
@@ -1,4 +0,0 @@
1
- import { t as clojure } from "./clojure-ygiDe_M6.js";
2
- export {
3
- clojure
4
- };