@marimo-team/frontend 0.23.16-dev51 → 0.23.16-dev52

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/dist/assets/{CellStatus-DciB5rbr.js → CellStatus-BT88_2jw.js} +1 -1
  2. package/dist/assets/{JsonOutput-BM3vve9F.js → JsonOutput-0XYUxjxO.js} +12 -12
  3. package/dist/assets/{MarimoErrorOutput-Bh0y53Du.js → MarimoErrorOutput-DuwnzR5D.js} +4 -4
  4. package/dist/assets/{RenderHTML-B9jx7Dsm.js → RenderHTML-BPdXbewN.js} +1 -1
  5. package/dist/assets/{RunButton-DMtHbFuA.js → RunButton-DJyvIhMO.js} +1 -1
  6. package/dist/assets/{add-cell-with-ai-BcRYriMM.js → add-cell-with-ai-Dspw1-mO.js} +12 -12
  7. package/dist/assets/add-connection-dialog-B1fFBVqJ.js +178 -0
  8. package/dist/assets/{agent-panel-B31W_VwU.js → agent-panel-iPdDqSEd.js} +4 -4
  9. package/dist/assets/{ai-model-dropdown-B3D05oQh.js → ai-model-dropdown-BC1SNLKb.js} +3 -3
  10. package/dist/assets/{app-config-button-D_mjovwU.js → app-config-button-CuE-bLFn.js} +1 -1
  11. package/dist/assets/{blob-BJREJiQp.js → blob-C23KHI9W.js} +1 -1
  12. package/dist/assets/{cell-editor-BOhZHoLm.js → cell-editor-D8UAfiUa.js} +11 -11
  13. package/dist/assets/cell-link-Bu5k33_H.js +1 -0
  14. package/dist/assets/{cells-Jr-5Pc9f.js → cells-C3V6s-g5.js} +53 -53
  15. package/dist/assets/{chat-display-Djy1Jt6b.js → chat-display-DSMFTDiK.js} +1 -1
  16. package/dist/assets/{chat-panel-B2nYSE_l.js → chat-panel-DuGaXa17.js} +4 -4
  17. package/dist/assets/{chat-ui-DlG0En7w.js → chat-ui-TD66NC03.js} +4 -4
  18. package/dist/assets/{column-preview-BUHlI5va.js → column-preview-Dqt5ygdi.js} +1 -1
  19. package/dist/assets/{command-palette-rEJmXCZM.js → command-palette-DgyUILpb.js} +1 -1
  20. package/dist/assets/{common-CZc3fQI4.js → common-CIJsW5yR.js} +1 -1
  21. package/dist/assets/{components-GAYCj6Mx.js → components-CniQJAsf.js} +1 -1
  22. package/dist/assets/{datasource-AWkkAeiS.js → datasource-YLl5kKpx.js} +2 -2
  23. package/dist/assets/{dependency-graph-panel-wcqTPq6b.js → dependency-graph-panel-MPHqARlX.js} +4 -4
  24. package/dist/assets/{documentation-panel-Eu8MIkoU.js → documentation-panel-DZnNktBv.js} +1 -1
  25. package/dist/assets/{download-CQ7iZFJL.js → download-CSWknseP.js} +2 -2
  26. package/dist/assets/{edit-page-Cw7nN6HC.js → edit-page-DVXg8Ibp.js} +6 -6
  27. package/dist/assets/error-entries-DIjVQBFa.js +8 -0
  28. package/dist/assets/{error-panel-BZzr0PA1.js → error-panel-CJSBDHOq.js} +1 -1
  29. package/dist/assets/{file-explorer-panel-C1W7g_Wp.js → file-explorer-panel-sHVZyshk.js} +4 -4
  30. package/dist/assets/{file-icons-BAqZR08W.js → file-icons-DDUQU--N.js} +1 -1
  31. package/dist/assets/{file-name-input-0MiZVw5r.js → file-name-input-CQjQP_zG.js} +1 -1
  32. package/dist/assets/{floating-outline-C6g75zrP.js → floating-outline-D1iQUiR_.js} +1 -1
  33. package/dist/assets/{focus-C0HXXg3V.js → focus-D_UTw9HF.js} +1 -1
  34. package/dist/assets/{form-C051zAev.js → form-B6jUSJBp.js} +1 -1
  35. package/dist/assets/{form-DT44Rmhp.js → form-Bp7lk3pm.js} +1 -1
  36. package/dist/assets/{home-page-CJz9IHZ2.js → home-page-CX6IV-hM.js} +2 -2
  37. package/dist/assets/{html-to-image-CfjhKLA4.js → html-to-image-kpOREGyr.js} +2 -2
  38. package/dist/assets/index-8Nlyq3mV.css +2 -0
  39. package/dist/assets/{index-CrEgp1mR.js → index-CrJhpWGp.js} +6 -6
  40. package/dist/assets/{layout-D4bpsgVD.js → layout-DdPE4xZU.js} +5 -5
  41. package/dist/assets/{logs-panel-CsaY3O1m.js → logs-panel-DnNiJzUQ.js} +1 -1
  42. package/dist/assets/{markdown-renderer-BgqeO4JR.js → markdown-renderer-CqljiwGm.js} +2 -2
  43. package/dist/assets/{name-cell-input-DcU8Rfrz.js → name-cell-input-BQzQI3Ja.js} +1 -1
  44. package/dist/assets/{outline-panel-D-CHPZQM.js → outline-panel-BIgVnAC7.js} +1 -1
  45. package/dist/assets/{packages-panel-dq7QVZl1.js → packages-panel-_HiSQVV7.js} +1 -1
  46. package/dist/assets/panels-b-OL36p2.js +4 -0
  47. package/dist/assets/{process-output-NbwnUu05.js → process-output-CJkR5qgD.js} +1 -1
  48. package/dist/assets/{radio-group-rhQpGwU-.js → radio-group-Dm-ZV-tP.js} +1 -1
  49. package/dist/assets/readonly-code-display-BiNt9i32.js +1 -0
  50. package/dist/assets/{readonly-python-code-Q_1Y3VyZ.js → readonly-python-code-DMKb3G0K.js} +1 -1
  51. package/dist/assets/{reveal-component-CedpDwM8.js → reveal-component-DN6-mIsb.js} +2 -2
  52. package/dist/assets/{run-page-CGoux5cj.js → run-page-BKCqJ0uJ.js} +1 -1
  53. package/dist/assets/scratchpad-panel-DwZEAfW1.js +1 -0
  54. package/dist/assets/{session-panel-OIot3eyB.js → session-panel-B-9BnZxS.js} +1 -1
  55. package/dist/assets/{skeleton-BRvjFlRu.js → skeleton-B72xXZAF.js} +1 -1
  56. package/dist/assets/{snippets-panel-YFyH2hUM.js → snippets-panel-Brc_pmTk.js} +1 -1
  57. package/dist/assets/{state-bHyw5u3R.js → state-BTAocii6.js} +1 -1
  58. package/dist/assets/state-D9oG57zx.js +3 -0
  59. package/dist/assets/{tracing-CDMM1BB2.js → tracing-Cn9cTT65.js} +1 -1
  60. package/dist/assets/{tracing-panel-BH5Zbvl9.js → tracing-panel-FWoe3_eY.js} +2 -2
  61. package/dist/assets/{tree-actions-DDveUIHK.js → tree-actions-rPl1v1gM.js} +1 -1
  62. package/dist/assets/useCellActionButton-Du3JXpNf.js +1 -0
  63. package/dist/assets/{useDeleteCell-BIopCngo.js → useDeleteCell-DHOwR-CG.js} +1 -1
  64. package/dist/assets/{useDependencyPanelTab-snM337f9.js → useDependencyPanelTab-B2PCtSi6.js} +1 -1
  65. package/dist/assets/{useNotebookActions-CsZfWFKy.js → useNotebookActions-DfQAtofT.js} +4 -4
  66. package/dist/assets/useRunCells-Dg11M4pT.js +1 -0
  67. package/dist/assets/{useSplitCell-BTmKY1CU.js → useSplitCell-BwWVHida.js} +1 -1
  68. package/dist/index.html +24 -24
  69. package/package.json +1 -1
  70. package/src/__mocks__/requests.ts +1 -0
  71. package/src/components/editor/connections/__tests__/quick-add-data-sources.test.tsx +113 -0
  72. package/src/components/editor/connections/add-connection-dialog.tsx +2 -0
  73. package/src/components/editor/connections/quick-add-data-sources.tsx +106 -0
  74. package/src/core/datasets/data-source-discovery.ts +5 -0
  75. package/src/core/datasets/request-registry.ts +11 -0
  76. package/src/core/islands/bootstrap.ts +1 -0
  77. package/src/core/islands/bridge.ts +1 -0
  78. package/src/core/kernel/messages.ts +2 -0
  79. package/src/core/network/__tests__/requests-lazy.test.ts +15 -0
  80. package/src/core/network/__tests__/requests-network.test.ts +14 -0
  81. package/src/core/network/requests-lazy.ts +1 -0
  82. package/src/core/network/requests-network.ts +8 -0
  83. package/src/core/network/requests-static.ts +1 -0
  84. package/src/core/network/requests-toasting.tsx +1 -0
  85. package/src/core/network/types.ts +2 -0
  86. package/src/core/wasm/bridge.ts +10 -0
  87. package/src/core/websocket/useMarimoKernelConnection.tsx +4 -0
  88. package/src/hooks/__tests__/useDataSourceDiscovery.test.ts +80 -0
  89. package/src/hooks/useDataSourceDiscovery.ts +18 -0
  90. package/dist/assets/add-connection-dialog-syjRSNPT.js +0 -178
  91. package/dist/assets/cell-link-DqNEv3f9.js +0 -1
  92. package/dist/assets/error-entries-Cr8uVukN.js +0 -8
  93. package/dist/assets/index-D6Dp_PFj.css +0 -2
  94. package/dist/assets/panels-DWoniKhE.js +0 -4
  95. package/dist/assets/readonly-code-display-CVY2f7EZ.js +0 -1
  96. package/dist/assets/scratchpad-panel-BLuF25yR.js +0 -1
  97. package/dist/assets/state-DB_fxbhn.js +0 -3
  98. package/dist/assets/useCellActionButton-D5ix_g2a.js +0 -1
  99. package/dist/assets/useRunCells-CF_V8X2K.js +0 -1
