@marimo-team/frontend 0.23.16-dev17 → 0.23.16-dev19

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 (78) hide show
  1. package/dist/assets/{CellStatus-CQrgRVnH.js → CellStatus-DwV4gbV3.js} +1 -1
  2. package/dist/assets/{JsonOutput-CQL-gLeb.js → JsonOutput-BoDVlAbV.js} +1 -1
  3. package/dist/assets/{MarimoErrorOutput-DhdBaOiL.js → MarimoErrorOutput-C2HrF0bD.js} +1 -1
  4. package/dist/assets/{RenderHTML-B2bcpQmX.js → RenderHTML-DoCFSir5.js} +1 -1
  5. package/dist/assets/{RunButton-q1vpVrOb.js → RunButton-COtmJuup.js} +1 -1
  6. package/dist/assets/{add-cell-with-ai-C6ss8QQB.js → add-cell-with-ai-96GHR2R7.js} +1 -1
  7. package/dist/assets/add-connection-dialog-wLF3on0N.js +170 -0
  8. package/dist/assets/{agent-panel-D3KhT1_E.js → agent-panel-xLPKpIwr.js} +1 -1
  9. package/dist/assets/{ai-model-dropdown-BJ-Fk1v-.js → ai-model-dropdown-CR8HQGYf.js} +1 -1
  10. package/dist/assets/{app-config-button-BNa_HLVP.js → app-config-button-Ch-fmU-u.js} +1 -1
  11. package/dist/assets/{cell-editor-CVvYDvr6.js → cell-editor-CxP3SFwW.js} +1 -1
  12. package/dist/assets/{cell-link-C8nxD_W9.js → cell-link-D1nZ5myN.js} +1 -1
  13. package/dist/assets/cells-D9tCNe6o.js +231 -0
  14. package/dist/assets/{chat-display-BdfTOyq7.js → chat-display-PstK5lnL.js} +1 -1
  15. package/dist/assets/{chat-panel-C59X38kZ.js → chat-panel-XuGXjT-8.js} +1 -1
  16. package/dist/assets/{chat-ui-B7hXwgdU.js → chat-ui-Cme86OAK.js} +1 -1
  17. package/dist/assets/{column-preview-Cw6-dEvS.js → column-preview-BYiduGzU.js} +1 -1
  18. package/dist/assets/{command-palette-BTMtMbGE.js → command-palette-C7NlQPUx.js} +1 -1
  19. package/dist/assets/{common-Dka2pErg.js → common-XBd1qRDk.js} +1 -1
  20. package/dist/assets/{components-wQcaVW9i.js → components-D-aPO6md.js} +1 -1
  21. package/dist/assets/{datasource-DO7_JroJ.js → datasource-Pl4KKOUa.js} +1 -1
  22. package/dist/assets/{dependency-graph-panel-C1uIQUFU.js → dependency-graph-panel-98TlJ5y7.js} +1 -1
  23. package/dist/assets/{documentation-panel-CBhI2U-B.js → documentation-panel-DSOMQtKU.js} +1 -1
  24. package/dist/assets/{download-C3_FQaAj.js → download-CnYLah74.js} +1 -1
  25. package/dist/assets/{edit-page-kYxv7oti.js → edit-page-CchyCkOl.js} +4 -4
  26. package/dist/assets/{error-entries-BT3bKydl.js → error-entries-CmfGHGq1.js} +1 -1
  27. package/dist/assets/{error-panel-DCWSomiz.js → error-panel-BKb_UksO.js} +1 -1
  28. package/dist/assets/{file-explorer-panel-ue-g7xZo.js → file-explorer-panel-8_ps5wdU.js} +1 -1
  29. package/dist/assets/{file-icons-BPxqyom6.js → file-icons-Czm7CWoc.js} +1 -1
  30. package/dist/assets/{file-name-input-DG3uY1OK.js → file-name-input-CjWG0FWT.js} +1 -1
  31. package/dist/assets/{floating-outline-BlWpUqQd.js → floating-outline-BWk7h_Uf.js} +1 -1
  32. package/dist/assets/{focus-CR010iV5.js → focus-DTmSq3hN.js} +1 -1
  33. package/dist/assets/{form-CSUFC7OJ.js → form-B5UJtZJr.js} +1 -1
  34. package/dist/assets/{home-page-Bg8xLK79.js → home-page-cBU6sDBU.js} +1 -1
  35. package/dist/assets/{html-to-image-BA1JM9Ro.js → html-to-image-1vflBYah.js} +1 -1
  36. package/dist/assets/{index-DKJE99Vg.js → index-B8eK-daS.js} +3 -3
  37. package/dist/assets/{layout-tzJGwYSv.js → layout-DkpUSblm.js} +3 -3
  38. package/dist/assets/{logs-panel-BaM4Hjq-.js → logs-panel-BojuPimp.js} +1 -1
  39. package/dist/assets/{markdown-renderer-DjR4GTXM.js → markdown-renderer-C9vdWclk.js} +1 -1
  40. package/dist/assets/{name-cell-input-FhUKpPxu.js → name-cell-input-BSFsnuTp.js} +1 -1
  41. package/dist/assets/node-sql-parser-Si4oZ2P-.js +68 -0
  42. package/dist/assets/{outline-panel-C8xAJGx2.js → outline-panel-B1f5a2yI.js} +1 -1
  43. package/dist/assets/{packages-panel-BMkLBR3q.js → packages-panel-BKuXx1gi.js} +1 -1
  44. package/dist/assets/{panels-DOs7OjCe.js → panels-Cvyb3kny.js} +1 -1
  45. package/dist/assets/{process-output-B65kKzWn.js → process-output-Csd6PmBH.js} +1 -1
  46. package/dist/assets/{radio-group-BXtGMMA7.js → radio-group-CdR34W0K.js} +1 -1
  47. package/dist/assets/{readonly-code-display-BfbZ0Zur.js → readonly-code-display-XBAHhCYR.js} +1 -1
  48. package/dist/assets/{readonly-python-code-BQWruwg8.js → readonly-python-code-BqcMp63O.js} +1 -1
  49. package/dist/assets/{reveal-component-A0eH29dm.js → reveal-component-BvsuzhVi.js} +1 -1
  50. package/dist/assets/{run-page-BJpLYAjW.js → run-page-B9jHpo8w.js} +1 -1
  51. package/dist/assets/{scratchpad-panel-CAdr_COJ.js → scratchpad-panel-D3slJkhR.js} +1 -1
  52. package/dist/assets/{session-panel-CjCLtBN8.js → session-panel-DO-4U6Ry.js} +1 -1
  53. package/dist/assets/{skeleton-BCI5dHU-.js → skeleton-C3fwwBky.js} +1 -1
  54. package/dist/assets/{snippets-panel-dur3irsV.js → snippets-panel-ACMhA8oL.js} +1 -1
  55. package/dist/assets/{state-A_CUgvqo.js → state-D2ccy8VQ.js} +1 -1
  56. package/dist/assets/{state-WCga518J.js → state-N0U-K9F6.js} +1 -1
  57. package/dist/assets/{textarea-DivigueA.js → textarea-BQE_pb7P.js} +1 -1
  58. package/dist/assets/{tracing-CJT85Cub.js → tracing-CuJfR83E.js} +1 -1
  59. package/dist/assets/{tracing-panel-KedELTC2.js → tracing-panel-CmMG0R-H.js} +2 -2
  60. package/dist/assets/{tree-actions-lcVncuGx.js → tree-actions-DJTGQWz0.js} +1 -1
  61. package/dist/assets/{useCellActionButton-C8fMhB_e.js → useCellActionButton-BhCYWOKS.js} +1 -1
  62. package/dist/assets/{useDeleteCell-D1oWqD7f.js → useDeleteCell-DsWH8wmn.js} +1 -1
  63. package/dist/assets/{useDependencyPanelTab-CNgecBne.js → useDependencyPanelTab-CAI77Oxj.js} +1 -1
  64. package/dist/assets/{useNotebookActions-C0JHYziN.js → useNotebookActions-9T9wvd8s.js} +1 -1
  65. package/dist/assets/{useRunCells-Cc95uCyI.js → useRunCells-BpMmDGqa.js} +1 -1
  66. package/dist/assets/{useSplitCell-DU6bZbia.js → useSplitCell-CapBPXO1.js} +1 -1
  67. package/dist/index.html +22 -22
  68. package/package.json +2 -2
  69. package/src/components/editor/connections/storage/__tests__/__snapshots__/as-code.test.ts.snap +50 -0
  70. package/src/components/editor/connections/storage/__tests__/as-code.test.ts +87 -8
  71. package/src/components/editor/connections/storage/as-code.ts +40 -21
  72. package/src/components/editor/connections/storage/schemas.ts +83 -42
  73. package/src/core/codemirror/language/__tests__/sql.test.ts +443 -61
  74. package/src/core/codemirror/language/languages/sql/completion-store.ts +5 -1
  75. package/src/core/codemirror/language/languages/sql/sql.ts +210 -3
  76. package/dist/assets/add-connection-dialog-BYUOT5oj.js +0 -170
  77. package/dist/assets/cells-BF-9DQVg.js +0 -229
  78. package/dist/assets/node-sql-parser-BWgUjcfV.js +0 -68
@@ -12,12 +12,17 @@ import {
12
12
  type ViewUpdate,
13
13
  } from "@codemirror/view";
