@marimo-team/frontend 0.24.1-dev3 → 0.24.1-dev30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (588) hide show
  1. package/dist/assets/{CellStatus-B_dBNTJO.js → CellStatus-DdKYN88d.js} +1 -1
  2. package/dist/assets/{ConnectedDataExplorerComponent-DLvmqIcV.js → ConnectedDataExplorerComponent-CbTaTBJ8.js} +1 -1
  3. package/dist/assets/{JsonOutput-C5g_bqiZ.js → JsonOutput-htT793Wj.js} +7 -7
  4. package/dist/assets/LazyAnyLanguageCodeMirror-Bx0i_n8B.js +2 -0
  5. package/dist/assets/{MarimoErrorOutput-Cb0evuEp.js → MarimoErrorOutput-Db7coyFA.js} +7 -7
  6. package/dist/assets/{RenderHTML-BoN8Qu7U.js → RenderHTML-Cu5JtYZJ.js} +1 -1
  7. package/dist/assets/{RunButton-C3V3v58F.js → RunButton-BOnl_Dk8.js} +1 -1
  8. package/dist/assets/{abnfDiagram-N423BO3Z-BBbWbiyb.js → abnfDiagram-N423BO3Z-BhqlQxDe.js} +1 -1
  9. package/dist/assets/{add-cell-with-ai--yrESuLb.js → add-cell-with-ai-Chy4ITIT.js} +12 -12
  10. package/dist/assets/add-connection-dialog-DGYhyXo6.js +181 -0
  11. package/dist/assets/{agent-panel-i9R2vDC5.js → agent-panel--Nt4UmNj.js} +6 -6
  12. package/dist/assets/{ai-model-dropdown-Wvw4ot3v.js → ai-model-dropdown-BUCPZ0ND.js} +4 -4
  13. package/dist/assets/{any-language-editor-B92E_2Sy.js → any-language-editor-CV_jRt2A.js} +1 -1
  14. package/dist/assets/apl-sEsRK68R.js +1 -0
  15. package/dist/assets/app-config-button-BOxbrv3L.js +1 -0
  16. package/dist/assets/architecture-TIHT7OUA-CkB6_TwN.js +1 -0
  17. package/dist/assets/{architectureDiagram-T3A2C74G-DoGbg0qs.js → architectureDiagram-T3A2C74G-D_0znduP.js} +1 -1
  18. package/dist/assets/asciiarmor-CwCv7Lne.js +1 -0
  19. package/dist/assets/asn1-CuzWg-fh.js +1 -0
  20. package/dist/assets/{blob-XD7AvCQ1.js → blob-BVQSODqn.js} +1 -1
  21. package/dist/assets/{blockDiagram-VBNYF7ZC-Fapk5G8q.js → blockDiagram-VBNYF7ZC-DhnQkFJt.js} +1 -1
  22. package/dist/assets/brainfuck-CnnfS_cI.js +1 -0
  23. package/dist/assets/{c4Diagram-5PPSVZJV-DHpoGw8m.js → c4Diagram-5PPSVZJV-DAZWLixJ.js} +1 -1
  24. package/dist/assets/{cell-editor-CrWparei.js → cell-editor-DgOfL9Xv.js} +15 -15
  25. package/dist/assets/cell-link-Bx8FWjns.js +1 -0
  26. package/dist/assets/{cells-BvgwUKB9.js → cells-Biwqg0z6.js} +80 -80
  27. package/dist/assets/channel-97-i68Z5.js +1 -0
  28. package/dist/assets/{chat-display-CvI32cPI.js → chat-display-B2qUbgnh.js} +1 -1
  29. package/dist/assets/{chat-panel-nbCWEZX-.js → chat-panel-gxL2S-HQ.js} +2 -2
  30. package/dist/assets/{chat-ui-BmrjRgsi.js → chat-ui-BhnwgDpa.js} +1 -1
  31. package/dist/assets/{chunk-2GRJ4B5K-B92Uwj7z.js → chunk-2GRJ4B5K-BJlW2T7a.js} +1 -1
  32. package/dist/assets/{chunk-2Q5K7J3B-CjxRf8HM.js → chunk-2Q5K7J3B-BKHkc-hn.js} +1 -1
  33. package/dist/assets/{chunk-3NCLNEKW-D7adDEkj.js → chunk-3NCLNEKW-DYppyU2y.js} +1 -1
  34. package/dist/assets/{chunk-4I5QYGJK-Cce-HuZg.js → chunk-4I5QYGJK-o2gGFKEO.js} +1 -1
  35. package/dist/assets/{chunk-5FCAYU7R-BJ04i5uO.js → chunk-5FCAYU7R-B4Jz9Jv5.js} +1 -1
  36. package/dist/assets/{chunk-5FQGJX7Z-B4N_BMo6.js → chunk-5FQGJX7Z-BIDn9QG0.js} +2 -2
  37. package/dist/assets/{chunk-5HE753X5-DRFzJ7WN.js → chunk-5HE753X5-DySWu3WO.js} +1 -1
  38. package/dist/assets/{chunk-5JV3BV7I-BEi9dboc.js → chunk-5JV3BV7I-EFAb-cXP.js} +1 -1
  39. package/dist/assets/{chunk-5RXB4S5H-B63Jmiyu.js → chunk-5RXB4S5H-Bsyeqyau.js} +1 -1
  40. package/dist/assets/{chunk-5TONJI2A-C5JJwzzL.js → chunk-5TONJI2A-BtGpymP5.js} +1 -1
  41. package/dist/assets/{chunk-5VM5RSS4-CQG8Gkf2.js → chunk-5VM5RSS4-De48wE7I.js} +1 -1
  42. package/dist/assets/{chunk-6Q2QTUOP-CjNw1snm.js → chunk-6Q2QTUOP-UhOQcBq_.js} +1 -1
  43. package/dist/assets/{chunk-7BUUIJ7U-DFO0zbY5.js → chunk-7BUUIJ7U-VPkRElaC.js} +1 -1
  44. package/dist/assets/{chunk-7Z6QIM7H-BahVaiTb.js → chunk-7Z6QIM7H-CSiw9nlS.js} +1 -1
  45. package/dist/assets/{chunk-BIQX33UG-B1y9dy0P.js → chunk-BIQX33UG-Clm0kIyq.js} +1 -1
  46. package/dist/assets/{chunk-CQNSW5MT-BOOyLCfW.js → chunk-CQNSW5MT-CxPDGEiS.js} +1 -1
  47. package/dist/assets/{chunk-CYSBUYHQ-DAWZpY6r.js → chunk-CYSBUYHQ-Cx6JgR38.js} +1 -1
  48. package/dist/assets/{chunk-EMLP6XTP-Bj2I2iEi.js → chunk-EMLP6XTP-DrNgCa2u.js} +1 -1
  49. package/dist/assets/{chunk-GF5L2VYU-BA39vN3k.js → chunk-GF5L2VYU-B88HnHN4.js} +1 -1
  50. package/dist/assets/{chunk-I66GZJ75-CgJN5WrL.js → chunk-I66GZJ75-BWcitPjS.js} +3 -3
  51. package/dist/assets/{chunk-J7OUQ5F2-DK5phbYO.js → chunk-J7OUQ5F2-DuBXnQXx.js} +2 -2
  52. package/dist/assets/{chunk-JG7HCLWE-BEfUAeKb.js → chunk-JG7HCLWE-D4-rg2bS.js} +1 -1
  53. package/dist/assets/{chunk-JQJVKLGR-vTeSeIY7.js → chunk-JQJVKLGR-L5fl0mYk.js} +1 -1
  54. package/dist/assets/{chunk-JWPE2WC7-C-mBVSJi.js → chunk-JWPE2WC7-CIIO5B1k.js} +1 -1
  55. package/dist/assets/{chunk-KBJHAD2P-BKxl1MSu.js → chunk-KBJHAD2P-MvrqGNli.js} +1 -1
  56. package/dist/assets/{chunk-MOZMSUNE-C-RMDvp_.js → chunk-MOZMSUNE-t37mHxNa.js} +1 -1
  57. package/dist/assets/{chunk-NSK5VX7P-bxC5WUDr.js → chunk-NSK5VX7P-B_lLBcNS.js} +1 -1
  58. package/dist/assets/{chunk-OSBZ3O6U-DEYDoDYT.js → chunk-OSBZ3O6U-3f38erx3.js} +1 -1
  59. package/dist/assets/{chunk-QBLGF6JB-CBncH5PS.js → chunk-QBLGF6JB-CHob4JDY.js} +1 -1
  60. package/dist/assets/{chunk-QR6OTTB3-gGVLoYpg.js → chunk-QR6OTTB3-Xk5It1Th.js} +1 -1
  61. package/dist/assets/{chunk-R7FJI6CG-DWxNgy5y.js → chunk-R7FJI6CG-ClJ6eR5G.js} +1 -1
  62. package/dist/assets/{chunk-RYQCIY6F-DkXJx61e.js → chunk-RYQCIY6F-CZjjwaqg.js} +1 -1
  63. package/dist/assets/{chunk-U6XO7XAA-DWWxQ-OA.js → chunk-U6XO7XAA-Ct1fe-tp.js} +1 -1
  64. package/dist/assets/{chunk-UBXNYLIW-elhI8GOz.js → chunk-UBXNYLIW-XbwBj9py.js} +1 -1
  65. package/dist/assets/{chunk-W5SLKNZC-D_QNHYYQ.js → chunk-W5SLKNZC-DBMPI1Hf.js} +1 -1
  66. package/dist/assets/{chunk-WRU74C26-BU1GwH6E.js → chunk-WRU74C26-HbDQnuwB.js} +1 -1
  67. package/dist/assets/{chunk-XXDRQBXY-D_KNH1wc.js → chunk-XXDRQBXY-DyGGngH3.js} +1 -1
  68. package/dist/assets/{chunk-YOTPTUD7-Nm5N45o4.js → chunk-YOTPTUD7-CC6lxUuz.js} +1 -1
  69. package/dist/assets/{chunk-ZIRB5QZD-DKs4kfC7.js → chunk-ZIRB5QZD-Giz-iAOC.js} +1 -1
  70. package/dist/assets/classDiagram-JCYQIIEL-Bi4N77rq.js +1 -0
  71. package/dist/assets/classDiagram-v2-OCEON4UE-DDmVp-9r.js +1 -0
  72. package/dist/assets/{clike-BAN6KopO.js → clike-tfWZyYoN.js} +1 -1
  73. package/dist/assets/clojure-Bninbb7T.js +1 -0
  74. package/dist/assets/cmake-BpuaQxBS.js +1 -0
  75. package/dist/assets/cobol-GPJ0dHQG.js +1 -0
  76. package/dist/assets/{code-block-37QAKDTI-DYj4t0uu.js → code-block-37QAKDTI-CxkZZ2yu.js} +1 -1
  77. package/dist/assets/coffeescript-D7gQHdB-.js +1 -0
  78. package/dist/assets/{column-preview-DMqGohE5.js → column-preview-BaRqZ9P8.js} +1 -1
  79. package/dist/assets/{command-palette-DCAiZSda.js → command-palette-Cbie8JV9.js} +1 -1
  80. package/dist/assets/{common-Dx_4ekWj.js → common-sBRwGAKy.js} +1 -1
  81. package/dist/assets/commonlisp-Cr4KGe18.js +1 -0
  82. package/dist/assets/{components-CozWCL5N.js → components-CGGSwziZ.js} +1 -1
  83. package/dist/assets/components-DsJAWbBR.js +1 -0
  84. package/dist/assets/{cose-bilkent-JH36ORCC-BItWxPmu.js → cose-bilkent-JH36ORCC-Bgowgmmd.js} +1 -1
  85. package/dist/assets/crystal-CsTMAwME.js +1 -0
  86. package/dist/assets/{css-DWLxGm3Z.js → css-COZ77Eal.js} +1 -1
  87. package/dist/assets/cynefin-VYW2F7L2-mNpr4SbP.js +1 -0
  88. package/dist/assets/{cynefinDiagram-MW4NZA55-xRolnN9H.js → cynefinDiagram-MW4NZA55-BjhYqu92.js} +1 -1
  89. package/dist/assets/cypher-CY21sZiF.js +1 -0
  90. package/dist/assets/d-CURHSrpr.js +1 -0
  91. package/dist/assets/{dagre-VZM6K2ZE--7CAsOPi.js → dagre-VZM6K2ZE-BEuyIkT6.js} +1 -1
  92. package/dist/assets/{data-grid-overlay-editor-CP2bSduR.js → data-grid-overlay-editor-BQUij2ly.js} +1 -1
  93. package/dist/assets/data-source-discovery-DCNYJylO.js +1 -0
  94. package/dist/assets/{datasource-Le540Ng6.js → datasource-DxCwZdAq.js} +2 -2
  95. package/dist/assets/dependency-graph-panel-CLOQ_RvL.js +5 -0
  96. package/dist/assets/{diagram-7IWD3JNH-B55VSdpL.js → diagram-7IWD3JNH-Bs3lgu-c.js} +1 -1
  97. package/dist/assets/{diagram-B4RE2ZJO-BDn7ASqI.js → diagram-B4RE2ZJO-Dth7brNz.js} +1 -1
  98. package/dist/assets/{diagram-LBJQPF4R-B51MZG2V.js → diagram-LBJQPF4R-BTVLtL0d.js} +1 -1
  99. package/dist/assets/{diagram-Q27KOJAE-Cwk0Mlin.js → diagram-Q27KOJAE-CP204u9a.js} +1 -1
  100. package/dist/assets/{diagram-UB23O5K3-BdYFaMnx.js → diagram-UB23O5K3-ClHQzHar.js} +1 -1
  101. package/dist/assets/diff-oDNdZgsT.js +1 -0
  102. package/dist/assets/dist-2VJQDijP.js +1 -0
  103. package/dist/assets/{dist-etjVl5BO.js → dist-BB2m_pT9.js} +1 -1
  104. package/dist/assets/{dist-CAHB5I2V.js → dist-BIoV7ItK.js} +1 -1
  105. package/dist/assets/{dist-D5yi7Y8o.js → dist-BKZjRJh7.js} +1 -1
  106. package/dist/assets/dist-BSndAsl2.js +1 -0
  107. package/dist/assets/{dist-CF4ci481.js → dist-BrBdlR-1.js} +1 -1
  108. package/dist/assets/dist-CULUasdr.js +1 -0
  109. package/dist/assets/{dist-CG7o1Txo.js → dist-CgdeWOxv.js} +1 -1
  110. package/dist/assets/{dist-x-uwJAB2.js → dist-D7Pn6TvC.js} +1 -1
  111. package/dist/assets/{dist-Ci0ANOWc.js → dist-DoCsyl8V.js} +1 -1
  112. package/dist/assets/{dist-BhAom09b.js → dist-Q_HuxBl8.js} +1 -1
  113. package/dist/assets/{dist-UMYZc9Uw.js → dist-URSEPeIQ.js} +1 -1
  114. package/dist/assets/dist-e3TiiDdA.js +1 -0
  115. package/dist/assets/{dist-0tTkix79.js → dist-gKSpDGw2.js} +1 -1
  116. package/dist/assets/{dist-5AUFDACg.js → dist-ziD6OB9m.js} +1 -1
  117. package/dist/assets/{dockerfile-vQlfzaHL.js → dockerfile-L84t-MVG.js} +1 -1
  118. package/dist/assets/{documentation-panel-RJNMjUK6.js → documentation-panel-D9w8PAT9.js} +1 -1
  119. package/dist/assets/{download-B8NwKEtr.js → download-CfUkZlw7.js} +1 -1
  120. package/dist/assets/dtd-Cy2_BeYL.js +1 -0
  121. package/dist/assets/dylan-Crd9Fb_0.js +1 -0
  122. package/dist/assets/{ebnfDiagram-BXEA7PRR-BeNZBLGl.js → ebnfDiagram-BXEA7PRR-D5itfLTD.js} +1 -1
  123. package/dist/assets/ecl-CfCmFoo0.js +1 -0
  124. package/dist/assets/{edit-page-CvL5WAqs.js → edit-page-DKAg2YW9.js} +6 -6
  125. package/dist/assets/eiffel-gIaoJqnl.js +1 -0
  126. package/dist/assets/elm-BFWuf0zw.js +1 -0
  127. package/dist/assets/{erDiagram-JOGREHBK-Md316MnW.js → erDiagram-JOGREHBK-8nttFkHX.js} +1 -1
  128. package/dist/assets/erlang-o_h5GHv6.js +1 -0
  129. package/dist/assets/{error-entries-yYB8PZoo.js → error-entries-DpvSrZSw.js} +3 -3
  130. package/dist/assets/{error-panel-Dr928gBs.js → error-panel-uRl1_l47.js} +1 -1
  131. package/dist/assets/{esm-CpCa6w8Q.js → esm-B7G79VOo.js} +1 -1
  132. package/dist/assets/eventmodeling-45OFAUF4-CmCnqr0B.js +1 -0
  133. package/dist/assets/factor-DhP48x0i.js +1 -0
  134. package/dist/assets/{factor-D96xahcJ.js → factor-aNENtHLj.js} +1 -1
  135. package/dist/assets/file-explorer-panel-DwA9Lprz.js +37 -0
  136. package/dist/assets/{file-icons-D39zbjsS.js → file-icons-DpREEjwW.js} +1 -1
  137. package/dist/assets/{file-name-input-BLH5fTEA.js → file-name-input-C7AQKuoU.js} +1 -1
  138. package/dist/assets/{floating-outline-UPrDtFZF.js → floating-outline-4I6DvqaR.js} +1 -1
  139. package/dist/assets/flowDiagram-UKHOOZJN-BBKoHcjJ.js +1 -0
  140. package/dist/assets/{focus-BArgHYf8.js → focus-CeTtpVjV.js} +1 -1
  141. package/dist/assets/{form-BvzcNsxB.js → form-B10bgcbQ.js} +1 -1
  142. package/dist/assets/{form-BN1AKD58.js → form-Cj9BLARR.js} +1 -1
  143. package/dist/assets/forth-B9culvwH.js +1 -0
  144. package/dist/assets/fortran-P9CMHntW.js +1 -0
  145. package/dist/assets/{ganttDiagram-PKOTCBZU-ZWAQtEyO.js → ganttDiagram-PKOTCBZU-lYZ3LZM4.js} +1 -1
  146. package/dist/assets/gas-aBeBIUA2.js +1 -0
  147. package/dist/assets/gherkin-BKojMN6Q.js +1 -0
  148. package/dist/assets/gitGraph-TEB2WS4Q-lhsXnAif.js +1 -0
  149. package/dist/assets/{gitGraphDiagram-DS77QQ5N-BLejYVyQ.js → gitGraphDiagram-DS77QQ5N-BMWEqU01.js} +1 -1
  150. package/dist/assets/{glide-data-editor-BNZxtmKn.js → glide-data-editor-Bo6hLXbn.js} +6 -6
  151. package/dist/assets/groovy-CePAd7wh.js +1 -0
  152. package/dist/assets/haskell-QHmsrbZx.js +1 -0
  153. package/dist/assets/haxe-CQV_8vKL.js +1 -0
  154. package/dist/assets/{home-page-DcO0NzuV.js → home-page-BNJihtii.js} +2 -2
  155. package/dist/assets/{html-to-image-DKEUbBwc.js → html-to-image-ChfBVn8-.js} +1 -1
  156. package/dist/assets/idl-Dd8N44Cm.js +1 -0
  157. package/dist/assets/index-CxZ6uZaz.css +2 -0
  158. package/dist/assets/index-T5Rre8Dj.js +38 -0
  159. package/dist/assets/info-DKCQHKI2-C7T8UDyU.js +1 -0
  160. package/dist/assets/infoDiagram-6WML65LV-DF1s-6Vl.js +2 -0
  161. package/dist/assets/{ishikawaDiagram-WSZJBQD7-DsUyhPdP.js → ishikawaDiagram-WSZJBQD7-DaG24pVU.js} +1 -1
  162. package/dist/assets/javascript-DSNeo7JU.js +1 -0
  163. package/dist/assets/{journeyDiagram-NVQOT4AX-Dtytysty.js → journeyDiagram-NVQOT4AX-Bjv5KPQN.js} +1 -1
  164. package/dist/assets/julia-noK_uk9P.js +1 -0
  165. package/dist/assets/{kanban-definition-27J2QSJJ-CtSUWi1q.js → kanban-definition-27J2QSJJ-3QfkEp5c.js} +1 -1
  166. package/dist/assets/katex-D7rQd2tt.js +1 -0
  167. package/dist/assets/{layout-C5In1pVG.js → layout-YPBtS2D6.js} +5 -5
  168. package/dist/assets/livescript-YKkeujLh.js +1 -0
  169. package/dist/assets/{logs-panel-DItocggZ.js → logs-panel-ClE58_4G.js} +1 -1
  170. package/dist/assets/{loro_wasm_bg-Cei5H7n0.js → loro_wasm_bg-Bhj1szFH.js} +1 -1
  171. package/dist/assets/lua-fLqC1mOj.js +1 -0
  172. package/dist/assets/{markdown-renderer-D7RLn6TA.js → markdown-renderer-BOS4jZLt.js} +3 -3
  173. package/dist/assets/mathematica-BEqGrvB0.js +1 -0
  174. package/dist/assets/mbox-9uehSvC8.js +1 -0
  175. package/dist/assets/{mermaid-4DMBBIKO-oaGD2RAq.js → mermaid-4DMBBIKO-VnWrwEGQ.js} +1 -1
  176. package/dist/assets/{mermaid-D7qPJTl5.js → mermaid-DrH-G40O.js} +3 -3
  177. package/dist/assets/{mermaid-parser.core-C1pvq6V4.js → mermaid-parser.core-7L0n-40M.js} +2 -2
  178. package/dist/assets/{mhchem-ByBXJmVs.js → mhchem-jUQ3W9QS.js} +1 -1
  179. package/dist/assets/{mindmap-definition-FAOFIHXS-BdiofJNg.js → mindmap-definition-FAOFIHXS-BI-5PR09.js} +1 -1
  180. package/dist/assets/mirc-BTX_WxCv.js +1 -0
  181. package/dist/assets/mllike-LThTvO6F.js +1 -0
  182. package/dist/assets/modelica-ClexNQK-.js +1 -0
  183. package/dist/assets/mscgen-Cr-Z_Sdd.js +1 -0
  184. package/dist/assets/mumps-G_BfPdvs.js +1 -0
  185. package/dist/assets/{name-cell-input-jausH-CL.js → name-cell-input-UMsLssMV.js} +1 -1
  186. package/dist/assets/nsis-CBRC0JIr.js +1 -0
  187. package/dist/assets/{nsis-gzbsJ5t0.js → nsis-CNBWu0HQ.js} +1 -1
  188. package/dist/assets/ntriples-DrvRq09t.js +1 -0
  189. package/dist/assets/{number-overlay-editor-CrwfeUrx.js → number-overlay-editor-C-zZ00cy.js} +1 -1
  190. package/dist/assets/octave-BiPC57kS.js +1 -0
  191. package/dist/assets/{outline-panel-C_pASL6b.js → outline-panel-DweKocZK.js} +1 -1
  192. package/dist/assets/oz-DacpSh-q.js +1 -0
  193. package/dist/assets/{packages-panel-DTqur75g.js → packages-panel-Cbw5J5QD.js} +1 -1
  194. package/dist/assets/packet-7NZHBO7P-CJZ85ye7.js +1 -0
  195. package/dist/assets/panel-accordion-state-CgvX-ElJ.js +1 -0
  196. package/dist/assets/panels-DRv39UwA.js +4 -0
  197. package/dist/assets/pascal-BQpBPSms.js +1 -0
  198. package/dist/assets/{pegDiagram-VL7TDLO6-CUhl_uoo.js → pegDiagram-VL7TDLO6-Dr2AgOs7.js} +1 -1
  199. package/dist/assets/perl-BhMGfluR.js +1 -0
  200. package/dist/assets/pie-RZYD4A2V-DowYgF53.js +1 -0
  201. package/dist/assets/{pieDiagram-7S7Q4E2Y-BUJuppkz.js → pieDiagram-7S7Q4E2Y-CrBge38F.js} +1 -1
  202. package/dist/assets/pig-lTm9qLoi.js +1 -0
  203. package/dist/assets/powershell-3wPcC3I5.js +1 -0
  204. package/dist/assets/{process-output-ClE9lj2U.js → process-output-BMxr8Z3g.js} +1 -1
  205. package/dist/assets/properties-CfDlOPua.js +1 -0
  206. package/dist/assets/protobuf-DqtB_3Ds.js +1 -0
  207. package/dist/assets/pug-BendPilS.js +1 -0
  208. package/dist/assets/{pug-CfBtO6QD.js → pug-IDpseMj2.js} +1 -1
  209. package/dist/assets/puppet-CS4oS8k4.js +1 -0
  210. package/dist/assets/python-DwXz2aVG.js +1 -0
  211. package/dist/assets/q-CAmiN8ZZ.js +1 -0
  212. package/dist/assets/{quadrantDiagram-CIZ2JOQS-D1kqQfB1.js → quadrantDiagram-CIZ2JOQS-BE2ggXL5.js} +1 -1
  213. package/dist/assets/r-BVrS7OVn.js +1 -0
  214. package/dist/assets/radar-I7S5WNFK-CTSSWmoj.js +1 -0
  215. package/dist/assets/{radio-group-CSwRGU0A.js → radio-group-YNmbPL7y.js} +1 -1
  216. package/dist/assets/railroad-3IZDKUUU-B7NYUsSF.js +1 -0
  217. package/dist/assets/railroad-abnf-AHOZXSZD-YHDI2QY9.js +1 -0
  218. package/dist/assets/railroad-ebnf-EBAXGLYW-C63c8OB7.js +1 -0
  219. package/dist/assets/railroad-peg-LSFZ7HO6-Cjglh51C.js +1 -0
  220. package/dist/assets/{railroadDiagram-AXF67PYL-A0Qm-6po.js → railroadDiagram-AXF67PYL-DCQRdlxt.js} +1 -1
  221. package/dist/assets/{readonly-code-display-kRUXu5aJ.js → readonly-code-display-N9tCXdCz.js} +1 -1
  222. package/dist/assets/{readonly-python-code-BCOkadQf.js → readonly-python-code-BHrAhtGV.js} +1 -1
  223. package/dist/assets/{requirementDiagram-LRYGKXZP-Cq2ghiHc.js → requirementDiagram-LRYGKXZP-DwT1P9SV.js} +1 -1
  224. package/dist/assets/{reveal-component-DpjFw5UY.js → reveal-component-Cl6cd65E.js} +2 -2
  225. package/dist/assets/rpm-CdnUar42.js +1 -0
  226. package/dist/assets/ruby-BCel59B2.js +1 -0
  227. package/dist/assets/{run-page-BXPaOWqZ.js → run-page-Phwq7OJt.js} +1 -1
  228. package/dist/assets/{sankeyDiagram-W5VNT64P-RT9P6FJq.js → sankeyDiagram-W5VNT64P-DI3BRqfo.js} +1 -1
  229. package/dist/assets/sas-BmzKenFt.js +1 -0
  230. package/dist/assets/scheme-DkHD_m5P.js +1 -0
  231. package/dist/assets/{scratchpad-panel-GyB5PjiV.js → scratchpad-panel-CvihhlAP.js} +1 -1
  232. package/dist/assets/{sequenceDiagram-SI44F4Z6-Dk9UNsG3.js → sequenceDiagram-SI44F4Z6-BBkZRxiN.js} +1 -1
  233. package/dist/assets/session-panel-BmQ0PDHO.js +1 -0
  234. package/dist/assets/shell-BoNNN3zm.js +1 -0
  235. package/dist/assets/sieve-BXXK8f92.js +1 -0
  236. package/dist/assets/{sizeCapture-X5ZJPWSS-ce6Hf1Mn.js → sizeCapture-X5ZJPWSS-BwnqWK01.js} +1 -1
  237. package/dist/assets/{skeleton-CHVfqr51.js → skeleton-BsZq3Vmq.js} +1 -1
  238. package/dist/assets/smalltalk-BOqQhpHI.js +1 -0
  239. package/dist/assets/{snippets-panel-V4x4wLMQ.js → snippets-panel-cYP0GMUf.js} +1 -1
  240. package/dist/assets/sparql-edyZVkfL.js +1 -0
  241. package/dist/assets/spec-C_psFYbu.js +1 -0
  242. package/dist/assets/{src-Be2gSjc_.js → src-BydIU0H9.js} +1 -1
  243. package/dist/assets/{state-m2zUPztG.js → state-DJon00Ew.js} +1 -1
  244. package/dist/assets/{state-C7arWhwL.js → state-Dc5AjWPq.js} +2 -2
  245. package/dist/assets/{stateDiagram-OKZ733FA-b4p2-xPQ.js → stateDiagram-OKZ733FA-CKgejYo0.js} +1 -1
  246. package/dist/assets/stateDiagram-v2-UEYNNEHI-DGOHmIHi.js +1 -0
  247. package/dist/assets/stylus-D7JxHbZj.js +1 -0
  248. package/dist/assets/swift-BVf4glc7.js +1 -0
  249. package/dist/assets/{swimlanes-SLNWSIFB-BU8BFEOR.js → swimlanes-SLNWSIFB-CaRk1UjW.js} +2 -2
  250. package/dist/assets/swimlanesDiagram-ULZ7WXOC-B3waQOQb.js +8 -0
  251. package/dist/assets/tcl-Dj0fCfAi.js +1 -0
  252. package/dist/assets/textile-C2t_E40o.js +1 -0
  253. package/dist/assets/{timeline-definition-Z64GVDOM-D1kTYo17.js → timeline-definition-Z64GVDOM-eczfm7Uw.js} +1 -1
  254. package/dist/assets/toml-DaFUQW6l.js +1 -0
  255. package/dist/assets/{tracing-Cmwuiwj9.js → tracing-dGSNt8Nm.js} +1 -1
  256. package/dist/assets/{tracing-panel-CCXeYfOu.js → tracing-panel-CQCgx3e4.js} +2 -2
  257. package/dist/assets/{tree-actions-QMLf8Qhz.js → tree-actions-pW_UgP3m.js} +1 -1
  258. package/dist/assets/treeView-QDETBFTQ-CSvxEE7M.js +1 -0
  259. package/dist/assets/treemap-6X3UGDF4-CmweKwGi.js +1 -0
  260. package/dist/assets/troff-CYzkeKir.js +1 -0
  261. package/dist/assets/ttcn-CXYORWfg.js +1 -0
  262. package/dist/assets/ttcn-cfg-CaYX34bx.js +1 -0
  263. package/dist/assets/turtle-5bfs3D9s.js +1 -0
  264. package/dist/assets/{useCellActionButton-D8qyXNKv.js → useCellActionButton-De17Z9R3.js} +1 -1
  265. package/dist/assets/{useDeleteCell-Ctnxl8AT.js → useDeleteCell-BgFMPTmg.js} +1 -1
  266. package/dist/assets/{useDependencyPanelTab-CYSEZi6j.js → useDependencyPanelTab-w8VLtsK3.js} +1 -1
  267. package/dist/assets/{useNotebookActions-CxMrxNFT.js → useNotebookActions-BI53NQV3.js} +4 -4
  268. package/dist/assets/{useRunCells-DjQN3XYP.js → useRunCells-CAfRBo7h.js} +1 -1
  269. package/dist/assets/{useSplitCell-BG8Zd4lw.js → useSplitCell-N8Ohs-Pp.js} +1 -1
  270. package/dist/assets/{utils-Y4n-X10o.js → utils-Bp3MLwWq.js} +1 -1
  271. package/dist/assets/vb-CXQ5pSkV.js +1 -0
  272. package/dist/assets/vbscript-BZP_4BaN.js +1 -0
  273. package/dist/assets/{vega-component-1VoQOWvU.js → vega-component-DpKA6PEU.js} +1 -1
  274. package/dist/assets/{vega-embed-container-CH1lX0V6.js → vega-embed-container-D0V0wn9T.js} +1 -1
  275. package/dist/assets/velocity-BbHSi60j.js +1 -0
  276. package/dist/assets/{vennDiagram-T6HMQDX7-BhQR7L7x.js → vennDiagram-T6HMQDX7-BKrC4vk_.js} +1 -1
  277. package/dist/assets/verilog-Bw8NaRo-.js +1 -0
  278. package/dist/assets/vhdl-CkM1aKBX.js +1 -0
  279. package/dist/assets/wardley-OPB4EBWU-DKu5fTFq.js +1 -0
  280. package/dist/assets/{wardleyDiagram-T6FBY63Y-C6iZTOEK.js → wardleyDiagram-T6FBY63Y-BsBjXAQS.js} +1 -1
  281. package/dist/assets/webidl-C8MAcuKq.js +1 -0
  282. package/dist/assets/xquery-a81J2h4S.js +1 -0
  283. package/dist/assets/{xychartDiagram-ELKLHX3M-Hl9zZZJW.js → xychartDiagram-ELKLHX3M-i4ykddaR.js} +1 -1
  284. package/dist/assets/yacas-CjV2u_g7.js +1 -0
  285. package/dist/assets/z80-C0uVpBhe.js +1 -0
  286. package/dist/index.html +28 -28
  287. package/package.json +1 -1
  288. package/src/components/app-config/optional-features.test.ts +78 -0
  289. package/src/components/app-config/optional-features.tsx +33 -6
  290. package/src/components/data-table/__tests__/column_formatting.test.ts +7 -0
  291. package/src/components/data-table/charts/__tests__/schemas.test.ts +17 -2
  292. package/src/components/data-table/charts/chart-spec/types.ts +2 -0
  293. package/src/components/data-table/column-formatting/feature.ts +1 -0
  294. package/src/components/data-table/column-formatting/types.ts +1 -0
  295. package/src/components/data-table/column-summary/chart-spec-model.tsx +1 -0
  296. package/src/components/data-table/column-summary/column-summary.tsx +1 -0
  297. package/src/components/data-table/columns.tsx +4 -3
  298. package/src/components/datasets/__tests__/icons.test.ts +10 -2
  299. package/src/components/datasets/icons.tsx +4 -0
  300. package/src/components/datasources/__tests__/components.test.tsx +14 -1
  301. package/src/components/datasources/datasources.tsx +2 -40
  302. package/src/components/editor/chrome/panels/components.tsx +35 -0
  303. package/src/components/editor/chrome/panels/file-explorer-panel.tsx +10 -0
  304. package/src/components/editor/chrome/panels/session-panel.tsx +12 -4
  305. package/src/components/editor/connections/__tests__/quick-add-data-sources.test.tsx +2 -0
  306. package/src/components/editor/connections/add-connection-dialog.tsx +5 -1
  307. package/src/components/editor/connections/quick-add-data-sources.tsx +11 -7
  308. package/src/components/editor/connections/storage/__tests__/__snapshots__/as-code.test.ts.snap +43 -0
  309. package/src/components/editor/connections/storage/__tests__/as-code.test.ts +127 -0
  310. package/src/components/editor/connections/storage/add-storage-form.tsx +11 -1
  311. package/src/components/editor/connections/storage/as-code.ts +30 -1
  312. package/src/components/editor/connections/storage/schemas.ts +63 -0
  313. package/src/core/codemirror/code-lens/__tests__/popover.test.ts +13 -0
  314. package/src/core/codemirror/code-lens/popover.tsx +11 -5
  315. package/src/core/codemirror/language/languages/sql/__tests__/renderers.test.tsx +15 -4
  316. package/src/core/codemirror/language/languages/sql/renderers.tsx +1 -0
  317. package/src/core/datasets/__tests__/data-source-discovery.test.ts +277 -0
  318. package/src/core/datasets/data-source-connections.ts +36 -0
  319. package/src/core/datasets/data-source-discovery.ts +92 -0
  320. package/src/core/kernel/messages.ts +1 -0
  321. package/src/core/websocket/useMarimoKernelConnection.tsx +11 -3
  322. package/src/hooks/useDataSourceDiscovery.ts +50 -9
  323. package/src/plugins/impl/MatrixPlugin.tsx +256 -35
  324. package/src/plugins/impl/__tests__/DataEditorPlugin.test.ts +13 -1
  325. package/src/plugins/impl/__tests__/MatrixPlugin.test.tsx +540 -3
  326. package/src/plugins/impl/data-editor/glide-data-editor.tsx +1 -0
  327. package/src/plugins/impl/data-editor/glide-utils.ts +1 -0
  328. package/src/plugins/impl/data-frames/__tests__/schema.test.ts +9 -1
  329. package/src/plugins/impl/data-frames/utils/__tests__/operators.test.ts +8 -0
  330. package/src/plugins/impl/data-frames/utils/operators.ts +1 -1
  331. package/src/plugins/impl/vega/__tests__/vega.test.ts +22 -4
  332. package/src/plugins/impl/vega/utils.ts +3 -0
  333. package/dist/assets/LazyAnyLanguageCodeMirror-DUvRReKp.js +0 -2
  334. package/dist/assets/add-connection-dialog-DHyonb9T.js +0 -178
  335. package/dist/assets/apl-B-7blH-b.js +0 -1
  336. package/dist/assets/app-config-button-DnmQED8O.js +0 -1
  337. package/dist/assets/architecture-TIHT7OUA-YhortkiJ.js +0 -1
  338. package/dist/assets/asciiarmor-D3K8amZ9.js +0 -1
  339. package/dist/assets/asn1-UGGn98tp.js +0 -1
  340. package/dist/assets/brainfuck-B4y4U3tg.js +0 -1
  341. package/dist/assets/cell-link-WDIIwzUn.js +0 -1
  342. package/dist/assets/channel-B8YARzTa.js +0 -1
  343. package/dist/assets/classDiagram-JCYQIIEL-CjNLIEON.js +0 -1
  344. package/dist/assets/classDiagram-v2-OCEON4UE-DB1cPPS3.js +0 -1
  345. package/dist/assets/clojure-BAZ-ejkG.js +0 -1
  346. package/dist/assets/cmake-jWn0xN9y.js +0 -1
  347. package/dist/assets/cobol-XqY9jaWP.js +0 -1
  348. package/dist/assets/coffeescript-DI1jfZHX.js +0 -1
  349. package/dist/assets/commonlisp-UKb01OlU.js +0 -1
  350. package/dist/assets/components-DVs9Yu7X.js +0 -1
  351. package/dist/assets/crystal-DOvjTBWA.js +0 -1
  352. package/dist/assets/cynefin-VYW2F7L2-Dob7zmDv.js +0 -1
  353. package/dist/assets/cypher-CLDhu2ae.js +0 -1
  354. package/dist/assets/d-C0ecUZk9.js +0 -1
  355. package/dist/assets/dependency-graph-panel-BsdBM_AS.js +0 -5
  356. package/dist/assets/diff-657cCCVc.js +0 -1
  357. package/dist/assets/dist-BbNJKBqf.js +0 -1
  358. package/dist/assets/dist-CJU3fYUR.js +0 -1
  359. package/dist/assets/dist-ClAayqDs.js +0 -1
  360. package/dist/assets/dist-Dk7PW1P8.js +0 -1
  361. package/dist/assets/dtd-DSiK7Qgi.js +0 -1
  362. package/dist/assets/dylan-07d5-7Q9.js +0 -1
  363. package/dist/assets/ecl-CSTUHiwq.js +0 -1
  364. package/dist/assets/eiffel-DR99GcsM.js +0 -1
  365. package/dist/assets/elm-Cmh0iW6J.js +0 -1
  366. package/dist/assets/erlang-CS9Yc6UC.js +0 -1
  367. package/dist/assets/eventmodeling-45OFAUF4-Dfz56MmV.js +0 -1
  368. package/dist/assets/factor-DjB27Lcf.js +0 -1
  369. package/dist/assets/file-explorer-panel-Brf39GIG.js +0 -37
  370. package/dist/assets/flowDiagram-UKHOOZJN-DuIOw7R3.js +0 -1
  371. package/dist/assets/forth-UwTUu7NY.js +0 -1
  372. package/dist/assets/fortran-cptiB4gJ.js +0 -1
  373. package/dist/assets/gas-ajMbd9Us.js +0 -1
  374. package/dist/assets/gherkin-ClYkalzE.js +0 -1
  375. package/dist/assets/gitGraph-TEB2WS4Q-DHatMnz3.js +0 -1
  376. package/dist/assets/groovy-BY-gt7AW.js +0 -1
  377. package/dist/assets/haskell-D1BeJ7SR.js +0 -1
  378. package/dist/assets/haxe-QOq5WFXx.js +0 -1
  379. package/dist/assets/idl-3-UcEGx7.js +0 -1
  380. package/dist/assets/index-CXJA6BU5.js +0 -38
  381. package/dist/assets/index-WoaGtlKd.css +0 -2
  382. package/dist/assets/info-DKCQHKI2-DL5sXjlh.js +0 -1
  383. package/dist/assets/infoDiagram-6WML65LV-w0LSkwW5.js +0 -2
  384. package/dist/assets/javascript-CorD44JN.js +0 -1
  385. package/dist/assets/julia-BYqTtTAl.js +0 -1
  386. package/dist/assets/katex-DWt0esek.js +0 -1
  387. package/dist/assets/livescript-qYgfNnNE.js +0 -1
  388. package/dist/assets/lua-BCqCjdfz.js +0 -1
  389. package/dist/assets/mathematica-XKwMfn0d.js +0 -1
  390. package/dist/assets/mbox-BnkeOnif.js +0 -1
  391. package/dist/assets/mirc-ipoElhai.js +0 -1
  392. package/dist/assets/mllike-DmouQ5Dp.js +0 -1
  393. package/dist/assets/modelica-BtmmVsUf.js +0 -1
  394. package/dist/assets/mscgen-BHZmHZgz.js +0 -1
  395. package/dist/assets/mumps-oKfoFTl_.js +0 -1
  396. package/dist/assets/nsis-DDOPnuAW.js +0 -1
  397. package/dist/assets/ntriples-Dsyl_sOF.js +0 -1
  398. package/dist/assets/octave-CI5RGMPa.js +0 -1
  399. package/dist/assets/oz-D01pKAWx.js +0 -1
  400. package/dist/assets/packet-7NZHBO7P-Btbo_lPa.js +0 -1
  401. package/dist/assets/panel-accordion-state-DaMmC7UV.js +0 -1
  402. package/dist/assets/panels-B2LHXcJf.js +0 -4
  403. package/dist/assets/pascal-DGXfnIFD.js +0 -1
  404. package/dist/assets/perl-gZ7qIkF-.js +0 -1
  405. package/dist/assets/pie-RZYD4A2V-DHlhKt-c.js +0 -1
  406. package/dist/assets/pig-Cb90ayl-.js +0 -1
  407. package/dist/assets/powershell-_YxddSL3.js +0 -1
  408. package/dist/assets/properties-sU50dmvt.js +0 -1
  409. package/dist/assets/protobuf-DFdF-yfo.js +0 -1
  410. package/dist/assets/pug-DwUB-C24.js +0 -1
  411. package/dist/assets/puppet-DtKzwiZ6.js +0 -1
  412. package/dist/assets/python-BMLOKYmk.js +0 -1
  413. package/dist/assets/q-BF1zXMdP.js +0 -1
  414. package/dist/assets/r-BQiKhVSI.js +0 -1
  415. package/dist/assets/radar-I7S5WNFK-DZTiwd45.js +0 -1
  416. package/dist/assets/railroad-3IZDKUUU-DxAKHi3X.js +0 -1
  417. package/dist/assets/railroad-abnf-AHOZXSZD-DgPW-bTs.js +0 -1
  418. package/dist/assets/railroad-ebnf-EBAXGLYW-6hsaKhfa.js +0 -1
  419. package/dist/assets/railroad-peg-LSFZ7HO6-Sj3gnwID.js +0 -1
  420. package/dist/assets/rpm-v7UTuaHo.js +0 -1
  421. package/dist/assets/ruby-Cw43FpG3.js +0 -1
  422. package/dist/assets/sas-BIKscqlp.js +0 -1
  423. package/dist/assets/scheme-CGic3hSV.js +0 -1
  424. package/dist/assets/session-panel-CidCOM4_.js +0 -1
  425. package/dist/assets/shell-DAh545tm.js +0 -1
  426. package/dist/assets/sieve-bGkng63-.js +0 -1
  427. package/dist/assets/smalltalk-fIw53lm8.js +0 -1
  428. package/dist/assets/sparql-CHbJrAY_.js +0 -1
  429. package/dist/assets/spec-NeCHOv2Z.js +0 -1
  430. package/dist/assets/stateDiagram-v2-UEYNNEHI-DVggkZEP.js +0 -1
  431. package/dist/assets/stylus-3Q5WfXqT.js +0 -1
  432. package/dist/assets/swift-MKxc2knl.js +0 -1
  433. package/dist/assets/swimlanesDiagram-ULZ7WXOC-Dl8Izbnv.js +0 -8
  434. package/dist/assets/tcl-D3fKhQc_.js +0 -1
  435. package/dist/assets/textile-Bi_LEJQ3.js +0 -1
  436. package/dist/assets/toml-Dt-PBqwt.js +0 -1
  437. package/dist/assets/treeView-QDETBFTQ-DI-AuAry.js +0 -1
  438. package/dist/assets/treemap-6X3UGDF4-BikstUU5.js +0 -1
  439. package/dist/assets/troff-BSU-rxoD.js +0 -1
  440. package/dist/assets/ttcn-BmLjonVM.js +0 -1
  441. package/dist/assets/ttcn-cfg-TPTcP0Eh.js +0 -1
  442. package/dist/assets/turtle-HafmShQq.js +0 -1
  443. package/dist/assets/vb-CUif5uGR.js +0 -1
  444. package/dist/assets/vbscript-DWVPFl59.js +0 -1
  445. package/dist/assets/velocity-BJl8UzB4.js +0 -1
  446. package/dist/assets/verilog-B4LUPYXy.js +0 -1
  447. package/dist/assets/vhdl-C91h3ipk.js +0 -1
  448. package/dist/assets/wardley-OPB4EBWU-CeBjkYYY.js +0 -1
  449. package/dist/assets/webidl-DOay1zbU.js +0 -1
  450. package/dist/assets/xquery-Cez7jD_4.js +0 -1
  451. package/dist/assets/yacas-CSQEXB_S.js +0 -1
  452. package/dist/assets/z80-CJbYj7Wr.js +0 -1
  453. package/src/hooks/__tests__/useDataSourceDiscovery.test.ts +0 -80
  454. /package/dist/assets/{ImageComparisonComponent-BcnwhFjf.js → ImageComparisonComponent-f3_KuPvA.js} +0 -0
  455. /package/dist/assets/{Inputs-DrAa-p6i.js → Inputs-S6F4fq1S.js} +0 -0
  456. /package/dist/assets/{Plot-93LEWfvh.js → Plot-BKmsCw4V.js} +0 -0
  457. /package/dist/assets/{apl-CPlG1HX3.js → apl-HjCOpvY9.js} +0 -0
  458. /package/dist/assets/{asciiarmor-DV_pcocJ.js → asciiarmor-CZUdQ8YG.js} +0 -0
  459. /package/dist/assets/{asn1-DPxWcGvG.js → asn1-D9fbSxQp.js} +0 -0
  460. /package/dist/assets/{asterisk-1BK_fEUT.js → asterisk-GbGHf9GU.js} +0 -0
  461. /package/dist/assets/{brainfuck-CGDdBVNO.js → brainfuck-DoACnXtY.js} +0 -0
  462. /package/dist/assets/{chunk-KEIR6QF5-Dy1GNnFZ.js → chunk-KEIR6QF5-DALP8ow3.js} +0 -0
  463. /package/dist/assets/{chunk-Y2CYZVJY-Ci6ix4_L.js → chunk-Y2CYZVJY-BLNiTciS.js} +0 -0
  464. /package/dist/assets/{clear-button-D_bGby_-.js → clear-button-ChZ5WLVn.js} +0 -0
  465. /package/dist/assets/{click-outside-container-Ble4snjv.js → click-outside-container-B_JD95Fi.js} +0 -0
  466. /package/dist/assets/{clike-D91DrsBh.js → clike-BvT_OTqG.js} +0 -0
  467. /package/dist/assets/{clojure-B0eb_-2q.js → clojure-DObunWgq.js} +0 -0
  468. /package/dist/assets/{cmake-COzUvjiS.js → cmake-Bn1dmbG8.js} +0 -0
  469. /package/dist/assets/{cobol-DW4FSnmb.js → cobol-CJ0xj-s7.js} +0 -0
  470. /package/dist/assets/{coffeescript-CommR2mv.js → coffeescript-DSHpWjh8.js} +0 -0
  471. /package/dist/assets/{common-keywords-CL5lDC0w.js → common-keywords-DpBQRN1C.js} +0 -0
  472. /package/dist/assets/{commonlisp-FR_N9RJL.js → commonlisp-C8BmLRoV.js} +0 -0
  473. /package/dist/assets/{crystal-CAN7bz25.js → crystal-Ca8nJT--.js} +0 -0
  474. /package/dist/assets/{css-DmLg8a0m.js → css-CY56PGqI.js} +0 -0
  475. /package/dist/assets/{cypher-BzSJn05x.js → cypher-DkMgpwTD.js} +0 -0
  476. /package/dist/assets/{cytoscape.esm-DMX0DoYf.js → cytoscape.esm-ohuTJsWI.js} +0 -0
  477. /package/dist/assets/{d-UpmnByGo.js → d-De6gURe0.js} +0 -0
  478. /package/dist/assets/{diff-DRpitNo9.js → diff-D9jknSNL.js} +0 -0
  479. /package/dist/assets/{dist-CjgCY_Ws.js → dist-B8OryoSI.js} +0 -0
  480. /package/dist/assets/{dist-DcguuZEe.js → dist-B_Q1ayL4.js} +0 -0
  481. /package/dist/assets/{dist-BY5C0xw-.js → dist-BdgY02GB.js} +0 -0
  482. /package/dist/assets/{dist-5zzK1Bpl.js → dist-BpyRMlx3.js} +0 -0
  483. /package/dist/assets/{dist-Bp45OWJJ.js → dist-BvDn6jZn.js} +0 -0
  484. /package/dist/assets/{dist-CSEj3YUH.js → dist-C1_zNuc7.js} +0 -0
  485. /package/dist/assets/{dist-CYcHr3tv.js → dist-C3M1h1bY.js} +0 -0
  486. /package/dist/assets/{dist-iZqQ8eEZ.js → dist-CiELQ2ik.js} +0 -0
  487. /package/dist/assets/{dist-Op2xySIC.js → dist-CnESRnx2.js} +0 -0
  488. /package/dist/assets/{dist-SgSQKL07.js → dist-Cnb7x5X_.js} +0 -0
  489. /package/dist/assets/{dist-CqO2FBHV.js → dist-CtsSPT78.js} +0 -0
  490. /package/dist/assets/{dist-BQMAD-re.js → dist-DDuxOj5E.js} +0 -0
  491. /package/dist/assets/{dist-C3YC038-.js → dist-DXl-iyI_.js} +0 -0
  492. /package/dist/assets/{dist-VHnyClcl.js → dist-DcwGajoh.js} +0 -0
  493. /package/dist/assets/{dist-ChJa98Av.js → dist-M9OI1ywz.js} +0 -0
  494. /package/dist/assets/{dist-BTX2QySO.js → dist-oc6kOhWh.js} +0 -0
  495. /package/dist/assets/{dist-AhQW5KN1.js → dist-rcsCwDst.js} +0 -0
  496. /package/dist/assets/{dtd-CQV9N2ok.js → dtd-B5FJ4BXV.js} +0 -0
  497. /package/dist/assets/{duckdb-keywords-CKBoTxEb.js → duckdb-keywords-DrrKcwLz.js} +0 -0
  498. /package/dist/assets/{dylan-Bp98yT5y.js → dylan-zZheNs86.js} +0 -0
  499. /package/dist/assets/{ebnf-CviyCkP7.js → ebnf-DuKzoTsP.js} +0 -0
  500. /package/dist/assets/{ecl-BgtQ3zu5.js → ecl-BcK76Ow3.js} +0 -0
  501. /package/dist/assets/{eiffel-Cu14O7Gi.js → eiffel-KaaY88la.js} +0 -0
  502. /package/dist/assets/{elm-Dp1dn40k.js → elm-B7-LHWcm.js} +0 -0
  503. /package/dist/assets/{erlang-DdogJjdp.js → erlang-DaphDTvj.js} +0 -0
  504. /package/dist/assets/{esm-DbAcs2Px.js → esm-BKF5e2-i.js} +0 -0
  505. /package/dist/assets/{fcl-DjfeL5F6.js → fcl-DopXl_Cb.js} +0 -0
  506. /package/dist/assets/{forth-Dd0r86IP.js → forth-BKlt87ew.js} +0 -0
  507. /package/dist/assets/{fortran-4qvtlW4z.js → fortran-DDZOpuZf.js} +0 -0
  508. /package/dist/assets/{gallery-page-CtBVFIhS.js → gallery-page-4_c4sSjL.js} +0 -0
  509. /package/dist/assets/{gas-DqwqZHXy.js → gas-CDn7Y-Gk.js} +0 -0
  510. /package/dist/assets/{gherkin-DMxJEDh5.js → gherkin-eZ5FXLoA.js} +0 -0
  511. /package/dist/assets/{github-6F3RzPv3.js → github-CE-ZvKrv.js} +0 -0
  512. /package/dist/assets/{groovy-DA_MxBua.js → groovy-BwhPb7Fz.js} +0 -0
  513. /package/dist/assets/{haskell-B_hi8VEK.js → haskell-Dnk7SiND.js} +0 -0
  514. /package/dist/assets/{haxe-D-I6YeRN.js → haxe-lllox-eQ.js} +0 -0
  515. /package/dist/assets/{http-VleqgIZJ.js → http-BxcKXOao.js} +0 -0
  516. /package/dist/assets/{idl-CteRrHSs.js → idl-DgcPYEkx.js} +0 -0
  517. /package/dist/assets/{javascript-Cq9DsvSW.js → javascript-COkX3Xca.js} +0 -0
  518. /package/dist/assets/{julia-bHGj6eLp.js → julia-D-oyKrif.js} +0 -0
  519. /package/dist/assets/{katex-B9FkzyvX.js → katex-DX0AbnS9.js} +0 -0
  520. /package/dist/assets/{kiosk-mode-B8UhlOLw.js → kiosk-mode-CNguD0K4.js} +0 -0
  521. /package/dist/assets/{links-STGde2qx.js → links-CWv16njv.js} +0 -0
  522. /package/dist/assets/{livescript-C72YlTeO.js → livescript-D_iKnN6P.js} +0 -0
  523. /package/dist/assets/{loro_wasm_bg-DIEeF9jI.js → loro_wasm_bg-wiZiHqmd.js} +0 -0
  524. /package/dist/assets/{lua-DAtJrHXr.js → lua-DvA1dcWk.js} +0 -0
  525. /package/dist/assets/{marimo-icons-CW8-Txe-.js → marimo-icons-BT3Q9hP-.js} +0 -0
  526. /package/dist/assets/{mathematica-DGp7b8Lx.js → mathematica-BsU_wLgp.js} +0 -0
  527. /package/dist/assets/{mbox-C35KjfEV.js → mbox-C0XhbFpn.js} +0 -0
  528. /package/dist/assets/{mirc-BRCHEPv1.js → mirc-CHTyPhxQ.js} +0 -0
  529. /package/dist/assets/{mllike-D7ajla-U.js → mllike-CUPiTPoj.js} +0 -0
  530. /package/dist/assets/{modelica-0RGVL4ie.js → modelica-CY01YUSk.js} +0 -0
  531. /package/dist/assets/{mscgen-C7Ohs4Tl.js → mscgen-DrdJ4BfA.js} +0 -0
  532. /package/dist/assets/{mumps-Cgag5Xef.js → mumps-oDd7O1nq.js} +0 -0
  533. /package/dist/assets/{nginx-D7OKXoUe.js → nginx-BFZZWp0k.js} +0 -0
  534. /package/dist/assets/{node-sql-parser-DE2GpgS7.js → node-sql-parser-BAQ3SN57.js} +0 -0
  535. /package/dist/assets/{ntriples-oQv5c69K.js → ntriples-Kz6Omt8T.js} +0 -0
  536. /package/dist/assets/{octave-BMTXs4lo.js → octave-D4G4nAd-.js} +0 -0
  537. /package/dist/assets/{oz-CuHYwo8r.js → oz-BMPClN8a.js} +0 -0
  538. /package/dist/assets/{pascal-eFKoVV2p.js → pascal-PjzHq8gx.js} +0 -0
  539. /package/dist/assets/{perl-B1OqOW8w.js → perl-BJehkHc4.js} +0 -0
  540. /package/dist/assets/{pig-gIrBDx27.js → pig-BErUKXIE.js} +0 -0
  541. /package/dist/assets/{powershell-3fQF2XND.js → powershell-C9VPAjfT.js} +0 -0
  542. /package/dist/assets/{properties-D4HHpZmU.js → properties-C9_sS9KX.js} +0 -0
  543. /package/dist/assets/{protobuf-DFSTKR0L.js → protobuf-CTL_9hGv.js} +0 -0
  544. /package/dist/assets/{puppet-BAISgXk9.js → puppet-DiwkFvYr.js} +0 -0
  545. /package/dist/assets/{python-mPctBCbA.js → python-B6qWXHOF.js} +0 -0
  546. /package/dist/assets/{q-CYeV5Dbb.js → q-DK2HS4ce.js} +0 -0
  547. /package/dist/assets/{r-Ds4UrjIV.js → r-DaU8ID7q.js} +0 -0
  548. /package/dist/assets/{rough.esm-CR3HSVpq.js → rough.esm-DsKVbNkz.js} +0 -0
  549. /package/dist/assets/{rpm-DV5-r6dM.js → rpm-B1zWd_-L.js} +0 -0
  550. /package/dist/assets/{ruby-B9qrycrI.js → ruby-e8Zeo08a.js} +0 -0
  551. /package/dist/assets/{runs-B8nVipXz.js → runs-0Fl_whti.js} +0 -0
  552. /package/dist/assets/{sas-Cd7L1ZOe.js → sas-CtNe7N_s.js} +0 -0
  553. /package/dist/assets/{scheme-L6Kva-Kc.js → scheme-D7VUNgy0.js} +0 -0
  554. /package/dist/assets/{secrets-panel-CVQIJOsr.js → secrets-panel-C51QhQhQ.js} +0 -0
  555. /package/dist/assets/{shell-Ck42V1Kn.js → shell-95QiTNIY.js} +0 -0
  556. /package/dist/assets/{sieve-DfSJcUfS.js → sieve-4wk3Woa7.js} +0 -0
  557. /package/dist/assets/{simple-mode-CfoR0Lvg.js → simple-mode-C1B3ue4E.js} +0 -0
  558. /package/dist/assets/{smalltalk-CT418Iph.js → smalltalk-BFPyGpl7.js} +0 -0
  559. /package/dist/assets/{solr-CDPrSrj5.js → solr-BCnpA4mK.js} +0 -0
  560. /package/dist/assets/{sparql-BlJ_cLEt.js → sparql-BMyoR-t0.js} +0 -0
  561. /package/dist/assets/{spreadsheet-BsJYzkOI.js → spreadsheet-C39QEIvH.js} +0 -0
  562. /package/dist/assets/{sql-F2Gt8FSJ.js → sql-CE9Btgz4.js} +0 -0
  563. /package/dist/assets/{stylus-92qIiGm1.js → stylus-BbMWgEUg.js} +0 -0
  564. /package/dist/assets/{swift-gZzicbJu.js → swift-BCakwsWN.js} +0 -0
  565. /package/dist/assets/{swiper-component-LOm8fzBm.js → swiper-component-DpFUDvyR.js} +0 -0
  566. /package/dist/assets/{tcl-CtgoBYkk.js → tcl-Dupz7YXC.js} +0 -0
  567. /package/dist/assets/{terminal-Bo6pnmSU.js → terminal-RAduwztq.js} +0 -0
  568. /package/dist/assets/{textile-Du3RzJ2D.js → textile-CMQNVB0J.js} +0 -0
  569. /package/dist/assets/{tiddlywiki-BiVbsin5.js → tiddlywiki-CIp8hgce.js} +0 -0
  570. /package/dist/assets/{tiki-BjQr6gnj.js → tiki-C22wqq7_.js} +0 -0
  571. /package/dist/assets/{toml-HcF44TVB.js → toml-CDlujHqn.js} +0 -0
  572. /package/dist/assets/{troff-xbwT4huN.js → troff-Dxr_rPl0.js} +0 -0
  573. /package/dist/assets/{ttcn-cfg-jWDg1i50.js → ttcn-cfg-_MoagO29.js} +0 -0
  574. /package/dist/assets/{ttcn-phKysj_0.js → ttcn-iRE0hZ1i.js} +0 -0
  575. /package/dist/assets/{turtle-CPC48wcy.js → turtle-C00vzWJK.js} +0 -0
  576. /package/dist/assets/{types-C7hjolXC.js → types-l38AsXoI.js} +0 -0
  577. /package/dist/assets/{useInterval-CTStcSBb.js → useInterval-WeprorQN.js} +0 -0
  578. /package/dist/assets/{vb-BTubZ2rB.js → vb-CkVClY4-.js} +0 -0
  579. /package/dist/assets/{vbscript-B52mDFWM.js → vbscript-BAyqwxih.js} +0 -0
  580. /package/dist/assets/{velocity-BO3M1iFD.js → velocity-DizPkX9R.js} +0 -0
  581. /package/dist/assets/{verilog-CBz90JJu.js → verilog-BHLL_Z-1.js} +0 -0
  582. /package/dist/assets/{vhdl-CeQ1lGlV.js → vhdl-kw8S8KSM.js} +0 -0
  583. /package/dist/assets/{web-vitals-BaWpTOd5.js → web-vitals-DEQqQ7mh.js} +0 -0
  584. /package/dist/assets/{webidl-CRtF5pmu.js → webidl-BArrMnhe.js} +0 -0
  585. /package/dist/assets/{ws-CNqquaud.js → ws-B3l5rS71.js} +0 -0
  586. /package/dist/assets/{xquery-CFnbrHav.js → xquery-BVt_izxN.js} +0 -0
  587. /package/dist/assets/{yacas-KIC_JO6M.js → yacas-BFgb66eo.js} +0 -0
  588. /package/dist/assets/{z80-kGpw5_me.js → z80-CLywz-dK.js} +0 -0
