Flowfile 0.3.9__py3-none-any.whl → 0.4.0__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 (169) hide show
  1. flowfile/__init__.py +6 -1
  2. flowfile/api.py +0 -1
  3. flowfile/web/static/assets/{CloudConnectionManager-c97c25f8.js → CloudConnectionManager-109ecc3c.js} +2 -2
  4. flowfile/web/static/assets/{CloudStorageReader-f1ff509e.js → CloudStorageReader-19cdd67a.js} +11 -78
  5. flowfile/web/static/assets/{CloudStorageWriter-034f8b78.js → CloudStorageWriter-48e0ae20.js} +12 -79
  6. flowfile/web/static/assets/{CloudStorageWriter-49c9a4b2.css → CloudStorageWriter-b0ee067f.css} +24 -24
  7. flowfile/web/static/assets/ColumnSelector-47996a16.css +10 -0
  8. flowfile/web/static/assets/ColumnSelector-ecaf7c44.js +83 -0
  9. flowfile/web/static/assets/ContextMenu-2b348c4c.js +41 -0
  10. flowfile/web/static/assets/{SettingsSection-9c836ecc.css → ContextMenu-4c74eef1.css} +0 -21
  11. flowfile/web/static/assets/ContextMenu-63cfa99b.css +26 -0
  12. flowfile/web/static/assets/ContextMenu-a779eed7.js +41 -0
  13. flowfile/web/static/assets/ContextMenu-c13f91d0.css +26 -0
  14. flowfile/web/static/assets/ContextMenu-eca26a03.js +41 -0
  15. flowfile/web/static/assets/{CrossJoin-41efa4cb.css → CrossJoin-1119d18e.css} +18 -18
  16. flowfile/web/static/assets/{CrossJoin-9e156ebe.js → CrossJoin-a88f8142.js} +14 -84
  17. flowfile/web/static/assets/CustomNode-74a37f74.css +32 -0
  18. flowfile/web/static/assets/CustomNode-cb863dff.js +211 -0
  19. flowfile/web/static/assets/{DatabaseConnectionSettings-d5c625b3.js → DatabaseConnectionSettings-819d3267.js} +3 -3
  20. flowfile/web/static/assets/{DatabaseManager-265adc5e.js → DatabaseManager-84ee2834.js} +2 -2
  21. flowfile/web/static/assets/{DatabaseReader-0b10551e.js → DatabaseReader-060dd412.js} +14 -114
  22. flowfile/web/static/assets/{DatabaseReader-f50c6558.css → DatabaseReader-ae61773c.css} +0 -27
  23. flowfile/web/static/assets/{DatabaseWriter-c17c6916.js → DatabaseWriter-7fc7750f.js} +13 -74
  24. flowfile/web/static/assets/{ExploreData-5bdae813.css → ExploreData-2d0cf4db.css} +8 -14
  25. flowfile/web/static/assets/ExploreData-82c95991.js +192 -0
  26. flowfile/web/static/assets/{ExternalSource-3a66556c.js → ExternalSource-e1a6ddc7.js} +8 -79
  27. flowfile/web/static/assets/{Filter-91ad87e7.js → Filter-8aca894a.js} +12 -85
  28. flowfile/web/static/assets/{Filter-a9d08ba1.css → Filter-f62091b3.css} +3 -3
  29. flowfile/web/static/assets/{Formula-29f19d21.css → Formula-bb96803d.css} +4 -4
  30. flowfile/web/static/assets/{Formula-3c395ab1.js → Formula-e33686d9.js} +18 -85
  31. flowfile/web/static/assets/{FuzzyMatch-6857de82.css → FuzzyMatch-1010f966.css} +42 -42
  32. flowfile/web/static/assets/{FuzzyMatch-2df0d230.js → FuzzyMatch-abda150d.js} +16 -87
  33. flowfile/web/static/assets/{GraphSolver-d285877f.js → GraphSolver-4ecad1d7.js} +13 -159
  34. flowfile/web/static/assets/GraphSolver-f0cb7bfb.css +22 -0
  35. flowfile/web/static/assets/{GroupBy-0bd1cc6b.js → GroupBy-656d07f3.js} +12 -75
  36. flowfile/web/static/assets/{Unique-b5615727.css → GroupBy-b9505323.css} +8 -8
  37. flowfile/web/static/assets/{Join-5a78a203.js → Join-b84ec849.js} +15 -85
  38. flowfile/web/static/assets/{Join-f45eff22.css → Join-fd79b451.css} +20 -20
  39. flowfile/web/static/assets/{ManualInput-a71b52c6.css → ManualInput-3246a08d.css} +20 -20
  40. flowfile/web/static/assets/{ManualInput-93aef9d6.js → ManualInput-346f4135.js} +11 -82
  41. flowfile/web/static/assets/MultiSelect-61b98268.js +5 -0
  42. flowfile/web/static/assets/MultiSelect.vue_vue_type_script_setup_true_lang-2a7c8312.js +63 -0
  43. flowfile/web/static/assets/NumericInput-e36602c2.js +5 -0
  44. flowfile/web/static/assets/NumericInput.vue_vue_type_script_setup_true_lang-211a1990.js +35 -0
  45. flowfile/web/static/assets/Output-ddc9079f.css +37 -0
  46. flowfile/web/static/assets/{Output-411ecaee.js → Output-eb041599.js} +13 -243
  47. flowfile/web/static/assets/Pivot-cf333e3d.css +22 -0
  48. flowfile/web/static/assets/{Pivot-89db4b04.js → Pivot-f5c774f4.js} +14 -138
  49. flowfile/web/static/assets/PivotValidation-26546cbc.js +61 -0
  50. flowfile/web/static/assets/PivotValidation-891ddfb0.css +13 -0
  51. flowfile/web/static/assets/PivotValidation-c46cd420.css +13 -0
  52. flowfile/web/static/assets/PivotValidation-e150a24b.js +61 -0
  53. flowfile/web/static/assets/{PolarsCode-a9f974f8.js → PolarsCode-da3a7abf.js} +13 -80
  54. flowfile/web/static/assets/Read-0c768769.js +243 -0
  55. flowfile/web/static/assets/Read-6b17491f.css +62 -0
  56. flowfile/web/static/assets/RecordCount-84736276.js +53 -0
  57. flowfile/web/static/assets/{RecordId-55ae7d36.js → RecordId-60055e6d.js} +8 -80
  58. flowfile/web/static/assets/SQLQueryComponent-36cef432.css +27 -0
  59. flowfile/web/static/assets/SQLQueryComponent-8a486004.js +38 -0
  60. flowfile/web/static/assets/{Sample-b4a18476.js → Sample-2d662611.js} +8 -77
  61. flowfile/web/static/assets/{SecretManager-b066d13a.js → SecretManager-ef586cab.js} +2 -2
  62. flowfile/web/static/assets/{Select-727688dc.js → Select-2e4a6965.js} +11 -85
  63. flowfile/web/static/assets/SettingsSection-2e4d03c4.css +21 -0
  64. flowfile/web/static/assets/{SettingsSection-695ac487.js → SettingsSection-310b61c0.js} +2 -40
  65. flowfile/web/static/assets/SettingsSection-5634f439.js +45 -0
  66. flowfile/web/static/assets/SettingsSection-5c696bee.css +20 -0
  67. flowfile/web/static/assets/SettingsSection-71e6b7e3.css +21 -0
  68. flowfile/web/static/assets/SettingsSection-7c68b19f.js +53 -0
  69. flowfile/web/static/assets/SingleSelect-7298811a.js +5 -0
  70. flowfile/web/static/assets/SingleSelect.vue_vue_type_script_setup_true_lang-43807bad.js +62 -0
  71. flowfile/web/static/assets/SliderInput-53105476.js +40 -0
  72. flowfile/web/static/assets/SliderInput-b8fb6a8c.css +4 -0
  73. flowfile/web/static/assets/{GroupBy-ab1ea74b.css → Sort-3643d625.css} +8 -8
  74. flowfile/web/static/assets/{Sort-be3339a8.js → Sort-4fdebe74.js} +12 -97
  75. flowfile/web/static/assets/TextInput-28366b7e.js +5 -0
  76. flowfile/web/static/assets/TextInput.vue_vue_type_script_setup_true_lang-9cad14ba.js +32 -0
  77. flowfile/web/static/assets/{TextToRows-c92d1ec2.css → TextToRows-5d2c1190.css} +9 -9
  78. flowfile/web/static/assets/{TextToRows-7b8998da.js → TextToRows-73ffa692.js} +14 -83
  79. flowfile/web/static/assets/ToggleSwitch-598add30.js +5 -0
  80. flowfile/web/static/assets/ToggleSwitch.vue_vue_type_script_setup_true_lang-f620cd32.js +31 -0
  81. flowfile/web/static/assets/{UnavailableFields-8b0cb48e.js → UnavailableFields-66239e83.js} +2 -2
  82. flowfile/web/static/assets/Union-26b10614.js +77 -0
  83. flowfile/web/static/assets/{Union-8d9ac7f9.css → Union-af6c3d9b.css} +6 -6
  84. flowfile/web/static/assets/{Unique-af5a80b4.js → Unique-33b9edbb.js} +22 -91
  85. flowfile/web/static/assets/{Sort-7ccfa0fe.css → Unique-f9fb0809.css} +8 -8
  86. flowfile/web/static/assets/Unpivot-1e422df3.css +30 -0
  87. flowfile/web/static/assets/{Unpivot-5195d411.js → Unpivot-ef69d0e2.js} +12 -166
  88. flowfile/web/static/assets/UnpivotValidation-0d240eeb.css +13 -0
  89. flowfile/web/static/assets/UnpivotValidation-8658388e.js +51 -0
  90. flowfile/web/static/assets/{ExploreData-18a4fe52.js → VueGraphicWalker-4d7861f4.js} +4 -264
  91. flowfile/web/static/assets/VueGraphicWalker-ed5ab88b.css +6 -0
  92. flowfile/web/static/assets/{api-023d1733.js → api-2d1394bd.js} +1 -1
  93. flowfile/web/static/assets/{api-cb00cce6.js → api-c908fffe.js} +1 -1
  94. flowfile/web/static/assets/{designer-6c322d8e.js → designer-1667687d.js} +2201 -705
  95. flowfile/web/static/assets/{designer-2197d782.css → designer-665e9408.css} +836 -201
  96. flowfile/web/static/assets/{documentation-4d1fafe1.js → documentation-5eed779e.js} +1 -1
  97. flowfile/web/static/assets/{dropDown-0b46dd77.js → dropDown-41ebe3c2.js} +1 -1
  98. flowfile/web/static/assets/{fullEditor-ec4e4f95.js → fullEditor-0670d32d.js} +2 -2
  99. flowfile/web/static/assets/{genericNodeSettings-def5879b.js → genericNodeSettings-38410ebf.js} +3 -3
  100. flowfile/web/static/assets/{index-681a3ed0.css → index-50508d4d.css} +8 -0
  101. flowfile/web/static/assets/{index-683fc198.js → index-5ec791df.js} +210 -31
  102. flowfile/web/static/assets/outputCsv-059583b6.js +86 -0
  103. flowfile/web/static/assets/{Output-48f81019.css → outputCsv-9cc59e0b.css} +0 -143
  104. flowfile/web/static/assets/outputExcel-76b1e02c.js +56 -0
  105. flowfile/web/static/assets/outputExcel-b41305c0.css +102 -0
  106. flowfile/web/static/assets/outputParquet-440fd4c7.js +31 -0
  107. flowfile/web/static/assets/outputParquet-cf8cf3f2.css +4 -0
  108. flowfile/web/static/assets/readCsv-9813903a.js +178 -0
  109. flowfile/web/static/assets/readCsv-bca3ed53.css +52 -0
  110. flowfile/web/static/assets/readExcel-7f40d237.js +203 -0
  111. flowfile/web/static/assets/readExcel-e1b381ea.css +64 -0
  112. flowfile/web/static/assets/readParquet-22d56002.js +26 -0
  113. flowfile/web/static/assets/readParquet-cee068e2.css +19 -0
  114. flowfile/web/static/assets/{secretApi-baceb6f9.js → secretApi-b3cb072e.js} +1 -1
  115. flowfile/web/static/assets/{selectDynamic-de91449a.js → selectDynamic-7ad95bca.js} +7 -7
  116. flowfile/web/static/assets/{selectDynamic-b062bc9b.css → selectDynamic-aa913ff4.css} +16 -16
  117. flowfile/web/static/assets/user-defined-icon-0ae16c90.png +0 -0
  118. flowfile/web/static/assets/{vue-codemirror.esm-dc5e3348.js → vue-codemirror.esm-b1dfaa46.js} +59 -33
  119. flowfile/web/static/assets/{vue-content-loader.es-ba94b82f.js → vue-content-loader.es-22bac17c.js} +1 -1
  120. flowfile/web/static/index.html +2 -2
  121. {flowfile-0.3.9.dist-info → flowfile-0.4.0.dist-info}/METADATA +1 -1
  122. {flowfile-0.3.9.dist-info → flowfile-0.4.0.dist-info}/RECORD +160 -102
  123. flowfile_core/configs/flow_logger.py +5 -13
  124. flowfile_core/configs/node_store/__init__.py +30 -0
  125. flowfile_core/configs/node_store/nodes.py +383 -99
  126. flowfile_core/configs/node_store/user_defined_node_registry.py +193 -0
  127. flowfile_core/configs/settings.py +2 -1
  128. flowfile_core/database/connection.py +5 -21
  129. flowfile_core/fileExplorer/funcs.py +239 -121
  130. flowfile_core/flowfile/flow_data_engine/flow_file_column/interface.py +4 -0
  131. flowfile_core/flowfile/flow_data_engine/flow_file_column/main.py +19 -34
  132. flowfile_core/flowfile/flow_data_engine/flow_file_column/type_registry.py +36 -0
  133. flowfile_core/flowfile/flow_data_engine/subprocess_operations/subprocess_operations.py +28 -8
  134. flowfile_core/flowfile/flow_graph.py +117 -34
  135. flowfile_core/flowfile/flow_node/flow_node.py +45 -13
  136. flowfile_core/flowfile/handler.py +22 -3
  137. flowfile_core/flowfile/manage/open_flowfile.py +9 -1
  138. flowfile_core/flowfile/node_designer/__init__.py +47 -0
  139. flowfile_core/flowfile/node_designer/_type_registry.py +197 -0
  140. flowfile_core/flowfile/node_designer/custom_node.py +371 -0
  141. flowfile_core/flowfile/node_designer/data_types.py +146 -0
  142. flowfile_core/flowfile/node_designer/ui_components.py +277 -0
  143. flowfile_core/flowfile/schema_callbacks.py +8 -4
  144. flowfile_core/flowfile/setting_generator/settings.py +0 -1
  145. flowfile_core/main.py +5 -1
  146. flowfile_core/routes/routes.py +73 -28
  147. flowfile_core/routes/user_defined_components.py +55 -0
  148. flowfile_core/schemas/input_schema.py +7 -1
  149. flowfile_core/schemas/output_model.py +5 -2
  150. flowfile_core/schemas/schemas.py +8 -3
  151. flowfile_core/schemas/transform_schema.py +1 -0
  152. flowfile_core/utils/validate_setup.py +3 -1
  153. flowfile_worker/__init__.py +6 -35
  154. flowfile_worker/main.py +5 -2
  155. flowfile_worker/routes.py +47 -5
  156. shared/__init__.py +15 -0
  157. shared/storage_config.py +258 -0
  158. flowfile/web/static/assets/GraphSolver-17fd26db.css +0 -68
  159. flowfile/web/static/assets/Pivot-f415e85f.css +0 -35
  160. flowfile/web/static/assets/Read-80dc1675.css +0 -197
  161. flowfile/web/static/assets/Read-c3b1929c.js +0 -701
  162. flowfile/web/static/assets/RecordCount-4e95f98e.js +0 -122
  163. flowfile/web/static/assets/Union-89fd73dc.js +0 -146
  164. flowfile/web/static/assets/Unpivot-246e9bbd.css +0 -77
  165. flowfile/web/static/assets/nodeTitle-a16db7c3.js +0 -227
  166. flowfile/web/static/assets/nodeTitle-f4b12bcb.css +0 -134
  167. {flowfile-0.3.9.dist-info → flowfile-0.4.0.dist-info}/LICENSE +0 -0
  168. {flowfile-0.3.9.dist-info → flowfile-0.4.0.dist-info}/WHEEL +0 -0
  169. {flowfile-0.3.9.dist-info → flowfile-0.4.0.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,26 @@
1
+
2
+ .context-menu[data-v-4f9e01e5] {
3
+ position: fixed;
4
+ z-index: 1000;
5
+ border: 1px solid #ccc;
6
+ background-color: white;
7
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
8
+ border-radius: 4px;
9
+ user-select: none;
10
+ }
11
+ .context-menu ul[data-v-4f9e01e5] {
12
+ list-style: none;
13
+ padding: 0;
14
+ margin: 0;
15
+ }
16
+ .context-menu li[data-v-4f9e01e5] {
17
+ padding: 8px 16px;
18
+ cursor: pointer;
19
+ }
20
+ .context-menu li.disabled[data-v-4f9e01e5] {
21
+ color: #ccc;
22
+ cursor: not-allowed;
23
+ }
24
+ .context-menu li[data-v-4f9e01e5]:hover:not(.disabled) {
25
+ background-color: #f0f0f0;
26
+ }
@@ -0,0 +1,41 @@
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 } from "./index-5ec791df.js";
2
+ const _hoisted_1 = ["onClick"];
3
+ const _sfc_main = /* @__PURE__ */ defineComponent({
4
+ __name: "ContextMenu",
5
+ props: {
6
+ position: { type: Object, required: true },
7
+ options: {
8
+ type: Array,
9
+ required: true
10
+ }
11
+ },
12
+ emits: ["select", "close"],
13
+ setup(__props, { emit: __emit }) {
14
+ const emit = __emit;
15
+ const selectOption = (action) => {
16
+ emit("select", action);
17
+ emit("close");
18
+ };
19
+ return (_ctx, _cache) => {
20
+ return openBlock(), createElementBlock("div", {
21
+ class: "context-menu",
22
+ style: normalizeStyle({ top: __props.position.y + "px", left: __props.position.x + "px" })
23
+ }, [
24
+ createBaseVNode("ul", null, [
25
+ (openBlock(true), createElementBlock(Fragment, null, renderList(__props.options, (option) => {
26
+ return openBlock(), createElementBlock("li", {
27
+ key: option.action,
28
+ class: normalizeClass({ disabled: option.disabled }),
29
+ onClick: ($event) => !option.disabled && selectOption(option.action)
30
+ }, toDisplayString(option.label), 11, _hoisted_1);
31
+ }), 128))
32
+ ])
33
+ ], 4);
34
+ };
35
+ }
36
+ });
37
+ const ContextMenu_vue_vue_type_style_index_0_scoped_a562ba5e_lang = "";
38
+ const ContextMenu = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-a562ba5e"]]);
39
+ export {
40
+ ContextMenu as default
41
+ };
@@ -1,10 +1,10 @@
1
1
 