14
14
  import {
15
+ aliasColumnCompletionSource,
16
+ createCteCompletionSource,
15
17
  defaultSqlHoverTheme,
16
18
  NodeSqlParser,
17
19
  type NodeSqlParserResult,
20
+ QueryContextAnalyzer,
18
21
  type SupportedDialects as ParserDialects,
19
22
  type SqlParseError,
20
23
  sqlExtension,
24
+ SqlStructureAnalyzer,
25
+ unqualifiedColumnCompletionSource,
21
26
  } from "@marimo-team/codemirror-sql";
22
27
  import { DuckDBDialect } from "@marimo-team/codemirror-sql/dialects";
23
28
  import { type SQLMetadata, SQLParser } from "@marimo-team/smart-cells";
@@ -142,6 +147,7 @@ export class SQLLanguageAdapter implements LanguageAdapter<SQLLanguageAdapterMet
142
147
  _placeholderType: PlaceholderType,
143
148
  lspConfig: LSPConfig & { diagnostics: DiagnosticsConfig },
144
149
  ): Extension[] {
150
+ const analysis = createSQLAnalysis();
145
151
  const extensions = [
146
152
  // This can be updated with a dispatch effect
147
153
  sqlConfigCompartment.of(sql({ dialect: DEFAULT_DIALECT })),
@@ -167,6 +173,10 @@ export class SQLLanguageAdapter implements LanguageAdapter<SQLLanguageAdapterMet
167
173
  variableCompletionSource,
168
174
  // Completions for dialect keywords
169
175
  customKeywordCompletionSource(),
176
+ // Completions based on the current query
177
+ analysis.cteCompletionSource,
178
+ analysis.aliasCompletionSource,
179
+ analysis.columnCompletionSource,
170
180
  ],
171
181
  }),
172
182
  ];
@@ -185,10 +195,23 @@ export class SQLLanguageAdapter implements LanguageAdapter<SQLLanguageAdapterMet
185
195
 
