Flowfile 0.3.3.1__py3-none-any.whl → 0.3.4__py3-none-any.whl

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.

Potentially problematic release.


This version of Flowfile might be problematic. Click here for more details.

Files changed (77) hide show
  1. flowfile/__init__.py +2 -2
  2. flowfile/__main__.py +0 -2
  3. flowfile/api.py +94 -46
  4. flowfile/web/__init__.py +4 -1
  5. flowfile/web/static/assets/{AirbyteReader-2b1cf2d8.js → AirbyteReader-e08044e5.js} +8 -8
  6. flowfile/web/static/assets/{CrossJoin-cc3ab73c.js → CrossJoin-dfcf7351.js} +8 -8
  7. flowfile/web/static/assets/{DatabaseConnectionSettings-307c4652.js → DatabaseConnectionSettings-b2afb1d7.js} +2 -2
  8. flowfile/web/static/assets/{DatabaseManager-69faa6e1.js → DatabaseManager-824a49b2.js} +2 -2
  9. flowfile/web/static/assets/{DatabaseReader-e4134cd0.js → DatabaseReader-a48124d8.js} +9 -9
  10. flowfile/web/static/assets/{DatabaseWriter-d32d75b1.js → DatabaseWriter-b47cbae2.js} +9 -9
  11. flowfile/web/static/assets/{ExploreData-5eb48389.js → ExploreData-fdfc45a4.js} +5 -5
  12. flowfile/web/static/assets/{ExternalSource-29489051.js → ExternalSource-861b0e71.js} +6 -6
  13. flowfile/web/static/assets/{Filter-031332bb.js → Filter-f87bb897.js} +8 -9
  14. flowfile/web/static/assets/{Formula-3b900540.js → Formula-1e2ed720.js} +9 -10
  15. flowfile/web/static/assets/{FuzzyMatch-dee31153.js → FuzzyMatch-b6cc4fdd.js} +9 -9
  16. flowfile/web/static/assets/{GraphSolver-ca74eb47.js → GraphSolver-6a371f4c.js} +5 -5
  17. flowfile/web/static/assets/{GroupBy-081b6591.js → GroupBy-f7b7f472.js} +6 -6
  18. flowfile/web/static/assets/{Join-b467376f.js → Join-eec38203.js} +9 -9
  19. flowfile/web/static/assets/{ManualInput-ffffb80a.js → ManualInput-9aaa46fb.js} +5 -5
  20. flowfile/web/static/assets/{Output-9a87d4ba.js → Output-3b2ca045.js} +4 -4
  21. flowfile/web/static/assets/{Pivot-ee3e6093.js → Pivot-a4f5d88f.js} +6 -6
  22. flowfile/web/static/assets/PolarsCode-49ce444f.js +306 -0
  23. flowfile/web/static/assets/{Read-67fee3a0.js → Read-07acdc9a.js} +6 -6
  24. flowfile/web/static/assets/{RecordCount-a2acd02d.js → RecordCount-6a21da56.js} +5 -5
  25. flowfile/web/static/assets/{RecordId-0c8bcd77.js → RecordId-949bdc17.js} +6 -6
  26. flowfile/web/static/assets/{Sample-60594a3a.js → Sample-7afca6e1.js} +5 -5
  27. flowfile/web/static/assets/{SecretManager-bbcec2ac.js → SecretManager-b41c029d.js} +2 -2
  28. flowfile/web/static/assets/{Select-9540e6ca.js → Select-32b28406.js} +8 -8
  29. flowfile/web/static/assets/{SettingsSection-48f28104.js → SettingsSection-a0f15a05.js} +1 -1
  30. flowfile/web/static/assets/{Sort-6dbe3633.js → Sort-fc6ba0e2.js} +6 -6
  31. flowfile/web/static/assets/{TextToRows-27aab4a8.js → TextToRows-23127596.js} +8 -8
  32. flowfile/web/static/assets/{UnavailableFields-8143044b.js → UnavailableFields-c42880a3.js} +2 -2
  33. flowfile/web/static/assets/{Union-52460248.js → Union-39eecc6c.js} +5 -5
  34. flowfile/web/static/assets/{Unique-f6962644.js → Unique-a0e8fe61.js} +8 -8
  35. flowfile/web/static/assets/{Unpivot-1ff1e938.js → Unpivot-1e2d43f0.js} +5 -5
  36. flowfile/web/static/assets/{api-3b345d92.js → api-44ca9e9c.js} +1 -1
  37. flowfile/web/static/assets/{designer-2394122a.css → designer-186f2e71.css} +64 -9
  38. flowfile/web/static/assets/{designer-4736134f.js → designer-267d44f1.js} +2835 -105
  39. flowfile/web/static/assets/{documentation-b9545eba.js → documentation-6c0810a2.js} +1 -1
  40. flowfile/web/static/assets/{dropDown-d5a4014c.js → dropDown-52790b15.js} +1 -1
  41. flowfile/web/static/assets/{dropDownGeneric-1f4e32ec.js → dropDownGeneric-60f56a8a.js} +2 -2
  42. flowfile/web/static/assets/{fullEditor-f4791c23.js → fullEditor-e272b506.js} +2 -3
  43. flowfile/web/static/assets/{genericNodeSettings-1d456350.js → genericNodeSettings-4bdcf98e.js} +3 -3
  44. flowfile/web/static/assets/{index-f25c9283.js → index-e235a8bc.js} +12 -12
  45. flowfile/web/static/assets/{nodeTitle-cad6fd9d.js → nodeTitle-fc3fc4b7.js} +3 -3
  46. flowfile/web/static/assets/{secretApi-01f07e2c.js → secretApi-cdc2a3fd.js} +1 -1
  47. flowfile/web/static/assets/{selectDynamic-f46a4e3f.js → selectDynamic-96aa82cd.js} +3 -3
  48. flowfile/web/static/assets/{vue-codemirror.esm-eb98fc8b.js → vue-codemirror.esm-25e75a08.js} +610 -29
  49. flowfile/web/static/assets/{vue-content-loader.es-860c0380.js → vue-content-loader.es-6c4b1c24.js} +1 -1
  50. flowfile/web/static/index.html +1 -1
  51. {flowfile-0.3.3.1.dist-info → flowfile-0.3.4.dist-info}/METADATA +16 -3
  52. {flowfile-0.3.3.1.dist-info → flowfile-0.3.4.dist-info}/RECORD +74 -74
  53. flowfile_core/flowfile/code_generator/__init__.py +0 -0
  54. flowfile_core/flowfile/code_generator/code_generator.py +723 -0
  55. flowfile_core/flowfile/flow_data_engine/flow_data_engine.py +1 -1
  56. flowfile_core/flowfile/flow_data_engine/flow_file_column/main.py +1 -1
  57. flowfile_core/flowfile/{FlowfileFlow.py → flow_graph.py} +3 -3
  58. flowfile_core/flowfile/flow_graph_utils.py +1 -1
  59. flowfile_core/flowfile/handler.py +1 -1
  60. flowfile_core/flowfile/manage/open_flowfile.py +1 -1
  61. flowfile_core/flowfile/util/calculate_layout.py +1 -1
  62. flowfile_core/routes/routes.py +11 -1
  63. flowfile_core/schemas/input_schema.py +2 -1
  64. flowfile_frame/adapters.py +1 -1
  65. flowfile_frame/expr.py +19 -0
  66. flowfile_frame/flow_frame.py +1 -4
  67. flowfile_frame/flow_frame.pyi +1 -1
  68. flowfile_frame/flow_frame_methods.py +1 -1
  69. flowfile_frame/lazy.py +1 -1
  70. flowfile_frame/utils.py +1 -1
  71. flowfile/readme.md +0 -127
  72. flowfile/web/static/assets/PolarsCode-03921254.js +0 -2865
  73. flowfile/web/static/assets/PopOver-3bdf8951.js +0 -577
  74. /flowfile/web/static/assets/{PopOver-bccfde04.css → vue-codemirror-bccfde04.css} +0 -0
  75. {flowfile-0.3.3.1.dist-info → flowfile-0.3.4.dist-info}/LICENSE +0 -0
  76. {flowfile-0.3.3.1.dist-info → flowfile-0.3.4.dist-info}/WHEEL +0 -0
  77. {flowfile-0.3.3.1.dist-info → flowfile-0.3.4.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,306 @@
1
+ import { C as CodeLoader } from "./vue-content-loader.es-6c4b1c24.js";
2
+ import { v as keymap, w as acceptCompletion, x as indentMore, q as EditorState, r as autocompletion, o as T, u as useNodeStore } from "./vue-codemirror.esm-25e75a08.js";
3
+ import { p as python, o as oneDark } from "./designer-267d44f1.js";
4
+ import { d as defineComponent, r as ref, X as shallowRef, m as watch, c as openBlock, e as createElementBlock, f as createVNode, u as unref, t as toDisplayString, i as createCommentVNode, w as withCtx, h as createBlock, n as onMounted, R as nextTick, a7 as Teleport } from "./index-e235a8bc.js";
5
+ import { G as GenericNodeSettings } from "./genericNodeSettings-4bdcf98e.js";
6
+ import { N as NodeButton, a as NodeTitle } from "./nodeTitle-fc3fc4b7.js";
7
+ const polarsCompletionVals = [
8
+ // Polars basics
9
+ { label: "pl", type: "variable", info: "Polars main module" },
10
+ { label: "col", type: "function", info: "Column selector" },
11
+ { label: "lit", type: "function", info: "Literal value" },
12
+ { label: "expr", type: "function", info: "Expression builder" },
13
+ // Common Polars operations
14
+ { label: "select", type: "method", info: "Select columns" },
15
+ { label: "filter", type: "method", info: "Filter rows" },
16
+ { label: "group_by", type: "method", info: "Group by columns" },
17
+ { label: "agg", type: "method", info: "Aggregate operations" },
18
+ { label: "sort", type: "method", info: "Sort DataFrame" },
19
+ { label: "with_columns", type: "method", info: "Add/modify columns" },
20
+ { label: "join", type: "method", info: "Join operations" },
21
+ // Aggregation functions
22
+ { label: "sum", type: "method", info: "Sum values" },
23
+ { label: "mean", type: "method", info: "Calculate mean" },
24
+ { label: "min", type: "method", info: "Find minimum" },
25
+ { label: "max", type: "method", info: "Find maximum" },
26
+ { label: "count", type: "method", info: "Count records" },
27
+ // Common variables
28
+ { label: "input_df", type: "variable", info: "Input DataFrame" },
29
+ { label: "output_df", type: "variable", info: "Output DataFrame" },
30
+ // Basic Python
31
+ { label: "print", type: "function" },
32
+ { label: "len", type: "function" },
33
+ { label: "range", type: "function" },
34
+ { label: "list", type: "type" },
35
+ { label: "dict", type: "type" },
36
+ { label: "set", type: "type" },
37
+ { label: "str", type: "type" },
38
+ { label: "int", type: "type" },
39
+ { label: "float", type: "type" },
40
+ { label: "bool", type: "type" }
41
+ ];
42
+ const _hoisted_1$2 = { class: "polars-editor-root" };
43
+ const _hoisted_2 = {
44
+ key: 0,
45
+ class: "validation-error"
46
+ };
47
+ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
48
+ __name: "pythonEditor",
49
+ props: {
50
+ editorString: { type: String, required: true }
51
+ },
52
+ emits: ["update-editor-string", "validation-error"],
53
+ setup(__props, { expose: __expose, emit: __emit }) {
54
+ const props = __props;
55
+ const emit = __emit;
56
+ const validationError = ref(null);
57
+ const polarsCompletions = (context) => {
58
+ let word = context.matchBefore(/\w*/);
59
+ if ((word == null ? void 0 : word.from) == (word == null ? void 0 : word.to) && !context.explicit) {
60
+ return null;
61
+ }
62
+ return {
63
+ from: word == null ? void 0 : word.from,
64
+ options: polarsCompletionVals
65
+ };
66
+ };
67
+ const tabKeymap = keymap.of([
68
+ {
69
+ key: "Tab",
70
+ run: (view2) => {
71
+ if (acceptCompletion(view2)) {
72
+ return true;
73
+ }
74
+ return indentMore(view2);
75
+ }
76
+ }
77
+ ]);
78
+ const insertTextAtCursor = (text) => {
79
+ if (view.value) {
80
+ view.value.dispatch({
81
+ changes: {
82
+ from: view.value.state.selection.main.head,
83
+ to: view.value.state.selection.main.head,
84
+ insert: text
85
+ }
86
+ });
87
+ }
88
+ };
89
+ const code = ref(props.editorString);
90
+ const view = shallowRef(null);
91
+ const extensions = [
92
+ python(),
93
+ oneDark,
94
+ EditorState.tabSize.of(4),
95
+ autocompletion({
96
+ override: [polarsCompletions],
97
+ defaultKeymap: false,
98
+ // Disable default keymap
99
+ closeOnBlur: false
100
+ }),
101
+ tabKeymap
102
+ ];
103
+ const handleReady = (payload) => {
104
+ view.value = payload.view;
105
+ };
106
+ const log = (type, event) => {
107
+ console.log(type, event);
108
+ };
109
+ const handleBlur = async (_) => {
110
+ try {
111
+ validationError.value = null;
112
+ emit("validation-error", null);
113
+ } catch (error) {
114
+ const errorMessage = error instanceof Error ? error.message : String(error);
115
+ validationError.value = errorMessage;
116
+ emit("validation-error", errorMessage);
117
+ }
118
+ };
119
+ watch(code, (newCode) => {
120
+ emit("update-editor-string", newCode);
121
+ });
122
+ __expose({ insertTextAtCursor });
123
+ return (_ctx, _cache) => {
124
+ return openBlock(), createElementBlock("div", _hoisted_1$2, [
125
+ createVNode(unref(T), {
126
+ modelValue: code.value,
127
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => code.value = $event),
128
+ placeholder: "Enter Polars code here...",
129
+ style: { height: "500px" },
130
+ autofocus: true,
131
+ "indent-with-tab": false,
132
+ "tab-size": 4,
133
+ extensions,
134
+ onReady: handleReady,
135
+ onFocus: _cache[1] || (_cache[1] = ($event) => log("focus", $event)),
136
+ onBlur: handleBlur
137
+ }, null, 8, ["modelValue"]),
138
+ validationError.value ? (openBlock(), createElementBlock("div", _hoisted_2, toDisplayString(validationError.value), 1)) : createCommentVNode("", true)
139
+ ]);
140
+ };
141
+ }
142
+ });
143
+ const pythonEditor_vue_vue_type_style_index_0_lang = "";
144
+ const createPolarsCodeNode = (flowId, nodeId) => {
145
+ const polarsCodeInput = {
146
+ polars_code: `# Example of usage (you can remove this)
147
+ # Single line transformations:
148
+ # input_df.filter(pl.col('column_name') > 0)
149
+
150
+ # Multi-line transformations (must assign to output_df):
151
+ # result = input_df.select(['a', 'b'])
152
+ # filtered = result.filter(pl.col('a') > 0)
153
+ # output_df = filtered.with_columns(pl.col('b').alias('new_b'))
154
+
155
+ # Multiple input dataframes are available as input_df_0, input_df_1, etc:
156
+ # output_df = input_df_0.join(input_df_1, on='id')
157
+
158
+ # No inputs example (node will act as a starter node):
159
+ # output_df = pl.DataFrame({'a': [1, 2, 3], 'b': ['x', 'y', 'z']})
160
+
161
+ # Your code here:
162
+ input_df`
163
+ };
164
+ const nodePolarsCode = {
165
+ flow_id: flowId,
166
+ node_id: nodeId,
167
+ pos_x: 0,
168
+ pos_y: 0,
169
+ polars_code_input: polarsCodeInput,
170
+ cache_results: false
171
+ };
172
+ return nodePolarsCode;
173
+ };
174
+ const _hoisted_1$1 = {
175
+ key: 0,
176
+ class: "listbox-wrapper"
177
+ };
178
+ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
179
+ __name: "polarsCode",
180
+ setup(__props, { expose: __expose }) {
181
+ const showEditor = ref(false);
182
+ const nodeStore = useNodeStore();
183
+ const dataLoaded = ref(false);
184
+ const editorChild = ref(null);
185
+ const nodePolarsCode = ref(null);
186
+ const nodeData = ref(null);
187
+ const handleEditorUpdate = (newCode) => {
188
+ if (nodePolarsCode.value && nodePolarsCode.value.polars_code_input) {
189
+ nodePolarsCode.value.polars_code_input.polars_code = newCode;
190
+ }
191
+ };
192
+ const loadNodeData = async (nodeId) => {
193
+ var _a, _b, _c, _d;
194
+ try {
195
+ nodeData.value = await nodeStore.getNodeData(nodeId, false);
196
+ if (nodeData.value) {
197
+ const hasValidSetup = Boolean(
198
+ ((_b = (_a = nodeData.value) == null ? void 0 : _a.setting_input) == null ? void 0 : _b.is_setup) && ((_d = (_c = nodeData.value) == null ? void 0 : _c.setting_input) == null ? void 0 : _d.polars_code_input)
199
+ );
200
+ nodePolarsCode.value = hasValidSetup ? nodeData.value.setting_input : createPolarsCodeNode(nodeStore.flow_id, nodeStore.node_id);
201
+ showEditor.value = true;
202
+ dataLoaded.value = true;
203
+ }
204
+ } catch (error) {
205
+ console.error("Failed to load node data:", error);
206
+ showEditor.value = false;
207
+ dataLoaded.value = false;
208
+ }
209
+ };
210
+ const pushNodeData = async () => {
211
+ if (!nodePolarsCode.value || !nodePolarsCode.value.polars_code_input.polars_code) {
212
+ return;
213
+ }
214
+ nodePolarsCode.value.is_setup = true;
215
+ nodeStore.updateSettings(nodePolarsCode);
216
+ showEditor.value = false;
217
+ dataLoaded.value = false;
218
+ };
219
+ __expose({ loadNodeData, pushNodeData });
220
+ return (_ctx, _cache) => {
221
+ return dataLoaded.value && nodePolarsCode.value ? (openBlock(), createElementBlock("div", _hoisted_1$1, [
222
+ createVNode(GenericNodeSettings, { "model-value": nodePolarsCode.value }, {
223
+ default: withCtx(() => [
224
+ showEditor.value && nodePolarsCode.value ? (openBlock(), createBlock(_sfc_main$2, {
225
+ key: 0,
226
+ ref_key: "editorChild",
227
+ ref: editorChild,
228
+ "editor-string": nodePolarsCode.value.polars_code_input.polars_code,
229
+ onUpdateEditorString: handleEditorUpdate
230
+ }, null, 8, ["editor-string"])) : createCommentVNode("", true)
231
+ ]),
232
+ _: 1
233
+ }, 8, ["model-value"])
234
+ ])) : (openBlock(), createBlock(unref(CodeLoader), { key: 1 }));
235
+ };
236
+ }
237
+ });
238
+ const _hoisted_1 = { ref: "el" };
239
+ const _sfc_main = /* @__PURE__ */ defineComponent({
240
+ __name: "PolarsCode",
241
+ props: {
242
+ nodeId: {
243
+ type: Number,
244
+ required: true
245
+ }
246
+ },
247
+ setup(__props) {
248
+ const nodeStore = useNodeStore();
249
+ const childComp = ref(null);
250
+ const props = __props;
251
+ const drawer = ref(false);
252
+ const closeOnDrawer = () => {
253
+ var _a;
254
+ drawer.value = false;
255
+ (_a = childComp.value) == null ? void 0 : _a.pushNodeData();
256
+ };
257
+ const openDrawer = async () => {
258
+ if (nodeStore.node_id === props.nodeId) {
259
+ return;
260
+ }
261
+ nodeStore.closeDrawer();
262
+ drawer.value = true;
263
+ const drawerOpen = nodeStore.isDrawerOpen;
264
+ nodeStore.isDrawerOpen = true;
265
+ await nextTick();
266
+ if (nodeStore.node_id === props.nodeId && drawerOpen) {
267
+ return;
268
+ }
269
+ if (childComp.value) {
270
+ childComp.value.loadNodeData(props.nodeId);
271
+ nodeStore.openDrawer(closeOnDrawer);
272
+ }
273
+ };
274
+ onMounted(async () => {
275
+ await nextTick();
276
+ });
277
+ return (_ctx, _cache) => {
278
+ return openBlock(), createElementBlock("div", _hoisted_1, [
279
+ createVNode(NodeButton, {
280
+ ref: "nodeButton",
281
+ "node-id": __props.nodeId,
282
+ "image-src": "polars_code.png",
283
+ title: `${__props.nodeId}: Polars code`,
284
+ onClick: openDrawer
285
+ }, null, 8, ["node-id", "title"]),
286
+ drawer.value ? (openBlock(), createBlock(Teleport, {
287
+ key: 0,
288
+ to: "#nodesettings"
289
+ }, [
290
+ createVNode(NodeTitle, {
291
+ title: "Polars code",
292
+ intro: "Use custom Polars code to transform data."
293
+ }),
294
+ createVNode(_sfc_main$1, {
295
+ ref_key: "childComp",
296
+ ref: childComp,
297
+ "node-id": __props.nodeId
298
+ }, null, 8, ["node-id"])
299
+ ])) : createCommentVNode("", true)
300
+ ], 512);
301
+ };
302
+ }
303
+ });
304
+ export {
305
+ _sfc_main as default
306
+ };
@@ -1,9 +1,9 @@
1
- import { C as CodeLoader } from "./vue-content-loader.es-860c0380.js";
2
- import { a as axios, d as defineComponent, r as ref, l as computed, n as onMounted, m as watch, b as resolveComponent, c as openBlock, e as createElementBlock, p as createBaseVNode, f as createVNode, w as withCtx, i as createCommentVNode, t as toDisplayString, a5 as withDirectives, a6 as vModelText, h as createBlock, u as unref, _ as _export_sfc, ar as ElCheckbox, F as Fragment, q as renderList, an as ElOption, ao as ElSelect, as as ElSlider, R as nextTick, a7 as Teleport } from "./index-f25c9283.js";
3
- import { C as ColumnSelector } from "./dropDown-d5a4014c.js";
4
- import { u as useNodeStore } from "./PopOver-3bdf8951.js";
5
- import { F as FileBrowser } from "./designer-4736134f.js";
6
- import { N as NodeButton, a as NodeTitle } from "./nodeTitle-cad6fd9d.js";
1
+ import { C as CodeLoader } from "./vue-content-loader.es-6c4b1c24.js";
2
+ import { a as axios, d as defineComponent, r as ref, l as computed, n as onMounted, m as watch, b as resolveComponent, c as openBlock, e as createElementBlock, p as createBaseVNode, f as createVNode, w as withCtx, i as createCommentVNode, t as toDisplayString, a5 as withDirectives, a6 as vModelText, h as createBlock, u as unref, _ as _export_sfc, ar as ElCheckbox, F as Fragment, q as renderList, an as ElOption, ao as ElSelect, as as ElSlider, R as nextTick, a7 as Teleport } from "./index-e235a8bc.js";
3
+ import { C as ColumnSelector } from "./dropDown-52790b15.js";
4
+ import { u as useNodeStore } from "./vue-codemirror.esm-25e75a08.js";
5
+ import { F as FileBrowser } from "./designer-267d44f1.js";
6
+ import { N as NodeButton, a as NodeTitle } from "./nodeTitle-fc3fc4b7.js";
7
7
  const getXlsxSheetNamesForPath = async (path) => {
8
8
  const response = await axios.get(`/api/get_xlsx_sheet_names?path=${path}`);
9
9
  return response.data;
@@ -1,8 +1,8 @@
1
- import { u as useNodeStore } from "./PopOver-3bdf8951.js";
2
- import { G as GenericNodeSettings } from "./genericNodeSettings-1d456350.js";
3
- import { d as defineComponent, r as ref, n as onMounted, R as nextTick, c as openBlock, e as createElementBlock, f as createVNode, w as withCtx, p as createBaseVNode, i as createCommentVNode, h as createBlock, a7 as Teleport } from "./index-f25c9283.js";
4
- import { N as NodeButton, a as NodeTitle } from "./nodeTitle-cad6fd9d.js";
5
- import "./designer-4736134f.js";
1
+ import { u as useNodeStore } from "./vue-codemirror.esm-25e75a08.js";
2
+ import { G as GenericNodeSettings } from "./genericNodeSettings-4bdcf98e.js";
3
+ import { d as defineComponent, r as ref, n as onMounted, R as nextTick, c as openBlock, e as createElementBlock, f as createVNode, w as withCtx, p as createBaseVNode, i as createCommentVNode, h as createBlock, a7 as Teleport } from "./index-e235a8bc.js";
4
+ import { N as NodeButton, a as NodeTitle } from "./nodeTitle-fc3fc4b7.js";
5
+ import "./designer-267d44f1.js";
6
6
  const _hoisted_1$1 = {
7
7
  key: 0,
8
8
  class: "listbox-wrapper"
@@ -1,9 +1,9 @@
1
- import { d as defineComponent, r as ref, n as onMounted, R as nextTick, o as onUnmounted, b as resolveComponent, c as openBlock, e as createElementBlock, f as createVNode, w as withCtx, p as createBaseVNode, g as createTextVNode, a5 as withDirectives, a6 as vModelText, F as Fragment, q as renderList, s as normalizeClass, v as withModifiers, t as toDisplayString, h as createBlock, i as createCommentVNode, a7 as Teleport } from "./index-f25c9283.js";
2
- import { u as useNodeStore } from "./PopOver-3bdf8951.js";
3
- import { C as ContextMenu, S as SettingsSection } from "./SettingsSection-48f28104.js";
4
- import { G as GenericNodeSettings } from "./genericNodeSettings-1d456350.js";
5
- import { N as NodeButton, a as NodeTitle } from "./nodeTitle-cad6fd9d.js";
6
- import "./designer-4736134f.js";
1
+ import { d as defineComponent, r as ref, n as onMounted, R as nextTick, o as onUnmounted, b as resolveComponent, c as openBlock, e as createElementBlock, f as createVNode, w as withCtx, p as createBaseVNode, g as createTextVNode, a5 as withDirectives, a6 as vModelText, F as Fragment, q as renderList, s as normalizeClass, v as withModifiers, t as toDisplayString, h as createBlock, i as createCommentVNode, a7 as Teleport } from "./index-e235a8bc.js";
2
+ import { u as useNodeStore } from "./vue-codemirror.esm-25e75a08.js";
3
+ import { C as ContextMenu, S as SettingsSection } from "./SettingsSection-a0f15a05.js";
4
+ import { G as GenericNodeSettings } from "./genericNodeSettings-4bdcf98e.js";
5
+ import { N as NodeButton, a as NodeTitle } from "./nodeTitle-fc3fc4b7.js";
6
+ import "./designer-267d44f1.js";
7
7
  const _hoisted_1 = {
8
8
  key: 0,
9
9
  class: "listbox-wrapper"
@@ -1,8 +1,8 @@
1
- import { d as defineComponent, r as ref, n as onMounted, R as nextTick, o as onUnmounted, b as resolveComponent, c as openBlock, e as createElementBlock, f as createVNode, w as withCtx, p as createBaseVNode, g as createTextVNode, a5 as withDirectives, a6 as vModelText, i as createCommentVNode, h as createBlock, a7 as Teleport } from "./index-f25c9283.js";
2
- import { u as useNodeStore } from "./PopOver-3bdf8951.js";
3
- import { G as GenericNodeSettings } from "./genericNodeSettings-1d456350.js";
4
- import { N as NodeButton, a as NodeTitle } from "./nodeTitle-cad6fd9d.js";
5
- import "./designer-4736134f.js";
1
+ import { d as defineComponent, r as ref, n as onMounted, R as nextTick, o as onUnmounted, b as resolveComponent, c as openBlock, e as createElementBlock, f as createVNode, w as withCtx, p as createBaseVNode, g as createTextVNode, a5 as withDirectives, a6 as vModelText, i as createCommentVNode, h as createBlock, a7 as Teleport } from "./index-e235a8bc.js";
2
+ import { u as useNodeStore } from "./vue-codemirror.esm-25e75a08.js";
3
+ import { G as GenericNodeSettings } from "./genericNodeSettings-4bdcf98e.js";
4
+ import { N as NodeButton, a as NodeTitle } from "./nodeTitle-fc3fc4b7.js";
5
+ import "./designer-267d44f1.js";
6
6
  const _hoisted_1$1 = {
7
7
  key: 0,
8
8
  class: "listbox-wrapper"
@@ -1,5 +1,5 @@
1
- import { r as ref, l as computed, d as defineComponent, n as onMounted, e as createElementBlock, p as createBaseVNode, v as withModifiers, a5 as withDirectives, a6 as vModelText, ag as vModelDynamic, s as normalizeClass, g as createTextVNode, t as toDisplayString, u as unref, O as isRef, i as createCommentVNode, F as Fragment, q as renderList, c as openBlock } from "./index-f25c9283.js";
2
- import { f as fetchSecretsApi, a as addSecretApi, g as getSecretValueApi, d as deleteSecretApi } from "./secretApi-01f07e2c.js";
1
+ import { r as ref, l as computed, d as defineComponent, n as onMounted, e as createElementBlock, p as createBaseVNode, v as withModifiers, a5 as withDirectives, a6 as vModelText, ah as vModelDynamic, s as normalizeClass, g as createTextVNode, t as toDisplayString, u as unref, O as isRef, i as createCommentVNode, F as Fragment, q as renderList, c as openBlock } from "./index-e235a8bc.js";
2
+ import { f as fetchSecretsApi, a as addSecretApi, g as getSecretValueApi, d as deleteSecretApi } from "./secretApi-cdc2a3fd.js";
3
3
  function useSecretManager() {
4
4
  const secrets = ref([]);
5
5
  const isLoading = ref(true);
@@ -1,11 +1,11 @@
1
- import { r as ref, d as defineComponent, c as openBlock, e as createElementBlock, f as createVNode, w as withCtx, h as createBlock, u as unref, n as onMounted, R as nextTick, a7 as Teleport, i as createCommentVNode } from "./index-f25c9283.js";
2
- import { C as CodeLoader } from "./vue-content-loader.es-860c0380.js";
3
- import { u as useNodeStore } from "./PopOver-3bdf8951.js";
4
- import { s as selectDynamic } from "./selectDynamic-f46a4e3f.js";
5
- import { G as GenericNodeSettings } from "./genericNodeSettings-1d456350.js";
6
- import { N as NodeButton, a as NodeTitle } from "./nodeTitle-cad6fd9d.js";
7
- import "./UnavailableFields-8143044b.js";
8
- import "./designer-4736134f.js";
1
+ import { r as ref, d as defineComponent, c as openBlock, e as createElementBlock, f as createVNode, w as withCtx, h as createBlock, u as unref, n as onMounted, R as nextTick, a7 as Teleport, i as createCommentVNode } from "./index-e235a8bc.js";
2
+ import { C as CodeLoader } from "./vue-content-loader.es-6c4b1c24.js";
3
+ import { u as useNodeStore } from "./vue-codemirror.esm-25e75a08.js";
4
+ import { s as selectDynamic } from "./selectDynamic-96aa82cd.js";
5
+ import { G as GenericNodeSettings } from "./genericNodeSettings-4bdcf98e.js";
6
+ import { N as NodeButton, a as NodeTitle } from "./nodeTitle-fc3fc4b7.js";
7
+ import "./UnavailableFields-c42880a3.js";
8
+ import "./designer-267d44f1.js";
9
9
  const createSelectInput = (column_name, data_type = void 0, position = void 0, original_position = void 0) => {
10
10
  const selectInput = {
11
11
  old_name: column_name,
@@ -1,4 +1,4 @@
1
- import { d as defineComponent, c as openBlock, e as createElementBlock, p as createBaseVNode, F as Fragment, q as renderList, s as normalizeClass, t as toDisplayString, T as normalizeStyle, _ as _export_sfc, g as createTextVNode, i as createCommentVNode } from "./index-f25c9283.js";
1
+ import { d as defineComponent, c as openBlock, e as createElementBlock, p as createBaseVNode, F as Fragment, q as renderList, s as normalizeClass, t as toDisplayString, T as normalizeStyle, _ as _export_sfc, g as createTextVNode, i as createCommentVNode } from "./index-e235a8bc.js";
2
2
  const _hoisted_1$1 = ["onClick"];
3
3
  const _sfc_main$1 = /* @__PURE__ */ defineComponent({
4
4
  __name: "ContextMenu",
@@ -1,9 +1,9 @@
1
- import { d as defineComponent, r as ref, l as computed, n as onMounted, R as nextTick, o as onUnmounted, b as resolveComponent, c as openBlock, e as createElementBlock, f as createVNode, w as withCtx, p as createBaseVNode, F as Fragment, q as renderList, s as normalizeClass, t as toDisplayString, i as createCommentVNode, T as normalizeStyle, v as withModifiers, h as createBlock, u as unref, _ as _export_sfc, a7 as Teleport } from "./index-f25c9283.js";
2
- import { u as useNodeStore } from "./PopOver-3bdf8951.js";
3
- import { C as CodeLoader } from "./vue-content-loader.es-860c0380.js";
4
- import { G as GenericNodeSettings } from "./genericNodeSettings-1d456350.js";
5
- import { N as NodeButton, a as NodeTitle } from "./nodeTitle-cad6fd9d.js";
6
- import "./designer-4736134f.js";
1
+ import { d as defineComponent, r as ref, l as computed, n as onMounted, R as nextTick, o as onUnmounted, b as resolveComponent, c as openBlock, e as createElementBlock, f as createVNode, w as withCtx, p as createBaseVNode, F as Fragment, q as renderList, s as normalizeClass, t as toDisplayString, i as createCommentVNode, T as normalizeStyle, v as withModifiers, h as createBlock, u as unref, _ as _export_sfc, a7 as Teleport } from "./index-e235a8bc.js";
2
+ import { u as useNodeStore } from "./vue-codemirror.esm-25e75a08.js";
3
+ import { C as CodeLoader } from "./vue-content-loader.es-6c4b1c24.js";
4
+ import { G as GenericNodeSettings } from "./genericNodeSettings-4bdcf98e.js";
5
+ import { N as NodeButton, a as NodeTitle } from "./nodeTitle-fc3fc4b7.js";
6
+ import "./designer-267d44f1.js";
7
7
  const _hoisted_1$1 = {
8
8
  key: 0,
9
9
  class: "listbox-wrapper"
@@ -1,11 +1,11 @@
1
- import { d as defineComponent, r as ref, l as computed, n as onMounted, R as nextTick, b as resolveComponent, c as openBlock, e as createElementBlock, f as createVNode, w as withCtx, p as createBaseVNode, g as createTextVNode, i as createCommentVNode, a5 as withDirectives, a6 as vModelText, h as createBlock, u as unref, _ as _export_sfc, a7 as Teleport } from "./index-f25c9283.js";
2
- import { u as useNodeStore } from "./PopOver-3bdf8951.js";
3
- import { C as ColumnSelector } from "./dropDown-d5a4014c.js";
4
- import { u as unavailableField } from "./UnavailableFields-8143044b.js";
5
- import { G as GenericNodeSettings } from "./genericNodeSettings-1d456350.js";
6
- import { C as CodeLoader } from "./vue-content-loader.es-860c0380.js";
7
- import { N as NodeButton, a as NodeTitle } from "./nodeTitle-cad6fd9d.js";
8
- import "./designer-4736134f.js";
1
+ import { d as defineComponent, r as ref, l as computed, n as onMounted, R as nextTick, b as resolveComponent, c as openBlock, e as createElementBlock, f as createVNode, w as withCtx, p as createBaseVNode, g as createTextVNode, i as createCommentVNode, a5 as withDirectives, a6 as vModelText, h as createBlock, u as unref, _ as _export_sfc, a7 as Teleport } from "./index-e235a8bc.js";
2
+ import { u as useNodeStore } from "./vue-codemirror.esm-25e75a08.js";
3
+ import { C as ColumnSelector } from "./dropDown-52790b15.js";
4
+ import { u as unavailableField } from "./UnavailableFields-c42880a3.js";
5
+ import { G as GenericNodeSettings } from "./genericNodeSettings-4bdcf98e.js";
6
+ import { C as CodeLoader } from "./vue-content-loader.es-6c4b1c24.js";
7
+ import { N as NodeButton, a as NodeTitle } from "./nodeTitle-fc3fc4b7.js";
8
+ import "./designer-267d44f1.js";
9
9
  const _hoisted_1$1 = {
10
10
  key: 0,
11
11
  class: "listbox-wrapper"
@@ -1,5 +1,5 @@
1
- import { P as PopOver } from "./PopOver-3bdf8951.js";
2
- import { d as defineComponent, c as openBlock, h as createBlock, w as withCtx, p as createBaseVNode, t as toDisplayString, _ as _export_sfc } from "./index-f25c9283.js";
1
+ import { P as PopOver } from "./vue-codemirror.esm-25e75a08.js";
2
+ import { d as defineComponent, c as openBlock, h as createBlock, w as withCtx, p as createBaseVNode, t as toDisplayString, _ as _export_sfc } from "./index-e235a8bc.js";
3
3
  const _hoisted_1 = { class: "icon-wrapper" };
4
4
  const _hoisted_2 = { class: "unavailable-icon" };
5
5
  const _sfc_main = /* @__PURE__ */ defineComponent({
@@ -1,8 +1,8 @@
1
- import { u as useNodeStore } from "./PopOver-3bdf8951.js";
2
- import { G as GenericNodeSettings } from "./genericNodeSettings-1d456350.js";
3
- import { d as defineComponent, r as ref, n as onMounted, R as nextTick, o as onUnmounted, c as openBlock, e as createElementBlock, f as createVNode, w as withCtx, g as createTextVNode, i as createCommentVNode, _ as _export_sfc, h as createBlock, a7 as Teleport } from "./index-f25c9283.js";
4
- import { N as NodeButton, a as NodeTitle } from "./nodeTitle-cad6fd9d.js";
5
- import "./designer-4736134f.js";
1
+ import { u as useNodeStore } from "./vue-codemirror.esm-25e75a08.js";
2
+ import { G as GenericNodeSettings } from "./genericNodeSettings-4bdcf98e.js";
3
+ import { d as defineComponent, r as ref, n as onMounted, R as nextTick, o as onUnmounted, c as openBlock, e as createElementBlock, f as createVNode, w as withCtx, g as createTextVNode, i as createCommentVNode, _ as _export_sfc, h as createBlock, a7 as Teleport } from "./index-e235a8bc.js";
4
+ import { N as NodeButton, a as NodeTitle } from "./nodeTitle-fc3fc4b7.js";
5
+ import "./designer-267d44f1.js";
6
6
  const _hoisted_1$1 = {
7
7
  key: 0,
8
8
  class: "listbox-wrapper"
@@ -1,11 +1,11 @@
1
- import { r as ref, d as defineComponent, l as computed, n as onMounted, R as nextTick, o as onUnmounted, c as openBlock, e as createElementBlock, f as createVNode, w as withCtx, h as createBlock, u as unref, _ as _export_sfc, a7 as Teleport, i as createCommentVNode } from "./index-f25c9283.js";
2
- import { C as CodeLoader } from "./vue-content-loader.es-860c0380.js";
3
- import { u as useNodeStore } from "./PopOver-3bdf8951.js";
4
- import { s as selectDynamic } from "./selectDynamic-f46a4e3f.js";
5
- import { G as GenericNodeSettings } from "./genericNodeSettings-1d456350.js";
6
- import { N as NodeButton, a as NodeTitle } from "./nodeTitle-cad6fd9d.js";
7
- import "./UnavailableFields-8143044b.js";
8
- import "./designer-4736134f.js";
1
+ import { r as ref, d as defineComponent, l as computed, n as onMounted, R as nextTick, o as onUnmounted, c as openBlock, e as createElementBlock, f as createVNode, w as withCtx, h as createBlock, u as unref, _ as _export_sfc, a7 as Teleport, i as createCommentVNode } from "./index-e235a8bc.js";
2
+ import { C as CodeLoader } from "./vue-content-loader.es-6c4b1c24.js";
3
+ import { u as useNodeStore } from "./vue-codemirror.esm-25e75a08.js";
4
+ import { s as selectDynamic } from "./selectDynamic-96aa82cd.js";
5
+ import { G as GenericNodeSettings } from "./genericNodeSettings-4bdcf98e.js";
6
+ import { N as NodeButton, a as NodeTitle } from "./nodeTitle-fc3fc4b7.js";
7
+ import "./UnavailableFields-c42880a3.js";
8
+ import "./designer-267d44f1.js";
9
9
  const createSelectInputFromName = (columnName, keep = true) => {
10
10
  return {
11
11
  old_name: columnName,
@@ -1,8 +1,8 @@
1
- import { d as defineComponent, c as openBlock, e as createElementBlock, p as createBaseVNode, F as Fragment, q as renderList, s as normalizeClass, t as toDisplayString, T as normalizeStyle, _ as _export_sfc, g as createTextVNode, i as createCommentVNode, r as ref, n as onMounted, R as nextTick, o as onUnmounted, b as resolveComponent, f as createVNode, w as withCtx, v as withModifiers, h as createBlock, a7 as Teleport } from "./index-f25c9283.js";
2
- import { u as useNodeStore } from "./PopOver-3bdf8951.js";
3
- import { G as GenericNodeSettings } from "./genericNodeSettings-1d456350.js";
4
- import { N as NodeButton, a as NodeTitle } from "./nodeTitle-cad6fd9d.js";
5
- import "./designer-4736134f.js";
1
+ import { d as defineComponent, c as openBlock, e as createElementBlock, p as createBaseVNode, F as Fragment, q as renderList, s as normalizeClass, t as toDisplayString, T as normalizeStyle, _ as _export_sfc, g as createTextVNode, i as createCommentVNode, r as ref, n as onMounted, R as nextTick, o as onUnmounted, b as resolveComponent, f as createVNode, w as withCtx, v as withModifiers, h as createBlock, a7 as Teleport } from "./index-e235a8bc.js";
2
+ import { u as useNodeStore } from "./vue-codemirror.esm-25e75a08.js";
3
+ import { G as GenericNodeSettings } from "./genericNodeSettings-4bdcf98e.js";
4
+ import { N as NodeButton, a as NodeTitle } from "./nodeTitle-fc3fc4b7.js";
5
+ import "./designer-267d44f1.js";
6
6
  const _hoisted_1$3 = ["onClick"];
7
7
  const _sfc_main$3 = /* @__PURE__ */ defineComponent({
8
8
  __name: "ContextMenu",
@@ -1,4 +1,4 @@
1
- import { a as axios } from "./index-f25c9283.js";
1
+ import { a as axios } from "./index-e235a8bc.js";
2
2
  const API_BASE_URL = "/db_connection_lib";
3
3
  const toPythonFormat = (connection) => {
4
4
  return {
@@ -268,7 +268,7 @@
268
268
  margin-top: 12px;
269
269
  }
270
270
 
271
- .action-buttons[data-v-a5a42d67] {
271
+ .action-buttons[data-v-7b6ecb3e] {
272
272
  padding-left: 20px;
273
273
  display: flex;
274
274
  align-items: center;
@@ -281,7 +281,7 @@
281
281
  BlinkMacSystemFont,
282
282
  sans-serif;
283
283
  }
284
- .action-btn[data-v-a5a42d67] {
284
+ .action-btn[data-v-7b6ecb3e] {
285
285
  display: flex;
286
286
  align-items: center;
287
287
  gap: 6px;
@@ -298,22 +298,22 @@
298
298
  letter-spacing: 0.01em;
299
299
  box-shadow: 0 1px 2px rgba(1, 5, 13, 0.08); /* Slightly darker shadow */
300
300
  }
301
- .action-btn[data-v-a5a42d67]:hover {
301
+ .action-btn[data-v-7b6ecb3e]:hover {
302
302
  background-color: rgba(16, 24, 40, 0.08); /* Darker hover background */
303
303
  border-color: rgba(16, 24, 40, 0.18); /* Darker hover border */
304
304
  }
305
- .action-btn[data-v-a5a42d67]:active {
305
+ .action-btn[data-v-7b6ecb3e]:active {
306
306
  transform: translateY(1px);
307
307
  box-shadow: none;
308
308
  }
309
- .btn-icon[data-v-a5a42d67] {
309
+ .btn-icon[data-v-7b6ecb3e] {
310
310
  font-size: 16px;
311
311
  color: rgb(2, 27, 45); /* Darker icon color */
312
312
  }
313
- .btn-text[data-v-a5a42d67] {
313
+ .btn-text[data-v-7b6ecb3e] {
314
314
  white-space: nowrap;
315
315
  }
316
- .settings-modal-content[data-v-a5a42d67] {
316
+ .settings-modal-content[data-v-7b6ecb3e] {
317
317
  padding: 16px;
318
318
  font-family:
319
319
  "Inter",
@@ -322,10 +322,10 @@
322
322
  BlinkMacSystemFont,
323
323
  sans-serif;
324
324
  }
325
- .form-group[data-v-a5a42d67] {
325
+ .form-group[data-v-7b6ecb3e] {
326
326
  margin-bottom: 16px;
327
327
  }
328
- .form-group label[data-v-a5a42d67] {
328
+ .form-group label[data-v-7b6ecb3e] {
329
329
  display: block;
330
330
  margin-bottom: 8px;
331
331
  font-size: 14px;
@@ -568,6 +568,61 @@
568
568
  font-family: "Roboto", "Source Sans Pro", Avenir, Helvetica, Arial, sans-serif;
569
569
  }
570
570
 
571
+ .code-container[data-v-8bafe064] {
572
+ max-width: 1200px;
573
+ margin: 0 auto;
574
+ padding: 20px;
575
+ }
576
+ .code-header[data-v-8bafe064] {
577
+ display: flex;
578
+ justify-content: space-between;
579
+ align-items: center;
580
+ margin-bottom: 20px;
581
+ }
582
+ .code-header h4[data-v-8bafe064] {
583
+ margin: 0;
584
+ }
585
+ .header-actions[data-v-8bafe064] {
586
+ display: flex;
587
+ gap: 12px;
588
+ }
589
+ .export-button[data-v-8bafe064],
590
+ .refresh-button[data-v-8bafe064] {
591
+ display: flex;
592
+ align-items: center;
593
+ gap: 8px;
594
+ padding: 8px 16px;
595
+ background: #007acc;
596
+ color: white;
597
+ border: none;
598
+ border-radius: 6px;
599
+ cursor: pointer;
600
+ font-size: 14px;
601
+ transition: background 0.2s;
602
+ }
603
+ .export-button[data-v-8bafe064]:hover,
604
+ .refresh-button[data-v-8bafe064]:hover:not(:disabled) {
605
+ background: #005a9e;
606
+ }
607
+ .refresh-button[data-v-8bafe064]:disabled {
608
+ background: #6c757d;
609
+ cursor: not-allowed;
610
+ }
611
+ .spinner[data-v-8bafe064] {
612
+ display: inline-block;
613
+ width: 14px;
614
+ height: 14px;
615
+ border: 2px solid #ffffff;
616
+ border-radius: 50%;
617
+ border-top-color: transparent;
618
+ animation: spin-8bafe064 0.8s linear infinite;
619
+ }
620
+ @keyframes spin-8bafe064 {
621
+ to {
622
+ transform: rotate(360deg);
623
+ }
624
+ }
625
+
571
626
  .nodes-wrapper[data-v-a8d4b46b] {
572
627
  display: flex;
573
628
  flex-direction: column;