2
- .selectors-row[data-v-de068ad8] {
2
+ .selectors-row[data-v-e594e542] {
3
3
  display: flex;
4
4
  justify-content: space-between;
5
5
  margin-bottom: 10px; /* Spacing between rows */
6
6
  }
7
- .context-menu[data-v-de068ad8] {
7
+ .context-menu[data-v-e594e542] {
8
8
  position: fixed;
9
9
  z-index: 1000;
10
10
  border: 1px solid #ccc;
@@ -14,7 +14,7 @@
14
14
  border-radius: 4px;
15
15
  user-select: none;
16
16
  }
17
- .context-menu button[data-v-de068ad8] {
17
+ .context-menu button[data-v-e594e542] {
18
18
  display: block;
19
19
  background: none;
20
20
  border: none;
@@ -24,17 +24,17 @@
24
24
  cursor: pointer;
25
25
  z-index: 100;
26
26
  }
27
- .context-menu button[data-v-de068ad8]:hover {
27
+ .context-menu button[data-v-e594e542]:hover {
28
28
  background-color: #f0f0f0;
29
29
  }
30
- .table-wrapper[data-v-de068ad8] {
30
+ .table-wrapper[data-v-e594e542] {
31
31
  max-height: 250px; /* Adjust this value as needed */
32
32
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); /* subtle shadow for depth */
33
33
  border-radius: 8px; /* rounded corners */
34
34
  overflow: auto; /* ensures the rounded corners are applied to the child elements */
35
35
  margin: 5px; /* adds a small margin around the table */
36
36
  }
37
- .context-menu[data-v-de068ad8] {
37
+ .context-menu[data-v-e594e542] {
38
38
  position: fixed;
39
39
  z-index: 1000;
40
40
  border: 1px solid #ccc;
@@ -42,39 +42,39 @@
42
42
  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
43
43
  border-radius: 4px;
44
44
  }
45
- .context-menu ul[data-v-de068ad8] {
45
+ .context-menu ul[data-v-e594e542] {
46
46
  list-style: none;
47
47
  padding: 0;
48
48
  margin: 0;
49
49
  }
50
- .context-menu li[data-v-de068ad8] {
50
+ .context-menu li[data-v-e594e542] {
51
51
  padding: 8px 16px;
52
52
  cursor: pointer;
53
53
  }
54
- .context-menu li[data-v-de068ad8]:hover {
54
+ .context-menu li[data-v-e594e542]:hover {
55
55
  background-color: #f0f0f0;
56
56
  }
57
- .selectors-container[data-v-de068ad8] {
57
+ .selectors-container[data-v-e594e542] {
58
58
  display: flex;
59
59
  flex-direction: column;
60
60
  }
61
- .selectors-row[data-v-de068ad8] {
61
+ .selectors-row[data-v-e594e542] {
62
62
  display: flex;
63
63
  justify-content: space-between;
64
64
  align-items: center;
65
65
  }
66
- .add-button-container[data-v-de068ad8] {
66
+ .add-button-container[data-v-e594e542] {
67
67
  padding-left: 20px; /* Adjust as needed */
68
68
  display: flex;
69
69
  align-items: center;
70
70
  }
71
- .action-buttons[data-v-de068ad8] {
71
+ .action-buttons[data-v-e594e542] {
72
72
  display: flex;
73
73
  align-items: center;
74
74
  justify-content: flex-end; /* Adjust if needed */
75
75
  }
76
- .remove-join-button[data-v-de068ad8],
77
- .add-join-button[data-v-de068ad8] {
76
+ .remove-join-button[data-v-e594e542],
77
+ .add-join-button[data-v-e594e542] {
78
78
  cursor: pointer;
79
79
  margin-left: 10px; /* Space between buttons */
80
80
  padding: 0 6px; /* Adjust padding */
@@ -83,17 +83,17 @@
83
83
  min-width: 30px; /* Minimum width to ensure buttons don't shrink */
84
84
  text-align: center; /* Ensure the symbols are centered */
85
85
  }
86
- .selectors-header[data-v-de068ad8] {
86
+ .selectors-header[data-v-e594e542] {
87
87
  display: flex;
88
88
  justify-content: space-between;
89
89
  padding: 0 15px; /* Adjust padding for finer control */
90
90
  }
91
- .selectors-title[data-v-de068ad8] {
91
+ .selectors-title[data-v-e594e542] {
92
92
  flex: 1; /* Adjust this based on your needs */
93
93
  text-align: center; /* Center the titles */
94
94
  padding: 0 10px; /* Add padding to ensure alignment with the columns below */
95
95
  }
96
- .action-buttons[data-v-de068ad8] {
96
+ .action-buttons[data-v-e594e542] {
97
97
  flex-basis: 60px; /* Adjust according to the width of your buttons */
98
98
  display: flex;
99
99
  justify-content: center; /* Center the buttons within the action column */
@@ -1,15 +1,14 @@
1
- import { C as CodeLoader } from "./vue-content-loader.es-ba94b82f.js";
2
- import { u as useNodeStore } from "./vue-codemirror.esm-dc5e3348.js";
3
- import { s as selectDynamic } from "./selectDynamic-de91449a.js";
4
- import { G as GenericNodeSettings } from "./genericNodeSettings-def5879b.js";
5
- import { d as defineComponent, r as ref, c as openBlock, e as createElementBlock, f as createVNode, w as withCtx, p as createBaseVNode, h as createBlock, u as unref, _ as _export_sfc, n as onMounted, R as nextTick, a7 as Teleport, i as createCommentVNode } from "./index-683fc198.js";
6
- import { N as NodeButton, a as NodeTitle } from "./nodeTitle-a16db7c3.js";
7
- import "./UnavailableFields-8b0cb48e.js";
8
- import "./designer-6c322d8e.js";
9
- const _hoisted_1$1 = { key: 0 };
1
+ import { C as CodeLoader } from "./vue-content-loader.es-22bac17c.js";
2
+ import { u as useNodeStore } from "./vue-codemirror.esm-b1dfaa46.js";
3
+ import { s as selectDynamic } from "./selectDynamic-7ad95bca.js";
4
+ import { G as GenericNodeSettings } from "./genericNodeSettings-38410ebf.js";
5
+ import { d as defineComponent, r as ref, c as openBlock, e as createElementBlock, f as createVNode, w as withCtx, p as createBaseVNode, h as createBlock, u as unref, _ as _export_sfc } from "./index-5ec791df.js";
6
+ import "./UnavailableFields-66239e83.js";
7
+ import "./designer-1667687d.js";
8
+ const _hoisted_1 = { key: 0 };
10
9
  const _hoisted_2 = { class: "listbox-wrapper" };
11
- const _sfc_main$1 = /* @__PURE__ */ defineComponent({
12
- __name: "crossJoin",
10
+ const _sfc_main = /* @__PURE__ */ defineComponent({
11
+ __name: "CrossJoin",
13
12
  setup(__props, { expose: __expose }) {
14
13
  const result = ref(null);
15
14
  const nodeStore = useNodeStore();
@@ -31,19 +30,17 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
31
30
  console.log("Data loaded");
32
31
  dataLoaded.value = true;
33
32
  }
34
- nodeStore.isDrawerOpen = true;
35
33
  };
36
34
  const pushNodeData = async () => {
37
35
  console.log("Pushing node data");
38
36
  nodeStore.updateSettings(nodeCrossJoin);
39
- nodeStore.isDrawerOpen = false;
40
37
  };
41
38
  __expose({
42
39
  loadNodeData,
43
40
  pushNodeData
44
41
  });
45
42
  return (_ctx, _cache) => {
46
- return dataLoaded.value && nodeCrossJoin.value ? (openBlock(), createElementBlock("div", _hoisted_1$1, [
43
+ return dataLoaded.value && nodeCrossJoin.value ? (openBlock(), createElementBlock("div", _hoisted_1, [
47
44
  createVNode(GenericNodeSettings, {
48
45
  modelValue: nodeCrossJoin.value,
49
46
  "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => nodeCrossJoin.value = $event)
@@ -79,75 +76,8 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
79
76
  };
80
77
  }
81
78
  });
82
- const crossJoin_vue_vue_type_style_index_0_scoped_de068ad8_lang = "";
83
- const joinInput = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-de068ad8"]]);
84
- const _hoisted_1 = { ref: "el" };
85
- const _sfc_main = /* @__PURE__ */ defineComponent({
86
- __name: "CrossJoin",
87
- props: {
88
- nodeId: {
89
- type: Number,
90
- required: true
91
- }
92
- },
93
- setup(__props) {
94
- const nodeStore = useNodeStore();
95
- const childComp = ref(null);
96
- const drawer = ref(false);
97
- const props = __props;
98
- const closeOnDrawer = () => {
99
- var _a;
100
- (_a = childComp.value) == null ? void 0 : _a.pushNodeData();
101
- drawer.value = false;
102
- nodeStore.isDrawerOpen = false;
103
- };
104
- const openDrawer = async () => {
105
- if (nodeStore.node_id === props.nodeId) {
106
- return;
107
- }
108
- nodeStore.closeDrawer();
109
- drawer.value = true;
110
- const drawerOpen = nodeStore.isDrawerOpen;
111
- nodeStore.isDrawerOpen = true;
112
- await nextTick();
113
- if (nodeStore.node_id === props.nodeId && drawerOpen) {
114
- return;
115
- }
116
- if (childComp.value) {
117
- childComp.value.loadNodeData(props.nodeId);
118
- nodeStore.openDrawer(closeOnDrawer);
119
- }
120
- };
121
- onMounted(async () => {
122
- await nextTick();
123
- });
124
- return (_ctx, _cache) => {
125
- return openBlock(), createElementBlock("div", _hoisted_1, [
126
- createVNode(NodeButton, {
127
- ref: "nodeButton",
128
- "node-id": __props.nodeId,
129
- "image-src": "cross_join.png",
130
- title: `${__props.nodeId}: Join`,
131
- onClick: openDrawer
132
- }, null, 8, ["node-id", "title"]),
133
- drawer.value ? (openBlock(), createBlock(Teleport, {
134
- key: 0,
135
- to: "#nodesettings"
136
- }, [
137
- createVNode(NodeTitle, {
138
- title: "Join",
139
- intro: "Combine datasets based on one or more columns."
140
- }),
141
- createVNode(joinInput, {
142
- ref_key: "childComp",
143
- ref: childComp,
144
- "node-id": __props.nodeId
145
- }, null, 8, ["node-id"])
146
- ])) : createCommentVNode("", true)
147
- ], 512);
148
- };
149
- }
150
- });
79
+ const CrossJoin_vue_vue_type_style_index_0_scoped_e594e542_lang = "";
80
+ const CrossJoin = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-e594e542"]]);
151
81
  export {
152
- _sfc_main as default
82
+ CrossJoin as default
153
83
  };
@@ -0,0 +1,32 @@
1
+
2
+ .custom-node-wrapper[data-v-d7137248] {
3
+ padding: 1.5rem;
4
+ background-color: #f9fafb; /* bg-gray-50 */
5
+ }
6
+ .node-header[data-v-d7137248] {
7
+ padding-bottom: 1rem;
8
+ border-bottom: 1px solid #e5e7eb; /* border-gray-200 */
9
+ margin-bottom: 1.5rem;
10
+ }
11
+ .node-title[data-v-d7137248] {
12
+ font-size: 1.25rem; /* text-xl */
13
+ font-weight: 700; /* font-bold */
14
+ color: #1f2937; /* text-gray-800 */
15
+ }
16
+ .node-category[data-v-d7137248] {
17
+ font-size: 0.875rem; /* text-sm */
18
+ color: #6b7280; /* text-gray-500 */
19
+ margin-top: 0.25rem;
20
+ }
21
+ .section-description[data-v-d7137248] {
22
+ font-size: 0.875rem;
23
+ color: #6b7280; /* text-gray-500 */
24
+ margin-top: 0.25rem;
25
+ margin-bottom: 1.25rem;
26
+ padding-left: 0.5rem;
27
+ }
28
+ .components-container[data-v-d7137248] {
29
+ display: flex;
30
+ flex-direction: column;
31
+ gap: 1.25rem; /* space-y-5 */
32
+ }
@@ -0,0 +1,211 @@
1
+ import { a as axios, d as defineComponent, r as ref, c as openBlock, e as createElementBlock, p as createBaseVNode, g as createTextVNode, t as toDisplayString, f as createVNode, w as withCtx, F as Fragment, q as renderList, a8 as withDirectives, af as vShow, i as createCommentVNode, h as createBlock, _ as _export_sfc } from "./index-5ec791df.js";
2
+ import { u as useNodeStore } from "./vue-codemirror.esm-b1dfaa46.js";
3
+ import { G as GenericNodeSettings } from "./genericNodeSettings-38410ebf.js";
4
+ import { _ as _sfc_main$3 } from "./MultiSelect.vue_vue_type_script_setup_true_lang-2a7c8312.js";
5
+ import { _ as _sfc_main$5 } from "./ToggleSwitch.vue_vue_type_script_setup_true_lang-f620cd32.js";
6
+ import { _ as _sfc_main$1 } from "./TextInput.vue_vue_type_script_setup_true_lang-9cad14ba.js";
7
+ import { _ as _sfc_main$2 } from "./NumericInput.vue_vue_type_script_setup_true_lang-211a1990.js";
8
+ import SliderInput from "./SliderInput-53105476.js";
9
+ import { _ as _sfc_main$4 } from "./SingleSelect.vue_vue_type_script_setup_true_lang-43807bad.js";
10
+ import ColumnSelector from "./ColumnSelector-ecaf7c44.js";
11
+ import "./designer-1667687d.js";
12
+ async function getCustomNodeSchema(flowId, nodeId) {
13
+ const response = await axios.get(
14
+ `/user_defined_components/custom-node-schema`,
15
+ {
16
+ params: { flow_id: flowId, node_id: nodeId },
17
+ headers: { accept: "application/json" }
18
+ }
19
+ );
20
+ return response.data;
21
+ }
22
+ const _hoisted_1 = {
23
+ key: 0,
24
+ class: "p-4 text-center text-gray-500"
25
+ };
26
+ const _hoisted_2 = {
27
+ key: 1,
28
+ class: "p-4 text-red-600 bg-red-100 rounded-md"
29
+ };
30
+ const _hoisted_3 = {
31
+ key: 2,
32
+ class: "custom-node-wrapper"
33
+ };
34
+ const _hoisted_4 = { class: "listbox-subtitle" };
35
+ const _hoisted_5 = {
36
+ key: 0,
37
+ class: "section-description"
38
+ };
39
+ const _hoisted_6 = { class: "components-container" };
40
+ const _hoisted_7 = {
41
+ key: 7,
42
+ class: "text-red-500 text-xs"
43
+ };
44
+ const _sfc_main = /* @__PURE__ */ defineComponent({
45
+ __name: "CustomNode",
46
+ setup(__props, { expose: __expose }) {
47
+ const schema = ref(null);
48
+ const formData = ref(null);
49
+ const loading = ref(true);
50
+ const error = ref("");
51
+ const nodeStore = useNodeStore();
52
+ const nodeData = ref(null);
53
+ const availableColumns = ref([]);
54
+ const currentNodeId = ref(null);
55
+ const nodeUserDefined = ref(null);
56
+ const columnTypes = ref([]);
57
+ const loadNodeData = async (nodeId) => {
58
+ var _a, _b, _c;
59
+ loading.value = true;
60
+ error.value = "";
61
+ currentNodeId.value = nodeId;
62
+ try {
63
+ const inputNodeData = await nodeStore.getNodeData(nodeId, false);
64
+ if (!inputNodeData) {
65
+ return;
66
+ }
67
+ const [schemaData] = await Promise.all([getCustomNodeSchema(nodeStore.flow_id, nodeId)]);
68
+ console.log("schemaData", schemaData);
69
+ schema.value = schemaData;
70
+ nodeData.value = inputNodeData;
71
+ nodeUserDefined.value = (_a = nodeData.value) == null ? void 0 : _a.setting_input;
72
+ if (!((_b = nodeData.value) == null ? void 0 : _b.setting_input.is_setup) && nodeUserDefined.value) {
73
+ nodeUserDefined.value.settings = {};
74
+ }
75
+ if ((_c = inputNodeData == null ? void 0 : inputNodeData.main_input) == null ? void 0 : _c.columns) {
76
+ availableColumns.value = inputNodeData.main_input.columns;
77
+ columnTypes.value = inputNodeData.main_input.table_schema;
78
+ } else {
79
+ console.warn(
80
+ `No main_input or columns found for node ${nodeId}. Select components may be empty.`
81
+ );
82
+ }
83
+ initializeFormData(schemaData, inputNodeData == null ? void 0 : inputNodeData.setting_input);
84
+ } catch (err) {
85
+ error.value = err.message || "An unknown error occurred while loading node data.";
86
+ } finally {
87
+ loading.value = false;
88
+ }
89
+ };
90
+ const pushNodeData = async () => {
91
+ if (!nodeData.value || currentNodeId.value === null) {
92
+ console.warn("Cannot push data: node data or ID is not available.");
93
+ return;
94
+ }
95
+ if (nodeUserDefined.value) {
96
+ nodeUserDefined.value.settings = formData.value;
97
+ nodeUserDefined.value.is_user_defined = true;
98
+ nodeUserDefined.value.is_setup = true;
99
+ }
100
+ console.log(JSON.stringify(formData.value, null, 2));
101
+ nodeStore.updateUserDefinedSettings(nodeUserDefined);
102
+ };
103
+ function initializeFormData(schemaData, savedSettings) {
104
+ var _a;
105
+ const data = {};
106
+ for (const sectionKey in schemaData.settings_schema) {
107
+ data[sectionKey] = {};
108
+ const section = schemaData.settings_schema[sectionKey];
109
+ for (const componentKey in section.components) {
110
+ const component = section.components[componentKey];
111
+ const savedValue = (_a = savedSettings == null ? void 0 : savedSettings[sectionKey]) == null ? void 0 : _a[componentKey];
112
+ if (savedValue !== void 0) {
113
+ data[sectionKey][componentKey] = savedValue;
114
+ } else if (component.value !== void 0) {
115
+ data[sectionKey][componentKey] = component.value;
116
+ } else {
117
+ let defaultValue = component.default ?? null;
118
+ if (component.input_type === "array" && defaultValue === null) {
119
+ defaultValue = [];
120
+ }
121
+ data[sectionKey][componentKey] = defaultValue;
122
+ }
123
+ }
124
+ }
125
+ formData.value = data;
126
+ }
127
+ __expose({
128
+ loadNodeData,
129
+ pushNodeData
130
+ });
131
+ return (_ctx, _cache) => {
132
+ return loading.value ? (openBlock(), createElementBlock("div", _hoisted_1, "Loading Node UI...")) : error.value ? (openBlock(), createElementBlock("div", _hoisted_2, [
133
+ _cache[1] || (_cache[1] = createBaseVNode("strong", null, "Error:", -1)),
134
+ createTextVNode(" " + toDisplayString(error.value), 1)
135
+ ])) : schema.value && formData.value && nodeUserDefined.value ? (openBlock(), createElementBlock("div", _hoisted_3, [
136
+ createVNode(GenericNodeSettings, {
137
+ modelValue: nodeUserDefined.value,
138
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => nodeUserDefined.value = $event)
139
+ }, {
140
+ default: withCtx(() => [
141
+ (openBlock(true), createElementBlock(Fragment, null, renderList(schema.value.settings_schema, (section, sectionKey) => {
142
+ return withDirectives((openBlock(), createElementBlock("div", {
143
+ key: sectionKey,
144
+ class: "listbox-wrapper"
145
+ }, [
146
+ createBaseVNode("div", _hoisted_4, toDisplayString(section.title || sectionKey.toString().replace(/_/g, " ")), 1),
147
+ section.description ? (openBlock(), createElementBlock("p", _hoisted_5, toDisplayString(section.description), 1)) : createCommentVNode("", true),
148
+ createBaseVNode("div", _hoisted_6, [
149
+ (openBlock(true), createElementBlock(Fragment, null, renderList(section.components, (component, componentKey) => {
150
+ return openBlock(), createElementBlock("div", {
151
+ key: componentKey,
152
+ class: "component-item"
153
+ }, [
154
+ component.component_type === "TextInput" ? (openBlock(), createBlock(_sfc_main$1, {
155
+ key: 0,
156
+ modelValue: formData.value[sectionKey][componentKey],
157
+ "onUpdate:modelValue": ($event) => formData.value[sectionKey][componentKey] = $event,
158
+ schema: component
159
+ }, null, 8, ["modelValue", "onUpdate:modelValue", "schema"])) : component.component_type === "NumericInput" ? (openBlock(), createBlock(_sfc_main$2, {
160
+ key: 1,
161
+ modelValue: formData.value[sectionKey][componentKey],
162
+ "onUpdate:modelValue": ($event) => formData.value[sectionKey][componentKey] = $event,
163
+ schema: component
164
+ }, null, 8, ["modelValue", "onUpdate:modelValue", "schema"])) : component.component_type === "SliderInput" ? (openBlock(), createBlock(SliderInput, {
165
+ key: 2,
166
+ modelValue: formData.value[sectionKey][componentKey],
167
+ "onUpdate:modelValue": ($event) => formData.value[sectionKey][componentKey] = $event,
168
+ schema: component
169
+ }, null, 8, ["modelValue", "onUpdate:modelValue", "schema"])) : component.component_type === "MultiSelect" ? (openBlock(), createBlock(_sfc_main$3, {
170
+ key: 3,
171
+ modelValue: formData.value[sectionKey][componentKey],
172
+ "onUpdate:modelValue": ($event) => formData.value[sectionKey][componentKey] = $event,
173
+ schema: component,
174
+ "incoming-columns": availableColumns.value
175
+ }, null, 8, ["modelValue", "onUpdate:modelValue", "schema", "incoming-columns"])) : component.component_type === "SingleSelect" ? (openBlock(), createBlock(_sfc_main$4, {
176
+ key: 4,
177
+ modelValue: formData.value[sectionKey][componentKey],
178
+ "onUpdate:modelValue": ($event) => formData.value[sectionKey][componentKey] = $event,
179
+ schema: component,
180
+ "incoming-columns": availableColumns.value
181
+ }, null, 8, ["modelValue", "onUpdate:modelValue", "schema", "incoming-columns"])) : component.component_type === "ToggleSwitch" ? (openBlock(), createBlock(_sfc_main$5, {
182
+ key: 5,
183
+ modelValue: formData.value[sectionKey][componentKey],
184
+ "onUpdate:modelValue": ($event) => formData.value[sectionKey][componentKey] = $event,
185
+ schema: component
186
+ }, null, 8, ["modelValue", "onUpdate:modelValue", "schema"])) : component.component_type === "ColumnSelector" ? (openBlock(), createBlock(ColumnSelector, {
187
+ key: 6,
188
+ modelValue: formData.value[sectionKey][componentKey],
189
+ "onUpdate:modelValue": ($event) => formData.value[sectionKey][componentKey] = $event,
190
+ schema: component,
191
+ "incoming-columns": columnTypes.value
192
+ }, null, 8, ["modelValue", "onUpdate:modelValue", "schema", "incoming-columns"])) : (openBlock(), createElementBlock("div", _hoisted_7, " Unknown component type: " + toDisplayString(component.component_type), 1))
193
+ ]);
194
+ }), 128))
195
+ ])
196
+ ])), [
197
+ [vShow, !section.hidden]
198
+ ]);
199
+ }), 128))
200
+ ]),
201
+ _: 1
202
+ }, 8, ["modelValue"])
203
+ ])) : createCommentVNode("", true);
204
+ };
205
+ }
206
+ });
207
+ const CustomNode_vue_vue_type_style_index_0_scoped_d7137248_lang = "";
208
+ const CustomNode = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-d7137248"]]);
209
+ export {
210
+ CustomNode as default
211
+ };
@@ -1,5 +1,5 @@
1
- import { f as fetchSecretsApi } from "./secretApi-baceb6f9.js";
2
- import { d as defineComponent, r as ref, n as onMounted, c as openBlock, e as createElementBlock, p as createBaseVNode, t as toDisplayString, F as Fragment, q as renderList, i as createCommentVNode, _ as _export_sfc } from "./index-683fc198.js";
1
+ import { f as fetchSecretsApi } from "./secretApi-b3cb072e.js";
2
+ import { d as defineComponent, r as ref, n as onMounted, c as openBlock, e as createElementBlock, p as createBaseVNode, t as toDisplayString, F as Fragment, q as renderList, i as createCommentVNode, _ as _export_sfc } from "./index-5ec791df.js";
3
3
  const _hoisted_1 = { class: "connection-settings-container" };
4
4
  const _hoisted_2 = { class: "toggle-button" };
5
5
  const _hoisted_3 = {
@@ -147,5 +147,5 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
147
147
  const DatabaseConnectionSettings_vue_vue_type_style_index_0_scoped_2fd11b08_lang = "";
148
148
  const DatabaseConnectionSettings = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-2fd11b08"]]);
149
149
  export {
150
- DatabaseConnectionSettings as D
150
+ DatabaseConnectionSettings as default
151
151
  };
@@ -1,5 +1,5 @@
1
- import { f as fetchDatabaseConnectionsInterfaces, c as createDatabaseConnectionApi, d as deleteDatabaseConnectionApi } from "./api-023d1733.js";
2
- import { d as defineComponent, r as ref, m as watch, l as computed, c as openBlock, e as createElementBlock, p as createBaseVNode, a5 as withDirectives, a6 as vModelText, ag as vModelSelect, ah as vModelDynamic, s as normalizeClass, ai as vModelCheckbox, t as toDisplayString, v as withModifiers, n as onMounted, g as createTextVNode, F as Fragment, q as renderList, f as createVNode, w as withCtx, u as unref, z as ElMessage, aj as ElDialog, ak as ElButton, _ as _export_sfc } from "./index-683fc198.js";
1
+ import { f as fetchDatabaseConnectionsInterfaces, c as createDatabaseConnectionApi, d as deleteDatabaseConnectionApi } from "./api-2d1394bd.js";
2
+ import { d as defineComponent, r as ref, m as watch, l as computed, c as openBlock, e as createElementBlock, p as createBaseVNode, a8 as withDirectives, a9 as vModelText, ak as vModelSelect, al as vModelDynamic, s as normalizeClass, am as vModelCheckbox, t as toDisplayString, v as withModifiers, n as onMounted, g as createTextVNode, F as Fragment, q as renderList, f as createVNode, w as withCtx, u as unref, z as ElMessage, an as ElDialog, ao as ElButton, _ as _export_sfc } from "./index-5ec791df.js";
3
3
  const _hoisted_1$1 = { class: "form-grid" };
4
4
  const _hoisted_2$1 = { class: "form-field" };
5
5
  const _hoisted_3$1 = { class: "form-field" };