186
196
  extensions.push(
187
197
  sqlExtension({
198
+ schema: getSchema,
188
199
  enableLinting: true,
189
200
  linterConfig: {
190
201
  delay: 250, // Delay before running validation
191
202
  parser: parser,
203
+ // CustomSqlParser performs backend DuckDB validation in validateSql.
204
+ perStatement: false,
205
+ },
206
+ enableSemanticLinting: true,
207
+ semanticLinterConfig: {
208
+ parser: analysis.parser,
209
+ structureAnalyzer: analysis.structureAnalyzer,
210
+ severity: {
211
+ unknownTable: "off",
212
+ unknownColumn: "warning",
213
+ ambiguousColumn: "warning",
214
+ },
192
215
  },
193
216
  enableGutterMarkers: true,
194
217
  gutterConfig: {
@@ -198,14 +221,21 @@ export class SQLLanguageAdapter implements LanguageAdapter<SQLLanguageAdapterMet
198
221
  parser: parser,
199
222
  },
200
223
  hoverConfig: {
201
- schema: getSchema, // Use the same schema as autocomplete
202
224
  hoverTime: 300, // 300ms hover delay
203
225
  enableKeywords: true, // Show keyword information
204
226
  enableTables: true, // Show table information
205
227
  enableColumns: true, // Show column information
206
- parser: parser,
228
+ parser: analysis.parser,
229
+ contextAnalyzer: analysis.contextAnalyzer,
207
230
  theme: defaultSqlHoverTheme(theme),
208
231
  },
232
+ enableNavigation: true,
233
+ navigationConfig: {
234
+ contextAnalyzer: analysis.contextAnalyzer,
235
+ keymap: false,
236
+ parser: analysis.parser,
237
+ structureAnalyzer: analysis.structureAnalyzer,
238
+ },
209
239
  }),
210
240
  EditorView.updateListener.of((update) => {
211
241
  if (update.focusChanged) {
@@ -223,6 +253,123 @@ export class SQLLanguageAdapter implements LanguageAdapter<SQLLanguageAdapterMet
223
253
  }
224
254
  }
225
255
 
256
+ function createSQLAnalysis() {
257
+ const parser = new NodeSqlParser({
258
+ getParserOptions: (state: EditorState) => {
259
+ return {
260
+ database: getAnalysisDialect(state),
261
+ };
262
+ },
263
+ });
264
+ const contextAnalyzer = new DialectAwareQueryContextAnalyzer(parser);
265
+ const structureAnalyzer = new DialectAwareSqlStructureAnalyzer(parser);
266
+
267
+ return {
268
+ parser,
269
+ contextAnalyzer,
270
+ structureAnalyzer,
271
+ cteCompletionSource: createCteCompletionSource({
272
+ parser,
273
+ contextAnalyzer,
274
+ structureAnalyzer,
275
+ }),
276
+ aliasCompletionSource: aliasColumnCompletionSource({
277
+ schema: getSchema,
278
+ parser,
279
+ contextAnalyzer,
280
+ }),
281
+ columnCompletionSource: unqualifiedColumnCompletionSource({
282
+ schema: getSchema,
283
+ parser,
284
+ contextAnalyzer,
285
+ }),
286
+ };
287
+ }
288
+
289
+ function getAnalysisDialect(state: EditorState): ParserDialects {
290
+ return guessParserDialect(state) ?? DEFAULT_PARSER_DIALECT;
291
+ }
292
+
293
+ class DialectAwareQueryContextAnalyzer extends QueryContextAnalyzer {
294
+ private readonly analyzers = new Map<ParserDialects, QueryContextAnalyzer>();
295
+ private readonly analysisParser: NodeSqlParser;
296
+
297
+ constructor(analysisParser: NodeSqlParser) {
298
+ super(analysisParser);
299
+ this.analysisParser = analysisParser;
300
+ }
301
+
302
+ override getContext(
303
+ sql: string,
304
+ opts: { state: EditorState },
305
+ ): ReturnType<QueryContextAnalyzer["getContext"]> {
306
+ return this.getAnalyzer(opts.state).getContext(sql, opts);
307
+ }
308
+
309
+ override clearCache(): void {
310
+ for (const analyzer of this.analyzers.values()) {
311
+ analyzer.clearCache();
312
+ }
313
+ }
314
+
315
+ private getAnalyzer(state: EditorState): QueryContextAnalyzer {
316
+ const dialect = getAnalysisDialect(state);
317
+ let analyzer = this.analyzers.get(dialect);
318
+ if (!analyzer) {
319
+ analyzer = new QueryContextAnalyzer(this.analysisParser);
320
+ this.analyzers.set(dialect, analyzer);
321
+ }
322
+ return analyzer;
323
+ }
324
+ }
325
+
326
+ class DialectAwareSqlStructureAnalyzer extends SqlStructureAnalyzer {
327
+ private readonly analyzers = new Map<ParserDialects, SqlStructureAnalyzer>();
328
+ private readonly analysisParser: NodeSqlParser;
329
+
330
+ constructor(analysisParser: NodeSqlParser) {
331
+ super(analysisParser);
332
+ this.analysisParser = analysisParser;
333
+ }
334
+
335
+ override analyzeDocument(
336
+ state: EditorState,
337
+ ): ReturnType<SqlStructureAnalyzer["analyzeDocument"]> {
338
+ return this.getAnalyzer(state).analyzeDocument(state);
339
+ }
340
+
341
+ override getStatementAtPosition(
342
+ state: EditorState,
343
+ position: number,
344
+ ): ReturnType<SqlStructureAnalyzer["getStatementAtPosition"]> {
345
+ return this.getAnalyzer(state).getStatementAtPosition(state, position);
346
+ }
347
+
348
+ override getStatementsInRange(
349
+ state: EditorState,
350
+ from: number,
351
+ to: number,
352
+ ): ReturnType<SqlStructureAnalyzer["getStatementsInRange"]> {
353
+ return this.getAnalyzer(state).getStatementsInRange(state, from, to);
354
+ }
355
+
356
+ override clearCache(): void {
357
+ for (const analyzer of this.analyzers.values()) {
358
+ analyzer.clearCache();
359
+ }
360
+ }
361
+
362
+ private getAnalyzer(state: EditorState): SqlStructureAnalyzer {
363
+ const dialect = getAnalysisDialect(state);
364
+ let analyzer = this.analyzers.get(dialect);
365
+ if (!analyzer) {
366
+ analyzer = new SqlStructureAnalyzer(this.analysisParser);
367
+ this.analyzers.set(dialect, analyzer);
368
+ }
369
+ return analyzer;
370
+ }
371
+ }
372
+
226
373
  class CustomSqlParser extends NodeSqlParser {
227
374
  private validationTimeout: number | null = null;
228
375
  private readonly VALIDATION_DELAY_MS = 300; // Wait 300ms after user stops typing
@@ -344,7 +491,61 @@ function getSchema(view: EditorView): SQLNamespace {
344
491
  return {};
345
492
  }
346
493
 
347
- return config.schema;
494
+ const schema = config.schema;
495
+ if (!isNamespaceMap(schema)) {
496
+ return schema;
497
+ }
498
+
499
+ const defaultSchema = config.defaultSchema;
500
+ const defaultSchemaNamespace = defaultSchema
501
+ ? schema[defaultSchema]
502
+ : undefined;
503
+
504
+ // The completion schema contains both default-schema and fully qualified
505
+ // paths. Promote default-schema tables so unqualified references resolve to
506
+ // one exact match instead of appearing ambiguous.
507
+ if (
508
+ defaultSchemaNamespace &&
509
+ !Array.isArray(defaultSchemaNamespace) &&
510
+ typeof defaultSchemaNamespace === "object" &&
511
+ "children" in defaultSchemaNamespace &&
512
+ isNamespaceMap(defaultSchemaNamespace.children)
513
+ ) {
514
+ return {
515
+ ...schema,
516
+ ...Object.fromEntries(
517
+ Object.entries(defaultSchemaNamespace.children).filter(
518
+ ([name]) => !Object.hasOwn(schema, name),
519
+ ),
520
+ ),
521
+ };
522
+ }
523
+
524
+ return schema;
525
+ }
526
+
527
+ function isNamespaceMap(
528
+ namespace: SQLNamespace,
529
+ ): namespace is Record<string, SQLNamespace> {
530
+ if (Array.isArray(namespace)) {
531
+ return false;
532
+ }
533
+
534
+ if (!("self" in namespace) || !("children" in namespace)) {
535
+ return true;
536
+ }
537
+
538
+ // A self/children wrapper stores a Completion in `self`. A table or schema
539
+ // literally named "self" stores another namespace there.
540
+ const self = namespace.self;
541
+ const isSelfChildrenWrapper =
542
+ typeof self === "object" &&
543
+ self !== null &&
544
+ !Array.isArray(self) &&
545
+ "label" in self &&
546
+ typeof self.label === "string";
547
+
548
+ return !isSelfChildrenWrapper;
348
549
  }
349
550
 
350
551
  function guessParserDialect(state: EditorState): ParserDialects | null {
@@ -529,3 +730,9 @@ async function validateSQL(
529
730
  }
530
731
  return result;
531
732
  }
733
+
734
+ export const exportedForTesting = {
735
+ createSQLAnalysis,
736
+ CustomSqlParser,
737
+ getSchema,
738
+ };
@@ -1,170 +0,0 @@
1
- var gt=Object.defineProperty;var ft=(t,e,s)=>e in t?gt(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s;var ue=(t,e,s)=>ft(t,typeof e!="symbol"?e+"":e,s);import{s as Re}from"./chunk-LvLJmgfZ.js";import{u as yt}from"./useEvent-D91BmmQi.js";import{t as _t}from"./react-Bj1aDYRI.js";import{E as wt,Zn as y,xt as Te}from"./cells-BF-9DQVg.js";import{D as ce,P as w,R as u,T as F,_ as xt,i as St,k as x}from"./zod-H_cgTO0M.js";import{t as M}from"./compiler-runtime-B3qBwwSJ.js";import{_ as kt}from"./useEventListener-C0195JsF.js";import{c as vt}from"./utils-BWBBpCkT.js";import{t as ae}from"./cn-DYvqRARy.js";import{t as $t}from"./jsx-runtime-Blw4afVn.js";import{a as jt,c as Le,i as Ct,o as Ne,r as At,s as Rt,t as Tt}from"./popover-Bcz1Zikb.js";import{c as Lt,i as Nt,n as Dt,r as It,s as Pt,t as Et}from"./select-BP75_5jJ.js";import{t as De}from"./button-DDGiD1NW.js";import{r as ie}from"./strings--BknHX9C.js";import{t as Ft}from"./createLucideIcon-w-Qo9n0R.js";import{r as qt,t as Bt}from"./x-C-Eq0ag8.js";import{t as Ot}from"./circle-plus-BluydVNx.js";import{t as Mt}from"./database-zap-CKO8g4BU.js";import{c as i,o as Ut,t as Kt,u as Ht}from"./form-CSUFC7OJ.js";import{n as Se}from"./DeferredRequestRegistry-C8EV1PoE.js";import{a as Wt,c as zt,d as Gt,g as Vt,l as Zt,o as Qt,p as Jt,s as Yt,u as Xt}from"./textarea-DivigueA.js";import{r as es}from"./useTheme-Bxv9B31g.js";import{a as ts,c as ss,l as rs,n as os,r as ns,t as cs}from"./dialog-BCVepWLJ.js";import{n as as}from"./ImperativeModal-fY-ZfT0b.js";import{t as be}from"./links-wcQA1Np1.js";import{t as is}from"./useIframeCapabilities-j6fR_dBA.js";import{r as ls}from"./html-to-image-BA1JM9Ro.js";import{o as ds}from"./focus-CR010iV5.js";import{n as ps}from"./useAsyncData-Bg5iAViP.js";import{a as hs,c as ke,i as ge,o as fe,s as ms,t as us}from"./command-Dqxie4gq.js";import{n as bs,t as gs}from"./azure-nN8APleF.js";import{t as fs}from"./request-registry-DHocQ_4I.js";import{n as ys,t as _s}from"./write-secret-modal-3-v-dHVj.js";import{t as ws}from"./github-_JH-0hIO.js";var ve=Ft("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"}]]),$e="env:";function ho(t){return t}function U(t){return typeof t=="string"?t.startsWith($e):!1}function Ie(t){return`${$e}${t}`}function Pe(t){return t.replace($e,"")}var xs=M(),P=Re(_t(),1),n=Re($t(),1);function Ss(t,e){if(!e)return{recommended:[],other:[...t]};let s;try{s=new RegExp(e,"i")}catch{return{recommended:[],other:[...t]}}let o=[],r=[];for(let l of t)s.test(l)?o.push(l):r.push(l);return{recommended:o,other:r}}const ks=t=>{let e=(0,xs.c)(67),{value:s,onChange:o,placeholder:r,secretsOnly:l,recommendedKeys:a,otherKeys:c,onCreateSecret:d,className:p}=t,h=l===void 0?!1:l,[g,m]=(0,P.useState)(!1),[b,f]=(0,P.useState)(""),_;e[0]===b?_=e[1]:(_=b.trim(),e[0]=b,e[1]=_);let S=_,k=!h&&S.length>0&&S!==s,v;e:{if(!s){v=null;break e}if(U(s)){let $;e[2]===s?$=e[3]:($=s,e[2]=s,e[3]=$),v=$;break e}v=s}let R=v,C;e[4]===o?C=e[5]:(C=$=>{o(Ie($)),m(!1),f("")},e[4]=o,e[5]=C);let A=C,T;e[6]===o?T=e[7]:(T=$=>{o($),m(!1),f("")},e[6]=o,e[7]=T);let L=T,I;e[8]===o?I=e[9]:(I=()=>{o(""),f(""),m(!1)},e[8]=o,e[9]=I);let ne=I,K;e[10]===p?K=e[11]:(K=ae("flex w-full min-w-48 mb-1 items-center gap-1",p),e[10]=p,e[11]=K);let de;e[12]===Symbol.for("react.memo_cache_sentinel")?(de=$=>{m($),$||f("")},e[12]=de):de=e[12];let H;e[13]===s?H=e[14]:(H=ae("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",U(s)&&"bg-accent"),e[13]=s,e[14]=H);let W;e[15]!==R||e[16]!==r||e[17]!==s?(W=(0,n.jsx)("span",{className:"truncate flex-1 min-w-0 text-left flex items-center gap-1.5",children:R?(0,n.jsxs)(n.Fragment,{children:[U(s)&&(0,n.jsx)(Se,{className:"h-3 w-3 shrink-0 opacity-70"}),(0,n.jsx)("span",{className:"truncate",children:R})]}):(0,n.jsx)("span",{className:"text-muted-foreground",children:r})}),e[15]=R,e[16]=r,e[17]=s,e[18]=W):W=e[18];let pe;e[19]===Symbol.for("react.memo_cache_sentinel")?(pe=(0,n.jsx)(qt,{className:"ml-1 h-4 w-4 opacity-50 shrink-0"}),e[19]=pe):pe=e[19];let z;e[20]!==g||e[21]!==W||e[22]!==H?(z=(0,n.jsx)(Ct,{asChild:!0,children:(0,n.jsxs)("button",{type:"button",className:H,"aria-expanded":g,children:[W,pe]})}),e[20]=g,e[21]=W,e[22]=H,e[23]=z):z=e[23];let we=h?"Search secrets...":"Type a value or search secrets...",G;e[24]!==b||e[25]!==we?(G=(0,n.jsx)(hs,{placeholder:we,rootClassName:"px-1 h-8",autoFocus:!0,value:b,onValueChange:f}),e[24]=b,e[25]=we,e[26]=G):G=e[26];let V;e[27]!==L||e[28]!==k||e[29]!==S?(V=k&&(0,n.jsx)(ge,{children:(0,n.jsxs)(fe,{value:`use custom value ${S}`,onSelect:()=>L(S),children:['Use "',S,'"']})}),e[27]=L,e[28]=k,e[29]=S,e[30]=V):V=e[30];let Z;e[31]===k?Z=e[32]:(Z=k&&(0,n.jsx)(ke,{}),e[31]=k,e[32]=Z);let xe=`create new secret ${S}`,Q;e[33]!==d||e[34]!==S?(Q=()=>{let $=S||void 0;m(!1),f(""),d($)},e[33]=d,e[34]=S,e[35]=Q):Q=e[35];let he;e[36]===Symbol.for("react.memo_cache_sentinel")?(he=(0,n.jsx)(Ot,{className:"mr-2 h-3.5 w-3.5"}),e[36]=he):he=e[36];let J;e[37]!==xe||e[38]!==Q?(J=(0,n.jsx)(ge,{className:"mt-0",children:(0,n.jsxs)(fe,{value:xe,onSelect:Q,children:[he,"Create a new secret"]})}),e[37]=xe,e[38]=Q,e[39]=J):J=e[39];let Y;e[40]!==a||e[41]!==A?(Y=a.length>0&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(ke,{className:"mt-0"}),(0,n.jsx)(ge,{heading:"Recommended",children:a.map($=>(0,n.jsxs)(fe,{value:$,onSelect:()=>A($),children:[(0,n.jsx)(Se,{className:"mr-2 h-3 w-3 opacity-70"}),$]},$))})]}),e[40]=a,e[41]=A,e[42]=Y):Y=e[42];let X;e[43]!==c||e[44]!==a.length||e[45]!==A?(X=c.length>0&&(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(ke,{className:"mt-0"}),(0,n.jsx)(ge,{heading:a.length>0?"Other":void 0,children:c.map($=>(0,n.jsxs)(fe,{value:$,onSelect:()=>A($),children:[(0,n.jsx)(Se,{className:"mr-2 h-3 w-3 opacity-70"}),$]},$))})]}),e[43]=c,e[44]=a.length,e[45]=A,e[46]=X):X=e[46];let ee;e[47]!==V||e[48]!==Z||e[49]!==J||e[50]!==Y||e[51]!==X?(ee=(0,n.jsxs)(ms,{className:"max-h-60 overscroll-contain",children:[V,Z,J,Y,X]}),e[47]=V,e[48]=Z,e[49]=J,e[50]=Y,e[51]=X,e[52]=ee):ee=e[52];let te;e[53]!==G||e[54]!==ee?(te=(0,n.jsx)(At,{className:"w-(--radix-popover-trigger-width) p-0",align:"start",children:(0,n.jsxs)(us,{children:[G,ee]})}),e[53]=G,e[54]=ee,e[55]=te):te=e[55];let se;e[56]!==g||e[57]!==z||e[58]!==te?(se=(0,n.jsxs)(Tt,{modal:!0,open:g,onOpenChange:de,children:[z,te]}),e[56]=g,e[57]=z,e[58]=te,e[59]=se):se=e[59];let re;e[60]!==ne||e[61]!==s?(re=s&&(0,n.jsx)("button",{type:"button","aria-label":"Clear",className:ae("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:ne,children:(0,n.jsx)(Bt,{className:"h-3.5 w-3.5"})}),e[60]=ne,e[61]=s,e[62]=re):re=e[62];let me;return e[63]!==se||e[64]!==re||e[65]!==K?(me=(0,n.jsxs)("div",{className:K,children:[se,re]}),e[63]=se,e[64]=re,e[65]=K,e[66]=me):me=e[66],me};var vs=M(),Ee=(0,P.createContext)({providerNames:[],secretKeys:[],loading:!1,error:void 0,refreshSecrets:kt.NOOP});const $s=()=>(0,P.use)(Ee),js=t=>{let e=(0,vs.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:a,refetch:c}=ps(Ls,o);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 h;e[5]!==a||e[6]!==l||e[7]!==c||e[8]!==d||e[9]!==p?(h={secretKeys:d,providerNames:p,loading:l,error:a,refreshSecrets:c},e[5]=a,e[6]=l,e[7]=c,e[8]=d,e[9]=p,e[10]=h):h=e[10];let g=h,m;return e[11]!==s||e[12]!==g?(m=(0,n.jsx)(Ee,{value:g,children:s}),e[11]=s,e[12]=g,e[13]=m):m=e[13],m},Cs={isMatch:t=>{if(t instanceof xt){let{optionRegex:e}=i.parse(t.description||"");return!!e}return!1},Component:({schema:t,form:e,path:s})=>{let{secretKeys:o,providerNames:r,refreshSecrets:l}=$s(),{openModal:a,closeModal:c}=as(),{label:d,description:p,placeholder:h,optionRegex:g="",inputType:m}=i.parse(t.description||""),b=m==="password",{recommended:f,other:_}=Ss(o,g);return(0,n.jsx)(zt,{control:e.control,name:s,render:({field:S})=>(0,n.jsxs)(Zt,{children:[(0,n.jsx)(Xt,{children:d}),(0,n.jsx)(Qt,{children:p}),(0,n.jsx)(Wt,{children:(0,n.jsx)(ks,{value:S.value?String(S.value):"",onChange:S.onChange,placeholder:h,secretsOnly:b,recommendedKeys:f,otherKeys:_,onCreateSecret:k=>{a((0,n.jsx)(_s,{providerNames:r,initialValue:k,onSuccess:v=>{l(),S.onChange(Ie(v)),c()},onClose:c}))}})}),(0,n.jsx)(Gt,{})]})})}};function As(t){return t.provider!=="env"}function Rs(t){return t.name}function Ts(t){return t.keys}async function Ls(){let t=await fs.request({}),e=ys(t.secrets).filter(As).map(Rs);return{secretKeys:t.secrets.flatMap(Ts).toSorted(),providerNames:e}}var le=M(),Ns=[Cs];const je=t=>{let e=(0,le.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},Ce=t=>{let e=(0,le.c)(9),{name:s,color:o,icon:r,onSelect:l}=t,a;e[0]===o?a=e[1]:(a={backgroundColor:o},e[0]=o,e[1]=a);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]!==a||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:a,onClick:l,children:[r,c]}),e[4]=r,e[5]=l,e[6]=a,e[7]=c,e[8]=d):d=e[8],d},Ds=t=>{let e=(0,le.c)(25),{onBack:s,isValid:o,libraries:r,preferredLibrary:l,onLibraryChange:a,displayNames:c,libraryLabel:d}=t,p=d===void 0?"Preferred library":d,h;e[0]===s?h=e[1]:(h=(0,n.jsx)(De,{type:"button",variant:"outline",onClick:s,children:"Back"}),e[0]=s,e[1]=h);let g=!o,m;e[2]===g?m=e[3]:(m=(0,n.jsx)(De,{type:"submit",disabled:g,children:"Add"}),e[2]=g,e[3]=m);let b;e[4]!==h||e[5]!==m?(b=(0,n.jsxs)("div",{className:"flex gap-2",children:[h,m]}),e[4]=h,e[5]=m,e[6]=b):b=e[6];let f;e[7]===Symbol.for("react.memo_cache_sentinel")?(f=(0,n.jsx)(Pt,{children:(0,n.jsx)(Lt,{placeholder:"Select a library"})}),e[7]=f):f=e[7];let _;e[8]===p?_=e[9]:(_=(0,n.jsxs)("div",{className:"flex flex-col gap-1 items-end",children:[f,(0,n.jsx)("span",{className:"text-xs text-muted-foreground",children:p})]}),e[8]=p,e[9]=_);let S;if(e[10]!==c||e[11]!==r){let C;e[13]===c?C=e[14]:(C=A=>(0,n.jsx)(Nt,{value:A,children:c[A]??A},A),e[13]=c,e[14]=C),S=r.map(C),e[10]=c,e[11]=r,e[12]=S}else S=e[12];let k;e[15]===S?k=e[16]:(k=(0,n.jsx)(Dt,{children:(0,n.jsx)(It,{children:S})}),e[15]=S,e[16]=k);let v;e[17]!==a||e[18]!==l||e[19]!==_||e[20]!==k?(v=(0,n.jsx)("div",{children:(0,n.jsxs)(Et,{value:l,onValueChange:a,children:[_,k]})}),e[17]=a,e[18]=l,e[19]=_,e[20]=k,e[21]=v):v=e[21];let R;return e[22]!==v||e[23]!==b?(R=(0,n.jsxs)("div",{className:"flex gap-2 justify-between",children:[b,v]}),e[22]=v,e[23]=b,e[24]=R):R=e[24],R};function Is(){let t=(0,le.c)(4),{createNewCell:e}=wt(),s=ds(),o=yt(vt),r;return t[0]!==o||t[1]!==e||t[2]!==s?(r=l=>{/\bmo\./.test(l)&&ls({autoInstantiate:o,createNewCell:e,fromCellId:s}),e({code:l,before:!1,cellId:s??"__end__",skipIfCodeExists:!0})},t[0]=o,t[1]=e,t[2]=s,t[3]=r):r=t[3],r}const Fe=t=>{let e=(0,le.c)(30),{schema:s,libraries:o,preferredLibrary:r,displayNames:l,libraryLabel:a,generateCode:c,onSubmit:d,onBack:p}=t,h;e[0]===s?h=e[1]:(h=Ut(s),e[0]=s,e[1]=h);let g=h,m;e[2]===s?m=e[3]:(m=Jt(s),e[2]=s,e[3]=m);let b;e[4]!==g||e[5]!==m?(b={defaultValues:g,resolver:m,reValidateMode:"onChange"},e[4]=g,e[5]=m,e[6]=b):b=e[6];let f=Vt(b),[_,S]=P.useState(r),k=Is(),v;e[7]!==c||e[8]!==k||e[9]!==d||e[10]!==_?(v=ne=>{k(c(ne,_)),d()},e[7]=c,e[8]=k,e[9]=d,e[10]=_,e[11]=v):v=e[11];let R=v,C;e[12]!==f||e[13]!==R?(C=f.handleSubmit(R),e[12]=f,e[13]=R,e[14]=C):C=e[14];let A;e[15]===Symbol.for("react.memo_cache_sentinel")?(A=(0,n.jsx)(Yt,{}),e[15]=A):A=e[15];let T;e[16]!==f||e[17]!==s?(T=(0,n.jsx)(js,{children:(0,n.jsx)(Kt,{schema:s,form:f,renderers:Ns,children:A})}),e[16]=f,e[17]=s,e[18]=T):T=e[18];let L;e[19]!==l||e[20]!==f.formState.isValid||e[21]!==o||e[22]!==a||e[23]!==p||e[24]!==_?(L=(0,n.jsx)(Ds,{onBack:p,isValid:f.formState.isValid,libraries:o,preferredLibrary:_,onLibraryChange:S,displayNames:l,libraryLabel:a}),e[19]=l,e[20]=f.formState.isValid,e[21]=o,e[22]=a,e[23]=p,e[24]=_,e[25]=L):L=e[25];let I;return e[26]!==C||e[27]!==T||e[28]!==L?(I=(0,n.jsxs)("form",{onSubmit:C,className:"space-y-4",children:[T,L]}),e[26]=C,e[27]=T,e[28]=L,e[29]=I):I=e[29],I};function q(){return u().optional().describe(i.of({label:"Password",inputType:"password",optionRegex:"(password|passwd|pgpassword|db.?pass(word)?)"}))}function ye(t,e){let s=u();return s=e?s.nonempty():s.optional(),s=s.describe(i.of({label:t||"Token",inputType:"password",optionRegex:"(token|api.?key|access.?token|auth.?token|(^|_)pat(_|$))"})),s}function _e(){return u().optional().describe(i.of({label:"Warehouse Name",optionRegex:"(warehouse|snowflake.?warehouse)"}))}function Ae(t,e){let s=u();return s=e?s.nonempty():s.optional(),s.describe(i.of({label:t||"URI",optionRegex:"(uri|url|connection.?string|database.?url|jdbc)"}))}function E(t){return u().nonempty().describe(i.of({label:t||"Host",optionRegex:"^(?!.*(kubernetes|gpg)).*(host(name)?|pghost|db.?host|database.?host|mysql.?host|postgres.?host|server.?host)"}))}function N(){return u().describe(i.of({label:"Database",optionRegex:"(database|db.?name|pgdatabase|^DB$|^DATABASE$)"}))}function Ps(){return u().describe(i.of({label:"Schema",optionRegex:"(^SCHEMA$|db.?schema|postgres.?schema|pg.?schema|_SCHEMA$)"}))}function D(){return u().nonempty().describe(i.of({label:"Username",optionRegex:"(username|pguser|db.?user|^USER$|_USER$)"}))}function B(t){let e=St().describe(i.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 qe(){return F().default(!1).describe(i.of({label:"Read Only"}))}const Be=w({type:x("postgres"),host:E(),port:B(5432).optional(),database:N(),username:D(),password:q(),ssl:F().default(!1).describe(i.of({label:"Use SSL"}))}).describe(i.of({direction:"two-columns"})),Oe=w({type:x("mysql"),host:E(),port:B(3306),database:N(),username:D(),password:q(),ssl:F().default(!1).describe(i.of({label:"Use SSL"}))}).describe(i.of({direction:"two-columns"})),Me=w({type:x("sqlite"),database:N().describe(i.of({label:"Database Path"}))}).describe(i.of({direction:"two-columns"})),Ue=w({type:x("duckdb"),database:N().describe(i.of({label:"Database Path"})),read_only:qe()}).describe(i.of({direction:"two-columns"})),Ke=w({type:x("motherduck"),database:N().default("my_db").describe(i.of({label:"Database Name"})),token:ye()}).describe(i.of({direction:"two-columns"})),He=w({type:x("snowflake"),account:u().nonempty().describe(i.of({label:"Account",optionRegex:"(snowflake.?account|^SNOWFLAKE_ACCOUNT$|account.?id)"})),warehouse:u().optional().describe(i.of({label:"Warehouse",optionRegex:"(snowflake.?warehouse|warehouse)"})),database:N(),schema:u().optional().describe(i.of({label:"Schema",optionRegex:"(snowflake.?schema|^SCHEMA$|_SCHEMA$)"})),role:u().optional().describe(i.of({label:"Role"})),authType:ce("type",[w({type:x("Password"),username:D(),password:q(),enable_mfa:F().default(!1).describe(i.of({label:"Enable MFA (Duo Push)"}))}),w({type:x("SSO (Browser)"),username:D()}),w({type:x("Key Pair"),username:D(),private_key_path:u().nonempty().describe(i.of({label:"Private Key Path",placeholder:"/path/to/rsa_key.p8"})),private_key_passphrase:u().optional().describe(i.of({label:"Private Key Passphrase",inputType:"password",optionRegex:"(passphrase|private.?key.?passphrase|key.?passphrase)"}))}),w({type:x("OAuth / PAT"),token:ye("Token",!0)})]).default({type:"Password",username:"username",enable_mfa:!1}).describe(i.of({special:"tabs"}))}).describe(i.of({direction:"two-columns"})),We=w({type:x("bigquery"),project:u().nonempty().describe(i.of({label:"Project ID",optionRegex:"(bigquery.?project|gcp.?project|google.?cloud.?project|project.?id)"})),dataset:u().nonempty().describe(i.of({label:"Dataset",optionRegex:"(bigquery.?dataset|dataset)"})),credentials_json:u().describe(i.of({label:"Credentials JSON",inputType:"textarea"}))}).describe(i.of({direction:"two-columns"})),ze=w({type:x("clickhouse_connect"),host:E(),port:B(8123).optional(),username:D(),password:q(),secure:F().default(!1).describe(i.of({label:"Use HTTPs"})),proxy_path:u().optional().describe(i.of({label:"Proxy Path",placeholder:"/clickhouse"}))}).describe(i.of({direction:"two-columns"})),Ge=w({type:x("timeplus"),host:E().default("localhost"),port:B(8123).optional(),username:D().default("default"),password:q().default("")}).describe(i.of({direction:"two-columns"})),Ve=w({type:x("chdb"),database:N().describe(i.of({label:"Database Path"})),read_only:qe()}).describe(i.of({direction:"two-columns"})),Ze=w({type:x("trino"),host:E(),port:B(8080),database:N(),schema:Ps().optional(),username:D(),password:q(),async_support:F().default(!1).describe(i.of({label:"Async Support"}))}).describe(i.of({direction:"two-columns"})),Qe=w({type:x("iceberg"),name:u().describe(i.of({label:"Catalog Name"})),catalog:ce("type",[w({type:x("REST"),warehouse:_e(),uri:u().optional().describe(i.of({label:"URI",placeholder:"https://",optionRegex:"(uri|url|connection.?string|database.?url|jdbc)"})),token:ye()}),w({type:x("SQL"),warehouse:_e(),uri:u().optional().describe(i.of({label:"URI",placeholder:"jdbc:iceberg://host:port/database",optionRegex:"(uri|url|connection.?string|database.?url|jdbc)"}))}),w({type:x("Hive"),warehouse:_e(),uri:Ae()}),w({type:x("Glue"),warehouse:_e(),uri:Ae()}),w({type:x("DynamoDB"),"dynamodb.profile-name":u().optional().describe(i.of({label:"Profile Name"})),"dynamodb.region":u().optional().describe(i.of({label:"Region"})),"dynamodb.access-key-id":u().optional().describe(i.of({label:"Access Key ID",inputType:"password",optionRegex:"(access.?key.?id|aws.?access.?key)"})),"dynamodb.secret-access-key":u().optional().describe(i.of({label:"Secret Access Key",inputType:"password",optionRegex:"(secret.?access.?key|aws.?secret)"})),"dynamodb.session-token":u().optional().describe(i.of({label:"Session Token",inputType:"password",optionRegex:"(session.?token|aws.?session)"}))})]).default({type:"REST",token:void 0}).describe(i.of({special:"tabs"}))}),Je=w({type:x("datafusion"),sessionContext:F().optional().describe(i.of({label:"Use Session Context"}))}),Ye=w({type:x("pyspark"),host:E().optional(),port:B().optional()}),Xe=w({type:x("redshift"),host:E(),port:B(5439),connectionType:ce("type",[w({type:x("IAM credentials"),region:u().describe(i.of({label:"Region"})),aws_access_key_id:u().nonempty().describe(i.of({label:"AWS Access Key ID",inputType:"password",optionRegex:"(access.?key.?id|aws.?access.?key)"})),aws_secret_access_key:u().nonempty().describe(i.of({label:"AWS Secret Access Key",inputType:"password",optionRegex:"(secret.?access.?key|aws.?secret)"})),aws_session_token:u().optional().describe(i.of({label:"AWS Session Token",inputType:"password",optionRegex:"(session.?token|aws.?session)"}))}),w({type:x("DB credentials"),user:D(),password:q()})]).default({type:"IAM credentials",aws_access_key_id:"",aws_secret_access_key:"",region:""}),database:N()}).describe(i.of({direction:"two-columns"})),et=w({type:x("databricks"),access_token:ye("Access Token",!0),server_hostname:E("Server Hostname"),http_path:Ae("HTTP Path",!0),catalog:u().optional().describe(i.of({label:"Catalog"})),schema:u().optional().describe(i.of({label:"Schema"}))}).describe(i.of({direction:"two-columns"})),tt=w({type:x("supabase"),host:E(),port:B(5432).optional(),database:N(),username:D(),password:q(),disable_client_pooling:F().default(!1).describe(i.of({label:"Disable Client-Side Pooling"}))}).describe(i.of({direction:"two-columns"})),Es=ce("type",[Be,Oe,Me,Ue,Ke,He,We,ze,Ge,Ve,Ze,Qe,Je,Ye,Xe,et,tt]),st={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}},Fs=t=>`_${t}`,qs=class{constructor(){ue(this,"secrets",{})}get imports(){return Object.keys(this.secrets).length===0?new Set:new Set(["import os"])}print(t,e,s){if(t=Fs(t),U(e)){let o=Pe(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"?oe(e):e?`"${e}"`:""}printInFString(t,e,s){if(e===void 0)return"";if(typeof e=="number")return`${e}`;if(typeof e=="boolean")return oe(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 U(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
- `)}},Bs=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
- `)}},Os=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
- `)}},Ms=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
- `)}},Us=class extends j{generateImports(){return["from snowflake.sqlalchemy import URL"]}generateConnectionCode(){let{authType:t,account:e,database:s,warehouse:o,schema:r,role:l}=this.connection,a={account:this.secrets.print("account",e),database:this.secrets.print("database",s),warehouse:o?this.secrets.print("warehouse",o):void 0,schema:r?this.secrets.print("schema",r):void 0,role:l?this.secrets.print("role",l):void 0};switch(t.type){case"Password":{let c=this.secrets.printPassword(t.password,"SNOWFLAKE_PASSWORD",!1),d={...a,user:this.secrets.print("user",t.username),password:c};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 c={...a,user:this.secrets.print("user",t.username),authenticator:'"externalbrowser"'};return y(`
25
- engine = ${this.orm}.create_engine(
26
- URL(
27
- ${O(c,d=>` ${d}`)},
28
- )
29
- )
30
- `)}case"Key Pair":{let c={...a,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,h=[' "authenticator": "SNOWFLAKE_JWT"',` "private_key_file": ${d}`];return p&&h.push(` "private_key_file_pwd": ${p}`),y(`
31
- engine = ${this.orm}.create_engine(
32
- URL(
33
- ${O(c,g=>` ${g}`)},
34
- ),
35
- connect_args={
36
- ${h.join(`,
37
- `)},
38
- },
39
- )
40
- `)}case"OAuth / PAT":{let c=this.secrets.printPassword(t.token,"SNOWFLAKE_TOKEN",!1),d={...a,authenticator:'"oauth"',token:c};return y(`
41
- engine = ${this.orm}.create_engine(
42
- URL(
43
- ${O(d,p=>` ${p}`)},
44
- )
45
- )
46
- `)}default:ie(t)}}},Ks=class extends j{generateImports(){return["import json"]}generateConnectionCode(){let t=this.secrets.printInFString("project",this.connection.project),e=this.secrets.printInFString("dataset",this.connection.dataset);return y(`
47
- credentials = json.loads("""${this.connection.credentials_json}""")
48
- engine = ${this.orm}.create_engine(f"bigquery://${t}/${e}", credentials_info=credentials)
49
- `)}},Hs=class extends j{generateImports(){return[]}generateConnectionCode(){return y(`
50
- DATABASE_URL = "${this.secrets.printInFString("database",this.connection.database||":memory:")}"
51
- engine = ${this.orm}.connect(DATABASE_URL, read_only=${oe(this.connection.read_only)})
52
- `)}},Ws=class extends j{generateImports(){return[]}generateConnectionCode(){let t=this.secrets.printInFString("database",this.connection.database);return this.connection.token?y(`
53
- conn = duckdb.connect("md:${t}", config={"motherduck_token": ${this.secrets.printPassword(this.connection.token,"MOTHERDUCK_TOKEN",!1)}})
54
- `):y(`
55
- conn = duckdb.connect("md:${t}")
56
- `)}},zs=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(`
57
- engine = ${this.orm}.get_client(
58
- ${O(e,s=>` ${s}`)},
59
- )
60
- `)}},Gs=class extends j{generateImports(){return[]}generateConnectionCode(){let t=this.secrets.printPassword(this.connection.password,"TIMEPLUS_PASSWORD",!0);return y(`
61
- 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)}"
62
- engine = ${this.orm}.create_engine(DATABASE_URL)
63
- `)}},Vs=class extends j{generateImports(){return["import chdb"]}generateConnectionCode(){let t=this.secrets.print("database",this.connection.database)||'""';return y(`
64
- engine = ${this.orm}.connect(${t}, read_only=${oe(this.connection.read_only)})
65
- `)}},Zs=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),o=this.secrets.printInFString("host",this.connection.host),r=this.secrets.printInFString("port",this.connection.port),l=this.secrets.printInFString("database",this.connection.database),a=this.secrets.printPassword(this.connection.password,"TRINO_PASSWORD",!0);return y(`
66
- engine = ${this.orm}.create_engine(f"${t}://${s}:${a}@${o}:${r}/${l}${e}")
67
- `)}},Qs=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:ie(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))U(r)?t[o]=this.secrets.print(o,r):typeof r=="string"&&(t[o]=`"${r}"`);let e=or(t,o=>` ${o}`),s=`"${this.connection.name}"`;switch(this.connection.catalog.type){case"REST":return y(`
68
- catalog = RestCatalog(
69
- ${s},
70
- **{
71
- ${e}
72
- },
73
- )
74
- `);case"SQL":return y(`
75
- catalog = SqlCatalog(
76
- ${s},
77
- **{
78
- ${e}
79
- },
80
- )
81
- `);case"Hive":return y(`
82
- catalog = HiveCatalog(
83
- ${s},
84
- **{
85
- ${e}
86
- },
87
- )
88
- `);case"Glue":return y(`
89
- catalog = GlueCatalog(
90
- ${s},
91
- **{
92
- ${e}
93
- },
94
- )
95
- `);case"DynamoDB":return y(`
96
- catalog = DynamoDBCatalog(
97
- ${s},
98
- **{
99
- ${e}
100
- },
101
- )
102
- `);default:ie(this.connection.catalog)}}},Js=class extends j{generateImports(){return["from datafusion import SessionContext"]}generateConnectionCode(){return this.connection.sessionContext?y(`
103
- ctx = SessionContext()
104
- # Sample table
105
- _ = ctx.from_pydict({"a": [1, 2, 3]}, "my_table")
106
-
107
- con = ibis.datafusion.connect(ctx)
108
- `):y(`
109
- con = ibis.datafusion.connect()
110
- `)}},Ys=class extends j{generateImports(){return["from pyspark.sql import SparkSession"]}generateConnectionCode(){return this.connection.host||this.connection.port?y(`
111
- session = SparkSession.builder.remote(f"sc://${this.secrets.printInFString("host",this.connection.host)}:${this.secrets.printInFString("port",this.connection.port)}").getOrCreate()
112
- con = ibis.pyspark.connect(session)
113
- `):y(`
114
- con = ibis.pyspark.connect()
115
- `)}},Xs=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 l=this.secrets.print("aws_access_key_id",this.connection.connectionType.aws_access_key_id),a=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 y(`
116
- con = redshift_connector.connect(
117
- ${O({iam:!0,host:t,port:e,region:`"${this.connection.connectionType.region}"`,database:s,access_key_id:l,secret_access_key:a,...c&&{session_token:c}},d=>` ${d}`)},
118
- )
119
- `)}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 y(`
120
- con = redshift_connector.connect(
121
- ${O({host:t,port:e,database:s,...o&&{user:o},...r&&{password:r}},l=>` ${l}`)},
122
- )
123
- `)}},er=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"),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,a=`databricks://token:${e}@${s}?http_path=${o}`;return r&&(a+=`&catalog=${r}`),l&&(a+=`&schema=${l}`),this.orm==="ibis"?y(`
124
- engine = ibis.databricks.connect(
125
- server_hostname=${s},
126
- http_path=${o},${r?`
127
- catalog=${r},`:""}${l?`
128
- schema=${l},`:""}
129
- access_token=${e}
130
- )
131
- `):y(`
132
- DATABASE_URL = f"${a}"
133
- engine = ${this.orm}.create_engine(DATABASE_URL)
134
- `)}},tr=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),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 y(`
135
- DATABASE_URL = f"postgresql+psycopg2://${e}:${t}@${s}:${o}/${r}?sslmode=require"
136
- engine = ${this.orm}.create_engine(DATABASE_URL${l})
137
- `)}},sr=class{constructor(){ue(this,"secrets",new qs)}createGenerator(t,e){switch(t.type){case"postgres":return new Bs(t,e,this.secrets);case"mysql":return new Os(t,e,this.secrets);case"sqlite":return new Ms(t,e,this.secrets);case"snowflake":return new Us(t,e,this.secrets);case"bigquery":return new Ks(t,e,this.secrets);case"duckdb":return new Hs(t,e,this.secrets);case"motherduck":return new Ws(t,e,this.secrets);case"clickhouse_connect":return new zs(t,e,this.secrets);case"timeplus":return new Gs(t,e,this.secrets);case"chdb":return new Vs(t,e,this.secrets);case"trino":return new Zs(t,e,this.secrets);case"iceberg":return new Qs(t,e,this.secrets);case"datafusion":return new Js(t,e,this.secrets);case"pyspark":return new Ys(t,e,this.secrets);case"redshift":return new Xs(t,e,this.secrets);case"databricks":return new er(t,e,this.secrets);case"supabase":return new tr(t,e,this.secrets);default:ie(t)}}};function rr(t,e){if(!(e in st))throw Error(`Unsupported library: ${e}`);Es.parse(t);let s=new sr,o=s.createGenerator(t,e),r=o.generateConnectionCode(),l=s.secrets,a=[...new Set([...l.imports,...o.imports])].toSorted();a.push("");let c=l.formatSecrets();return c&&a.push(c),a.push(r.trim()),a.join(`
138
- `)}function oe(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,o])=>e(typeof o=="boolean"?`${s}=${oe(o)}`:`${s}=${o}`)).join(`,
139
- `)}function or(t,e){return Object.entries(t).filter(([,s])=>s!=null&&s!=="").map(([s,o])=>{let r=`"${s}"`;return e(typeof o=="boolean"?`${r}: ${oe(o)}`:`${r}: ${o}`)}).join(`,
140
- `)}var rt=M(),ot=[{name:"PostgreSQL",schema:Be,color:"#336791",logo:"postgres",connectionLibraries:{libraries:["sqlalchemy","sqlmodel"],preferred:"sqlalchemy"}},{name:"MySQL",schema:Oe,color:"#00758F",logo:"mysql",connectionLibraries:{libraries:["sqlalchemy","sqlmodel"],preferred:"sqlalchemy"}},{name:"SQLite",schema:Me,color:"#003B57",logo:"sqlite",connectionLibraries:{libraries:["sqlalchemy","sqlmodel"],preferred:"sqlalchemy"}},{name:"DuckDB",schema:Ue,color:"#FFD700",logo:"duckdb",connectionLibraries:{libraries:["duckdb"],preferred:"duckdb"}},{name:"MotherDuck",schema:Ke,color:"#ff9538",logo:"motherduck",connectionLibraries:{libraries:["duckdb"],preferred:"duckdb"}},{name:"Snowflake",schema:He,color:"#29B5E8",logo:"snowflake",connectionLibraries:{libraries:["sqlalchemy","sqlmodel"],preferred:"sqlalchemy"}},{name:"ClickHouse",schema:ze,color:"#2C2C1D",logo:"clickhouse",connectionLibraries:{libraries:["clickhouse_connect"],preferred:"clickhouse_connect"}},{name:"Timeplus",schema:Ge,color:"#B83280",logo:"timeplus",connectionLibraries:{libraries:["sqlalchemy","sqlmodel"],preferred:"sqlalchemy"}},{name:"BigQuery",schema:We,color:"#4285F4",logo:"bigquery",connectionLibraries:{libraries:["sqlalchemy","sqlmodel"],preferred:"sqlalchemy"}},{name:"ClickHouse Embedded",schema:Ve,color:"#f2b611",logo:"clickhouse",connectionLibraries:{libraries:["chdb"],preferred:"chdb"}},{name:"Trino",schema:Ze,color:"#d466b6",logo:"trino",connectionLibraries:{libraries:["sqlalchemy","sqlmodel"],preferred:"sqlalchemy"}},{name:"DataFusion",schema:Je,color:"#202A37",logo:"datafusion",connectionLibraries:{libraries:["ibis"],preferred:"ibis"}},{name:"PySpark",schema:Ye,color:"#1C5162",logo:"pyspark",connectionLibraries:{libraries:["ibis"],preferred:"ibis"}},{name:"Redshift",schema:Xe,color:"#522BAE",logo:"redshift",connectionLibraries:{libraries:["redshift"],preferred:"redshift"}},{name:"Databricks",schema:et,color:"#c41e0c",logo:"databricks",connectionLibraries:{libraries:["sqlalchemy","sqlmodel","ibis"],preferred:"sqlalchemy"}},{name:"Supabase",schema:tt,color:"#238F5F",logo:"supabase",connectionLibraries:{libraries:["sqlalchemy","sqlmodel"],preferred:"sqlalchemy"}}],nt=[{name:"Iceberg",schema:Qe,color:"#000000",logo:"iceberg",connectionLibraries:{libraries:["pyiceberg"],preferred:"pyiceberg"}}],nr=[...ot,...nt],cr=t=>{let e=(0,rt.c)(12),{onSelect:s}=t,o;e[0]===s?o=e[1]:(o=ot.map(p=>{let{name:h,schema:g,color:m,logo:b}=p;return(0,n.jsx)(Ce,{name:h,color:m,icon:(0,n.jsx)(Te,{name:b,className:"w-8 h-8 text-white brightness-0 invert dark:invert"}),onSelect:()=>s(g)},h)}),e[0]=s,e[1]=o);let r;e[2]===o?r=e[3]:(r=(0,n.jsx)(je,{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 a;e[5]===s?a=e[6]:(a=nt.map(p=>{let{name:h,schema:g,color:m,logo:b}=p;return(0,n.jsx)(Ce,{name:h,color:m,icon:(0,n.jsx)(Te,{name:b,className:"w-8 h-8 text-white brightness-0 invert dark:invert"}),onSelect:()=>s(g)},h)}),e[5]=s,e[6]=a);let c;e[7]===a?c=e[8]:(c=(0,n.jsx)(je,{children:a}),e[7]=a,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 ar=t=>{let e=(0,rt.c)(13),{onSubmit:s,header:o}=t,[r,l]=(0,P.useState)(null);if(!r){let m;e[0]===Symbol.for("react.memo_cache_sentinel")?(m=(0,n.jsx)("div",{children:(0,n.jsx)(cr,{onSelect:l})}),e[0]=m):m=e[0];let b;return e[1]===o?b=e[2]:(b=(0,n.jsxs)(n.Fragment,{children:[o,m]}),e[1]=o,e[2]=b),b}let a;e[3]===r?a=e[4]:(a=nr.find(m=>m.schema===r),e[3]=r,e[4]=a);let c=a==null?void 0:a.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 p=(c==null?void 0:c.preferred)??"sqlalchemy",h;e[7]===Symbol.for("react.memo_cache_sentinel")?(h=()=>l(null),e[7]=h):h=e[7];let g;return e[8]!==s||e[9]!==r||e[10]!==d||e[11]!==p?(g=(0,n.jsx)(Fe,{schema:r,libraries:d,preferredLibrary:p,displayNames:st,libraryLabel:"Preferred connection library",generateCode:ir,onSubmit:s,onBack:h}),e[8]=s,e[9]=r,e[10]=d,e[11]=p,e[12]=g):g=e[12],g};function ir(t,e){return rr(t,e)}var lr="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",dr="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",pr="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",hr="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",mr="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",ur="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",br=M(),gr={s3:{src:bs,dark:lr},coreweave:{src:pr,dark:hr},cloudflare:{src:dr},azure:{src:gs},gcs:{src:mr},http:Ht,file:ve,"in-memory":Mt,gdrive:{src:ur},github:ws};const ct=t=>{let e=(0,br.c)(11),{protocol:s,forceDark:o,className:r}=t,{theme:l}=es(),a=gr[s.toLowerCase()]??ve;if("src"in a){let h=a.src;a.dark&&(o||l==="dark")&&(h=a.dark);let g=h,m;e[0]===r?m=e[1]:(m=ae("h-3.5 w-3.5",r),e[0]=r,e[1]=m);let b;return e[2]!==s||e[3]!==h||e[4]!==m?(b=(0,n.jsx)("img",{src:g,alt:s,className:m}),e[2]=s,e[3]=h,e[4]=m,e[5]=b):b=e[5],b}let c=a,d;e[6]===r?d=e[7]:(d=ae("h-3.5 w-3.5",r),e[6]=r,e[7]=d);let p;return e[8]!==c||e[9]!==d?(p=(0,n.jsx)(c,{className:d}),e[8]=c,e[9]=d,e[10]=p):p=e[10],p},at=w({type:x("s3"),bucket:u().nonempty().describe(i.of({label:"Bucket",placeholder:"my-bucket",optionRegex:"(bucket|s3.?bucket)"})),region:u().optional().describe(i.of({label:"Region",placeholder:"us-east-1",optionRegex:"(region|aws.?region)"})),access_key_id:u().optional().describe(i.of({label:"Access Key ID",inputType:"password",optionRegex:"(access.?key.?id|aws.?access.?key)"})),secret_access_key:u().optional().describe(i.of({label:"Secret Access Key",inputType:"password",optionRegex:"(secret.?access.?key|aws.?secret)"})),endpoint_url:u().optional().describe(i.of({label:"Endpoint URL",placeholder:"https://s3.amazonaws.com",optionRegex:"(endpoint|s3.?url|s3.?endpoint)"}))}).describe(i.of({direction:"two-columns"})),it=w({type:x("gcs"),bucket:u().nonempty().describe(i.of({label:"Bucket",placeholder:"my-bucket",optionRegex:"(bucket|gcs.?bucket|google.?bucket)"})),service_account_key:u().optional().describe(i.of({label:"Service Account Key (JSON)",inputType:"textarea"}))}).describe(i.of({direction:"two-columns"})),lt=w({type:x("azure"),container:u().nonempty().describe(i.of({label:"Container",placeholder:"my-container"})),account_name:u().nonempty().describe(i.of({label:"Account Name",placeholder:"storageaccount",optionRegex:"(azure.?account|account.?name|storage.?account)"})),account_key:u().optional().describe(i.of({label:"Account Key",inputType:"password",optionRegex:"(azure.?key|account.?key|storage.?key)"}))}).describe(i.of({direction:"two-columns"})),dt=w({type:x("coreweave"),bucket:u().nonempty().describe(i.of({label:"Bucket",placeholder:"bucket-name"})),region:u().nonempty().describe(i.of({label:"Region",placeholder:"US-EAST-04A"})),access_key_id:u().optional().describe(i.of({label:"Access Key ID",inputType:"password",optionRegex:"(access.?key.?id|object.?storage.?key|aws.?access.?key)"})),secret_access_key:u().optional().describe(i.of({label:"Secret Access Key",inputType:"password",optionRegex:"(secret.?access.?key|object.?storage.?secret|aws.?secret)"}))}).describe(i.of({direction:"two-columns"})),pt=w({type:x("gdrive"),credentials_json:u().optional().describe(i.of({label:"Service Account JSON",description:"Leave empty to use browser-based authentication",inputType:"textarea"}))}).describe(i.of({direction:"two-columns"})),fr=ce("type",[at,it,lt,dt,pt]),yr={obstore:"obstore",fsspec:"fsspec"};var _r=class{constructor(){ue(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(U(e)){let o=Pe(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(`
141
- `)}};function wr(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:y(`
142
- store = S3Store(${s},${r.length>0?`
143
- ${r.join(`
144
- `)}
145
- `:""})
146
- `)}}function xr(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=y(`
147
- _credentials = json.loads("""${t.service_account_key}""")
148
- store = GCSStore(${s},
149
- service_account_key=_credentials,
150
- )
151
- `)):r=y(`
152
- store = GCSStore(${s})
153
- `),{imports:o,code:r}}function Sr(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},
154
- ${l.map(a=>` ${a}`).join(`
155
- `)}
156
- )`}}function kr(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:y(`
157
- store = S3Store(${s},${`
158
- ${r.join(`
159
- `)}
160
- `})
161
- `)}}function vr(t,e){var l;let{secrets:s,isEmbedded:o=!1}=e,r=new Set(["from gdrive_fsspec import GoogleDriveFileSystem"]);if(t.credentials_json){r.add("import json");let a=s.print("credentials_json",t.credentials_json);return{imports:r,code:y(`
162
- _creds = json.loads("""${(l=t.credentials_json)!=null&&l.startsWith("ENV:")?`{${a}}`:t.credentials_json}""")
163
- fs = GoogleDriveFileSystem(creds=_creds, token="service_account", use_listings_cache=False, skip_instance_cache=True)
164
- `)}}return{imports:r,code:y(o?`
165
- fs = GoogleDriveFileSystem(use_listings_cache=False, skip_instance_cache=True, auth_kwargs={"use_local_webserver": False})
166
- mo.output.clear_console()
167
- `:`
168
- fs = GoogleDriveFileSystem(use_listings_cache=False, skip_instance_cache=True)
169
- `)}}function $r(t,e){fr.parse(t);let s=new _r,o;switch(t.type){case"s3":o=wr(t,s);break;case"gcs":o=xr(t,s);break;case"azure":o=Sr(t,s);break;case"coreweave":o=kr(t,s);break;case"gdrive":o=vr(t,{secrets:s,isEmbedded:e.isEmbedded});break;default:ie(t)}let r=[...new Set([...s.imports,...o.imports])].toSorted();r.push("");let l=s.formatSecrets();return l&&r.push(l),r.push(o.code.trim()),r.join(`
170
- `)}var ht=M(),jr="#232F3E",mt=[{name:"Amazon S3",schema:at,protocol:"s3",storageLibraries:{libraries:["obstore"],preferred:"obstore"}},{name:"Google Cloud Storage",schema:it,protocol:"gcs",storageLibraries:{libraries:["obstore"],preferred:"obstore"}},{name:"Azure Blob Storage",schema:lt,protocol:"azure",storageLibraries:{libraries:["obstore"],preferred:"obstore"}},{name:"CoreWeave",schema:dt,protocol:"coreweave",storageLibraries:{libraries:["obstore"],preferred:"obstore"}},{name:"Google Drive",schema:pt,protocol:"gdrive",storageLibraries:{libraries:["fsspec"],preferred:"fsspec"}}],Cr=t=>{let e=(0,ht.c)(4),{onSelect:s}=t,o;e[0]===s?o=e[1]:(o=mt.map(l=>{let{name:a,schema:c,protocol:d}=l;return(0,n.jsx)(Ce,{name:a,color:jr,icon:(0,n.jsx)(ct,{protocol:d,forceDark:!0,className:"w-7.5 h-7.5"}),onSelect:()=>s(c)},a)}),e[0]=s,e[1]=o);let r;return e[2]===o?r=e[3]:(r=(0,n.jsx)(je,{children:o}),e[2]=o,e[3]=r),r};const Ar=t=>{let e=(0,ht.c)(16),{onSubmit:s,header:o}=t,{isEmbedded:r}=is(),[l,a]=(0,P.useState)(null);if(!l){let f;e[0]===Symbol.for("react.memo_cache_sentinel")?(f=(0,n.jsx)("div",{children:(0,n.jsx)(Cr,{onSelect:a})}),e[0]=f):f=e[0];let _;return e[1]===o?_=e[2]:(_=(0,n.jsxs)(n.Fragment,{children:[o,f]}),e[1]=o,e[2]=_),_}let c;e[3]===l?c=e[4]:(c=mt.find(f=>f.schema===l),e[3]=l,e[4]=c);let d=c==null?void 0:c.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 h=(d==null?void 0:d.preferred)??"obstore",g;e[7]===r?g=e[8]:(g=(f,_)=>$r(f,{library:_,isEmbedded:r}),e[7]=r,e[8]=g);let m;e[9]===Symbol.for("react.memo_cache_sentinel")?(m=()=>a(null),e[9]=m):m=e[9];let b;return e[10]!==s||e[11]!==l||e[12]!==p||e[13]!==h||e[14]!==g?(b=(0,n.jsx)(Fe,{schema:l,libraries:p,preferredLibrary:h,displayNames:yr,libraryLabel:"Preferred storage library",generateCode:g,onSubmit:s,onBack:m}),e[10]=s,e[11]=l,e[12]=p,e[13]=h,e[14]=g,e[15]=b):b=e[15],b};var ut=M();const Rr=t=>{let e=(0,ut.c)(9),{children:s,defaultTab:o}=t,r=o===void 0?"databases":o,[l,a]=(0,P.useState)(!1),c;e[0]===s?c=e[1]:(c=(0,n.jsx)(rs,{asChild:!0,children:s}),e[0]=s,e[1]=c);let d;e[2]===Symbol.for("react.memo_cache_sentinel")?(d=()=>a(!1),e[2]=d):d=e[2];let p;e[3]===r?p=e[4]:(p=(0,n.jsx)(bt,{defaultTab:r,onClose:d}),e[3]=r,e[4]=p);let h;return e[5]!==l||e[6]!==c||e[7]!==p?(h=(0,n.jsxs)(cs,{open:l,onOpenChange:a,children:[c,p]}),e[5]=l,e[6]=c,e[7]=p,e[8]=h):h=e[8],h},bt=t=>{let e=(0,ut.c)(20),{defaultTab:s,onClose:o}=t,[r,l]=(0,P.useState)(s===void 0?"databases":s),a;e[0]===Symbol.for("react.memo_cache_sentinel")?(a=(0,n.jsxs)(Rt,{className:"w-full mb-4",children:[(0,n.jsx)(Le,{value:"databases",className:"flex-1",children:"Databases & Catalogs"}),(0,n.jsx)(Le,{value:"storage",className:"flex-1",children:"Remote Storages"})]}),e[0]=a):a=e[0];let c=a,d;e[1]===r?d=e[2]:(d=r==="databases"?(0,n.jsxs)(n.Fragment,{children:["Don't see your database or connection method? A"," ",(0,n.jsx)(be,{href:"https://docs.marimo.io/guides/working_with_data/sql/#connecting-to-a-custom-database",children:"code snippet"})," ","is all you need."]}):(0,n.jsxs)(n.Fragment,{children:["Don't see your storage or connection method? A"," ",(0,n.jsx)(be,{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,h;e[3]===Symbol.for("react.memo_cache_sentinel")?(h=(0,n.jsx)(ss,{children:"Add Connection"}),e[3]=h):h=e[3];let g;e[4]===Symbol.for("react.memo_cache_sentinel")?(g=(0,n.jsx)(be,{href:"https://docs.marimo.io/guides/working_with_data/sql/#connecting-to-a-custom-database",children:"database, data catalog"}),e[4]=g):g=e[4];let m;e[5]===Symbol.for("react.memo_cache_sentinel")?(m=(0,n.jsx)(be,{href:"https://docs.marimo.io/guides/working_with_data/remote_storage/",children:"remote storage"}),e[5]=m):m=e[5];let b;e[6]===p?b=e[7]:(b=(0,n.jsxs)(ts,{children:[h,(0,n.jsxs)(ns,{children:["Connect to a"," ",g," ","or"," ",m," ","directly from your notebook.",(0,n.jsx)("span",{className:"block",children:p})]})]}),e[6]=p,e[7]=b);let f;e[8]===Symbol.for("react.memo_cache_sentinel")?(f=R=>l(R),e[8]=f):f=e[8];let _;e[9]===o?_=e[10]:(_=(0,n.jsx)(Ne,{value:"databases",className:"mt-0 focus-visible:ring-0 focus-visible:ring-offset-0",children:(0,n.jsx)(ar,{onSubmit:o,header:c})}),e[9]=o,e[10]=_);let S;e[11]===o?S=e[12]:(S=(0,n.jsx)(Ne,{value:"storage",className:"mt-0 focus-visible:ring-0 focus-visible:ring-offset-0",children:(0,n.jsx)(Ar,{onSubmit:o,header:c})}),e[11]=o,e[12]=S);let k;e[13]!==r||e[14]!==S||e[15]!==_?(k=(0,n.jsxs)(jt,{value:r,onValueChange:f,children:[_,S]}),e[13]=r,e[14]=S,e[15]=_,e[16]=k):k=e[16];let v;return e[17]!==k||e[18]!==b?(v=(0,n.jsxs)(os,{className:"max-h-[75vh] overflow-y-auto",children:[b,k]}),e[17]=k,e[18]=b,e[19]=v):v=e[19],v};export{ve as i,bt as n,ct as r,Rr as t};