@@ -7,6 +7,7 @@ import {
7
7
  CurlyBracesIcon,
8
8
  HashIcon,
9
9
  type LucideIcon,
10
+ MapPinIcon,
10
11
  ToggleLeftIcon,
11
12
  TypeIcon,
12
13
  } from "lucide-react";
@@ -27,6 +28,7 @@ export const DATA_TYPE_ICON: Record<DataType | SelectableDataType, LucideIcon> =
27
28
  number: HashIcon,
28
29
  string: TypeIcon,
29
30
  integer: HashIcon,
31
+ geometry: MapPinIcon,
30
32
  unknown: CurlyBracesIcon,
31
33
  };
32
34
 
@@ -56,6 +58,8 @@ export function getDataTypeColor(
56
58
  return "bg-(--purple-4)";
57
59
  case "string":
58
60
  return "bg-(--blue-4)";
61
+ case "geometry":
62
+ return "bg-(--cyan-4) dark:bg-(--cyan-5)";
59
63
  case "unknown":
60
64
  return "bg-(--slate-4) dark:bg-(--slate-6)";
61
65
  default:
@@ -12,7 +12,7 @@ describe("ColumnName", () => {
12
12
 
13
13
  try {
14
14
  const unrecognized = render(
15
- <ColumnName columnName="geom" dataType={"geometry" as DataType} />,
15
+ <ColumnName columnName="geom" dataType={"bogus_type" as DataType} />,
16
16
  );
17
17
  const unknown = render(
18
18
  <ColumnName columnName="geom" dataType="unknown" />,
@@ -26,4 +26,17 @@ describe("ColumnName", () => {
26
26
  warn.mockRestore();
27
27
  }
28
28
  });
29
+
30
+ it("renders geometry with a distinct icon", () => {
31
+ const geometry = render(
32
+ <ColumnName columnName="geom" dataType="geometry" />,
33
+ );
34
+ const unknown = render(<ColumnName columnName="geom" dataType="unknown" />);
35
+
36
+ expect(geometry.container.querySelector(".lucide-map-pin")).not.toBeNull();
37
+ expect(unknown.container.querySelector(".lucide-braces")).not.toBeNull();
38
+ expect(geometry.container.innerHTML).not.toEqual(
39
+ unknown.container.innerHTML,
40
+ );
41
+ });
29
42
  });
@@ -21,15 +21,11 @@ import { cellIdsAtom, useCellActions } from "@/core/cells/cells";
21
21
  import { useLastFocusedCellId } from "@/core/cells/focus";
22
22
  import { autoInstantiateAtom } from "@/core/config/config";
23
23
  import {
24
- dataConnectionsMapAtom,
24
+ connectionsAtom,
25
25
  type SQLTableContext,
26
26
  useDataSourceActions,
27
27
  } from "@/core/datasets/data-source-connections";
28
- import {
29
- DEFAULT_DUCKDB_DATABASE,
30
- DUCKDB_ENGINE,
31
- INTERNAL_SQL_ENGINES,
32
- } from "@/core/datasets/engines";
28
+ import { DUCKDB_ENGINE } from "@/core/datasets/engines";
33
29
  import {
34
30
  PreviewSQLSchemaList,
35
31
  PreviewSQLTable,
@@ -224,40 +220,6 @@ export function filterEmptyDatabases(databases: Database[]): Database[] {
224
220
  return changed ? result : databases;
225
221
  }
226
222
 
227
- /**
228
- * This atom is used to get the data connections that are available to the user.
229
- * It filters out the internal engines if it has no databases or if it has only the in-memory database and no schemas.
230
- */
231
- export const connectionsAtom = atom((get) => {
232
- const dataConnections = new Map(get(dataConnectionsMapAtom));
233
-
234
- // Filter out the internal engines if it has no databases
235
- // Or if it has only the in-memory database and no schemas
236
- for (const engine of INTERNAL_SQL_ENGINES) {
237
- const connection = dataConnections.get(engine);
238
- if (!connection) {
239
- continue;
240
- }
241
-
242
- if (connection.databases.length === 0) {
243
- dataConnections.delete(engine);
244
- }
245
-
246
- if (
247
- connection.databases.length === 1 &&
248
- connection.databases[0].name === DEFAULT_DUCKDB_DATABASE &&
249
- connection.databases[0].schemas.length === 0
250
- ) {
251
- dataConnections.delete(engine);
252
- }
253
- }
254
-
255
- // Put internal engines last to prioritize user-defined connections
256
- return sortBy([...dataConnections.values()], (connection) =>
257
- INTERNAL_SQL_ENGINES.has(connection.name) ? 1 : 0,
258
- );
259
- });
260
-
261
223
  export const DataSources: React.FC = () => {
262
224
  const [searchValue, setSearchValue] = React.useState<string>("");
263
225
  const [hideEmpty, setHideEmpty] = useAtom(hideEmptyDatasourcesAtom);
@@ -8,6 +8,9 @@ import {
8
8
  } from "@/components/ui/accordion";
9
9
  import { Badge } from "@/components/ui/badge";
10
10
  import { cn } from "@/utils/cn";
11
+ import { SparklesIcon } from "lucide-react";
12
+ import { Tooltip } from "@/components/ui/tooltip";
13
+ import type { DataSourceDiscoveryGroup } from "@/core/datasets/data-source-discovery";
11
14
 
12
15
  /**
13
16
  * Styled AccordionItem for sidebar panels.
@@ -80,9 +83,41 @@ const PanelBadge = ({
80
83
  );
81
84
  PanelBadge.displayName = "PanelBadge";
82
85
 
86
+ const DiscoveredSourcesBadge = ({
87
+ count,
88
+ type,
89
+ }: {
90
+ count: number;
91
+ type: DataSourceDiscoveryGroup;
92
+ }) => {
93
+ if (count === 0) {
94
+ return null;
95
+ }
96
+
97
+ let noun: string;
98
+ if (type === "database") {
99
+ noun = count === 1 ? "database" : "databases";
100
+ } else {
101
+ noun = count === 1 ? "remote storage" : "remote storages";
102
+ }
103
+ const content = `${count} ${noun} detected in your environment, ready to quick-add`;
104
+
105
+ return (
106
+ <Tooltip content={content}>
107
+ <span>
108
+ <PanelBadge className="gap-0.5 border-(--blue-6) bg-(--blue-3) text-(--blue-11)">
109
+ <SparklesIcon className="h-2.5 w-2.5" />
110
+ {count}
111
+ </PanelBadge>
112
+ </span>
113
+ </Tooltip>
114
+ );
115
+ };
116
+
83
117
  export {
84
118
  PanelAccordionItem,
85
119
  PanelAccordionTrigger,
86
120
  PanelAccordionContent,
87
121
  PanelBadge,
122
+ DiscoveredSourcesBadge,
88
123
  };
@@ -7,11 +7,13 @@ import useResizeObserver from "use-resize-observer";
7
7
  import { StorageInspector } from "@/components/storage/storage-inspector";
8
8
  import { Accordion } from "@/components/ui/accordion";
9
9
  import { storageNamespacesAtom } from "@/core/storage/state";
10
+ import { useDetectedDataSources } from "@/hooks/useDataSourceDiscovery";
10
11
  import { cn } from "@/utils/cn";
11
12
  import { TreeDndProvider } from "../../file-tree/dnd-wrapper";
12
13
  import { FileExplorer } from "../../file-tree/file-explorer";
13
14
  import { useFileExplorerUpload } from "../../file-tree/upload";
14
15
  import {
16
+ DiscoveredSourcesBadge,
15
17
  PanelAccordionContent,
16
18
  PanelAccordionItem,
17
19
  PanelAccordionTrigger,
@@ -58,6 +60,7 @@ const FileExplorerPanel: React.FC = () => {
58
60
 
59
61
  const storageNamespaces = useAtomValue(storageNamespacesAtom);
60
62
  const remoteStorageConnections = storageNamespaces.length;
63
+ const pendingDataSources = useDetectedDataSources("storage");
61
64
 
62
65
  const openSections = useMemo<FileExplorerPanelSection[]>(() => {
63
66
  if (!state.hasUserInteracted && remoteStorageConnections > 0) {
@@ -81,6 +84,7 @@ const FileExplorerPanel: React.FC = () => {
81
84
 
82
85
  const availableContent = panelHeight - TRIGGER_HEIGHT * 2;
83
86
  const storageIsOpen = openSections.includes("remote-storage");
87
+ const showDiscoveredStorageBadge = pendingDataSources.length > 0;
84
88
  const bothOpen = storageIsOpen && openSections.includes("files");
85
89
 
86
90
  const storageMaxHeight = bothOpen
@@ -104,6 +108,12 @@ const FileExplorerPanel: React.FC = () => {
104
108
  {remoteStorageConnections > 0 && (
105
109
  <PanelBadge>{remoteStorageConnections}</PanelBadge>
106
110
  )}
111
+ {showDiscoveredStorageBadge && (
112
+ <DiscoveredSourcesBadge
113
+ count={pendingDataSources.length}
114
+ type="storage"
115
+ />
116
+ )}
107
117
  </PanelAccordionTrigger>
108
118
  <PanelAccordionContent
109
119
  className="overflow-auto"
@@ -3,16 +3,16 @@
3
3
  import { useAtom, useAtomValue } from "jotai";
4
4
  import { DatabaseIcon, VariableIcon } from "lucide-react";
5
5
  import React, { useCallback } from "react";
6
- import {
7
- connectionsAtom,
8
- DataSources,
9
- } from "@/components/datasources/datasources";
6
+ import { DataSources } from "@/components/datasources/datasources";
10
7
  import { Accordion } from "@/components/ui/accordion";
11
8
  import { VariableTable } from "@/components/variables/variables-table";
12
9
  import { useCellIds } from "@/core/cells/cells";
10
+ import { connectionsAtom } from "@/core/datasets/data-source-connections";
13
11
  import { datasetTablesAtom } from "@/core/datasets/state";
14
12
  import { useVariables } from "@/core/variables/state";
13
+ import { useDetectedDataSources } from "@/hooks/useDataSourceDiscovery";
15
14
  import {
15
+ DiscoveredSourcesBadge,
16
16
  PanelAccordionContent,
17
17
  PanelAccordionItem,
18
18
  PanelAccordionTrigger,
@@ -28,6 +28,7 @@ const SessionPanel: React.FC = () => {
28
28
  const cellIds = useCellIds();
29
29
  const tables = useAtomValue(datasetTablesAtom);
30
30
  const dataConnections = useAtomValue(connectionsAtom);
31
+ const pendingDataSources = useDetectedDataSources("database");
31
32
  const [state, setState] = useAtom(sessionPanelAtom);
32
33
 
33
34
  const datasourcesCount = tables.length + dataConnections.length;
@@ -50,6 +51,7 @@ const SessionPanel: React.FC = () => {
50
51
 
51
52
  const isDatasourcesOpen = openSections.includes("datasources");
52
53
  const showDatasourcesBadge = !isDatasourcesOpen && datasourcesCount > 0;
54
+ const showDiscoveredDataSourcesBadge = pendingDataSources.length > 0;
53
55
 
54
56
  return (
55
57
  <Accordion
@@ -63,6 +65,12 @@ const SessionPanel: React.FC = () => {
63
65
  <DatabaseIcon className="w-4 h-4" />
64
66
  Data sources
65
67
  {showDatasourcesBadge && <PanelBadge>{datasourcesCount}</PanelBadge>}
68
+ {showDiscoveredDataSourcesBadge && (
69
+ <DiscoveredSourcesBadge
70
+ count={pendingDataSources.length}
71
+ type="database"
72
+ />
73
+ )}
66
74
  </PanelAccordionTrigger>
67
75
  <PanelAccordionContent>
68
76
  <DataSources />
@@ -28,6 +28,7 @@ const sources: DetectedDataSource[] = [
28
28
  },
29
29
  ],
30
30
  code: "engine = create_engine()",
31
+ hidesWhen: { kind: "dialect", substrings: ["postgres"] },
31
32
  },
32
33
  {
33
34
  id: "pyiceberg-prod",
@@ -52,6 +53,7 @@ const sources: DetectedDataSource[] = [
52
53
  },
53
54
  ],
54
55
  code: 'catalog = load_catalog("prod")',
56
+ hidesWhen: { kind: "dialect", substrings: ["iceberg"] },
55
57
  },
56
58
  ];
57
59
 
@@ -87,7 +87,11 @@ export const AddConnectionDialogContent: React.FC<{
87
87
  <span className="block">{codeSnippetHint}</span>
88
88
  </DialogDescription>
89
89
  </DialogHeader>
90
- <AutoDiscoveredDataSources onSubmit={onClose} className="-mt-2" />
90
+ <AutoDiscoveredDataSources
91
+ onSubmit={onClose}
92
+ className="-mt-2"
93
+ group={activeTab === "storage" ? "storage" : "database"}
94
+ />
91
95
  <Tabs
92
96
  value={activeTab}
93
97
  onValueChange={(v) => setActiveTab(v as ConnectionTab)}
@@ -2,8 +2,11 @@
2
2
 
3
3
  import { PlusIcon, SparklesIcon } from "lucide-react";
4
4
  import { Tooltip, TooltipProvider } from "@/components/ui/tooltip";
5
- import type { DetectedDataSource } from "@/core/datasets/data-source-discovery";
6
- import { useDataSourceDiscovery } from "@/hooks/useDataSourceDiscovery";
5
+ import type {
6
+ DataSourceDiscoveryGroup,
7
+ DetectedDataSource,
8
+ } from "@/core/datasets/data-source-discovery";
9
+ import { useDetectedDataSources } from "@/hooks/useDataSourceDiscovery";
7
10
  import { useInsertCode } from "./components";
8
11
  import { cn } from "@/utils/cn";
9
12
 
@@ -94,19 +97,20 @@ const DetectedDataSourceDetails: React.FC<{
94
97
  );
95
98
 
96
99
  export const AutoDiscoveredDataSources: React.FC<{
97
- onSubmit: () => void;
100
+ onSubmit?: () => void;
98
101
  className?: string;
99
- }> = ({ onSubmit, className }) => {
102
+ group?: DataSourceDiscoveryGroup;
103
+ }> = ({ onSubmit, className, group }) => {
100
104
  const insertCode = useInsertCode();
101
- const { data } = useDataSourceDiscovery();
105
+ const sources = useDetectedDataSources(group);
102
106
 
103
107
  return (
104
108
  <QuickAddDataSources
105
109
  className={className}
106
- sources={data ?? []}
110
+ sources={sources}
107
111
  onAdd={(source) => {
108
112
  insertCode(source.code);
109
- onSubmit();
113
+ onSubmit?.();
110
114
  }}
111
115
  />
112
116
  );
@@ -117,6 +117,49 @@ exports[`generateStorageCode > GCS > without service account key (default creden
117
117
  store = GCSStore("my-bucket")"
118
118
  `;
119
119
 
120
+ exports[`generateStorageCode > GitHub > public repo 1`] = `
121
+ "from fsspec.implementations.github import GithubFileSystem
122
+
123
+ fs = GithubFileSystem(
124
+ org="marimo-team",
125
+ repo="marimo",
126
+ )"
127
+ `;
128
+
129
+ exports[`generateStorageCode > GitHub > with sha 1`] = `
130
+ "from fsspec.implementations.github import GithubFileSystem
131
+
132
+ fs = GithubFileSystem(
133
+ org="marimo-team",
134
+ repo="marimo",
135
+ sha="main",
136
+ )"
137
+ `;
138
+
139
+ exports[`generateStorageCode > GitHub > with username and token 1`] = `
140
+ "from fsspec.implementations.github import GithubFileSystem
141
+
142
+ fs = GithubFileSystem(
143
+ org="marimo-team",
144
+ repo="marimo",
145
+ username="octocat",
146
+ token="ghp_example",
147
+ )"
148
+ `;
149
+
150
+ exports[`generateStorageCode > GitHub > with username and token from secrets 1`] = `
151
+ "from fsspec.implementations.github import GithubFileSystem
152
+ import os
153
+
154
+ _token = os.environ.get("GITHUB_TOKEN")
155
+ fs = GithubFileSystem(
156
+ org="marimo-team",
157
+ repo="marimo",
158
+ username="octocat",
159
+ token=_token,
160
+ )"
161
+ `;
162
+
120
163
  exports[`generateStorageCode > Google Drive > with default auth (no credentials) 1`] = `
121
164
  "from gdrive_fsspec import GoogleDriveFileSystem
122
165
 
@@ -329,6 +329,83 @@ describe("generateStorageCode", () => {
329
329
  });
330
330
  });
331
331
 
332
+ describe("GitHub", () => {
333
+ it("public repo", () => {
334
+ expect(
335
+ generateStorageCode(
336
+ { type: "github", org: "marimo-team", repo: "marimo" },
337
+ { library: "fsspec" },
338
+ ),
339
+ ).toMatchSnapshot();
340
+ });
341
+
342
+ it("with sha", () => {
343
+ expect(
344
+ generateStorageCode(
345
+ {
346
+ type: "github",
347
+ org: "marimo-team",
348
+ repo: "marimo",
349
+ sha: "main",
350
+ },
351
+ { library: "fsspec" },
352
+ ),
353
+ ).toMatchSnapshot();
354
+ });
355
+
356
+ it("escapes quotes and backslashes in sha", () => {
357
+ expect(
358
+ generateStorageCode(
359
+ {
360
+ type: "github",
361
+ org: "marimo-team",
362
+ repo: "marimo",
363
+ sha: 'feature/\\"new"',
364
+ },
365
+ { library: "fsspec" },
366
+ ),
367
+ ).toMatchInlineSnapshot(`
368
+ "from fsspec.implementations.github import GithubFileSystem
369
+
370
+ fs = GithubFileSystem(
371
+ org="marimo-team",
372
+ repo="marimo",
373
+ sha="feature/\\\\\\"new\\"",
374
+ )"
375
+ `);
376
+ });
377
+
378
+ it("with username and token", () => {
379
+ expect(
380
+ generateStorageCode(
381
+ {
382
+ type: "github",
383
+ org: "marimo-team",
384
+ repo: "marimo",
385
+ username: "octocat",
386
+ token: "ghp_example",
387
+ },
388
+ { library: "fsspec" },
389
+ ),
390
+ ).toMatchSnapshot();
391
+ });
392
+
393
+ it("with username and token from secrets", () => {
394
+ expect(
395
+ generateStorageCode(
396
+ {
397
+ type: "github",
398
+ org: "marimo-team",
399
+ repo: "marimo",
400
+ username: "octocat",
401
+ token: prefixSecret("GITHUB_TOKEN"),
402
+ },
403
+ { library: "fsspec" },
404
+ ),
405
+ ).toMatchSnapshot();
406
+ });
407
+ });
408
+
332
409
  describe("invalid cases", () => {
333
410
  it("throws for empty S3 bucket", () => {
334
411
  expect(() =>
@@ -397,5 +474,55 @@ describe("generateStorageCode", () => {
397
474
  ),
398
475
  ).toThrow();
399
476
  });
477
+
478
+ it("throws for empty GitHub org", () => {
479
+ expect(() =>
480
+ generateStorageCode(
481
+ { type: "github", org: "", repo: "marimo" } as StorageConnection,
482
+ { library: "fsspec" },
483
+ ),
484
+ ).toThrow();
485
+ });
486
+
487
+ it("throws for empty GitHub repo", () => {
488
+ expect(() =>
489
+ generateStorageCode(
490
+ {
491
+ type: "github",
492
+ org: "marimo-team",
493
+ repo: "",
494
+ } as StorageConnection,
495
+ { library: "fsspec" },
496
+ ),
497
+ ).toThrow();
498
+ });
499
+
500
+ it("throws when GitHub username is set without token", () => {
501
+ expect(() =>
502
+ generateStorageCode(
503
+ {
504
+ type: "github",
505
+ org: "marimo-team",
506
+ repo: "marimo",
507
+ username: "octocat",
508
+ },
509
+ { library: "fsspec" },
510
+ ),
511
+ ).toThrow();
512
+ });
513
+
514
+ it("throws when GitHub token is set without username", () => {
515
+ expect(() =>
516
+ generateStorageCode(
517
+ {
518
+ type: "github",
519
+ org: "marimo-team",
520
+ repo: "marimo",
521
+ token: "ghp_example",
522
+ },
523
+ { library: "fsspec" },
524
+ ),
525
+ ).toThrow();
526
+ });
400
527
  });
401
528
  });
@@ -16,6 +16,7 @@ import {
16
16
  AzureStorageSchema,
17
17
  CoreWeaveStorageSchema,
18
18
  GCSStorageSchema,
19
+ GithubStorageSchema,
19
20
  GoogleDriveStorageSchema,
20
21
  HuggingfaceStorageSchema,
21
22
  S3StorageSchema,
@@ -89,6 +90,15 @@ const STORAGE_PROVIDERS = [
89
90
  preferred: "huggingface_hub",
90
91
  },
91
92
  },
93
+ {
94
+ name: "GitHub",
95
+ schema: GithubStorageSchema,
96
+ protocol: "github",
97
+ storageLibraries: {
98
+ libraries: ["fsspec"],
99
+ preferred: "fsspec",
100
+ },
101
+ },
92
102
  ] satisfies StorageProviderSchema[];
93
103
 
94
104
  const StorageProviderSelector: React.FC<{
@@ -105,7 +115,7 @@ const StorageProviderSelector: React.FC<{
105
115
  <ProtocolIcon
106
116
  protocol={protocol as KnownStorageProtocol}
107
117
  forceDark={true}
108
- className="w-7.5 h-7.5"
118
+ className="w-7.5 h-7.5 text-white"
109
119
  />
110
120
  }
111
121
  onSelect={() => onSelect(schema)}
@@ -43,7 +43,7 @@ class SecretContainer {
43
43
  this.secrets[privateVar] = `os.environ.get("${envVar}")`;
44
44
  return privateVar;
45
45
  }
46
- return `"${value}"`;
46
+ return `"${escapePythonString(value)}"`;
47
47
  }
48
48
 
49
49
  formatSecrets(): string {
@@ -260,6 +260,32 @@ function generateHuggingfaceCode(
260
260
  return { imports, code: `hf = HfApi(token=${token})` };
261
261
  }
262
262
 
263
+ function generateGithubCode(
264
+ connection: Extract<StorageConnection, { type: "github" }>,
265
+ secrets: SecretContainer,
266
+ ): { imports: Set<string>; code: string } {
267
+ const imports = new Set([
268
+ "from fsspec.implementations.github import GithubFileSystem",
269
+ ]);
270
+ const params: string[] = [
271
+ `org=${secrets.print("org", connection.org)},`,
272
+ `repo=${secrets.print("repo", connection.repo)},`,
273
+ ];
274
+
275
+ if (connection.sha) {
276
+ params.push(`sha=${secrets.print("sha", connection.sha)},`);
277
+ }
278
+ if (connection.username && connection.token) {
279
+ params.push(
280
+ `username=${secrets.print("username", connection.username)},`,
281
+ `token=${secrets.print("token", connection.token)},`,
282
+ );
283
+ }
284
+
285
+ const paramsStr = params.map((param) => ` ${param}`).join("\n");
286
+ return { imports, code: `fs = GithubFileSystem(\n${paramsStr}\n)` };
287
+ }
288
+
263
289
  export function generateStorageCode(
264
290
  connection: StorageConnection,
265
291
  options: StorageCodeOptions,
@@ -291,6 +317,9 @@ export function generateStorageCode(
291
317
  case "huggingface":
292
318
  result = generateHuggingfaceCode(connection, secrets);
293
319
  break;
320
+ case "github":
321
+ result = generateGithubCode(connection, secrets);
322
+ break;
294
323
  default:
295
324
  assertNever(connection);
296
325
  }
@@ -238,6 +238,68 @@ export const HuggingfaceStorageSchema = z
238
238
  })
239
239
  .describe(FieldOptions.of({ direction: "two-columns" }));
240
240
 
241
+ function isFilled(value: string | undefined): boolean {
242
+ return value != null && value !== "";
243
+ }
244
+
245
+ export const GithubStorageSchema = z
246
+ .object({
247
+ type: z.literal("github"),
248
+ org: z
249
+ .string()
250
+ .nonempty()
251
+ .describe(
252
+ FieldOptions.of({
253
+ label: "Organization or user",
254
+ }),
255
+ ),
256
+ repo: z
257
+ .string()
258
+ .nonempty()
259
+ .describe(
260
+ FieldOptions.of({
261
+ label: "Repository",
262
+ }),
263
+ ),
264
+ sha: z
265
+ .string()
266
+ .optional()
267
+ .describe(
268
+ FieldOptions.of({
269
+ label: "Branch, tag, or commit",
270
+ placeholder: "main",
271
+ description: "Leave empty to use the default branch",
272
+ }),
273
+ ),
274
+ username: z
275
+ .string()
276
+ .optional()
277
+ .describe(
278
+ FieldOptions.of({
279
+ label: "Username",
280
+ description: "Set this together with access token",
281
+ optionRegex: "(github.?username|github.?user)",
282
+ }),
283
+ ),
284
+ token: z
285
+ .string()
286
+ .optional()
287
+ .describe(
288
+ FieldOptions.of({
289
+ label: "Access Token",
290
+ description:
291
+ "Set this together with username. Required for private repos and to avoid GitHub's rate limits.",
292
+ inputType: "password",
293
+ optionRegex: "(github.?token|gh.?token|github.?pat)",
294
+ }),
295
+ ),
296
+ })
297
+ .refine((value) => isFilled(value.username) === isFilled(value.token), {
298
+ message: "Username and access token are required together",
299
+ path: ["token"],
300
+ })
301
+ .describe(FieldOptions.of({ direction: "two-columns" }));
302
+
241
303
  export const StorageConnectionSchema = z.discriminatedUnion("type", [
242
304
  S3StorageSchema,
243
305
  GCSStorageSchema,
@@ -245,6 +307,7 @@ export const StorageConnectionSchema = z.discriminatedUnion("type", [
245
307
  CoreWeaveStorageSchema,
246
308
  GoogleDriveStorageSchema,
247
309
  HuggingfaceStorageSchema,
310
+ GithubStorageSchema,
248
311
  ]);
249
312
 
250
313
  export type StorageConnection = z.infer<typeof StorageConnectionSchema>;