@@ -0,0 +1,80 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+
3
+ import { afterEach, describe, expect, it, vi } from "vitest";
4
+ import { DiscoverDataSources } from "@/core/datasets/request-registry";
5
+ import { loadDataSourceDiscovery } from "../useDataSourceDiscovery";
6
+
7
+ describe("loadDataSourceDiscovery", () => {
8
+ afterEach(() => {
9
+ vi.restoreAllMocks();
10
+ });
11
+
12
+ it("returns the kernel's secret-free discovery model", async () => {
13
+ const sources = [
14
+ {
15
+ id: "pyiceberg-prod",
16
+ integration: "pyiceberg",
17
+ category: "catalog" as const,
18
+ displayName: "PyIceberg (prod)",
19
+ confidence: "high" as const,
20
+ origins: [
21
+ {
22
+ type: "configuration" as const,
23
+ label: "Resolved PyIceberg configuration",
24
+ },
25
+ ],
26
+ configuration: [
27
+ {
28
+ field: "Catalog",
29
+ value: {
30
+ kind: "safe-literal" as const,
31
+ value: "prod",
32
+ },
33
+ },
34
+ ],
35
+ code: 'catalog = load_catalog("prod")',
36
+ },
37
+ ];
38
+ const request = vi.spyOn(DiscoverDataSources, "request").mockResolvedValue({
39
+ request_id: "request-id",
40
+ sources,
41
+ });
42
+
43
+ const detected = await loadDataSourceDiscovery();
44
+
45
+ expect({ detected, requests: request.mock.calls }).toMatchInlineSnapshot(`
46
+ {
47
+ "detected": [
48
+ {
49
+ "category": "catalog",
50
+ "code": "catalog = load_catalog("prod")",
51
+ "confidence": "high",
52
+ "configuration": [
53
+ {
54
+ "field": "Catalog",
55
+ "value": {
56
+ "kind": "safe-literal",
57
+ "value": "prod",
58
+ },
59
+ },
60
+ ],
61
+ "displayName": "PyIceberg (prod)",
62
+ "id": "pyiceberg-prod",
63
+ "integration": "pyiceberg",
64
+ "origins": [
65
+ {
66
+ "label": "Resolved PyIceberg configuration",
67
+ "type": "configuration",
68
+ },
69
+ ],
70
+ },
71
+ ],
72
+ "requests": [
73
+ [
74
+ {},
75
+ ],
76
+ ],
77
+ }
78
+ `);
79
+ });
80
+ });
@@ -0,0 +1,18 @@
1
+ /* Copyright 2026 Marimo. All rights reserved. */
2
+
3
+ import type { DetectedDataSource } from "@/core/datasets/data-source-discovery";
4
+ import { DiscoverDataSources } from "@/core/datasets/request-registry";
5
+ import { useAsyncData } from "./useAsyncData";
6
+
7
+ export async function loadDataSourceDiscovery(): Promise<DetectedDataSource[]> {
8
+ const result = await DiscoverDataSources.request({});
9
+ return result.sources;
10
+ }
11
+
12
+ /**
13
+ * Reusable UI-facing hook for kernel-managed datasource discovery.
14
+ * Consumers decide how to render, filter, or act on the detected model.
15
+ */
16
+ export function useDataSourceDiscovery() {
17
+ return useAsyncData(loadDataSourceDiscovery, []);
18
+ }
@@ -1,178 +0,0 @@
1
- var dt=Object.defineProperty;var pt=(t,e,s)=>e in t?dt(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s;var V=(t,e,s)=>pt(t,typeof e!="symbol"?e+"":e,s);import{s as ce}from"./chunk-LvLJmgfZ.js";import{u as ht}from"./useEvent-D91BmmQi.js";import{t as mt}from"./react-Bj1aDYRI.js";import{Ct as ie,E as ut,Sr as bt,rr as y}from"./cells-Jr-5Pc9f.js";import{D as M,P as _,R as f,T as N,_ as le,i as ft,k as w}from"./zod-H_cgTO0M.js";import{t as U}from"./compiler-runtime-B3qBwwSJ.js";import{_ as gt}from"./useEventListener-C0195JsF.js";import{c as yt}from"./utils-BWBBpCkT.js";import{t as H}from"./cn-DYvqRARy.js";import{t as _t}from"./jsx-runtime-Blw4afVn.js";import{a as wt,c as de,i as xt,o as pe,r as St,s as kt,t as vt}from"./popover-Bcz1Zikb.js";import{c as $t,i as jt,n as Ct,r as At,s as Rt,t as Tt}from"./select-BP75_5jJ.js";import{t as Lt}from"./tooltip-4bZlU7jl.js";import{t as he}from"./button-DDGiD1NW.js";import{r as z}from"./strings--BknHX9C.js";import{t as Nt}from"./createLucideIcon-w-Qo9n0R.js";import{r as Dt,t as It}from"./x-C-Eq0ag8.js";import{t as Pt}from"./circle-plus-BluydVNx.js";import{t as Ft}from"./database-zap-CKO8g4BU.js";import{c as a,o as qt,t as Et,u as Bt}from"./form-DT44Rmhp.js";import{n as X}from"./DeferredRequestRegistry-C8EV1PoE.js";import{a as me,c as ue,i as Ot,n as be,o as fe,p as Mt,r as ge,s as ye,u as Ut}from"./form-C051zAev.js";import{r as Kt}from"./useTheme-Bxv9B31g.js";import{a as Ht,c as zt,l as Wt,n as Vt,r as Gt,t as Zt}from"./dialog-BCVepWLJ.js";import{n as _e}from"./ImperativeModal-fY-ZfT0b.js";import{t as G}from"./links-wcQA1Np1.js";import{t as Qt}from"./useIframeCapabilities-j6fR_dBA.js";import{r as Jt}from"./html-to-image-CfjhKLA4.js";import{o as Yt}from"./focus-C0HXXg3V.js";import{n as Xt}from"./useAsyncData-Bg5iAViP.js";import{a as es,c as we,i as Z,o as Q,s as ts,t as ss}from"./command-Dqxie4gq.js";import{n as rs,t as ns}from"./azure-BjL5s4-w.js";import{t as os}from"./request-registry-CEkYnwgr.js";import{a as ee,c as te,d as as,f as cs,i as xe,l as Se,n as is,o as ls,r as se,s as q,t as ke,u as ve}from"./write-secret-modal-D-p66LIx.js";import{t as ds}from"./github-kTVN-x1m.js";var re=Nt("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"}]]),D=ce(mt(),1),o=ce(_t(),1);function ps(t,e){if(!e)return{recommended:[],other:[...t]};let s;try{s=new RegExp(e,"i")}catch{return{recommended:[],other:[...t]}}let n=[],r=[];for(let c of t)s.test(c)?n.push(c):r.push(c);return{recommended:n,other:r}}const $e=({value:t,onChange:e,placeholder:s,secretsOnly:n=!1,recommendedKeys:r,otherKeys:c,onCreateSecret:l,className:i,searchPlaceholder:d,formatCustomValueLabel:p=g=>`Use "${g}"`,createSecretLabel:m="Create a new secret",allowCustomValue:b,allowCreateSecret:h})=>{let[g,u]=(0,D.useState)(!1),[x,k]=(0,D.useState)(""),S=x.trim(),$=!n&&S.length>0&&S!==t&&((b==null?void 0:b(S))??!0),A=(h==null?void 0:h(S))??!0,C=t?q(t)?ls(t):t:null,R=v=>{e(te(v)),u(!1),k("")},P=v=>{e(v),u(!1),k("")},F=()=>{e(""),k(""),u(!1)};return(0,o.jsxs)("div",{className:H("flex w-full min-w-48 mb-1 items-center gap-1",i),children:[(0,o.jsxs)(vt,{modal:!0,open:g,onOpenChange:v=>{u(v),v||k("")},children:[(0,o.jsx)(xt,{asChild:!0,children:(0,o.jsxs)("button",{type:"button",className:H("flex h-6 min-w-0 flex-1 shadow-xs-solid items-center justify-between","rounded-sm border border-input bg-background px-1.5 text-sm font-code ring-offset-background placeholder:text-muted-foreground","hover:shadow-sm-solid focus:outline-hidden focus:ring-1 focus:ring-ring focus:border-primary focus:shadow-md-solid",q(t)&&"bg-accent"),"aria-expanded":g,children:[(0,o.jsx)("span",{className:"truncate flex-1 min-w-0 text-left flex items-center gap-1.5",children:C?(0,o.jsxs)(o.Fragment,{children:[q(t)&&(0,o.jsx)(X,{className:"h-3 w-3 shrink-0 opacity-70"}),(0,o.jsx)("span",{className:"truncate",children:C})]}):(0,o.jsx)("span",{className:"text-muted-foreground",children:s})}),(0,o.jsx)(Dt,{className:"ml-1 h-4 w-4 opacity-50 shrink-0"})]})}),(0,o.jsx)(St,{className:"w-(--radix-popover-trigger-width) p-0",align:"start",children:(0,o.jsxs)(ss,{children:[(0,o.jsx)(es,{placeholder:d??(n?"Search secrets...":"Type a value or search secrets..."),rootClassName:"px-1 h-8",autoFocus:!0,value:x,onValueChange:k}),(0,o.jsxs)(ts,{className:"max-h-60 overscroll-contain",children:[$&&(0,o.jsx)(Z,{children:(0,o.jsx)(Q,{value:`use custom value ${S}`,onSelect:()=>P(S),children:p(S)})}),A&&(0,o.jsx)(Z,{className:"mt-0",children:(0,o.jsxs)(Q,{value:`create new secret ${S}`,onSelect:()=>{let v=S||void 0;u(!1),k(""),l(v)},children:[(0,o.jsx)(Pt,{className:"mr-2 h-3.5 w-3.5"}),m]})}),r.length>0&&(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(we,{className:"mt-0"}),(0,o.jsx)(Z,{heading:"Recommended",children:r.map(v=>(0,o.jsxs)(Q,{value:v,onSelect:()=>R(v),children:[(0,o.jsx)(X,{className:"mr-2 h-3 w-3 opacity-70"}),v]},v))})]}),c.length>0&&(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(we,{className:"mt-0"}),(0,o.jsx)(Z,{heading:r.length>0?"Other":void 0,children:c.map(v=>(0,o.jsxs)(Q,{value:v,onSelect:()=>R(v),children:[(0,o.jsx)(X,{className:"mr-2 h-3 w-3 opacity-70"}),v]},v))})]})]})]})})]}),t&&(0,o.jsx)("button",{type:"button","aria-label":"Clear",className:H("flex h-6 w-6 shrink-0 items-center justify-center rounded-sm","text-muted-foreground hover:bg-muted hover:text-foreground","focus:outline-hidden focus:ring-1 focus:ring-ring"),onClick:F,children:(0,o.jsx)(It,{className:"h-3.5 w-3.5"})})]})};var hs=U(),je=(0,D.createContext)({providerNames:[],secretKeys:[],loading:!1,error:void 0,refreshSecrets:gt.NOOP});const Ce=()=>(0,D.use)(je),ms=t=>{let e=(0,hs.c)(14),{children:s}=t,n;e[0]===Symbol.for("react.memo_cache_sentinel")?(n=[],e[0]=n):n=e[0];let{data:r,isPending:c,error:l,refetch:i}=Xt(_s,n);r==null||r.secretKeys,r==null||r.providerNames;let 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 p;e[3]===(r==null?void 0:r.providerNames)?p=e[4]:(p=(r==null?void 0:r.providerNames)||[],e[3]=r==null?void 0:r.providerNames,e[4]=p);let m;e[5]!==l||e[6]!==c||e[7]!==i||e[8]!==d||e[9]!==p?(m={secretKeys:d,providerNames:p,loading:c,error:l,refreshSecrets:i},e[5]=l,e[6]=c,e[7]=i,e[8]=d,e[9]=p,e[10]=m):m=e[10];let b=m,h;return e[11]!==s||e[12]!==b?(h=(0,o.jsx)(je,{value:b,children:s}),e[11]=s,e[12]=b,e[13]=h):h=e[13],h},us={isMatch:t=>{if(t instanceof le){let{optionRegex:e}=a.parse(t.description||"");return!!e}return!1},Component:({schema:t,form:e,path:s})=>{let{secretKeys:n,providerNames:r,refreshSecrets:c}=Ce(),{openModal:l,closeModal:i}=_e(),{label:d,description:p,placeholder:m,optionRegex:b="",inputType:h}=a.parse(t.description||""),g=h==="password",{recommended:u,other:x}=ps(n,b);return(0,o.jsx)(me,{control:e.control,name:s,render:({field:k})=>(0,o.jsxs)(fe,{children:[(0,o.jsx)(ye,{children:d}),(0,o.jsx)(ge,{children:p}),(0,o.jsx)(be,{children:(0,o.jsx)($e,{value:k.value?String(k.value):"",onChange:k.onChange,placeholder:m,secretsOnly:g,recommendedKeys:u,otherKeys:x,onCreateSecret:S=>{l((0,o.jsx)(ke,{providerNames:r,initialValue:S,onSuccess:$=>{c(),k.onChange(te($)),i()},onClose:i}))}})}),(0,o.jsx)(ue,{})]})})}},bs={isMatch:t=>{if(t instanceof le){let{special:e}=a.parse(t.description||"");return e==="secret_textarea"}return!1},Component:({schema:t,form:e,path:s})=>{let{secretKeys:n,providerNames:r,refreshSecrets:c}=Ce(),{openModal:l,closeModal:i}=_e(),{label:d,description:p,placeholder:m}=a.parse(t.description||"");return(0,o.jsx)(me,{control:e.control,name:s,render:({field:b})=>{let h=b.value?String(b.value):"",g=ve(h)?cs(h):h;return(0,o.jsxs)(fe,{children:[(0,o.jsxs)(ye,{className:"flex items-center gap-1",children:[d,(0,o.jsx)(Lt,{content:"Enter a path to a file on disk, or create a secret to paste JSON directly.",delayDuration:300,children:(0,o.jsx)("button",{type:"button",className:"inline-flex","aria-label":"Credential input help",children:(0,o.jsx)(bt,{className:"h-3.5 w-3.5"})})})]}),(0,o.jsx)(ge,{children:p}),(0,o.jsx)(be,{children:(0,o.jsx)($e,{value:g,onChange:u=>{b.onChange(!u||q(u)||ve(u)?u:as(u))},placeholder:m,searchPlaceholder:"Type a file path or paste JSON",formatCustomValueLabel:u=>`Use "${u}" as a file path`,createSecretLabel:"Paste JSON credentials",allowCustomValue:u=>!xe(u),allowCreateSecret:u=>!u||xe(u),recommendedKeys:[],otherKeys:n,onCreateSecret:u=>{l((0,o.jsx)(ke,{providerNames:r,initialValue:u,multiline:!0,onSuccess:x=>{c(),b.onChange(te(x)),i()},onClose:i}))}})}),(0,o.jsx)(ue,{})]})}})}};function fs(t){return t.provider!=="env"}function gs(t){return t.name}function ys(t){return t.keys}async function _s(){let t=await os.request({}),e=is(t.secrets).filter(fs).map(gs);return{secretKeys:t.secrets.flatMap(ys).toSorted(),providerNames:e}}var W=U(),ws=[us,bs];const ne=t=>{let e=(0,W.c)(2),{children:s}=t,n;return e[0]===s?n=e[1]:(n=(0,o.jsx)("div",{className:"grid grid-cols-2 md:grid-cols-3 gap-4",children:s}),e[0]=s,e[1]=n),n},oe=t=>{let e=(0,W.c)(9),{name:s,color:n,icon:r,onSelect:c}=t,l;e[0]===n?l=e[1]:(l={backgroundColor:n},e[0]=n,e[1]=l);let i;e[2]===s?i=e[3]:(i=(0,o.jsx)("span",{className:"text-white font-medium text-lg",children:s}),e[2]=s,e[3]=i);let d;return e[4]!==r||e[5]!==c||e[6]!==l||e[7]!==i?(d=(0,o.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:l,onClick:c,children:[r,i]}),e[4]=r,e[5]=c,e[6]=l,e[7]=i,e[8]=d):d=e[8],d},xs=t=>{let e=(0,W.c)(25),{onBack:s,isValid:n,libraries:r,preferredLibrary:c,onLibraryChange:l,displayNames:i,libraryLabel:d}=t,p=d===void 0?"Preferred library":d,m;e[0]===s?m=e[1]:(m=(0,o.jsx)(he,{type:"button",variant:"outline",onClick:s,children:"Back"}),e[0]=s,e[1]=m);let b=!n,h;e[2]===b?h=e[3]:(h=(0,o.jsx)(he,{type:"submit",disabled:b,children:"Add"}),e[2]=b,e[3]=h);let g;e[4]!==m||e[5]!==h?(g=(0,o.jsxs)("div",{className:"flex gap-2",children:[m,h]}),e[4]=m,e[5]=h,e[6]=g):g=e[6];let u;e[7]===Symbol.for("react.memo_cache_sentinel")?(u=(0,o.jsx)(Rt,{children:(0,o.jsx)($t,{placeholder:"Select a library"})}),e[7]=u):u=e[7];let x;e[8]===p?x=e[9]:(x=(0,o.jsxs)("div",{className:"flex flex-col gap-1 items-end",children:[u,(0,o.jsx)("span",{className:"text-xs text-muted-foreground",children:p})]}),e[8]=p,e[9]=x);let k;if(e[10]!==i||e[11]!==r){let C;e[13]===i?C=e[14]:(C=R=>(0,o.jsx)(jt,{value:R,children:i[R]??R},R),e[13]=i,e[14]=C),k=r.map(C),e[10]=i,e[11]=r,e[12]=k}else k=e[12];let S;e[15]===k?S=e[16]:(S=(0,o.jsx)(Ct,{children:(0,o.jsx)(At,{children:k})}),e[15]=k,e[16]=S);let $;e[17]!==l||e[18]!==c||e[19]!==x||e[20]!==S?($=(0,o.jsx)("div",{children:(0,o.jsxs)(Tt,{value:c,onValueChange:l,children:[x,S]})}),e[17]=l,e[18]=c,e[19]=x,e[20]=S,e[21]=$):$=e[21];let A;return e[22]!==$||e[23]!==g?(A=(0,o.jsxs)("div",{className:"flex gap-2 justify-between",children:[g,$]}),e[22]=$,e[23]=g,e[24]=A):A=e[24],A};function Ss(){let t=(0,W.c)(4),{createNewCell:e}=ut(),s=Yt(),n=ht(yt),r;return t[0]!==n||t[1]!==e||t[2]!==s?(r=c=>{/\bmo\./.test(c)&&Jt({autoInstantiate:n,createNewCell:e,fromCellId:s}),e({code:c,before:!1,cellId:s??"__end__",skipIfCodeExists:!0})},t[0]=n,t[1]=e,t[2]=s,t[3]=r):r=t[3],r}const Ae=t=>{let e=(0,W.c)(30),{schema:s,libraries:n,preferredLibrary:r,displayNames:c,libraryLabel:l,generateCode:i,onSubmit:d,onBack:p}=t,m;e[0]===s?m=e[1]:(m=qt(s),e[0]=s,e[1]=m);let b=m,h;e[2]===s?h=e[3]:(h=Ut(s),e[2]=s,e[3]=h);let g;e[4]!==b||e[5]!==h?(g={defaultValues:b,resolver:h,reValidateMode:"onChange"},e[4]=b,e[5]=h,e[6]=g):g=e[6];let u=Mt(g),[x,k]=D.useState(r),S=Ss(),$;e[7]!==i||e[8]!==S||e[9]!==d||e[10]!==x?($=lt=>{S(i(lt,x)),d()},e[7]=i,e[8]=S,e[9]=d,e[10]=x,e[11]=$):$=e[11];let A=$,C;e[12]!==u||e[13]!==A?(C=u.handleSubmit(A),e[12]=u,e[13]=A,e[14]=C):C=e[14];let R;e[15]===Symbol.for("react.memo_cache_sentinel")?(R=(0,o.jsx)(Ot,{}),e[15]=R):R=e[15];let P;e[16]!==u||e[17]!==s?(P=(0,o.jsx)(ms,{children:(0,o.jsx)(Et,{schema:s,form:u,renderers:ws,children:R})}),e[16]=u,e[17]=s,e[18]=P):P=e[18];let F;e[19]!==c||e[20]!==u.formState.isValid||e[21]!==n||e[22]!==l||e[23]!==p||e[24]!==x?(F=(0,o.jsx)(xs,{onBack:p,isValid:u.formState.isValid,libraries:n,preferredLibrary:x,onLibraryChange:k,displayNames:c,libraryLabel:l}),e[19]=c,e[20]=u.formState.isValid,e[21]=n,e[22]=l,e[23]=p,e[24]=x,e[25]=F):F=e[25];let v;return e[26]!==C||e[27]!==P||e[28]!==F?(v=(0,o.jsxs)("form",{onSubmit:C,className:"space-y-4",children:[P,F]}),e[26]=C,e[27]=P,e[28]=F,e[29]=v):v=e[29],v};function E(){return f().optional().describe(a.of({label:"Password",inputType:"password",optionRegex:"(password|passwd|pgpassword|db.?pass(word)?)"}))}function J(t,e){let s=f();return s=e?s.nonempty():s.optional(),s=s.describe(a.of({label:t||"Token",inputType:"password",optionRegex:"(token|api.?key|access.?token|auth.?token|(^|_)pat(_|$))"})),s}function Y(){return f().optional().describe(a.of({label:"Warehouse Name",optionRegex:"(warehouse|snowflake.?warehouse)"}))}function ae(t,e){let s=f();return s=e?s.nonempty():s.optional(),s.describe(a.of({label:t||"URI",optionRegex:"(uri|url|connection.?string|database.?url|jdbc)"}))}function I(t){return f().nonempty().describe(a.of({label:t||"Host",optionRegex:"^(?!.*(kubernetes|gpg)).*(host(name)?|pghost|db.?host|database.?host|mysql.?host|postgres.?host|server.?host)"}))}function T(){return f().describe(a.of({label:"Database",optionRegex:"(database|db.?name|pgdatabase|^DB$|^DATABASE$)"}))}function ks(){return f().describe(a.of({label:"Schema",optionRegex:"(^SCHEMA$|db.?schema|postgres.?schema|pg.?schema|_SCHEMA$)"}))}function L(){return f().nonempty().describe(a.of({label:"Username",optionRegex:"(username|pguser|db.?user|^USER$|_USER$)"}))}function B(t){let e=ft().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 Re(){return N().default(!1).describe(a.of({label:"Read Only"}))}const Te=_({type:w("postgres"),host:I(),port:B(5432).optional(),database:T(),username:L(),password:E(),ssl:N().default(!1).describe(a.of({label:"Use SSL"}))}).describe(a.of({direction:"two-columns"})),Le=_({type:w("mysql"),host:I(),port:B(3306),database:T(),username:L(),password:E(),ssl:N().default(!1).describe(a.of({label:"Use SSL"}))}).describe(a.of({direction:"two-columns"})),Ne=_({type:w("sqlite"),database:T().describe(a.of({label:"Database Path"}))}).describe(a.of({direction:"two-columns"})),De=_({type:w("duckdb"),database:T().describe(a.of({label:"Database Path"})),read_only:Re()}).describe(a.of({direction:"two-columns"})),Ie=_({type:w("motherduck"),database:T().default("my_db").describe(a.of({label:"Database Name"})),token:J()}).describe(a.of({direction:"two-columns"})),Pe=_({type:w("snowflake"),account:f().nonempty().describe(a.of({label:"Account",optionRegex:"(snowflake.?account|^SNOWFLAKE_ACCOUNT$|account.?id)"})),warehouse:f().optional().describe(a.of({label:"Warehouse",optionRegex:"(snowflake.?warehouse|warehouse)"})),database:T(),schema:f().optional().describe(a.of({label:"Schema",optionRegex:"(snowflake.?schema|^SCHEMA$|_SCHEMA$)"})),role:f().optional().describe(a.of({label:"Role"})),authType:M("type",[_({type:w("Password"),username:L(),password:E(),enable_mfa:N().default(!1).describe(a.of({label:"Enable MFA (Duo Push)"}))}),_({type:w("SSO (Browser)"),username:L()}),_({type:w("Key Pair"),username:L(),private_key_path:f().nonempty().describe(a.of({label:"Private Key Path",placeholder:"/path/to/rsa_key.p8"})),private_key_passphrase:f().optional().describe(a.of({label:"Private Key Passphrase",inputType:"password",optionRegex:"(passphrase|private.?key.?passphrase|key.?passphrase)"}))}),_({type:w("OAuth / PAT"),token:J("Token",!0)})]).default({type:"Password",username:"username",enable_mfa:!1}).describe(a.of({special:"tabs"}))}).describe(a.of({direction:"two-columns"})),Fe=_({type:w("bigquery"),project:f().nonempty().describe(a.of({label:"Project ID",optionRegex:"(bigquery.?project|gcp.?project|google.?cloud.?project|project.?id)"})),dataset:f().nonempty().describe(a.of({label:"Dataset",optionRegex:"(bigquery.?dataset|dataset)"})),credentials_json:f().describe(a.of({label:"Credentials JSON",special:"secret_textarea"}))}).describe(a.of({direction:"two-columns"})),qe=_({type:w("clickhouse_connect"),host:I(),port:B(8123).optional(),username:L(),password:E(),secure:N().default(!1).describe(a.of({label:"Use HTTPs"})),proxy_path:f().optional().describe(a.of({label:"Proxy Path",placeholder:"/clickhouse"}))}).describe(a.of({direction:"two-columns"})),Ee=_({type:w("timeplus"),host:I().default("localhost"),port:B(8123).optional(),username:L().default("default"),password:E().default("")}).describe(a.of({direction:"two-columns"})),Be=_({type:w("chdb"),database:T().describe(a.of({label:"Database Path"})),read_only:Re()}).describe(a.of({direction:"two-columns"})),Oe=_({type:w("trino"),host:I(),port:B(8080),database:T(),schema:ks().optional(),username:L(),password:E(),async_support:N().default(!1).describe(a.of({label:"Async Support"}))}).describe(a.of({direction:"two-columns"})),Me=_({type:w("iceberg"),name:f().describe(a.of({label:"Catalog Name"})),catalog:M("type",[_({type:w("REST"),warehouse:Y(),uri:f().optional().describe(a.of({label:"URI",placeholder:"https://",optionRegex:"(uri|url|connection.?string|database.?url|jdbc)"})),token:J()}),_({type:w("SQL"),warehouse:Y(),uri:f().optional().describe(a.of({label:"URI",placeholder:"jdbc:iceberg://host:port/database",optionRegex:"(uri|url|connection.?string|database.?url|jdbc)"}))}),_({type:w("Hive"),warehouse:Y(),uri:ae()}),_({type:w("Glue"),warehouse:Y(),uri:ae()}),_({type:w("DynamoDB"),"dynamodb.profile-name":f().optional().describe(a.of({label:"Profile Name"})),"dynamodb.region":f().optional().describe(a.of({label:"Region"})),"dynamodb.access-key-id":f().optional().describe(a.of({label:"Access Key ID",inputType:"password",optionRegex:"(access.?key.?id|aws.?access.?key)"})),"dynamodb.secret-access-key":f().optional().describe(a.of({label:"Secret Access Key",inputType:"password",optionRegex:"(secret.?access.?key|aws.?secret)"})),"dynamodb.session-token":f().optional().describe(a.of({label:"Session Token",inputType:"password",optionRegex:"(session.?token|aws.?session)"}))})]).default({type:"REST",token:void 0}).describe(a.of({special:"tabs"}))}),Ue=_({type:w("datafusion"),sessionContext:N().optional().describe(a.of({label:"Use Session Context"}))}),Ke=_({type:w("pyspark"),host:I().optional(),port:B().optional()}),He=_({type:w("redshift"),host:I(),port:B(5439),connectionType:M("type",[_({type:w("IAM credentials"),region:f().describe(a.of({label:"Region"})),aws_access_key_id:f().nonempty().describe(a.of({label:"AWS Access Key ID",inputType:"password",optionRegex:"(access.?key.?id|aws.?access.?key)"})),aws_secret_access_key:f().nonempty().describe(a.of({label:"AWS Secret Access Key",inputType:"password",optionRegex:"(secret.?access.?key|aws.?secret)"})),aws_session_token:f().optional().describe(a.of({label:"AWS Session Token",inputType:"password",optionRegex:"(session.?token|aws.?session)"}))}),_({type:w("DB credentials"),user:L(),password:E()})]).default({type:"IAM credentials",aws_access_key_id:"",aws_secret_access_key:"",region:""}),database:T()}).describe(a.of({direction:"two-columns"})),ze=_({type:w("databricks"),access_token:J("Access Token",!0),server_hostname:I("Server Hostname"),http_path:ae("HTTP Path",!0),catalog:f().optional().describe(a.of({label:"Catalog"})),schema:f().optional().describe(a.of({label:"Schema"}))}).describe(a.of({direction:"two-columns"})),We=_({type:w("supabase"),host:I(),port:B(5432).optional(),database:T(),username:L(),password:E(),disable_client_pooling:N().default(!1).describe(a.of({label:"Disable Client-Side Pooling"}))}).describe(a.of({direction:"two-columns"})),vs=M("type",[Te,Le,Ne,De,Ie,Pe,Fe,qe,Ee,Be,Oe,Me,Ue,Ke,He,ze,We]),Ve={sqlmodel:"SQLModel",sqlalchemy:"SQLAlchemy",duckdb:"DuckDB",clickhouse_connect:"ClickHouse Connect",chdb:"chDB",pyiceberg:"PyIceberg",ibis:"Ibis",motherduck:"MotherDuck",redshift:"Redshift",databricks:"Databricks"};var j=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}},$s=t=>`_${t}`,js=class{constructor(){V(this,"secrets",{})}get imports(){return Object.keys(this.secrets).length===0?new Set:new Set(["import os"])}print(t,e,s){if(t=$s(t),q(e)){let n=Se(e),r=s?`os.environ.get("${n}", "${s}")`:`os.environ.get("${n}")`;return this.secrets[t]=r,t}if(s!=null){let n=`os.environ.get("${e}", "${s}")`;return this.secrets[t]=n,t}return typeof e=="number"||typeof e=="number"?`${e}`:typeof e=="boolean"?K(e):e?`"${e}"`:""}printInFString(t,e,s){if(e===void 0)return"";if(typeof e=="number")return`${e}`;if(typeof e=="boolean")return K(e);let n=this.print(t,e,s);return n.startsWith('"')&&n.endsWith('"')?n.slice(1,-1):`{${n}}`}printPassword(t,e,s,n){let r=s?this.printInFString.bind(this):this.print.bind(this);return q(t)?r(n||"password",t):r(n||"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
- `)}},Cs=class extends j{generateImports(){return[]}generateConnectionCode(){let t=this.connection.ssl?", connect_args={'sslmode': 'require'}":"",e=this.secrets.printPassword(this.connection.password,"POSTGRES_PASSWORD",!0);return y(`
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
- `)}},As=class extends j{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 y(`
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
- `)}},Rs=class extends j{generateImports(){return[]}generateConnectionCode(){let t=this.connection.database?this.secrets.printInFString("database",this.connection.database):"";return y(`
9
- ${t.startsWith("{")&&t.endsWith("}")?`DATABASE_URL = f"sqlite:///${t}"`:`DATABASE_URL = "sqlite:///${t}"`}
10
- engine = ${this.orm}.create_engine(DATABASE_URL)
11
- `)}},Ts=class extends j{generateImports(){return["from snowflake.sqlalchemy import URL"]}generateConnectionCode(){let{authType:t,account:e,database:s,warehouse:n,schema:r,role:c}=this.connection,l={account:this.secrets.print("account",e),database:this.secrets.print("database",s),warehouse:n?this.secrets.print("warehouse",n):void 0,schema:r?this.secrets.print("schema",r):void 0,role:c?this.secrets.print("role",c):void 0};switch(t.type){case"Password":{let i=this.secrets.printPassword(t.password,"SNOWFLAKE_PASSWORD",!1),d={...l,user:this.secrets.print("user",t.username),password:i};return t.enable_mfa?y(`
12
- engine = ${this.orm}.create_engine(
13
- URL(
14
- ${O(d,p=>` ${p}`)},
15
- ),
16
- connect_args={"authenticator": "username_password_mfa"},
17
- )
18
- `):y(`
19
- engine = ${this.orm}.create_engine(
20
- URL(
21
- ${O(d,p=>` ${p}`)},
22
- )
23
- )
24
- `)}case"SSO (Browser)":{let i={...l,user:this.secrets.print("user",t.username),authenticator:'"externalbrowser"'};return y(`
25
- engine = ${this.orm}.create_engine(
26
- URL(
27
- ${O(i,d=>` ${d}`)},
28
- )
29
- )
30
- `)}case"Key Pair":{let i={...l,user:this.secrets.print("user",t.username)},d=this.secrets.print("private_key_path",t.private_key_path),p=t.private_key_passphrase?this.secrets.printPassword(t.private_key_passphrase,"SNOWFLAKE_PRIVATE_KEY_PASSPHRASE",!1):void 0,m=[' "authenticator": "SNOWFLAKE_JWT"',` "private_key_file": ${d}`];return p&&m.push(` "private_key_file_pwd": ${p}`),y(`
31
- engine = ${this.orm}.create_engine(
32
- URL(
33
- ${O(i,b=>` ${b}`)},
34
- ),
35
- connect_args={
36
- ${m.join(`,
37
- `)},
38
- },
39
- )
40
- `)}case"OAuth / PAT":{let i=this.secrets.printPassword(t.token,"SNOWFLAKE_TOKEN",!1),d={...l,authenticator:'"oauth"',token:i};return y(`
41
- engine = ${this.orm}.create_engine(
42
- URL(
43
- ${O(d,p=>` ${p}`)},
44
- )
45
- )
46
- `)}default:z(t)}}},Ls=class extends j{get credential(){return ee(this.connection.credentials_json,t=>this.secrets.print("credentials_json",t))}generateImports(){return this.credential.kind==="path"?[]:["import json"]}generateConnectionCode(){let t=this.secrets.printInFString("project",this.connection.project),e=this.secrets.printInFString("dataset",this.connection.dataset),s=this.credential;return s.kind==="path"?y(`
47
- engine = ${this.orm}.create_engine(f"bigquery://${t}/${e}", credentials_path="${se(s.path)}")
48
- `):y(`
49
- credentials = ${s.expr}
50
- engine = ${this.orm}.create_engine(f"bigquery://${t}/${e}", credentials_info=credentials)
51
- `)}},Ns=class extends j{generateImports(){return[]}generateConnectionCode(){return y(`
52
- DATABASE_URL = "${this.secrets.printInFString("database",this.connection.database||":memory:")}"
53
- engine = ${this.orm}.connect(DATABASE_URL, read_only=${K(this.connection.read_only)})
54
- `)}},Ds=class extends j{generateImports(){return[]}generateConnectionCode(){let t=this.secrets.printInFString("database",this.connection.database);return this.connection.token?y(`
55
- conn = duckdb.connect("md:${t}", config={"motherduck_token": ${this.secrets.printPassword(this.connection.token,"MOTHERDUCK_TOKEN",!1)}})
56
- `):y(`
57
- conn = duckdb.connect("md:${t}")
58
- `)}},Is=class extends j{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 y(`
59
- engine = ${this.orm}.get_client(
60
- ${O(e,s=>` ${s}`)},
61
- )
62
- `)}},Ps=class extends j{generateImports(){return[]}generateConnectionCode(){let t=this.secrets.printPassword(this.connection.password,"TIMEPLUS_PASSWORD",!0);return y(`
63
- 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)}"
64
- engine = ${this.orm}.create_engine(DATABASE_URL)
65
- `)}},Fs=class extends j{generateImports(){return["import chdb"]}generateConnectionCode(){let t=this.secrets.print("database",this.connection.database)||'""';return y(`
66
- engine = ${this.orm}.connect(${t}, read_only=${K(this.connection.read_only)})
67
- `)}},qs=class extends j{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),n=this.secrets.printInFString("host",this.connection.host),r=this.secrets.printInFString("port",this.connection.port),c=this.secrets.printInFString("database",this.connection.database),l=this.secrets.printPassword(this.connection.password,"TRINO_PASSWORD",!0);return y(`
68
- engine = ${this.orm}.create_engine(f"${t}://${s}:${l}@${n}:${r}/${c}${e}")
69
- `)}},Es=class extends j{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:z(this.connection.catalog)}}generateConnectionCode(){let t={...this.connection.catalog};t=Object.fromEntries(Object.entries(t).filter(([n,r])=>r!=null&&r!==""&&n!=="type"));for(let[n,r]of Object.entries(t))q(r)?t[n]=this.secrets.print(n,r):typeof r=="string"&&(t[n]=`"${r}"`);let e=Ws(t,n=>` ${n}`),s=`"${this.connection.name}"`;switch(this.connection.catalog.type){case"REST":return y(`
70
- catalog = RestCatalog(
71
- ${s},
72
- **{
73
- ${e}
74
- },
75
- )
76
- `);case"SQL":return y(`
77
- catalog = SqlCatalog(
78
- ${s},
79
- **{
80
- ${e}
81
- },
82
- )
83
- `);case"Hive":return y(`
84
- catalog = HiveCatalog(
85
- ${s},
86
- **{
87
- ${e}
88
- },
89
- )
90
- `);case"Glue":return y(`
91
- catalog = GlueCatalog(
92
- ${s},
93
- **{
94
- ${e}
95
- },
96
- )
97
- `);case"DynamoDB":return y(`
98
- catalog = DynamoDBCatalog(
99
- ${s},
100
- **{
101
- ${e}
102
- },
103
- )
104
- `);default:z(this.connection.catalog)}}},Bs=class extends j{generateImports(){return["from datafusion import SessionContext"]}generateConnectionCode(){return this.connection.sessionContext?y(`
105
- ctx = SessionContext()
106
- # Sample table
107
- _ = ctx.from_pydict({"a": [1, 2, 3]}, "my_table")
108
-
109
- con = ibis.datafusion.connect(ctx)
110
- `):y(`
111
- con = ibis.datafusion.connect()
112
- `)}},Os=class extends j{generateImports(){return["from pyspark.sql import SparkSession"]}generateConnectionCode(){return this.connection.host||this.connection.port?y(`
113
- session = SparkSession.builder.remote(f"sc://${this.secrets.printInFString("host",this.connection.host)}:${this.secrets.printInFString("port",this.connection.port)}").getOrCreate()
114
- con = ibis.pyspark.connect(session)
115
- `):y(`
116
- con = ibis.pyspark.connect()
117
- `)}},Ms=class extends j{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 c=this.secrets.print("aws_access_key_id",this.connection.connectionType.aws_access_key_id),l=this.secrets.print("aws_secret_access_key",this.connection.connectionType.aws_secret_access_key),i=this.connection.connectionType.aws_session_token?this.secrets.print("aws_session_token",this.connection.connectionType.aws_session_token):void 0;return y(`
118
- con = redshift_connector.connect(
119
- ${O({iam:!0,host:t,port:e,region:`"${this.connection.connectionType.region}"`,database:s,access_key_id:c,secret_access_key:l,...i&&{session_token:i}},d=>` ${d}`)},
120
- )
121
- `)}let n=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 y(`
122
- con = redshift_connector.connect(
123
- ${O({host:t,port:e,database:s,...n&&{user:n},...r&&{password:r}},c=>` ${c}`)},
124
- )
125
- `)}},Us=class extends j{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"),n=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,c=this.connection.schema?this.secrets.printInFString("schema",this.connection.schema):void 0,l=`databricks://token:${e}@${s}?http_path=${n}`;return r&&(l+=`&catalog=${r}`),c&&(l+=`&schema=${c}`),this.orm==="ibis"?y(`
126
- engine = ibis.databricks.connect(
127
- server_hostname=${s},
128
- http_path=${n},${r?`
129
- catalog=${r},`:""}${c?`
130
- schema=${c},`:""}
131
- access_token=${e}
132
- )
133
- `):y(`
134
- DATABASE_URL = f"${l}"
135
- engine = ${this.orm}.create_engine(DATABASE_URL)
136
- `)}},Ks=class extends j{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),n=this.secrets.printInFString("port",this.connection.port),r=this.secrets.printInFString("database",this.connection.database),c=this.connection.disable_client_pooling?", poolclass=NullPool":"";return y(`
137
- DATABASE_URL = f"postgresql+psycopg2://${e}:${t}@${s}:${n}/${r}?sslmode=require"
138
- engine = ${this.orm}.create_engine(DATABASE_URL${c})
139
- `)}},Hs=class{constructor(){V(this,"secrets",new js)}createGenerator(t,e){switch(t.type){case"postgres":return new Cs(t,e,this.secrets);case"mysql":return new As(t,e,this.secrets);case"sqlite":return new Rs(t,e,this.secrets);case"snowflake":return new Ts(t,e,this.secrets);case"bigquery":return new Ls(t,e,this.secrets);case"duckdb":return new Ns(t,e,this.secrets);case"motherduck":return new Ds(t,e,this.secrets);case"clickhouse_connect":return new Is(t,e,this.secrets);case"timeplus":return new Ps(t,e,this.secrets);case"chdb":return new Fs(t,e,this.secrets);case"trino":return new qs(t,e,this.secrets);case"iceberg":return new Es(t,e,this.secrets);case"datafusion":return new Bs(t,e,this.secrets);case"pyspark":return new Os(t,e,this.secrets);case"redshift":return new Ms(t,e,this.secrets);case"databricks":return new Us(t,e,this.secrets);case"supabase":return new Ks(t,e,this.secrets);default:z(t)}}};function zs(t,e){if(!(e in Ve))throw Error(`Unsupported library: ${e}`);vs.parse(t);let s=new Hs,n=s.createGenerator(t,e),r=n.generateConnectionCode(),c=s.secrets,l=[...new Set([...c.imports,...n.imports])].toSorted();l.push("");let i=c.formatSecrets();return i&&l.push(i),l.push(r.trim()),l.join(`
140
- `)}function K(t){return t.toString().charAt(0).toUpperCase()+t.toString().slice(1)}function O(t,e){return Object.entries(t).filter(([,s])=>s!=null&&s!=="").map(([s,n])=>e(typeof n=="boolean"?`${s}=${K(n)}`:`${s}=${n}`)).join(`,
141
- `)}function Ws(t,e){return Object.entries(t).filter(([,s])=>s!=null&&s!=="").map(([s,n])=>{let r=`"${s}"`;return e(typeof n=="boolean"?`${r}: ${K(n)}`:`${r}: ${n}`)}).join(`,
142
- `)}var Ge=U(),Ze=[{name:"PostgreSQL",schema:Te,color:"#336791",logo:"postgres",connectionLibraries:{libraries:["sqlalchemy","sqlmodel"],preferred:"sqlalchemy"}},{name:"MySQL",schema:Le,color:"#00758F",logo:"mysql",connectionLibraries:{libraries:["sqlalchemy","sqlmodel"],preferred:"sqlalchemy"}},{name:"SQLite",schema:Ne,color:"#003B57",logo:"sqlite",connectionLibraries:{libraries:["sqlalchemy","sqlmodel"],preferred:"sqlalchemy"}},{name:"DuckDB",schema:De,color:"#FFD700",logo:"duckdb",connectionLibraries:{libraries:["duckdb"],preferred:"duckdb"}},{name:"MotherDuck",schema:Ie,color:"#ff9538",logo:"motherduck",connectionLibraries:{libraries:["duckdb"],preferred:"duckdb"}},{name:"Snowflake",schema:Pe,color:"#29B5E8",logo:"snowflake",connectionLibraries:{libraries:["sqlalchemy","sqlmodel"],preferred:"sqlalchemy"}},{name:"ClickHouse",schema:qe,color:"#2C2C1D",logo:"clickhouse",connectionLibraries:{libraries:["clickhouse_connect"],preferred:"clickhouse_connect"}},{name:"Timeplus",schema:Ee,color:"#B83280",logo:"timeplus",connectionLibraries:{libraries:["sqlalchemy","sqlmodel"],preferred:"sqlalchemy"}},{name:"BigQuery",schema:Fe,color:"#4285F4",logo:"bigquery",connectionLibraries:{libraries:["sqlalchemy","sqlmodel"],preferred:"sqlalchemy"}},{name:"ClickHouse Embedded",schema:Be,color:"#f2b611",logo:"clickhouse",connectionLibraries:{libraries:["chdb"],preferred:"chdb"}},{name:"Trino",schema:Oe,color:"#d466b6",logo:"trino",connectionLibraries:{libraries:["sqlalchemy","sqlmodel"],preferred:"sqlalchemy"}},{name:"DataFusion",schema:Ue,color:"#202A37",logo:"datafusion",connectionLibraries:{libraries:["ibis"],preferred:"ibis"}},{name:"PySpark",schema:Ke,color:"#1C5162",logo:"pyspark",connectionLibraries:{libraries:["ibis"],preferred:"ibis"}},{name:"Redshift",schema:He,color:"#522BAE",logo:"redshift",connectionLibraries:{libraries:["redshift"],preferred:"redshift"}},{name:"Databricks",schema:ze,color:"#c41e0c",logo:"databricks",connectionLibraries:{libraries:["sqlalchemy","sqlmodel","ibis"],preferred:"sqlalchemy"}},{name:"Supabase",schema:We,color:"#238F5F",logo:"supabase",connectionLibraries:{libraries:["sqlalchemy","sqlmodel"],preferred:"sqlalchemy"}}],Qe=[{name:"Iceberg",schema:Me,color:"#000000",logo:"iceberg",connectionLibraries:{libraries:["pyiceberg"],preferred:"pyiceberg"}}],Vs=[...Ze,...Qe],Gs=t=>{let e=(0,Ge.c)(12),{onSelect:s}=t,n;e[0]===s?n=e[1]:(n=Ze.map(p=>{let{name:m,schema:b,color:h,logo:g}=p;return(0,o.jsx)(oe,{name:m,color:h,icon:(0,o.jsx)(ie,{name:g,className:"w-8 h-8 text-white brightness-0 invert dark:invert"}),onSelect:()=>s(b)},m)}),e[0]=s,e[1]=n);let r;e[2]===n?r=e[3]:(r=(0,o.jsx)(ne,{children:n}),e[2]=n,e[3]=r);let c;e[4]===Symbol.for("react.memo_cache_sentinel")?(c=(0,o.jsxs)("h4",{className:"font-semibold text-muted-foreground text-lg flex items-center gap-4 my-2",children:["Data Catalogs",(0,o.jsx)("hr",{className:"flex-1"})]}),e[4]=c):c=e[4];let l;e[5]===s?l=e[6]:(l=Qe.map(p=>{let{name:m,schema:b,color:h,logo:g}=p;return(0,o.jsx)(oe,{name:m,color:h,icon:(0,o.jsx)(ie,{name:g,className:"w-8 h-8 text-white brightness-0 invert dark:invert"}),onSelect:()=>s(b)},m)}),e[5]=s,e[6]=l);let i;e[7]===l?i=e[8]:(i=(0,o.jsx)(ne,{children:l}),e[7]=l,e[8]=i);let d;return e[9]!==r||e[10]!==i?(d=(0,o.jsxs)(o.Fragment,{children:[r,c,i]}),e[9]=r,e[10]=i,e[11]=d):d=e[11],d};const Zs=t=>{let e=(0,Ge.c)(13),{onSubmit:s,header:n}=t,[r,c]=(0,D.useState)(null);if(!r){let h;e[0]===Symbol.for("react.memo_cache_sentinel")?(h=(0,o.jsx)("div",{children:(0,o.jsx)(Gs,{onSelect:c})}),e[0]=h):h=e[0];let g;return e[1]===n?g=e[2]:(g=(0,o.jsxs)(o.Fragment,{children:[n,h]}),e[1]=n,e[2]=g),g}let l;e[3]===r?l=e[4]:(l=Vs.find(h=>h.schema===r),e[3]=r,e[4]=l);let i=l==null?void 0:l.connectionLibraries,d;e[5]===(i==null?void 0:i.libraries)?d=e[6]:(d=(i==null?void 0:i.libraries)??[],e[5]=i==null?void 0:i.libraries,e[6]=d);let p=(i==null?void 0:i.preferred)??"sqlalchemy",m;e[7]===Symbol.for("react.memo_cache_sentinel")?(m=()=>c(null),e[7]=m):m=e[7];let b;return e[8]!==s||e[9]!==r||e[10]!==d||e[11]!==p?(b=(0,o.jsx)(Ae,{schema:r,libraries:d,preferredLibrary:p,displayNames:Ve,libraryLabel:"Preferred connection library",generateCode:Qs,onSubmit:s,onBack:m}),e[8]=s,e[9]=r,e[10]=d,e[11]=p,e[12]=b):b=e[12],b};function Qs(t,e){return zs(t,e)}var Js="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",Ys="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",Xs="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",er="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",tr="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",sr="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",rr=U(),nr={s3:{src:rs,dark:Js},coreweave:{src:Xs,dark:er},cloudflare:{src:Ys},azure:{src:ns},gcs:{src:tr},http:Bt,file:re,"in-memory":Ft,gdrive:{src:sr},github:ds};const Je=t=>{let e=(0,rr.c)(11),{protocol:s,forceDark:n,className:r}=t,{theme:c}=Kt(),l=nr[s.toLowerCase()]??re;if("src"in l){let m=l.src;l.dark&&(n||c==="dark")&&(m=l.dark);let b=m,h;e[0]===r?h=e[1]:(h=H("h-3.5 w-3.5",r),e[0]=r,e[1]=h);let g;return e[2]!==s||e[3]!==m||e[4]!==h?(g=(0,o.jsx)("img",{src:b,alt:s,className:h}),e[2]=s,e[3]=m,e[4]=h,e[5]=g):g=e[5],g}let i=l,d;e[6]===r?d=e[7]:(d=H("h-3.5 w-3.5",r),e[6]=r,e[7]=d);let p;return e[8]!==i||e[9]!==d?(p=(0,o.jsx)(i,{className:d}),e[8]=i,e[9]=d,e[10]=p):p=e[10],p};var Ye=()=>M("type",[_({type:w("Access keys"),access_key_id:f().optional().describe(a.of({label:"Access Key ID",description:"Leave empty to use the default credential chain",inputType:"password",optionRegex:"(access.?key.?id|object.?storage.?key|aws.?access.?key)"})),secret_access_key:f().optional().describe(a.of({label:"Secret Access Key",inputType:"password",optionRegex:"(secret.?access.?key|object.?storage.?secret|aws.?secret)"}))}),_({type:w("Container credentials"),container_credentials_full_uri:f().nonempty().describe(a.of({label:"Credentials URI",description:"Endpoint that vends credentials to the container",placeholder:"http://169.254.170.23/v1/credentials",optionRegex:"container.?credentials"})),container_authorization_token_file:f().nonempty().describe(a.of({label:"Authorization Token File",description:"File holding the token sent to the credentials URI",placeholder:"/var/run/secrets/token",optionRegex:"(container.?authorization.?token.?file|container.?auth.?token)"}))})]).default({type:"Access keys"}).describe(a.of({label:"Credentials",special:"tabs"}));const Xe=_({type:w("s3"),bucket:f().nonempty().describe(a.of({label:"Bucket",placeholder:"my-bucket",optionRegex:"(bucket|s3.?bucket)"})),region:f().optional().describe(a.of({label:"Region",placeholder:"us-east-1",optionRegex:"(region|aws.?region)"})),endpoint_url:f().optional().describe(a.of({label:"Endpoint URL",description:"Ignored if the AWS_ENDPOINT_URL_S3 environment variable is set",placeholder:"https://s3.amazonaws.com",optionRegex:"(endpoint|s3.?url|s3.?endpoint)"})),allow_http:N().default(!1).describe(a.of({label:"Allow HTTP",description:"Required for plain-http (non-TLS) endpoints"})),auth:Ye()}).describe(a.of({direction:"two-columns"})),et=_({type:w("gcs"),bucket:f().nonempty().describe(a.of({label:"Bucket",placeholder:"my-bucket",optionRegex:"(bucket|gcs.?bucket|google.?bucket)"})),service_account_key:f().optional().describe(a.of({label:"Service Account Key (JSON)",special:"secret_textarea"}))}).describe(a.of({direction:"two-columns"})),tt=_({type:w("azure"),container:f().nonempty().describe(a.of({label:"Container",placeholder:"my-container"})),account_name:f().nonempty().describe(a.of({label:"Account Name",placeholder:"storageaccount",optionRegex:"(azure.?account|account.?name|storage.?account)"})),account_key:f().optional().describe(a.of({label:"Account Key",inputType:"password",optionRegex:"(azure.?key|account.?key|storage.?key)"}))}).describe(a.of({direction:"two-columns"})),st=_({type:w("coreweave"),bucket:f().nonempty().describe(a.of({label:"Bucket",placeholder:"bucket-name"})),region:f().nonempty().describe(a.of({label:"Region",placeholder:"US-EAST-04A"})),auth:Ye()}).describe(a.of({direction:"two-columns"})),rt=_({type:w("gdrive"),credentials_json:f().optional().describe(a.of({label:"Service Account JSON",description:"Leave empty to use browser-based authentication",special:"secret_textarea"}))}).describe(a.of({direction:"two-columns"})),or=M("type",[Xe,et,tt,st,rt]),ar={obstore:"obstore",fsspec:"fsspec"};var cr=class{constructor(){V(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(q(e)){let n=Se(e);return this.secrets[s]=`os.environ.get("${n}")`,s}return`"${e}"`}formatSecrets(){return Object.keys(this.secrets).length===0?"":Object.entries(this.secrets).map(([t,e])=>`${t} = ${e}`).join(`
143
- `)}};function nt(t,e){if((t==null?void 0:t.type)==="Container credentials")return[` container_credentials_full_uri=${e.print("container_credentials_full_uri",t.container_credentials_full_uri)},`,` container_authorization_token_file=${e.print("container_authorization_token_file",t.container_authorization_token_file)},`];let s=[];return t!=null&&t.access_key_id&&s.push(` access_key_id=${e.print("access_key_id",t.access_key_id)},`),t!=null&&t.secret_access_key&&s.push(` secret_access_key=${e.print("secret_access_key",t.secret_access_key)},`),s}function ir(t,e){let s=e.print("bucket",t.bucket),n=new Set(["from obstore.store import S3Store"]),r=[];return t.region&&r.push(` region=${e.print("region",t.region)},`),r.push(...nt(t.auth,e)),t.endpoint_url&&r.push(` endpoint_url=${e.print("endpoint_url",t.endpoint_url)},`),t.allow_http&&r.push(" allow_http=True,"),{imports:n,code:y(`
144
- store = S3Store(${s},${r.length>0?`
145
- ${r.join(`
146
- `)}
147
- `:""})
148
- `)}}function lr(t,e){let s=e.print("bucket",t.bucket),n=new Set(["from obstore.store import GCSStore"]);if(!t.service_account_key)return{imports:n,code:y(`
149
- store = GCSStore(${s})
150
- `)};let r=ee(t.service_account_key,c=>e.print("service_account_key",c));return r.kind==="path"?{imports:n,code:y(`
151
- store = GCSStore(${s},
152
- service_account_path="${se(r.path)}",
153
- )
154
- `)}:(n.add("import json"),{imports:n,code:y(`
155
- _credentials = ${r.expr}
156
- store = GCSStore(${s},
157
- service_account_key=_credentials,
158
- )
159
- `)})}function dr(t,e){let s=e.print("container",t.container),n=e.print("account_name",t.account_name),r=new Set(["from obstore.store import AzureStore"]),c=[`account_name=${n},`];return t.account_key&&c.push(`account_key=${e.print("account_key",t.account_key)},`),{imports:r,code:`store = AzureStore(${s},
160
- ${c.map(l=>` ${l}`).join(`
161
- `)}
162
- )`}}function pr(t,e){let s=e.print("bucket",t.bucket),n=new Set(["from obstore.store import S3Store"]),r=[` region=${e.print("region",t.region)},`];return r.push(...nt(t.auth,e)),r.push(` endpoint="https://${t.bucket}.cwobject.com",`," virtual_hosted_style_request=True,"),{imports:n,code:y(`
163
- store = S3Store(${s},${`
164
- ${r.join(`
165
- `)}
166
- `})
167
- `)}}function hr(t,e){let{secrets:s,isEmbedded:n=!1}=e,r=new Set(["from gdrive_fsspec import GoogleDriveFileSystem"]);if(t.credentials_json){let c=ee(t.credentials_json,l=>s.print("credentials_json",l));return c.kind==="path"?{imports:r,code:y(`
168
- fs = GoogleDriveFileSystem(creds="${se(c.path)}", token="service_account", use_listings_cache=False, skip_instance_cache=True)
169
- `)}:(r.add("import json"),{imports:r,code:y(`
170
- _creds = ${c.expr}
171
- fs = GoogleDriveFileSystem(creds=_creds, token="service_account", use_listings_cache=False, skip_instance_cache=True)
172
- `)})}return{imports:r,code:y(n?`
173
- fs = GoogleDriveFileSystem(use_listings_cache=False, skip_instance_cache=True, auth_kwargs={"use_local_webserver": False})
174
- mo.output.clear_console()
175
- `:`
176
- fs = GoogleDriveFileSystem(use_listings_cache=False, skip_instance_cache=True)
177
- `)}}function mr(t,e){or.parse(t);let s=new cr,n;switch(t.type){case"s3":n=ir(t,s);break;case"gcs":n=lr(t,s);break;case"azure":n=dr(t,s);break;case"coreweave":n=pr(t,s);break;case"gdrive":n=hr(t,{secrets:s,isEmbedded:e.isEmbedded});break;default:z(t)}let r=[...new Set([...s.imports,...n.imports])].toSorted();r.push("");let c=s.formatSecrets();return c&&r.push(c),r.push(n.code.trim()),r.join(`
178
- `)}var ot=U(),ur="#232F3E",at=[{name:"Amazon S3",schema:Xe,protocol:"s3",storageLibraries:{libraries:["obstore"],preferred:"obstore"}},{name:"Google Cloud Storage",schema:et,protocol:"gcs",storageLibraries:{libraries:["obstore"],preferred:"obstore"}},{name:"Azure Blob Storage",schema:tt,protocol:"azure",storageLibraries:{libraries:["obstore"],preferred:"obstore"}},{name:"CoreWeave",schema:st,protocol:"coreweave",storageLibraries:{libraries:["obstore"],preferred:"obstore"}},{name:"Google Drive",schema:rt,protocol:"gdrive",storageLibraries:{libraries:["fsspec"],preferred:"fsspec"}}],br=t=>{let e=(0,ot.c)(4),{onSelect:s}=t,n;e[0]===s?n=e[1]:(n=at.map(c=>{let{name:l,schema:i,protocol:d}=c;return(0,o.jsx)(oe,{name:l,color:ur,icon:(0,o.jsx)(Je,{protocol:d,forceDark:!0,className:"w-7.5 h-7.5"}),onSelect:()=>s(i)},l)}),e[0]=s,e[1]=n);let r;return e[2]===n?r=e[3]:(r=(0,o.jsx)(ne,{children:n}),e[2]=n,e[3]=r),r};const fr=t=>{let e=(0,ot.c)(16),{onSubmit:s,header:n}=t,{isEmbedded:r}=Qt(),[c,l]=(0,D.useState)(null);if(!c){let u;e[0]===Symbol.for("react.memo_cache_sentinel")?(u=(0,o.jsx)("div",{children:(0,o.jsx)(br,{onSelect:l})}),e[0]=u):u=e[0];let x;return e[1]===n?x=e[2]:(x=(0,o.jsxs)(o.Fragment,{children:[n,u]}),e[1]=n,e[2]=x),x}let i;e[3]===c?i=e[4]:(i=at.find(u=>u.schema===c),e[3]=c,e[4]=i);let d=i==null?void 0:i.storageLibraries,p;e[5]===(d==null?void 0:d.libraries)?p=e[6]:(p=(d==null?void 0:d.libraries)??[],e[5]=d==null?void 0:d.libraries,e[6]=p);let m=(d==null?void 0:d.preferred)??"obstore",b;e[7]===r?b=e[8]:(b=(u,x)=>mr(u,{library:x,isEmbedded:r}),e[7]=r,e[8]=b);let h;e[9]===Symbol.for("react.memo_cache_sentinel")?(h=()=>l(null),e[9]=h):h=e[9];let g;return e[10]!==s||e[11]!==c||e[12]!==p||e[13]!==m||e[14]!==b?(g=(0,o.jsx)(Ae,{schema:c,libraries:p,preferredLibrary:m,displayNames:ar,libraryLabel:"Preferred storage library",generateCode:b,onSubmit:s,onBack:h}),e[10]=s,e[11]=c,e[12]=p,e[13]=m,e[14]=b,e[15]=g):g=e[15],g};var ct=U();const gr=t=>{let e=(0,ct.c)(9),{children:s,defaultTab:n}=t,r=n===void 0?"databases":n,[c,l]=(0,D.useState)(!1),i;e[0]===s?i=e[1]:(i=(0,o.jsx)(Wt,{asChild:!0,children:s}),e[0]=s,e[1]=i);let d;e[2]===Symbol.for("react.memo_cache_sentinel")?(d=()=>l(!1),e[2]=d):d=e[2];let p;e[3]===r?p=e[4]:(p=(0,o.jsx)(it,{defaultTab:r,onClose:d}),e[3]=r,e[4]=p);let m;return e[5]!==c||e[6]!==i||e[7]!==p?(m=(0,o.jsxs)(Zt,{open:c,onOpenChange:l,children:[i,p]}),e[5]=c,e[6]=i,e[7]=p,e[8]=m):m=e[8],m},it=t=>{let e=(0,ct.c)(20),{defaultTab:s,onClose:n}=t,[r,c]=(0,D.useState)(s===void 0?"databases":s),l;e[0]===Symbol.for("react.memo_cache_sentinel")?(l=(0,o.jsxs)(kt,{className:"w-full mb-4",children:[(0,o.jsx)(de,{value:"databases",className:"flex-1",children:"Databases & Catalogs"}),(0,o.jsx)(de,{value:"storage",className:"flex-1",children:"Remote Storages"})]}),e[0]=l):l=e[0];let i=l,d;e[1]===r?d=e[2]:(d=r==="databases"?(0,o.jsxs)(o.Fragment,{children:["Don't see your database or connection method? A"," ",(0,o.jsx)(G,{href:"https://docs.marimo.io/guides/working_with_data/sql/#connecting-to-a-custom-database",children:"code snippet"})," ","is all you need."]}):(0,o.jsxs)(o.Fragment,{children:["Don't see your storage or connection method? A"," ",(0,o.jsx)(G,{href:"https://docs.marimo.io/guides/working_with_data/remote_storage/#creating-a-storage-connection",children:"code snippet"})," ","is all you need."]}),e[1]=r,e[2]=d);let p=d,m;e[3]===Symbol.for("react.memo_cache_sentinel")?(m=(0,o.jsx)(zt,{children:"Add Connection"}),e[3]=m):m=e[3];let b;e[4]===Symbol.for("react.memo_cache_sentinel")?(b=(0,o.jsx)(G,{href:"https://docs.marimo.io/guides/working_with_data/sql/#connecting-to-a-custom-database",children:"database, data catalog"}),e[4]=b):b=e[4];let h;e[5]===Symbol.for("react.memo_cache_sentinel")?(h=(0,o.jsx)(G,{href:"https://docs.marimo.io/guides/working_with_data/remote_storage/",children:"remote storage"}),e[5]=h):h=e[5];let g;e[6]===p?g=e[7]:(g=(0,o.jsxs)(Ht,{children:[m,(0,o.jsxs)(Gt,{children:["Connect to a"," ",b," ","or"," ",h," ","directly from your notebook.",(0,o.jsx)("span",{className:"block",children:p})]})]}),e[6]=p,e[7]=g);let u;e[8]===Symbol.for("react.memo_cache_sentinel")?(u=A=>c(A),e[8]=u):u=e[8];let x;e[9]===n?x=e[10]:(x=(0,o.jsx)(pe,{value:"databases",className:"mt-0 focus-visible:ring-0 focus-visible:ring-offset-0",children:(0,o.jsx)(Zs,{onSubmit:n,header:i})}),e[9]=n,e[10]=x);let k;e[11]===n?k=e[12]:(k=(0,o.jsx)(pe,{value:"storage",className:"mt-0 focus-visible:ring-0 focus-visible:ring-offset-0",children:(0,o.jsx)(fr,{onSubmit:n,header:i})}),e[11]=n,e[12]=k);let S;e[13]!==r||e[14]!==k||e[15]!==x?(S=(0,o.jsxs)(wt,{value:r,onValueChange:u,children:[x,k]}),e[13]=r,e[14]=k,e[15]=x,e[16]=S):S=e[16];let $;return e[17]!==S||e[18]!==g?($=(0,o.jsxs)(Vt,{className:"max-h-[75vh] overflow-y-auto",children:[g,S]}),e[17]=S,e[18]=g,e[19]=$):$=e[19],$};export{re as i,it as n,Je as r,gr as t};
@@ -1 +0,0 @@
1
- import{s as j}from"./chunk-LvLJmgfZ.js";import{d as L,l as P,n as E,u as O}from"./useEvent-D91BmmQi.js";import{Bi as b,E as T,N as $,Qi as w,j as y,kt as A,ln as S}from"./cells-Jr-5Pc9f.js";import{t as _}from"./compiler-runtime-B3qBwwSJ.js";import{g as B}from"./useEventListener-C0195JsF.js";import{m as D}from"./utils-BWBBpCkT.js";import{r as N}from"./constants-CDyU_g2F.js";import{T as F,v as q}from"./config-B-Q7J_6d.js";import{t as H}from"./cn-DYvqRARy.js";import{t as M}from"./jsx-runtime-Blw4afVn.js";import{r as Q}from"./requests-9-v2bhoi.js";import{n as R}from"./paths-BKO-pHK6.js";import{s as U}from"./session-BmukRjSi.js";import{n as V}from"./ImperativeModal-fY-ZfT0b.js";var z=_();function I(){return O(b)}function G(){let r=(0,z.c)(5),[t]=P(q),e=L(b),{openAlert:s}=V(),{sendRename:o}=Q(),a;return r[0]!==t.state||r[1]!==s||r[2]!==o||r[3]!==e?(a=async l=>{let n=D();return t.state===F.OPEN?(U(i=>{l===null?i.delete(N.filePath):i.set(N.filePath,l)}),o({filename:l}).then(()=>(e(l),document.title=n.app_title||R.basename(l)||"Untitled Notebook",l)).catch(i=>(s(i.message),null))):(s("Failed to save notebook: not connected to a kernel."),null)},r[0]=t.state,r[1]=s,r[2]=o,r[3]=e,r[4]=a):a=r[4],E(a)}var p=_(),v=j(M(),1);const k=r=>{let t=(0,p.c)(12),{className:e,cellId:s,variant:o,onClick:a,formatCellName:l,skipScroll:n}=r,i=$()[s]??"",C=y().inOrderIds.indexOf(s),{showCellIfHidden:d}=T(),g=l??W,c;t[0]===e?c=t[1]:(c=H("inline-block cursor-pointer text-link hover:underline",e),t[0]=e,t[1]=c);let m;t[2]!==s||t[3]!==a||t[4]!==d||t[5]!==n||t[6]!==o?(m=h=>{if(s==="__scratch__")return!1;d({cellId:s}),h.stopPropagation(),h.preventDefault(),requestAnimationFrame(()=>{x(s,o,n)&&(a==null||a())})},t[2]=s,t[3]=a,t[4]=d,t[5]=n,t[6]=o,t[7]=m):m=t[7];let f=g(A(i,C)),u;return t[8]!==c||t[9]!==m||t[10]!==f?(u=(0,v.jsx)("div",{className:c,role:"link",tabIndex:-1,onClick:m,children:f}),t[8]=c,t[9]=m,t[10]=f,t[11]=u):u=t[11],u},J=r=>{let t=(0,p.c)(2),e;return t[0]===r?e=t[1]:(e=(0,v.jsx)(k,{...r,variant:"destructive"}),t[0]=r,t[1]=e),e},K=r=>{let t=(0,p.c)(10),{cellId:e,lineNumber:s}=r,o=I(),a;t[0]!==e||t[1]!==s?(a=()=>S(e,s),t[0]=e,t[1]=s,t[2]=a):a=t[2];let l;t[3]!==e||t[4]!==o?(l=i=>e==="__scratch__"?"scratch":`marimo://${o||"untitled"}#cell=${i}`,t[3]=e,t[4]=o,t[5]=l):l=t[5];let n;return t[6]!==e||t[7]!==a||t[8]!==l?(n=(0,v.jsx)(k,{cellId:e,onClick:a,skipScroll:!0,variant:"destructive",className:"traceback-cell-link",formatCellName:l}),t[6]=e,t[7]=a,t[8]=l,t[9]=n):n=t[9],n};function x(r,t,e){let s=w.create(r),o=document.getElementById(s),a=o==null?void 0:o.classList.contains("has-error");return o===null?(B.error(`Cell ${s} not found on page.`),!1):(e||o.scrollIntoView({behavior:"smooth",block:"center"}),(t==="destructive"||a&&t===void 0)&&(o.classList.add("error-outline"),setTimeout(()=>{o.classList.remove("error-outline")},2e3)),(t==="focus"||!a&&t===void 0)&&(o.classList.add("focus-outline"),setTimeout(()=>{o.classList.remove("focus-outline")},2e3)),!0)}function W(r){return r}export{I as a,x as i,J as n,G as o,K as r,k as t};
@@ -1,8 +0,0 @@
1
- import{_i as b,gi as k,kt as h,rt as s,vi as u,y as g}from"./cells-Jr-5Pc9f.js";import{i as D}from"./strings--BknHX9C.js";function H(t){if(b(t.mimetype)){if(!Array.isArray(t.data))return null;let e=t.data.filter(r=>!r.type.includes("ancestor"));return e.length===0?null:{errorData:e}}return u(t.mimetype)?typeof t.data!="string"||t.data.length===0?null:{errorData:[],tracebackHtml:t.data}:null}function T(t){return t.some(e=>"traceback"in e&&e.traceback)}function v(t){let e=t==null?void 0:t.find(r=>u(r.mimetype));if(!(!e||typeof e.data!="string"||e.data.length===0))return e.data}function w(t,e){if(t.tracebackHtml)return t.tracebackHtml;if(!T(t.errorData))return v(e)}function x(t){let{cellIds:e,cellRuntime:r,cellData:n}=t.get(g),i=[];for(let[f,a]of e.inOrderIds.entries()){let o=r[a],c=o.output;if(!c||!k(c.mimetype))continue;let l=H(c);if(!l)continue;let d=h(n[a].name,f),y=n[a].lastCodeRun??n[a].code;i.push({cellId:a,cellName:d,cellCode:y,errorData:l.errorData,tracebackHtml:w(l,o.consoleOutputs)})}return i}function p(t){return t.type==="setup-refs"?"The setup cell cannot have references":t.type==="cycle"?"This cell is in a cycle":t.type==="multiple-defs"?`The variable '${t.name}' was defined by another cell`:t.type==="import-star"||t.type==="ancestor-stopped"||t.type==="ancestor-prevented"||t.type==="exception"||t.type==="strict-exception"?t.msg:t.type==="interruption"?"This cell was interrupted and needs to be re-run":t.type==="syntax"||t.type==="unknown"||t.type==="sql-error"?t.msg:t.type==="internal"?t.msg||"An internal error occurred":(D(t),"Unknown error")}function m(t){let e=p(t);return"traceback"in t&&t.traceback&&(e+=`
2
-
3
- Traceback:
4
- ${s(t.traceback)}`),e}function A(t){let e=[t.cellName];return t.tracebackHtml&&e.push(s(t.tracebackHtml)),t.errorData.length>0&&e.push(t.errorData.map(m).join(`
5
-
6
- `)),e.join(`
7
-
8
- `)}export{x as i,A as n,m as r,p as t};