@marimo-team/frontend 0.20.5-dev3 → 0.20.5-dev35
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.
- package/dist/assets/{CellStatus-DRjSVmK4.js → CellStatus-rawm41sF.js} +1 -1
- package/dist/assets/{Combination-tjZP3FH6.js → Combination-lAuBMOg4.js} +1 -1
- package/dist/assets/{ConnectedDataExplorerComponent-BmYLGaEV.js → ConnectedDataExplorerComponent-BmrDShEI.js} +1 -1
- package/dist/assets/{DeferredRequestRegistry-CMZsNx4R.js → DeferredRequestRegistry-TekxUirp.js} +1 -1
- package/dist/assets/{ErrorBoundary-dVj6GVNE.js → ErrorBoundary-BfF3Lb5I.js} +1 -1
- package/dist/assets/{ImperativeModal-CRNJOvqT.js → ImperativeModal-BvRpI5NU.js} +1 -1
- package/dist/assets/{JsonOutput-GlMQ3aLA.js → JsonOutput-D8vxudTc.js} +11 -11
- package/dist/assets/{LazyAnyLanguageCodeMirror-BdX_Y5NA.js → LazyAnyLanguageCodeMirror-BpSKccWW.js} +2 -2
- package/dist/assets/{MarimoErrorOutput-B0ZtYqUC.js → MarimoErrorOutput-ThxhEC9x.js} +1 -1
- package/dist/assets/{RenderHTML-qh-NzTWO.js → RenderHTML-Ci0Pb1aU.js} +1 -1
- package/dist/assets/{add-cell-with-ai--4VOMvH8.js → add-cell-with-ai-BO7kWP2P.js} +28 -26
- package/dist/assets/add-connection-dialog-C0_z2T_b.js +138 -0
- package/dist/assets/{agent-panel-BX_iKZeN.js → agent-panel-C-OkUkue.js} +15 -15
- package/dist/assets/ai-model-dropdown-DJoBltN-.js +5 -0
- package/dist/assets/{alert-dialog-DsNfSYaw.js → alert-dialog-CfirwkMl.js} +1 -1
- package/dist/assets/{any-language-editor-Drlg63ge.js → any-language-editor-C_73jLC-.js} +1 -1
- package/dist/assets/{app-config-button-bnipxY5L.js → app-config-button-Cw2wXNR2.js} +1 -1
- package/dist/assets/{architectureDiagram-VXUJARFQ-KOgWVxSC.js → architectureDiagram-VXUJARFQ-PitjPG8V.js} +1 -1
- package/dist/assets/{assertNever-Dw9aFN4h.js → assertNever-Dg4AnA3p.js} +1 -1
- package/dist/assets/{azure-Ddr1pZpW.js → azure-V83ZU8Sp.js} +1 -1
- package/dist/assets/{blockDiagram-VD42YOAC-DjazSe-Z.js → blockDiagram-VD42YOAC-BIJ4EhZR.js} +1 -1
- package/dist/assets/{button-BmOH9agK.js → button-BwamPDJi.js} +1 -1
- package/dist/assets/{c4Diagram-YG6GDRKO-CkwpyaIV.js → c4Diagram-YG6GDRKO-DM49Cvfe.js} +1 -1
- package/dist/assets/{cache-panel-DRhH4wqG.js → cache-panel-B4TWdLE9.js} +1 -1
- package/dist/assets/{capabilities-CeYo4YI0.js → capabilities-yFZOze7r.js} +1 -1
- package/dist/assets/{capitalize-irHJCpFh.js → capitalize-DeCS9UqV.js} +1 -1
- package/dist/assets/{cell-editor-B1x4zkBp.js → cell-editor-DFeqwbDq.js} +6 -6
- package/dist/assets/{cell-link-B59Kn5nL.js → cell-link-TWNu2IkO.js} +1 -1
- package/dist/assets/{cells-CCtxWKxf.js → cells-DJj8ja0V.js} +4 -4
- package/dist/assets/channel-DNdp-eCE.js +1 -0
- package/dist/assets/{chat-display-Co6iGNSx.js → chat-display-COL62Kpv.js} +1 -1
- package/dist/assets/{chat-panel-70sjqZuy.js → chat-panel-CxYclPR7.js} +1 -1
- package/dist/assets/{chunk-5FQGJX7Z-BJDu6jwt.js → chunk-5FQGJX7Z-Cyze_Wbx.js} +3 -3
- package/dist/assets/{chunk-ABZYJK2D-B4uBM2QW.js → chunk-ABZYJK2D-CIP2m5SK.js} +3 -3
- package/dist/assets/{chunk-ATLVNIR6-Du2yaFpm.js → chunk-ATLVNIR6-dCnEfemD.js} +1 -1
- package/dist/assets/{chunk-B4BG7PRW-CyuK4uRN.js → chunk-B4BG7PRW-sXSaKV4v.js} +1 -1
- package/dist/assets/{chunk-DI55MBZ5-BwWd5dH1.js → chunk-DI55MBZ5-DjV-ScSc.js} +1 -1
- package/dist/assets/{chunk-EXTU4WIE-KqUhNQvn.js → chunk-EXTU4WIE-PLvknOI8.js} +1 -1
- package/dist/assets/{chunk-JA3XYJ7Z-C-v9pa_-.js → chunk-JA3XYJ7Z-BM9i2UKq.js} +1 -1
- package/dist/assets/{chunk-JZLCHNYA-DNCs8LM0.js → chunk-JZLCHNYA-m6YUUy9x.js} +1 -1
- package/dist/assets/{chunk-N4CR4FBY-CT58_cui.js → chunk-N4CR4FBY-C1lKPnWl.js} +2 -2
- package/dist/assets/{chunk-QN33PNHL-BboxAxJa.js → chunk-QN33PNHL-Czx-c7tW.js} +1 -1
- package/dist/assets/{chunk-QXUST7PY-BlINr7uS.js → chunk-QXUST7PY-CcYtOR78.js} +1 -1
- package/dist/assets/{chunk-S3R3BYOJ-DI9xzpBm.js → chunk-S3R3BYOJ-JNQMgAH6.js} +1 -1
- package/dist/assets/{chunk-TZMSLE5B-C4sxb3v-.js → chunk-TZMSLE5B-C9T1sILA.js} +1 -1
- package/dist/assets/classDiagram-2ON5EDUG-BqtRsi1m.js +1 -0
- package/dist/assets/classDiagram-v2-WZHVMYZB-CVoqYiM8.js +1 -0
- package/dist/assets/{code-block-37QAKDTI-Cl0NTdrS.js → code-block-37QAKDTI-BeUkwW5f.js} +1 -1
- package/dist/assets/{column-preview-BhU5Ow0e.js → column-preview-CPJFpq_q.js} +1 -1
- package/dist/assets/command-DQqPawJf.js +1 -0
- package/dist/assets/command-palette-BM1QAZTW.js +1 -0
- package/dist/assets/{common-CKAiz8xx.js → common-Df9UcCs1.js} +1 -1
- package/dist/assets/components-CwZhf0Ag.js +1 -0
- package/dist/assets/{components-BZCdnYSp.js → components-D8LTuNe_.js} +1 -1
- package/dist/assets/{config-D9X9QKiL.js → config-BH98g9qk.js} +1 -1
- package/dist/assets/context-CRmPPhx9.js +1 -0
- package/dist/assets/context-aware-panel-Bs4Vepkp.js +3 -0
- package/dist/assets/{copy-DMCkK2TI.js → copy-ICN7wGy0.js} +1 -1
- package/dist/assets/{copy-icon-6RnnFDPt.js → copy-icon-DNppAsmd.js} +1 -1
- package/dist/assets/{createReducer-BcTiTw8T.js → createReducer-BrKCfm9t.js} +1 -1
- package/dist/assets/{dagre-6UL2VRFP-BrBSRtN5.js → dagre-6UL2VRFP-D-I1QR9s.js} +1 -1
- package/dist/assets/{data-grid-overlay-editor-NBBEPhQq.js → data-grid-overlay-editor-DXzdnLZF.js} +1 -1
- package/dist/assets/{datasource-B2Fl6iYU.js → datasource-MEu_GjcC.js} +1 -1
- package/dist/assets/{dates-CzBDvj6R.js → dates-BFWtdOCb.js} +1 -1
- package/dist/assets/{dependency-graph-panel-Dk4iQGft.js → dependency-graph-panel-DddysMUS.js} +1 -1
- package/dist/assets/{diagram-PSM6KHXK-DPC85L-O.js → diagram-PSM6KHXK-DcjdxOTC.js} +1 -1
- package/dist/assets/{diagram-QEK2KX5R-CRPLkmdi.js → diagram-QEK2KX5R-Dx1WtjkT.js} +1 -1
- package/dist/assets/{diagram-S2PKOQOG-Bsc6mZUW.js → diagram-S2PKOQOG-CXJzGs3_.js} +1 -1
- package/dist/assets/{dialog-BXzvlof-.js → dialog-ChkDhlMQ.js} +1 -1
- package/dist/assets/{dist-i0ilBbwP.js → dist-0PMxXIr6.js} +1 -1
- package/dist/assets/{dist-DGPCoel5.js → dist-6HEOc3hy.js} +1 -1
- package/dist/assets/{dist-CEQIJ2pn.js → dist-B7Qj0ClH.js} +1 -1
- package/dist/assets/{dist-C30-xTdI.js → dist-BIYYQefO.js} +1 -1
- package/dist/assets/{dist-Dg61kQNR.js → dist-BQ7MrVoG.js} +1 -1
- package/dist/assets/{dist-CU-Ty5ht.js → dist-BUr9VSV4.js} +1 -1
- package/dist/assets/{dist-BjtLy-VA.js → dist-Bagw3W9X.js} +1 -1
- package/dist/assets/dist-BbkZJt99.js +1 -0
- package/dist/assets/{dist-BTEPE6IB.js → dist-BosZYCjH.js} +1 -1
- package/dist/assets/{dist-Q0--6AMp.js → dist-BrDOLuMx.js} +1 -1
- package/dist/assets/dist-BvqRyXNf.js +1 -0
- package/dist/assets/{dist-DFv45CtW.js → dist-C1g0ZQqM.js} +1 -1
- package/dist/assets/dist-C88PeA-j.js +1 -0
- package/dist/assets/{dist-DQgu-tmt.js → dist-C8DU7LS7.js} +1 -1
- package/dist/assets/dist-CT29HpLU.js +1 -0
- package/dist/assets/dist-CaN3pnGY.js +1 -0
- package/dist/assets/dist-CdZrtzmM.js +1 -0
- package/dist/assets/{dist-Dq_iQ08e.js → dist-Cf47zp7b.js} +1 -1
- package/dist/assets/dist-CiBv1uBX.js +1 -0
- package/dist/assets/dist-Cn-s3n4_.js +1 -0
- package/dist/assets/{dist-DVh79TGS.js → dist-CrFxmtyb.js} +1 -1
- package/dist/assets/{dist-y6DTGoUH.js → dist-CsQrBXB1.js} +1 -1
- package/dist/assets/{dist-BjnzbwCx.js → dist-D-tCQoCo.js} +1 -1
- package/dist/assets/{dist-51xFOPFs.js → dist-D3OoaVQX.js} +1 -1
- package/dist/assets/dist-DHmVMXm2.js +1 -0
- package/dist/assets/dist-DHn8amAr.js +1 -0
- package/dist/assets/dist-DK2oA8K0.js +1 -0
- package/dist/assets/{dist-Bq1BhBMA.js → dist-DKPpxz2S.js} +1 -1
- package/dist/assets/{dist-DwtQnQ8D.js → dist-DPW-YadP.js} +1 -1
- package/dist/assets/{dist-Bbmd3uCi.js → dist-D_4TSZPK.js} +1 -1
- package/dist/assets/dist-Ddx3eonB.js +1 -0
- package/dist/assets/dist-DnPN36vC.js +1 -0
- package/dist/assets/dist-Doi_61Lm.js +1 -0
- package/dist/assets/{dist-Dy5EHuDu.js → dist-Dq1aTs7B.js} +1 -1
- package/dist/assets/dist-Dr9qtoId.js +13 -0
- package/dist/assets/dist-EtvDr9lo.js +1 -0
- package/dist/assets/dist-JYMkroTn.js +1 -0
- package/dist/assets/{dist-DfBASypd.js → dist-Jp_4M-Ei.js} +1 -1
- package/dist/assets/dist-QoV0fohO.js +1 -0
- package/dist/assets/dist-SDO5K7hA.js +3 -0
- package/dist/assets/dist-TtVOJU5I.js +1 -0
- package/dist/assets/dist-doJt8agZ.js +1 -0
- package/dist/assets/{dist-CIuh_TIk.js → dist-etSPFHi_.js} +1 -1
- package/dist/assets/{dist-CqnPIH_S.js → dist-f-ru44Xm.js} +1 -1
- package/dist/assets/{dist-CIU0Lack.js → dist-qkIhd7iG.js} +1 -1
- package/dist/assets/{dist-odxAaH5Z.js → dist-t1vdhOX_.js} +1 -1
- package/dist/assets/{dist-6QbI72oM.js → dist-wBVaU_K6.js} +1 -1
- package/dist/assets/{dist-C-_581uo.js → dist-ykiUNgjx.js} +1 -1
- package/dist/assets/{documentation-panel-DSqxsEBu.js → documentation-panel-Bs1zlxdM.js} +1 -1
- package/dist/assets/download-C06P9lnP.js +9 -0
- package/dist/assets/{dropdown-menu-CKhrfxsx.js → dropdown-menu-Bc2d7Nej.js} +1 -1
- package/dist/assets/edit-page-Bld_fe39.js +13 -0
- package/dist/assets/{erDiagram-Q2GNP2WA-B7kZxL-n.js → erDiagram-Q2GNP2WA-BQUYpiEQ.js} +1 -1
- package/dist/assets/{error-banner-R2OkQKR0.js → error-banner-C2nW22mN.js} +1 -1
- package/dist/assets/{error-panel-CtyexAW6.js → error-panel-B_vII0VN.js} +1 -1
- package/dist/assets/{es-1hBRXVlM.js → es-EPBuIa5m.js} +1 -1
- package/dist/assets/{esm-BQUzYly2.js → esm-Hlfcqnf0.js} +1 -1
- package/dist/assets/{esm-BTyesPLl.js → esm-MvMf2P5n.js} +1 -1
- package/dist/assets/{field-DGtw6Lae.js → field-D-izY3ud.js} +1 -1
- package/dist/assets/file-explorer-panel-BIzyNOVs.js +17 -0
- package/dist/assets/{file-video-camera-Fa5c_iPb.js → file-headphone-daOQzJg0.js} +1 -1
- package/dist/assets/file-icons-C-oatBuk.js +1 -0
- package/dist/assets/{floating-outline-BWK_nLJy.js → floating-outline-BPmtgKWs.js} +1 -1
- package/dist/assets/{flowDiagram-NV44I4VS-DR-64sse.js → flowDiagram-NV44I4VS-xMIxed1s.js} +1 -1
- package/dist/assets/{focus-ShrwcKIv.js → focus-j9zawi1p.js} +1 -1
- package/dist/assets/{form-B7_NRa34.js → form-DrpSpDea.js} +1 -1
- package/dist/assets/{formats-C3K3rlAZ.js → formats-CkafgGfe.js} +1 -1
- package/dist/assets/{formatting-8bP-RDnl.js → formatting-By3b5Lx8.js} +1 -1
- package/dist/assets/{gallery-page-DRBZRnaN.js → gallery-page-BrljeBFe.js} +1 -1
- package/dist/assets/{ganttDiagram-JELNMOA3-BWuQMrGd.js → ganttDiagram-JELNMOA3-Be16Pv8U.js} +1 -1
- package/dist/assets/{gitGraphDiagram-V2S2FVAM-Mr5-PYgM.js → gitGraphDiagram-V2S2FVAM-DQ4scp6S.js} +1 -1
- package/dist/assets/{glide-data-editor-BurnHmgR.js → glide-data-editor-8kdd_nPE.js} +4 -4
- package/dist/assets/{globals-BlB0Ba6E.js → globals-D2ulvntX.js} +1 -1
- package/dist/assets/home-page-O_c6IiAp.js +4 -0
- package/dist/assets/{hooks-BY6oGAlX.js → hooks-Z1j4FmRH.js} +1 -1
- package/dist/assets/html-to-image-D-FY7miL.js +2 -0
- package/dist/assets/image-CBwHq93J.js +1 -0
- package/dist/assets/index-Dn2DE-1-.js +38 -0
- package/dist/assets/{index-Dzwe9vKA.css → index-fYvRsNGP.css} +1 -1
- package/dist/assets/{infoDiagram-HS3SLOUP-Bs8aKpuZ.js → infoDiagram-HS3SLOUP-DzsICEl9.js} +1 -1
- package/dist/assets/input-GLbHj4DF.js +1 -0
- package/dist/assets/{journeyDiagram-XKPGCS4Q-aCZRxOHn.js → journeyDiagram-XKPGCS4Q-Dt4UItaM.js} +1 -1
- package/dist/assets/{kanban-definition-3W4ZIXB7-BlOJJ-5B.js → kanban-definition-3W4ZIXB7-Do_8fQeU.js} +1 -1
- package/dist/assets/katex-BalO4WMU.js +1 -0
- package/dist/assets/{kiosk-mode-BBqwMND1.js → kiosk-mode-BuLLP9k3.js} +1 -1
- package/dist/assets/{label-DmqkEXI4.js → label-CDwJXweF.js} +1 -1
- package/dist/assets/layout-DQhzfSJn.js +5 -0
- package/dist/assets/{linear-2A1iDmqT.js → linear-c4WCYuol.js} +1 -1
- package/dist/assets/{links-syPBpTLO.js → links-C9QsxOBC.js} +1 -1
- package/dist/assets/{logs-panel-BHFI-jG1.js → logs-panel-BKhNdCxG.js} +1 -1
- package/dist/assets/{maps-8VTEe-0T.js → maps-CTMzJkSk.js} +1 -1
- package/dist/assets/{marimo-icons-BDAuIiW5.js → marimo-icons-BmYE_Rrf.js} +1 -1
- package/dist/assets/{markdown-renderer-B6a5ZAwT.js → markdown-renderer-D02U2W2X.js} +4 -4
- package/dist/assets/{menu-items-Bs2e3wuf.js → menu-items-CRjHRaiu.js} +1 -1
- package/dist/assets/mermaid-4DMBBIKO-C2MO8Ayk.js +1 -0
- package/dist/assets/{mermaid-Cq8ttjss.js → mermaid-DJfb-vZs.js} +3 -3
- package/dist/assets/{mermaid-parser.core-DbGD2gKa.js → mermaid-parser.core-C-MdXFgl.js} +1 -1
- package/dist/assets/{mhchem-BJZpIgRF.js → mhchem-DqNBdKjC.js} +1 -1
- package/dist/assets/{mindmap-definition-VGOIOE7T-Dt6ZRws3.js → mindmap-definition-VGOIOE7T-YOE4okXd.js} +1 -1
- package/dist/assets/{multi-map-kCmlVJ-5.js → multi-map-BubyGH4K.js} +1 -1
- package/dist/assets/{name-cell-input-BRHlWy2Y.js → name-cell-input-DOyCua0o.js} +1 -1
- package/dist/assets/{number-overlay-editor-BDnI-mwa.js → number-overlay-editor-zZDGu9D2.js} +1 -1
- package/dist/assets/{numbers-44Cj1Me-.js → numbers-Eb1pfDec.js} +1 -1
- package/dist/assets/{outline-panel-uyRmU3NX.js → outline-panel-CgQ2GmbX.js} +1 -1
- package/dist/assets/{packages-panel-D8d46YWc.js → packages-panel-n8Ssm9M8.js} +1 -1
- package/dist/assets/{panels-Do1_ry1k.js → panels-B4wExe_l.js} +1 -1
- package/dist/assets/{pieDiagram-ADFJNKIX-3GEmpmfg.js → pieDiagram-ADFJNKIX-CjRyNR5b.js} +1 -1
- package/dist/assets/{popover-Cvl9xY6R.js → popover-XNIX-rv1.js} +1 -1
- package/dist/assets/{precisionRound-BOmLQIKI.js → precisionRound-CCOoIlcP.js} +1 -1
- package/dist/assets/{process-output-4yip1nZE.js → process-output-BwkCApeo.js} +1 -1
- package/dist/assets/purify.es-BBn8CPhf.js +2 -0
- package/dist/assets/{quadrantDiagram-AYHSOK5B-Dela17qb.js → quadrantDiagram-AYHSOK5B-ZvWY20UO.js} +1 -1
- package/dist/assets/{react-vega-C6zUovDg.js → react-vega-DzWik59S.js} +1 -1
- package/dist/assets/react-vega-plcnUXVG.js +1 -0
- package/dist/assets/{readonly-python-code-DmjbJYSq.js → readonly-python-code-BFyASvPB.js} +1 -1
- package/dist/assets/{renderShortcut-BJEd-iA7.js → renderShortcut-BjTUrvc5.js} +1 -1
- package/dist/assets/{request-registry-CN4oD1xn.js → request-registry-LM8kl4Xv.js} +1 -1
- package/dist/assets/{requirementDiagram-UZGBJVZJ-CjimGyZ2.js → requirementDiagram-UZGBJVZJ-4LJ2QyR9.js} +1 -1
- package/dist/assets/{run-page-BGijCqbR.js → run-page-BYEyHIaG.js} +1 -1
- package/dist/assets/{runs-BMpRKQKC.js → runs-B4QSIylk.js} +1 -1
- package/dist/assets/{sankeyDiagram-TZEHDZUN-CBE98yUR.js → sankeyDiagram-TZEHDZUN-7OqUpHYR.js} +1 -1
- package/dist/assets/{scratchpad-panel-ByOWj9u_.js → scratchpad-panel-w9Tu3fpH.js} +1 -1
- package/dist/assets/{secrets-panel-C2n4dedt.js → secrets-panel-DAnccD-S.js} +1 -1
- package/dist/assets/{select-DygbgNTD.js → select-DMX8tcVe.js} +1 -1
- package/dist/assets/{sequenceDiagram-WL72ISMW-DSgG0Zyn.js → sequenceDiagram-WL72ISMW-C4sGREOt.js} +1 -1
- package/dist/assets/{session-DnMOyddG.js → session-iz9BPeTp.js} +1 -1
- package/dist/assets/session-panel-k6_Gni4X.js +1 -0
- package/dist/assets/{share-sD4fbzpH.js → share-BWMZuJWY.js} +1 -1
- package/dist/assets/{slides-component-B6-Jz3p0.js → slides-component-6o8TgsRv.js} +1 -1
- package/dist/assets/{snippets-panel-Bzz2M38q.js → snippets-panel-mGo3M47p.js} +1 -1
- package/dist/assets/{spec-Be-iRLAY.js → spec-BQ0QuStT.js} +1 -1
- package/dist/assets/{state-Xu6bDsJl.js → state-CGR3DB1q.js} +1 -1
- package/dist/assets/{state-D2jTOQOG.js → state-CsNC_7dZ.js} +1 -1
- package/dist/assets/{state-B_fNn_z_.js → state-Dj88xOmZ.js} +1 -1
- package/dist/assets/{stateDiagram-FKZM4ZOC-By2PSLiJ.js → stateDiagram-FKZM4ZOC-4PvEH0nH.js} +1 -1
- package/dist/assets/stateDiagram-v2-4FDKWEC3-CpKgwrjU.js +1 -0
- package/dist/assets/stex-BBWVYm-R.js +1 -0
- package/dist/assets/{switch-tdkZNn4k.js → switch-BMqCO9bm.js} +1 -1
- package/dist/assets/{terminal-CGmjeYqa.js → terminal-qMuurRSM.js} +1 -1
- package/dist/assets/{time-BLCpKsnL.js → time-BuGE4zW4.js} +1 -1
- package/dist/assets/{timeline-definition-IT6M3QCI-rq80_nVa.js → timeline-definition-IT6M3QCI-D9wk3zrs.js} +1 -1
- package/dist/assets/{toggle-BhEcsHTu.js → toggle-BYx0fN9n.js} +1 -1
- package/dist/assets/{tooltip-DOQlecCr.js → tooltip-CKZGcDDd.js} +1 -1
- package/dist/assets/{tooltip-D_HRHf_c.js → tooltip-CQeE9o7x.js} +1 -1
- package/dist/assets/{tracing-BZx6nEPl.js → tracing-DTCuFbVV.js} +1 -1
- package/dist/assets/tracing-panel-B1EJu6-W.js +2 -0
- package/dist/assets/{tree-D0AxVJ_I.js → tree-82qhH45u.js} +1 -1
- package/dist/assets/{useAddCell-BRlAqdmq.js → useAddCell-BdUpg_Ta.js} +1 -1
- package/dist/assets/useBoolean-2eWc7NX-.js +1 -0
- package/dist/assets/useCellActionButton-CJ_LAoma.js +1 -0
- package/dist/assets/{useDateFormatter-CmtFqjqu.js → useDateFormatter-DOoVZUts.js} +1 -1
- package/dist/assets/{useDeleteCell-BAfiIxKf.js → useDeleteCell-C1uMlYZu.js} +1 -1
- package/dist/assets/{useDependencyPanelTab-jTu3L200.js → useDependencyPanelTab-nuk9kUr_.js} +1 -1
- package/dist/assets/useEventListener-DP66hBzA.js +1 -0
- package/dist/assets/{useIframeCapabilities-T3alJPda.js → useIframeCapabilities-BhFmTPLk.js} +1 -1
- package/dist/assets/{useInstallPackage-jGxNsOWc.js → useInstallPackage-CyTwCrsi.js} +1 -1
- package/dist/assets/{useInterval-lamrIyKJ.js → useInterval-Ct4FP8Tw.js} +1 -1
- package/dist/assets/{useLifecycle-BDXC6oVR.js → useLifecycle-BRklGKFJ.js} +1 -1
- package/dist/assets/useNotebookActions-Bh8YMrlo.js +1 -0
- package/dist/assets/{useNumberFormatter-DMA_kIIZ.js → useNumberFormatter-BXZcbTzH.js} +1 -1
- package/dist/assets/usePress-G817DpBk.js +7 -0
- package/dist/assets/{useSplitCell-CB32IpFa.js → useSplitCell-D7EHwIIE.js} +1 -1
- package/dist/assets/{useTheme-CwdqVOYu.js → useTheme-Co8bbxoC.js} +1 -1
- package/dist/assets/{utils-CORJ8yYa.js → utils-C1ZciZbF.js} +1 -1
- package/dist/assets/{vega-component-BLW2fY7v.js → vega-component-CoUjMYqz.js} +1 -1
- package/dist/assets/{vega-loader.browser-CZV6_g2i.js → vega-loader.browser-BJ9oKrvH.js} +1 -1
- package/dist/assets/{write-secret-modal-DuxmGjDn.js → write-secret-modal-DOyKonZB.js} +1 -1
- package/dist/assets/{xychartDiagram-PRI3JC2R-Bnjm0Q9u.js → xychartDiagram-PRI3JC2R-CTDFOoiw.js} +1 -1
- package/dist/index.html +131 -130
- package/package.json +9 -9
- package/src/__mocks__/requests.ts +1 -0
- package/src/components/app-config/ai-config.tsx +10 -0
- package/src/components/data-table/pagination.tsx +36 -30
- package/src/components/datasources/components.tsx +3 -6
- package/src/components/datasources/datasources.tsx +8 -21
- package/src/components/editor/actions/types.ts +6 -1
- package/src/components/editor/actions/useNotebookActions.tsx +50 -13
- package/src/components/editor/chrome/types.ts +17 -0
- package/src/components/editor/controls/command-palette.tsx +7 -0
- package/src/components/editor/controls/keyboard-shortcuts.tsx +3 -1
- package/src/components/editor/file-tree/file-explorer.tsx +48 -62
- package/src/components/editor/file-tree/file-icons.tsx +132 -0
- package/src/components/editor/file-tree/file-viewer.tsx +1 -1
- package/src/components/editor/file-tree/tree-actions.tsx +107 -0
- package/src/components/editor/file-tree/types.ts +2 -96
- package/src/components/editor/header/filename-input.tsx +4 -1
- package/src/components/icons/marimo-icons.tsx +2 -2
- package/src/components/pages/home-page.tsx +5 -5
- package/src/components/storage/components.tsx +0 -38
- package/src/components/storage/storage-file-viewer.tsx +1 -1
- package/src/components/storage/storage-inspector.tsx +28 -45
- package/src/components/ui/command.tsx +2 -0
- package/src/components/ui/links.tsx +1 -0
- package/src/core/ai/tools/__tests__/run-cells-tool.test.ts +206 -0
- package/src/core/ai/tools/run-cells-tool.ts +75 -40
- package/src/core/hotkeys/__tests__/hotkeys.test.ts +64 -1
- package/src/core/hotkeys/hotkeys.ts +29 -3
- package/src/core/islands/bridge.ts +1 -0
- package/src/core/network/__tests__/requests-network.test.ts +17 -0
- package/src/core/network/requests-lazy.ts +1 -0
- package/src/core/network/requests-network.ts +9 -0
- package/src/core/network/requests-static.ts +1 -0
- package/src/core/network/requests-toasting.tsx +1 -0
- package/src/core/network/types.ts +1 -0
- package/src/core/wasm/bridge.ts +1 -0
- package/src/plugins/impl/FileBrowserPlugin.tsx +4 -4
- package/src/plugins/impl/mpl-interactive/MplInteractivePlugin.tsx +309 -0
- package/src/plugins/impl/mpl-interactive/__tests__/mpl-websocket-shim.test.ts +110 -0
- package/src/plugins/impl/mpl-interactive/mpl-websocket-shim.ts +57 -0
- package/src/plugins/plugins.ts +2 -0
- package/src/utils/__tests__/filenames.test.ts +7 -0
- package/src/utils/__tests__/smartMatch.test.ts +61 -0
- package/src/utils/filenames.ts +3 -0
- package/src/utils/smartMatch.ts +62 -0
- package/dist/assets/add-connection-dialog-9CzjZlY9.js +0 -138
- package/dist/assets/ai-model-dropdown-C3Y44M85.js +0 -5
- package/dist/assets/channel-k8gMdpPa.js +0 -1
- package/dist/assets/classDiagram-2ON5EDUG-DDFZaNDy.js +0 -1
- package/dist/assets/classDiagram-v2-WZHVMYZB-CEbmnHKU.js +0 -1
- package/dist/assets/command-DQqqP-WF.js +0 -1
- package/dist/assets/command-palette-BSS73m03.js +0 -1
- package/dist/assets/components-CF9x5raB.js +0 -1
- package/dist/assets/context-B1_BdDTF.js +0 -1
- package/dist/assets/context-aware-panel-HnyO4-L2.js +0 -3
- package/dist/assets/dist-B8osAFLA.js +0 -1
- package/dist/assets/dist-BYtATjzn.js +0 -1
- package/dist/assets/dist-Bb40mZM7.js +0 -1
- package/dist/assets/dist-C3z6pMsI.js +0 -1
- package/dist/assets/dist-CA6NQs25.js +0 -1
- package/dist/assets/dist-CCW85AP3.js +0 -1
- package/dist/assets/dist-CCnNQVp_.js +0 -1
- package/dist/assets/dist-CRVvx8nD.js +0 -1
- package/dist/assets/dist-CdZb2Grj.js +0 -1
- package/dist/assets/dist-ClLHDbNP.js +0 -1
- package/dist/assets/dist-CtKltiBh.js +0 -1
- package/dist/assets/dist-D-_c0KFz.js +0 -1
- package/dist/assets/dist-D6kWc2hF.js +0 -1
- package/dist/assets/dist-D89dID68.js +0 -1
- package/dist/assets/dist-DU2EJ7el.js +0 -3
- package/dist/assets/dist-DUY6xZX8.js +0 -13
- package/dist/assets/dist-DVHYieHl.js +0 -1
- package/dist/assets/dist-Q0mIwD1V.js +0 -1
- package/dist/assets/dist-aBuSkHFR.js +0 -1
- package/dist/assets/dist-gm5AeuIM.js +0 -1
- package/dist/assets/dist-p-IM2PMR.js +0 -1
- package/dist/assets/download-BTm4CTKr.js +0 -9
- package/dist/assets/edit-page-26-lDVMB.js +0 -13
- package/dist/assets/file-code-D9wtWSiR.js +0 -1
- package/dist/assets/file-explorer-panel-Bv8lRdKl.js +0 -1
- package/dist/assets/home-page-BXQp6S6h.js +0 -4
- package/dist/assets/html-to-image-b9BimK8l.js +0 -2
- package/dist/assets/index-B8ImLAg8.js +0 -38
- package/dist/assets/input-BPldEXfy.js +0 -1
- package/dist/assets/katex-YDobqqVd.js +0 -1
- package/dist/assets/layout-DVAA7kHH.js +0 -5
- package/dist/assets/mermaid-4DMBBIKO-C0QemhGt.js +0 -1
- package/dist/assets/purify.es-CPplrWRQ.js +0 -2
- package/dist/assets/react-vega-1nuO-sn0.js +0 -1
- package/dist/assets/session-panel-B_8ny7jh.js +0 -1
- package/dist/assets/stateDiagram-v2-4FDKWEC3-ct96_mle.js +0 -1
- package/dist/assets/stex-pjf-hOob.js +0 -1
- package/dist/assets/tracing-panel-Dz9mRjXj.js +0 -2
- package/dist/assets/types-DFiYrN2w.js +0 -17
- package/dist/assets/useBoolean-eWwLICkT.js +0 -1
- package/dist/assets/useCellActionButton-DFgACqVf.js +0 -1
- package/dist/assets/useEventListener-CjXriKgk.js +0 -1
- package/dist/assets/useNotebookActions-XGX8NzaB.js +0 -1
- package/dist/assets/usePress-DsLftN-x.js +0 -7
- /package/dist/assets/{Deferred-D2igisxY.js → Deferred-BMfCOLaw.js} +0 -0
- /package/dist/assets/{SSRProvider-DC7ElCZZ.js → SSRProvider-CwqN9FWV.js} +0 -0
- /package/dist/assets/{alert-0YTlkh9P.js → alert-Bs8tbZo_.js} +0 -0
- /package/dist/assets/{badge-CNBv2dAU.js → badge-BUFDGZ04.js} +0 -0
- /package/dist/assets/{blob-CObhN-9g.js → blob-DgooIGjS.js} +0 -0
- /package/dist/assets/{defaultLocale-DK1MWd7f.js → defaultLocale-CGfP-Ye3.js} +0 -0
- /package/dist/assets/{defaultLocale-OkOxlkkM.js → defaultLocale-CuYNS33t.js} +0 -0
- /package/dist/assets/{emotion-is-prop-valid.esm-D7FeWASw.js → emotion-is-prop-valid.esm-lG8j6oqk.js} +0 -0
- /package/dist/assets/{en-US-DBqDb4Nb.js → en-US-k6sS5Nab.js} +0 -0
- /package/dist/assets/{errors-Bfogio62.js → errors-0IrrdfSG.js} +0 -0
- /package/dist/assets/{extends-aq1t6BkR.js → extends-B9D0JO9U.js} +0 -0
- /package/dist/assets/{github-BrsjF9dp.js → github-BY6XM4ej.js} +0 -0
- /package/dist/assets/{isValid-D3F4nmET.js → isValid-CUXKlcrM.js} +0 -0
- /package/dist/assets/{katex-rvFxOCU-.js → katex-FSdXOW5Y.js} +0 -0
- /package/dist/assets/{kbd-CVbqSkT8.js → kbd-Rn7tWvNg.js} +0 -0
- /package/dist/assets/{link-Cpo6yhBB.js → link-BmtFffTv.js} +0 -0
- /package/dist/assets/{links-BKV6zi_7.js → links-MkDbmF2p.js} +0 -0
- /package/dist/assets/{objectWithoutPropertiesLoose-Dxmp_Bd_.js → objectWithoutPropertiesLoose-CboCOq4o.js} +0 -0
- /package/dist/assets/{ordinal-BEKpVWu-.js → ordinal-DMIExrUm.js} +0 -0
- /package/dist/assets/{paths-bMgYkaP2.js → paths-D2lG83Oh.js} +0 -0
- /package/dist/assets/{play-D4Tdvkms.js → play-CkqWG85-.js} +0 -0
- /package/dist/assets/{plus-B-s-VRHt.js → plus-C9B_qWUi.js} +0 -0
- /package/dist/assets/{preload-helper-TXkS1QI3.js → preload-helper-BW0IMuFq.js} +0 -0
- /package/dist/assets/{prop-types-DRf51_gT.js → prop-types-C638SUfx.js} +0 -0
- /package/dist/assets/{range-DNqFcYmr.js → range-ClqUI25v.js} +0 -0
- /package/dist/assets/{refresh-ccw-BOzRCrXK.js → refresh-ccw-B3lGEyQm.js} +0 -0
- /package/dist/assets/{refresh-cw-DeCFDX1B.js → refresh-cw-fLeDriQe.js} +0 -0
- /package/dist/assets/{rotate-ccw-BG5BZyzw.js → rotate-ccw-DgH8qERb.js} +0 -0
- /package/dist/assets/{save-I_RGv5p0.js → save-C91FTnFa.js} +0 -0
- /package/dist/assets/{settings-DD8FJvQ_.js → settings-DRfuuLRT.js} +0 -0
- /package/dist/assets/{spinner-DCSoZZhh.js → spinner-Dt4SmUsI.js} +0 -0
- /package/dist/assets/{square-oV8Csj8Y.js → square-DZpWT_hp.js} +0 -0
- /package/dist/assets/{square-function-4zY5Dv0P.js → square-function-DEp1ozoA.js} +0 -0
- /package/dist/assets/{stex-FMMSUPAS.js → stex-0ac7Aukl.js} +0 -0
- /package/dist/assets/{trash-2-DtQaB9NM.js → trash-2-CrA4LwJ2.js} +0 -0
- /package/dist/assets/{trash-Basz0Kvc.js → trash-ZGxZ3QGq.js} +0 -0
- /package/dist/assets/{triangle-alert-n1-FF7zs.js → triangle-alert-CzmxsxFO.js} +0 -0
- /package/dist/assets/{types-BhvWC48z.js → types-CswNghXe.js} +0 -0
- /package/dist/assets/{use-toast-BhMe50aT.js → use-toast-Hc8CXlvz.js} +0 -0
- /package/dist/assets/{useAsyncData-DVm0BCFt.js → useAsyncData-CI3ntihq.js} +0 -0
- /package/dist/assets/{useDebounce-BUC67G8E.js → useDebounce-S9zaMzrr.js} +0 -0
- /package/dist/assets/{uuid-ImXS-885.js → uuid-ClFZlR7U.js} +0 -0
- /package/dist/assets/{workflow-CU6kAL_h.js → workflow-DgZ_19fF.js} +0 -0
- /package/dist/assets/{youtube-fKFch587.js → youtube-DfMgNU9-.js} +0 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
+
import { describe, expect, it, vi } from "vitest";
|
|
3
|
+
import { MplCommWebSocket } from "../mpl-websocket-shim";
|
|
4
|
+
|
|
5
|
+
describe("MplCommWebSocket", () => {
|
|
6
|
+
it("starts in OPEN state", () => {
|
|
7
|
+
const ws = new MplCommWebSocket(vi.fn());
|
|
8
|
+
expect(ws.readyState).toBe(WebSocket.OPEN);
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
it("send() parses JSON and calls sendFn with parsed object", () => {
|
|
12
|
+
const sendFn = vi.fn();
|
|
13
|
+
const ws = new MplCommWebSocket(sendFn);
|
|
14
|
+
|
|
15
|
+
ws.send(JSON.stringify({ type: "resize", width: 640, height: 480 }));
|
|
16
|
+
|
|
17
|
+
expect(sendFn).toHaveBeenCalledOnce();
|
|
18
|
+
expect(sendFn).toHaveBeenCalledWith({
|
|
19
|
+
type: "resize",
|
|
20
|
+
width: 640,
|
|
21
|
+
height: 480,
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it("receiveJson() dispatches MessageEvent with JSON string data", () => {
|
|
26
|
+
const ws = new MplCommWebSocket(vi.fn());
|
|
27
|
+
const handler = vi.fn();
|
|
28
|
+
ws.onmessage = handler;
|
|
29
|
+
|
|
30
|
+
ws.receiveJson({ type: "figure_size", size: [640, 480] });
|
|
31
|
+
|
|
32
|
+
expect(handler).toHaveBeenCalledOnce();
|
|
33
|
+
const event: MessageEvent = handler.mock.calls[0][0];
|
|
34
|
+
expect(event).toBeInstanceOf(MessageEvent);
|
|
35
|
+
expect(event.type).toBe("message");
|
|
36
|
+
expect(JSON.parse(event.data as string)).toEqual({
|
|
37
|
+
type: "figure_size",
|
|
38
|
+
size: [640, 480],
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it("receiveJson() is a no-op if onmessage is not set", () => {
|
|
43
|
+
const ws = new MplCommWebSocket(vi.fn());
|
|
44
|
+
ws.receiveJson({ type: "test" });
|
|
45
|
+
expect(ws.onmessage).toBeNull();
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it("receiveBinary() dispatches MessageEvent with Blob data", () => {
|
|
49
|
+
const ws = new MplCommWebSocket(vi.fn());
|
|
50
|
+
const handler = vi.fn();
|
|
51
|
+
ws.onmessage = handler;
|
|
52
|
+
|
|
53
|
+
// Simulate a PNG-like binary buffer
|
|
54
|
+
const bytes = new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0, 1, 2, 3]);
|
|
55
|
+
const dv = new DataView(bytes.buffer);
|
|
56
|
+
|
|
57
|
+
ws.receiveBinary(dv);
|
|
58
|
+
|
|
59
|
+
expect(handler).toHaveBeenCalledOnce();
|
|
60
|
+
const event: MessageEvent = handler.mock.calls[0][0];
|
|
61
|
+
expect(event).toBeInstanceOf(MessageEvent);
|
|
62
|
+
expect(event.data).toBeInstanceOf(Blob);
|
|
63
|
+
expect((event.data as Blob).size).toBe(8);
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
it("receiveBinary() handles DataView with offset", () => {
|
|
67
|
+
const ws = new MplCommWebSocket(vi.fn());
|
|
68
|
+
const handler = vi.fn();
|
|
69
|
+
ws.onmessage = handler;
|
|
70
|
+
|
|
71
|
+
// Create a DataView that's a slice of a larger buffer
|
|
72
|
+
const fullBuffer = new ArrayBuffer(16);
|
|
73
|
+
const fullView = new Uint8Array(fullBuffer);
|
|
74
|
+
fullView.set([0, 0, 0, 0, 0x89, 0x50, 0x4e, 0x47, 0, 1, 2, 3, 0, 0, 0, 0]);
|
|
75
|
+
const dv = new DataView(fullBuffer, 4, 8);
|
|
76
|
+
|
|
77
|
+
ws.receiveBinary(dv);
|
|
78
|
+
|
|
79
|
+
expect(handler).toHaveBeenCalledOnce();
|
|
80
|
+
const blob = handler.mock.calls[0][0].data as Blob;
|
|
81
|
+
expect(blob.size).toBe(8);
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
it("close() sets readyState to CLOSED and fires onclose", () => {
|
|
85
|
+
const ws = new MplCommWebSocket(vi.fn());
|
|
86
|
+
const closeHandler = vi.fn();
|
|
87
|
+
ws.onclose = closeHandler;
|
|
88
|
+
|
|
89
|
+
ws.close();
|
|
90
|
+
|
|
91
|
+
expect(ws.readyState).toBe(WebSocket.CLOSED);
|
|
92
|
+
expect(closeHandler).toHaveBeenCalledOnce();
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
it("close() does not throw if onclose is not set", () => {
|
|
96
|
+
const ws = new MplCommWebSocket(vi.fn());
|
|
97
|
+
ws.close();
|
|
98
|
+
expect(ws.readyState).toBe(WebSocket.CLOSED);
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
it("onopen can be triggered externally", () => {
|
|
102
|
+
const ws = new MplCommWebSocket(vi.fn());
|
|
103
|
+
const openHandler = vi.fn();
|
|
104
|
+
ws.onopen = openHandler;
|
|
105
|
+
|
|
106
|
+
ws.onopen?.();
|
|
107
|
+
|
|
108
|
+
expect(openHandler).toHaveBeenCalledOnce();
|
|
109
|
+
});
|
|
110
|
+
});
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Fake WebSocket that routes messages through MarimoComm / MODEL_MANAGER
|
|
5
|
+
* instead of a real network WebSocket.
|
|
6
|
+
*
|
|
7
|
+
* mpl.js expects a WebSocket-like object with:
|
|
8
|
+
* - readyState
|
|
9
|
+
* - send(data: string)
|
|
10
|
+
* - onopen / onmessage / onclose callbacks
|
|
11
|
+
*/
|
|
12
|
+
export class MplCommWebSocket {
|
|
13
|
+
readyState: number = WebSocket.OPEN;
|
|
14
|
+
private sendFn: (msg: unknown) => void;
|
|
15
|
+
|
|
16
|
+
onopen: (() => void) | null = null;
|
|
17
|
+
onmessage: ((evt: MessageEvent) => void) | null = null;
|
|
18
|
+
onclose: (() => void) | null = null;
|
|
19
|
+
|
|
20
|
+
constructor(sendFn: (msg: unknown) => void) {
|
|
21
|
+
this.sendFn = sendFn;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Called by mpl.js to send a message to the backend.
|
|
26
|
+
* mpl.js always sends JSON strings.
|
|
27
|
+
*/
|
|
28
|
+
send(data: string): void {
|
|
29
|
+
this.sendFn(JSON.parse(data));
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Called when the backend pushes a JSON message via the model custom event.
|
|
34
|
+
*/
|
|
35
|
+
receiveJson(data: unknown): void {
|
|
36
|
+
this.onmessage?.(
|
|
37
|
+
new MessageEvent("message", { data: JSON.stringify(data) }),
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Called when the backend pushes binary data (PNG render) via model custom event.
|
|
43
|
+
*/
|
|
44
|
+
receiveBinary(buffer: DataView): void {
|
|
45
|
+
const ab = buffer.buffer.slice(
|
|
46
|
+
buffer.byteOffset,
|
|
47
|
+
buffer.byteOffset + buffer.byteLength,
|
|
48
|
+
) as ArrayBuffer;
|
|
49
|
+
const blob = new Blob([ab]);
|
|
50
|
+
this.onmessage?.(new MessageEvent("message", { data: blob }));
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
close(): void {
|
|
54
|
+
this.readyState = WebSocket.CLOSED;
|
|
55
|
+
this.onclose?.();
|
|
56
|
+
}
|
|
57
|
+
}
|
package/src/plugins/plugins.ts
CHANGED
|
@@ -26,6 +26,7 @@ import { MatrixPlugin } from "./impl/MatrixPlugin";
|
|
|
26
26
|
import { MicrophonePlugin } from "./impl/MicrophonePlugin";
|
|
27
27
|
import { MultiselectPlugin } from "./impl/MultiselectPlugin";
|
|
28
28
|
import { MatplotlibPlugin } from "./impl/matplotlib/MatplotlibPlugin";
|
|
29
|
+
import { MplInteractivePlugin } from "./impl/mpl-interactive/MplInteractivePlugin";
|
|
29
30
|
import { NumberPlugin } from "./impl/NumberPlugin";
|
|
30
31
|
import { PanelPlugin } from "./impl/panel/PanelPlugin";
|
|
31
32
|
import { PlotlyPlugin } from "./impl/plotly/PlotlyPlugin";
|
|
@@ -92,6 +93,7 @@ export const UI_PLUGINS: IPlugin<any, unknown>[] = [
|
|
|
92
93
|
AnyWidgetPlugin,
|
|
93
94
|
DataEditorPlugin,
|
|
94
95
|
PanelPlugin,
|
|
96
|
+
MplInteractivePlugin,
|
|
95
97
|
];
|
|
96
98
|
|
|
97
99
|
// List of output / layout plugins
|
|
@@ -23,6 +23,12 @@ describe("Filenames", () => {
|
|
|
23
23
|
expect(Filenames.toPNG("test.foo.py")).toEqual("test.foo.png");
|
|
24
24
|
});
|
|
25
25
|
|
|
26
|
+
it("should convert filename to ipynb", () => {
|
|
27
|
+
expect(Filenames.toIPYNB("test")).toEqual("test.ipynb");
|
|
28
|
+
expect(Filenames.toIPYNB("test.txt")).toEqual("test.ipynb");
|
|
29
|
+
expect(Filenames.toIPYNB("test.foo.py")).toEqual("test.foo.ipynb");
|
|
30
|
+
});
|
|
31
|
+
|
|
26
32
|
it("should remove extension from filename", () => {
|
|
27
33
|
expect(Filenames.withoutExtension("test")).toEqual("test");
|
|
28
34
|
expect(Filenames.withoutExtension("test.txt")).toEqual("test");
|
|
@@ -39,6 +45,7 @@ describe("Filenames", () => {
|
|
|
39
45
|
expect(Filenames.toHTML(filename)).toEqual(`${withoutExt}.html`);
|
|
40
46
|
expect(Filenames.toPNG(filename)).toEqual(`${withoutExt}.png`);
|
|
41
47
|
expect(Filenames.toPY(filename)).toEqual(`${withoutExt}.py`);
|
|
48
|
+
expect(Filenames.toIPYNB(filename)).toEqual(`${withoutExt}.ipynb`);
|
|
42
49
|
|
|
43
50
|
// Ensure operations preserve unicode and special characters in base name
|
|
44
51
|
expect(withoutExt).not.toEqual("");
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
+
import { describe, expect, it } from "vitest";
|
|
3
|
+
import { smartMatch, smartMatchFilter } from "../smartMatch";
|
|
4
|
+
|
|
5
|
+
describe("smartMatch", () => {
|
|
6
|
+
it("matches exact word", () => {
|
|
7
|
+
expect(smartMatch("run", "Run cell")).toBe(true);
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
it("matches word prefix", () => {
|
|
11
|
+
expect(smartMatch("exe", "execute start")).toBe(true);
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
it("matches across array of haystacks", () => {
|
|
15
|
+
expect(smartMatch("exe", ["Run", "execute start"])).toBe(true);
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
it("does not match unrelated terms", () => {
|
|
19
|
+
expect(smartMatch("xyz", "Run cell")).toBe(false);
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it("empty search matches everything", () => {
|
|
23
|
+
expect(smartMatch("", "anything")).toBe(true);
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it("multi-word needle requires all words to match", () => {
|
|
27
|
+
expect(smartMatch("run cell", "Run cell")).toBe(true);
|
|
28
|
+
expect(smartMatch("run xyz", "Run cell")).toBe(false);
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
it("is case-insensitive", () => {
|
|
32
|
+
expect(smartMatch("RUN", "run cell")).toBe(true);
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
it("skips null/undefined haystacks", () => {
|
|
36
|
+
expect(smartMatch("run", [null, undefined, "Run cell"])).toBe(true);
|
|
37
|
+
expect(smartMatch("run", [null, undefined])).toBe(false);
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
describe("smartMatchFilter", () => {
|
|
42
|
+
it("returns 1 for value match", () => {
|
|
43
|
+
expect(smartMatchFilter("Run cell", "run")).toBe(1);
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
it("returns 0 for no match", () => {
|
|
47
|
+
expect(smartMatchFilter("Run cell", "xyz")).toBe(0);
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
it("returns 0.8 for keyword-only match", () => {
|
|
51
|
+
expect(smartMatchFilter("Run", "execute", ["execute", "start"])).toBe(0.8);
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
it("returns 1 when value matches even if keywords also match", () => {
|
|
55
|
+
expect(smartMatchFilter("Run", "run", ["execute", "start"])).toBe(1);
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
it("does not match without relevant keywords", () => {
|
|
59
|
+
expect(smartMatchFilter("Run", "preferences", ["execute"])).toBe(0);
|
|
60
|
+
});
|
|
61
|
+
});
|
package/src/utils/filenames.ts
CHANGED
|
@@ -15,6 +15,9 @@ export const Filenames = {
|
|
|
15
15
|
toPY: (filename: string): string => {
|
|
16
16
|
return Filenames.replace(filename, "py");
|
|
17
17
|
},
|
|
18
|
+
toIPYNB: (filename: string): string => {
|
|
19
|
+
return Filenames.replace(filename, "ipynb");
|
|
20
|
+
},
|
|
18
21
|
withoutExtension: (filename: string): string => {
|
|
19
22
|
// Just remove the last extension
|
|
20
23
|
const parts = filename.split(".");
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/* Copyright 2026 Marimo. All rights reserved. */
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Split a string into lowercase words (letters/digits only).
|
|
5
|
+
*/
|
|
6
|
+
function words(s: string): string[] {
|
|
7
|
+
return s.toLowerCase().match(/[\da-z]+/g) || [];
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Returns true when every word in `needle` is a prefix of at least one word
|
|
12
|
+
* in one of the `haystacks`.
|
|
13
|
+
*
|
|
14
|
+
* Examples:
|
|
15
|
+
* smartMatch("run", "Run cell") // true – "run" prefixes "run"
|
|
16
|
+
* smartMatch("exe", ["Run", "execute start"]) // true – "exe" prefixes "execute"
|
|
17
|
+
* smartMatch("xyz", "Run cell") // false
|
|
18
|
+
*/
|
|
19
|
+
export function smartMatch(
|
|
20
|
+
needle: string,
|
|
21
|
+
haystackOrHaystacks: string | (string | null | undefined)[],
|
|
22
|
+
): boolean {
|
|
23
|
+
const needleWords = words(needle);
|
|
24
|
+
if (needleWords.length === 0) {
|
|
25
|
+
return true; // empty search matches everything
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
const haystacks = Array.isArray(haystackOrHaystacks)
|
|
29
|
+
? haystackOrHaystacks
|
|
30
|
+
: [haystackOrHaystacks];
|
|
31
|
+
|
|
32
|
+
// Collect all words from all haystacks
|
|
33
|
+
const haystackWords: string[] = [];
|
|
34
|
+
for (const h of haystacks) {
|
|
35
|
+
if (h) {
|
|
36
|
+
haystackWords.push(...words(h));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Every needle word must be a prefix of at least one haystack word
|
|
41
|
+
return needleWords.every((nw) => {
|
|
42
|
+
return haystackWords.some((hw) => hw.startsWith(nw));
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* cmdk-compatible filter function.
|
|
48
|
+
* Returns 1 for a value match, 0.8 for a keyword-only match, 0 for no match.
|
|
49
|
+
*/
|
|
50
|
+
export function smartMatchFilter(
|
|
51
|
+
value: string,
|
|
52
|
+
search: string,
|
|
53
|
+
keywords?: string[],
|
|
54
|
+
): number {
|
|
55
|
+
if (smartMatch(search, value)) {
|
|
56
|
+
return 1;
|
|
57
|
+
}
|
|
58
|
+
if (keywords && smartMatch(search, keywords)) {
|
|
59
|
+
return 0.8;
|
|
60
|
+
}
|
|
61
|
+
return 0;
|
|
62
|
+
}
|
|
@@ -1,138 +0,0 @@
|
|
|
1
|
-
var Ve=Object.defineProperty;var Ze=(t,e,s)=>e in t?Ve(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s;var z=(t,e,s)=>Ze(t,typeof e!="symbol"?e+"":e,s);import{s as ne}from"./chunk-LvLJmgfZ.js";import{t as Qe}from"./react-Bj1aDYRI.js";import{Rn as g,T as Je,Tt as ce,rr as Ye}from"./cells-CCtxWKxf.js";import{D as K,P as y,R as u,T as N,_ as ae,i as Xe,k as _,m as et}from"./zod-H_cgTO0M.js";import{t as P}from"./compiler-runtime-B3qBwwSJ.js";import{t as H}from"./assertNever-Dw9aFN4h.js";import{t as tt}from"./_createAggregator-BjsxkJZj.js";import{h as st}from"./useEventListener-CjXriKgk.js";import{t as rt}from"./jsx-runtime-CP2fAiZX.js";import{t as Z}from"./button-BmOH9agK.js";import{t as W}from"./cn-d_A4rA-x.js";import{t as Q}from"./createLucideIcon-BvP5LBIs.js";import{t as ot}from"./circle-plus-DfyUnSPr.js";import{a as J,c as ie,o as nt,p as ct,r as at,t as it}from"./dropdown-menu-CKhrfxsx.js";import{t as lt}from"./database-zap-B3efE3T2.js";import{t as dt}from"./file-code-D9wtWSiR.js";import{t as pt}from"./file-DVwc11C3.js";import{t as ht}from"./github-BrsjF9dp.js";import{m as mt,o as ut,t as bt,u as a}from"./form-B7_NRa34.js";import{i as ft}from"./html-to-image-b9BimK8l.js";import{n as gt}from"./DeferredRequestRegistry-CMZsNx4R.js";import{o as yt,r as _t}from"./input-BPldEXfy.js";import{c as wt,d as xt,f as St,h as kt,l as vt,n as $t,p as jt,s as Ct,t as At,u as Rt,v as Tt}from"./azure-Ddr1pZpW.js";import{r as Lt}from"./useTheme-CwdqVOYu.js";import{c as Dt,i as It,n as Nt,r as qt,s as Ft,t as Pt}from"./select-DygbgNTD.js";import{a as Bt,c as Mt,l as Et,n as Ot,r as Ut,t as zt}from"./dialog-BXzvlof-.js";import{c as le,l as Kt,s as Ht,u as de}from"./popover-Cvl9xY6R.js";import{n as Wt}from"./ImperativeModal-CRNJOvqT.js";import{t as pe}from"./links-BKV6zi_7.js";import{n as Gt}from"./useAsyncData-DVm0BCFt.js";import{o as Vt}from"./focus-ShrwcKIv.js";import{t as Zt}from"./request-registry-CN4oD1xn.js";import{n as Qt,t as Jt}from"./write-secret-modal-DuxmGjDn.js";var Yt=tt(function(t,e,s){t[s?0:1].push(e)},function(){return[[],[]]}),Xt=Q("file-play",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M15.033 13.44a.647.647 0 0 1 0 1.12l-4.065 2.352a.645.645 0 0 1-.968-.56v-4.704a.645.645 0 0 1 .967-.56z",key:"1tzo1f"}]]),es=Q("file-spreadsheet",[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M8 13h2",key:"yr2amv"}],["path",{d:"M14 13h2",key:"un5t4a"}],["path",{d:"M8 17h2",key:"2yhykz"}],["path",{d:"M14 17h2",key:"10kma7"}]]),Y=Q("hard-drive",[["line",{x1:"22",x2:"2",y1:"12",y2:"12",key:"1y58io"}],["path",{d:"M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z",key:"oot6mr"}],["line",{x1:"6",x2:"6.01",y1:"16",y2:"16",key:"sgf278"}],["line",{x1:"10",x2:"10.01",y1:"16",y2:"16",key:"1l4acy"}]]),X="env:";function zr(t){return t}function E(t){return typeof t=="string"?t.startsWith(X):!1}function ee(t){return`${X}${t}`}function he(t){return t.replace(X,"")}var ts=P(),B=ne(Qe(),1),n=ne(rt(),1),me=(0,B.createContext)({providerNames:[],secretKeys:[],loading:!1,error:void 0,refreshSecrets:st.NOOP});const ss=()=>(0,B.use)(me),rs=t=>{let e=(0,ts.c)(14),{children:s}=t,o;e[0]===Symbol.for("react.memo_cache_sentinel")?(o=[],e[0]=o):o=e[0];let{data:r,isPending:l,error:i,refetch:c}=Gt(is,o),d;e[1]===(r==null?void 0:r.secretKeys)?d=e[2]:(d=(r==null?void 0:r.secretKeys)||[],e[1]=r==null?void 0:r.secretKeys,e[2]=d);let m;e[3]===(r==null?void 0:r.providerNames)?m=e[4]:(m=(r==null?void 0:r.providerNames)||[],e[3]=r==null?void 0:r.providerNames,e[4]=m);let p;e[5]!==i||e[6]!==l||e[7]!==c||e[8]!==d||e[9]!==m?(p={secretKeys:d,providerNames:m,loading:l,error:i,refreshSecrets:c},e[5]=i,e[6]=l,e[7]=c,e[8]=d,e[9]=m,e[10]=p):p=e[10];let f;return e[11]!==s||e[12]!==p?(f=(0,n.jsx)(me,{value:p,children:s}),e[11]=s,e[12]=p,e[13]=f):f=e[13],f},os={isMatch:t=>{if(t instanceof ae||t instanceof et){let{optionRegex:e}=a.parse(t.description||"");return!!e}return!1},Component:({schema:t,form:e,path:s})=>{let{secretKeys:o,providerNames:r,refreshSecrets:l}=ss(),{openModal:i,closeModal:c}=Wt(),{label:d,description:m,optionRegex:p=""}=a.parse(t.description||""),[f,h]=Yt(o,b=>new RegExp(p,"i").test(b));return(0,n.jsx)(Rt,{control:e.control,name:s,render:({field:b})=>(0,n.jsxs)(xt,{children:[(0,n.jsx)(St,{children:d}),(0,n.jsx)(wt,{children:m}),(0,n.jsx)(Ct,{children:(0,n.jsxs)("div",{className:"flex gap-2",children:[t instanceof ae?(0,n.jsx)(_t,{...b,value:b.value,onChange:b.onChange,className:W("flex-1")}):(0,n.jsx)(yt,{...b,value:b.value,onChange:b.onChange,className:"flex-1"}),(0,n.jsxs)(it,{children:[(0,n.jsx)(ct,{asChild:!0,children:(0,n.jsx)(Z,{variant:"outline",size:"icon",className:W(E(b.value)&&"bg-accent"),children:(0,n.jsx)(gt,{className:"h-3 w-3"})})}),(0,n.jsxs)(at,{align:"end",className:"max-h-60 overflow-y-auto",children:[(0,n.jsxs)(J,{onSelect:()=>{i((0,n.jsx)(Jt,{providerNames:r,onSuccess:w=>{l(),b.onChange(ee(w)),c()},onClose:c}))},children:[(0,n.jsx)(ot,{className:"mr-2 h-3.5 w-3.5"}),"Create a new secret"]}),f.length>0&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(ie,{}),(0,n.jsx)(nt,{children:"Recommended"})]}),f.map(w=>(0,n.jsx)(J,{onSelect:()=>b.onChange(ee(w)),children:w},w)),h.length>0&&(0,n.jsx)(ie,{}),h.map(w=>(0,n.jsx)(J,{onSelect:()=>b.onChange(ee(w)),children:w},w))]})]})]})}),(0,n.jsx)(jt,{})]})})}};function ns(t){return t.provider!=="env"}function cs(t){return t.name}function as(t){return t.keys}async function is(){let t=await Zt.request({}),e=Qt(t.secrets).filter(ns).map(cs);return{secretKeys:t.secrets.flatMap(as).sort(),providerNames:e}}var O=P(),ls=[os];const te=t=>{let e=(0,O.c)(2),{children:s}=t,o;return e[0]===s?o=e[1]:(o=(0,n.jsx)("div",{className:"grid grid-cols-2 md:grid-cols-3 gap-4",children:s}),e[0]=s,e[1]=o),o},se=t=>{let e=(0,O.c)(9),{name:s,color:o,icon:r,onSelect:l}=t,i;e[0]===o?i=e[1]:(i={backgroundColor:o},e[0]=o,e[1]=i);let c;e[2]===s?c=e[3]:(c=(0,n.jsx)("span",{className:"text-white font-medium text-lg",children:s}),e[2]=s,e[3]=c);let d;return e[4]!==r||e[5]!==l||e[6]!==i||e[7]!==c?(d=(0,n.jsxs)("button",{type:"button",className:"py-3 flex flex-col items-center justify-center gap-1 transition-all hover:scale-105 hover:brightness-110 rounded shadow-sm-solid hover:shadow-md-solid",style:i,onClick:l,children:[r,c]}),e[4]=r,e[5]=l,e[6]=i,e[7]=c,e[8]=d):d=e[8],d},ds=t=>{let e=(0,O.c)(25),{onBack:s,isValid:o,libraries:r,preferredLibrary:l,onLibraryChange:i,displayNames:c,libraryLabel:d}=t,m=d===void 0?"Preferred library":d,p;e[0]===s?p=e[1]:(p=(0,n.jsx)(Z,{type:"button",variant:"outline",onClick:s,children:"Back"}),e[0]=s,e[1]=p);let f=!o,h;e[2]===f?h=e[3]:(h=(0,n.jsx)(Z,{type:"submit",disabled:f,children:"Add"}),e[2]=f,e[3]=h);let b;e[4]!==p||e[5]!==h?(b=(0,n.jsxs)("div",{className:"flex gap-2",children:[p,h]}),e[4]=p,e[5]=h,e[6]=b):b=e[6];let w;e[7]===Symbol.for("react.memo_cache_sentinel")?(w=(0,n.jsx)(Ft,{children:(0,n.jsx)(Dt,{placeholder:"Select a library"})}),e[7]=w):w=e[7];let S;e[8]===m?S=e[9]:(S=(0,n.jsxs)("div",{className:"flex flex-col gap-1 items-end",children:[w,(0,n.jsx)("span",{className:"text-xs text-muted-foreground",children:m})]}),e[8]=m,e[9]=S);let R;if(e[10]!==c||e[11]!==r){let v;e[13]===c?v=e[14]:(v=C=>(0,n.jsx)(It,{value:C,children:c[C]??C},C),e[13]=c,e[14]=v),R=r.map(v),e[10]=c,e[11]=r,e[12]=R}else R=e[12];let $;e[15]===R?$=e[16]:($=(0,n.jsx)(Nt,{children:(0,n.jsx)(qt,{children:R})}),e[15]=R,e[16]=$);let k;e[17]!==i||e[18]!==l||e[19]!==S||e[20]!==$?(k=(0,n.jsx)("div",{children:(0,n.jsxs)(Pt,{value:l,onValueChange:i,children:[S,$]})}),e[17]=i,e[18]=l,e[19]=S,e[20]=$,e[21]=k):k=e[21];let T;return e[22]!==k||e[23]!==b?(T=(0,n.jsxs)("div",{className:"flex gap-2 justify-between",children:[b,k]}),e[22]=k,e[23]=b,e[24]=T):T=e[24],T};function ps(){let t=(0,O.c)(3),{createNewCell:e}=Je(),s=Vt(),o;return t[0]!==e||t[1]!==s?(o=r=>{e({code:r,before:!1,cellId:s??"__end__",skipIfCodeExists:!0})},t[0]=e,t[1]=s,t[2]=o):o=t[2],o}const ue=t=>{let e=(0,O.c)(30),{schema:s,libraries:o,preferredLibrary:r,displayNames:l,libraryLabel:i,generateCode:c,onSubmit:d,onBack:m}=t,p;e[0]===s?p=e[1]:(p=ut(s),e[0]=s,e[1]=p);let f=p,h;e[2]===s?h=e[3]:(h=kt(s),e[2]=s,e[3]=h);let b;e[4]!==f||e[5]!==h?(b={defaultValues:f,resolver:h,reValidateMode:"onChange"},e[4]=f,e[5]=h,e[6]=b):b=e[6];let w=Tt(b),[S,R]=B.useState(r),$=ps(),k;e[7]!==c||e[8]!==$||e[9]!==d||e[10]!==S?(k=Ge=>{$(c(Ge,S)),d()},e[7]=c,e[8]=$,e[9]=d,e[10]=S,e[11]=k):k=e[11];let T=k,v;e[12]!==w||e[13]!==T?(v=w.handleSubmit(T),e[12]=w,e[13]=T,e[14]=v):v=e[14];let C;e[15]===Symbol.for("react.memo_cache_sentinel")?(C=(0,n.jsx)(vt,{}),e[15]=C):C=e[15];let q;e[16]!==w||e[17]!==s?(q=(0,n.jsx)(rs,{children:(0,n.jsx)(bt,{schema:s,form:w,renderers:ls,children:C})}),e[16]=w,e[17]=s,e[18]=q):q=e[18];let F;e[19]!==l||e[20]!==w.formState.isValid||e[21]!==o||e[22]!==i||e[23]!==m||e[24]!==S?(F=(0,n.jsx)(ds,{onBack:m,isValid:w.formState.isValid,libraries:o,preferredLibrary:S,onLibraryChange:R,displayNames:l,libraryLabel:i}),e[19]=l,e[20]=w.formState.isValid,e[21]=o,e[22]=i,e[23]=m,e[24]=S,e[25]=F):F=e[25];let U;return e[26]!==v||e[27]!==q||e[28]!==F?(U=(0,n.jsxs)("form",{onSubmit:v,className:"space-y-4",children:[q,F]}),e[26]=v,e[27]=q,e[28]=F,e[29]=U):U=e[29],U};function L(){return u().optional().describe(a.of({label:"Password",inputType:"password",placeholder:"password",optionRegex:".*password.*"}))}function re(t,e){let s=u();return s=e?s.nonempty():s.optional(),s=s.describe(a.of({label:t||"Token",inputType:"password",placeholder:"token",optionRegex:".*token.*"})),s}function G(){return u().optional().describe(a.of({label:"Warehouse Name",placeholder:"warehouse",optionRegex:".*warehouse.*"}))}function oe(t,e){let s=u();return s=e?s.nonempty():s.optional(),s.describe(a.of({label:t||"URI",optionRegex:".*uri.*"}))}function A(t){return u().nonempty().describe(a.of({label:t||"Host",placeholder:"localhost",optionRegex:".*host.*"}))}function j(){return u().describe(a.of({label:"Database",placeholder:"db name",optionRegex:".*database.*"}))}function hs(){return u().describe(a.of({label:"Schema",placeholder:"schema name",optionRegex:".*schema.*"}))}function D(){return u().nonempty().describe(a.of({label:"Username",placeholder:"username",optionRegex:".*username.*"}))}function I(t){let e=Xe().describe(a.of({label:"Port",inputType:"number",placeholder:t==null?void 0:t.toString()})).transform(Number).refine(s=>s>=0&&s<=65535,{message:"Port must be between 0 and 65535"});return t===void 0?e:e.default(t)}function be(){return N().default(!1).describe(a.of({label:"Read Only"}))}const fe=y({type:_("postgres"),host:A(),port:I(5432).optional(),database:j(),username:D(),password:L(),ssl:N().default(!1).describe(a.of({label:"Use SSL"}))}).describe(a.of({direction:"two-columns"})),ge=y({type:_("mysql"),host:A(),port:I(3306),database:j(),username:D(),password:L(),ssl:N().default(!1).describe(a.of({label:"Use SSL"}))}).describe(a.of({direction:"two-columns"})),ye=y({type:_("sqlite"),database:j().describe(a.of({label:"Database Path"}))}).describe(a.of({direction:"two-columns"})),_e=y({type:_("duckdb"),database:j().describe(a.of({label:"Database Path"})),read_only:be()}).describe(a.of({direction:"two-columns"})),we=y({type:_("motherduck"),database:j().default("my_db").describe(a.of({label:"Database Name"})),token:re()}).describe(a.of({direction:"two-columns"})),xe=y({type:_("snowflake"),account:u().nonempty().describe(a.of({label:"Account",optionRegex:".*snowflake.*"})),warehouse:u().optional().describe(a.of({label:"Warehouse",optionRegex:".*snowflake.*"})),database:j(),schema:u().optional().describe(a.of({label:"Schema",optionRegex:".*snowflake.*"})),username:D(),password:L(),role:u().optional().describe(a.of({label:"Role"}))}).describe(a.of({direction:"two-columns"})),Se=y({type:_("bigquery"),project:u().nonempty().describe(a.of({label:"Project ID",optionRegex:".*bigquery.*"})),dataset:u().nonempty().describe(a.of({label:"Dataset",optionRegex:".*bigquery.*"})),credentials_json:u().describe(a.of({label:"Credentials JSON",inputType:"textarea"}))}).describe(a.of({direction:"two-columns"})),ke=y({type:_("clickhouse_connect"),host:A(),port:I(8123).optional(),username:D(),password:L(),secure:N().default(!1).describe(a.of({label:"Use HTTPs"})),proxy_path:u().optional().describe(a.of({label:"Proxy Path",placeholder:"/clickhouse"}))}).describe(a.of({direction:"two-columns"})),ve=y({type:_("timeplus"),host:A().default("localhost"),port:I(8123).optional(),username:D().default("default"),password:L().default("")}).describe(a.of({direction:"two-columns"})),$e=y({type:_("chdb"),database:j().describe(a.of({label:"Database Path"})),read_only:be()}).describe(a.of({direction:"two-columns"})),je=y({type:_("trino"),host:A(),port:I(8080),database:j(),schema:hs().optional(),username:D(),password:L(),async_support:N().default(!1).describe(a.of({label:"Async Support"}))}).describe(a.of({direction:"two-columns"})),Ce=y({type:_("iceberg"),name:u().describe(a.of({label:"Catalog Name"})),catalog:K("type",[y({type:_("REST"),warehouse:G(),uri:u().optional().describe(a.of({label:"URI",placeholder:"https://",optionRegex:".*uri.*"})),token:re()}),y({type:_("SQL"),warehouse:G(),uri:u().optional().describe(a.of({label:"URI",placeholder:"jdbc:iceberg://host:port/database",optionRegex:".*uri.*"}))}),y({type:_("Hive"),warehouse:G(),uri:oe()}),y({type:_("Glue"),warehouse:G(),uri:oe()}),y({type:_("DynamoDB"),"dynamodb.profile-name":u().optional().describe(a.of({label:"Profile Name"})),"dynamodb.region":u().optional().describe(a.of({label:"Region"})),"dynamodb.access-key-id":u().optional().describe(a.of({label:"Access Key ID"})),"dynamodb.secret-access-key":u().optional().describe(a.of({label:"Secret Access Key",inputType:"password"})),"dynamodb.session-token":u().optional().describe(a.of({label:"Session Token",inputType:"password"}))})]).default({type:"REST",token:void 0}).describe(a.of({special:"tabs"}))}),Ae=y({type:_("datafusion"),sessionContext:N().optional().describe(a.of({label:"Use Session Context"}))}),Re=y({type:_("pyspark"),host:A().optional(),port:I().optional()}),Te=y({type:_("redshift"),host:A(),port:I(5439),connectionType:K("type",[y({type:_("IAM credentials"),region:u().describe(a.of({label:"Region"})),aws_access_key_id:u().nonempty().describe(a.of({label:"AWS Access Key ID",inputType:"password",optionRegex:".*aws_access_key_id.*"})),aws_secret_access_key:u().nonempty().describe(a.of({label:"AWS Secret Access Key",inputType:"password",optionRegex:".*aws_secret_access_key.*"})),aws_session_token:u().optional().describe(a.of({label:"AWS Session Token",inputType:"password",optionRegex:".*aws_session_token.*"}))}),y({type:_("DB credentials"),user:D(),password:L()})]).default({type:"IAM credentials",aws_access_key_id:"",aws_secret_access_key:"",region:""}),database:j()}).describe(a.of({direction:"two-columns"})),Le=y({type:_("databricks"),access_token:re("Access Token",!0),server_hostname:A("Server Hostname"),http_path:oe("HTTP Path",!0),catalog:u().optional().describe(a.of({label:"Catalog"})),schema:u().optional().describe(a.of({label:"Schema"}))}).describe(a.of({direction:"two-columns"})),De=y({type:_("supabase"),host:A(),port:I(5432).optional(),database:j(),username:D(),password:L(),disable_client_pooling:N().default(!1).describe(a.of({label:"Disable Client-Side Pooling"}))}).describe(a.of({direction:"two-columns"})),ms=K("type",[fe,ge,ye,_e,we,xe,Se,ke,ve,$e,je,Ce,Ae,Re,Te,Le,De]),Ie={sqlmodel:"SQLModel",sqlalchemy:"SQLAlchemy",duckdb:"DuckDB",clickhouse_connect:"ClickHouse Connect",chdb:"chDB",pyiceberg:"PyIceberg",ibis:"Ibis",motherduck:"MotherDuck",redshift:"Redshift",databricks:"Databricks"};var x=class{constructor(t,e,s){this.connection=t,this.orm=e,this.secrets=s}get imports(){let t=new Set(this.generateImports());switch(this.orm){case"sqlalchemy":t.add("import sqlalchemy");break;case"sqlmodel":t.add("import sqlmodel");break;case"duckdb":t.add("import duckdb");break;case"ibis":t.add("import ibis");break}return t}},us=t=>`_${t}`,bs=class{constructor(){z(this,"secrets",{})}get imports(){return Object.keys(this.secrets).length===0?new Set:new Set(["import os"])}print(t,e,s){if(t=us(t),E(e)){let o=he(e),r=s?`os.environ.get("${o}", "${s}")`:`os.environ.get("${o}")`;return this.secrets[t]=r,t}if(s!=null){let o=`os.environ.get("${e}", "${s}")`;return this.secrets[t]=o,t}return typeof e=="number"||typeof e=="number"?`${e}`:typeof e=="boolean"?M(e):e?`"${e}"`:""}printInFString(t,e,s){if(e===void 0)return"";if(typeof e=="number")return`${e}`;if(typeof e=="boolean")return M(e);let o=this.print(t,e,s);return o.startsWith('"')&&o.endsWith('"')?o.slice(1,-1):`{${o}}`}printPassword(t,e,s,o){let r=s?this.printInFString.bind(this):this.print.bind(this);return E(t)?r(o||"password",t):r(o||"password",e,t)}getSecrets(){return this.secrets}formatSecrets(){return Object.keys(this.secrets).length===0?"":Object.entries(this.secrets).map(([t,e])=>`${t} = ${e}`).join(`
|
|
2
|
-
`)}},fs=class extends x{generateImports(){return[]}generateConnectionCode(){let t=this.connection.ssl?", connect_args={'sslmode': 'require'}":"",e=this.secrets.printPassword(this.connection.password,"POSTGRES_PASSWORD",!0);return g(`
|
|
3
|
-
DATABASE_URL = f"postgresql://${this.secrets.printInFString("username",this.connection.username)}:${e}@${this.secrets.printInFString("host",this.connection.host)}:${this.secrets.printInFString("port",this.connection.port)}/${this.secrets.printInFString("database",this.connection.database)}"
|
|
4
|
-
engine = ${this.orm}.create_engine(DATABASE_URL${t})
|
|
5
|
-
`)}},gs=class extends x{generateImports(){return[]}generateConnectionCode(){let t=this.connection.ssl?", connect_args={'ssl': {'ssl-mode': 'preferred'}}":"",e=this.secrets.printPassword(this.connection.password,"MYSQL_PASSWORD",!0),s=this.secrets.printInFString("database",this.connection.database);return g(`
|
|
6
|
-
DATABASE_URL = f"mysql+pymysql://${this.secrets.printInFString("username",this.connection.username)}:${e}@${this.secrets.printInFString("host",this.connection.host)}:${this.secrets.printInFString("port",this.connection.port)}/${s}"
|
|
7
|
-
engine = ${this.orm}.create_engine(DATABASE_URL${t})
|
|
8
|
-
`)}},ys=class extends x{generateImports(){return[]}generateConnectionCode(){let t=this.connection.database?this.secrets.printInFString("database",this.connection.database):"";return g(`
|
|
9
|
-
${t.startsWith("{")&&t.endsWith("}")?`DATABASE_URL = f"sqlite:///${t}"`:`DATABASE_URL = "sqlite:///${t}"`}
|
|
10
|
-
engine = ${this.orm}.create_engine(DATABASE_URL)
|
|
11
|
-
`)}},_s=class extends x{generateImports(){return["from snowflake.sqlalchemy import URL"]}generateConnectionCode(){let t=this.secrets.printPassword(this.connection.password,"SNOWFLAKE_PASSWORD",!1),e={account:this.secrets.print("account",this.connection.account),user:this.secrets.print("user",this.connection.username),database:this.secrets.print("database",this.connection.database),warehouse:this.connection.warehouse?this.secrets.print("warehouse",this.connection.warehouse):void 0,schema:this.connection.schema?this.secrets.print("schema",this.connection.schema):void 0,role:this.connection.role?this.secrets.print("role",this.connection.role):void 0,password:t};return g(`
|
|
12
|
-
engine = ${this.orm}.create_engine(
|
|
13
|
-
URL(
|
|
14
|
-
${V(e,s=>` ${s}`)},
|
|
15
|
-
)
|
|
16
|
-
)
|
|
17
|
-
`)}},ws=class extends x{generateImports(){return["import json"]}generateConnectionCode(){let t=this.secrets.printInFString("project",this.connection.project),e=this.secrets.printInFString("dataset",this.connection.dataset);return g(`
|
|
18
|
-
credentials = json.loads("""${this.connection.credentials_json}""")
|
|
19
|
-
engine = ${this.orm}.create_engine(f"bigquery://${t}/${e}", credentials_info=credentials)
|
|
20
|
-
`)}},xs=class extends x{generateImports(){return[]}generateConnectionCode(){return g(`
|
|
21
|
-
DATABASE_URL = "${this.secrets.printInFString("database",this.connection.database||":memory:")}"
|
|
22
|
-
engine = ${this.orm}.connect(DATABASE_URL, read_only=${M(this.connection.read_only)})
|
|
23
|
-
`)}},Ss=class extends x{generateImports(){return[]}generateConnectionCode(){let t=this.secrets.printInFString("database",this.connection.database);return this.connection.token?g(`
|
|
24
|
-
conn = duckdb.connect("md:${t}", config={"motherduck_token": ${this.secrets.printPassword(this.connection.token,"MOTHERDUCK_TOKEN",!1)}})
|
|
25
|
-
`):g(`
|
|
26
|
-
conn = duckdb.connect("md:${t}")
|
|
27
|
-
`)}},ks=class extends x{generateImports(){return["import clickhouse_connect"]}generateConnectionCode(){let t=this.secrets.printPassword(this.connection.password,"CLICKHOUSE_PASSWORD",!1),e={host:this.secrets.print("host",this.connection.host),user:this.secrets.print("user",this.connection.username),secure:this.secrets.print("secure",this.connection.secure),port:this.connection.port?this.secrets.print("port",this.connection.port):void 0,password:this.connection.password?t:void 0,proxy_path:this.connection.proxy_path?this.secrets.print("proxy_path",this.connection.proxy_path):void 0};return g(`
|
|
28
|
-
engine = ${this.orm}.get_client(
|
|
29
|
-
${V(e,s=>` ${s}`)},
|
|
30
|
-
)
|
|
31
|
-
`)}},vs=class extends x{generateImports(){return[]}generateConnectionCode(){let t=this.secrets.printPassword(this.connection.password,"TIMEPLUS_PASSWORD",!0);return g(`
|
|
32
|
-
DATABASE_URL = f"timeplus://${this.secrets.printInFString("username",this.connection.username)}:${t}@${this.secrets.printInFString("host",this.connection.host)}:${this.secrets.printInFString("port",this.connection.port)}"
|
|
33
|
-
engine = ${this.orm}.create_engine(DATABASE_URL)
|
|
34
|
-
`)}},$s=class extends x{generateImports(){return["import chdb"]}generateConnectionCode(){let t=this.secrets.print("database",this.connection.database)||'""';return g(`
|
|
35
|
-
engine = ${this.orm}.connect(${t}, read_only=${M(this.connection.read_only)})
|
|
36
|
-
`)}},js=class extends x{generateImports(){return this.connection.async_support?["import aiotrino"]:["import trino.sqlalchemy"]}generateConnectionCode(){let t=this.connection.async_support?"aiotrino":"trino",e=this.connection.schema?`/${this.connection.schema}`:"",s=this.secrets.printInFString("username",this.connection.username),o=this.secrets.printInFString("host",this.connection.host),r=this.secrets.printInFString("port",this.connection.port),l=this.secrets.printInFString("database",this.connection.database),i=this.secrets.printPassword(this.connection.password,"TRINO_PASSWORD",!0);return g(`
|
|
37
|
-
engine = ${this.orm}.create_engine(f"${t}://${s}:${i}@${o}:${r}/${l}${e}")
|
|
38
|
-
`)}},Cs=class extends x{generateImports(){switch(this.connection.catalog.type){case"REST":return["from pyiceberg.catalog.rest import RestCatalog"];case"SQL":return["from pyiceberg.catalog.sql import SqlCatalog"];case"Hive":return["from pyiceberg.catalog.hive import HiveCatalog"];case"Glue":return["from pyiceberg.catalog.glue import GlueCatalog"];case"DynamoDB":return["from pyiceberg.catalog.dynamodb import DynamoDBCatalog"];default:H(this.connection.catalog)}}generateConnectionCode(){let t={...this.connection.catalog};t=Object.fromEntries(Object.entries(t).filter(([o,r])=>r!=null&&r!==""&&o!=="type"));for(let[o,r]of Object.entries(t))E(r)?t[o]=this.secrets.print(o,r):typeof r=="string"&&(t[o]=`"${r}"`);let e=qs(t,o=>` ${o}`),s=`"${this.connection.name}"`;switch(this.connection.catalog.type){case"REST":return g(`
|
|
39
|
-
catalog = RestCatalog(
|
|
40
|
-
${s},
|
|
41
|
-
**{
|
|
42
|
-
${e}
|
|
43
|
-
},
|
|
44
|
-
)
|
|
45
|
-
`);case"SQL":return g(`
|
|
46
|
-
catalog = SqlCatalog(
|
|
47
|
-
${s},
|
|
48
|
-
**{
|
|
49
|
-
${e}
|
|
50
|
-
},
|
|
51
|
-
)
|
|
52
|
-
`);case"Hive":return g(`
|
|
53
|
-
catalog = HiveCatalog(
|
|
54
|
-
${s},
|
|
55
|
-
**{
|
|
56
|
-
${e}
|
|
57
|
-
},
|
|
58
|
-
)
|
|
59
|
-
`);case"Glue":return g(`
|
|
60
|
-
catalog = GlueCatalog(
|
|
61
|
-
${s},
|
|
62
|
-
**{
|
|
63
|
-
${e}
|
|
64
|
-
},
|
|
65
|
-
)
|
|
66
|
-
`);case"DynamoDB":return g(`
|
|
67
|
-
catalog = DynamoDBCatalog(
|
|
68
|
-
${s},
|
|
69
|
-
**{
|
|
70
|
-
${e}
|
|
71
|
-
},
|
|
72
|
-
)
|
|
73
|
-
`);default:H(this.connection.catalog)}}},As=class extends x{generateImports(){return["from datafusion import SessionContext"]}generateConnectionCode(){return this.connection.sessionContext?g(`
|
|
74
|
-
ctx = SessionContext()
|
|
75
|
-
# Sample table
|
|
76
|
-
_ = ctx.from_pydict({"a": [1, 2, 3]}, "my_table")
|
|
77
|
-
|
|
78
|
-
con = ibis.datafusion.connect(ctx)
|
|
79
|
-
`):g(`
|
|
80
|
-
con = ibis.datafusion.connect()
|
|
81
|
-
`)}},Rs=class extends x{generateImports(){return["from pyspark.sql import SparkSession"]}generateConnectionCode(){return this.connection.host||this.connection.port?g(`
|
|
82
|
-
session = SparkSession.builder.remote(f"sc://${this.secrets.printInFString("host",this.connection.host)}:${this.secrets.printInFString("port",this.connection.port)}").getOrCreate()
|
|
83
|
-
con = ibis.pyspark.connect(session)
|
|
84
|
-
`):g(`
|
|
85
|
-
con = ibis.pyspark.connect()
|
|
86
|
-
`)}},Ts=class extends x{generateImports(){return["import redshift_connector"]}generateConnectionCode(){let t=this.secrets.print("host",this.connection.host),e=this.secrets.print("port",this.connection.port),s=this.secrets.print("database",this.connection.database);if(this.connection.connectionType.type==="IAM credentials"){let l=this.secrets.print("aws_access_key_id",this.connection.connectionType.aws_access_key_id),i=this.secrets.print("aws_secret_access_key",this.connection.connectionType.aws_secret_access_key),c=this.connection.connectionType.aws_session_token?this.secrets.print("aws_session_token",this.connection.connectionType.aws_session_token):void 0;return g(`
|
|
87
|
-
con = redshift_connector.connect(
|
|
88
|
-
${V({iam:!0,host:t,port:e,region:`"${this.connection.connectionType.region}"`,database:s,access_key_id:l,secret_access_key:i,...c&&{session_token:c}},d=>` ${d}`)},
|
|
89
|
-
)
|
|
90
|
-
`)}let o=this.connection.connectionType.user?this.secrets.print("user",this.connection.connectionType.user):void 0,r=this.connection.connectionType.password?this.secrets.printPassword(this.connection.connectionType.password,"REDSHIFT_PASSWORD",!1):void 0;return g(`
|
|
91
|
-
con = redshift_connector.connect(
|
|
92
|
-
${V({host:t,port:e,database:s,...o&&{user:o},...r&&{password:r}},l=>` ${l}`)},
|
|
93
|
-
)
|
|
94
|
-
`)}},Ls=class extends x{generateImports(){return[]}generateConnectionCode(){let t=this.orm!=="ibis",e=this.secrets.printPassword(this.connection.access_token,"DATABRICKS_ACCESS_TOKEN",t,"access_token"),s=this.secrets.printPassword(this.connection.server_hostname,"DATABRICKS_SERVER_HOSTNAME",t,"server_hostname"),o=this.secrets.printPassword(this.connection.http_path,"DATABRICKS_HTTP_PATH",t,"http_path"),r=this.connection.catalog?this.secrets.printInFString("catalog",this.connection.catalog):void 0,l=this.connection.schema?this.secrets.printInFString("schema",this.connection.schema):void 0,i=`databricks://token:${e}@${s}?http_path=${o}`;return r&&(i+=`&catalog=${r}`),l&&(i+=`&schema=${l}`),this.orm==="ibis"?g(`
|
|
95
|
-
engine = ibis.databricks.connect(
|
|
96
|
-
server_hostname=${s},
|
|
97
|
-
http_path=${o},${r?`
|
|
98
|
-
catalog=${r},`:""}${l?`
|
|
99
|
-
schema=${l},`:""}
|
|
100
|
-
access_token=${e}
|
|
101
|
-
)
|
|
102
|
-
`):g(`
|
|
103
|
-
DATABASE_URL = f"${i}"
|
|
104
|
-
engine = ${this.orm}.create_engine(DATABASE_URL)
|
|
105
|
-
`)}},Ds=class extends x{generateImports(){return this.connection.disable_client_pooling?["from sqlalchemy.pool import NullPool"]:[]}generateConnectionCode(){let t=this.secrets.printPassword(this.connection.password,"SUPABASE_PASSWORD",!0),e=this.secrets.printInFString("username",this.connection.username),s=this.secrets.printInFString("host",this.connection.host),o=this.secrets.printInFString("port",this.connection.port),r=this.secrets.printInFString("database",this.connection.database),l=this.connection.disable_client_pooling?", poolclass=NullPool":"";return g(`
|
|
106
|
-
DATABASE_URL = f"postgresql+psycopg2://${e}:${t}@${s}:${o}/${r}?sslmode=require"
|
|
107
|
-
engine = ${this.orm}.create_engine(DATABASE_URL${l})
|
|
108
|
-
`)}},Is=class{constructor(){z(this,"secrets",new bs)}createGenerator(t,e){switch(t.type){case"postgres":return new fs(t,e,this.secrets);case"mysql":return new gs(t,e,this.secrets);case"sqlite":return new ys(t,e,this.secrets);case"snowflake":return new _s(t,e,this.secrets);case"bigquery":return new ws(t,e,this.secrets);case"duckdb":return new xs(t,e,this.secrets);case"motherduck":return new Ss(t,e,this.secrets);case"clickhouse_connect":return new ks(t,e,this.secrets);case"timeplus":return new vs(t,e,this.secrets);case"chdb":return new $s(t,e,this.secrets);case"trino":return new js(t,e,this.secrets);case"iceberg":return new Cs(t,e,this.secrets);case"datafusion":return new As(t,e,this.secrets);case"pyspark":return new Rs(t,e,this.secrets);case"redshift":return new Ts(t,e,this.secrets);case"databricks":return new Ls(t,e,this.secrets);case"supabase":return new Ds(t,e,this.secrets);default:H(t)}}};function Ns(t,e){if(!(e in Ie))throw Error(`Unsupported library: ${e}`);ms.parse(t);let s=new Is,o=s.createGenerator(t,e),r=o.generateConnectionCode(),l=s.secrets,i=[...new Set([...l.imports,...o.imports])].sort();i.push("");let c=l.formatSecrets();return c&&i.push(c),i.push(r.trim()),i.join(`
|
|
109
|
-
`)}function M(t){return t.toString().charAt(0).toUpperCase()+t.toString().slice(1)}function V(t,e){return Object.entries(t).filter(([,s])=>s!=null&&s!=="").map(([s,o])=>e(typeof o=="boolean"?`${s}=${M(o)}`:`${s}=${o}`)).join(`,
|
|
110
|
-
`)}function qs(t,e){return Object.entries(t).filter(([,s])=>s!=null&&s!=="").map(([s,o])=>{let r=`"${s}"`;return e(typeof o=="boolean"?`${r}: ${M(o)}`:`${r}: ${o}`)}).join(`,
|
|
111
|
-
`)}var Ne=P(),qe=[{name:"PostgreSQL",schema:fe,color:"#336791",logo:"postgres",connectionLibraries:{libraries:["sqlalchemy","sqlmodel"],preferred:"sqlalchemy"}},{name:"MySQL",schema:ge,color:"#00758F",logo:"mysql",connectionLibraries:{libraries:["sqlalchemy","sqlmodel"],preferred:"sqlalchemy"}},{name:"SQLite",schema:ye,color:"#003B57",logo:"sqlite",connectionLibraries:{libraries:["sqlalchemy","sqlmodel"],preferred:"sqlalchemy"}},{name:"DuckDB",schema:_e,color:"#FFD700",logo:"duckdb",connectionLibraries:{libraries:["duckdb"],preferred:"duckdb"}},{name:"MotherDuck",schema:we,color:"#ff9538",logo:"motherduck",connectionLibraries:{libraries:["duckdb"],preferred:"duckdb"}},{name:"Snowflake",schema:xe,color:"#29B5E8",logo:"snowflake",connectionLibraries:{libraries:["sqlalchemy","sqlmodel"],preferred:"sqlalchemy"}},{name:"ClickHouse",schema:ke,color:"#2C2C1D",logo:"clickhouse",connectionLibraries:{libraries:["clickhouse_connect"],preferred:"clickhouse_connect"}},{name:"Timeplus",schema:ve,color:"#B83280",logo:"timeplus",connectionLibraries:{libraries:["sqlalchemy","sqlmodel"],preferred:"sqlalchemy"}},{name:"BigQuery",schema:Se,color:"#4285F4",logo:"bigquery",connectionLibraries:{libraries:["sqlalchemy","sqlmodel"],preferred:"sqlalchemy"}},{name:"ClickHouse Embedded",schema:$e,color:"#f2b611",logo:"clickhouse",connectionLibraries:{libraries:["chdb"],preferred:"chdb"}},{name:"Trino",schema:je,color:"#d466b6",logo:"trino",connectionLibraries:{libraries:["sqlalchemy","sqlmodel"],preferred:"sqlalchemy"}},{name:"DataFusion",schema:Ae,color:"#202A37",logo:"datafusion",connectionLibraries:{libraries:["ibis"],preferred:"ibis"}},{name:"PySpark",schema:Re,color:"#1C5162",logo:"pyspark",connectionLibraries:{libraries:["ibis"],preferred:"ibis"}},{name:"Redshift",schema:Te,color:"#522BAE",logo:"redshift",connectionLibraries:{libraries:["redshift"],preferred:"redshift"}},{name:"Databricks",schema:Le,color:"#c41e0c",logo:"databricks",connectionLibraries:{libraries:["sqlalchemy","sqlmodel","ibis"],preferred:"sqlalchemy"}},{name:"Supabase",schema:De,color:"#238F5F",logo:"supabase",connectionLibraries:{libraries:["sqlalchemy","sqlmodel"],preferred:"sqlalchemy"}}],Fe=[{name:"Iceberg",schema:Ce,color:"#000000",logo:"iceberg",connectionLibraries:{libraries:["pyiceberg"],preferred:"pyiceberg"}}],Fs=[...qe,...Fe],Ps=t=>{let e=(0,Ne.c)(12),{onSelect:s}=t,o;e[0]===s?o=e[1]:(o=qe.map(m=>{let{name:p,schema:f,color:h,logo:b}=m;return(0,n.jsx)(se,{name:p,color:h,icon:(0,n.jsx)(ce,{name:b,className:"w-8 h-8 text-white brightness-0 invert dark:invert"}),onSelect:()=>s(f)},p)}),e[0]=s,e[1]=o);let r;e[2]===o?r=e[3]:(r=(0,n.jsx)(te,{children:o}),e[2]=o,e[3]=r);let l;e[4]===Symbol.for("react.memo_cache_sentinel")?(l=(0,n.jsxs)("h4",{className:"font-semibold text-muted-foreground text-lg flex items-center gap-4 my-2",children:["Data Catalogs",(0,n.jsx)("hr",{className:"flex-1"})]}),e[4]=l):l=e[4];let i;e[5]===s?i=e[6]:(i=Fe.map(m=>{let{name:p,schema:f,color:h,logo:b}=m;return(0,n.jsx)(se,{name:p,color:h,icon:(0,n.jsx)(ce,{name:b,className:"w-8 h-8 text-white brightness-0 invert dark:invert"}),onSelect:()=>s(f)},p)}),e[5]=s,e[6]=i);let c;e[7]===i?c=e[8]:(c=(0,n.jsx)(te,{children:i}),e[7]=i,e[8]=c);let d;return e[9]!==r||e[10]!==c?(d=(0,n.jsxs)(n.Fragment,{children:[r,l,c]}),e[9]=r,e[10]=c,e[11]=d):d=e[11],d};const Bs=t=>{let e=(0,Ne.c)(13),{onSubmit:s,header:o}=t,[r,l]=(0,B.useState)(null);if(!r){let h;e[0]===Symbol.for("react.memo_cache_sentinel")?(h=(0,n.jsx)("div",{children:(0,n.jsx)(Ps,{onSelect:l})}),e[0]=h):h=e[0];let b;return e[1]===o?b=e[2]:(b=(0,n.jsxs)(n.Fragment,{children:[o,h]}),e[1]=o,e[2]=b),b}let i;e[3]===r?i=e[4]:(i=Fs.find(h=>h.schema===r),e[3]=r,e[4]=i);let c=i==null?void 0:i.connectionLibraries,d;e[5]===(c==null?void 0:c.libraries)?d=e[6]:(d=(c==null?void 0:c.libraries)??[],e[5]=c==null?void 0:c.libraries,e[6]=d);let m=(c==null?void 0:c.preferred)??"sqlalchemy",p;e[7]===Symbol.for("react.memo_cache_sentinel")?(p=()=>l(null),e[7]=p):p=e[7];let f;return e[8]!==s||e[9]!==r||e[10]!==d||e[11]!==m?(f=(0,n.jsx)(ue,{schema:r,libraries:d,preferredLibrary:m,displayNames:Ie,libraryLabel:"Preferred connection library",generateCode:Ms,onSubmit:s,onBack:p}),e[8]=s,e[9]=r,e[10]=d,e[11]=m,e[12]=f):f=e[12],f};function Ms(t,e){return Ns(t,e)}var Es="data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20xml:space='preserve'%20id='Layer_1'%20x='0'%20y='0'%20version='1.1'%20viewBox='0.02%20102.6%20511.9%20306.4'%3e%3cstyle%3e.st1{fill-rule:evenodd;clip-rule:evenodd;fill:%23f90}%3c/style%3e%3cpath%20d='M144.3%20214.1c0%206.3.7%2011.4%201.9%2015.2%201.4%203.7%203.1%207.8%205.4%2012.3.9%201.4%201.2%202.7%201.2%203.9%200%201.7-1%203.4-3.2%205.1l-10.7%207.2c-1.5%201-3.1%201.5-4.4%201.5-1.7%200-3.4-.9-5.1-2.4-2.4-2.6-4.4-5.3-6.1-8-1.7-2.9-3.4-6.1-5.3-10-13.3%2015.7-30%2023.5-50.1%2023.5-14.3%200-25.7-4.1-34.1-12.3-8.3-8.2-12.6-19.1-12.6-32.7%200-14.5%205.1-26.2%2015.5-35.1S60.8%20169%2078.4%20169c5.8%200%2011.7.5%2018.1%201.4s12.8%202.2%2019.6%203.7v-12.4c0-12.9-2.7-22-8-27.2-5.4-5.3-14.6-7.8-27.8-7.8-6%200-12.1.7-18.4%202.2s-12.4%203.4-18.4%205.8c-2.7%201.2-4.8%201.9-6%202.2s-2%20.5-2.7.5c-2.4%200-3.6-1.7-3.6-5.3v-8.3c0-2.7.3-4.8%201.2-6s2.4-2.4%204.8-3.6c6-3.1%2013.1-5.6%2021.5-7.7%208.3-2.2%2017.2-3.2%2026.6-3.2%2020.3%200%2035.1%204.6%2044.6%2013.8%209.4%209.2%2014.1%2023.2%2014.1%2041.9v55.2h.3zM75.2%20240c5.6%200%2011.4-1%2017.5-3.1%206.1-2%2011.6-5.8%2016.2-10.9%202.7-3.2%204.8-6.8%205.8-10.9s1.7-9%201.7-14.8v-7.2c-4.9-1.2-10.2-2.2-15.7-2.9-5.4-.7-10.7-1-16-1-11.4%200-19.8%202.2-25.4%206.8S51%20207.1%2051%20215.6c0%208%202%2014%206.3%2018.1%204.1%204.2%2010%206.3%2017.9%206.3m136.7%2018.4c-3.1%200-5.1-.5-6.5-1.7-1.4-1-2.6-3.4-3.6-6.6l-40-131.6c-1-3.4-1.5-5.6-1.5-6.8%200-2.7%201.4-4.3%204.1-4.3h16.7c3.2%200%205.4.5%206.6%201.7%201.4%201%202.4%203.4%203.4%206.6l28.6%20112.7%2026.6-112.7c.9-3.4%201.9-5.6%203.2-6.6%201.4-1%203.7-1.7%206.8-1.7H270c3.2%200%205.4.5%206.8%201.7%201.4%201%202.6%203.4%203.2%206.6l26.9%20114.1%2029.5-114.1c1-3.4%202.2-5.6%203.4-6.6%201.4-1%203.6-1.7%206.6-1.7h15.8c2.7%200%204.3%201.4%204.3%204.3%200%20.9-.2%201.7-.3%202.7-.2%201-.5%202.4-1.2%204.3l-41%20131.6q-1.5%205.1-3.6%206.6c-1.4%201-3.6%201.7-6.5%201.7h-14.6c-3.2%200-5.4-.5-6.8-1.7s-2.6-3.4-3.2-6.8l-26.4-109.8L236.7%20250c-.9%203.4-1.9%205.6-3.2%206.8-1.4%201.2-3.7%201.7-6.8%201.7h-14.8zm218.8%204.6c-8.9%200-17.7-1-26.2-3.1-8.5-2-15.2-4.3-19.6-6.8-2.7-1.5-4.6-3.2-5.3-4.8s-1-3.2-1-4.8v-8.7c0-3.6%201.4-5.3%203.9-5.3%201%200%202%20.2%203.1.5%201%20.3%202.6%201%204.3%201.7%205.8%202.6%2012.1%204.6%2018.7%206%206.8%201.4%2013.5%202%2020.3%202%2010.7%200%2019.1-1.9%2024.9-5.6s8.9-9.2%208.9-16.2c0-4.8-1.5-8.7-4.6-11.9s-8.9-6.1-17.2-8.9l-24.7-7.7c-12.4-3.9-21.6-9.7-27.2-17.4-5.6-7.5-8.5-15.8-8.5-24.7%200-7.2%201.5-13.5%204.6-18.9s7.2-10.2%2012.3-14c5.1-3.9%2010.9-6.8%2017.7-8.9%206.8-2%2014-2.9%2021.5-2.9%203.7%200%207.7.2%2011.4.7%203.9.5%207.5%201.2%2011.1%201.9%203.4.9%206.6%201.7%209.7%202.7s5.4%202%207.2%203.1c2.4%201.4%204.1%202.7%205.1%204.3%201%201.4%201.5%203.2%201.5%205.6v8c0%203.6-1.4%205.4-3.9%205.4-1.4%200-3.6-.7-6.5-2q-14.55-6.6-32.7-6.6c-9.7%200-17.4%201.5-22.6%204.8s-8%208.2-8%2015.2c0%204.8%201.7%208.9%205.1%2012.1s9.7%206.5%2018.7%209.4l24.2%207.7c12.3%203.9%2021.1%209.4%2026.4%2016.3s7.8%2015%207.8%2023.8c0%207.3-1.5%2014-4.4%2019.8-3.1%205.8-7.2%2010.9-12.4%2015-5.3%204.3-11.6%207.3-18.9%209.5-8%202.5-16%203.7-24.7%203.7'%20style='fill:%23fff'/%3e%3cpath%20fill='%23fff'%20d='M462.9%20345.7c-56%2041.4-137.4%2063.3-207.4%2063.3-98.1%200-186.5-36.3-253.2-96.6-5.3-4.8-.5-11.2%205.8-7.5%2072.2%2041.9%20161.3%2067.3%20253.4%2067.3%2062.2%200%20130.4-12.9%20193.3-39.5%209.3-4.2%2017.3%206.2%208.1%2013'%20class='st1'/%3e%3cpath%20fill='%23fff'%20d='M486.2%20319.2c-7.2-9.2-47.3-4.4-65.6-2.2-5.4.7-6.3-4.1-1.4-7.7%2032-22.5%2084.6-16%2090.8-8.5%206.1%207.7-1.7%2060.3-31.7%2085.5-4.6%203.9-9%201.9-7-3.2%206.9-16.9%2022.1-54.9%2014.9-63.9'%20class='st1'/%3e%3c/svg%3e",Os="data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20128%20128'%3e%3cpath%20fill='%23FFF'%20d='m115.679%2069.288-15.591-8.94-2.689-1.163-63.781.436v32.381h82.061z'/%3e%3cpath%20fill='%23F38020'%20d='M87.295%2089.022c.763-2.617.472-5.015-.8-6.796-1.163-1.635-3.125-2.58-5.488-2.689l-44.737-.581c-.291%200-.545-.145-.691-.363s-.182-.509-.109-.8c.145-.436.581-.763%201.054-.8l45.137-.581c5.342-.254%2011.157-4.579%2013.192-9.885l2.58-6.723c.109-.291.145-.581.073-.872-2.906-13.158-14.644-22.97-28.672-22.97-12.938%200-23.913%208.359-27.838%2019.952a13.35%2013.35%200%200%200-9.267-2.58c-6.215.618-11.193%205.597-11.811%2011.811-.145%201.599-.036%203.162.327%204.615C10.104%2070.051%202%2078.337%202%2088.549c0%20.909.073%201.817.182%202.726a.895.895%200%200%200%20.872.763h82.57c.472%200%20.909-.327%201.054-.8l.617-2.216z'/%3e%3cpath%20fill='%23FAAE40'%20d='M101.542%2060.275c-.4%200-.836%200-1.236.036-.291%200-.545.218-.654.509l-1.744%206.069c-.763%202.617-.472%205.015.8%206.796%201.163%201.635%203.125%202.58%205.488%202.689l9.522.581c.291%200%20.545.145.691.363.145.218.182.545.109.8-.145.436-.581.763-1.054.8l-9.924.582c-5.379.254-11.157%204.579-13.192%209.885l-.727%201.853c-.145.363.109.727.509.727h34.089c.4%200%20.763-.254.872-.654.581-2.108.909-4.325.909-6.614%200-13.447-10.975-24.422-24.458-24.422'/%3e%3c/svg%3e",Us="data:image/svg+xml,%3csvg%20xmlns:xlink='http://www.w3.org/1999/xlink'%20xmlns='http://www.w3.org/2000/svg'%20id='Layer_1'%20data-name='Layer%201'%20viewBox='0%200%20224.09%20161.1'%20width='224.09'%20height='161.1'%20%3e%3cdefs%3e%3cstyle%3e%20.cls-1,%20.cls-2%20{%20fill:%20%23000;%20stroke-width:%200px;%20}%20.cls-2%20{%20fill-rule:%20evenodd;%20}%20%3c/style%3e%3c/defs%3e%3cpath%20class='cls-2'%20d='M92.1,112.3h-27.07c-1.65,0-3.3-.99-4.29-2.64l-12.55-22.47c-.66-1.65-.66-3.3,0-4.62l12.55-22.47c.99-1.65,2.64-2.64,4.29-2.64h15.52c1.65,0,3.3-.99,4.29-2.64l11.23-20.16c.99-1.65-.33-3.63-1.98-3.63h-41.6c-3.63,0-6.6,1.98-8.58,4.96l-24.76,44.28c-1.65,2.97-1.65,6.61,0,9.58l24.76,43.94c1.65,2.97,4.95,4.96,8.58,4.96h53.15c1.98,0,2.97-1.98,1.98-3.64l-11.55-20.49c-.33-1.65-1.98-2.31-3.96-2.31Z'/%3e%3cpath%20class='cls-1'%20d='M165.4,50.51l-10.57-17.84c-.99-1.65-3.3-1.65-4.29,0l-44.57,79.3c-.66,1.65-.66,3.3,0,4.63l11.55,20.82c.99,1.65,3.3,1.65,4.29,0l43.58-77.32c1.65-2.97,1.65-6.61,0-9.58Z'/%3e%3cpath%20class='cls-2'%20d='M111.58,86.86l13.21-23.46c.66-1.32.66-3.3,0-4.96l-15.19-26.1c-.99-1.65-3.3-1.65-4.29,0l-12.88,22.8c-.66,1.32-.66,3.3,0,4.63l14.86,26.76c.99,1.98,3.63,1.98,4.29.33Z'/%3e%3cpath%20class='cls-1'%20d='M204.35,50.51l-10.57-17.84c-.99-1.65-3.3-1.65-4.29,0l-44.57,79.3c-.66,1.65-.66,3.3,0,4.63l11.89,20.82c.99,1.65,3.3,1.65,4.29,0l43.58-77.32c1.65-2.97,1.65-6.61-.33-9.58Z'/%3e%3c/svg%3e",zs="data:image/svg+xml,%3csvg%20xmlns:xlink='http://www.w3.org/1999/xlink'%20xmlns='http://www.w3.org/2000/svg'%20id='Layer_1'%20data-name='Layer%201'%20viewBox='0%200%20224.09%20161.1'%20width='224.09'%20height='161.1'%3e%3cdefs%3e%3cstyle%3e%20.cls-1,%20.cls-2%20{%20fill:%20%23fff;%20stroke-width:%200px;%20}%20.cls-2%20{%20fill-rule:%20evenodd;%20}%20%3c/style%3e%3c/defs%3e%3cpath%20class='cls-2'%20d='M92.1,112.3h-27.07c-1.65,0-3.3-.99-4.29-2.64l-12.55-22.47c-.66-1.65-.66-3.3,0-4.62l12.55-22.47c.99-1.65,2.64-2.64,4.29-2.64h15.52c1.65,0,3.3-.99,4.29-2.64l11.23-20.16c.99-1.65-.33-3.63-1.98-3.63h-41.6c-3.63,0-6.6,1.98-8.58,4.96l-24.76,44.28c-1.65,2.97-1.65,6.61,0,9.58l24.76,43.94c1.65,2.97,4.95,4.96,8.58,4.96h53.15c1.98,0,2.97-1.98,1.98-3.64l-11.55-20.49c-.33-1.65-1.98-2.31-3.96-2.31Z'%3e%3c/path%3e%3cpath%20class='cls-1'%20d='M165.4,50.51l-10.57-17.84c-.99-1.65-3.3-1.65-4.29,0l-44.57,79.3c-.66,1.65-.66,3.3,0,4.63l11.55,20.82c.99,1.65,3.3,1.65,4.29,0l43.58-77.32c1.65-2.97,1.65-6.61,0-9.58Z'%3e%3c/path%3e%3cpath%20class='cls-2'%20d='M111.58,86.86l13.21-23.46c.66-1.32.66-3.3,0-4.96l-15.19-26.1c-.99-1.65-3.3-1.65-4.29,0l-12.88,22.8c-.66,1.32-.66,3.3,0,4.63l14.86,26.76c.99,1.98,3.63,1.98,4.29.33Z'%3e%3c/path%3e%3cpath%20class='cls-1'%20d='M204.35,50.51l-10.57-17.84c-.99-1.65-3.3-1.65-4.29,0l-44.57,79.3c-.66,1.65-.66,3.3,0,4.63l11.89,20.82c.99,1.65,3.3,1.65,4.29,0l43.58-77.32c1.65-2.97,1.65-6.61-.33-9.58Z'%3e%3c/path%3e%3c/svg%3e",Ks="data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20id='standard_product_icon'%20xmlns='http://www.w3.org/2000/svg'%20version='1.1'%20viewBox='0%200%20512%20512'%3e%3c!--%20Generator:%20Adobe%20Illustrator%2029.1.0,%20SVG%20Export%20Plug-In%20.%20SVG%20Version:%202.1.0%20Build%20142)%20--%3e%3cdefs%3e%3cstyle%3e%20.st0%20{%20fill:%20none;%20}%20.st1%20{%20fill:%20%234285f4;%20}%20.st2%20{%20fill:%20%2334a853;%20}%20.st3%20{%20fill:%20%23fbbc04;%20}%20.st4%20{%20fill:%20%23ea4335;%20}%20%3c/style%3e%3c/defs%3e%3cg%20id='bounding_box'%3e%3crect%20class='st0'%20width='512'%20height='512'/%3e%3c/g%3e%3cg%20id='art'%3e%3cpath%20class='st2'%20d='M442,277.9H70c-8.8,0-16,7.2-16,16v148.1c0,8.8,7.2,16,16,16h107.2c1.5.5,3.1.7,4.8.7s3.3-.3,4.8-.7h255.2c8.8,0,16-7.2,16-16v-148.1c0-8.8-7.2-16-16-16ZM86,309.9h80v116.1h-80v-116.1ZM426,425.9h-228v-116.1h228v116.1Z'/%3e%3cpath%20class='st3'%20d='M442,54H70c-8.8,0-16,7.2-16,16v148.8c0,8.8,7.2,16,16,16h372c8.8,0,16-7.2,16-16V70c0-8.8-7.2-16-16-16ZM86,86h80v116.8h-80v-116.8ZM426,202.8h-228v-116.8h228v116.8Z'/%3e%3cpath%20class='st4'%20d='M442,234.8h-16V86H54v-16c0-8.8,7.2-16,16-16h372c8.8,0,16,7.2,16,16v148.8c0,8.8-7.2,16-16,16Z'/%3e%3cpath%20class='st1'%20d='M442,457.9h-16v-148.1H54v-16c0-8.8,7.2-16,16-16h372c8.8,0,16,7.2,16,16v148.1c0,8.8-7.2,16-16,16Z'/%3e%3ccircle%20class='st4'%20cx='349'%20cy='144.4'%20r='37'/%3e%3ccircle%20class='st1'%20cx='349'%20cy='367.9'%20r='37'/%3e%3c/g%3e%3c/svg%3e",Hs="data:image/svg+xml,%3csvg%20viewBox='0%200%2087.3%2078'%20xmlns='http://www.w3.org/2000/svg'%3e%3cpath%20d='m6.6%2066.85%203.85%206.65c.8%201.4%201.95%202.5%203.3%203.3l13.75-23.8h-27.5c0%201.55.4%203.1%201.2%204.5z'%20fill='%230066da'/%3e%3cpath%20d='m43.65%2025-13.75-23.8c-1.35.8-2.5%201.9-3.3%203.3l-25.4%2044a9.06%209.06%200%200%200%20-1.2%204.5h27.5z'%20fill='%2300ac47'/%3e%3cpath%20d='m73.55%2076.8c1.35-.8%202.5-1.9%203.3-3.3l1.6-2.75%207.65-13.25c.8-1.4%201.2-2.95%201.2-4.5h-27.502l5.852%2011.5z'%20fill='%23ea4335'/%3e%3cpath%20d='m43.65%2025%2013.75-23.8c-1.35-.8-2.9-1.2-4.5-1.2h-18.5c-1.6%200-3.15.45-4.5%201.2z'%20fill='%2300832d'/%3e%3cpath%20d='m59.8%2053h-32.3l-13.75%2023.8c1.35.8%202.9%201.2%204.5%201.2h50.8c1.6%200%203.15-.45%204.5-1.2z'%20fill='%232684fc'/%3e%3cpath%20d='m73.4%2026.5-12.7-22c-.8-1.4-1.95-2.5-3.3-3.3l-13.75%2023.8%2016.15%2028h27.45c0-1.55-.4-3.1-1.2-4.5z'%20fill='%23ffba00'/%3e%3c/svg%3e",Ws=P();function Gs(t){var e;switch((e=t.split(".").pop())==null?void 0:e.toLowerCase()){case"png":case"jpg":case"jpeg":case"gif":case"svg":case"webp":return(0,n.jsx)(ft,{className:"h-3.5 w-3.5 text-purple-500"});case"csv":case"parquet":case"arrow":case"xlsx":return(0,n.jsx)(es,{className:"h-3.5 w-3.5 text-green-500"});case"py":case"js":case"ts":case"json":return(0,n.jsx)(dt,{className:"h-3.5 w-3.5 text-blue-500"});case"mp4":case"mpeg":return(0,n.jsx)(Xt,{className:"h-3.5 w-3.5 text-orange-500"});case"txt":case"md":case"log":return(0,n.jsx)(Ye,{className:"h-3.5 w-3.5 text-muted-foreground"});default:return(0,n.jsx)(pt,{className:"h-3.5 w-3.5 text-muted-foreground"})}}var Vs={s3:{src:$t,dark:Es},coreweave:{src:Us,dark:zs},cloudflare:{src:Os},azure:{src:At},gcs:{src:Ks},http:mt,file:Y,"in-memory":lt,gdrive:{src:Hs},github:ht};const Pe=t=>{let e=(0,Ws.c)(11),{protocol:s,forceDark:o,className:r}=t,{theme:l}=Lt(),i=Vs[s.toLowerCase()]??Y;if("src"in i){let p=i.src;i.dark&&(o||l==="dark")&&(p=i.dark);let f=p,h;e[0]===r?h=e[1]:(h=W("h-3.5 w-3.5",r),e[0]=r,e[1]=h);let b;return e[2]!==s||e[3]!==p||e[4]!==h?(b=(0,n.jsx)("img",{src:f,alt:s,className:h}),e[2]=s,e[3]=p,e[4]=h,e[5]=b):b=e[5],b}let c=i,d;e[6]===r?d=e[7]:(d=W("h-3.5 w-3.5",r),e[6]=r,e[7]=d);let m;return e[8]!==c||e[9]!==d?(m=(0,n.jsx)(c,{className:d}),e[8]=c,e[9]=d,e[10]=m):m=e[10],m},Be=y({type:_("s3"),bucket:u().nonempty().describe(a.of({label:"Bucket",placeholder:"my-bucket"})),region:u().optional().describe(a.of({label:"Region",placeholder:"us-east-1"})),access_key_id:u().optional().describe(a.of({label:"Access Key ID",inputType:"password",optionRegex:".*access_key.*"})),secret_access_key:u().optional().describe(a.of({label:"Secret Access Key",inputType:"password",optionRegex:".*secret.*access.*"})),endpoint_url:u().optional().describe(a.of({label:"Endpoint URL",placeholder:"https://s3.amazonaws.com"}))}).describe(a.of({direction:"two-columns"})),Me=y({type:_("gcs"),bucket:u().nonempty().describe(a.of({label:"Bucket",placeholder:"my-bucket"})),service_account_key:u().optional().describe(a.of({label:"Service Account Key (JSON)",inputType:"textarea"}))}).describe(a.of({direction:"two-columns"})),Ee=y({type:_("azure"),container:u().nonempty().describe(a.of({label:"Container",placeholder:"my-container"})),account_name:u().nonempty().describe(a.of({label:"Account Name",placeholder:"storageaccount",optionRegex:".*account.*"})),account_key:u().optional().describe(a.of({label:"Account Key",inputType:"password",optionRegex:".*azure.*key.*"}))}).describe(a.of({direction:"two-columns"})),Oe=y({type:_("coreweave"),bucket:u().nonempty().describe(a.of({label:"Bucket",placeholder:"bucket-name"})),region:u().nonempty().describe(a.of({label:"Region",placeholder:"US-EAST-04A"})),access_key_id:u().optional().describe(a.of({label:"Access Key ID",inputType:"password",optionRegex:".*object_storage_key.*"})),secret_access_key:u().optional().describe(a.of({label:"Secret Access Key",inputType:"password",optionRegex:".*object_storage_secret.*"}))}).describe(a.of({direction:"two-columns"})),Ue=y({type:_("gdrive"),credentials_json:u().optional().describe(a.of({label:"Service Account JSON",description:"Leave empty to use browser-based authentication",inputType:"textarea"}))}).describe(a.of({direction:"two-columns"})),Zs=K("type",[Be,Me,Ee,Oe,Ue]),Qs={obstore:"Obstore",fsspec:"fsspec"};var Js=class{constructor(){z(this,"secrets",{})}get imports(){return Object.keys(this.secrets).length===0?new Set:new Set(["import os"])}print(t,e){if(e===void 0||e==="")return"";let s=`_${t}`;if(E(e)){let o=he(e);return this.secrets[s]=`os.environ.get("${o}")`,s}return`"${e}"`}formatSecrets(){return Object.keys(this.secrets).length===0?"":Object.entries(this.secrets).map(([t,e])=>`${t} = ${e}`).join(`
|
|
112
|
-
`)}};function Ys(t,e){let s=e.print("bucket",t.bucket),o=new Set(["from obstore.store import S3Store"]),r=[];return t.region&&r.push(` region=${e.print("region",t.region)},`),t.access_key_id&&r.push(` access_key_id=${e.print("access_key_id",t.access_key_id)},`),t.secret_access_key&&r.push(` secret_access_key=${e.print("secret_access_key",t.secret_access_key)},`),t.endpoint_url&&r.push(` endpoint_url=${e.print("endpoint_url",t.endpoint_url)},`),{imports:o,code:g(`
|
|
113
|
-
store = S3Store(${s},${r.length>0?`
|
|
114
|
-
${r.join(`
|
|
115
|
-
`)}
|
|
116
|
-
`:""})
|
|
117
|
-
`)}}function Xs(t,e){let s=e.print("bucket",t.bucket),o=new Set(["from obstore.store import GCSStore"]),r;return t.service_account_key?(o.add("import json"),r=g(`
|
|
118
|
-
_credentials = json.loads("""${t.service_account_key}""")
|
|
119
|
-
store = GCSStore(${s},
|
|
120
|
-
service_account_key=_credentials,
|
|
121
|
-
)
|
|
122
|
-
`)):r=g(`
|
|
123
|
-
store = GCSStore(${s})
|
|
124
|
-
`),{imports:o,code:r}}function er(t,e){let s=e.print("container",t.container),o=e.print("account_name",t.account_name),r=new Set(["from obstore.store import AzureStore"]),l=[`account_name=${o},`];return t.account_key&&l.push(`account_key=${e.print("account_key",t.account_key)},`),{imports:r,code:`store = AzureStore(${s},
|
|
125
|
-
${l.map(i=>` ${i}`).join(`
|
|
126
|
-
`)}
|
|
127
|
-
)`}}function tr(t,e){let s=e.print("bucket",t.bucket),o=new Set(["from obstore.store import S3Store"]),r=[` region=${e.print("region",t.region)},`];return t.access_key_id&&r.push(` access_key_id=${e.print("access_key_id",t.access_key_id)},`),t.secret_access_key&&r.push(` secret_access_key=${e.print("secret_access_key",t.secret_access_key)},`),r.push(` endpoint="https://${t.bucket}.cwobject.com",`," virtual_hosted_style_request=True,"),{imports:o,code:g(`
|
|
128
|
-
store = S3Store(${s},${`
|
|
129
|
-
${r.join(`
|
|
130
|
-
`)}
|
|
131
|
-
`})
|
|
132
|
-
`)}}function sr(t,e){var o;let s=new Set(["from gdrive_fsspec import GoogleDriveFileSystem"]);if(t.credentials_json){s.add("import json");let r=e.print("credentials_json",t.credentials_json);return{imports:s,code:g(`
|
|
133
|
-
_creds = json.loads("""${(o=t.credentials_json)!=null&&o.startsWith("ENV:")?`{${r}}`:t.credentials_json}""")
|
|
134
|
-
fs = GoogleDriveFileSystem(creds=_creds, token="service_account")
|
|
135
|
-
`)}}return{imports:s,code:g(`
|
|
136
|
-
fs = GoogleDriveFileSystem(token="browser")
|
|
137
|
-
`)}}function rr(t,e){Zs.parse(t);let s=new Js,o;switch(t.type){case"s3":o=Ys(t,s);break;case"gcs":o=Xs(t,s);break;case"azure":o=er(t,s);break;case"coreweave":o=tr(t,s);break;case"gdrive":o=sr(t,s);break;default:H(t)}let r=[...new Set([...s.imports,...o.imports])].sort();r.push("");let l=s.formatSecrets();return l&&r.push(l),r.push(o.code.trim()),r.join(`
|
|
138
|
-
`)}var ze=P(),or="#232F3E",Ke=[{name:"Amazon S3",schema:Be,protocol:"s3",storageLibraries:{libraries:["obstore"],preferred:"obstore"}},{name:"Google Cloud Storage",schema:Me,protocol:"gcs",storageLibraries:{libraries:["obstore"],preferred:"obstore"}},{name:"Azure Blob Storage",schema:Ee,protocol:"azure",storageLibraries:{libraries:["obstore"],preferred:"obstore"}},{name:"CoreWeave",schema:Oe,protocol:"coreweave",storageLibraries:{libraries:["obstore"],preferred:"obstore"}},{name:"Google Drive",schema:Ue,protocol:"gdrive",storageLibraries:{libraries:["fsspec"],preferred:"fsspec"}}],nr=t=>{let e=(0,ze.c)(4),{onSelect:s}=t,o;e[0]===s?o=e[1]:(o=Ke.map(l=>{let{name:i,schema:c,protocol:d}=l;return(0,n.jsx)(se,{name:i,color:or,icon:(0,n.jsx)(Pe,{protocol:d,forceDark:!0,className:"w-7.5 h-7.5"}),onSelect:()=>s(c)},i)}),e[0]=s,e[1]=o);let r;return e[2]===o?r=e[3]:(r=(0,n.jsx)(te,{children:o}),e[2]=o,e[3]=r),r};const cr=t=>{let e=(0,ze.c)(13),{onSubmit:s,header:o}=t,[r,l]=(0,B.useState)(null);if(!r){let h;e[0]===Symbol.for("react.memo_cache_sentinel")?(h=(0,n.jsx)("div",{children:(0,n.jsx)(nr,{onSelect:l})}),e[0]=h):h=e[0];let b;return e[1]===o?b=e[2]:(b=(0,n.jsxs)(n.Fragment,{children:[o,h]}),e[1]=o,e[2]=b),b}let i;e[3]===r?i=e[4]:(i=Ke.find(h=>h.schema===r),e[3]=r,e[4]=i);let c=i==null?void 0:i.storageLibraries,d;e[5]===(c==null?void 0:c.libraries)?d=e[6]:(d=(c==null?void 0:c.libraries)??[],e[5]=c==null?void 0:c.libraries,e[6]=d);let m=(c==null?void 0:c.preferred)??"obstore",p;e[7]===Symbol.for("react.memo_cache_sentinel")?(p=()=>l(null),e[7]=p):p=e[7];let f;return e[8]!==s||e[9]!==r||e[10]!==d||e[11]!==m?(f=(0,n.jsx)(ue,{schema:r,libraries:d,preferredLibrary:m,displayNames:Qs,libraryLabel:"Preferred storage library",generateCode:ar,onSubmit:s,onBack:p}),e[8]=s,e[9]=r,e[10]=d,e[11]=m,e[12]=f):f=e[12],f};function ar(t,e){return rr(t,e)}var He=P();const ir=t=>{let e=(0,He.c)(9),{children:s,defaultTab:o}=t,r=o===void 0?"databases":o,[l,i]=(0,B.useState)(!1),c;e[0]===s?c=e[1]:(c=(0,n.jsx)(Et,{asChild:!0,children:s}),e[0]=s,e[1]=c);let d;e[2]===Symbol.for("react.memo_cache_sentinel")?(d=()=>i(!1),e[2]=d):d=e[2];let m;e[3]===r?m=e[4]:(m=(0,n.jsx)(We,{defaultTab:r,onClose:d}),e[3]=r,e[4]=m);let p;return e[5]!==l||e[6]!==c||e[7]!==m?(p=(0,n.jsxs)(zt,{open:l,onOpenChange:i,children:[c,m]}),e[5]=l,e[6]=c,e[7]=m,e[8]=p):p=e[8],p},We=t=>{let e=(0,He.c)(12),{defaultTab:s,onClose:o}=t,r=s===void 0?"databases":s,l;e[0]===Symbol.for("react.memo_cache_sentinel")?(l=(0,n.jsxs)(Kt,{className:"w-full mb-4",children:[(0,n.jsx)(de,{value:"databases",className:"flex-1",children:"Databases & Catalogs"}),(0,n.jsx)(de,{value:"storage",className:"flex-1",children:"Remote Storages"})]}),e[0]=l):l=e[0];let i=l,c;e[1]===Symbol.for("react.memo_cache_sentinel")?(c=(0,n.jsx)(Mt,{children:"Add Connection"}),e[1]=c):c=e[1];let d;e[2]===Symbol.for("react.memo_cache_sentinel")?(d=(0,n.jsx)(pe,{href:"https://docs.marimo.io/guides/working_with_data/sql/#connecting-to-a-custom-database",children:"database, data catalog"}),e[2]=d):d=e[2];let m;e[3]===Symbol.for("react.memo_cache_sentinel")?(m=(0,n.jsxs)(Bt,{children:[c,(0,n.jsxs)(Ut,{children:["Connect to a"," ",d," ","or"," ",(0,n.jsx)(pe,{href:"https://docs.marimo.io/guides/working_with_data/remote_storage/",children:"remote storage"})," ","to work with data directly from your notebook."]})]}),e[3]=m):m=e[3];let p;e[4]===o?p=e[5]:(p=(0,n.jsx)(le,{value:"databases",className:"mt-0 focus-visible:ring-0 focus-visible:ring-offset-0",children:(0,n.jsx)(Bs,{onSubmit:o,header:i})}),e[4]=o,e[5]=p);let f;e[6]===o?f=e[7]:(f=(0,n.jsx)(le,{value:"storage",className:"mt-0 focus-visible:ring-0 focus-visible:ring-offset-0",children:(0,n.jsx)(cr,{onSubmit:o,header:i})}),e[6]=o,e[7]=f);let h;return e[8]!==r||e[9]!==p||e[10]!==f?(h=(0,n.jsxs)(Ot,{className:"max-h-[75vh] overflow-y-auto",children:[m,(0,n.jsxs)(Ht,{defaultValue:r,children:[p,f]})]}),e[8]=r,e[9]=p,e[10]=f,e[11]=h):h=e[11],h};export{Y as a,Gs as i,We as n,Pe as r,ir as t};
|