Flowfile 0.3.9__py3-none-any.whl → 0.5.1__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.
Files changed (201) hide show
  1. flowfile/__init__.py +8 -1
  2. flowfile/api.py +1 -3
  3. flowfile/web/static/assets/{CloudConnectionManager-c97c25f8.js → CloudConnectionManager-0dfba9f2.js} +2 -2
  4. flowfile/web/static/assets/{CloudStorageReader-f1ff509e.js → CloudStorageReader-d5b1b6c9.js} +11 -78
  5. flowfile/web/static/assets/{CloudStorageWriter-034f8b78.js → CloudStorageWriter-00d87aad.js} +12 -79
  6. flowfile/web/static/assets/{CloudStorageWriter-49c9a4b2.css → CloudStorageWriter-b0ee067f.css} +24 -24
  7. flowfile/web/static/assets/ColumnSelector-4685e75d.js +83 -0
  8. flowfile/web/static/assets/ColumnSelector-47996a16.css +10 -0
  9. flowfile/web/static/assets/ContextMenu-23e909da.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-70ae0c79.js +41 -0
  13. flowfile/web/static/assets/ContextMenu-c13f91d0.css +26 -0
  14. flowfile/web/static/assets/ContextMenu-f149cf7c.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-702a3edd.js} +14 -84
  17. flowfile/web/static/assets/CustomNode-74a37f74.css +32 -0
  18. flowfile/web/static/assets/CustomNode-b1519993.js +211 -0
  19. flowfile/web/static/assets/{DatabaseConnectionSettings-d5c625b3.js → DatabaseConnectionSettings-6f3e4ea5.js} +3 -3
  20. flowfile/web/static/assets/{DatabaseManager-265adc5e.js → DatabaseManager-cf5ef661.js} +2 -2
  21. flowfile/web/static/assets/{DatabaseReader-f50c6558.css → DatabaseReader-ae61773c.css} +0 -27
  22. flowfile/web/static/assets/{DatabaseReader-0b10551e.js → DatabaseReader-d38c7295.js} +14 -114
  23. flowfile/web/static/assets/{DatabaseWriter-c17c6916.js → DatabaseWriter-b04ef46a.js} +13 -74
  24. flowfile/web/static/assets/{ExploreData-5bdae813.css → ExploreData-2d0cf4db.css} +8 -14
  25. flowfile/web/static/assets/ExploreData-5fa10ed8.js +192 -0
  26. flowfile/web/static/assets/{ExternalSource-3a66556c.js → ExternalSource-d39af878.js} +8 -79
  27. flowfile/web/static/assets/{Filter-91ad87e7.js → Filter-9b6d08db.js} +12 -85
  28. flowfile/web/static/assets/{Filter-a9d08ba1.css → Filter-f62091b3.css} +3 -3
  29. flowfile/web/static/assets/{Formula-3c395ab1.js → Formula-6b04fb1d.js} +20 -87
  30. flowfile/web/static/assets/{Formula-29f19d21.css → Formula-bb96803d.css} +4 -4
  31. flowfile/web/static/assets/{FuzzyMatch-6857de82.css → FuzzyMatch-1010f966.css} +42 -42
  32. flowfile/web/static/assets/{FuzzyMatch-2df0d230.js → FuzzyMatch-999521f4.js} +16 -87
  33. flowfile/web/static/assets/{GraphSolver-d285877f.js → GraphSolver-17dd2198.js} +13 -159
  34. flowfile/web/static/assets/GraphSolver-f0cb7bfb.css +22 -0
  35. flowfile/web/static/assets/{GroupBy-0bd1cc6b.js → GroupBy-6b039e18.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-24d0f113.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-34639209.js} +11 -82
  41. flowfile/web/static/assets/MultiSelect-0e8724a3.js +5 -0
  42. flowfile/web/static/assets/MultiSelect.vue_vue_type_script_setup_true_lang-b0e538c2.js +63 -0
  43. flowfile/web/static/assets/NumericInput-3d63a470.js +5 -0
  44. flowfile/web/static/assets/NumericInput.vue_vue_type_script_setup_true_lang-e0edeccc.js +35 -0
  45. flowfile/web/static/assets/Output-283fe388.css +37 -0
  46. flowfile/web/static/assets/{Output-411ecaee.js → Output-edea9802.js} +62 -273
  47. flowfile/web/static/assets/{Pivot-89db4b04.js → Pivot-61d19301.js} +14 -138
  48. flowfile/web/static/assets/Pivot-cf333e3d.css +22 -0
  49. flowfile/web/static/assets/PivotValidation-891ddfb0.css +13 -0
  50. flowfile/web/static/assets/PivotValidation-c46cd420.css +13 -0
  51. flowfile/web/static/assets/PivotValidation-de9f43fe.js +61 -0
  52. flowfile/web/static/assets/PivotValidation-f97fec5b.js +61 -0
  53. flowfile/web/static/assets/{PolarsCode-a9f974f8.js → PolarsCode-bc3c9984.js} +13 -80
  54. flowfile/web/static/assets/Read-64a3f259.js +218 -0
  55. flowfile/web/static/assets/Read-e808b239.css +62 -0
  56. flowfile/web/static/assets/RecordCount-3d5039be.js +53 -0
  57. flowfile/web/static/assets/{RecordId-55ae7d36.js → RecordId-597510e0.js} +8 -80
  58. flowfile/web/static/assets/SQLQueryComponent-36cef432.css +27 -0
  59. flowfile/web/static/assets/SQLQueryComponent-df51adbe.js +38 -0
  60. flowfile/web/static/assets/{Sample-b4a18476.js → Sample-4be0a507.js} +8 -77
  61. flowfile/web/static/assets/{SecretManager-b066d13a.js → SecretManager-4839be57.js} +2 -2
  62. flowfile/web/static/assets/{Select-727688dc.js → Select-9b72f201.js} +11 -85
  63. flowfile/web/static/assets/SettingsSection-2e4d03c4.css +21 -0
  64. flowfile/web/static/assets/SettingsSection-5c696bee.css +20 -0
  65. flowfile/web/static/assets/SettingsSection-71e6b7e3.css +21 -0
  66. flowfile/web/static/assets/SettingsSection-7ded385d.js +45 -0
  67. flowfile/web/static/assets/{SettingsSection-695ac487.js → SettingsSection-e1e9c953.js} +2 -40
  68. flowfile/web/static/assets/SettingsSection-f0f75a42.js +53 -0
  69. flowfile/web/static/assets/SingleSelect-6c777aac.js +5 -0
  70. flowfile/web/static/assets/SingleSelect.vue_vue_type_script_setup_true_lang-33e3ff9b.js +62 -0
  71. flowfile/web/static/assets/SliderInput-7cb93e62.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-6cbde21a.js} +12 -97
  75. flowfile/web/static/assets/TextInput-d9a40c11.js +5 -0
  76. flowfile/web/static/assets/TextInput.vue_vue_type_script_setup_true_lang-5896c375.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-c4fcbf4d.js} +14 -83
  79. flowfile/web/static/assets/ToggleSwitch-4ef91d19.js +5 -0
  80. flowfile/web/static/assets/ToggleSwitch.vue_vue_type_script_setup_true_lang-38478c20.js +31 -0
  81. flowfile/web/static/assets/{UnavailableFields-8b0cb48e.js → UnavailableFields-a03f512c.js} +2 -2
  82. flowfile/web/static/assets/{Union-8d9ac7f9.css → Union-af6c3d9b.css} +6 -6
  83. flowfile/web/static/assets/Union-bfe9b996.js +77 -0
  84. flowfile/web/static/assets/{Unique-af5a80b4.js → Unique-5d023a27.js} +23 -104
  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-91cc5354.js} +12 -166
  88. flowfile/web/static/assets/UnpivotValidation-0d240eeb.css +13 -0
  89. flowfile/web/static/assets/UnpivotValidation-7ee2de44.js +51 -0
  90. flowfile/web/static/assets/{ExploreData-18a4fe52.js → VueGraphicWalker-e51b9924.js} +4 -264
  91. flowfile/web/static/assets/VueGraphicWalker-ed5ab88b.css +6 -0
  92. flowfile/web/static/assets/{api-cb00cce6.js → api-c1bad5ca.js} +1 -1
  93. flowfile/web/static/assets/{api-023d1733.js → api-cf1221f0.js} +1 -1
  94. flowfile/web/static/assets/{designer-2197d782.css → designer-8da3ba3a.css} +859 -201
  95. flowfile/web/static/assets/{designer-6c322d8e.js → designer-9633482a.js} +2297 -733
  96. flowfile/web/static/assets/{documentation-4d1fafe1.js → documentation-ca400224.js} +1 -1
  97. flowfile/web/static/assets/{dropDown-0b46dd77.js → dropDown-614b998d.js} +1 -1
  98. flowfile/web/static/assets/{fullEditor-ec4e4f95.js → fullEditor-f7971590.js} +2 -2
  99. flowfile/web/static/assets/{genericNodeSettings-def5879b.js → genericNodeSettings-4fe5f36b.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-5429bbf8.js} +208 -31
  102. flowfile/web/static/assets/nodeInput-5d0d6b79.js +41 -0
  103. flowfile/web/static/assets/outputCsv-076b85ab.js +86 -0
  104. flowfile/web/static/assets/{Output-48f81019.css → outputCsv-9cc59e0b.css} +0 -143
  105. flowfile/web/static/assets/outputExcel-0fd17dbe.js +56 -0
  106. flowfile/web/static/assets/outputExcel-b41305c0.css +102 -0
  107. flowfile/web/static/assets/outputParquet-b61e0847.js +31 -0
  108. flowfile/web/static/assets/outputParquet-cf8cf3f2.css +4 -0
  109. flowfile/web/static/assets/readCsv-a8bb8b61.js +179 -0
  110. flowfile/web/static/assets/readCsv-c767cb37.css +52 -0
  111. flowfile/web/static/assets/readExcel-67b4aee0.js +201 -0
  112. flowfile/web/static/assets/readExcel-806d2826.css +64 -0
  113. flowfile/web/static/assets/readParquet-48c81530.css +19 -0
  114. flowfile/web/static/assets/readParquet-92ce1dbc.js +23 -0
  115. flowfile/web/static/assets/{secretApi-baceb6f9.js → secretApi-68435402.js} +1 -1
  116. flowfile/web/static/assets/{selectDynamic-de91449a.js → selectDynamic-92e25ee3.js} +7 -7
  117. flowfile/web/static/assets/{selectDynamic-b062bc9b.css → selectDynamic-aa913ff4.css} +16 -16
  118. flowfile/web/static/assets/user-defined-icon-0ae16c90.png +0 -0
  119. flowfile/web/static/assets/{vue-codemirror.esm-dc5e3348.js → vue-codemirror.esm-41b0e0d7.js} +65 -36
  120. flowfile/web/static/assets/{vue-content-loader.es-ba94b82f.js → vue-content-loader.es-2c8e608f.js} +1 -1
  121. flowfile/web/static/index.html +2 -2
  122. {flowfile-0.3.9.dist-info → flowfile-0.5.1.dist-info}/METADATA +5 -3
  123. {flowfile-0.3.9.dist-info → flowfile-0.5.1.dist-info}/RECORD +191 -121
  124. {flowfile-0.3.9.dist-info → flowfile-0.5.1.dist-info}/WHEEL +1 -1
  125. {flowfile-0.3.9.dist-info → flowfile-0.5.1.dist-info}/entry_points.txt +1 -0
  126. flowfile_core/__init__.py +3 -0
  127. flowfile_core/configs/flow_logger.py +5 -13
  128. flowfile_core/configs/node_store/__init__.py +30 -0
  129. flowfile_core/configs/node_store/nodes.py +383 -99
  130. flowfile_core/configs/node_store/user_defined_node_registry.py +193 -0
  131. flowfile_core/configs/settings.py +2 -1
  132. flowfile_core/database/connection.py +5 -21
  133. flowfile_core/fileExplorer/funcs.py +239 -121
  134. flowfile_core/flowfile/analytics/analytics_processor.py +1 -0
  135. flowfile_core/flowfile/code_generator/code_generator.py +62 -64
  136. flowfile_core/flowfile/flow_data_engine/create/funcs.py +73 -56
  137. flowfile_core/flowfile/flow_data_engine/flow_data_engine.py +77 -86
  138. flowfile_core/flowfile/flow_data_engine/flow_file_column/interface.py +4 -0
  139. flowfile_core/flowfile/flow_data_engine/flow_file_column/main.py +19 -34
  140. flowfile_core/flowfile/flow_data_engine/flow_file_column/type_registry.py +36 -0
  141. flowfile_core/flowfile/flow_data_engine/fuzzy_matching/prepare_for_fuzzy_match.py +23 -23
  142. flowfile_core/flowfile/flow_data_engine/join/utils.py +1 -1
  143. flowfile_core/flowfile/flow_data_engine/join/verify_integrity.py +9 -4
  144. flowfile_core/flowfile/flow_data_engine/subprocess_operations/subprocess_operations.py +212 -86
  145. flowfile_core/flowfile/flow_data_engine/utils.py +2 -0
  146. flowfile_core/flowfile/flow_graph.py +240 -54
  147. flowfile_core/flowfile/flow_node/flow_node.py +48 -13
  148. flowfile_core/flowfile/flow_node/models.py +2 -1
  149. flowfile_core/flowfile/handler.py +24 -5
  150. flowfile_core/flowfile/manage/compatibility_enhancements.py +404 -41
  151. flowfile_core/flowfile/manage/io_flowfile.py +394 -0
  152. flowfile_core/flowfile/node_designer/__init__.py +47 -0
  153. flowfile_core/flowfile/node_designer/_type_registry.py +197 -0
  154. flowfile_core/flowfile/node_designer/custom_node.py +371 -0
  155. flowfile_core/flowfile/node_designer/ui_components.py +277 -0
  156. flowfile_core/flowfile/schema_callbacks.py +17 -10
  157. flowfile_core/flowfile/setting_generator/settings.py +15 -10
  158. flowfile_core/main.py +5 -1
  159. flowfile_core/routes/routes.py +73 -30
  160. flowfile_core/routes/user_defined_components.py +55 -0
  161. flowfile_core/schemas/cloud_storage_schemas.py +0 -2
  162. flowfile_core/schemas/input_schema.py +228 -65
  163. flowfile_core/schemas/output_model.py +5 -2
  164. flowfile_core/schemas/schemas.py +153 -35
  165. flowfile_core/schemas/transform_schema.py +1083 -412
  166. flowfile_core/schemas/yaml_types.py +103 -0
  167. flowfile_core/types.py +156 -0
  168. flowfile_core/utils/validate_setup.py +3 -1
  169. flowfile_frame/__init__.py +3 -1
  170. flowfile_frame/flow_frame.py +31 -24
  171. flowfile_frame/flow_frame_methods.py +12 -9
  172. flowfile_worker/__init__.py +9 -35
  173. flowfile_worker/create/__init__.py +3 -21
  174. flowfile_worker/create/funcs.py +68 -56
  175. flowfile_worker/create/models.py +130 -62
  176. flowfile_worker/main.py +5 -2
  177. flowfile_worker/routes.py +52 -13
  178. shared/__init__.py +15 -0
  179. shared/storage_config.py +258 -0
  180. tools/migrate/README.md +56 -0
  181. tools/migrate/__init__.py +12 -0
  182. tools/migrate/__main__.py +131 -0
  183. tools/migrate/legacy_schemas.py +621 -0
  184. tools/migrate/migrate.py +598 -0
  185. tools/migrate/tests/__init__.py +0 -0
  186. tools/migrate/tests/conftest.py +23 -0
  187. tools/migrate/tests/test_migrate.py +627 -0
  188. tools/migrate/tests/test_migration_e2e.py +1010 -0
  189. tools/migrate/tests/test_node_migrations.py +813 -0
  190. flowfile/web/static/assets/GraphSolver-17fd26db.css +0 -68
  191. flowfile/web/static/assets/Pivot-f415e85f.css +0 -35
  192. flowfile/web/static/assets/Read-80dc1675.css +0 -197
  193. flowfile/web/static/assets/Read-c3b1929c.js +0 -701
  194. flowfile/web/static/assets/RecordCount-4e95f98e.js +0 -122
  195. flowfile/web/static/assets/Union-89fd73dc.js +0 -146
  196. flowfile/web/static/assets/Unpivot-246e9bbd.css +0 -77
  197. flowfile/web/static/assets/nodeTitle-a16db7c3.js +0 -227
  198. flowfile/web/static/assets/nodeTitle-f4b12bcb.css +0 -134
  199. flowfile_core/flowfile/manage/open_flowfile.py +0 -135
  200. {flowfile-0.3.9.dist-info → flowfile-0.5.1.dist-info/licenses}/LICENSE +0 -0
  201. /flowfile_core/flowfile/manage/manage_flowfile.py → /tools/__init__.py +0 -0
@@ -1,5 +1,11 @@
1
- import { a as axios, d as defineComponent, r as ref, o as onUnmounted, b as resolveComponent, c as openBlock, e as createElementBlock, f as createVNode, w as withCtx, g as createTextVNode, u as unref, h as createBlock, i as createCommentVNode, E as ElNotification, _ as _export_sfc, j as defineStore, k as getDefaultExportFromCjs, l as computed$1, m as watch$1, n as onMounted, p as createBaseVNode, t as toDisplayString, F as Fragment, q as renderList, s as normalizeClass, v as withModifiers, x as withKeys, y as _imports_1, z as ElMessage, A as ElMessageBox, B as inject, C as effectScope, D as provide, G as getCurrentInstance, H as getCurrentScope, I as onScopeDispose, J as createPropsRestProxy, K as toRef, L as renderSlot, M as reactive, N as useSlots, O as isRef, P as toRefs$1, Q as customRef, R as nextTick, S as onBeforeMount, T as normalizeStyle, U as onBeforeUnmount, V as isMemoSame, W as toValue$1, X as shallowRef, Y as h, Z as markRaw$1, $ as readonly, a0 as useAttrs, a1 as mergeProps, a2 as resolveDynamicComponent, a3 as watchEffect, a4 as normalizeProps, a5 as withDirectives, a6 as vModelText, a7 as Teleport, a8 as guardReactiveProps, a9 as __vitePreload, aa as render, ab as vShow, ac as authService, ad as flowfileCorebaseURL } from "./index-683fc198.js";
2
- import { u as useNodeStore, P as PopOver, a as Parser, N as NodeSet, b as NodeType, D as DefaultBufferLength, c as NodeProp, T as Tree, I as IterMode, s as styleTags, t as tags, L as LanguageSupport, d as syntaxTree, i as ifNotIn, e as LRLanguage, f as indentNodeProp, g as delimitedIndent, h as foldNodeProp, j as foldInside, k as completeFromList, l as NodeWeakMap, m as snippetCompletion, H as HighlightStyle, n as syntaxHighlighting, E as EditorView, o as T } from "./vue-codemirror.esm-dc5e3348.js";
1
+ var __defProp = Object.defineProperty;
2
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
+ var __publicField = (obj, key, value) => {
4
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
5
+ return value;
6
+ };
7
+ import { a as axios, r as ref, o as onUnmounted, E as ElNotification, d as defineComponent, b as resolveComponent, c as openBlock, e as createElementBlock, f as createVNode, w as withCtx, g as createTextVNode, u as unref, h as createBlock, i as createCommentVNode, _ as _export_sfc, j as defineStore, k as getDefaultExportFromCjs, l as computed$1, m as watch$1, n as onMounted, p as createBaseVNode, t as toDisplayString, F as Fragment, q as renderList, s as normalizeClass, v as withModifiers, x as withKeys, y as _imports_1, z as ElMessage, A as ElMessageBox, B as inject, C as effectScope, D as provide, G as getCurrentInstance, H as getCurrentScope, I as onScopeDispose, J as createPropsRestProxy, K as toRef, L as renderSlot, M as reactive, N as useSlots, O as isRef, P as toRefs$1, Q as customRef, R as nextTick, S as onBeforeMount, T as normalizeStyle, U as onBeforeUnmount, V as isMemoSame, W as toValue$1, X as shallowRef, Y as h, Z as markRaw$1, $ as readonly, a0 as useAttrs, a1 as mergeProps, a2 as resolveDynamicComponent, a3 as watchEffect, a4 as normalizeProps, a5 as defineAsyncComponent, a6 as onErrorCaptured, a7 as __vitePreload, a8 as withDirectives, a9 as vModelText, aa as Teleport, ab as guardReactiveProps, ac as Transition$2, ad as createStaticVNode, ae as render, af as vShow, ag as authService, ah as flowfileCorebaseURL } from "./index-5429bbf8.js";
8
+ import { u as useNodeStore, P as PopOver, a as Parser, N as NodeSet, b as NodeType, D as DefaultBufferLength, c as NodeProp, T as Tree, I as IterMode, s as styleTags, t as tags, L as LanguageSupport, d as syntaxTree, i as ifNotIn, e as LRLanguage, f as indentNodeProp, g as delimitedIndent, h as foldNodeProp, j as foldInside, k as completeFromList, l as NodeWeakMap, m as snippetCompletion, H as HighlightStyle, n as syntaxHighlighting, E as EditorView, o as T } from "./vue-codemirror.esm-41b0e0d7.js";
3
9
  const saveFlow = async (flowId, flowPath) => {
4
10
  try {
5
11
  await axios.get("/save_flow", {
@@ -15,14 +21,16 @@ const saveFlow = async (flowId, flowPath) => {
15
21
  console.error("There was an error saving the flow:", error);
16
22
  }
17
23
  };
18
- async function createFlow(flowPath) {
19
- console.log("Creating flow", flowPath);
24
+ async function createFlow(flowPath = null, name = null) {
20
25
  const response = await axios.post(
21
26
  "/editor/create_flow",
22
27
  {},
23
28
  {
24
29
  headers: { accept: "application/json" },
25
- params: { flow_path: flowPath }
30
+ params: {
31
+ flow_path: flowPath,
32
+ name
33
+ }
26
34
  }
27
35
  );
28
36
  if (response.status === 200) {
@@ -72,8 +80,291 @@ const updateRunStatus = async (flowId, nodeStore, showRunResults = true) => {
72
80
  }
73
81
  return response;
74
82
  };
75
- const _hoisted_1$h = { class: "button-group" };
76
- const _sfc_main$k = /* @__PURE__ */ defineComponent({
83
+ const _FlowExecutionState = class _FlowExecutionState {
84
+ constructor() {
85
+ __publicField(this, "pollingIntervals", /* @__PURE__ */ new Map());
86
+ __publicField(this, "activeExecutions", /* @__PURE__ */ new Map());
87
+ }
88
+ static getInstance() {
89
+ if (!_FlowExecutionState.instance) {
90
+ _FlowExecutionState.instance = new _FlowExecutionState();
91
+ }
92
+ return _FlowExecutionState.instance;
93
+ }
94
+ setPollingInterval(key, interval2) {
95
+ this.pollingIntervals.set(key, interval2);
96
+ }
97
+ getPollingInterval(key) {
98
+ return this.pollingIntervals.get(key) || null;
99
+ }
100
+ clearPollingInterval(key) {
101
+ const interval2 = this.pollingIntervals.get(key);
102
+ if (interval2) {
103
+ clearInterval(interval2);
104
+ this.pollingIntervals.delete(key);
105
+ }
106
+ }
107
+ setExecutionState(key, state2) {
108
+ this.activeExecutions.set(key, state2);
109
+ }
110
+ getExecutionState(key) {
111
+ return this.activeExecutions.get(key) || false;
112
+ }
113
+ clearAll() {
114
+ this.pollingIntervals.forEach((interval2) => clearInterval(interval2));
115
+ this.pollingIntervals.clear();
116
+ this.activeExecutions.clear();
117
+ }
118
+ };
119
+ __publicField(_FlowExecutionState, "instance");
120
+ let FlowExecutionState = _FlowExecutionState;
121
+ function useFlowExecution(flowId, pollingConfig = {
122
+ interval: 2e3,
123
+ enabled: true,
124
+ maxAttempts: Infinity
125
+ }, options = {}) {
126
+ const nodeStore = useNodeStore();
127
+ const state2 = FlowExecutionState.getInstance();
128
+ const localPollingInterval = ref(null);
129
+ const isExecuting = ref(false);
130
+ const getFlowId = () => {
131
+ return typeof flowId === "number" ? flowId : flowId.value;
132
+ };
133
+ const getPollingKey = (suffix = "") => {
134
+ const customKey = options.pollingKey || `flow_${getFlowId()}`;
135
+ return suffix ? `${customKey}_${suffix}` : customKey;
136
+ };
137
+ const freezeFlow = () => {
138
+ const vueFlowElement = nodeStore.vueFlowInstance;
139
+ if (vueFlowElement) {
140
+ vueFlowElement.nodesDraggable.value = false;
141
+ vueFlowElement.nodesConnectable.value = false;
142
+ vueFlowElement.elementsSelectable.value = false;
143
+ }
144
+ };
145
+ const unFreezeFlow = () => {
146
+ const vueFlowElement = nodeStore.vueFlowInstance;
147
+ if (vueFlowElement) {
148
+ vueFlowElement.nodesDraggable.value = true;
149
+ vueFlowElement.nodesConnectable.value = true;
150
+ vueFlowElement.elementsSelectable.value = true;
151
+ }
152
+ };
153
+ const showNotification = (title, message, type, dangerouslyUseHTMLString) => {
154
+ ElNotification({
155
+ title,
156
+ message,
157
+ type,
158
+ position: "top-left",
159
+ dangerouslyUseHTMLString
160
+ });
161
+ };
162
+ const startPolling = (checkFn, pollingKeySuffix = "") => {
163
+ const key = getPollingKey(pollingKeySuffix);
164
+ if (options.persistPolling) {
165
+ const existingInterval = state2.getPollingInterval(key);
166
+ if (existingInterval === null && pollingConfig.enabled) {
167
+ const interval2 = setInterval(checkFn, pollingConfig.interval || 2e3);
168
+ state2.setPollingInterval(key, interval2);
169
+ }
170
+ } else {
171
+ if (localPollingInterval.value === null && pollingConfig.enabled) {
172
+ localPollingInterval.value = setInterval(
173
+ checkFn,
174
+ pollingConfig.interval || 2e3
175
+ );
176
+ }
177
+ }
178
+ };
179
+ const stopPolling = (pollingKeySuffix = "") => {
180
+ if (options.persistPolling) {
181
+ const key = getPollingKey(pollingKeySuffix);
182
+ state2.clearPollingInterval(key);
183
+ } else {
184
+ if (localPollingInterval.value !== null) {
185
+ clearInterval(localPollingInterval.value);
186
+ localPollingInterval.value = null;
187
+ }
188
+ }
189
+ };
190
+ const isPollingActive = (pollingKeySuffix = "") => {
191
+ if (options.persistPolling) {
192
+ const key = getPollingKey(pollingKeySuffix);
193
+ return state2.getPollingInterval(key) !== null;
194
+ }
195
+ return localPollingInterval.value !== null;
196
+ };
197
+ const createNotificationConfig = (runInfo) => ({
198
+ title: runInfo.success ? "Success" : "Error",
199
+ message: runInfo.success ? "The operation has completed successfully" : "There were issues with the operation, check the logging for more information",
200
+ type: runInfo.success ? "success" : "error"
201
+ });
202
+ const checkRunStatus = async (customSuccessMessage, pollingKeySuffix = "") => {
203
+ try {
204
+ const response = await updateRunStatus(getFlowId(), nodeStore);
205
+ if (response.status === 200) {
206
+ stopPolling(pollingKeySuffix);
207
+ unFreezeFlow();
208
+ nodeStore.isRunning = false;
209
+ isExecuting.value = false;
210
+ state2.setExecutionState(getPollingKey(pollingKeySuffix), false);
211
+ console.log("response data", response.data);
212
+ const notificationConfig = createNotificationConfig(response.data);
213
+ if (customSuccessMessage && response.data.success) {
214
+ notificationConfig.message = customSuccessMessage;
215
+ }
216
+ showNotification(
217
+ notificationConfig.title,
218
+ notificationConfig.message,
219
+ notificationConfig.type
220
+ );
221
+ } else if (response.status === 404) {
222
+ stopPolling(pollingKeySuffix);
223
+ unFreezeFlow();
224
+ nodeStore.isRunning = false;
225
+ isExecuting.value = false;
226
+ state2.setExecutionState(getPollingKey(pollingKeySuffix), false);
227
+ nodeStore.runResults = {};
228
+ }
229
+ } catch (error) {
230
+ console.error("Error checking run status:", error);
231
+ stopPolling(pollingKeySuffix);
232
+ unFreezeFlow();
233
+ nodeStore.isRunning = false;
234
+ isExecuting.value = false;
235
+ state2.setExecutionState(getPollingKey(pollingKeySuffix), false);
236
+ }
237
+ };
238
+ const escapeHtml = (text) => {
239
+ const div = document.createElement("div");
240
+ div.textContent = text;
241
+ return div.innerHTML;
242
+ };
243
+ const runFlow = async () => {
244
+ const flowSettings = await getFlowSettings(getFlowId());
245
+ if (!flowSettings) {
246
+ throw new Error("Failed to retrieve flow settings");
247
+ }
248
+ freezeFlow();
249
+ nodeStore.resetNodeResult();
250
+ isExecuting.value = true;
251
+ nodeStore.isRunning = true;
252
+ nodeStore.hideLogViewerForThisRun = false;
253
+ state2.setExecutionState(getPollingKey(), true);
254
+ const executionLocationText = flowSettings.execution_location === "local" ? "Local" : "Remote";
255
+ const escapedFlowName = escapeHtml(flowSettings.name);
256
+ const notificationMessage = `
257
+ <div style="line-height: 1.4;">
258
+ <div><strong>Flow:</strong> "${escapedFlowName}"</div>
259
+ <div><strong>Mode:</strong> ${flowSettings.execution_mode}</div>
260
+ <div><strong>Location:</strong> ${executionLocationText}</div>
261
+ </div>
262
+ `;
263
+ showNotification("🚀 Flow Started", notificationMessage, void 0, true);
264
+ try {
265
+ await axios.post("/flow/run/", null, {
266
+ params: { flow_id: getFlowId() },
267
+ headers: { accept: "application/json" }
268
+ });
269
+ nodeStore.showLogViewer();
270
+ startPolling(() => checkRunStatus());
271
+ } catch (error) {
272
+ console.error("Error starting run:", error);
273
+ unFreezeFlow();
274
+ nodeStore.isRunning = false;
275
+ isExecuting.value = false;
276
+ state2.setExecutionState(getPollingKey(), false);
277
+ showNotification("Error", "Failed to start the flow", "error");
278
+ }
279
+ };
280
+ const triggerNodeFetch = async (nodeId) => {
281
+ var _a, _b;
282
+ const pollingKeySuffix = `node_${nodeId}`;
283
+ if (isPollingActive(pollingKeySuffix)) {
284
+ console.log(`Node ${nodeId} fetch already in progress`);
285
+ return;
286
+ }
287
+ freezeFlow();
288
+ nodeStore.resetNodeResult();
289
+ isExecuting.value = true;
290
+ nodeStore.isRunning = true;
291
+ state2.setExecutionState(getPollingKey(pollingKeySuffix), true);
292
+ showNotification(
293
+ "📊 Fetching Node Data",
294
+ `Starting data fetch for node ${nodeId}...`,
295
+ void 0,
296
+ false
297
+ );
298
+ try {
299
+ await axios.post("/node/trigger_fetch_data", null, {
300
+ params: {
301
+ flow_id: getFlowId(),
302
+ node_id: nodeId
303
+ },
304
+ headers: { accept: "application/json" }
305
+ });
306
+ nodeStore.showLogViewer();
307
+ startPolling(
308
+ () => checkRunStatus("Node data has been fetched successfully", pollingKeySuffix),
309
+ pollingKeySuffix
310
+ );
311
+ } catch (error) {
312
+ console.error("Error triggering node fetch:", error);
313
+ unFreezeFlow();
314
+ nodeStore.isRunning = false;
315
+ isExecuting.value = false;
316
+ state2.setExecutionState(getPollingKey(pollingKeySuffix), false);
317
+ const errorMessage = ((_b = (_a = error.response) == null ? void 0 : _a.data) == null ? void 0 : _b.detail) || "Failed to fetch node data";
318
+ showNotification("Error", errorMessage, "error");
319
+ throw error;
320
+ }
321
+ };
322
+ const cancelFlow = async () => {
323
+ try {
324
+ await axios.post("/flow/cancel/", null, {
325
+ params: { flow_id: getFlowId() },
326
+ headers: { accept: "application/json" }
327
+ });
328
+ showNotification("Cancelling", "The operation is being cancelled");
329
+ unFreezeFlow();
330
+ nodeStore.isRunning = false;
331
+ isExecuting.value = false;
332
+ stopPolling();
333
+ if (options.persistPolling) {
334
+ for (let i2 = 0; i2 < 100; i2++) {
335
+ state2.clearPollingInterval(getPollingKey(`node_${i2}`));
336
+ }
337
+ }
338
+ } catch (error) {
339
+ console.error("Error cancelling run:", error);
340
+ showNotification("Error", "Failed to cancel the operation", "error");
341
+ }
342
+ };
343
+ onUnmounted(() => {
344
+ if (!options.persistPolling && localPollingInterval.value !== null) {
345
+ clearInterval(localPollingInterval.value);
346
+ localPollingInterval.value = null;
347
+ }
348
+ });
349
+ return {
350
+ // State
351
+ isExecuting,
352
+ // Methods
353
+ runFlow,
354
+ triggerNodeFetch,
355
+ cancelFlow,
356
+ showNotification,
357
+ startPolling,
358
+ stopPolling,
359
+ checkRunStatus,
360
+ isPollingActive,
361
+ // Expose flow control if needed
362
+ freezeFlow,
363
+ unFreezeFlow
364
+ };
365
+ }
366
+ const _hoisted_1$k = { class: "button-group" };
367
+ const _sfc_main$n = /* @__PURE__ */ defineComponent({
77
368
  __name: "run",
78
369
  props: {
79
370
  flowId: { type: Number, required: true },
@@ -84,133 +375,20 @@ const _sfc_main$k = /* @__PURE__ */ defineComponent({
84
375
  enabled: true,
85
376
  maxAttempts: Infinity
86
377
  })
378
+ },
379
+ persistPolling: {
380
+ type: Boolean,
381
+ default: false
382
+ // RunButton doesn't need persistent polling by default
87
383
  }
88
384
  },
89
385
  emits: ["logs-start", "logs-stop"],
90
386
  setup(__props, { expose: __expose, emit: __emit }) {
91
387
  const nodeStore = useNodeStore();
92
- const pollingInterval = ref(null);
93
388
  const props2 = __props;
94
- const freezeFlow = () => {
95
- let vueFlowElement = nodeStore.vueFlowInstance;
96
- if (vueFlowElement) {
97
- vueFlowElement.nodesDraggable.value = false;
98
- vueFlowElement.nodesConnectable.value = false;
99
- vueFlowElement.elementsSelectable.value = false;
100
- }
101
- };
102
- const unFreezeFlow = () => {
103
- let vueFlowElement = nodeStore.vueFlowInstance;
104
- if (vueFlowElement) {
105
- vueFlowElement.nodesDraggable.value = true;
106
- vueFlowElement.nodesConnectable.value = true;
107
- vueFlowElement.elementsSelectable.value = true;
108
- }
109
- };
110
- const showNotification = (title, message, type, dangerouslyUseHTMLString) => {
111
- ElNotification({
112
- title,
113
- message,
114
- type,
115
- position: "top-left",
116
- dangerouslyUseHTMLString
117
- });
118
- };
119
- const startPolling = (checkFn) => {
120
- if (pollingInterval.value === null && props2.pollingConfig.enabled) {
121
- pollingInterval.value = setInterval(checkFn, props2.pollingConfig.interval);
122
- }
123
- };
124
- const stopPolling = () => {
125
- if (pollingInterval.value !== null) {
126
- clearInterval(pollingInterval.value);
127
- pollingInterval.value = null;
128
- }
129
- };
130
- const createNotificationConfig = (runInfo) => ({
131
- title: runInfo.success ? "Success" : "Error",
132
- message: runInfo.success ? "The flow has completed" : "There were issues with the flow run, check the logging for more information",
133
- type: runInfo.success ? "success" : "error"
134
- });
135
- const checkRunStatus = async () => {
136
- try {
137
- const response = await updateRunStatus(props2.flowId, nodeStore);
138
- if (response.status === 200) {
139
- stopPolling();
140
- unFreezeFlow();
141
- nodeStore.isRunning = false;
142
- const notificationConfig = createNotificationConfig(response.data);
143
- showNotification(
144
- notificationConfig.title,
145
- notificationConfig.message,
146
- notificationConfig.type
147
- );
148
- } else if (response.status === 404) {
149
- stopPolling();
150
- unFreezeFlow();
151
- nodeStore.isRunning = false;
152
- nodeStore.runResults = {};
153
- }
154
- } catch (error) {
155
- console.error("Error checking run status:", error);
156
- stopPolling();
157
- unFreezeFlow();
158
- nodeStore.isRunning = false;
159
- }
160
- };
161
- const runFlow = async () => {
162
- const flowSettings = await getFlowSettings(nodeStore.flow_id);
163
- if (!flowSettings) {
164
- throw new Error("Failed to retrieve flow settings");
165
- }
166
- const escapeHtml = (text) => {
167
- const div = document.createElement("div");
168
- div.textContent = text;
169
- return div.innerHTML;
170
- };
171
- freezeFlow();
172
- nodeStore.resetNodeResult();
173
- const executionLocationText = flowSettings.execution_location === "local" ? "Local" : "Remote";
174
- const escapedFlowName = escapeHtml(flowSettings.name);
175
- const notificationMessage = `
176
- <div style="line-height: 1.4;">
177
- <div><strong>Flow:</strong> "${escapedFlowName}"</div>
178
- <div><strong>Mode:</strong> ${flowSettings.execution_mode}</div>
179
- <div><strong>Location:</strong> ${executionLocationText}</div>
180
- </div>
181
- `;
182
- showNotification("🚀 Flow Started", notificationMessage, void 0, true);
183
- try {
184
- await axios.post("/flow/run/", null, {
185
- params: { flow_id: props2.flowId },
186
- headers: { accept: "application/json" }
187
- });
188
- nodeStore.isRunning = true;
189
- nodeStore.showLogViewer();
190
- startPolling(checkRunStatus);
191
- } catch (error) {
192
- console.error("Error starting run:", error);
193
- unFreezeFlow();
194
- nodeStore.isRunning = false;
195
- }
196
- };
197
- const cancelFlow = async () => {
198
- try {
199
- await axios.post("/flow/cancel/", null, {
200
- params: { flow_id: props2.flowId },
201
- headers: { accept: "application/json" }
202
- });
203
- showNotification("Cancelling", "The flow is being cancelled");
204
- unFreezeFlow();
205
- nodeStore.isRunning = false;
206
- stopPolling();
207
- } catch (error) {
208
- console.error("Error cancelling run:", error);
209
- showNotification("Error", "Failed to cancel the flow", "error");
210
- }
211
- };
212
- onUnmounted(() => {
213
- stopPolling();
389
+ const { runFlow, cancelFlow, showNotification, startPolling, stopPolling, checkRunStatus } = useFlowExecution(props2.flowId, props2.pollingConfig, {
390
+ persistPolling: props2.persistPolling,
391
+ pollingKey: `run_button_${props2.flowId}`
214
392
  });
215
393
  __expose({
216
394
  startPolling,
@@ -222,12 +400,12 @@ const _sfc_main$k = /* @__PURE__ */ defineComponent({
222
400
  });
223
401
  return (_ctx, _cache) => {
224
402
  const _component_el_button = resolveComponent("el-button");
225
- return openBlock(), createElementBlock("div", _hoisted_1$h, [
403
+ return openBlock(), createElementBlock("div", _hoisted_1$k, [
226
404
  createVNode(_component_el_button, {
227
405
  size: "small",
228
406
  disabled: unref(nodeStore).isRunning,
229
407
  round: "",
230
- onClick: _cache[0] || (_cache[0] = ($event) => runFlow())
408
+ onClick: _cache[0] || (_cache[0] = ($event) => unref(runFlow)())
231
409
  }, {
232
410
  default: withCtx(() => _cache[2] || (_cache[2] = [
233
411
  createTextVNode(" Run ")
@@ -239,7 +417,7 @@ const _sfc_main$k = /* @__PURE__ */ defineComponent({
239
417
  key: 0,
240
418
  size: "small",
241
419
  round: "",
242
- onClick: _cache[1] || (_cache[1] = ($event) => cancelFlow())
420
+ onClick: _cache[1] || (_cache[1] = ($event) => unref(cancelFlow)())
243
421
  }, {
244
422
  default: withCtx(() => _cache[3] || (_cache[3] = [
245
423
  createTextVNode(" Cancel ")
@@ -251,8 +429,8 @@ const _sfc_main$k = /* @__PURE__ */ defineComponent({
251
429
  };
252
430
  }
253
431
  });
254
- const run_vue_vue_type_style_index_0_scoped_e9cba087_lang = "";
255
- const RunButton = /* @__PURE__ */ _export_sfc(_sfc_main$k, [["__scopeId", "data-v-e9cba087"]]);
432
+ const run_vue_vue_type_style_index_0_scoped_c0f9acc7_lang = "";
433
+ const RunButton = /* @__PURE__ */ _export_sfc(_sfc_main$n, [["__scopeId", "data-v-c0f9acc7"]]);
256
434
  const _imports_0 = "/images/sheets.png";
257
435
  const useFileBrowserStore = defineStore("fileBrowser", {
258
436
  state: () => ({
@@ -275,7 +453,7 @@ const useFileBrowserStore = defineStore("fileBrowser", {
275
453
  }
276
454
  }
277
455
  });
278
- const handleApiError = (error) => {
456
+ const handleApiError$1 = (error) => {
279
457
  var _a, _b, _c;
280
458
  throw {
281
459
  message: ((_b = (_a = error.response) == null ? void 0 : _a.data) == null ? void 0 : _b.detail) || "An unknown error occurred",
@@ -287,7 +465,7 @@ const getCurrentDirectoryContents = async (params) => {
287
465
  const response = await axios.get("files/current_directory_contents/", { params });
288
466
  return response.data;
289
467
  } catch (error) {
290
- return handleApiError(error);
468
+ return handleApiError$1(error);
291
469
  }
292
470
  };
293
471
  const navigateUp = async () => {
@@ -295,7 +473,7 @@ const navigateUp = async () => {
295
473
  const response = await axios.post("files/navigate_up/");
296
474
  return response.data;
297
475
  } catch (error) {
298
- return handleApiError(error);
476
+ return handleApiError$1(error);
299
477
  }
300
478
  };
301
479
  const navigateInto = async (directoryName) => {
@@ -305,7 +483,7 @@ const navigateInto = async (directoryName) => {
305
483
  });
306
484
  return response.data;
307
485
  } catch (error) {
308
- return handleApiError(error);
486
+ return handleApiError$1(error);
309
487
  }
310
488
  };
311
489
  const navigateTo = async (directoryPath) => {
@@ -315,7 +493,7 @@ const navigateTo = async (directoryPath) => {
315
493
  });
316
494
  return response.data;
317
495
  } catch (error) {
318
- return handleApiError(error);
496
+ return handleApiError$1(error);
319
497
  }
320
498
  };
321
499
  const getCurrentPath = async () => {
@@ -323,9 +501,12 @@ const getCurrentPath = async () => {
323
501
  const response = await axios.get("files/current_path/");
324
502
  return response.data;
325
503
  } catch (error) {
326
- return handleApiError(error);
504
+ return handleApiError$1(error);
327
505
  }
328
506
  };
507
+ const FLOWFILE_EXTENSIONS = ["flowfile", "yml", "yaml", "test"];
508
+ const DATA_FILE_EXTENSIONS = ["xlsx", "parquet", "csv", "txt"];
509
+ const ALLOWED_SAVE_EXTENSIONS = ["yaml", "yml"];
329
510
  function assertPath(path2) {
330
511
  if (typeof path2 !== "string") {
331
512
  throw new TypeError("Path must be a string. Received " + JSON.stringify(path2));
@@ -749,16 +930,16 @@ var posix = {
749
930
  posix.posix = posix;
750
931
  var pathBrowserify = posix;
751
932
  const path = /* @__PURE__ */ getDefaultExportFromCjs(pathBrowserify);
752
- const _hoisted_1$g = { class: "file-browser" };
753
- const _hoisted_2$d = { class: "browser-content" };
754
- const _hoisted_3$c = { class: "browser-toolbar" };
755
- const _hoisted_4$9 = { class: "path-navigation" };
756
- const _hoisted_5$7 = ["disabled"];
757
- const _hoisted_6$6 = { class: "current-path" };
758
- const _hoisted_7$3 = { class: "controls-row" };
759
- const _hoisted_8$1 = { class: "search-container" };
760
- const _hoisted_9 = { class: "sort-controls" };
761
- const _hoisted_10 = { class: "material-icons" };
933
+ const _hoisted_1$j = { class: "file-browser" };
934
+ const _hoisted_2$h = { class: "browser-content" };
935
+ const _hoisted_3$g = { class: "browser-toolbar" };
936
+ const _hoisted_4$b = { class: "path-navigation" };
937
+ const _hoisted_5$8 = ["disabled"];
938
+ const _hoisted_6$7 = { class: "current-path" };
939
+ const _hoisted_7$5 = { class: "controls-row" };
940
+ const _hoisted_8$3 = { class: "search-container" };
941
+ const _hoisted_9$2 = { class: "sort-controls" };
942
+ const _hoisted_10$1 = { class: "material-icons" };
762
943
  const _hoisted_11 = { class: "show-hidden-toggle" };
763
944
  const _hoisted_12 = { class: "browser-main" };
764
945
  const _hoisted_13 = {
@@ -787,8 +968,16 @@ const _hoisted_19 = {
787
968
  const _hoisted_20 = { class: "file-details" };
788
969
  const _hoisted_21 = { class: "file-info" };
789
970
  const _hoisted_22 = { class: "browser-actions" };
790
- const _hoisted_23 = { class: "dialog-footer" };
791
- const _sfc_main$j = /* @__PURE__ */ defineComponent({
971
+ const _hoisted_23 = {
972
+ key: 0,
973
+ class: "form-hint"
974
+ };
975
+ const _hoisted_24 = {
976
+ key: 0,
977
+ class: "auto-extension-hint"
978
+ };
979
+ const _hoisted_25 = { class: "dialog-footer" };
980
+ const _sfc_main$m = /* @__PURE__ */ defineComponent({
792
981
  __name: "fileBrowser",
793
982
  props: {
794
983
  allowedFileTypes: { default: () => [] },
@@ -842,18 +1031,18 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
842
1031
  const showCreateDialog = ref(false);
843
1032
  const newFileName = ref("");
844
1033
  const fileNameError = ref("");
845
- const fileNameInput = ref(null);
846
1034
  const selectedFile = ref(null);
847
- const DATA_FILE_TYPES = ["xlsx", "parquet", "csv", "txt"];
848
1035
  const isDataFile = (file) => {
849
1036
  if (file.is_directory)
850
1037
  return false;
851
- return DATA_FILE_TYPES.some((type) => file.name.toLowerCase().endsWith(`.${type.toLowerCase()}`));
1038
+ const name = file.name.toLowerCase();
1039
+ return DATA_FILE_EXTENSIONS.some((ext) => name.endsWith(`.${ext}`));
852
1040
  };
853
1041
  const isFlowfile = (file) => {
854
1042
  if (file.is_directory)
855
1043
  return false;
856
- return file.name.toLowerCase().endsWith(".flowfile");
1044
+ const name = file.name.toLowerCase();
1045
+ return FLOWFILE_EXTENSIONS.some((ext) => name.endsWith(`.${ext}`));
857
1046
  };
858
1047
  const formatFileSize = (bytes) => {
859
1048
  if (bytes < 1024)
@@ -961,10 +1150,25 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
961
1150
  }
962
1151
  return true;
963
1152
  };
1153
+ const hasValidExtension = computed$1(() => {
1154
+ const name = newFileName.value.trim().toLowerCase();
1155
+ const validExtensions = props2.allowedFileTypes.length > 0 ? props2.allowedFileTypes : ALLOWED_SAVE_EXTENSIONS;
1156
+ return validExtensions.some((ext) => name.endsWith(`.${ext}`));
1157
+ });
1158
+ const previewFileName = computed$1(() => {
1159
+ const name = newFileName.value.trim();
1160
+ if (!name)
1161
+ return "";
1162
+ if (hasValidExtension.value)
1163
+ return name;
1164
+ const defaultExt = props2.allowedFileTypes.length > 0 ? props2.allowedFileTypes[0] : "yaml";
1165
+ return `${name}.${defaultExt}`;
1166
+ });
964
1167
  const handleCreateFile = () => {
965
1168
  if (validateFileName(newFileName.value)) {
966
- const newFilePath = path.join(currentPath.value, newFileName.value);
967
- emit("createFile", newFilePath, currentPath.value, newFileName.value);
1169
+ const fileName = previewFileName.value;
1170
+ const newFilePath = path.join(currentPath.value, fileName);
1171
+ emit("createFile", newFilePath, currentPath.value, fileName);
968
1172
  showCreateDialog.value = false;
969
1173
  }
970
1174
  };
@@ -1069,16 +1273,16 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
1069
1273
  const _component_el_form_item = resolveComponent("el-form-item");
1070
1274
  const _component_el_form = resolveComponent("el-form");
1071
1275
  const _component_el_dialog = resolveComponent("el-dialog");
1072
- return openBlock(), createElementBlock("div", _hoisted_1$g, [
1276
+ return openBlock(), createElementBlock("div", _hoisted_1$j, [
1073
1277
  _cache[17] || (_cache[17] = createBaseVNode("div", { class: "browser-header" }, [
1074
1278
  createBaseVNode("div", { class: "browser-title" }, [
1075
1279
  createBaseVNode("span", { class: "material-icons" }, "folder"),
1076
1280
  createBaseVNode("span", null, "File Browser")
1077
1281
  ])
1078
1282
  ], -1)),
1079
- createBaseVNode("div", _hoisted_2$d, [
1080
- createBaseVNode("div", _hoisted_3$c, [
1081
- createBaseVNode("div", _hoisted_4$9, [
1283
+ createBaseVNode("div", _hoisted_2$h, [
1284
+ createBaseVNode("div", _hoisted_3$g, [
1285
+ createBaseVNode("div", _hoisted_4$b, [
1082
1286
  createBaseVNode("button", {
1083
1287
  class: "nav-button",
1084
1288
  disabled: loading.value,
@@ -1086,11 +1290,11 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
1086
1290
  }, _cache[7] || (_cache[7] = [
1087
1291
  createBaseVNode("span", { class: "material-icons" }, "arrow_upward", -1),
1088
1292
  createBaseVNode("span", null, "Up", -1)
1089
- ]), 8, _hoisted_5$7),
1090
- createBaseVNode("div", _hoisted_6$6, toDisplayString(currentPath.value), 1)
1293
+ ]), 8, _hoisted_5$8),
1294
+ createBaseVNode("div", _hoisted_6$7, toDisplayString(currentPath.value), 1)
1091
1295
  ]),
1092
- createBaseVNode("div", _hoisted_7$3, [
1093
- createBaseVNode("div", _hoisted_8$1, [
1296
+ createBaseVNode("div", _hoisted_7$5, [
1297
+ createBaseVNode("div", _hoisted_8$3, [
1094
1298
  createVNode(_component_el_input, {
1095
1299
  modelValue: searchTerm.value,
1096
1300
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => searchTerm.value = $event),
@@ -1103,7 +1307,7 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
1103
1307
  _: 1
1104
1308
  }, 8, ["modelValue"])
1105
1309
  ]),
1106
- createBaseVNode("div", _hoisted_9, [
1310
+ createBaseVNode("div", _hoisted_9$2, [
1107
1311
  createVNode(_component_el_select, {
1108
1312
  modelValue: sortBy.value,
1109
1313
  "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => sortBy.value = $event),
@@ -1137,7 +1341,7 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
1137
1341
  onClick: toggleSortDirection
1138
1342
  }, {
1139
1343
  default: withCtx(() => [
1140
- createBaseVNode("span", _hoisted_10, toDisplayString(sortDirection.value === "asc" ? "arrow_upward" : "arrow_downward"), 1)
1344
+ createBaseVNode("span", _hoisted_10$1, toDisplayString(sortDirection.value === "asc" ? "arrow_upward" : "arrow_downward"), 1)
1141
1345
  ]),
1142
1346
  _: 1
1143
1347
  })
@@ -1253,21 +1457,6 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
1253
1457
  ])),
1254
1458
  _: 1,
1255
1459
  __: [13]
1256
- }, 8, ["disabled"])) : createCommentVNode("", true),
1257
- _ctx.mode === "open" && selectedFile.value && !selectedFile.value.is_directory ? (openBlock(), createBlock(_component_el_button, {
1258
- key: 3,
1259
- type: "primary",
1260
- disabled: loading.value,
1261
- size: "small",
1262
- style: { "background-color": "rgb(92, 92, 92)", "color": "white" },
1263
- onClick: handleOpenFile
1264
- }, {
1265
- default: withCtx(() => _cache[14] || (_cache[14] = [
1266
- createBaseVNode("span", { class: "material-icons" }, "open_in_new", -1),
1267
- createTextVNode(" Open File ")
1268
- ])),
1269
- _: 1,
1270
- __: [14]
1271
1460
  }, 8, ["disabled"])) : createCommentVNode("", true)
1272
1461
  ])
1273
1462
  ]),
@@ -1280,7 +1469,7 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
1280
1469
  onClosed: handleDialogClosed
1281
1470
  }, {
1282
1471
  footer: withCtx(() => [
1283
- createBaseVNode("span", _hoisted_23, [
1472
+ createBaseVNode("span", _hoisted_25, [
1284
1473
  createVNode(_component_el_button, {
1285
1474
  onClick: _cache[5] || (_cache[5] = ($event) => showCreateDialog.value = false)
1286
1475
  }, {
@@ -1314,13 +1503,17 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
1314
1503
  }, {
1315
1504
  default: withCtx(() => [
1316
1505
  createVNode(_component_el_input, {
1317
- ref_key: "fileNameInput",
1318
- ref: fileNameInput,
1506
+ ref: "fileNameInput",
1319
1507
  modelValue: newFileName.value,
1320
1508
  "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => newFileName.value = $event),
1321
- placeholder: "Enter file name",
1509
+ placeholder: "Enter file name (e.g., my_flow)",
1322
1510
  onKeyup: withKeys(handleCreateFile, ["enter"])
1323
- }, null, 8, ["modelValue"])
1511
+ }, null, 8, ["modelValue"]),
1512
+ newFileName.value.trim() ? (openBlock(), createElementBlock("div", _hoisted_23, [
1513
+ _cache[14] || (_cache[14] = createBaseVNode("span", { class: "preview-label" }, "Will be saved as:", -1)),
1514
+ createBaseVNode("code", null, toDisplayString(previewFileName.value), 1),
1515
+ !hasValidExtension.value ? (openBlock(), createElementBlock("span", _hoisted_24, " (.yaml added automatically) ")) : createCommentVNode("", true)
1516
+ ])) : createCommentVNode("", true)
1324
1517
  ]),
1325
1518
  _: 1
1326
1519
  }, 8, ["error"])
@@ -1334,15 +1527,19 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
1334
1527
  };
1335
1528
  }
1336
1529
  });
1337
- const fileBrowser_vue_vue_type_style_index_0_scoped_d5bb1173_lang = "";
1338
- const FileBrowser = /* @__PURE__ */ _export_sfc(_sfc_main$j, [["__scopeId", "data-v-d5bb1173"]]);
1339
- const _hoisted_1$f = { class: "action-buttons" };
1340
- const _hoisted_2$c = { key: 0 };
1341
- const _hoisted_3$b = { class: "settings-modal-content" };
1342
- const _hoisted_4$8 = { class: "form-group" };
1343
- const _hoisted_5$6 = { class: "form-group" };
1344
- const _hoisted_6$5 = { class: "form-group" };
1345
- const _sfc_main$i = /* @__PURE__ */ defineComponent({
1530
+ const fileBrowser_vue_vue_type_style_index_0_scoped_11a74179_lang = "";
1531
+ const FileBrowser = /* @__PURE__ */ _export_sfc(_sfc_main$m, [["__scopeId", "data-v-11a74179"]]);
1532
+ const _hoisted_1$i = { class: "action-buttons" };
1533
+ const _hoisted_2$g = { class: "quick-create-modal" };
1534
+ const _hoisted_3$f = { class: "form-group" };
1535
+ const _hoisted_4$a = { class: "preview-text" };
1536
+ const _hoisted_5$7 = { class: "dialog-footer" };
1537
+ const _hoisted_6$6 = { key: 0 };
1538
+ const _hoisted_7$4 = { class: "settings-modal-content" };
1539
+ const _hoisted_8$2 = { class: "form-group" };
1540
+ const _hoisted_9$1 = { class: "form-group" };
1541
+ const _hoisted_10 = { class: "form-group" };
1542
+ const _sfc_main$l = /* @__PURE__ */ defineComponent({
1346
1543
  __name: "HeaderButtons",
1347
1544
  emits: ["openFlow", "refreshFlow", "logs-start", "logs-stop"],
1348
1545
  setup(__props, { expose: __expose, emit: __emit }) {
@@ -1350,16 +1547,38 @@ const _sfc_main$i = /* @__PURE__ */ defineComponent({
1350
1547
  const modalVisibleForOpen = ref(false);
1351
1548
  const modalVisibleForSave = ref(false);
1352
1549
  const modalVisibleForCreate = ref(false);
1550
+ const modalVisibleForQuickCreate = ref(false);
1353
1551
  const modalVisibleForSettings = ref(false);
1354
1552
  const flowSettings = ref(null);
1355
1553
  const savePath = ref(void 0);
1356
1554
  const runButton = ref(null);
1555
+ const quickCreateName = ref("");
1357
1556
  const executionModes = ref(["Development", "Performance"]);
1358
1557
  const executionLocationOptions = ref([
1359
1558
  { key: "local", label: "Local" },
1360
1559
  { key: "remote", label: "Remote" }
1361
1560
  ]);
1362
1561
  const emit = __emit;
1562
+ const isValidSaveExtension = (filePath) => {
1563
+ const name = filePath.toLowerCase();
1564
+ return ALLOWED_SAVE_EXTENSIONS.some((ext) => name.endsWith(`.${ext}`));
1565
+ };
1566
+ const generateDefaultFileName = () => {
1567
+ const now2 = /* @__PURE__ */ new Date();
1568
+ const year = now2.getFullYear();
1569
+ const month = String(now2.getMonth() + 1).padStart(2, "0");
1570
+ const day = String(now2.getDate()).padStart(2, "0");
1571
+ const hours = String(now2.getHours()).padStart(2, "0");
1572
+ const minutes = String(now2.getMinutes()).padStart(2, "0");
1573
+ const seconds = String(now2.getSeconds()).padStart(2, "0");
1574
+ return `${year}${month}${day}_${hours}${minutes}${seconds}_flow`;
1575
+ };
1576
+ const getPreviewFileName = () => {
1577
+ if (quickCreateName.value.trim()) {
1578
+ return quickCreateName.value.trim();
1579
+ }
1580
+ return generateDefaultFileName();
1581
+ };
1363
1582
  const loadFlowSettings = async () => {
1364
1583
  if (!(nodeStore.flow_id && nodeStore.flow_id > 0))
1365
1584
  return;
@@ -1387,8 +1606,30 @@ const _sfc_main$i = /* @__PURE__ */ defineComponent({
1387
1606
  };
1388
1607
  const fileBrowserRef = ref(null);
1389
1608
  const saveFlowAction = async (flowPath, _1, _2) => {
1390
- await saveFlow(nodeStore.flow_id, flowPath);
1391
- modalVisibleForSave.value = false;
1609
+ if (flowPath.toLowerCase().endsWith(".flowfile")) {
1610
+ ElMessage.error({
1611
+ message: "The .flowfile format is deprecated. Please use .yaml or .yml instead.",
1612
+ duration: 5e3
1613
+ });
1614
+ return;
1615
+ }
1616
+ if (!isValidSaveExtension(flowPath)) {
1617
+ ElMessage.error({
1618
+ message: "Invalid file extension. Please use .yaml or .yml",
1619
+ duration: 5e3
1620
+ });
1621
+ return;
1622
+ }
1623
+ try {
1624
+ await saveFlow(nodeStore.flow_id, flowPath);
1625
+ ElMessage.success("Flow saved successfully");
1626
+ modalVisibleForSave.value = false;
1627
+ } catch (error) {
1628
+ ElMessage.error({
1629
+ message: error.message || "Failed to save flow",
1630
+ duration: 5e3
1631
+ });
1632
+ }
1392
1633
  };
1393
1634
  function openFlowAction(inputSelectedFile) {
1394
1635
  if (inputSelectedFile) {
@@ -1419,14 +1660,31 @@ const _sfc_main$i = /* @__PURE__ */ defineComponent({
1419
1660
  nodeStore.toggleCodeGenerator();
1420
1661
  };
1421
1662
  const handleCreateAction = async (flowPath, _1, _2) => {
1422
- const pathWithoutExtension = flowPath.replace(/\.[^/.]+$/, "");
1423
- const normalizedPath = `${pathWithoutExtension}.flowfile`;
1424
- const createdFlowId = await createFlow(normalizedPath);
1425
- await saveFlow(createdFlowId, normalizedPath);
1663
+ if (!isValidSaveExtension(flowPath)) {
1664
+ ElMessage.error({
1665
+ message: "Invalid file extension. Please use .yaml or .yml",
1666
+ duration: 5e3
1667
+ });
1668
+ return;
1669
+ }
1670
+ const createdFlowId = await createFlow(flowPath);
1426
1671
  modalVisibleForCreate.value = false;
1427
1672
  nodeStore.flow_id = createdFlowId;
1428
1673
  emit("refreshFlow");
1429
1674
  };
1675
+ const handleQuickCreateAction = async () => {
1676
+ const fileName = getPreviewFileName();
1677
+ console.log("Creating flow with name:", fileName);
1678
+ try {
1679
+ const createdFlowId = await createFlow(null, fileName);
1680
+ modalVisibleForQuickCreate.value = false;
1681
+ quickCreateName.value = "";
1682
+ nodeStore.flow_id = createdFlowId;
1683
+ emit("refreshFlow");
1684
+ } catch (error) {
1685
+ console.error("Failed to create quick flow:", error);
1686
+ }
1687
+ };
1430
1688
  const openSettingsModal = () => {
1431
1689
  modalVisibleForSettings.value = true;
1432
1690
  };
@@ -1441,6 +1699,7 @@ const _sfc_main$i = /* @__PURE__ */ defineComponent({
1441
1699
  __expose({
1442
1700
  loadFlowSettings,
1443
1701
  openCreateDialog: () => modalVisibleForCreate.value = true,
1702
+ handleQuickCreateAction,
1444
1703
  openOpenDialog: () => modalVisibleForOpen.value = true,
1445
1704
  openSaveModal: () => modalVisibleForSave.value = true,
1446
1705
  runFlow
@@ -1452,36 +1711,45 @@ const _sfc_main$i = /* @__PURE__ */ defineComponent({
1452
1711
  });
1453
1712
  return (_ctx, _cache) => {
1454
1713
  const _component_el_dialog = resolveComponent("el-dialog");
1714
+ const _component_el_input = resolveComponent("el-input");
1715
+ const _component_el_button = resolveComponent("el-button");
1455
1716
  const _component_el_option = resolveComponent("el-option");
1456
1717
  const _component_el_select = resolveComponent("el-select");
1457
1718
  const _component_el_checkbox = resolveComponent("el-checkbox");
1458
1719
  return openBlock(), createElementBlock(Fragment, null, [
1459
- createBaseVNode("div", _hoisted_1$f, [
1720
+ createBaseVNode("div", _hoisted_1$i, [
1460
1721
  createBaseVNode("button", {
1461
1722
  class: "action-btn",
1462
1723
  onClick: openSaveModal
1463
- }, _cache[9] || (_cache[9] = [
1724
+ }, _cache[13] || (_cache[13] = [
1464
1725
  createBaseVNode("span", { class: "material-icons btn-icon" }, "save", -1),
1465
1726
  createBaseVNode("span", { class: "btn-text" }, "Save", -1)
1466
1727
  ])),
1467
1728
  createBaseVNode("button", {
1468
1729
  class: "action-btn",
1469
1730
  onClick: _cache[0] || (_cache[0] = ($event) => modalVisibleForOpen.value = true)
1470
- }, _cache[10] || (_cache[10] = [
1731
+ }, _cache[14] || (_cache[14] = [
1471
1732
  createBaseVNode("span", { class: "material-icons btn-icon" }, "folder_open", -1),
1472
1733
  createBaseVNode("span", { class: "btn-text" }, "Open", -1)
1473
1734
  ])),
1474
1735
  createBaseVNode("button", {
1475
1736
  class: "action-btn",
1476
1737
  onClick: _cache[1] || (_cache[1] = ($event) => modalVisibleForCreate.value = true)
1477
- }, _cache[11] || (_cache[11] = [
1738
+ }, _cache[15] || (_cache[15] = [
1478
1739
  createBaseVNode("span", { class: "material-icons btn-icon" }, "add_circle_outline", -1),
1479
1740
  createBaseVNode("span", { class: "btn-text" }, "Create", -1)
1480
1741
  ])),
1742
+ createBaseVNode("button", {
1743
+ class: "action-btn",
1744
+ onClick: _cache[2] || (_cache[2] = ($event) => modalVisibleForQuickCreate.value = true)
1745
+ }, _cache[16] || (_cache[16] = [
1746
+ createBaseVNode("span", { class: "material-icons btn-icon" }, "flash_on", -1),
1747
+ createBaseVNode("span", { class: "btn-text" }, "Quick Create", -1)
1748
+ ])),
1481
1749
  createBaseVNode("button", {
1482
1750
  class: "action-btn",
1483
1751
  onClick: openSettingsModal
1484
- }, _cache[12] || (_cache[12] = [
1752
+ }, _cache[17] || (_cache[17] = [
1485
1753
  createBaseVNode("span", { class: "material-icons btn-icon" }, "settings", -1),
1486
1754
  createBaseVNode("span", { class: "btn-text" }, "Settings", -1)
1487
1755
  ])),
@@ -1494,29 +1762,29 @@ const _sfc_main$i = /* @__PURE__ */ defineComponent({
1494
1762
  class: normalizeClass(["action-btn", { active: unref(nodeStore).showCodeGenerator }]),
1495
1763
  title: "Generate Python Code (Ctrl+G)",
1496
1764
  onClick: toggleCodeGenerator
1497
- }, _cache[13] || (_cache[13] = [
1765
+ }, _cache[18] || (_cache[18] = [
1498
1766
  createBaseVNode("span", { class: "material-icons btn-icon" }, "code", -1),
1499
1767
  createBaseVNode("span", { class: "btn-text" }, "Generate code", -1)
1500
1768
  ]), 2)
1501
1769
  ]),
1502
1770
  createVNode(_component_el_dialog, {
1503
1771
  modelValue: modalVisibleForOpen.value,
1504
- "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => modalVisibleForOpen.value = $event),
1772
+ "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => modalVisibleForOpen.value = $event),
1505
1773
  title: "Select or Enter a Flow File",
1506
1774
  width: "70%"
1507
1775
  }, {
1508
1776
  default: withCtx(() => [
1509
1777
  createVNode(FileBrowser, {
1510
- "allowed-file-types": ["flowfile"],
1778
+ "allowed-file-types": unref(FLOWFILE_EXTENSIONS),
1511
1779
  mode: "open",
1512
1780
  onFileSelected: openFlowAction
1513
- })
1781
+ }, null, 8, ["allowed-file-types"])
1514
1782
  ]),
1515
1783
  _: 1
1516
1784
  }, 8, ["modelValue"]),
1517
1785
  createVNode(_component_el_dialog, {
1518
1786
  modelValue: modalVisibleForSave.value,
1519
- "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => modalVisibleForSave.value = $event),
1787
+ "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => modalVisibleForSave.value = $event),
1520
1788
  title: "Select save location",
1521
1789
  width: "70%"
1522
1790
  }, {
@@ -1524,45 +1792,95 @@ const _sfc_main$i = /* @__PURE__ */ defineComponent({
1524
1792
  createVNode(FileBrowser, {
1525
1793
  ref_key: "fileBrowserRef",
1526
1794
  ref: fileBrowserRef,
1527
- "allowed-file-types": ["flowfile"],
1795
+ "allowed-file-types": unref(ALLOWED_SAVE_EXTENSIONS),
1528
1796
  mode: "create",
1529
1797
  "initial-file-path": savePath.value,
1530
1798
  onCreateFile: saveFlowAction,
1531
1799
  onOverwriteFile: saveFlowAction
1532
- }, null, 8, ["initial-file-path"])
1800
+ }, null, 8, ["allowed-file-types", "initial-file-path"])
1533
1801
  ]),
1534
1802
  _: 1
1535
1803
  }, 8, ["modelValue"]),
1536
1804
  createVNode(_component_el_dialog, {
1537
1805
  modelValue: modalVisibleForCreate.value,
1538
- "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => modalVisibleForCreate.value = $event),
1806
+ "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => modalVisibleForCreate.value = $event),
1539
1807
  title: "Select save location",
1540
1808
  width: "70%"
1541
1809
  }, {
1542
1810
  default: withCtx(() => [
1543
1811
  createVNode(FileBrowser, {
1544
- "allowed-file-types": ["flowfile"],
1812
+ "allowed-file-types": unref(ALLOWED_SAVE_EXTENSIONS),
1545
1813
  mode: "create",
1546
1814
  onCreateFile: handleCreateAction,
1547
1815
  onOverwriteFile: handleCreateAction
1548
- })
1816
+ }, null, 8, ["allowed-file-types"])
1817
+ ]),
1818
+ _: 1
1819
+ }, 8, ["modelValue"]),
1820
+ createVNode(_component_el_dialog, {
1821
+ modelValue: modalVisibleForQuickCreate.value,
1822
+ "onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => modalVisibleForQuickCreate.value = $event),
1823
+ title: "Create New Flow",
1824
+ width: "400px"
1825
+ }, {
1826
+ footer: withCtx(() => [
1827
+ createBaseVNode("span", _hoisted_5$7, [
1828
+ createVNode(_component_el_button, {
1829
+ onClick: _cache[7] || (_cache[7] = ($event) => modalVisibleForQuickCreate.value = false)
1830
+ }, {
1831
+ default: withCtx(() => _cache[22] || (_cache[22] = [
1832
+ createTextVNode("Cancel")
1833
+ ])),
1834
+ _: 1,
1835
+ __: [22]
1836
+ }),
1837
+ createVNode(_component_el_button, {
1838
+ type: "primary",
1839
+ onClick: handleQuickCreateAction
1840
+ }, {
1841
+ default: withCtx(() => _cache[23] || (_cache[23] = [
1842
+ createTextVNode("Create Flow")
1843
+ ])),
1844
+ _: 1,
1845
+ __: [23]
1846
+ })
1847
+ ])
1848
+ ]),
1849
+ default: withCtx(() => [
1850
+ createBaseVNode("div", _hoisted_2$g, [
1851
+ createBaseVNode("div", _hoisted_3$f, [
1852
+ _cache[19] || (_cache[19] = createBaseVNode("label", { for: "flow-name" }, "Flow Name (optional):", -1)),
1853
+ createVNode(_component_el_input, {
1854
+ id: "flow-name",
1855
+ modelValue: quickCreateName.value,
1856
+ "onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => quickCreateName.value = $event),
1857
+ placeholder: "Leave empty for auto-generated name",
1858
+ clearable: ""
1859
+ }, null, 8, ["modelValue"])
1860
+ ]),
1861
+ createBaseVNode("div", _hoisted_4$a, [
1862
+ _cache[20] || (_cache[20] = createBaseVNode("strong", null, "File will be created as:", -1)),
1863
+ _cache[21] || (_cache[21] = createBaseVNode("br", null, null, -1)),
1864
+ createBaseVNode("code", null, toDisplayString(getPreviewFileName()), 1)
1865
+ ])
1866
+ ])
1549
1867
  ]),
1550
1868
  _: 1
1551
1869
  }, 8, ["modelValue"]),
1552
1870
  createVNode(_component_el_dialog, {
1553
1871
  modelValue: modalVisibleForSettings.value,
1554
- "onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => modalVisibleForSettings.value = $event),
1872
+ "onUpdate:modelValue": _cache[12] || (_cache[12] = ($event) => modalVisibleForSettings.value = $event),
1555
1873
  title: "Execution Settings",
1556
1874
  width: "30%"
1557
1875
  }, {
1558
1876
  default: withCtx(() => [
1559
- flowSettings.value ? (openBlock(), createElementBlock("div", _hoisted_2$c, [
1560
- createBaseVNode("div", _hoisted_3$b, [
1561
- createBaseVNode("div", _hoisted_4$8, [
1562
- _cache[14] || (_cache[14] = createBaseVNode("label", null, "Execution Mode:", -1)),
1877
+ flowSettings.value ? (openBlock(), createElementBlock("div", _hoisted_6$6, [
1878
+ createBaseVNode("div", _hoisted_7$4, [
1879
+ createBaseVNode("div", _hoisted_8$2, [
1880
+ _cache[24] || (_cache[24] = createBaseVNode("label", null, "Execution Mode:", -1)),
1563
1881
  createVNode(_component_el_select, {
1564
1882
  modelValue: flowSettings.value.execution_mode,
1565
- "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => flowSettings.value.execution_mode = $event),
1883
+ "onUpdate:modelValue": _cache[9] || (_cache[9] = ($event) => flowSettings.value.execution_mode = $event),
1566
1884
  size: "small",
1567
1885
  placeholder: "Select run mode",
1568
1886
  style: { "width": "100%" },
@@ -1580,11 +1898,11 @@ const _sfc_main$i = /* @__PURE__ */ defineComponent({
1580
1898
  _: 1
1581
1899
  }, 8, ["modelValue"])
1582
1900
  ]),
1583
- createBaseVNode("div", _hoisted_5$6, [
1584
- _cache[15] || (_cache[15] = createBaseVNode("label", null, "Execution location:", -1)),
1901
+ createBaseVNode("div", _hoisted_9$1, [
1902
+ _cache[25] || (_cache[25] = createBaseVNode("label", null, "Execution location:", -1)),
1585
1903
  createVNode(_component_el_select, {
1586
1904
  modelValue: flowSettings.value.execution_location,
1587
- "onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => flowSettings.value.execution_location = $event),
1905
+ "onUpdate:modelValue": _cache[10] || (_cache[10] = ($event) => flowSettings.value.execution_location = $event),
1588
1906
  size: "small",
1589
1907
  placeholder: "Select the execution location",
1590
1908
  style: { "width": "100%" },
@@ -1602,10 +1920,10 @@ const _sfc_main$i = /* @__PURE__ */ defineComponent({
1602
1920
  _: 1
1603
1921
  }, 8, ["modelValue"])
1604
1922
  ]),
1605
- createBaseVNode("div", _hoisted_6$5, [
1923
+ createBaseVNode("div", _hoisted_10, [
1606
1924
  createVNode(_component_el_checkbox, {
1607
1925
  modelValue: flowSettings.value.show_detailed_progress,
1608
- "onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => flowSettings.value.show_detailed_progress = $event),
1926
+ "onUpdate:modelValue": _cache[11] || (_cache[11] = ($event) => flowSettings.value.show_detailed_progress = $event),
1609
1927
  label: "Show details during execution",
1610
1928
  size: "small",
1611
1929
  onChange: pushFlowSettings
@@ -1620,8 +1938,385 @@ const _sfc_main$i = /* @__PURE__ */ defineComponent({
1620
1938
  };
1621
1939
  }
1622
1940
  });
1623
- const HeaderButtons_vue_vue_type_style_index_0_scoped_bc5487da_lang = "";
1624
- const HeaderButtons = /* @__PURE__ */ _export_sfc(_sfc_main$i, [["__scopeId", "data-v-bc5487da"]]);
1941
+ const HeaderButtons_vue_vue_type_style_index_0_scoped_3359ec07_lang = "";
1942
+ const HeaderButtons = /* @__PURE__ */ _export_sfc(_sfc_main$l, [["__scopeId", "data-v-3359ec07"]]);
1943
+ const useItemStore = defineStore("itemStore", () => {
1944
+ const items = ref({});
1945
+ const initialItemStates = ref({});
1946
+ const groups = ref({});
1947
+ const inResizing = ref(false);
1948
+ const idItemClicked = ref(null);
1949
+ const idItemVisible = ref(null);
1950
+ const layoutPresets = {
1951
+ sidePanel: { width: 400, height: "100%" },
1952
+ bottomPanel: { width: "100%", height: 300 },
1953
+ dataView: { width: 600, height: 400 },
1954
+ logView: { width: 600, height: 400 }
1955
+ };
1956
+ const getGroupItems = computed$1(() => (groupName) => {
1957
+ if (!groups.value[groupName])
1958
+ return [];
1959
+ return groups.value[groupName].map((id2) => items.value[id2]).filter(Boolean);
1960
+ });
1961
+ const registerInitialState = (id2, initialState) => {
1962
+ if (!initialItemStates.value[id2]) {
1963
+ initialItemStates.value[id2] = { ...initialState };
1964
+ }
1965
+ };
1966
+ const bringToFront = (id2) => {
1967
+ if (!items.value[id2]) {
1968
+ console.warn(`Item ${id2} not found`);
1969
+ return;
1970
+ }
1971
+ if (items.value[id2].fullScreen)
1972
+ return;
1973
+ let maxZIndex = 99;
1974
+ Object.entries(items.value).forEach(([itemId, item]) => {
1975
+ if (!item.fullScreen && itemId !== id2) {
1976
+ maxZIndex = Math.max(maxZIndex, item.zIndex);
1977
+ }
1978
+ });
1979
+ items.value[id2].zIndex = maxZIndex + 1;
1980
+ saveItemState(id2);
1981
+ };
1982
+ const setItemState = (id2, state2) => {
1983
+ if (!items.value[id2]) {
1984
+ items.value[id2] = {
1985
+ width: 400,
1986
+ height: 300,
1987
+ left: 100,
1988
+ top: 100,
1989
+ stickynessPosition: "free",
1990
+ fullWidth: false,
1991
+ fullHeight: false,
1992
+ zIndex: 100,
1993
+ fullScreen: false,
1994
+ clicked: false
1995
+ };
1996
+ }
1997
+ const oldGroup = items.value[id2].group;
1998
+ Object.assign(items.value[id2], state2);
1999
+ if (state2.group !== void 0) {
2000
+ if (oldGroup && groups.value[oldGroup]) {
2001
+ groups.value[oldGroup] = groups.value[oldGroup].filter((itemId) => itemId !== id2);
2002
+ }
2003
+ if (state2.group) {
2004
+ if (!groups.value[state2.group]) {
2005
+ groups.value[state2.group] = [];
2006
+ }
2007
+ if (!groups.value[state2.group].includes(id2)) {
2008
+ groups.value[state2.group].push(id2);
2009
+ }
2010
+ if (state2.syncDimensions) {
2011
+ syncGroupDimensions(state2.group, id2);
2012
+ }
2013
+ }
2014
+ }
2015
+ };
2016
+ const syncGroupDimensions = (groupName, sourceId) => {
2017
+ const groupItems = groups.value[groupName];
2018
+ if (!groupItems || groupItems.length < 2)
2019
+ return;
2020
+ const referenceId = sourceId || groupItems[0];
2021
+ const reference = items.value[referenceId];
2022
+ if (!reference)
2023
+ return;
2024
+ groupItems.forEach((id2) => {
2025
+ var _a;
2026
+ if (id2 !== referenceId && ((_a = items.value[id2]) == null ? void 0 : _a.syncDimensions)) {
2027
+ items.value[id2].width = reference.width;
2028
+ items.value[id2].height = reference.height;
2029
+ saveItemState(id2);
2030
+ }
2031
+ });
2032
+ };
2033
+ const arrangeItems = (arrangement) => {
2034
+ const visibleItems = Object.entries(items.value).filter(([, item]) => !item.fullScreen).sort((a3, b2) => a3[1].zIndex - b2[1].zIndex);
2035
+ switch (arrangement) {
2036
+ case "cascade": {
2037
+ let offset = 0;
2038
+ visibleItems.forEach(([id2, item]) => {
2039
+ item.left = 100 + offset;
2040
+ item.top = 100 + offset;
2041
+ item.stickynessPosition = "free";
2042
+ offset += 30;
2043
+ saveItemState(id2);
2044
+ });
2045
+ break;
2046
+ }
2047
+ case "tile": {
2048
+ const screenWidth = window.innerWidth;
2049
+ const screenHeight = window.innerHeight;
2050
+ const itemCount = visibleItems.length;
2051
+ const cols = Math.ceil(Math.sqrt(itemCount));
2052
+ const rows = Math.ceil(itemCount / cols);
2053
+ const itemWidth = Math.floor(screenWidth / cols) - 20;
2054
+ const itemHeight = Math.floor(screenHeight / rows) - 20;
2055
+ visibleItems.forEach(([id2, item], index) => {
2056
+ const col = index % cols;
2057
+ const row = Math.floor(index / cols);
2058
+ item.left = col * (itemWidth + 10) + 10;
2059
+ item.top = row * (itemHeight + 10) + 10;
2060
+ item.width = itemWidth;
2061
+ item.height = itemHeight;
2062
+ item.stickynessPosition = "free";
2063
+ saveItemState(id2);
2064
+ });
2065
+ break;
2066
+ }
2067
+ case "stack": {
2068
+ visibleItems.forEach(([id2, item]) => {
2069
+ item.left = 100;
2070
+ item.top = 100;
2071
+ item.stickynessPosition = "free";
2072
+ saveItemState(id2);
2073
+ });
2074
+ break;
2075
+ }
2076
+ }
2077
+ };
2078
+ const preventOverlap = (id2) => {
2079
+ const item = items.value[id2];
2080
+ if (!item || item.stickynessPosition !== "free")
2081
+ return;
2082
+ const threshold = 50;
2083
+ let adjusted = false;
2084
+ Object.entries(items.value).forEach(([otherId, otherItem]) => {
2085
+ if (otherId === id2 || otherItem.fullScreen)
2086
+ return;
2087
+ const horizontalOverlap = item.left < otherItem.left + otherItem.width && item.left + item.width > otherItem.left;
2088
+ const verticalOverlap = item.top < otherItem.top + otherItem.height && item.top + item.height > otherItem.top;
2089
+ if (horizontalOverlap && verticalOverlap) {
2090
+ item.left = otherItem.left + otherItem.width + threshold;
2091
+ if (item.left + item.width > window.innerWidth) {
2092
+ item.left = 100;
2093
+ item.top = otherItem.top + otherItem.height + threshold;
2094
+ }
2095
+ adjusted = true;
2096
+ }
2097
+ });
2098
+ if (adjusted) {
2099
+ saveItemState(id2);
2100
+ }
2101
+ };
2102
+ const saveItemState = (id2) => {
2103
+ const itemState = items.value[id2];
2104
+ localStorage.setItem(`overlayPositionAndSize_${id2}`, JSON.stringify(itemState));
2105
+ if (itemState.group) {
2106
+ const groupData = { groups: groups.value };
2107
+ localStorage.setItem("overlayGroups", JSON.stringify(groupData));
2108
+ }
2109
+ };
2110
+ const loadItemState = (id2) => {
2111
+ const savedState = localStorage.getItem(`overlayPositionAndSize_${id2}`);
2112
+ if (savedState) {
2113
+ const state2 = JSON.parse(savedState);
2114
+ setItemState(id2, state2);
2115
+ }
2116
+ const savedGroups = localStorage.getItem("overlayGroups");
2117
+ if (savedGroups) {
2118
+ const groupData = JSON.parse(savedGroups);
2119
+ groups.value = groupData.groups || {};
2120
+ }
2121
+ };
2122
+ const applyPreset = (id2, presetName) => {
2123
+ const preset = layoutPresets[presetName];
2124
+ const updates = {};
2125
+ if (preset.width === "100%") {
2126
+ updates.width = window.innerWidth;
2127
+ updates.fullWidth = true;
2128
+ } else {
2129
+ updates.width = preset.width;
2130
+ updates.fullWidth = false;
2131
+ }
2132
+ if (preset.height === "100%") {
2133
+ updates.height = window.innerHeight;
2134
+ updates.fullHeight = true;
2135
+ } else {
2136
+ updates.height = preset.height;
2137
+ updates.fullHeight = false;
2138
+ }
2139
+ setItemState(id2, updates);
2140
+ saveItemState(id2);
2141
+ };
2142
+ const toggleFullScreen = (id2) => {
2143
+ if (!items.value[id2])
2144
+ return;
2145
+ setFullScreen(id2, !items.value[id2].fullScreen);
2146
+ };
2147
+ const setFullScreen = (id2, fullScreen) => {
2148
+ if (!items.value[id2])
2149
+ return;
2150
+ if (items.value[id2].fullScreen !== fullScreen) {
2151
+ if (fullScreen) {
2152
+ Object.keys(items.value).forEach((otherId) => {
2153
+ if (otherId !== id2) {
2154
+ items.value[otherId].zIndex = 1;
2155
+ }
2156
+ });
2157
+ items.value[id2].fullScreen = true;
2158
+ items.value[id2].prevWidth = items.value[id2].width;
2159
+ items.value[id2].prevHeight = items.value[id2].height;
2160
+ items.value[id2].prevLeft = items.value[id2].left;
2161
+ items.value[id2].prevTop = items.value[id2].top;
2162
+ items.value[id2].width = window.innerWidth;
2163
+ items.value[id2].height = window.innerHeight;
2164
+ items.value[id2].left = 0;
2165
+ items.value[id2].top = 0;
2166
+ items.value[id2].zIndex = 9999;
2167
+ } else {
2168
+ items.value[id2].fullScreen = false;
2169
+ items.value[id2].width = items.value[id2].prevWidth || 400;
2170
+ items.value[id2].height = items.value[id2].prevHeight || 300;
2171
+ items.value[id2].left = items.value[id2].prevLeft || 100;
2172
+ items.value[id2].top = items.value[id2].prevTop || 100;
2173
+ items.value[id2].zIndex = 1e3;
2174
+ Object.keys(items.value).forEach((otherId) => {
2175
+ if (otherId !== id2) {
2176
+ items.value[otherId].zIndex = 100;
2177
+ }
2178
+ });
2179
+ }
2180
+ saveItemState(id2);
2181
+ clickOnItem(id2);
2182
+ }
2183
+ };
2184
+ const resetLayout = () => {
2185
+ Object.keys(items.value).forEach((id2) => {
2186
+ localStorage.removeItem(`overlayPositionAndSize_${id2}`);
2187
+ });
2188
+ localStorage.removeItem("overlayGroups");
2189
+ groups.value = {};
2190
+ Object.keys(initialItemStates.value).forEach((id2) => {
2191
+ const initialState = initialItemStates.value[id2];
2192
+ if (!initialState)
2193
+ return;
2194
+ const resetState = {
2195
+ width: initialState.width || 400,
2196
+ height: initialState.height || 300,
2197
+ left: initialState.left || 100,
2198
+ top: initialState.top || 100,
2199
+ stickynessPosition: initialState.stickynessPosition || "free",
2200
+ fullWidth: initialState.fullWidth || false,
2201
+ fullHeight: initialState.fullHeight || false,
2202
+ zIndex: 100,
2203
+ fullScreen: false,
2204
+ clicked: false,
2205
+ group: initialState.group,
2206
+ syncDimensions: initialState.syncDimensions
2207
+ };
2208
+ items.value[id2] = resetState;
2209
+ if (resetState.group) {
2210
+ if (!groups.value[resetState.group]) {
2211
+ groups.value[resetState.group] = [];
2212
+ }
2213
+ if (!groups.value[resetState.group].includes(id2)) {
2214
+ groups.value[resetState.group].push(id2);
2215
+ }
2216
+ }
2217
+ });
2218
+ setTimeout(() => {
2219
+ window.dispatchEvent(
2220
+ new CustomEvent("layout-reset", {
2221
+ detail: { initialStates: initialItemStates.value }
2222
+ })
2223
+ );
2224
+ }, 0);
2225
+ };
2226
+ const resetSingleItem = (id2) => {
2227
+ var _a;
2228
+ const initialState = initialItemStates.value[id2];
2229
+ if (!initialState) {
2230
+ console.warn(`No initial state found for item ${id2}`);
2231
+ return;
2232
+ }
2233
+ localStorage.removeItem(`overlayPositionAndSize_${id2}`);
2234
+ const resetState = {
2235
+ width: initialState.width || 400,
2236
+ height: initialState.height || 300,
2237
+ left: initialState.left || 100,
2238
+ top: initialState.top || 100,
2239
+ stickynessPosition: initialState.stickynessPosition || "free",
2240
+ fullWidth: initialState.fullWidth || false,
2241
+ fullHeight: initialState.fullHeight || false,
2242
+ zIndex: ((_a = items.value[id2]) == null ? void 0 : _a.zIndex) || 100,
2243
+ fullScreen: false,
2244
+ clicked: false,
2245
+ group: initialState.group,
2246
+ syncDimensions: initialState.syncDimensions
2247
+ };
2248
+ items.value[id2] = resetState;
2249
+ };
2250
+ const clickOnItem = (id2) => {
2251
+ if (!items.value[id2] || items.value[id2].fullScreen)
2252
+ return;
2253
+ let maxZIndex = 99;
2254
+ Object.values(items.value).forEach((item) => {
2255
+ if (!item.fullScreen) {
2256
+ maxZIndex = Math.max(maxZIndex, item.zIndex);
2257
+ }
2258
+ });
2259
+ if (items.value[id2].zIndex <= maxZIndex) {
2260
+ items.value[id2].zIndex = maxZIndex + 1;
2261
+ saveItemState(id2);
2262
+ }
2263
+ idItemClicked.value = id2;
2264
+ };
2265
+ const setResizing = (resizing) => {
2266
+ inResizing.value = resizing;
2267
+ };
2268
+ const getResizing = () => {
2269
+ return inResizing.value;
2270
+ };
2271
+ const scrollOnItem = (id2) => {
2272
+ const itemElement = document.getElementById(id2);
2273
+ if (!itemElement)
2274
+ return;
2275
+ const observer = new IntersectionObserver(
2276
+ (entries) => {
2277
+ entries.forEach((entry) => {
2278
+ if (entry.isIntersecting) {
2279
+ idItemVisible.value = id2;
2280
+ items.value[id2].zIndex = 1e3;
2281
+ } else if (idItemVisible.value === id2) {
2282
+ items.value[id2].zIndex = 100;
2283
+ idItemVisible.value = null;
2284
+ }
2285
+ });
2286
+ },
2287
+ {
2288
+ threshold: 0.5
2289
+ }
2290
+ );
2291
+ observer.observe(itemElement);
2292
+ };
2293
+ return {
2294
+ inResizing,
2295
+ items,
2296
+ groups,
2297
+ layoutPresets,
2298
+ initialItemStates,
2299
+ registerInitialState,
2300
+ setItemState,
2301
+ saveItemState,
2302
+ loadItemState,
2303
+ setResizing,
2304
+ getResizing,
2305
+ clickOnItem,
2306
+ scrollOnItem,
2307
+ idItemVisible,
2308
+ toggleFullScreen,
2309
+ setFullScreen,
2310
+ arrangeItems,
2311
+ preventOverlap,
2312
+ syncGroupDimensions,
2313
+ applyPreset,
2314
+ getGroupItems,
2315
+ resetLayout,
2316
+ resetSingleItem,
2317
+ bringToFront
2318
+ };
2319
+ });
1625
2320
  /*! Element Plus Icons Vue v2.3.1 */
1626
2321
  var arrow_down_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
1627
2322
  name: "ArrowDown",
@@ -1719,13 +2414,14 @@ var warning_filled_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */
1719
2414
  }
1720
2415
  });
1721
2416
  var warning_filled_default = warning_filled_vue_vue_type_script_setup_true_lang_default;
1722
- const _hoisted_1$e = { class: "status-wrapper" };
1723
- const _hoisted_2$b = { class: "flow-card" };
1724
- const _hoisted_3$a = ["title"];
1725
- const _sfc_main$h = /* @__PURE__ */ defineComponent({
2417
+ const _hoisted_1$h = { class: "status-wrapper" };
2418
+ const _hoisted_2$f = { class: "flow-card" };
2419
+ const _hoisted_3$e = ["title"];
2420
+ const _sfc_main$k = /* @__PURE__ */ defineComponent({
1726
2421
  __name: "status",
1727
2422
  setup(__props) {
1728
2423
  const nodeStore = useNodeStore();
2424
+ const draggableItemStore = useItemStore();
1729
2425
  const lastStatusChange = ref(/* @__PURE__ */ new Date());
1730
2426
  const isRunning = computed$1(() => nodeStore.isRunning);
1731
2427
  const showFlowResult = computed$1(() => nodeStore.showFlowResult);
@@ -1761,17 +2457,21 @@ const _sfc_main$h = /* @__PURE__ */ defineComponent({
1761
2457
  const toggleResults = () => {
1762
2458
  nodeStore.showFlowResult = !nodeStore.showFlowResult;
1763
2459
  nodeStore.isShowingLogViewer = nodeStore.showFlowResult;
2460
+ if (nodeStore.isShowingLogViewer) {
2461
+ draggableItemStore.bringToFront("logViewer");
2462
+ draggableItemStore.bringToFront("flowresults");
2463
+ }
1764
2464
  };
1765
2465
  return (_ctx, _cache) => {
1766
2466
  const _component_el_icon = resolveComponent("el-icon");
1767
- return openBlock(), createElementBlock("div", _hoisted_1$e, [
2467
+ return openBlock(), createElementBlock("div", _hoisted_1$h, [
1768
2468
  createVNode(PopOver, {
1769
2469
  content: tooltipContent.value,
1770
2470
  title: isRunning.value ? "Processing Flow" : "Flow Idle",
1771
2471
  placement: "left"
1772
2472
  }, {
1773
2473
  default: withCtx(() => [
1774
- createBaseVNode("div", _hoisted_2$b, [
2474
+ createBaseVNode("div", _hoisted_2$f, [
1775
2475
  (openBlock(), createElementBlock("svg", {
1776
2476
  viewBox: "0 0 100 100",
1777
2477
  class: normalizeClass(["flow-animation", { "is-flowing": isRunning.value }])
@@ -1860,7 +2560,7 @@ const _sfc_main$h = /* @__PURE__ */ defineComponent({
1860
2560
  ]),
1861
2561
  _: 1
1862
2562
  })) : createCommentVNode("", true)
1863
- ], 10, _hoisted_3$a)
2563
+ ], 10, _hoisted_3$e)
1864
2564
  ]),
1865
2565
  _: 1
1866
2566
  })
@@ -1868,8 +2568,8 @@ const _sfc_main$h = /* @__PURE__ */ defineComponent({
1868
2568
  };
1869
2569
  }
1870
2570
  });
1871
- const status_vue_vue_type_style_index_0_scoped_88e0f447_lang = "";
1872
- const Status = /* @__PURE__ */ _export_sfc(_sfc_main$h, [["__scopeId", "data-v-88e0f447"]]);
2571
+ const status_vue_vue_type_style_index_0_scoped_4aa2388b_lang = "";
2572
+ const Status = /* @__PURE__ */ _export_sfc(_sfc_main$k, [["__scopeId", "data-v-4aa2388b"]]);
1873
2573
  function tryOnScopeDispose(fn) {
1874
2574
  if (getCurrentScope()) {
1875
2575
  onScopeDispose(fn);
@@ -8475,7 +9175,7 @@ const __default__$f = {
8475
9175
  name: "Handle",
8476
9176
  compatConfig: { MODE: 3 }
8477
9177
  };
8478
- const _sfc_main$f = /* @__PURE__ */ defineComponent({
9178
+ const _sfc_main$f$1 = /* @__PURE__ */ defineComponent({
8479
9179
  ...__default__$f,
8480
9180
  props: {
8481
9181
  id: { default: null },
@@ -8636,9 +9336,9 @@ const DefaultNode = function({
8636
9336
  }) {
8637
9337
  const label = data.label || _label;
8638
9338
  return [
8639
- h(_sfc_main$f, { type: "target", position: targetPosition, connectable, isValidConnection: isValidTargetPos }),
9339
+ h(_sfc_main$f$1, { type: "target", position: targetPosition, connectable, isValidConnection: isValidTargetPos }),
8640
9340
  typeof label !== "string" && label ? h(label) : h(Fragment, [label]),
8641
- h(_sfc_main$f, { type: "source", position: sourcePosition, connectable, isValidConnection: isValidSourcePos })
9341
+ h(_sfc_main$f$1, { type: "source", position: sourcePosition, connectable, isValidConnection: isValidSourcePos })
8642
9342
  ];
8643
9343
  };
8644
9344
  DefaultNode.props = ["sourcePosition", "targetPosition", "label", "isValidTargetPos", "isValidSourcePos", "connectable", "data"];
@@ -8654,7 +9354,7 @@ const OutputNode = function({
8654
9354
  }) {
8655
9355
  const label = data.label || _label;
8656
9356
  return [
8657
- h(_sfc_main$f, { type: "target", position: targetPosition, connectable, isValidConnection: isValidTargetPos }),
9357
+ h(_sfc_main$f$1, { type: "target", position: targetPosition, connectable, isValidConnection: isValidTargetPos }),
8658
9358
  typeof label !== "string" && label ? h(label) : h(Fragment, [label])
8659
9359
  ];
8660
9360
  };
@@ -8672,7 +9372,7 @@ const InputNode = function({
8672
9372
  const label = data.label || _label;
8673
9373
  return [
8674
9374
  typeof label !== "string" && label ? h(label) : h(Fragment, [label]),
8675
- h(_sfc_main$f, { type: "source", position: sourcePosition, connectable, isValidConnection: isValidSourcePos })
9375
+ h(_sfc_main$f$1, { type: "source", position: sourcePosition, connectable, isValidConnection: isValidSourcePos })
8676
9376
  ];
8677
9377
  };
8678
9378
  InputNode.props = ["sourcePosition", "label", "isValidSourcePos", "connectable", "data"];
@@ -8686,7 +9386,7 @@ const __default__$e = {
8686
9386
  name: "EdgeText",
8687
9387
  compatConfig: { MODE: 3 }
8688
9388
  };
8689
- const _sfc_main$e = /* @__PURE__ */ defineComponent({
9389
+ const _sfc_main$e$1 = /* @__PURE__ */ defineComponent({
8690
9390
  ...__default__$e,
8691
9391
  props: {
8692
9392
  x: {},
@@ -8802,7 +9502,7 @@ const _sfc_main$d$1 = /* @__PURE__ */ defineComponent({
8802
9502
  "stroke-opacity": 0,
8803
9503
  class: "vue-flow__edge-interaction"
8804
9504
  }, null, 8, _hoisted_2$1$1)) : createCommentVNode("", true),
8805
- _ctx.label && _ctx.labelX && _ctx.labelY ? (openBlock(), createBlock(_sfc_main$e, {
9505
+ _ctx.label && _ctx.labelX && _ctx.labelY ? (openBlock(), createBlock(_sfc_main$e$1, {
8806
9506
  key: 1,
8807
9507
  ref_key: "labelEl",
8808
9508
  ref: labelEl,
@@ -10248,8 +10948,8 @@ const _sfc_main$8$1 = /* @__PURE__ */ defineComponent({
10248
10948
  }
10249
10949
  });
10250
10950
  const _hoisted_1$5$1 = ["id"];
10251
- const _hoisted_2$a = ["id"];
10252
- const _hoisted_3$9 = ["id"];
10951
+ const _hoisted_2$e = ["id"];
10952
+ const _hoisted_3$d = ["id"];
10253
10953
  const __default__$7 = {
10254
10954
  name: "A11yDescriptions",
10255
10955
  compatConfig: { MODE: 3 }
@@ -10267,14 +10967,14 @@ const _sfc_main$7$1 = /* @__PURE__ */ defineComponent({
10267
10967
  createBaseVNode("div", {
10268
10968
  id: `${unref(ARIA_EDGE_DESC_KEY)}-${unref(id2)}`,
10269
10969
  style: { "display": "none" }
10270
- }, " Press enter or space to select an edge. You can then press delete to remove it or press escape to cancel. ", 8, _hoisted_2$a),
10970
+ }, " Press enter or space to select an edge. You can then press delete to remove it or press escape to cancel. ", 8, _hoisted_2$e),
10271
10971
  !unref(disableKeyboardA11y) ? (openBlock(), createElementBlock("div", {
10272
10972
  key: 0,
10273
10973
  id: `${unref(ARIA_LIVE_MESSAGE)}-${unref(id2)}`,
10274
10974
  "aria-live": "assertive",
10275
10975
  "aria-atomic": "true",
10276
10976
  style: { "position": "absolute", "width": "1px", "height": "1px", "margin": "-1px", "border": "0", "padding": "0", "overflow": "hidden", "clip": "rect(0px, 0px, 0px, 0px)", "clip-path": "inset(100%)" }
10277
- }, toDisplayString(unref(ariaLiveMessage)), 9, _hoisted_3$9)) : createCommentVNode("", true)
10977
+ }, toDisplayString(unref(ariaLiveMessage)), 9, _hoisted_3$d)) : createCommentVNode("", true)
10278
10978
  ], 64);
10279
10979
  };
10280
10980
  }
@@ -11321,7 +12021,7 @@ function useStylesLoadedWarning() {
11321
12021
  }
11322
12022
  });
11323
12023
  }
11324
- const _hoisted_1$d = /* @__PURE__ */ createBaseVNode("div", { class: "vue-flow__edge-labels" }, null, -1);
12024
+ const _hoisted_1$g = /* @__PURE__ */ createBaseVNode("div", { class: "vue-flow__edge-labels" }, null, -1);
11325
12025
  const __default__$1$1 = {
11326
12026
  name: "VueFlow",
11327
12027
  compatConfig: { MODE: 3 }
@@ -11414,7 +12114,7 @@ const _sfc_main$1$2 = /* @__PURE__ */ defineComponent({
11414
12114
  createVNode(_sfc_main$8$1, null, {
11415
12115
  default: withCtx(() => [
11416
12116
  createVNode(_sfc_main$4$1),
11417
- _hoisted_1$d,
12117
+ _hoisted_1$g,
11418
12118
  createVNode(_sfc_main$2$1),
11419
12119
  renderSlot(_ctx.$slots, "zoom-pane")
11420
12120
  ]),
@@ -11430,7 +12130,7 @@ const __default__$3 = {
11430
12130
  name: "Panel",
11431
12131
  compatConfig: { MODE: 3 }
11432
12132
  };
11433
- const _sfc_main$g = /* @__PURE__ */ defineComponent({
12133
+ const _sfc_main$j = /* @__PURE__ */ defineComponent({
11434
12134
  ...__default__$3,
11435
12135
  props: {
11436
12136
  position: {}
@@ -14172,14 +14872,14 @@ const _sfc_main$1$1 = /* @__PURE__ */ defineComponent({
14172
14872
  };
14173
14873
  }
14174
14874
  });
14175
- const _hoisted_1$c = ["width", "height", "viewBox", "aria-labelledby"];
14176
- const _hoisted_2$9 = ["id"];
14177
- const _hoisted_3$8 = ["d", "fill", "stroke", "stroke-width"];
14875
+ const _hoisted_1$f = ["width", "height", "viewBox", "aria-labelledby"];
14876
+ const _hoisted_2$d = ["id"];
14877
+ const _hoisted_3$c = ["d", "fill", "stroke", "stroke-width"];
14178
14878
  const __default__ = {
14179
14879
  name: "MiniMap",
14180
14880
  compatConfig: { MODE: 3 }
14181
14881
  };
14182
- const _sfc_main$d = /* @__PURE__ */ defineComponent({
14882
+ const _sfc_main$i = /* @__PURE__ */ defineComponent({
14183
14883
  ...__default__,
14184
14884
  props: {
14185
14885
  nodeColor: { type: [String, Function], default: "#e2e2e2" },
@@ -14342,7 +15042,7 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
14342
15042
  emit("nodeMouseleave", param);
14343
15043
  }
14344
15044
  return (_ctx, _cache) => {
14345
- return openBlock(), createBlock(unref(_sfc_main$g), {
15045
+ return openBlock(), createBlock(unref(_sfc_main$j), {
14346
15046
  position: _ctx.position,
14347
15047
  class: normalizeClass(["vue-flow__minimap", { pannable: _ctx.pannable, zoomable: _ctx.zoomable }])
14348
15048
  }, {
@@ -14360,7 +15060,7 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
14360
15060
  _ctx.ariaLabel ? (openBlock(), createElementBlock("title", {
14361
15061
  key: 0,
14362
15062
  id: `vue-flow__minimap-${unref(id2)}`
14363
- }, toDisplayString(_ctx.ariaLabel), 9, _hoisted_2$9)) : createCommentVNode("", true),
15063
+ }, toDisplayString(_ctx.ariaLabel), 9, _hoisted_2$d)) : createCommentVNode("", true),
14364
15064
  (openBlock(true), createElementBlock(Fragment, null, renderList(unref(getNodesInitialized), (node) => {
14365
15065
  return openBlock(), createBlock(_sfc_main$1$1, {
14366
15066
  id: node.id,
@@ -14392,8 +15092,8 @@ const _sfc_main$d = /* @__PURE__ */ defineComponent({
14392
15092
  stroke: _ctx.maskStrokeColor,
14393
15093
  "stroke-width": _ctx.maskStrokeWidth,
14394
15094
  "fill-rule": "evenodd"
14395
- }, null, 8, _hoisted_3$8)
14396
- ], 8, _hoisted_1$c))
15095
+ }, null, 8, _hoisted_3$c)
15096
+ ], 8, _hoisted_1$f))
14397
15097
  ]),
14398
15098
  _: 1
14399
15099
  }, 8, ["position", "class"]);
@@ -14408,16 +15108,327 @@ function toSnakeCase(str) {
14408
15108
  return str;
14409
15109
  return str.replace(/([A-Z])/g, "_$1").replace(/^_/, "").toLowerCase();
14410
15110
  }
14411
- const _hoisted_1$b = { class: "description-text" };
14412
- const _hoisted_2$8 = {
15111
+ const __vite_glob_0_0 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACkAAAApCAYAAACoYAD2AAACO0lEQVR4nN2Yz0vbYBjHv29NbZUy0B43QUG9zNPEHUT05NCTiu6o0NbDLk5a/RMERaonkSrO8zw4alFQtBsMBG96kJ5EUTcRh78QRGvsu4O8MSk1fdMmaeLnlL7p++ST53kfkjeADSCKX5GI4Ci+XQCl3uwzKXUkyYD4ZWjXKDnpUuxA+BbeBEij9hD0SgwMl+kplY5McoLmHEVMNYi06E/eNs4iEQf/zjEyonDRR9IAxMCQ5OYopIgawlz4gR1bVhKECJgPvwOsLAlAoIgAFpdMgXgAQFD704M/ZI4NAOf85IvnLJ1Jhi0kVcvNUCtFvvAsKVtk0haSXOU2s8sz8XoyqWfjsKpMJ3bQUVmNt6WerHNMzSQT/ByPYXDrJyq/z+Li/i7rPK5M6gET7NqIYvloXxovd7mzzjW1cdrXFrHx91BzXNPKnS6Y1HDjhjYOy1TnelQp6Aum7QDVMSyTTLAnHsPK8fMaTPqCIESLokGScsGlwz1pPBdBgLPciR4fd8CaN0+72871qDKD/pCmEsvhkmQX5qVtdRHxE2WT5CoI6Ng4/to6zDR9wlRiWymosUkyoduaHG1oBgAEt35JY7muwXR0eeJ4BCfKXW78Pn36iDH+sQXBuno9QgPglIy1dqme97pLAAA752eGvNZxSbZXVHEF+/r+Q14yL2GL90lbSKqW28hdohYsnUkCeglYXPKx2NkHyCQpJT8Kp5MJmkTv4A0gk3zsD3WnQMYKJyWHXouBYVehLV4f/wHit6c8llKODwAAAABJRU5ErkJggg==";
15112
+ const __vite_glob_0_1 = "/assets/airbyte-292aa232.png";
15113
+ const __vite_glob_0_2 = "/assets/cloud_storage_reader-aa1415d6.png";
15114
+ const __vite_glob_0_3 = "data:image/png;base64,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";
15115
+ const __vite_glob_0_4 = "/assets/cross_join-d30c0290.png";
15116
+ const __vite_glob_0_5 = "/assets/database_reader-ce1e55f3.svg";
15117
+ const __vite_glob_0_6 = "/assets/database_writer-b4ad0753.svg";
15118
+ const __vite_glob_0_7 = "/assets/explore_data-8a0a2861.png";
15119
+ const __vite_glob_0_8 = "data:image/png;base64,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";
15120
+ const __vite_glob_0_9 = "/assets/filter-d7708bda.png";
15121
+ const __vite_glob_0_10 = "/assets/formula-eeeb1611.png";
15122
+ const __vite_glob_0_11 = "/assets/fuzzy_match-40c161b2.png";
15123
+ const __vite_glob_0_12 = "data:image/png;base64,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";
15124
+ const __vite_glob_0_13 = "/assets/graph_solver-8b7888b8.png";
15125
+ const __vite_glob_0_14 = "/assets/group_by-80561fc3.png";
15126
+ const __vite_glob_0_15 = "/assets/input_data-ab2eb678.png";
15127
+ const __vite_glob_0_16 = "/assets/join-349043ae.png";
15128
+ const __vite_glob_0_17 = "/assets/manual_input-ae98f31d.png";
15129
+ const __vite_glob_0_18 = "/assets/old_join-5d0eb604.png";
15130
+ const __vite_glob_0_19 = "/assets/output-06ec0371.png";
15131
+ const __vite_glob_0_20 = "/assets/pivot-9660df51.png";
15132
+ const __vite_glob_0_21 = "/assets/polars_code-05ce5dc6.png";
15133
+ const __vite_glob_0_22 = "/assets/record_count-dab44eb5.png";
15134
+ const __vite_glob_0_23 = "/assets/record_id-0b15856b.png";
15135
+ const __vite_glob_0_24 = "/assets/sample-693a88b5.png";
15136
+ const __vite_glob_0_25 = "/assets/select-b0d0437a.png";
15137
+ const __vite_glob_0_26 = "/assets/sort-2aa579f0.png";
15138
+ const __vite_glob_0_27 = "/assets/summarize-2a099231.png";
15139
+ const __vite_glob_0_28 = "/assets/text_to_rows-859b29ea.png";
15140
+ const __vite_glob_0_29 = "/assets/union-2d8609f4.png";
15141
+ const __vite_glob_0_30 = "/assets/unique-1958b98a.png";
15142
+ const __vite_glob_0_31 = "/assets/unpivot-d3cb4b5b.png";
15143
+ const __vite_glob_0_32 = "/assets/user-defined-icon-0ae16c90.png";
15144
+ const __vite_glob_0_33 = "/assets/view-7a0f0be1.png";
15145
+ const getImageUrl = (name) => {
15146
+ return new URL((/* @__PURE__ */ Object.assign({ "./assets/icons/Output2.png": __vite_glob_0_0, "./assets/icons/airbyte.png": __vite_glob_0_1, "./assets/icons/cloud_storage_reader.png": __vite_glob_0_2, "./assets/icons/cloud_storage_writer.png": __vite_glob_0_3, "./assets/icons/cross_join.png": __vite_glob_0_4, "./assets/icons/database_reader.svg": __vite_glob_0_5, "./assets/icons/database_writer.svg": __vite_glob_0_6, "./assets/icons/explore_data.png": __vite_glob_0_7, "./assets/icons/external_source.png": __vite_glob_0_8, "./assets/icons/filter.png": __vite_glob_0_9, "./assets/icons/formula.png": __vite_glob_0_10, "./assets/icons/fuzzy_match.png": __vite_glob_0_11, "./assets/icons/google_sheet.png": __vite_glob_0_12, "./assets/icons/graph_solver.png": __vite_glob_0_13, "./assets/icons/group_by.png": __vite_glob_0_14, "./assets/icons/input_data.png": __vite_glob_0_15, "./assets/icons/join.png": __vite_glob_0_16, "./assets/icons/manual_input.png": __vite_glob_0_17, "./assets/icons/old_join.png": __vite_glob_0_18, "./assets/icons/output.png": __vite_glob_0_19, "./assets/icons/pivot.png": __vite_glob_0_20, "./assets/icons/polars_code.png": __vite_glob_0_21, "./assets/icons/record_count.png": __vite_glob_0_22, "./assets/icons/record_id.png": __vite_glob_0_23, "./assets/icons/sample.png": __vite_glob_0_24, "./assets/icons/select.png": __vite_glob_0_25, "./assets/icons/sort.png": __vite_glob_0_26, "./assets/icons/summarize.png": __vite_glob_0_27, "./assets/icons/text_to_rows.png": __vite_glob_0_28, "./assets/icons/union.png": __vite_glob_0_29, "./assets/icons/unique.png": __vite_glob_0_30, "./assets/icons/unpivot.png": __vite_glob_0_31, "./assets/icons/user-defined-icon.png": __vite_glob_0_32, "./assets/icons/view.png": __vite_glob_0_33 }))[`./assets/icons/${name}`], self.location).href;
15147
+ };
15148
+ const fetchNodes = async () => {
15149
+ const response = await axios.get("/node_list");
15150
+ const listNodes = response.data;
15151
+ return listNodes;
15152
+ };
15153
+ const _hoisted_1$e = { class: "component-wrapper" };
15154
+ const _hoisted_2$c = { class: "tooltip-text" };
15155
+ const _hoisted_3$b = ["src", "alt"];
15156
+ const _sfc_main$h = /* @__PURE__ */ defineComponent({
15157
+ __name: "nodeButton",
15158
+ props: {
15159
+ nodeId: {},
15160
+ imageSrc: {},
15161
+ title: {},
15162
+ drawerComponent: {},
15163
+ drawerProps: {},
15164
+ nodeTitleInfo: {}
15165
+ },
15166
+ emits: ["click"],
15167
+ setup(__props, { emit: __emit }) {
15168
+ const description = ref("");
15169
+ const mouseX = ref(0);
15170
+ const mouseY = ref(0);
15171
+ const nodeStore = useNodeStore();
15172
+ const props2 = __props;
15173
+ const isSelected = computed$1(() => {
15174
+ return nodeStore.node_id == props2.nodeId;
15175
+ });
15176
+ computed$1(() => {
15177
+ const overlayWidth = 400;
15178
+ const overlayHeight = 200;
15179
+ const buffer = 100;
15180
+ let left = mouseX.value + buffer;
15181
+ let top = mouseY.value + buffer;
15182
+ if (left + overlayWidth > window.innerWidth) {
15183
+ left -= overlayWidth + 2 * buffer;
15184
+ }
15185
+ if (top + overlayHeight > window.innerHeight) {
15186
+ top -= overlayHeight + 2 * buffer;
15187
+ }
15188
+ left = Math.max(left, buffer);
15189
+ top = Math.max(top, buffer);
15190
+ return {
15191
+ top: `${top}px`,
15192
+ left: `${left}px`
15193
+ };
15194
+ });
15195
+ const nodeResult = computed$1(() => {
15196
+ const nodeResult2 = nodeStore.getNodeResult(props2.nodeId);
15197
+ const nodeValidation = nodeStore.getNodeValidation(props2.nodeId);
15198
+ if (nodeResult2 && nodeResult2.is_running) {
15199
+ return {
15200
+ success: void 0,
15201
+ statusIndicator: "running",
15202
+ hasRun: false,
15203
+ error: void 0
15204
+ };
15205
+ }
15206
+ if (nodeResult2 && !nodeResult2.is_running) {
15207
+ if (nodeValidation) {
15208
+ if (nodeResult2.success === true && !nodeValidation.isValid && nodeValidation.validationTime > nodeResult2.start_timestamp) {
15209
+ return {
15210
+ success: true,
15211
+ statusIndicator: "warning",
15212
+ error: nodeValidation.error,
15213
+ hasRun: true
15214
+ };
15215
+ }
15216
+ if (nodeResult2.success === true && nodeValidation.isValid) {
15217
+ return {
15218
+ success: true,
15219
+ statusIndicator: "success",
15220
+ error: nodeResult2.error || nodeValidation.error,
15221
+ hasRun: true
15222
+ };
15223
+ }
15224
+ if (nodeResult2.success === false && nodeValidation.isValid && nodeValidation.validationTime > nodeResult2.start_timestamp) {
15225
+ return {
15226
+ success: false,
15227
+ statusIndicator: "unknown",
15228
+ error: nodeResult2.error || nodeValidation.error,
15229
+ hasRun: true
15230
+ };
15231
+ }
15232
+ if (nodeResult2.success === false && (!nodeValidation.isValid || !nodeValidation.validationTime)) {
15233
+ return {
15234
+ success: false,
15235
+ statusIndicator: "failure",
15236
+ error: nodeResult2.error || nodeValidation.error,
15237
+ hasRun: true
15238
+ };
15239
+ }
15240
+ }
15241
+ return {
15242
+ success: nodeResult2.success ?? false,
15243
+ statusIndicator: nodeResult2.success ? "success" : "failure",
15244
+ error: nodeResult2.error,
15245
+ hasRun: true
15246
+ };
15247
+ }
15248
+ if (nodeValidation) {
15249
+ if (!nodeValidation.isValid) {
15250
+ return {
15251
+ success: false,
15252
+ statusIndicator: "warning",
15253
+ error: nodeValidation.error,
15254
+ hasRun: false
15255
+ };
15256
+ }
15257
+ if (nodeValidation.isValid) {
15258
+ return {
15259
+ success: true,
15260
+ statusIndicator: "unknown",
15261
+ error: nodeValidation.error,
15262
+ hasRun: false
15263
+ };
15264
+ }
15265
+ }
15266
+ return void 0;
15267
+ });
15268
+ const tooltipContent = computed$1(() => {
15269
+ var _a, _b, _c;
15270
+ switch ((_a = nodeResult.value) == null ? void 0 : _a.statusIndicator) {
15271
+ case "success":
15272
+ return "Operation successful";
15273
+ case "failure":
15274
+ return "Operation failed: \n" + (((_b = nodeResult.value) == null ? void 0 : _b.error) || "No error message available");
15275
+ case "warning":
15276
+ return "Operation warning: \n" + (((_c = nodeResult.value) == null ? void 0 : _c.error) || "No warning message available");
15277
+ case "running":
15278
+ return "Operation in progress...";
15279
+ case "unknown":
15280
+ default:
15281
+ return "Status unknown";
15282
+ }
15283
+ });
15284
+ const getNodeDescription = async () => {
15285
+ description.value = await nodeStore.getNodeDescription(props2.nodeId);
15286
+ };
15287
+ watch$1(
15288
+ () => nodeStore.node_id,
15289
+ (newNodeId, oldNodeId) => {
15290
+ if (String(newNodeId) === String(props2.nodeId) && props2.drawerComponent) {
15291
+ nodeStore.openDrawer(props2.drawerComponent, props2.nodeTitleInfo);
15292
+ }
15293
+ },
15294
+ { immediate: true }
15295
+ );
15296
+ onMounted(() => {
15297
+ watch$1(
15298
+ () => props2.nodeId,
15299
+ async (newVal) => {
15300
+ if (newVal !== -1) {
15301
+ await nextTick();
15302
+ getNodeDescription();
15303
+ }
15304
+ }
15305
+ );
15306
+ });
15307
+ return (_ctx, _cache) => {
15308
+ var _a;
15309
+ return openBlock(), createElementBlock("div", _hoisted_1$e, [
15310
+ createBaseVNode("div", {
15311
+ class: normalizeClass(["status-indicator", (_a = nodeResult.value) == null ? void 0 : _a.statusIndicator])
15312
+ }, [
15313
+ createBaseVNode("span", _hoisted_2$c, toDisplayString(tooltipContent.value), 1)
15314
+ ], 2),
15315
+ createBaseVNode("button", {
15316
+ class: normalizeClass(["node-button", { selected: isSelected.value }]),
15317
+ onClick: _cache[0] || (_cache[0] = //@ts-ignore
15318
+ (...args) => _ctx.onClick && _ctx.onClick(...args))
15319
+ }, [
15320
+ createBaseVNode("img", {
15321
+ src: unref(getImageUrl)(props2.imageSrc),
15322
+ alt: props2.title,
15323
+ width: "50"
15324
+ }, null, 8, _hoisted_3$b)
15325
+ ], 2)
15326
+ ]);
15327
+ };
15328
+ }
15329
+ });
15330
+ const nodeButton_vue_vue_type_style_index_0_scoped_8ef0b204_lang = "";
15331
+ const NodeButton = /* @__PURE__ */ _export_sfc(_sfc_main$h, [["__scopeId", "data-v-8ef0b204"]]);
15332
+ const _sfc_main$g = /* @__PURE__ */ defineComponent({
15333
+ __name: "GenericNode",
15334
+ props: {
15335
+ nodeId: {},
15336
+ nodeData: {}
15337
+ },
15338
+ setup(__props) {
15339
+ const drawerModules = /* @__PURE__ */ Object.assign({ "./elements/cloudStorageReader/CloudStorageReader.vue": () => __vitePreload(() => import("./CloudStorageReader-d5b1b6c9.js"), true ? ["assets/CloudStorageReader-d5b1b6c9.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/vue-content-loader.es-2c8e608f.js","assets/vue-codemirror.esm-41b0e0d7.js","assets/vue-codemirror-bccfde04.css","assets/api-c1bad5ca.js","assets/genericNodeSettings-4fe5f36b.js","assets/genericNodeSettings-924759c7.css","assets/CloudStorageReader-29d14fcc.css"] : void 0), "./elements/cloudStorageWriter/CloudStorageWriter.vue": () => __vitePreload(() => import("./CloudStorageWriter-00d87aad.js"), true ? ["assets/CloudStorageWriter-00d87aad.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/vue-content-loader.es-2c8e608f.js","assets/vue-codemirror.esm-41b0e0d7.js","assets/vue-codemirror-bccfde04.css","assets/api-c1bad5ca.js","assets/genericNodeSettings-4fe5f36b.js","assets/genericNodeSettings-924759c7.css","assets/CloudStorageWriter-b0ee067f.css"] : void 0), "./elements/crossJoin/CrossJoin.vue": () => __vitePreload(() => import("./CrossJoin-702a3edd.js"), true ? ["assets/CrossJoin-702a3edd.js","assets/vue-content-loader.es-2c8e608f.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/vue-codemirror.esm-41b0e0d7.js","assets/vue-codemirror-bccfde04.css","assets/selectDynamic-92e25ee3.js","assets/UnavailableFields-a03f512c.js","assets/UnavailableFields-5edd5322.css","assets/selectDynamic-aa913ff4.css","assets/genericNodeSettings-4fe5f36b.js","assets/genericNodeSettings-924759c7.css","assets/CrossJoin-1119d18e.css"] : void 0), "./elements/customNode/CustomNode.vue": () => __vitePreload(() => import("./CustomNode-b1519993.js"), true ? ["assets/CustomNode-b1519993.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/vue-codemirror.esm-41b0e0d7.js","assets/vue-codemirror-bccfde04.css","assets/genericNodeSettings-4fe5f36b.js","assets/genericNodeSettings-924759c7.css","assets/MultiSelect.vue_vue_type_script_setup_true_lang-b0e538c2.js","assets/ToggleSwitch.vue_vue_type_script_setup_true_lang-38478c20.js","assets/TextInput.vue_vue_type_script_setup_true_lang-5896c375.js","assets/NumericInput.vue_vue_type_script_setup_true_lang-e0edeccc.js","assets/SliderInput-7cb93e62.js","assets/SliderInput-b8fb6a8c.css","assets/SingleSelect.vue_vue_type_script_setup_true_lang-33e3ff9b.js","assets/ColumnSelector-4685e75d.js","assets/ColumnSelector-47996a16.css","assets/CustomNode-74a37f74.css"] : void 0), "./elements/customNode/components/ColumnSelector.vue": () => __vitePreload(() => import("./ColumnSelector-4685e75d.js"), true ? ["assets/ColumnSelector-4685e75d.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/ColumnSelector-47996a16.css"] : void 0), "./elements/customNode/components/MultiSelect.vue": () => __vitePreload(() => import("./MultiSelect-0e8724a3.js"), true ? ["assets/MultiSelect-0e8724a3.js","assets/MultiSelect.vue_vue_type_script_setup_true_lang-b0e538c2.js","assets/index-5429bbf8.js","assets/index-50508d4d.css"] : void 0), "./elements/customNode/components/NumericInput.vue": () => __vitePreload(() => import("./NumericInput-3d63a470.js"), true ? ["assets/NumericInput-3d63a470.js","assets/NumericInput.vue_vue_type_script_setup_true_lang-e0edeccc.js","assets/index-5429bbf8.js","assets/index-50508d4d.css"] : void 0), "./elements/customNode/components/SingleSelect.vue": () => __vitePreload(() => import("./SingleSelect-6c777aac.js"), true ? ["assets/SingleSelect-6c777aac.js","assets/SingleSelect.vue_vue_type_script_setup_true_lang-33e3ff9b.js","assets/index-5429bbf8.js","assets/index-50508d4d.css"] : void 0), "./elements/customNode/components/SliderInput.vue": () => __vitePreload(() => import("./SliderInput-7cb93e62.js"), true ? ["assets/SliderInput-7cb93e62.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/SliderInput-b8fb6a8c.css"] : void 0), "./elements/customNode/components/TextInput.vue": () => __vitePreload(() => import("./TextInput-d9a40c11.js"), true ? ["assets/TextInput-d9a40c11.js","assets/TextInput.vue_vue_type_script_setup_true_lang-5896c375.js","assets/index-5429bbf8.js","assets/index-50508d4d.css"] : void 0), "./elements/customNode/components/ToggleSwitch.vue": () => __vitePreload(() => import("./ToggleSwitch-4ef91d19.js"), true ? ["assets/ToggleSwitch-4ef91d19.js","assets/ToggleSwitch.vue_vue_type_script_setup_true_lang-38478c20.js","assets/index-5429bbf8.js","assets/index-50508d4d.css"] : void 0), "./elements/databaseReader/DatabaseConnectionSettings.vue": () => __vitePreload(() => import("./DatabaseConnectionSettings-6f3e4ea5.js"), true ? ["assets/DatabaseConnectionSettings-6f3e4ea5.js","assets/secretApi-68435402.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/DatabaseConnectionSettings-0c04b2e5.css"] : void 0), "./elements/databaseReader/DatabaseReader.vue": () => __vitePreload(() => import("./DatabaseReader-d38c7295.js"), true ? ["assets/DatabaseReader-d38c7295.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/vue-content-loader.es-2c8e608f.js","assets/vue-codemirror.esm-41b0e0d7.js","assets/vue-codemirror-bccfde04.css","assets/api-cf1221f0.js","assets/DatabaseConnectionSettings-6f3e4ea5.js","assets/secretApi-68435402.js","assets/DatabaseConnectionSettings-0c04b2e5.css","assets/SQLQueryComponent-df51adbe.js","assets/SQLQueryComponent-36cef432.css","assets/genericNodeSettings-4fe5f36b.js","assets/genericNodeSettings-924759c7.css","assets/DatabaseReader-ae61773c.css"] : void 0), "./elements/databaseReader/SQLQueryComponent.vue": () => __vitePreload(() => import("./SQLQueryComponent-df51adbe.js"), true ? ["assets/SQLQueryComponent-df51adbe.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/SQLQueryComponent-36cef432.css"] : void 0), "./elements/databaseWriter/DatabaseWriter.vue": () => __vitePreload(() => import("./DatabaseWriter-b04ef46a.js"), true ? ["assets/DatabaseWriter-b04ef46a.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/vue-content-loader.es-2c8e608f.js","assets/vue-codemirror.esm-41b0e0d7.js","assets/vue-codemirror-bccfde04.css","assets/api-cf1221f0.js","assets/DatabaseConnectionSettings-6f3e4ea5.js","assets/secretApi-68435402.js","assets/DatabaseConnectionSettings-0c04b2e5.css","assets/genericNodeSettings-4fe5f36b.js","assets/genericNodeSettings-924759c7.css","assets/DatabaseWriter-2f570e53.css"] : void 0), "./elements/exploreData/ExploreData.vue": () => __vitePreload(() => import("./ExploreData-5fa10ed8.js"), true ? ["assets/ExploreData-5fa10ed8.js","assets/vue-content-loader.es-2c8e608f.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/VueGraphicWalker-e51b9924.js","assets/VueGraphicWalker-ed5ab88b.css","assets/vue-codemirror.esm-41b0e0d7.js","assets/vue-codemirror-bccfde04.css","assets/ExploreData-2d0cf4db.css"] : void 0), "./elements/exploreData/vueGraphicWalker/VueGraphicWalker.vue": () => __vitePreload(() => import("./VueGraphicWalker-e51b9924.js"), true ? ["assets/VueGraphicWalker-e51b9924.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/VueGraphicWalker-ed5ab88b.css"] : void 0), "./elements/externalSource/ExternalSource.vue": () => __vitePreload(() => import("./ExternalSource-d39af878.js"), true ? ["assets/ExternalSource-d39af878.js","assets/vue-content-loader.es-2c8e608f.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/vue-codemirror.esm-41b0e0d7.js","assets/vue-codemirror-bccfde04.css","assets/genericNodeSettings-4fe5f36b.js","assets/genericNodeSettings-924759c7.css","assets/ExternalSource-e37b6275.css"] : void 0), "./elements/filter/Filter.vue": () => __vitePreload(() => import("./Filter-9b6d08db.js"), true ? ["assets/Filter-9b6d08db.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/vue-content-loader.es-2c8e608f.js","assets/dropDown-614b998d.js","assets/dropDown-35135ba8.css","assets/vue-codemirror.esm-41b0e0d7.js","assets/vue-codemirror-bccfde04.css","assets/fullEditor-f7971590.js","assets/fullEditor-178376bb.css","assets/genericNodeSettings-4fe5f36b.js","assets/genericNodeSettings-924759c7.css","assets/Filter-f62091b3.css"] : void 0), "./elements/formula/Formula.vue": () => __vitePreload(() => import("./Formula-6b04fb1d.js"), true ? ["assets/Formula-6b04fb1d.js","assets/vue-content-loader.es-2c8e608f.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/vue-codemirror.esm-41b0e0d7.js","assets/vue-codemirror-bccfde04.css","assets/fullEditor-f7971590.js","assets/fullEditor-178376bb.css","assets/dropDown-614b998d.js","assets/dropDown-35135ba8.css","assets/genericNodeSettings-4fe5f36b.js","assets/genericNodeSettings-924759c7.css","assets/Formula-bb96803d.css"] : void 0), "./elements/fuzzyMatch/FuzzyMatch.vue": () => __vitePreload(() => import("./FuzzyMatch-999521f4.js"), true ? ["assets/FuzzyMatch-999521f4.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/vue-codemirror.esm-41b0e0d7.js","assets/vue-codemirror-bccfde04.css","assets/dropDown-614b998d.js","assets/dropDown-35135ba8.css","assets/selectDynamic-92e25ee3.js","assets/UnavailableFields-a03f512c.js","assets/UnavailableFields-5edd5322.css","assets/selectDynamic-aa913ff4.css","assets/genericNodeSettings-4fe5f36b.js","assets/genericNodeSettings-924759c7.css","assets/vue-content-loader.es-2c8e608f.js","assets/FuzzyMatch-1010f966.css"] : void 0), "./elements/graphSolver/ContextMenu.vue": () => __vitePreload(() => import("./ContextMenu-70ae0c79.js"), true ? ["assets/ContextMenu-70ae0c79.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/ContextMenu-63cfa99b.css"] : void 0), "./elements/graphSolver/GraphSolver.vue": () => __vitePreload(() => import("./GraphSolver-17dd2198.js"), true ? ["assets/GraphSolver-17dd2198.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/vue-codemirror.esm-41b0e0d7.js","assets/vue-codemirror-bccfde04.css","assets/ContextMenu-70ae0c79.js","assets/ContextMenu-63cfa99b.css","assets/SettingsSection-7ded385d.js","assets/SettingsSection-5c696bee.css","assets/genericNodeSettings-4fe5f36b.js","assets/genericNodeSettings-924759c7.css","assets/GraphSolver-f0cb7bfb.css"] : void 0), "./elements/graphSolver/PivotValidation.vue": () => __vitePreload(() => import("./PivotValidation-de9f43fe.js"), true ? ["assets/PivotValidation-de9f43fe.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/PivotValidation-891ddfb0.css"] : void 0), "./elements/graphSolver/SettingsSection.vue": () => __vitePreload(() => import("./SettingsSection-7ded385d.js"), true ? ["assets/SettingsSection-7ded385d.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/SettingsSection-5c696bee.css"] : void 0), "./elements/groupBy/GroupBy.vue": () => __vitePreload(() => import("./GroupBy-6b039e18.js"), true ? ["assets/GroupBy-6b039e18.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/vue-content-loader.es-2c8e608f.js","assets/vue-codemirror.esm-41b0e0d7.js","assets/vue-codemirror-bccfde04.css","assets/genericNodeSettings-4fe5f36b.js","assets/genericNodeSettings-924759c7.css","assets/GroupBy-b9505323.css"] : void 0), "./elements/join/Join.vue": () => __vitePreload(() => import("./Join-24d0f113.js"), true ? ["assets/Join-24d0f113.js","assets/vue-content-loader.es-2c8e608f.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/vue-codemirror.esm-41b0e0d7.js","assets/vue-codemirror-bccfde04.css","assets/dropDown-614b998d.js","assets/dropDown-35135ba8.css","assets/selectDynamic-92e25ee3.js","assets/UnavailableFields-a03f512c.js","assets/UnavailableFields-5edd5322.css","assets/selectDynamic-aa913ff4.css","assets/genericNodeSettings-4fe5f36b.js","assets/genericNodeSettings-924759c7.css","assets/Join-fd79b451.css"] : void 0), "./elements/manualInput/ManualInput.vue": () => __vitePreload(() => import("./ManualInput-34639209.js"), true ? ["assets/ManualInput-34639209.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/vue-codemirror.esm-41b0e0d7.js","assets/vue-codemirror-bccfde04.css","assets/genericNodeSettings-4fe5f36b.js","assets/genericNodeSettings-924759c7.css","assets/ManualInput-3246a08d.css"] : void 0), "./elements/output/Output.vue": () => __vitePreload(() => import("./Output-edea9802.js"), true ? ["assets/Output-edea9802.js","assets/nodeInput-5d0d6b79.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/vue-codemirror.esm-41b0e0d7.js","assets/vue-codemirror-bccfde04.css","assets/outputCsv-076b85ab.js","assets/outputCsv-9cc59e0b.css","assets/outputExcel-0fd17dbe.js","assets/outputExcel-b41305c0.css","assets/outputParquet-b61e0847.js","assets/outputParquet-cf8cf3f2.css","assets/Output-283fe388.css"] : void 0), "./elements/output/outputCsv.vue": () => __vitePreload(() => import("./outputCsv-076b85ab.js"), true ? ["assets/outputCsv-076b85ab.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/outputCsv-9cc59e0b.css"] : void 0), "./elements/output/outputExcel.vue": () => __vitePreload(() => import("./outputExcel-0fd17dbe.js"), true ? ["assets/outputExcel-0fd17dbe.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/outputExcel-b41305c0.css"] : void 0), "./elements/output/outputParquet.vue": () => __vitePreload(() => import("./outputParquet-b61e0847.js"), true ? ["assets/outputParquet-b61e0847.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/outputParquet-cf8cf3f2.css"] : void 0), "./elements/pivot/ContextMenu.vue": () => __vitePreload(() => import("./ContextMenu-f149cf7c.js"), true ? ["assets/ContextMenu-f149cf7c.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/ContextMenu-4c74eef1.css"] : void 0), "./elements/pivot/Pivot.vue": () => __vitePreload(() => import("./Pivot-61d19301.js"), true ? ["assets/Pivot-61d19301.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/vue-codemirror.esm-41b0e0d7.js","assets/vue-codemirror-bccfde04.css","assets/ContextMenu-f149cf7c.js","assets/ContextMenu-4c74eef1.css","assets/SettingsSection-e1e9c953.js","assets/SettingsSection-71e6b7e3.css","assets/PivotValidation-f97fec5b.js","assets/PivotValidation-c46cd420.css","assets/genericNodeSettings-4fe5f36b.js","assets/genericNodeSettings-924759c7.css","assets/Pivot-cf333e3d.css"] : void 0), "./elements/pivot/PivotValidation.vue": () => __vitePreload(() => import("./PivotValidation-f97fec5b.js"), true ? ["assets/PivotValidation-f97fec5b.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/PivotValidation-c46cd420.css"] : void 0), "./elements/pivot/SettingsSection.vue": () => __vitePreload(() => import("./SettingsSection-e1e9c953.js"), true ? ["assets/SettingsSection-e1e9c953.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/SettingsSection-71e6b7e3.css"] : void 0), "./elements/polarsCode/PolarsCode.vue": () => __vitePreload(() => import("./PolarsCode-bc3c9984.js"), true ? ["assets/PolarsCode-bc3c9984.js","assets/vue-content-loader.es-2c8e608f.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/vue-codemirror.esm-41b0e0d7.js","assets/vue-codemirror-bccfde04.css","assets/genericNodeSettings-4fe5f36b.js","assets/genericNodeSettings-924759c7.css","assets/PolarsCode-650322d1.css"] : void 0), "./elements/read/Read.vue": () => __vitePreload(() => import("./Read-64a3f259.js"), true ? ["assets/Read-64a3f259.js","assets/vue-content-loader.es-2c8e608f.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/readExcel-67b4aee0.js","assets/dropDown-614b998d.js","assets/dropDown-35135ba8.css","assets/readExcel-806d2826.css","assets/readCsv-a8bb8b61.js","assets/readCsv-c767cb37.css","assets/readParquet-92ce1dbc.js","assets/readParquet-48c81530.css","assets/nodeInput-5d0d6b79.js","assets/vue-codemirror.esm-41b0e0d7.js","assets/vue-codemirror-bccfde04.css","assets/Read-e808b239.css"] : void 0), "./elements/read/readCsv.vue": () => __vitePreload(() => import("./readCsv-a8bb8b61.js"), true ? ["assets/readCsv-a8bb8b61.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/readCsv-c767cb37.css"] : void 0), "./elements/read/readExcel.vue": () => __vitePreload(() => import("./readExcel-67b4aee0.js"), true ? ["assets/readExcel-67b4aee0.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/dropDown-614b998d.js","assets/dropDown-35135ba8.css","assets/vue-content-loader.es-2c8e608f.js","assets/readExcel-806d2826.css"] : void 0), "./elements/read/readParquet.vue": () => __vitePreload(() => import("./readParquet-92ce1dbc.js"), true ? ["assets/readParquet-92ce1dbc.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/readParquet-48c81530.css"] : void 0), "./elements/recordCount/RecordCount.vue": () => __vitePreload(() => import("./RecordCount-3d5039be.js"), true ? ["assets/RecordCount-3d5039be.js","assets/vue-codemirror.esm-41b0e0d7.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/vue-codemirror-bccfde04.css","assets/genericNodeSettings-4fe5f36b.js","assets/genericNodeSettings-924759c7.css"] : void 0), "./elements/recordId/RecordId.vue": () => __vitePreload(() => import("./RecordId-597510e0.js"), true ? ["assets/RecordId-597510e0.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/vue-codemirror.esm-41b0e0d7.js","assets/vue-codemirror-bccfde04.css","assets/ContextMenu-f149cf7c.js","assets/ContextMenu-4c74eef1.css","assets/SettingsSection-e1e9c953.js","assets/SettingsSection-71e6b7e3.css","assets/genericNodeSettings-4fe5f36b.js","assets/genericNodeSettings-924759c7.css"] : void 0), "./elements/sample/Sample.vue": () => __vitePreload(() => import("./Sample-4be0a507.js"), true ? ["assets/Sample-4be0a507.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/vue-codemirror.esm-41b0e0d7.js","assets/vue-codemirror-bccfde04.css","assets/genericNodeSettings-4fe5f36b.js","assets/genericNodeSettings-924759c7.css"] : void 0), "./elements/select/Select.vue": () => __vitePreload(() => import("./Select-9b72f201.js"), true ? ["assets/Select-9b72f201.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/vue-content-loader.es-2c8e608f.js","assets/vue-codemirror.esm-41b0e0d7.js","assets/vue-codemirror-bccfde04.css","assets/selectDynamic-92e25ee3.js","assets/UnavailableFields-a03f512c.js","assets/UnavailableFields-5edd5322.css","assets/selectDynamic-aa913ff4.css","assets/genericNodeSettings-4fe5f36b.js","assets/genericNodeSettings-924759c7.css"] : void 0), "./elements/sort/Sort.vue": () => __vitePreload(() => import("./Sort-6cbde21a.js"), true ? ["assets/Sort-6cbde21a.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/vue-codemirror.esm-41b0e0d7.js","assets/vue-codemirror-bccfde04.css","assets/vue-content-loader.es-2c8e608f.js","assets/genericNodeSettings-4fe5f36b.js","assets/genericNodeSettings-924759c7.css","assets/Sort-3643d625.css"] : void 0), "./elements/textToRows/TextToRows.vue": () => __vitePreload(() => import("./TextToRows-c4fcbf4d.js"), true ? ["assets/TextToRows-c4fcbf4d.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/vue-codemirror.esm-41b0e0d7.js","assets/vue-codemirror-bccfde04.css","assets/dropDown-614b998d.js","assets/dropDown-35135ba8.css","assets/UnavailableFields-a03f512c.js","assets/UnavailableFields-5edd5322.css","assets/genericNodeSettings-4fe5f36b.js","assets/genericNodeSettings-924759c7.css","assets/vue-content-loader.es-2c8e608f.js","assets/TextToRows-5d2c1190.css"] : void 0), "./elements/union/Union.vue": () => __vitePreload(() => import("./Union-bfe9b996.js"), true ? ["assets/Union-bfe9b996.js","assets/vue-codemirror.esm-41b0e0d7.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/vue-codemirror-bccfde04.css","assets/genericNodeSettings-4fe5f36b.js","assets/genericNodeSettings-924759c7.css","assets/Union-af6c3d9b.css"] : void 0), "./elements/unique/Unique.vue": () => __vitePreload(() => import("./Unique-5d023a27.js"), true ? ["assets/Unique-5d023a27.js","assets/nodeInput-5d0d6b79.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/vue-content-loader.es-2c8e608f.js","assets/vue-codemirror.esm-41b0e0d7.js","assets/vue-codemirror-bccfde04.css","assets/selectDynamic-92e25ee3.js","assets/UnavailableFields-a03f512c.js","assets/UnavailableFields-5edd5322.css","assets/selectDynamic-aa913ff4.css","assets/genericNodeSettings-4fe5f36b.js","assets/genericNodeSettings-924759c7.css","assets/Unique-f9fb0809.css"] : void 0), "./elements/unpivot/ContextMenu.vue": () => __vitePreload(() => import("./ContextMenu-23e909da.js"), true ? ["assets/ContextMenu-23e909da.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/ContextMenu-c13f91d0.css"] : void 0), "./elements/unpivot/SettingsSection.vue": () => __vitePreload(() => import("./SettingsSection-f0f75a42.js"), true ? ["assets/SettingsSection-f0f75a42.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/SettingsSection-2e4d03c4.css"] : void 0), "./elements/unpivot/Unpivot.vue": () => __vitePreload(() => import("./Unpivot-91cc5354.js"), true ? ["assets/Unpivot-91cc5354.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/vue-codemirror.esm-41b0e0d7.js","assets/vue-codemirror-bccfde04.css","assets/ContextMenu-23e909da.js","assets/ContextMenu-c13f91d0.css","assets/SettingsSection-f0f75a42.js","assets/SettingsSection-2e4d03c4.css","assets/genericNodeSettings-4fe5f36b.js","assets/genericNodeSettings-924759c7.css","assets/Unpivot-1e422df3.css"] : void 0), "./elements/unpivot/UnpivotValidation.vue": () => __vitePreload(() => import("./UnpivotValidation-7ee2de44.js"), true ? ["assets/UnpivotValidation-7ee2de44.js","assets/index-5429bbf8.js","assets/index-50508d4d.css","assets/UnpivotValidation-0d240eeb.css"] : void 0) });
15340
+ const props2 = __props;
15341
+ const drawerComponent = shallowRef(null);
15342
+ onMounted(() => {
15343
+ loadDrawerComponent();
15344
+ });
15345
+ const toCamelCase = (str) => {
15346
+ return str.replace(/_([a-z])/g, (_2, letter) => letter.toUpperCase());
15347
+ };
15348
+ const loadDrawerComponent = () => {
15349
+ try {
15350
+ let componentName;
15351
+ let folderName;
15352
+ if (props2.nodeData.custom_node) {
15353
+ componentName = "CustomNode";
15354
+ folderName = "customNode";
15355
+ } else {
15356
+ componentName = toTitleCase(props2.nodeData.item);
15357
+ folderName = toCamelCase(props2.nodeData.item.toLowerCase());
15358
+ }
15359
+ const componentPath = `./elements/${folderName}/${componentName}.vue`;
15360
+ const componentLoader = drawerModules[componentPath];
15361
+ if (!componentLoader) {
15362
+ console.error(`Component not found at path: ${componentPath}`);
15363
+ console.log(
15364
+ "Available paths:",
15365
+ Object.keys(drawerModules).filter((path2) => path2.includes(`/${folderName}/`))
15366
+ );
15367
+ return;
15368
+ }
15369
+ drawerComponent.value = markRaw$1(
15370
+ defineAsyncComponent({
15371
+ loader: componentLoader,
15372
+ errorComponent: void 0,
15373
+ timeout: 3e3,
15374
+ onError(error, retry, fail, attempts) {
15375
+ console.error(`Failed to load drawer component for ${props2.nodeData.item}:`, error);
15376
+ if (attempts <= 3) {
15377
+ retry();
15378
+ } else {
15379
+ fail();
15380
+ }
15381
+ }
15382
+ })
15383
+ );
15384
+ } catch (error) {
15385
+ console.error(`Error setting up drawer component for ${props2.nodeData.item}:`, error);
15386
+ }
15387
+ };
15388
+ const imageSrc = computed$1(() => {
15389
+ var _a;
15390
+ return ((_a = props2.nodeData) == null ? void 0 : _a.image) || "default.png";
15391
+ });
15392
+ const nodeTitle = computed$1(() => {
15393
+ var _a, _b;
15394
+ const displayName = ((_a = props2.nodeData) == null ? void 0 : _a.label) || ((_b = props2.nodeData) == null ? void 0 : _b.name) || "Node";
15395
+ return `${props2.nodeId}: ${displayName}`;
15396
+ });
15397
+ const nodeTitleInfo = computed$1(() => {
15398
+ var _a, _b;
15399
+ return {
15400
+ title: ((_a = props2.nodeData) == null ? void 0 : _a.drawer_title) || "Node Configuration",
15401
+ intro: ((_b = props2.nodeData) == null ? void 0 : _b.drawer_intro) || "Configure node settings"
15402
+ };
15403
+ });
15404
+ onErrorCaptured((error) => {
15405
+ console.error("Error in GenericNode component:", error);
15406
+ return false;
15407
+ });
15408
+ return (_ctx, _cache) => {
15409
+ return openBlock(), createBlock(NodeButton, {
15410
+ ref: "nodeButton",
15411
+ "node-id": _ctx.nodeId,
15412
+ "image-src": imageSrc.value,
15413
+ title: nodeTitle.value,
15414
+ "drawer-component": drawerComponent.value,
15415
+ "node-title-info": nodeTitleInfo.value
15416
+ }, null, 8, ["node-id", "image-src", "title", "drawer-component", "node-title-info"]);
15417
+ };
15418
+ }
15419
+ });
15420
+ const GenericNode_vue_vue_type_style_index_0_scoped_00eceaf3_lang = "";
15421
+ const GenericNode = /* @__PURE__ */ _export_sfc(_sfc_main$g, [["__scopeId", "data-v-00eceaf3"]]);
15422
+ const _hoisted_1$d = { class: "description-text" };
15423
+ const _hoisted_2$b = {
14413
15424
  key: 0,
14414
15425
  class: "truncated-indicator",
14415
15426
  title: "Click to see full description"
14416
15427
  };
14417
- const _hoisted_3$7 = ["id"];
14418
- const _hoisted_4$7 = ["id"];
15428
+ const _hoisted_3$a = ["id"];
15429
+ const _hoisted_4$9 = ["id"];
14419
15430
  const CHAR_LIMIT = 100;
14420
- const _sfc_main$c = /* @__PURE__ */ defineComponent({
15431
+ const _sfc_main$f = /* @__PURE__ */ defineComponent({
14421
15432
  __name: "CustomNode",
14422
15433
  props: {
14423
15434
  data: {
@@ -14435,6 +15446,7 @@ const _sfc_main$c = /* @__PURE__ */ defineComponent({
14435
15446
  const showMenu = ref(false);
14436
15447
  const contextMenuX = ref(0);
14437
15448
  const contextMenuY = ref(0);
15449
+ const props2 = __props;
14438
15450
  const onTitleClick = (event) => {
14439
15451
  toggleEditMode(true);
14440
15452
  mouseX.value = event.clientX;
@@ -14483,22 +15495,25 @@ const _sfc_main$c = /* @__PURE__ */ defineComponent({
14483
15495
  window.removeEventListener("click", handleClickOutsideMenu);
14484
15496
  };
14485
15497
  const copyNode2 = () => {
15498
+ var _a, _b, _c, _d, _e;
14486
15499
  const nodeCopyValue = {
14487
15500
  nodeIdToCopyFrom: props2.data.id,
14488
- type: props2.data.component.__name || "unknown",
15501
+ type: ((_a = props2.data.nodeTemplate) == null ? void 0 : _a.item) || ((_b = props2.data.component) == null ? void 0 : _b.__name) || "unknown",
14489
15502
  label: props2.data.label,
14490
15503
  description: description.value,
14491
15504
  numberOfInputs: props2.data.inputs.length,
14492
15505
  numberOfOutputs: props2.data.outputs.length,
14493
- typeSnakeCase: toSnakeCase(props2.data.component.__name || "unknown"),
14494
- flowIdToCopyFrom: nodeStore.flow_id
15506
+ typeSnakeCase: ((_c = props2.data.nodeTemplate) == null ? void 0 : _c.item) || toSnakeCase(((_d = props2.data.component) == null ? void 0 : _d.__name) || "unknown"),
15507
+ flowIdToCopyFrom: nodeStore.flow_id,
15508
+ multi: (_e = props2.data.nodeTemplate) == null ? void 0 : _e.multi,
15509
+ nodeTemplate: props2.data.nodeTemplate
14495
15510
  };
14496
15511
  localStorage.setItem("copiedNode", JSON.stringify(nodeCopyValue));
14497
15512
  console.log("Node copied:", nodeCopyValue);
14498
15513
  closeContextMenu();
14499
15514
  };
14500
15515
  const deleteNode2 = () => {
14501
- console.log("Paste node functionality will be implemented in the next step");
15516
+ console.log("Deleting node");
14502
15517
  if (nodeStore.vueFlowInstance) {
14503
15518
  let vueFlow = nodeStore.vueFlowInstance;
14504
15519
  vueFlow.removeNodes(props2.data.id.toLocaleString(), true);
@@ -14601,7 +15616,6 @@ const _sfc_main$c = /* @__PURE__ */ defineComponent({
14601
15616
  }
14602
15617
  return description.value;
14603
15618
  });
14604
- const props2 = __props;
14605
15619
  function getHandleStyle(index, total) {
14606
15620
  const topMargin = 30;
14607
15621
  const bottomMargin = 25;
@@ -14645,19 +15659,23 @@ const _sfc_main$c = /* @__PURE__ */ defineComponent({
14645
15659
  createBaseVNode("div", {
14646
15660
  class: "custom-node-header",
14647
15661
  data: "description_display",
14648
- onContextmenu: onTitleClick
15662
+ onContextmenu: onTitleClick,
15663
+ onClick: _cache[6] || (_cache[6] = withModifiers(() => {
15664
+ }, ["stop"]))
14649
15665
  }, [
14650
15666
  createBaseVNode("div", null, [
14651
15667
  !editMode.value ? (openBlock(), createElementBlock("div", {
14652
15668
  key: 0,
14653
15669
  class: "description-display",
14654
- style: normalizeStyle(descriptionTextStyle.value)
15670
+ style: normalizeStyle(descriptionTextStyle.value),
15671
+ onClick: _cache[1] || (_cache[1] = withModifiers(() => {
15672
+ }, ["stop"]))
14655
15673
  }, [
14656
15674
  createBaseVNode("div", {
14657
15675
  class: "edit-icon",
14658
15676
  title: "Edit description",
14659
15677
  onClick: _cache[0] || (_cache[0] = withModifiers(($event) => toggleEditMode(true), ["stop"]))
14660
- }, _cache[3] || (_cache[3] = [
15678
+ }, _cache[7] || (_cache[7] = [
14661
15679
  createBaseVNode("svg", {
14662
15680
  width: "12",
14663
15681
  height: "12",
@@ -14672,25 +15690,29 @@ const _sfc_main$c = /* @__PURE__ */ defineComponent({
14672
15690
  createBaseVNode("path", { d: "M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z" })
14673
15691
  ], -1)
14674
15692
  ])),
14675
- createBaseVNode("pre", _hoisted_1$b, toDisplayString(descriptionSummary.value), 1),
14676
- isTruncated.value ? (openBlock(), createElementBlock("span", _hoisted_2$8, "...")) : createCommentVNode("", true)
15693
+ createBaseVNode("pre", _hoisted_1$d, toDisplayString(descriptionSummary.value), 1),
15694
+ isTruncated.value ? (openBlock(), createElementBlock("span", _hoisted_2$b, "...")) : createCommentVNode("", true)
14677
15695
  ], 4)) : (openBlock(), createElementBlock("div", {
14678
15696
  key: 1,
14679
15697
  id: props2.data.id.toLocaleString(),
14680
15698
  class: "custom-node-header",
14681
15699
  style: normalizeStyle(overlayStyle.value),
14682
- data: "description_input"
15700
+ data: "description_input",
15701
+ onClick: _cache[5] || (_cache[5] = withModifiers(() => {
15702
+ }, ["stop"]))
14683
15703
  }, [
14684
15704
  withDirectives(createBaseVNode("textarea", {
14685
15705
  id: props2.data.id.toLocaleString(),
14686
- "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => description.value = $event),
15706
+ "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => description.value = $event),
14687
15707
  class: "description-input",
14688
15708
  data: "description_input",
14689
- onBlur: _cache[2] || (_cache[2] = ($event) => toggleEditMode(false))
14690
- }, null, 40, _hoisted_4$7), [
15709
+ onBlur: _cache[3] || (_cache[3] = ($event) => toggleEditMode(false)),
15710
+ onClick: _cache[4] || (_cache[4] = withModifiers(() => {
15711
+ }, ["stop"]))
15712
+ }, null, 40, _hoisted_4$9), [
14691
15713
  [vModelText, description.value]
14692
15714
  ])
14693
- ], 12, _hoisted_3$7))
15715
+ ], 12, _hoisted_3$a))
14694
15716
  ])
14695
15717
  ], 32),
14696
15718
  createBaseVNode("div", {
@@ -14699,16 +15721,21 @@ const _sfc_main$c = /* @__PURE__ */ defineComponent({
14699
15721
  class: "custom-node",
14700
15722
  onContextmenu: withModifiers(showContextMenu, ["prevent"])
14701
15723
  }, [
14702
- (openBlock(), createBlock(resolveDynamicComponent(__props.data.component), {
15724
+ __props.data.nodeTemplate ? (openBlock(), createBlock(GenericNode, {
15725
+ key: 0,
15726
+ "node-id": __props.data.id,
15727
+ "node-data": { ...__props.data.nodeTemplate, id: __props.data.id, label: __props.data.label }
15728
+ }, null, 8, ["node-id", "node-data"])) : __props.data.component ? (openBlock(), createBlock(resolveDynamicComponent(__props.data.component), {
15729
+ key: 1,
14703
15730
  "node-id": __props.data.id
14704
- }, null, 8, ["node-id"])),
15731
+ }, null, 8, ["node-id"])) : createCommentVNode("", true),
14705
15732
  (openBlock(true), createElementBlock(Fragment, null, renderList(__props.data.inputs, (input, index) => {
14706
15733
  return openBlock(), createElementBlock("div", {
14707
15734
  key: input.id,
14708
15735
  class: "handle-input",
14709
15736
  style: normalizeStyle(getHandleStyle(index, __props.data.inputs.length))
14710
15737
  }, [
14711
- createVNode(unref(_sfc_main$f), {
15738
+ createVNode(unref(_sfc_main$f$1), {
14712
15739
  id: input.id,
14713
15740
  type: "target",
14714
15741
  position: input.position
@@ -14721,7 +15748,7 @@ const _sfc_main$c = /* @__PURE__ */ defineComponent({
14721
15748
  class: "handle-output",
14722
15749
  style: normalizeStyle(getHandleStyle(index, __props.data.outputs.length))
14723
15750
  }, [
14724
- createVNode(unref(_sfc_main$f), {
15751
+ createVNode(unref(_sfc_main$f$1), {
14725
15752
  id: output.id,
14726
15753
  type: "source",
14727
15754
  position: output.position
@@ -14729,7 +15756,7 @@ const _sfc_main$c = /* @__PURE__ */ defineComponent({
14729
15756
  ], 4);
14730
15757
  }), 128)),
14731
15758
  showMenu.value ? (openBlock(), createBlock(Teleport, {
14732
- key: 0,
15759
+ key: 2,
14733
15760
  to: "body"
14734
15761
  }, [
14735
15762
  createBaseVNode("div", {
@@ -14741,7 +15768,7 @@ const _sfc_main$c = /* @__PURE__ */ defineComponent({
14741
15768
  createBaseVNode("div", {
14742
15769
  class: "context-menu-item",
14743
15770
  onClick: copyNode2
14744
- }, _cache[4] || (_cache[4] = [
15771
+ }, _cache[8] || (_cache[8] = [
14745
15772
  createBaseVNode("svg", {
14746
15773
  width: "14",
14747
15774
  height: "14",
@@ -14767,7 +15794,7 @@ const _sfc_main$c = /* @__PURE__ */ defineComponent({
14767
15794
  createBaseVNode("div", {
14768
15795
  class: "context-menu-item",
14769
15796
  onClick: deleteNode2
14770
- }, _cache[5] || (_cache[5] = [
15797
+ }, _cache[9] || (_cache[9] = [
14771
15798
  createBaseVNode("svg", {
14772
15799
  width: "14",
14773
15800
  height: "14",
@@ -14797,36 +15824,82 @@ const _sfc_main$c = /* @__PURE__ */ defineComponent({
14797
15824
  };
14798
15825
  }
14799
15826
  });
14800
- const CustomNode_vue_vue_type_style_index_0_scoped_74411a9e_lang = "";
14801
- const CustomNode = /* @__PURE__ */ _export_sfc(_sfc_main$c, [["__scopeId", "data-v-74411a9e"]]);
14802
- const __variableDynamicImportRuntimeHelper = (glob, path2) => {
14803
- const v = glob[path2];
14804
- if (v) {
14805
- return typeof v === "function" ? v() : Promise.resolve(v);
14806
- }
14807
- return new Promise((_2, reject) => {
14808
- (typeof queueMicrotask === "function" ? queueMicrotask : setTimeout)(reject.bind(null, new Error("Unknown variable dynamic import: " + path2)));
14809
- });
14810
- };
14811
- const componentCache = {};
14812
- function getComponent(name) {
14813
- if (!componentCache[name]) {
14814
- componentCache[name] = __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "../../nodes/CloudStorageReader.vue": () => __vitePreload(() => import("./CloudStorageReader-f1ff509e.js"), true ? ["assets/CloudStorageReader-f1ff509e.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-content-loader.es-ba94b82f.js","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/api-cb00cce6.js","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/CloudStorageReader-29d14fcc.css"] : void 0), "../../nodes/CloudStorageWriter.vue": () => __vitePreload(() => import("./CloudStorageWriter-034f8b78.js"), true ? ["assets/CloudStorageWriter-034f8b78.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-content-loader.es-ba94b82f.js","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/api-cb00cce6.js","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/CloudStorageWriter-49c9a4b2.css"] : void 0), "../../nodes/CrossJoin.vue": () => __vitePreload(() => import("./CrossJoin-9e156ebe.js"), true ? ["assets/CrossJoin-9e156ebe.js","assets/vue-content-loader.es-ba94b82f.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/selectDynamic-de91449a.js","assets/UnavailableFields-8b0cb48e.js","assets/UnavailableFields-5edd5322.css","assets/selectDynamic-b062bc9b.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/CrossJoin-41efa4cb.css"] : void 0), "../../nodes/DatabaseReader.vue": () => __vitePreload(() => import("./DatabaseReader-0b10551e.js"), true ? ["assets/DatabaseReader-0b10551e.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-content-loader.es-ba94b82f.js","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/api-023d1733.js","assets/DatabaseConnectionSettings-d5c625b3.js","assets/secretApi-baceb6f9.js","assets/DatabaseConnectionSettings-0c04b2e5.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/DatabaseReader-f50c6558.css"] : void 0), "../../nodes/DatabaseWriter.vue": () => __vitePreload(() => import("./DatabaseWriter-c17c6916.js"), true ? ["assets/DatabaseWriter-c17c6916.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-content-loader.es-ba94b82f.js","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/api-023d1733.js","assets/DatabaseConnectionSettings-d5c625b3.js","assets/secretApi-baceb6f9.js","assets/DatabaseConnectionSettings-0c04b2e5.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/DatabaseWriter-2f570e53.css"] : void 0), "../../nodes/ExploreData.vue": () => __vitePreload(() => import("./ExploreData-18a4fe52.js"), true ? ["assets/ExploreData-18a4fe52.js","assets/vue-content-loader.es-ba94b82f.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/ExploreData-5bdae813.css"] : void 0), "../../nodes/ExternalSource.vue": () => __vitePreload(() => import("./ExternalSource-3a66556c.js"), true ? ["assets/ExternalSource-3a66556c.js","assets/vue-content-loader.es-ba94b82f.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/ExternalSource-e37b6275.css"] : void 0), "../../nodes/Filter.vue": () => __vitePreload(() => import("./Filter-91ad87e7.js"), true ? ["assets/Filter-91ad87e7.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-content-loader.es-ba94b82f.js","assets/dropDown-0b46dd77.js","assets/dropDown-35135ba8.css","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/fullEditor-ec4e4f95.js","assets/fullEditor-178376bb.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/Filter-a9d08ba1.css"] : void 0), "../../nodes/Formula.vue": () => __vitePreload(() => import("./Formula-3c395ab1.js"), true ? ["assets/Formula-3c395ab1.js","assets/vue-content-loader.es-ba94b82f.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/fullEditor-ec4e4f95.js","assets/fullEditor-178376bb.css","assets/dropDown-0b46dd77.js","assets/dropDown-35135ba8.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/Formula-29f19d21.css"] : void 0), "../../nodes/FuzzyMatch.vue": () => __vitePreload(() => import("./FuzzyMatch-2df0d230.js"), true ? ["assets/FuzzyMatch-2df0d230.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/dropDown-0b46dd77.js","assets/dropDown-35135ba8.css","assets/selectDynamic-de91449a.js","assets/UnavailableFields-8b0cb48e.js","assets/UnavailableFields-5edd5322.css","assets/selectDynamic-b062bc9b.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/vue-content-loader.es-ba94b82f.js","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/FuzzyMatch-6857de82.css"] : void 0), "../../nodes/GraphSolver.vue": () => __vitePreload(() => import("./GraphSolver-d285877f.js"), true ? ["assets/GraphSolver-d285877f.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/GraphSolver-17fd26db.css"] : void 0), "../../nodes/GroupBy.vue": () => __vitePreload(() => import("./GroupBy-0bd1cc6b.js"), true ? ["assets/GroupBy-0bd1cc6b.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-content-loader.es-ba94b82f.js","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/GroupBy-ab1ea74b.css"] : void 0), "../../nodes/Join.vue": () => __vitePreload(() => import("./Join-5a78a203.js"), true ? ["assets/Join-5a78a203.js","assets/vue-content-loader.es-ba94b82f.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/dropDown-0b46dd77.js","assets/dropDown-35135ba8.css","assets/selectDynamic-de91449a.js","assets/UnavailableFields-8b0cb48e.js","assets/UnavailableFields-5edd5322.css","assets/selectDynamic-b062bc9b.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/Join-f45eff22.css"] : void 0), "../../nodes/ManualInput.vue": () => __vitePreload(() => import("./ManualInput-93aef9d6.js"), true ? ["assets/ManualInput-93aef9d6.js","assets/nodeTitle-a16db7c3.js","assets/vue-codemirror.esm-dc5e3348.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-codemirror-bccfde04.css","assets/nodeTitle-f4b12bcb.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/ManualInput-a71b52c6.css"] : void 0), "../../nodes/Output.vue": () => __vitePreload(() => import("./Output-411ecaee.js"), true ? ["assets/Output-411ecaee.js","assets/vue-codemirror.esm-dc5e3348.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-codemirror-bccfde04.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/Output-48f81019.css"] : void 0), "../../nodes/Pivot.vue": () => __vitePreload(() => import("./Pivot-89db4b04.js"), true ? ["assets/Pivot-89db4b04.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/SettingsSection-695ac487.js","assets/SettingsSection-9c836ecc.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/Pivot-f415e85f.css"] : void 0), "../../nodes/PolarsCode.vue": () => __vitePreload(() => import("./PolarsCode-a9f974f8.js"), true ? ["assets/PolarsCode-a9f974f8.js","assets/vue-content-loader.es-ba94b82f.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/PolarsCode-650322d1.css"] : void 0), "../../nodes/Read.vue": () => __vitePreload(() => import("./Read-c3b1929c.js"), true ? ["assets/Read-c3b1929c.js","assets/vue-content-loader.es-ba94b82f.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/dropDown-0b46dd77.js","assets/dropDown-35135ba8.css","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/Read-80dc1675.css"] : void 0), "../../nodes/RecordCount.vue": () => __vitePreload(() => import("./RecordCount-4e95f98e.js"), true ? ["assets/RecordCount-4e95f98e.js","assets/vue-codemirror.esm-dc5e3348.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-codemirror-bccfde04.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css"] : void 0), "../../nodes/RecordId.vue": () => __vitePreload(() => import("./RecordId-55ae7d36.js"), true ? ["assets/RecordId-55ae7d36.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/SettingsSection-695ac487.js","assets/SettingsSection-9c836ecc.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css"] : void 0), "../../nodes/Sample.vue": () => __vitePreload(() => import("./Sample-b4a18476.js"), true ? ["assets/Sample-b4a18476.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css"] : void 0), "../../nodes/Select.vue": () => __vitePreload(() => import("./Select-727688dc.js"), true ? ["assets/Select-727688dc.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-content-loader.es-ba94b82f.js","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/selectDynamic-de91449a.js","assets/UnavailableFields-8b0cb48e.js","assets/UnavailableFields-5edd5322.css","assets/selectDynamic-b062bc9b.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css"] : void 0), "../../nodes/Sort.vue": () => __vitePreload(() => import("./Sort-be3339a8.js"), true ? ["assets/Sort-be3339a8.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/vue-content-loader.es-ba94b82f.js","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/Sort-7ccfa0fe.css"] : void 0), "../../nodes/TextToRows.vue": () => __vitePreload(() => import("./TextToRows-7b8998da.js"), true ? ["assets/TextToRows-7b8998da.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/dropDown-0b46dd77.js","assets/dropDown-35135ba8.css","assets/UnavailableFields-8b0cb48e.js","assets/UnavailableFields-5edd5322.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/vue-content-loader.es-ba94b82f.js","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/TextToRows-c92d1ec2.css"] : void 0), "../../nodes/Union.vue": () => __vitePreload(() => import("./Union-89fd73dc.js"), true ? ["assets/Union-89fd73dc.js","assets/vue-codemirror.esm-dc5e3348.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-codemirror-bccfde04.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/Union-8d9ac7f9.css"] : void 0), "../../nodes/Unique.vue": () => __vitePreload(() => import("./Unique-af5a80b4.js"), true ? ["assets/Unique-af5a80b4.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-content-loader.es-ba94b82f.js","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/selectDynamic-de91449a.js","assets/UnavailableFields-8b0cb48e.js","assets/UnavailableFields-5edd5322.css","assets/selectDynamic-b062bc9b.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/Unique-b5615727.css"] : void 0), "../../nodes/Unpivot.vue": () => __vitePreload(() => import("./Unpivot-5195d411.js"), true ? ["assets/Unpivot-5195d411.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/Unpivot-246e9bbd.css"] : void 0) }), `../../nodes/${toTitleCase(name)}.vue`).then((module) => {
14815
- const component = markRaw$1(module.default);
14816
- return component;
14817
- });
14818
- }
14819
- return componentCache[name];
15827
+ const CustomNode_vue_vue_type_style_index_0_scoped_0887a495_lang = "";
15828
+ const CustomNode = /* @__PURE__ */ _export_sfc(_sfc_main$f, [["__scopeId", "data-v-0887a495"]]);
15829
+ const componentCache = /* @__PURE__ */ new Map();
15830
+ function getComponent(nodeOrItem) {
15831
+ const cacheKey = "generic-node";
15832
+ if (componentCache.has(cacheKey)) {
15833
+ return componentCache.get(cacheKey);
15834
+ }
15835
+ const componentPromise = Promise.resolve(markRaw$1(GenericNode));
15836
+ componentCache.set(cacheKey, componentPromise);
15837
+ return componentPromise;
14820
15838
  }
14821
15839
  function getComponentRaw(name) {
14822
- if (!componentCache[name]) {
14823
- componentCache[name] = __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "../../nodes/CloudStorageReader.vue": () => __vitePreload(() => import("./CloudStorageReader-f1ff509e.js"), true ? ["assets/CloudStorageReader-f1ff509e.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-content-loader.es-ba94b82f.js","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/api-cb00cce6.js","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/CloudStorageReader-29d14fcc.css"] : void 0), "../../nodes/CloudStorageWriter.vue": () => __vitePreload(() => import("./CloudStorageWriter-034f8b78.js"), true ? ["assets/CloudStorageWriter-034f8b78.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-content-loader.es-ba94b82f.js","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/api-cb00cce6.js","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/CloudStorageWriter-49c9a4b2.css"] : void 0), "../../nodes/CrossJoin.vue": () => __vitePreload(() => import("./CrossJoin-9e156ebe.js"), true ? ["assets/CrossJoin-9e156ebe.js","assets/vue-content-loader.es-ba94b82f.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/selectDynamic-de91449a.js","assets/UnavailableFields-8b0cb48e.js","assets/UnavailableFields-5edd5322.css","assets/selectDynamic-b062bc9b.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/CrossJoin-41efa4cb.css"] : void 0), "../../nodes/DatabaseReader.vue": () => __vitePreload(() => import("./DatabaseReader-0b10551e.js"), true ? ["assets/DatabaseReader-0b10551e.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-content-loader.es-ba94b82f.js","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/api-023d1733.js","assets/DatabaseConnectionSettings-d5c625b3.js","assets/secretApi-baceb6f9.js","assets/DatabaseConnectionSettings-0c04b2e5.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/DatabaseReader-f50c6558.css"] : void 0), "../../nodes/DatabaseWriter.vue": () => __vitePreload(() => import("./DatabaseWriter-c17c6916.js"), true ? ["assets/DatabaseWriter-c17c6916.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-content-loader.es-ba94b82f.js","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/api-023d1733.js","assets/DatabaseConnectionSettings-d5c625b3.js","assets/secretApi-baceb6f9.js","assets/DatabaseConnectionSettings-0c04b2e5.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/DatabaseWriter-2f570e53.css"] : void 0), "../../nodes/ExploreData.vue": () => __vitePreload(() => import("./ExploreData-18a4fe52.js"), true ? ["assets/ExploreData-18a4fe52.js","assets/vue-content-loader.es-ba94b82f.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/ExploreData-5bdae813.css"] : void 0), "../../nodes/ExternalSource.vue": () => __vitePreload(() => import("./ExternalSource-3a66556c.js"), true ? ["assets/ExternalSource-3a66556c.js","assets/vue-content-loader.es-ba94b82f.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/ExternalSource-e37b6275.css"] : void 0), "../../nodes/Filter.vue": () => __vitePreload(() => import("./Filter-91ad87e7.js"), true ? ["assets/Filter-91ad87e7.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-content-loader.es-ba94b82f.js","assets/dropDown-0b46dd77.js","assets/dropDown-35135ba8.css","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/fullEditor-ec4e4f95.js","assets/fullEditor-178376bb.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/Filter-a9d08ba1.css"] : void 0), "../../nodes/Formula.vue": () => __vitePreload(() => import("./Formula-3c395ab1.js"), true ? ["assets/Formula-3c395ab1.js","assets/vue-content-loader.es-ba94b82f.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/fullEditor-ec4e4f95.js","assets/fullEditor-178376bb.css","assets/dropDown-0b46dd77.js","assets/dropDown-35135ba8.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/Formula-29f19d21.css"] : void 0), "../../nodes/FuzzyMatch.vue": () => __vitePreload(() => import("./FuzzyMatch-2df0d230.js"), true ? ["assets/FuzzyMatch-2df0d230.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/dropDown-0b46dd77.js","assets/dropDown-35135ba8.css","assets/selectDynamic-de91449a.js","assets/UnavailableFields-8b0cb48e.js","assets/UnavailableFields-5edd5322.css","assets/selectDynamic-b062bc9b.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/vue-content-loader.es-ba94b82f.js","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/FuzzyMatch-6857de82.css"] : void 0), "../../nodes/GraphSolver.vue": () => __vitePreload(() => import("./GraphSolver-d285877f.js"), true ? ["assets/GraphSolver-d285877f.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/GraphSolver-17fd26db.css"] : void 0), "../../nodes/GroupBy.vue": () => __vitePreload(() => import("./GroupBy-0bd1cc6b.js"), true ? ["assets/GroupBy-0bd1cc6b.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-content-loader.es-ba94b82f.js","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/GroupBy-ab1ea74b.css"] : void 0), "../../nodes/Join.vue": () => __vitePreload(() => import("./Join-5a78a203.js"), true ? ["assets/Join-5a78a203.js","assets/vue-content-loader.es-ba94b82f.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/dropDown-0b46dd77.js","assets/dropDown-35135ba8.css","assets/selectDynamic-de91449a.js","assets/UnavailableFields-8b0cb48e.js","assets/UnavailableFields-5edd5322.css","assets/selectDynamic-b062bc9b.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/Join-f45eff22.css"] : void 0), "../../nodes/ManualInput.vue": () => __vitePreload(() => import("./ManualInput-93aef9d6.js"), true ? ["assets/ManualInput-93aef9d6.js","assets/nodeTitle-a16db7c3.js","assets/vue-codemirror.esm-dc5e3348.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-codemirror-bccfde04.css","assets/nodeTitle-f4b12bcb.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/ManualInput-a71b52c6.css"] : void 0), "../../nodes/Output.vue": () => __vitePreload(() => import("./Output-411ecaee.js"), true ? ["assets/Output-411ecaee.js","assets/vue-codemirror.esm-dc5e3348.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-codemirror-bccfde04.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/Output-48f81019.css"] : void 0), "../../nodes/Pivot.vue": () => __vitePreload(() => import("./Pivot-89db4b04.js"), true ? ["assets/Pivot-89db4b04.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/SettingsSection-695ac487.js","assets/SettingsSection-9c836ecc.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/Pivot-f415e85f.css"] : void 0), "../../nodes/PolarsCode.vue": () => __vitePreload(() => import("./PolarsCode-a9f974f8.js"), true ? ["assets/PolarsCode-a9f974f8.js","assets/vue-content-loader.es-ba94b82f.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/PolarsCode-650322d1.css"] : void 0), "../../nodes/Read.vue": () => __vitePreload(() => import("./Read-c3b1929c.js"), true ? ["assets/Read-c3b1929c.js","assets/vue-content-loader.es-ba94b82f.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/dropDown-0b46dd77.js","assets/dropDown-35135ba8.css","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/Read-80dc1675.css"] : void 0), "../../nodes/RecordCount.vue": () => __vitePreload(() => import("./RecordCount-4e95f98e.js"), true ? ["assets/RecordCount-4e95f98e.js","assets/vue-codemirror.esm-dc5e3348.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-codemirror-bccfde04.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css"] : void 0), "../../nodes/RecordId.vue": () => __vitePreload(() => import("./RecordId-55ae7d36.js"), true ? ["assets/RecordId-55ae7d36.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/SettingsSection-695ac487.js","assets/SettingsSection-9c836ecc.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css"] : void 0), "../../nodes/Sample.vue": () => __vitePreload(() => import("./Sample-b4a18476.js"), true ? ["assets/Sample-b4a18476.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css"] : void 0), "../../nodes/Select.vue": () => __vitePreload(() => import("./Select-727688dc.js"), true ? ["assets/Select-727688dc.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-content-loader.es-ba94b82f.js","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/selectDynamic-de91449a.js","assets/UnavailableFields-8b0cb48e.js","assets/UnavailableFields-5edd5322.css","assets/selectDynamic-b062bc9b.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css"] : void 0), "../../nodes/Sort.vue": () => __vitePreload(() => import("./Sort-be3339a8.js"), true ? ["assets/Sort-be3339a8.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/vue-content-loader.es-ba94b82f.js","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/Sort-7ccfa0fe.css"] : void 0), "../../nodes/TextToRows.vue": () => __vitePreload(() => import("./TextToRows-7b8998da.js"), true ? ["assets/TextToRows-7b8998da.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/dropDown-0b46dd77.js","assets/dropDown-35135ba8.css","assets/UnavailableFields-8b0cb48e.js","assets/UnavailableFields-5edd5322.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/vue-content-loader.es-ba94b82f.js","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/TextToRows-c92d1ec2.css"] : void 0), "../../nodes/Union.vue": () => __vitePreload(() => import("./Union-89fd73dc.js"), true ? ["assets/Union-89fd73dc.js","assets/vue-codemirror.esm-dc5e3348.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-codemirror-bccfde04.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/Union-8d9ac7f9.css"] : void 0), "../../nodes/Unique.vue": () => __vitePreload(() => import("./Unique-af5a80b4.js"), true ? ["assets/Unique-af5a80b4.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-content-loader.es-ba94b82f.js","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/selectDynamic-de91449a.js","assets/UnavailableFields-8b0cb48e.js","assets/UnavailableFields-5edd5322.css","assets/selectDynamic-b062bc9b.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/Unique-b5615727.css"] : void 0), "../../nodes/Unpivot.vue": () => __vitePreload(() => import("./Unpivot-5195d411.js"), true ? ["assets/Unpivot-5195d411.js","assets/index-683fc198.js","assets/index-681a3ed0.css","assets/vue-codemirror.esm-dc5e3348.js","assets/vue-codemirror-bccfde04.css","assets/genericNodeSettings-def5879b.js","assets/genericNodeSettings-924759c7.css","assets/nodeTitle-a16db7c3.js","assets/nodeTitle-f4b12bcb.css","assets/Unpivot-246e9bbd.css"] : void 0) }), `../../nodes/${name}.vue`).then((module) => {
14824
- const component = markRaw$1(module.default);
14825
- return component;
14826
- });
15840
+ return getComponent();
15841
+ }
15842
+ let nodeTemplatesCache = null;
15843
+ let cachePromise = null;
15844
+ async function fetchNodeTemplates() {
15845
+ if (nodeTemplatesCache !== null) {
15846
+ return nodeTemplatesCache;
15847
+ }
15848
+ if (cachePromise !== null) {
15849
+ return cachePromise;
15850
+ }
15851
+ cachePromise = axios.get("/node_list").then((response) => {
15852
+ const allNodes = response.data;
15853
+ nodeTemplatesCache = allNodes.filter((node) => node.prod_ready);
15854
+ return nodeTemplatesCache;
15855
+ }).catch((error) => {
15856
+ console.error("Failed to fetch node templates:", error);
15857
+ cachePromise = null;
15858
+ throw error;
15859
+ });
15860
+ return cachePromise;
15861
+ }
15862
+ function clearNodeTemplatesCache() {
15863
+ nodeTemplatesCache = null;
15864
+ cachePromise = null;
15865
+ }
15866
+ async function getNodeTemplateByItem(item) {
15867
+ try {
15868
+ const allNodes = await fetchNodeTemplates();
15869
+ return allNodes.find((node) => node.item === item);
15870
+ } catch (error) {
15871
+ console.error(`Failed to get node template for item ${item}:`, error);
15872
+ return void 0;
14827
15873
  }
14828
- return componentCache[name];
14829
15874
  }
15875
+ const useNodes = () => {
15876
+ const nodes = ref([]);
15877
+ const loading = ref(false);
15878
+ const error = ref(null);
15879
+ const fetchNodes2 = async () => {
15880
+ loading.value = true;
15881
+ error.value = null;
15882
+ try {
15883
+ nodes.value = await fetchNodeTemplates();
15884
+ } catch (err) {
15885
+ error.value = err;
15886
+ nodes.value = [];
15887
+ } finally {
15888
+ loading.value = false;
15889
+ }
15890
+ };
15891
+ onMounted(fetchNodes2);
15892
+ return {
15893
+ nodes,
15894
+ loading,
15895
+ error,
15896
+ refetch: fetchNodes2,
15897
+ clearCache: () => {
15898
+ clearNodeTemplatesCache();
15899
+ return fetchNodes2();
15900
+ }
15901
+ };
15902
+ };
14830
15903
  const connectNode = async (flowId, nodeConnection) => {
14831
15904
  console.log("Connecting node where it should happen", nodeConnection);
14832
15905
  try {
@@ -15035,7 +16108,9 @@ function useDragAndDrop() {
15035
16108
  outputs: Array.from({ length: node.numberOfOutputs }, (_2, i2) => ({
15036
16109
  id: `output-${i2}`,
15037
16110
  position: Position.Right
15038
- }))
16111
+ })),
16112
+ // Include nodeTemplate if available
16113
+ nodeTemplate: node.nodeTemplate
15039
16114
  }
15040
16115
  };
15041
16116
  const nodePromise = {
@@ -15057,7 +16132,8 @@ function useDragAndDrop() {
15057
16132
  };
15058
16133
  async function getNodeToAdd(node) {
15059
16134
  const numberOfInputs = node.multi ? 1 : node.input;
15060
- const component = await getComponent(node.item);
16135
+ const nodeTemplate = await getNodeTemplateByItem(node.item);
16136
+ const component = await getComponent(nodeTemplate || node.item);
15061
16137
  const newNode = {
15062
16138
  id: String(node.id),
15063
16139
  type: "custom-node",
@@ -15076,7 +16152,9 @@ function useDragAndDrop() {
15076
16152
  outputs: Array.from({ length: node.output }, (_2, i2) => ({
15077
16153
  id: `output-${i2}`,
15078
16154
  position: Position.Right
15079
- }))
16155
+ })),
16156
+ // IMPORTANT: Include the complete NodeTemplate
16157
+ nodeTemplate
15080
16158
  }
15081
16159
  };
15082
16160
  return newNode;
@@ -15107,21 +16185,17 @@ function useDragAndDrop() {
15107
16185
  if (!event.dataTransfer)
15108
16186
  return;
15109
16187
  const nodeData = JSON.parse(event.dataTransfer.getData("application/vueflow"));
15110
- console.log("nodeData:", nodeData);
15111
16188
  const nodeId = getId();
15112
- getComponent(nodeData.item).then((component) => {
16189
+ getComponent().then((component) => {
15113
16190
  const numberOfInputs = nodeData.multi ? 1 : nodeData.input;
15114
- console.log("logging", numberOfInputs);
15115
16191
  const newNode = {
15116
16192
  id: String(nodeId),
15117
16193
  type: "custom-node",
15118
16194
  position,
15119
16195
  data: {
15120
16196
  id: nodeId,
15121
- // Pass nodeId here
15122
16197
  label: nodeData.name,
15123
16198
  component: markRaw$1(component),
15124
- // Pass component directly
15125
16199
  inputs: Array.from({ length: numberOfInputs }, (_2, i2) => ({
15126
16200
  id: `input-${i2}`,
15127
16201
  position: Position.Left
@@ -15130,7 +16204,8 @@ function useDragAndDrop() {
15130
16204
  id: `output-${i2}`,
15131
16205
  position: Position.Right
15132
16206
  })),
15133
- nodeItem: nodeData.item
16207
+ // IMPORTANT: Pass the complete NodeTemplate data
16208
+ nodeTemplate: nodeData
15134
16209
  }
15135
16210
  };
15136
16211
  const { off } = onNodesInitialized(() => {
@@ -15145,9 +16220,7 @@ function useDragAndDrop() {
15145
16220
  });
15146
16221
  off();
15147
16222
  });
15148
- console.log("nodeData", nodeData);
15149
16223
  insertNode(flowId, nodeId, nodeData.item);
15150
- console.log(newNode);
15151
16224
  addNodes(newNode);
15152
16225
  }).catch((error) => {
15153
16226
  console.error(`Error importing component for ${nodeData.item}`, error);
@@ -17723,11 +18796,11 @@ const oneDarkHighlightStyle = /* @__PURE__ */ HighlightStyle.define([
17723
18796
  }
17724
18797
  ]);
17725
18798
  const oneDark = [oneDarkTheme, /* @__PURE__ */ syntaxHighlighting(oneDarkHighlightStyle)];
17726
- const _hoisted_1$a = { class: "code-container" };
17727
- const _hoisted_2$7 = { class: "code-header" };
17728
- const _hoisted_3$6 = { class: "header-actions" };
17729
- const _hoisted_4$6 = ["disabled"];
17730
- const _hoisted_5$5 = {
18799
+ const _hoisted_1$c = { class: "code-container" };
18800
+ const _hoisted_2$a = { class: "code-header" };
18801
+ const _hoisted_3$9 = { class: "header-actions" };
18802
+ const _hoisted_4$8 = ["disabled"];
18803
+ const _hoisted_5$6 = {
17731
18804
  key: 0,
17732
18805
  width: "16",
17733
18806
  height: "16",
@@ -17736,11 +18809,11 @@ const _hoisted_5$5 = {
17736
18809
  stroke: "currentColor",
17737
18810
  "stroke-width": "2"
17738
18811
  };
17739
- const _hoisted_6$4 = {
18812
+ const _hoisted_6$5 = {
17740
18813
  key: 1,
17741
18814
  class: "spinner"
17742
18815
  };
17743
- const _sfc_main$b = /* @__PURE__ */ defineComponent({
18816
+ const _sfc_main$e = /* @__PURE__ */ defineComponent({
17744
18817
  __name: "CodeGenerator",
17745
18818
  setup(__props) {
17746
18819
  const code = ref("");
@@ -17807,23 +18880,23 @@ const _sfc_main$b = /* @__PURE__ */ defineComponent({
17807
18880
  URL.revokeObjectURL(url);
17808
18881
  };
17809
18882
  return (_ctx, _cache) => {
17810
- return openBlock(), createElementBlock("div", _hoisted_1$a, [
17811
- createBaseVNode("div", _hoisted_2$7, [
18883
+ return openBlock(), createElementBlock("div", _hoisted_1$c, [
18884
+ createBaseVNode("div", _hoisted_2$a, [
17812
18885
  _cache[3] || (_cache[3] = createBaseVNode("h4", null, "Generated code", -1)),
17813
- createBaseVNode("div", _hoisted_3$6, [
18886
+ createBaseVNode("div", _hoisted_3$9, [
17814
18887
  createBaseVNode("button", {
17815
18888
  class: "refresh-button",
17816
18889
  disabled: loading.value,
17817
18890
  onClick: refreshCode
17818
18891
  }, [
17819
- !loading.value ? (openBlock(), createElementBlock("svg", _hoisted_5$5, _cache[1] || (_cache[1] = [
18892
+ !loading.value ? (openBlock(), createElementBlock("svg", _hoisted_5$6, _cache[1] || (_cache[1] = [
17820
18893
  createBaseVNode("path", { d: "M23 4v6h-6" }, null, -1),
17821
18894
  createBaseVNode("path", { d: "M1 20v-6h6" }, null, -1),
17822
18895
  createBaseVNode("path", { d: "M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15" }, null, -1)
17823
18896
  ]))) : createCommentVNode("", true),
17824
- loading.value ? (openBlock(), createElementBlock("span", _hoisted_6$4)) : createCommentVNode("", true),
18897
+ loading.value ? (openBlock(), createElementBlock("span", _hoisted_6$5)) : createCommentVNode("", true),
17825
18898
  createTextVNode(" " + toDisplayString(loading.value ? "Loading..." : "Refresh"), 1)
17826
- ], 8, _hoisted_4$6),
18899
+ ], 8, _hoisted_4$8),
17827
18900
  createBaseVNode("button", {
17828
18901
  class: "export-button",
17829
18902
  onClick: exportCode
@@ -17860,69 +18933,18 @@ const _sfc_main$b = /* @__PURE__ */ defineComponent({
17860
18933
  }
17861
18934
  });
17862
18935
  const CodeGenerator_vue_vue_type_style_index_0_scoped_8bafe064_lang = "";
17863
- const CodeGenerator = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["__scopeId", "data-v-8bafe064"]]);
17864
- const __vite_glob_0_0 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACkAAAApCAYAAACoYAD2AAACO0lEQVR4nN2Yz0vbYBjHv29NbZUy0B43QUG9zNPEHUT05NCTiu6o0NbDLk5a/RMERaonkSrO8zw4alFQtBsMBG96kJ5EUTcRh78QRGvsu4O8MSk1fdMmaeLnlL7p++ST53kfkjeADSCKX5GI4Ci+XQCl3uwzKXUkyYD4ZWjXKDnpUuxA+BbeBEij9hD0SgwMl+kplY5McoLmHEVMNYi06E/eNs4iEQf/zjEyonDRR9IAxMCQ5OYopIgawlz4gR1bVhKECJgPvwOsLAlAoIgAFpdMgXgAQFD704M/ZI4NAOf85IvnLJ1Jhi0kVcvNUCtFvvAsKVtk0haSXOU2s8sz8XoyqWfjsKpMJ3bQUVmNt6WerHNMzSQT/ByPYXDrJyq/z+Li/i7rPK5M6gET7NqIYvloXxovd7mzzjW1cdrXFrHx91BzXNPKnS6Y1HDjhjYOy1TnelQp6Aum7QDVMSyTTLAnHsPK8fMaTPqCIESLokGScsGlwz1pPBdBgLPciR4fd8CaN0+72871qDKD/pCmEsvhkmQX5qVtdRHxE2WT5CoI6Ng4/to6zDR9wlRiWymosUkyoduaHG1oBgAEt35JY7muwXR0eeJ4BCfKXW78Pn36iDH+sQXBuno9QgPglIy1dqme97pLAAA752eGvNZxSbZXVHEF+/r+Q14yL2GL90lbSKqW28hdohYsnUkCeglYXPKx2NkHyCQpJT8Kp5MJmkTv4A0gk3zsD3WnQMYKJyWHXouBYVehLV4f/wHit6c8llKODwAAAABJRU5ErkJggg==";
17865
- const __vite_glob_0_1 = "/assets/airbyte-292aa232.png";
17866
- const __vite_glob_0_2 = "/assets/cloud_storage_reader-aa1415d6.png";
17867
- const __vite_glob_0_3 = "data:image/png;base64,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";
17868
- const __vite_glob_0_4 = "/assets/cross_join-d30c0290.png";
17869
- const __vite_glob_0_5 = "/assets/database_reader-ce1e55f3.svg";
17870
- const __vite_glob_0_6 = "/assets/database_writer-b4ad0753.svg";
17871
- const __vite_glob_0_7 = "/assets/explore_data-8a0a2861.png";
17872
- const __vite_glob_0_8 = "data:image/png;base64,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";
17873
- const __vite_glob_0_9 = "/assets/filter-d7708bda.png";
17874
- const __vite_glob_0_10 = "/assets/formula-eeeb1611.png";
17875
- const __vite_glob_0_11 = "/assets/fuzzy_match-40c161b2.png";
17876
- const __vite_glob_0_12 = "data:image/png;base64,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";
17877
- const __vite_glob_0_13 = "/assets/graph_solver-8b7888b8.png";
17878
- const __vite_glob_0_14 = "/assets/group_by-80561fc3.png";
17879
- const __vite_glob_0_15 = "/assets/input_data-ab2eb678.png";
17880
- const __vite_glob_0_16 = "/assets/join-349043ae.png";
17881
- const __vite_glob_0_17 = "/assets/manual_input-ae98f31d.png";
17882
- const __vite_glob_0_18 = "/assets/old_join-5d0eb604.png";
17883
- const __vite_glob_0_19 = "/assets/output-06ec0371.png";
17884
- const __vite_glob_0_20 = "/assets/pivot-9660df51.png";
17885
- const __vite_glob_0_21 = "/assets/polars_code-05ce5dc6.png";
17886
- const __vite_glob_0_22 = "/assets/record_count-dab44eb5.png";
17887
- const __vite_glob_0_23 = "/assets/record_id-0b15856b.png";
17888
- const __vite_glob_0_24 = "/assets/sample-693a88b5.png";
17889
- const __vite_glob_0_25 = "/assets/select-b0d0437a.png";
17890
- const __vite_glob_0_26 = "/assets/sort-2aa579f0.png";
17891
- const __vite_glob_0_27 = "/assets/summarize-2a099231.png";
17892
- const __vite_glob_0_28 = "/assets/text_to_rows-859b29ea.png";
17893
- const __vite_glob_0_29 = "/assets/union-2d8609f4.png";
17894
- const __vite_glob_0_30 = "/assets/unique-1958b98a.png";
17895
- const __vite_glob_0_31 = "/assets/unpivot-d3cb4b5b.png";
17896
- const __vite_glob_0_32 = "/assets/view-7a0f0be1.png";
17897
- const getImageUrl = (name) => {
17898
- return new URL((/* @__PURE__ */ Object.assign({ "./assets/icons/Output2.png": __vite_glob_0_0, "./assets/icons/airbyte.png": __vite_glob_0_1, "./assets/icons/cloud_storage_reader.png": __vite_glob_0_2, "./assets/icons/cloud_storage_writer.png": __vite_glob_0_3, "./assets/icons/cross_join.png": __vite_glob_0_4, "./assets/icons/database_reader.svg": __vite_glob_0_5, "./assets/icons/database_writer.svg": __vite_glob_0_6, "./assets/icons/explore_data.png": __vite_glob_0_7, "./assets/icons/external_source.png": __vite_glob_0_8, "./assets/icons/filter.png": __vite_glob_0_9, "./assets/icons/formula.png": __vite_glob_0_10, "./assets/icons/fuzzy_match.png": __vite_glob_0_11, "./assets/icons/google_sheet.png": __vite_glob_0_12, "./assets/icons/graph_solver.png": __vite_glob_0_13, "./assets/icons/group_by.png": __vite_glob_0_14, "./assets/icons/input_data.png": __vite_glob_0_15, "./assets/icons/join.png": __vite_glob_0_16, "./assets/icons/manual_input.png": __vite_glob_0_17, "./assets/icons/old_join.png": __vite_glob_0_18, "./assets/icons/output.png": __vite_glob_0_19, "./assets/icons/pivot.png": __vite_glob_0_20, "./assets/icons/polars_code.png": __vite_glob_0_21, "./assets/icons/record_count.png": __vite_glob_0_22, "./assets/icons/record_id.png": __vite_glob_0_23, "./assets/icons/sample.png": __vite_glob_0_24, "./assets/icons/select.png": __vite_glob_0_25, "./assets/icons/sort.png": __vite_glob_0_26, "./assets/icons/summarize.png": __vite_glob_0_27, "./assets/icons/text_to_rows.png": __vite_glob_0_28, "./assets/icons/union.png": __vite_glob_0_29, "./assets/icons/unique.png": __vite_glob_0_30, "./assets/icons/unpivot.png": __vite_glob_0_31, "./assets/icons/view.png": __vite_glob_0_32 }))[`./assets/icons/${name}`], self.location).href;
17899
- };
17900
- const fetchNodes = async () => {
17901
- const response = await axios.get("/node_list");
17902
- const listNodes = response.data;
17903
- return listNodes;
17904
- };
17905
- const useNodes = () => {
17906
- const nodes = ref([]);
17907
- const fetchNodes2 = async () => {
17908
- const response = await axios.get("/node_list");
17909
- const allNodes = response.data;
17910
- nodes.value = allNodes.filter((node) => node.prod_ready);
17911
- };
17912
- onMounted(fetchNodes2);
17913
- return { nodes };
17914
- };
17915
- const _hoisted_1$9 = { class: "nodes-wrapper" };
17916
- const _hoisted_2$6 = ["onClick"];
17917
- const _hoisted_3$5 = { class: "category-title" };
17918
- const _hoisted_4$5 = {
18936
+ const CodeGenerator = /* @__PURE__ */ _export_sfc(_sfc_main$e, [["__scopeId", "data-v-8bafe064"]]);
18937
+ const _hoisted_1$b = { class: "nodes-wrapper" };
18938
+ const _hoisted_2$9 = ["onClick"];
18939
+ const _hoisted_3$8 = { class: "category-title" };
18940
+ const _hoisted_4$7 = {
17919
18941
  key: 0,
17920
18942
  class: "category-content"
17921
18943
  };
17922
- const _hoisted_5$4 = ["onDragstart"];
17923
- const _hoisted_6$3 = ["src", "alt"];
17924
- const _hoisted_7$2 = { class: "node-name" };
17925
- const _sfc_main$a = /* @__PURE__ */ defineComponent({
18944
+ const _hoisted_5$5 = ["onDragstart"];
18945
+ const _hoisted_6$4 = ["src", "alt"];
18946
+ const _hoisted_7$3 = { class: "node-name" };
18947
+ const _sfc_main$d = /* @__PURE__ */ defineComponent({
17926
18948
  __name: "NodeList",
17927
18949
  emits: ["dragstart"],
17928
18950
  setup(__props) {
@@ -17932,7 +18954,8 @@ const _sfc_main$a = /* @__PURE__ */ defineComponent({
17932
18954
  transform: { name: "Transformations", isOpen: true },
17933
18955
  combine: { name: "Combine Operations", isOpen: true },
17934
18956
  aggregate: { name: "Aggregations", isOpen: true },
17935
- output: { name: "Output Operations", isOpen: true }
18957
+ output: { name: "Output Operations", isOpen: true },
18958
+ custom: { name: "User Defined Operations", isOpen: true }
17936
18959
  };
17937
18960
  const openCategories = ref(
17938
18961
  Object.fromEntries(
@@ -17972,7 +18995,7 @@ const _sfc_main$a = /* @__PURE__ */ defineComponent({
17972
18995
  };
17973
18996
  return (_ctx, _cache) => {
17974
18997
  const _component_el_icon = resolveComponent("el-icon");
17975
- return openBlock(), createElementBlock("div", _hoisted_1$9, [
18998
+ return openBlock(), createElementBlock("div", _hoisted_1$b, [
17976
18999
  withDirectives(createBaseVNode("input", {
17977
19000
  "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => searchQuery.value = $event),
17978
19001
  type: "text",
@@ -17990,15 +19013,15 @@ const _sfc_main$a = /* @__PURE__ */ defineComponent({
17990
19013
  class: "category-header",
17991
19014
  onClick: ($event) => toggleCategory(category)
17992
19015
  }, [
17993
- createBaseVNode("span", _hoisted_3$5, toDisplayString(categoryInfo.name), 1),
19016
+ createBaseVNode("span", _hoisted_3$8, toDisplayString(categoryInfo.name), 1),
17994
19017
  createVNode(_component_el_icon, { class: "category-icon" }, {
17995
19018
  default: withCtx(() => [
17996
19019
  openCategories.value[category] ? (openBlock(), createBlock(unref(arrow_down_default), { key: 0 })) : (openBlock(), createBlock(unref(arrow_right_default), { key: 1 }))
17997
19020
  ]),
17998
19021
  _: 2
17999
19022
  }, 1024)
18000
- ], 8, _hoisted_2$6),
18001
- openCategories.value[category] && filteredNodes.value[category] ? (openBlock(), createElementBlock("div", _hoisted_4$5, [
19023
+ ], 8, _hoisted_2$9),
19024
+ openCategories.value[category] && filteredNodes.value[category] ? (openBlock(), createElementBlock("div", _hoisted_4$7, [
18002
19025
  (openBlock(true), createElementBlock(Fragment, null, renderList(filteredNodes.value[category], (node) => {
18003
19026
  return openBlock(), createElementBlock("div", {
18004
19027
  key: node.item,
@@ -18010,9 +19033,9 @@ const _sfc_main$a = /* @__PURE__ */ defineComponent({
18010
19033
  src: unref(getImageUrl)(node.image),
18011
19034
  alt: node.name,
18012
19035
  class: "node-image"
18013
- }, null, 8, _hoisted_6$3),
18014
- createBaseVNode("span", _hoisted_7$2, toDisplayString(node.name), 1)
18015
- ], 40, _hoisted_5$4);
19036
+ }, null, 8, _hoisted_6$4),
19037
+ createBaseVNode("span", _hoisted_7$3, toDisplayString(node.name), 1)
19038
+ ], 40, _hoisted_5$5);
18016
19039
  }), 128))
18017
19040
  ])) : createCommentVNode("", true)
18018
19041
  ]);
@@ -18021,129 +19044,126 @@ const _sfc_main$a = /* @__PURE__ */ defineComponent({
18021
19044
  };
18022
19045
  }
18023
19046
  });
18024
- const NodeList_vue_vue_type_style_index_0_scoped_a8d4b46b_lang = "";
18025
- const NodeList = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["__scopeId", "data-v-a8d4b46b"]]);
18026
- const useItemStore = defineStore("itemStore", () => {
18027
- const items = ref({});
18028
- const setItemState = (id2, state2) => {
18029
- if (!items.value[id2]) {
18030
- items.value[id2] = {
18031
- width: 400,
18032
- height: 300,
18033
- left: 100,
18034
- top: 100,
18035
- stickynessPosition: "free",
18036
- fullWidth: false,
18037
- fullHeight: false,
18038
- zIndex: 100,
18039
- fullScreen: false,
18040
- clicked: false
18041
- };
18042
- }
18043
- Object.assign(items.value[id2], state2);
18044
- };
18045
- const saveItemState = (id2) => {
18046
- const itemState = items.value[id2];
18047
- localStorage.setItem(`overlayPositionAndSize_${id2}`, JSON.stringify(itemState));
18048
- };
18049
- const loadItemState = (id2) => {
18050
- const savedState = localStorage.getItem(`overlayPositionAndSize_${id2}`);
18051
- if (savedState) {
18052
- items.value[id2] = JSON.parse(savedState);
19047
+ const NodeList_vue_vue_type_style_index_0_scoped_63142f09_lang = "";
19048
+ const NodeList = /* @__PURE__ */ _export_sfc(_sfc_main$d, [["__scopeId", "data-v-63142f09"]]);
19049
+ const _hoisted_1$a = { class: "listbox-wrapper" };
19050
+ const _hoisted_2$8 = { class: "listbox-title" };
19051
+ const _hoisted_3$7 = { class: "intro-content" };
19052
+ const _hoisted_4$6 = {
19053
+ key: 1,
19054
+ class: "title"
19055
+ };
19056
+ const _sfc_main$c = /* @__PURE__ */ defineComponent({
19057
+ __name: "nodeTitle",
19058
+ props: {
19059
+ title: {
19060
+ type: String,
19061
+ required: true
19062
+ },
19063
+ intro: {
19064
+ type: String,
19065
+ required: false,
19066
+ default: ""
19067
+ // Add default value to resolve warning
18053
19068
  }
18054
- };
18055
- const toggleFullScreen = (id2) => {
18056
- if (!items.value[id2])
18057
- return;
18058
- setFullScreen(id2, !items.value[id2].fullScreen);
18059
- };
18060
- const setFullScreen = (id2, fullScreen) => {
18061
- if (!items.value[id2])
18062
- return;
18063
- if (items.value[id2].fullScreen !== fullScreen) {
18064
- if (fullScreen) {
18065
- items.value[id2].fullScreen = true;
18066
- items.value[id2].prevWidth = items.value[id2].width;
18067
- items.value[id2].prevHeight = items.value[id2].height;
18068
- items.value[id2].prevLeft = items.value[id2].left;
18069
- items.value[id2].prevTop = items.value[id2].top;
18070
- items.value[id2].width = window.innerWidth;
18071
- items.value[id2].height = window.innerHeight;
18072
- items.value[id2].left = 0;
18073
- items.value[id2].top = 0;
18074
- } else {
18075
- items.value[id2].fullScreen = false;
18076
- items.value[id2].width = items.value[id2].prevWidth || 400;
18077
- items.value[id2].height = items.value[id2].prevHeight || 300;
18078
- items.value[id2].left = items.value[id2].prevLeft || 100;
18079
- items.value[id2].top = items.value[id2].prevTop || 100;
19069
+ },
19070
+ setup(__props) {
19071
+ const props2 = __props;
19072
+ return (_ctx, _cache) => {
19073
+ const _component_el_collapse_item = resolveComponent("el-collapse-item");
19074
+ const _component_el_collapse = resolveComponent("el-collapse");
19075
+ return openBlock(), createElementBlock("div", _hoisted_1$a, [
19076
+ props2.intro ? (openBlock(), createBlock(_component_el_collapse, {
19077
+ key: 0,
19078
+ class: "listbox-expandable"
19079
+ }, {
19080
+ default: withCtx(() => [
19081
+ createVNode(_component_el_collapse_item, null, {
19082
+ title: withCtx(() => [
19083
+ createBaseVNode("div", _hoisted_2$8, toDisplayString(props2.title), 1)
19084
+ ]),
19085
+ default: withCtx(() => [
19086
+ createBaseVNode("div", _hoisted_3$7, toDisplayString(props2.intro), 1)
19087
+ ]),
19088
+ _: 1
19089
+ })
19090
+ ]),
19091
+ _: 1
19092
+ })) : (openBlock(), createElementBlock("div", _hoisted_4$6, toDisplayString(props2.title), 1))
19093
+ ]);
19094
+ };
19095
+ }
19096
+ });
19097
+ const nodeTitle_vue_vue_type_style_index_0_scoped_0db5c358_lang = "";
19098
+ const NodeTitle = /* @__PURE__ */ _export_sfc(_sfc_main$c, [["__scopeId", "data-v-0db5c358"]]);
19099
+ const _sfc_main$b = /* @__PURE__ */ defineComponent({
19100
+ __name: "NodeSettingsDrawer",
19101
+ setup(__props) {
19102
+ const nodeStore = useNodeStore();
19103
+ const drawerComponentInstance = ref(null);
19104
+ ref("");
19105
+ ref("");
19106
+ const lastExecutedState = ref({
19107
+ nodeId: -1,
19108
+ componentInstance: null
19109
+ });
19110
+ const executeCleanup = async () => {
19111
+ if (lastExecutedState.value.componentInstance) {
19112
+ console.log(`executing cleanup for node ${lastExecutedState.value.nodeId}`);
19113
+ await nodeStore.executeDrawCloseFunction();
18080
19114
  }
18081
- saveItemState(id2);
18082
- clickOnItem(id2);
18083
- }
18084
- };
18085
- const inResizing = ref(false);
18086
- const idItemClicked = ref(null);
18087
- const idItemVisible = ref(null);
18088
- const clickOnItem = (id2) => {
18089
- if (idItemClicked.value === id2)
18090
- return;
18091
- if (idItemClicked.value) {
18092
- items.value[idItemClicked.value].zIndex = 100;
18093
- }
18094
- items.value[id2].zIndex = 1e3;
18095
- idItemClicked.value = id2;
18096
- };
18097
- const setResizing = (resizing) => {
18098
- inResizing.value = resizing;
18099
- };
18100
- const getResizing = () => {
18101
- return inResizing.value;
18102
- };
18103
- const scrollOnItem = (id2) => {
18104
- const itemElement = document.getElementById(id2);
18105
- if (!itemElement)
18106
- return;
18107
- const observer = new IntersectionObserver(
18108
- (entries) => {
18109
- entries.forEach((entry) => {
18110
- if (entry.isIntersecting) {
18111
- idItemVisible.value = id2;
18112
- items.value[id2].zIndex = 1e3;
18113
- } else if (idItemVisible.value === id2) {
18114
- items.value[id2].zIndex = 100;
18115
- idItemVisible.value = null;
18116
- }
18117
- });
18118
- },
18119
- {
18120
- threshold: 0.5
18121
- // Trigger when 50% of the item is visible
19115
+ };
19116
+ const setupNewNode = () => {
19117
+ var _a;
19118
+ if (((_a = drawerComponentInstance.value) == null ? void 0 : _a.loadNodeData) && nodeStore.node_id !== -1) {
19119
+ drawerComponentInstance.value.loadNodeData(nodeStore.node_id);
19120
+ nodeStore.setCloseFunction(drawerComponentInstance.value.pushNodeData);
19121
+ lastExecutedState.value = {
19122
+ nodeId: nodeStore.node_id,
19123
+ componentInstance: drawerComponentInstance.value
19124
+ };
18122
19125
  }
19126
+ };
19127
+ watch$1(
19128
+ [() => drawerComponentInstance.value, () => nodeStore.node_id],
19129
+ async ([newInstance, newNodeId], [oldInstance, oldNodeId]) => {
19130
+ const nodeIdChanged = newNodeId !== oldNodeId;
19131
+ if (nodeIdChanged && oldNodeId !== -1 && lastExecutedState.value.componentInstance) {
19132
+ await executeCleanup();
19133
+ lastExecutedState.value = {
19134
+ nodeId: -1,
19135
+ componentInstance: null
19136
+ };
19137
+ }
19138
+ if (newNodeId === -1) {
19139
+ nodeStore.isDrawerOpen = false;
19140
+ return;
19141
+ }
19142
+ if (newInstance) {
19143
+ await nextTick();
19144
+ setupNewNode();
19145
+ }
19146
+ },
19147
+ { immediate: true }
18123
19148
  );
18124
- observer.observe(itemElement);
18125
- };
18126
- return {
18127
- inResizing,
18128
- items,
18129
- setItemState,
18130
- saveItemState,
18131
- loadItemState,
18132
- setResizing,
18133
- getResizing,
18134
- clickOnItem,
18135
- scrollOnItem,
18136
- idItemVisible,
18137
- // Exposing the visible item
18138
- toggleFullScreen,
18139
- // Toggle fullscreen state
18140
- setFullScreen
18141
- // Set fullscreen state with boolean parameter
18142
- };
19149
+ return (_ctx, _cache) => {
19150
+ return openBlock(), createElementBlock(Fragment, null, [
19151
+ createVNode(NodeTitle, {
19152
+ title: unref(nodeStore).drawerProps.title,
19153
+ intro: unref(nodeStore).drawerProps.intro
19154
+ }, null, 8, ["title", "intro"]),
19155
+ (openBlock(), createBlock(resolveDynamicComponent(unref(nodeStore).activeDrawerComponent), mergeProps(unref(nodeStore).drawerProps, {
19156
+ ref_key: "drawerComponentInstance",
19157
+ ref: drawerComponentInstance
19158
+ }), null, 16))
19159
+ ], 64);
19160
+ };
19161
+ }
18143
19162
  });
18144
- const _hoisted_1$8 = ["title"];
18145
- const _hoisted_2$5 = { class: "icon" };
18146
- const _sfc_main$9 = /* @__PURE__ */ defineComponent({
19163
+ const _hoisted_1$9 = ["id"];
19164
+ const _hoisted_2$7 = ["title"];
19165
+ const _hoisted_3$6 = { class: "icon" };
19166
+ const _sfc_main$a = /* @__PURE__ */ defineComponent({
18147
19167
  __name: "DraggableItem",
18148
19168
  props: {
18149
19169
  id: {
@@ -18166,6 +19186,10 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
18166
19186
  type: Boolean,
18167
19187
  default: false
18168
19188
  },
19189
+ showPresets: {
19190
+ type: Boolean,
19191
+ default: false
19192
+ },
18169
19193
  initialPosition: {
18170
19194
  type: String,
18171
19195
  default: "free"
@@ -18178,7 +19202,7 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
18178
19202
  type: Number,
18179
19203
  default: null
18180
19204
  },
18181
- initalLeft: {
19205
+ initialLeft: {
18182
19206
  type: Number,
18183
19207
  default: null
18184
19208
  },
@@ -18205,9 +19229,49 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
18205
19229
  allowFullScreen: {
18206
19230
  type: Boolean,
18207
19231
  default: false
19232
+ },
19233
+ group: {
19234
+ type: String,
19235
+ default: null
19236
+ },
19237
+ syncDimensions: {
19238
+ type: Boolean,
19239
+ default: false
19240
+ },
19241
+ preventOverlap: {
19242
+ type: Boolean,
19243
+ default: false
18208
19244
  }
18209
19245
  },
18210
19246
  setup(__props, { expose: __expose }) {
19247
+ const props2 = __props;
19248
+ const itemStore = useItemStore();
19249
+ const itemState = ref(
19250
+ itemStore.items[props2.id] || {
19251
+ width: props2.initialWidth || 400,
19252
+ height: props2.initialHeight || 300,
19253
+ left: props2.initialLeft || 100,
19254
+ // Used corrected prop
19255
+ top: props2.initialTop || 100,
19256
+ group: props2.group,
19257
+ syncDimensions: props2.syncDimensions,
19258
+ zIndex: 100
19259
+ }
19260
+ );
19261
+ const isDragging = ref(false);
19262
+ const isResizing = ref(false);
19263
+ const startX = ref(0);
19264
+ const startY = ref(0);
19265
+ const startWidth = ref(0);
19266
+ const startHeight = ref(0);
19267
+ const startLeft = ref(0);
19268
+ const startTop = ref(0);
19269
+ const isMinimized = ref(false);
19270
+ const instance = getCurrentInstance();
19271
+ const activeLine = ref(null);
19272
+ let resizeTimeout;
19273
+ const resizeDirection = ref(null);
19274
+ const initialGroupStates = ref({});
18211
19275
  const resizeDelay = ref(null);
18212
19276
  const resizeOnEnter = (e2, position) => {
18213
19277
  if (resizeDelay.value)
@@ -18231,31 +19295,51 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
18231
19295
  }
18232
19296
  }, 200);
18233
19297
  };
18234
- const props2 = __props;
18235
- const itemStore = useItemStore();
18236
- const itemState = ref(
18237
- itemStore.items[props2.id] || {
18238
- width: props2.initialWidth,
18239
- height: props2.initialHeight,
18240
- left: 100,
18241
- top: 100
18242
- }
18243
- );
18244
- const isDragging = ref(false);
18245
- const isResizing = ref(false);
18246
- const startX = ref(0);
18247
- const startY = ref(0);
18248
- const startWidth = ref(0);
18249
- const startHeight = ref(0);
18250
- const startLeft = ref(0);
18251
- const startTop = ref(0);
18252
- const isMinimized = ref(false);
18253
- const instance = getCurrentInstance();
18254
- const activeLine = ref(null);
18255
- let resizeTimeout;
18256
19298
  const savePositionAndSize = () => {
18257
- itemStore.setItemState(props2.id, itemState.value);
19299
+ itemStore.setItemState(props2.id, {
19300
+ width: itemState.value.width,
19301
+ height: itemState.value.height,
19302
+ left: itemState.value.left,
19303
+ top: itemState.value.top,
19304
+ stickynessPosition: itemState.value.stickynessPosition,
19305
+ fullWidth: itemState.value.fullWidth,
19306
+ fullHeight: itemState.value.fullHeight,
19307
+ zIndex: itemState.value.zIndex,
19308
+ fullScreen: itemState.value.fullScreen,
19309
+ group: itemState.value.group,
19310
+ syncDimensions: itemState.value.syncDimensions
19311
+ });
18258
19312
  itemStore.saveItemState(props2.id);
19313
+ if (itemState.value.group && itemState.value.syncDimensions && isResizing.value) {
19314
+ const groupItems = itemStore.groups[itemState.value.group];
19315
+ if (groupItems) {
19316
+ const initialActiveState = initialGroupStates.value[props2.id];
19317
+ if (!initialActiveState)
19318
+ return;
19319
+ const deltaX = itemState.value.left - initialActiveState.left;
19320
+ const deltaY = itemState.value.top - initialActiveState.top;
19321
+ groupItems.forEach((itemId) => {
19322
+ var _a;
19323
+ if (itemId === props2.id)
19324
+ return;
19325
+ const initialItemState = initialGroupStates.value[itemId];
19326
+ if (((_a = itemStore.items[itemId]) == null ? void 0 : _a.syncDimensions) && initialItemState) {
19327
+ const updates = {
19328
+ width: itemState.value.width,
19329
+ height: itemState.value.height
19330
+ };
19331
+ if (resizeDirection.value === "top") {
19332
+ updates.top = initialItemState.top + deltaY;
19333
+ }
19334
+ if (resizeDirection.value === "left") {
19335
+ updates.left = initialItemState.left + deltaX;
19336
+ }
19337
+ itemStore.setItemState(itemId, updates);
19338
+ itemStore.saveItemState(itemId);
19339
+ }
19340
+ });
19341
+ }
19342
+ }
18259
19343
  };
18260
19344
  const loadPositionAndSize = () => {
18261
19345
  itemStore.loadItemState(props2.id);
@@ -18276,28 +19360,33 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
18276
19360
  itemStore.inResizing = true;
18277
19361
  };
18278
19362
  const toggleFullScreen = () => {
18279
- if (itemState.value.fullScreen) {
18280
- itemState.value.fullScreen = false;
18281
- itemState.value.width = itemState.value.prevWidth || 300;
18282
- itemState.value.height = itemState.value.prevHeight || 300;
18283
- itemState.value.left = itemState.value.prevLeft || 100;
18284
- itemState.value.top = itemState.value.prevTop || 100;
18285
- } else {
18286
- itemState.value.fullScreen = true;
18287
- itemState.value.prevWidth = itemState.value.width;
18288
- itemState.value.prevHeight = itemState.value.height;
18289
- itemState.value.prevLeft = itemState.value.left;
18290
- itemState.value.prevTop = itemState.value.top;
18291
- itemState.value.width = window.innerWidth;
18292
- itemState.value.height = window.innerHeight;
18293
- itemState.value.left = 0;
18294
- itemState.value.top = 0;
19363
+ itemStore.toggleFullScreen(props2.id);
19364
+ loadPositionAndSize();
19365
+ };
19366
+ const captureGroupInitialStates = () => {
19367
+ if (itemState.value.group && itemState.value.syncDimensions) {
19368
+ initialGroupStates.value = {};
19369
+ const groupItems = itemStore.groups[itemState.value.group];
19370
+ if (groupItems) {
19371
+ groupItems.forEach((id2) => {
19372
+ const item = itemStore.items[id2];
19373
+ if (item) {
19374
+ initialGroupStates.value[id2] = {
19375
+ top: item.top,
19376
+ left: item.left,
19377
+ width: item.width,
19378
+ height: item.height
19379
+ };
19380
+ }
19381
+ });
19382
+ }
18295
19383
  }
18296
- savePositionAndSize();
18297
19384
  };
18298
19385
  const startResizeRight = (e2) => {
18299
19386
  e2.preventDefault();
18300
19387
  handleReziging(e2);
19388
+ resizeDirection.value = "right";
19389
+ captureGroupInitialStates();
18301
19390
  startX.value = e2.clientX;
18302
19391
  startWidth.value = itemState.value.width;
18303
19392
  document.addEventListener("mousemove", onResizeWidth);
@@ -18307,7 +19396,7 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
18307
19396
  if (isResizing.value) {
18308
19397
  const deltaX = e2.clientX - startX.value;
18309
19398
  const newWidth = startWidth.value + deltaX;
18310
- if (newWidth > 100 && newWidth < window.innerWidth - 0) {
19399
+ if (newWidth > 100 && newWidth < window.innerWidth) {
18311
19400
  itemState.value.width = newWidth;
18312
19401
  savePositionAndSize();
18313
19402
  }
@@ -18316,6 +19405,8 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
18316
19405
  const startResizeBottom = (e2) => {
18317
19406
  e2.preventDefault();
18318
19407
  handleReziging(e2);
19408
+ resizeDirection.value = "bottom";
19409
+ captureGroupInitialStates();
18319
19410
  startY.value = e2.clientY;
18320
19411
  startHeight.value = itemState.value.height;
18321
19412
  document.addEventListener("mousemove", onResizeHeight);
@@ -18334,6 +19425,8 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
18334
19425
  const startResizeTop = (e2) => {
18335
19426
  e2.preventDefault();
18336
19427
  handleReziging(e2);
19428
+ resizeDirection.value = "top";
19429
+ captureGroupInitialStates();
18337
19430
  startY.value = e2.clientY;
18338
19431
  startTop.value = itemState.value.top;
18339
19432
  startHeight.value = itemState.value.height;
@@ -18345,7 +19438,7 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
18345
19438
  const deltaY = e2.clientY - startY.value;
18346
19439
  const newTop = startTop.value + deltaY;
18347
19440
  const newHeight = startHeight.value - deltaY;
18348
- if (newHeight > 100 && newHeight < window.innerHeight - 100) {
19441
+ if (newHeight > 100 && newHeight < window.innerHeight - 100 && newTop >= 0) {
18349
19442
  itemState.value.top = newTop;
18350
19443
  itemState.value.height = newHeight;
18351
19444
  savePositionAndSize();
@@ -18355,6 +19448,8 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
18355
19448
  const startResizeLeft = (e2) => {
18356
19449
  e2.preventDefault();
18357
19450
  handleReziging(e2);
19451
+ resizeDirection.value = "left";
19452
+ captureGroupInitialStates();
18358
19453
  startX.value = e2.clientX;
18359
19454
  startLeft.value = itemState.value.left;
18360
19455
  startWidth.value = itemState.value.width;
@@ -18374,15 +19469,19 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
18374
19469
  }
18375
19470
  };
18376
19471
  const stopResize = () => {
18377
- isResizing.value = false;
18378
- if (activeLine.value) {
18379
- activeLine.value.classList.remove("resizing-highlight-line");
19472
+ if (isResizing.value) {
19473
+ isResizing.value = false;
19474
+ resizeDirection.value = null;
19475
+ initialGroupStates.value = {};
19476
+ if (activeLine.value) {
19477
+ activeLine.value.classList.remove("resizing-highlight-line");
19478
+ }
19479
+ itemStore.inResizing = false;
19480
+ document.removeEventListener("mousemove", onResizeWidth);
19481
+ document.removeEventListener("mousemove", onResizeHeight);
19482
+ document.removeEventListener("mousemove", onResizeTop);
19483
+ document.removeEventListener("mousemove", onResizeLeft);
18380
19484
  }
18381
- itemStore.inResizing = false;
18382
- document.removeEventListener("mousemove", onResizeWidth);
18383
- document.removeEventListener("mousemove", onResizeHeight);
18384
- document.removeEventListener("mousemove", onResizeTop);
18385
- document.removeEventListener("mousemove", onResizeLeft);
18386
19485
  };
18387
19486
  const startMove = (e2) => {
18388
19487
  registerClick();
@@ -18406,13 +19505,19 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
18406
19505
  const deltaY = e2.clientY - startY.value;
18407
19506
  itemState.value.left = startLeft.value + deltaX;
18408
19507
  itemState.value.top = startTop.value + deltaY;
18409
- savePositionAndSize();
18410
19508
  }
18411
19509
  };
18412
19510
  const stopMove = () => {
18413
- isDragging.value = false;
18414
- document.removeEventListener("mousemove", onMove);
18415
- document.removeEventListener("mouseup", stopMove);
19511
+ if (isDragging.value) {
19512
+ isDragging.value = false;
19513
+ document.removeEventListener("mousemove", onMove);
19514
+ document.removeEventListener("mouseup", stopMove);
19515
+ savePositionAndSize();
19516
+ if (props2.preventOverlap) {
19517
+ itemStore.preventOverlap(props2.id);
19518
+ loadPositionAndSize();
19519
+ }
19520
+ }
18416
19521
  };
18417
19522
  const moveToRight = () => {
18418
19523
  var _a;
@@ -18433,11 +19538,11 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
18433
19538
  const parentElement = (_a = instance == null ? void 0 : instance.parent) == null ? void 0 : _a.vnode.el;
18434
19539
  if (parentElement) {
18435
19540
  const parentBottom = parentElement.offsetTop + parentElement.offsetHeight;
18436
- itemState.value.left = parentElement.offsetLeft;
18437
- itemState.value.top = parentBottom - itemState.value.height;
19541
+ itemState.value.left = parentElement.offsetLeft + props2.initialLeft;
19542
+ itemState.value.top = parentBottom - (itemState.value.height + props2.initialTop);
18438
19543
  itemState.value.stickynessPosition = "bottom";
18439
19544
  if (itemState.value.fullWidth) {
18440
- itemState.value.width = parentElement.offsetWidth;
19545
+ itemState.value.width = parentElement.offsetWidth - props2.initialLeft;
18441
19546
  }
18442
19547
  savePositionAndSize();
18443
19548
  }
@@ -18469,27 +19574,50 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
18469
19574
  }
18470
19575
  };
18471
19576
  const applyStickyPosition = () => {
19577
+ var _a;
19578
+ const parentElement = (_a = instance == null ? void 0 : instance.parent) == null ? void 0 : _a.vnode.el;
19579
+ if (!parentElement) {
19580
+ console.warn(`No parent element found for ${props2.id}`);
19581
+ return;
19582
+ }
18472
19583
  switch (itemState.value.stickynessPosition) {
18473
19584
  case "top":
18474
- moveToTop();
19585
+ itemState.value.left = parentElement.offsetLeft;
19586
+ itemState.value.top = parentElement.offsetTop;
19587
+ if (itemState.value.fullWidth) {
19588
+ itemState.value.width = parentElement.offsetWidth;
19589
+ }
18475
19590
  break;
18476
19591
  case "bottom":
18477
- moveToBottom();
19592
+ itemState.value.left = parentElement.offsetLeft + (props2.initialLeft || 0);
19593
+ itemState.value.top = parentElement.offsetTop + parentElement.offsetHeight - itemState.value.height - (props2.initialTop || 0);
19594
+ if (itemState.value.fullWidth) {
19595
+ itemState.value.width = parentElement.offsetWidth - (props2.initialLeft || 0);
19596
+ }
18478
19597
  break;
18479
19598
  case "left":
18480
- moveToLeft();
19599
+ itemState.value.left = parentElement.offsetLeft;
19600
+ itemState.value.top = parentElement.offsetTop + (props2.initialTop || 0);
19601
+ if (itemState.value.fullHeight) {
19602
+ itemState.value.height = parentElement.offsetHeight - (props2.initialTop || 0);
19603
+ }
18481
19604
  break;
18482
19605
  case "right":
18483
- moveToRight();
19606
+ itemState.value.left = parentElement.offsetLeft + parentElement.offsetWidth - itemState.value.width;
19607
+ itemState.value.top = parentElement.offsetTop + (props2.initialTop || 0);
19608
+ if (itemState.value.fullHeight) {
19609
+ itemState.value.height = parentElement.offsetHeight - (props2.initialTop || 0);
19610
+ }
18484
19611
  break;
18485
19612
  }
19613
+ savePositionAndSize();
18486
19614
  };
18487
19615
  const calculateWidth = () => {
18488
19616
  var _a, _b;
18489
19617
  if (props2.initialWidth) {
18490
19618
  return props2.initialWidth;
18491
19619
  } else if (props2.initialPosition === "top" || props2.initialPosition === "bottom") {
18492
- return ((_b = (_a = instance == null ? void 0 : instance.parent) == null ? void 0 : _a.vnode.el) == null ? void 0 : _b.offsetWidth) || 300;
19620
+ return ((_b = (_a = instance == null ? void 0 : instance.parent) == null ? void 0 : _a.vnode.el) == null ? void 0 : _b.offsetWidth) - props2.initialLeft || 300;
18493
19621
  } else
18494
19622
  return 300;
18495
19623
  };
@@ -18498,7 +19626,7 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
18498
19626
  if (props2.initialHeight) {
18499
19627
  return props2.initialHeight;
18500
19628
  } else if (props2.initialPosition === "left" || props2.initialPosition === "right") {
18501
- return ((_b = (_a = instance == null ? void 0 : instance.parent) == null ? void 0 : _a.vnode.el) == null ? void 0 : _b.offsetHeight) || 300;
19629
+ return ((_b = (_a = instance == null ? void 0 : instance.parent) == null ? void 0 : _a.vnode.el) == null ? void 0 : _b.offsetHeight) - props2.initialHeight || 300;
18502
19630
  } else
18503
19631
  return 300;
18504
19632
  };
@@ -18520,74 +19648,117 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
18520
19648
  itemStore.clickOnItem(props2.id);
18521
19649
  };
18522
19650
  const setFullScreen = (makeFull) => {
18523
- if (itemState.value.fullScreen !== makeFull) {
18524
- toggleFullScreen();
18525
- }
19651
+ itemStore.setFullScreen(props2.id, makeFull);
19652
+ loadPositionAndSize();
18526
19653
  };
19654
+ watch$1(
19655
+ () => itemStore.items[props2.id],
19656
+ (newState) => {
19657
+ if (newState) {
19658
+ if (isDragging.value || isResizing.value) {
19659
+ itemState.value.zIndex = newState.zIndex;
19660
+ } else {
19661
+ itemState.value = { ...newState };
19662
+ }
19663
+ }
19664
+ },
19665
+ { deep: true }
19666
+ );
19667
+ watch$1(
19668
+ () => ({ group: props2.group, syncDimensions: props2.syncDimensions }),
19669
+ ({ group, syncDimensions }) => {
19670
+ itemStore.setItemState(props2.id, {
19671
+ group,
19672
+ syncDimensions
19673
+ });
19674
+ itemState.value.group = group;
19675
+ itemState.value.syncDimensions = syncDimensions;
19676
+ }
19677
+ );
19678
+ nextTick().then(() => {
19679
+ observeParentResize();
19680
+ });
18527
19681
  onMounted(() => {
18528
- if (!itemStore.items[props2.id]) {
19682
+ const initialWidth = calculateWidth();
19683
+ const initialHeight = calculateHeight();
19684
+ const initialLeft = props2.initialLeft || 100;
19685
+ const initialTop = props2.initialTop || 100;
19686
+ itemStore.registerInitialState(props2.id, {
19687
+ width: initialWidth,
19688
+ height: initialHeight,
19689
+ left: initialLeft,
19690
+ top: initialTop,
19691
+ stickynessPosition: props2.initialPosition,
19692
+ fullWidth: !props2.initialWidth,
19693
+ fullHeight: !props2.initialHeight,
19694
+ group: props2.group,
19695
+ syncDimensions: props2.syncDimensions
19696
+ });
19697
+ const hasSavedState = localStorage.getItem(`overlayPositionAndSize_${props2.id}`) !== null;
19698
+ if (!hasSavedState) {
18529
19699
  itemStore.setItemState(props2.id, {
18530
- width: calculateWidth(),
18531
- height: calculateHeight(),
18532
- left: props2.initalLeft || 100,
18533
- top: props2.initialTop || 100,
19700
+ width: initialWidth,
19701
+ height: initialHeight,
19702
+ left: initialLeft,
19703
+ top: initialTop,
18534
19704
  fullHeight: !props2.initialHeight,
18535
- fullWidth: !props2.initialWidth
19705
+ fullWidth: !props2.initialWidth,
19706
+ stickynessPosition: props2.initialPosition,
19707
+ group: props2.group,
19708
+ syncDimensions: props2.syncDimensions
18536
19709
  });
18537
19710
  itemState.value = itemStore.items[props2.id];
18538
- itemState.value.stickynessPosition = props2.initialPosition;
18539
- if (itemState.value.stickynessPosition !== "free") {
18540
- applyStickyPosition();
19711
+ if (props2.initialPosition !== "free") {
19712
+ nextTick(() => {
19713
+ applyStickyPosition();
19714
+ });
18541
19715
  }
18542
19716
  } else {
18543
19717
  loadPositionAndSize();
19718
+ if (itemState.value.stickynessPosition && itemState.value.stickynessPosition !== "free") {
19719
+ nextTick(() => {
19720
+ applyStickyPosition();
19721
+ });
19722
+ }
18544
19723
  }
19724
+ const handleLayoutReset = (event) => {
19725
+ itemState.value = { ...itemStore.items[props2.id] };
19726
+ if (itemState.value.stickynessPosition && itemState.value.stickynessPosition !== "free") {
19727
+ nextTick(() => {
19728
+ applyStickyPosition();
19729
+ });
19730
+ }
19731
+ };
19732
+ window.addEventListener("layout-reset", handleLayoutReset);
18545
19733
  document.addEventListener("mouseup", stopResize);
18546
- document.addEventListener("mouseup", stopMove);
19734
+ window[`resetHandler_${props2.id}`] = handleLayoutReset;
18547
19735
  });
18548
- nextTick().then(() => {
18549
- observeParentResize();
19736
+ __expose({
19737
+ setFullScreen
18550
19738
  });
18551
19739
  onBeforeUnmount(() => {
19740
+ const handler = window[`resetHandler_${props2.id}`];
19741
+ if (handler) {
19742
+ window.removeEventListener("layout-reset", handler);
19743
+ delete window[`resetHandler_${props2.id}`];
19744
+ }
18552
19745
  document.removeEventListener("mouseup", stopResize);
19746
+ document.removeEventListener("mousemove", onMove);
18553
19747
  document.removeEventListener("mouseup", stopMove);
18554
- });
18555
- __expose({
18556
- width: itemState.value.width,
18557
- height: itemState.value.height,
18558
- isDragging,
18559
- isResizing,
18560
- startX,
18561
- startY,
18562
- startWidth,
18563
- startHeight,
18564
- startLeft,
18565
- startTop,
18566
- left: itemState.value.left,
18567
- top: itemState.value.top,
18568
- startResizeRight,
18569
- onResizeWidth,
18570
- startResizeBottom,
18571
- onResizeHeight,
18572
- startResizeTop,
18573
- onResizeTop,
18574
- startResizeLeft,
18575
- onResizeLeft,
18576
- stopResize,
18577
- startMove,
18578
- onMove,
18579
- stopMove,
18580
- moveToRight,
18581
- moveToBottom,
18582
- moveToLeft,
18583
- moveToTop,
18584
- setHeight: (value) => itemState.value.height = value,
18585
- setWitdh: (value) => itemState.value.width = value,
18586
- setFullScreen
19748
+ document.removeEventListener("mousemove", onResizeWidth);
19749
+ document.removeEventListener("mousemove", onResizeHeight);
19750
+ document.removeEventListener("mousemove", onResizeTop);
19751
+ document.removeEventListener("mousemove", onResizeLeft);
18587
19752
  });
18588
19753
  return (_ctx, _cache) => {
18589
19754
  return openBlock(), createElementBlock("div", {
18590
- class: normalizeClass(["overlay", { "no-transition": isResizing.value, minimized: isMinimized.value }]),
19755
+ id: props2.id,
19756
+ class: normalizeClass(["overlay", {
19757
+ "no-transition": isResizing.value,
19758
+ minimized: isMinimized.value,
19759
+ "in-group": itemState.value.group,
19760
+ synced: itemState.value.syncDimensions
19761
+ }]),
18591
19762
  style: normalizeStyle({
18592
19763
  width: isMinimized.value ? "auto" : itemState.value.width + "px",
18593
19764
  height: isMinimized.value ? "auto" : itemState.value.height + "px",
@@ -18603,14 +19774,16 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
18603
19774
  __props.allowMinimizing ? (openBlock(), createElementBlock("button", {
18604
19775
  key: 0,
18605
19776
  class: "minimal-button",
19777
+ "data-tooltip": "true",
18606
19778
  title: isMinimized.value ? "Maximize" : "Minimize",
18607
19779
  onClick: toggleMinimize
18608
19780
  }, [
18609
- createBaseVNode("span", _hoisted_2$5, toDisplayString(isMinimized.value ? "+" : "−"), 1)
18610
- ], 8, _hoisted_1$8)) : createCommentVNode("", true),
19781
+ createBaseVNode("span", _hoisted_3$6, toDisplayString(isMinimized.value ? "+" : "−"), 1)
19782
+ ], 8, _hoisted_2$7)) : createCommentVNode("", true),
18611
19783
  __props.showRight && itemState.value.stickynessPosition !== "right" ? (openBlock(), createElementBlock("button", {
18612
19784
  key: 1,
18613
19785
  class: "minimal-button",
19786
+ "data-tooltip": "true",
18614
19787
  title: "Move to Right",
18615
19788
  onClick: moveToRight
18616
19789
  }, _cache[4] || (_cache[4] = [
@@ -18619,6 +19792,7 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
18619
19792
  __props.showBottom && itemState.value.stickynessPosition !== "bottom" ? (openBlock(), createElementBlock("button", {
18620
19793
  key: 2,
18621
19794
  class: "minimal-button",
19795
+ "data-tooltip": "true",
18622
19796
  title: "Move to Bottom",
18623
19797
  onClick: moveToBottom
18624
19798
  }, _cache[5] || (_cache[5] = [
@@ -18627,6 +19801,7 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
18627
19801
  __props.showLeft && itemState.value.stickynessPosition !== "left" ? (openBlock(), createElementBlock("button", {
18628
19802
  key: 3,
18629
19803
  class: "minimal-button",
19804
+ "data-tooltip": "true",
18630
19805
  title: "Move to Left",
18631
19806
  onClick: moveToLeft
18632
19807
  }, _cache[6] || (_cache[6] = [
@@ -18635,6 +19810,7 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
18635
19810
  __props.showTop && itemState.value.stickynessPosition !== "top" ? (openBlock(), createElementBlock("button", {
18636
19811
  key: 4,
18637
19812
  class: "minimal-button",
19813
+ "data-tooltip": "true",
18638
19814
  title: "Move to Top",
18639
19815
  onClick: moveToTop
18640
19816
  }, _cache[7] || (_cache[7] = [
@@ -18643,7 +19819,8 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
18643
19819
  __props.allowFullScreen && !itemState.value.fullScreen ? (openBlock(), createElementBlock("button", {
18644
19820
  key: 5,
18645
19821
  class: "minimal-button",
18646
- title: "Toggle Full Screen",
19822
+ "data-tooltip": "true",
19823
+ "data-tooltip-text": "Toggle Full Screen",
18647
19824
  onClick: toggleFullScreen
18648
19825
  }, _cache[8] || (_cache[8] = [
18649
19826
  createBaseVNode("span", { class: "icon" }, "⬜", -1)
@@ -18651,12 +19828,16 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
18651
19828
  __props.allowFullScreen && itemState.value.fullScreen ? (openBlock(), createElementBlock("button", {
18652
19829
  key: 6,
18653
19830
  class: "minimal-button",
18654
- title: "To Small Screen",
19831
+ "data-tooltip": "true",
19832
+ "data-tooltip-text": "Exit Full Screen",
18655
19833
  onClick: toggleFullScreen
18656
19834
  }, _cache[9] || (_cache[9] = [
18657
19835
  createBaseVNode("span", { class: "icon" }, "❐", -1)
18658
19836
  ]))) : createCommentVNode("", true),
18659
- createTextVNode(" " + toDisplayString(__props.title), 1)
19837
+ createBaseVNode("span", {
19838
+ class: "group-badge",
19839
+ onMousedown: startMove
19840
+ }, toDisplayString(__props.title), 33)
18660
19841
  ], 32),
18661
19842
  createBaseVNode("div", {
18662
19843
  class: "content",
@@ -18684,12 +19865,214 @@ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
18684
19865
  onMousedown: withModifiers(startResizeLeft, ["stop"]),
18685
19866
  onMouseenter: _cache[3] || (_cache[3] = ($event) => resizeOnEnter($event, "left"))
18686
19867
  }, null, 32)
18687
- ], 6);
19868
+ ], 14, _hoisted_1$9);
19869
+ };
19870
+ }
19871
+ });
19872
+ const DraggableItem_vue_vue_type_style_index_0_scoped_47a34251_lang = "";
19873
+ const DraggableItem = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["__scopeId", "data-v-47a34251"]]);
19874
+ const _hoisted_1$8 = { class: "panel-header" };
19875
+ const _hoisted_2$6 = { class: "panel-body" };
19876
+ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
19877
+ __name: "layoutControls",
19878
+ emits: ["reset-layout-graph"],
19879
+ setup(__props, { emit: __emit }) {
19880
+ const emit = __emit;
19881
+ const itemStore = useItemStore();
19882
+ const isOpen = ref(false);
19883
+ const position = ref({ x: window.innerWidth - 80, y: window.innerHeight - 80 });
19884
+ const isDragging = ref(false);
19885
+ const hasDragged = ref(false);
19886
+ const dragStart = ref({ x: 0, y: 0 });
19887
+ const initialPosition = ref({ x: 0, y: 0 });
19888
+ const handleViewportResize = () => {
19889
+ const buttonSize = 45;
19890
+ const boundaryMargin = 10;
19891
+ position.value.x = Math.max(
19892
+ boundaryMargin,
19893
+ Math.min(window.innerWidth - buttonSize - boundaryMargin, position.value.x)
19894
+ );
19895
+ position.value.y = Math.max(
19896
+ boundaryMargin,
19897
+ Math.min(window.innerHeight - buttonSize - boundaryMargin, position.value.y)
19898
+ );
19899
+ };
19900
+ const panelStyle = computed$1(() => {
19901
+ const style = {};
19902
+ const isRightHalf = position.value.x > window.innerWidth / 2;
19903
+ const isBottomHalf = position.value.y > window.innerHeight / 2;
19904
+ if (isRightHalf) {
19905
+ style.right = "60px";
19906
+ } else {
19907
+ style.left = "60px";
19908
+ }
19909
+ if (isBottomHalf) {
19910
+ style.bottom = "0px";
19911
+ } else {
19912
+ style.top = "0px";
19913
+ }
19914
+ return style;
19915
+ });
19916
+ onMounted(() => {
19917
+ const savedPosition = localStorage.getItem("layoutControlsPosition");
19918
+ if (savedPosition) {
19919
+ const parsed = JSON.parse(savedPosition);
19920
+ position.value = parsed;
19921
+ handleViewportResize();
19922
+ }
19923
+ window.addEventListener("resize", handleViewportResize);
19924
+ });
19925
+ const savePosition = () => {
19926
+ localStorage.setItem("layoutControlsPosition", JSON.stringify(position.value));
19927
+ };
19928
+ const handleMouseDown = (e2) => {
19929
+ e2.preventDefault();
19930
+ hasDragged.value = false;
19931
+ if (isOpen.value) {
19932
+ return;
19933
+ }
19934
+ isDragging.value = true;
19935
+ dragStart.value = {
19936
+ x: e2.clientX,
19937
+ y: e2.clientY
19938
+ };
19939
+ initialPosition.value = {
19940
+ x: position.value.x,
19941
+ y: position.value.y
19942
+ };
19943
+ document.addEventListener("mousemove", onDrag);
19944
+ document.addEventListener("mouseup", stopDrag);
19945
+ };
19946
+ const handleClick = (e2) => {
19947
+ e2.preventDefault();
19948
+ e2.stopPropagation();
19949
+ if (!hasDragged.value) {
19950
+ isOpen.value = !isOpen.value;
19951
+ }
19952
+ };
19953
+ const onDrag = (e2) => {
19954
+ if (!isDragging.value)
19955
+ return;
19956
+ const deltaX = e2.clientX - dragStart.value.x;
19957
+ const deltaY = e2.clientY - dragStart.value.y;
19958
+ if (Math.abs(deltaX) > 5 || Math.abs(deltaY) > 5) {
19959
+ hasDragged.value = true;
19960
+ }
19961
+ if (hasDragged.value) {
19962
+ let newX = initialPosition.value.x + deltaX;
19963
+ let newY = initialPosition.value.y + deltaY;
19964
+ const buttonSize = 45;
19965
+ const boundaryMargin = 10;
19966
+ newX = Math.max(
19967
+ boundaryMargin,
19968
+ Math.min(window.innerWidth - buttonSize - boundaryMargin, newX)
19969
+ );
19970
+ newY = Math.max(
19971
+ boundaryMargin,
19972
+ Math.min(window.innerHeight - buttonSize - boundaryMargin, newY)
19973
+ );
19974
+ position.value = { x: newX, y: newY };
19975
+ }
19976
+ };
19977
+ const stopDrag = () => {
19978
+ if (isDragging.value) {
19979
+ isDragging.value = false;
19980
+ if (hasDragged.value) {
19981
+ savePosition();
19982
+ }
19983
+ document.removeEventListener("mousemove", onDrag);
19984
+ document.removeEventListener("mouseup", stopDrag);
19985
+ }
19986
+ };
19987
+ const runAction = (action, ...args) => {
19988
+ action(...args);
19989
+ isOpen.value = false;
19990
+ };
19991
+ const arrangeLayout = (layout) => {
19992
+ itemStore.arrangeItems(layout);
19993
+ };
19994
+ const resetLayout = () => {
19995
+ itemStore.resetLayout();
19996
+ };
19997
+ const resetLayoutGraph = () => {
19998
+ emit("reset-layout-graph");
19999
+ };
20000
+ onBeforeUnmount(() => {
20001
+ document.removeEventListener("mousemove", onDrag);
20002
+ document.removeEventListener("mouseup", stopDrag);
20003
+ window.removeEventListener("resize", handleViewportResize);
20004
+ });
20005
+ return (_ctx, _cache) => {
20006
+ return openBlock(), createElementBlock("div", {
20007
+ class: "layout-widget-wrapper",
20008
+ style: normalizeStyle({
20009
+ left: position.value.x + "px",
20010
+ top: position.value.y + "px"
20011
+ })
20012
+ }, [
20013
+ createVNode(Transition$2, { name: "panel-fade" }, {
20014
+ default: withCtx(() => [
20015
+ isOpen.value ? (openBlock(), createElementBlock("div", {
20016
+ key: 0,
20017
+ class: "panel",
20018
+ style: normalizeStyle(panelStyle.value)
20019
+ }, [
20020
+ createBaseVNode("div", _hoisted_1$8, [
20021
+ _cache[5] || (_cache[5] = createBaseVNode("span", { class: "panel-title" }, "Layout Controls", -1)),
20022
+ createBaseVNode("button", {
20023
+ class: "close-btn",
20024
+ title: "Close",
20025
+ onClick: _cache[0] || (_cache[0] = ($event) => isOpen.value = false)
20026
+ }, "✕")
20027
+ ]),
20028
+ createBaseVNode("div", _hoisted_2$6, [
20029
+ createBaseVNode("button", {
20030
+ class: "control-btn",
20031
+ onClick: _cache[1] || (_cache[1] = ($event) => runAction(arrangeLayout, "tile"))
20032
+ }, _cache[6] || (_cache[6] = [
20033
+ createBaseVNode("span", { class: "icon" }, "⊞", -1),
20034
+ createTextVNode(" Tile Layout ")
20035
+ ])),
20036
+ createBaseVNode("button", {
20037
+ class: "control-btn",
20038
+ onClick: _cache[2] || (_cache[2] = ($event) => runAction(arrangeLayout, "cascade"))
20039
+ }, _cache[7] || (_cache[7] = [
20040
+ createBaseVNode("span", { class: "icon" }, "◫", -1),
20041
+ createTextVNode(" Cascade ")
20042
+ ])),
20043
+ createBaseVNode("button", {
20044
+ class: "control-btn",
20045
+ onClick: _cache[3] || (_cache[3] = ($event) => runAction(resetLayout))
20046
+ }, _cache[8] || (_cache[8] = [
20047
+ createBaseVNode("span", { class: "icon" }, "↺", -1),
20048
+ createTextVNode(" Reset window Layout ")
20049
+ ])),
20050
+ createBaseVNode("button", {
20051
+ class: "control-btn accent",
20052
+ onClick: _cache[4] || (_cache[4] = ($event) => runAction(resetLayoutGraph))
20053
+ }, _cache[9] || (_cache[9] = [
20054
+ createBaseVNode("span", { class: "icon" }, "⟲", -1),
20055
+ createTextVNode(" Reset Layout Graph ")
20056
+ ]))
20057
+ ])
20058
+ ], 4)) : createCommentVNode("", true)
20059
+ ]),
20060
+ _: 1
20061
+ }),
20062
+ createBaseVNode("button", {
20063
+ class: normalizeClass(["trigger-btn", { "is-open": isOpen.value }]),
20064
+ title: "Layout Controls",
20065
+ onMousedown: handleMouseDown,
20066
+ onClick: handleClick
20067
+ }, _cache[10] || (_cache[10] = [
20068
+ createStaticVNode('<svg class="layout-icon" viewBox="0 0 24 24" width="24" height="24" data-v-0bdaa52f><rect x="2" y="2" width="8" height="6" fill="currentColor" opacity="0.9" data-v-0bdaa52f></rect><rect x="12" y="2" width="8" height="6" fill="currentColor" opacity="0.7" data-v-0bdaa52f></rect><rect x="2" y="10" width="8" height="10" fill="currentColor" opacity="0.7" data-v-0bdaa52f></rect><rect x="12" y="10" width="8" height="10" fill="currentColor" opacity="0.9" data-v-0bdaa52f></rect></svg>', 1)
20069
+ ]), 34)
20070
+ ], 4);
18688
20071
  };
18689
20072
  }
18690
20073
  });
18691
- const DraggableItem_vue_vue_type_style_index_0_scoped_e3b23979_lang = "";
18692
- const DraggableItem = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["__scopeId", "data-v-e3b23979"]]);
20074
+ const layoutControls_vue_vue_type_style_index_0_scoped_0bdaa52f_lang = "";
20075
+ const layoutControls = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["__scopeId", "data-v-0bdaa52f"]]);
18693
20076
  var __defProp$2 = Object.defineProperty;
18694
20077
  var __defProps = Object.defineProperties;
18695
20078
  var __getOwnPropDesc$1 = Object.getOwnPropertyDescriptor;
@@ -67227,15 +68610,15 @@ var __defProp$1 = Object.defineProperty;
67227
68610
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
67228
68611
  var __hasOwnProp = Object.prototype.hasOwnProperty;
67229
68612
  var __propIsEnum = Object.prototype.propertyIsEnumerable;
67230
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
68613
+ var __defNormalProp2 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
67231
68614
  var __spreadValues = (a3, b2) => {
67232
68615
  for (var prop in b2 || (b2 = {}))
67233
68616
  if (__hasOwnProp.call(b2, prop))
67234
- __defNormalProp(a3, prop, b2[prop]);
68617
+ __defNormalProp2(a3, prop, b2[prop]);
67235
68618
  if (__getOwnPropSymbols)
67236
68619
  for (var prop of __getOwnPropSymbols(b2)) {
67237
68620
  if (__propIsEnum.call(b2, prop))
67238
- __defNormalProp(a3, prop, b2[prop]);
68621
+ __defNormalProp2(a3, prop, b2[prop]);
67239
68622
  }
67240
68623
  return a3;
67241
68624
  };
@@ -67705,7 +69088,7 @@ var AgGridVue = defineComponent({
67705
69088
  * @license MIT
67706
69089
  **)
67707
69090
  */
67708
- var __defProp = Object.defineProperty;
69091
+ var __defProp2 = Object.defineProperty;
67709
69092
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
67710
69093
  var __decorateClass = (decorators, target, key, kind) => {
67711
69094
  var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
@@ -67713,7 +69096,7 @@ var __decorateClass = (decorators, target, key, kind) => {
67713
69096
  if (decorator = decorators[i2])
67714
69097
  result = (kind ? decorator(target, key, result) : decorator(result)) || result;
67715
69098
  if (kind && result)
67716
- __defProp(target, key, result);
69099
+ __defProp2(target, key, result);
67717
69100
  return result;
67718
69101
  };
67719
69102
  var _ClientSideNodeManager = class _ClientSideNodeManager2 {
@@ -69431,6 +70814,18 @@ const _hoisted_1$7 = {
69431
70814
  key: 0,
69432
70815
  class: "spinner-overlay"
69433
70816
  };
70817
+ const _hoisted_2$5 = { class: "table-container" };
70818
+ const _hoisted_3$5 = {
70819
+ key: 0,
70820
+ class: "outdated-data-banner"
70821
+ };
70822
+ const _hoisted_4$5 = {
70823
+ key: 1,
70824
+ class: "fetch-data-section"
70825
+ };
70826
+ const _hoisted_5$4 = ["disabled"];
70827
+ const _hoisted_6$3 = { key: 0 };
70828
+ const _hoisted_7$2 = { key: 1 };
69434
70829
  const _sfc_main$8 = /* @__PURE__ */ defineComponent({
69435
70830
  __name: "dataPreview",
69436
70831
  props: {
@@ -69451,6 +70846,31 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
69451
70846
  const columnLength = ref(0);
69452
70847
  const gridApi = ref(null);
69453
70848
  const columnDefs = ref([{}]);
70849
+ const showFetchButton = ref(false);
70850
+ const currentNodeId = ref(null);
70851
+ const showOutdatedDataBanner = ref(false);
70852
+ const props2 = __props;
70853
+ const { triggerNodeFetch, isPollingActive } = useFlowExecution(
70854
+ props2.flowId || nodeStore.flow_id,
70855
+ { interval: 2e3, enabled: true },
70856
+ {
70857
+ persistPolling: true,
70858
+ // Keep polling even when component unmounts
70859
+ pollingKey: `table_flow_${props2.flowId || nodeStore.flow_id}`
70860
+ }
70861
+ );
70862
+ const gridHeightComputed = computed$1(() => {
70863
+ if (showFetchButton.value) {
70864
+ return "80px";
70865
+ }
70866
+ return gridHeight.value || "100%";
70867
+ });
70868
+ const overlayNoRowsTemplate = computed$1(() => {
70869
+ if (showFetchButton.value) {
70870
+ return "<span></span>";
70871
+ }
70872
+ return void 0;
70873
+ });
69454
70874
  const defaultColDef = {
69455
70875
  editable: true,
69456
70876
  filter: true,
@@ -69459,8 +70879,17 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
69459
70879
  };
69460
70880
  const onGridReady = (params) => {
69461
70881
  gridApi.value = params.api;
70882
+ if (showFetchButton.value) {
70883
+ gridApi.value.hideOverlay();
70884
+ }
69462
70885
  };
69463
- const props2 = __props;
70886
+ function dismissOutdatedBanner() {
70887
+ showOutdatedDataBanner.value = false;
70888
+ }
70889
+ async function handleRefresh() {
70890
+ showOutdatedDataBanner.value = false;
70891
+ await handleFetchData();
70892
+ }
69464
70893
  const calculateGridHeight = () => {
69465
70894
  const otherElementsHeight = 300;
69466
70895
  const availableHeight = window.innerHeight - otherElementsHeight;
@@ -69470,39 +70899,81 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
69470
70899
  async function downloadData(nodeId) {
69471
70900
  try {
69472
70901
  isLoading.value = true;
70902
+ showFetchButton.value = false;
70903
+ showOutdatedDataBanner.value = false;
70904
+ currentNodeId.value = nodeId;
69473
70905
  let resp = await nodeStore.getTableExample(nodeStore.flow_id, nodeId);
69474
70906
  if (resp) {
69475
70907
  dataPreview.value = resp;
70908
+ showOutdatedDataBanner.value = !resp.has_run_with_current_setup && resp.has_example_data;
69476
70909
  const _cd = [];
69477
70910
  const _columns = dataPreview.value.table_schema;
69478
70911
  if (props2.showFileStats) {
69479
70912
  _columns == null ? void 0 : _columns.forEach((item) => {
69480
- _cd.push({ field: item.name, resizable: true });
70913
+ _cd.push({
70914
+ field: item.name,
70915
+ headerName: item.name,
70916
+ resizable: true
70917
+ });
69481
70918
  schema_dict[item.name] = item;
69482
70919
  });
69483
70920
  } else {
69484
70921
  _columns == null ? void 0 : _columns.forEach((item) => {
69485
- _cd.push({ field: item.name, resizable: true });
70922
+ _cd.push({
70923
+ field: item.name,
70924
+ headerName: item.name,
70925
+ resizable: true
70926
+ });
69486
70927
  });
69487
70928
  }
69488
70929
  columnDefs.value = _cd;
69489
- if (dataPreview.value) {
69490
- rowData.value = dataPreview.value.data;
69491
- dataLength.value = dataPreview.value.number_of_records;
69492
- columnLength.value = dataPreview.value.number_of_columns;
70930
+ if (resp.has_example_data === false) {
70931
+ showFetchButton.value = true;
70932
+ rowData.value = [];
70933
+ showTable.value = true;
70934
+ dataAvailable.value = false;
70935
+ } else {
70936
+ if (dataPreview.value) {
70937
+ rowData.value = dataPreview.value.data;
70938
+ dataLength.value = dataPreview.value.number_of_records;
70939
+ columnLength.value = dataPreview.value.number_of_columns;
70940
+ }
70941
+ showTable.value = true;
70942
+ dataAvailable.value = true;
70943
+ showFetchButton.value = false;
69493
70944
  }
69494
- showTable.value = true;
69495
- dataAvailable.value = true;
69496
70945
  }
69497
70946
  } finally {
69498
70947
  isLoading.value = false;
69499
70948
  }
69500
70949
  }
70950
+ async function handleFetchData() {
70951
+ if (currentNodeId.value !== null) {
70952
+ try {
70953
+ if (isPollingActive(`node_${currentNodeId.value}`)) {
70954
+ console.log("Fetch already in progress for this node");
70955
+ return;
70956
+ }
70957
+ await triggerNodeFetch(currentNodeId.value);
70958
+ const checkInterval = setInterval(async () => {
70959
+ if (!isPollingActive(`node_${currentNodeId.value}`)) {
70960
+ clearInterval(checkInterval);
70961
+ await downloadData(currentNodeId.value);
70962
+ }
70963
+ }, 1e3);
70964
+ setTimeout(() => clearInterval(checkInterval), 6e4);
70965
+ } catch (error) {
70966
+ console.error("Error fetching data:", error);
70967
+ }
70968
+ }
70969
+ }
69501
70970
  function removeData() {
69502
70971
  rowData.value = [];
69503
70972
  showTable.value = false;
69504
70973
  dataAvailable.value = false;
69505
70974
  columnDefs.value = [{}];
70975
+ showFetchButton.value = false;
70976
+ currentNodeId.value = null;
69506
70977
  }
69507
70978
  ref(null);
69508
70979
  onMounted(() => {
@@ -69518,13 +70989,41 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
69518
70989
  isLoading.value ? (openBlock(), createElementBlock("div", _hoisted_1$7, _cache[0] || (_cache[0] = [
69519
70990
  createBaseVNode("div", { class: "spinner" }, null, -1)
69520
70991
  ]))) : createCommentVNode("", true),
69521
- withDirectives(createVNode(unref(AgGridVue), {
69522
- "default-col-def": defaultColDef,
69523
- "column-defs": columnDefs.value,
69524
- class: "ag-theme-balham",
69525
- "row-data": rowData.value,
69526
- onGridReady
69527
- }, null, 8, ["column-defs", "row-data"]), [
70992
+ withDirectives(createBaseVNode("div", _hoisted_2$5, [
70993
+ showOutdatedDataBanner.value ? (openBlock(), createElementBlock("div", _hoisted_3$5, [
70994
+ createBaseVNode("p", null, [
70995
+ _cache[1] || (_cache[1] = createTextVNode(" Displayed data might be outdated. ")),
70996
+ createBaseVNode("button", {
70997
+ class: "refresh-link-button",
70998
+ onClick: handleRefresh
70999
+ }, "Refresh now")
71000
+ ]),
71001
+ createBaseVNode("button", {
71002
+ class: "dismiss-button",
71003
+ "aria-label": "Dismiss notification",
71004
+ onClick: dismissOutdatedBanner
71005
+ }, " × ")
71006
+ ])) : createCommentVNode("", true),
71007
+ createVNode(unref(AgGridVue), {
71008
+ "default-col-def": defaultColDef,
71009
+ "column-defs": columnDefs.value,
71010
+ class: "ag-theme-balham",
71011
+ "row-data": rowData.value,
71012
+ style: normalizeStyle({ width: "100%", height: gridHeightComputed.value }),
71013
+ "overlay-no-rows-template": overlayNoRowsTemplate.value,
71014
+ onGridReady
71015
+ }, null, 8, ["column-defs", "row-data", "style", "overlay-no-rows-template"]),
71016
+ showFetchButton.value ? (openBlock(), createElementBlock("div", _hoisted_4$5, [
71017
+ _cache[2] || (_cache[2] = createBaseVNode("p", null, "Step has not stored any data yet. Click here to trigger a run for this node", -1)),
71018
+ createBaseVNode("button", {
71019
+ class: "fetch-data-button",
71020
+ disabled: unref(nodeStore).isRunning,
71021
+ onClick: handleFetchData
71022
+ }, [
71023
+ !unref(nodeStore).isRunning ? (openBlock(), createElementBlock("span", _hoisted_6$3, "Fetch Data")) : (openBlock(), createElementBlock("span", _hoisted_7$2, "Fetching..."))
71024
+ ], 8, _hoisted_5$4)
71025
+ ])) : createCommentVNode("", true)
71026
+ ], 512), [
69528
71027
  [vShow, !isLoading.value]
69529
71028
  ])
69530
71029
  ], 64);
@@ -71059,7 +72558,7 @@ const _hoisted_4$4 = { class: "node-title" };
71059
72558
  const _hoisted_5$3 = { class: "node-description" };
71060
72559
  const _hoisted_6$2 = { key: 1 };
71061
72560
  const _hoisted_7$1 = { class: "node-details" };
71062
- const _hoisted_8 = {
72561
+ const _hoisted_8$1 = {
71063
72562
  key: 0,
71064
72563
  class: "failure"
71065
72564
  };
@@ -71186,7 +72685,7 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
71186
72685
  })
71187
72686
  }, toDisplayString(node.success === null ? "Running" : node.success ? "Success" : "Failure"), 3)
71188
72687
  ]),
71189
- node.success === false ? (openBlock(), createElementBlock("p", _hoisted_8, "Error: " + toDisplayString(node.error), 1)) : createCommentVNode("", true)
72688
+ node.success === false ? (openBlock(), createElementBlock("p", _hoisted_8$1, "Error: " + toDisplayString(node.error), 1)) : createCommentVNode("", true)
71190
72689
  ])
71191
72690
  ]),
71192
72691
  _: 2
@@ -71256,7 +72755,6 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
71256
72755
  connectionRetries.value = 0;
71257
72756
  errorMessage.value = null;
71258
72757
  connectionStatus.value = "disconnected";
71259
- console.log("Starting log streaming");
71260
72758
  try {
71261
72759
  const token = await authService.getToken();
71262
72760
  if (!token) {
@@ -71288,7 +72786,6 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
71288
72786
  if (!hasReceivedMessage && nodeStore.isRunning) {
71289
72787
  if (connectionRetries.value < maxRetries) {
71290
72788
  connectionRetries.value++;
71291
- console.log(`Retrying log connection (${connectionRetries.value}/${maxRetries})...`);
71292
72789
  errorMessage.value = `Connection failed. Retrying (${connectionRetries.value}/${maxRetries})...`;
71293
72790
  connectionStatus.value = "error";
71294
72791
  stopStreamingLogs();
@@ -71432,8 +72929,8 @@ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
71432
72929
  };
71433
72930
  }
71434
72931
  });
71435
- const LogViewer_vue_vue_type_style_index_0_scoped_51d5bb55_lang = "";
71436
- const LogViewer = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__scopeId", "data-v-51d5bb55"]]);
72932
+ const LogViewer_vue_vue_type_style_index_0_scoped_9b3bdb24_lang = "";
72933
+ const LogViewer = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__scopeId", "data-v-9b3bdb24"]]);
71437
72934
  const _hoisted_1$4 = { class: "context-menu-header" };
71438
72935
  const _hoisted_2$2 = { class: "context-menu-items" };
71439
72936
  const _hoisted_3$2 = ["onClick"];
@@ -71535,11 +73032,32 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
71535
73032
  });
71536
73033
  const ContextMenu_vue_vue_type_style_index_0_scoped_7db4e6fc_lang = "";
71537
73034
  const ContextMenu = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-7db4e6fc"]]);
73035
+ const handleApiError = (error) => {
73036
+ var _a, _b, _c;
73037
+ throw {
73038
+ message: ((_b = (_a = error.response) == null ? void 0 : _a.data) == null ? void 0 : _b.detail) || "An unknown error occurred",
73039
+ status: ((_c = error.response) == null ? void 0 : _c.status) || 500
73040
+ };
73041
+ };
73042
+ const applyStandardLayout = async (flowId) => {
73043
+ const url = "/flow/apply_standard_layout/";
73044
+ try {
73045
+ const response = await axios.post(url, null, {
73046
+ params: {
73047
+ flow_id: flowId
73048
+ }
73049
+ });
73050
+ return response.data;
73051
+ } catch (error) {
73052
+ return handleApiError(error);
73053
+ }
73054
+ };
71538
73055
  const _hoisted_1$3 = { class: "container" };
71539
73056
  const _sfc_main$4 = /* @__PURE__ */ defineComponent({
71540
73057
  __name: "CanvasFlow",
71541
73058
  emits: ["save", "run"],
71542
73059
  setup(__props, { expose: __expose, emit: __emit }) {
73060
+ const itemStore = useItemStore();
71543
73061
  const availableHeight = ref(0);
71544
73062
  const nodeStore = useNodeStore();
71545
73063
  const rawCustomNode = markRaw$1(CustomNode);
@@ -71563,14 +73081,23 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
71563
73081
  const contextMenuTarget = ref({ type: "pane", id: "" });
71564
73082
  const emit = __emit;
71565
73083
  const handleCanvasClick = (event) => {
71566
- nodeStore.closeDrawer();
71567
73084
  showTablePreview.value = false;
73085
+ nodeStore.node_id = -1;
73086
+ nodeStore.activeDrawerComponent = null;
71568
73087
  nodeStore.hideLogViewer();
71569
73088
  clickedPosition.value = {
71570
73089
  x: event.x,
71571
73090
  y: event.y
71572
73091
  };
71573
73092
  };
73093
+ const handleNodeSettingsClose = (event) => {
73094
+ nodeStore.node_id = -1;
73095
+ nodeStore.activeDrawerComponent = null;
73096
+ clickedPosition.value = {
73097
+ x: event.x,
73098
+ y: event.y
73099
+ };
73100
+ };
71574
73101
  const toggleShowTablePreview = () => {
71575
73102
  showTablePreview.value = !showTablePreview.value;
71576
73103
  };
@@ -71589,7 +73116,6 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
71589
73116
  setNodeTableView(nodeId);
71590
73117
  });
71591
73118
  fitView({ nodes: [nodeId.toString()] });
71592
- nodeStore.node_id = nodeId;
71593
73119
  };
71594
73120
  async function onConnect(params) {
71595
73121
  if (params.target && params.source) {
@@ -71613,6 +73139,9 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
71613
73139
  const nodeClick = (mouseEvent) => {
71614
73140
  showTablePreview.value = true;
71615
73141
  nextTick().then(() => {
73142
+ nodeStore.node_id = parseInt(mouseEvent.node.id);
73143
+ itemStore.bringToFront("tablePreview");
73144
+ itemStore.bringToFront("nodeSettings");
71616
73145
  if (mouseEvent.node.id && !NodeIsSelected(mouseEvent.node.id) || dataPreview.value && dataPreview.value.dataLength == 0 && dataPreview.value.columnLength == 0) {
71617
73146
  setNodeTableView(mouseEvent.node.id);
71618
73147
  }
@@ -71620,7 +73149,6 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
71620
73149
  });
71621
73150
  };
71622
73151
  const setNodeTableView = (nodeId) => {
71623
- console.log(dataPreview.value);
71624
73152
  if (dataPreview.value) {
71625
73153
  dataPreview.value.downloadData(nodeId);
71626
73154
  }
@@ -71651,13 +73179,9 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
71651
73179
  console.log("Edge changes length is 2 so coming from a node change event");
71652
73180
  return;
71653
73181
  }
71654
- console.log("Edge changes", edgeChanges);
71655
73182
  for (const edgeChange of edgeChanges) {
71656
- if (edgeChange.type === "add") {
71657
- console.log("This edge change does not work");
71658
- } else if (edgeChange.type === "remove") {
73183
+ if (edgeChange.type === "remove") {
71659
73184
  const nodeConnection = convertEdgeChangeToNodeConnection(edgeChange);
71660
- console.log("Removing connection", nodeConnection);
71661
73185
  deleteConnection(nodeStore.flow_id, nodeConnection);
71662
73186
  }
71663
73187
  }
@@ -71696,6 +73220,14 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
71696
73220
  copyValue(position.x, position.y);
71697
73221
  }
71698
73222
  };
73223
+ const handleResetLayoutGraph = async () => {
73224
+ await applyStandardLayout(nodeStore.flow_id);
73225
+ loadFlow();
73226
+ };
73227
+ const hideLogViewer = () => {
73228
+ nodeStore.hideLogViewerForThisRun = true;
73229
+ nodeStore.hideLogViewer();
73230
+ };
71699
73231
  const handleKeyDown = (event) => {
71700
73232
  let eventKeyClicked = event.ctrlKey || event.metaKey;
71701
73233
  if (eventKeyClicked && event.key === "v" && event.target) {
@@ -71778,7 +73310,7 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
71778
73310
  onClick: closeContextMenu
71779
73311
  }, {
71780
73312
  default: withCtx(() => [
71781
- createVNode(unref(_sfc_main$d))
73313
+ createVNode(unref(_sfc_main$i))
71782
73314
  ]),
71783
73315
  _: 1
71784
73316
  }, 8, ["nodes", "edges", "connection-mode"]),
@@ -71798,7 +73330,8 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
71798
73330
  "initial-width": 200,
71799
73331
  "initial-position": "left",
71800
73332
  title: "Data actions",
71801
- "allow-free-move": true
73333
+ "allow-free-move": true,
73334
+ "prevent-overlap": false
71802
73335
  }, {
71803
73336
  default: withCtx(() => [
71804
73337
  createVNode(NodeList, { onDragstart: unref(onDragStart) }, null, 8, ["onDragstart"])
@@ -71812,13 +73345,17 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
71812
73345
  title: "Log overview",
71813
73346
  "allow-full-screen": true,
71814
73347
  "initial-position": "bottom",
71815
- "on-minize": unref(nodeStore).toggleLogViewer
73348
+ "initial-left": 200,
73349
+ "on-minize": hideLogViewer,
73350
+ group: "bottomPanels",
73351
+ "sync-dimensions": true,
73352
+ "prevent-overlap": false
71816
73353
  }, {
71817
73354
  default: withCtx(() => [
71818
- createVNode(LogViewer, { "flow-id": 1 })
73355
+ createVNode(LogViewer)
71819
73356
  ]),
71820
73357
  _: 1
71821
- }, 8, ["on-minize"])) : createCommentVNode("", true),
73358
+ })) : createCommentVNode("", true),
71822
73359
  unref(nodeStore).showFlowResult ? (openBlock(), createBlock(DraggableItem, {
71823
73360
  key: 1,
71824
73361
  id: "flowresults",
@@ -71826,7 +73363,8 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
71826
73363
  title: "flow results",
71827
73364
  "initial-position": "right",
71828
73365
  "initial-width": 400,
71829
- "initial-top": -50
73366
+ group: "rightPanels",
73367
+ "prevent-overlap": false
71830
73368
  }, {
71831
73369
  default: withCtx(() => [
71832
73370
  createVNode(FlowResults, { "on-click": selectNodeExternally })
@@ -71841,7 +73379,11 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
71841
73379
  title: "Table Preview",
71842
73380
  "initial-position": "bottom",
71843
73381
  "on-minize": toggleShowTablePreview,
71844
- "initial-height": tablePreviewHeight.value
73382
+ "initial-height": tablePreviewHeight.value,
73383
+ "initial-left": 200,
73384
+ group: "bottomPanels",
73385
+ "sync-dimensions": true,
73386
+ "prevent-overlap": false
71845
73387
  }, {
71846
73388
  default: withCtx(() => [
71847
73389
  createVNode(_sfc_main$8, {
@@ -71862,22 +73404,18 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
71862
73404
  id: "nodeSettings",
71863
73405
  "show-right": true,
71864
73406
  "initial-position": "right",
71865
- "initial-top": 0,
71866
73407
  "initial-width": 800,
71867
73408
  "initial-height": nodeSettingsHeight.value,
71868
73409
  title: "Node Settings",
71869
- "on-minize": unref(nodeStore).closeDrawer,
71870
- "allow-full-screen": true
73410
+ "on-minize": handleNodeSettingsClose,
73411
+ "allow-full-screen": true,
73412
+ "prevent-overlap": false
71871
73413
  }, {
71872
- default: withCtx(() => _cache[2] || (_cache[2] = [
71873
- createBaseVNode("div", {
71874
- id: "nodesettings",
71875
- class: "content"
71876
- }, null, -1)
71877
- ])),
71878
- _: 1,
71879
- __: [2]
71880
- }, 8, ["initial-height", "on-minize"])) : createCommentVNode("", true),
73414
+ default: withCtx(() => [
73415
+ createVNode(_sfc_main$b)
73416
+ ]),
73417
+ _: 1
73418
+ }, 8, ["initial-height"])) : createCommentVNode("", true),
71881
73419
  unref(nodeStore).showCodeGenerator ? (openBlock(), createBlock(DraggableItem, {
71882
73420
  key: 4,
71883
73421
  id: "generatedCode",
@@ -71886,13 +73424,15 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
71886
73424
  "initial-position": "right",
71887
73425
  "allow-free-move": true,
71888
73426
  "allow-full-screen": true,
71889
- "on-minize": () => unref(nodeStore).setCodeGeneratorVisibility(false)
73427
+ "on-minize": () => unref(nodeStore).setCodeGeneratorVisibility(false),
73428
+ "prevent-overlap": false
71890
73429
  }, {
71891
73430
  default: withCtx(() => [
71892
73431
  createVNode(CodeGenerator)
71893
73432
  ]),
71894
73433
  _: 1
71895
- }, 8, ["on-minize"])) : createCommentVNode("", true)
73434
+ }, 8, ["on-minize"])) : createCommentVNode("", true),
73435
+ createVNode(layoutControls, { onResetLayoutGraph: handleResetLayoutGraph })
71896
73436
  ]);
71897
73437
  };
71898
73438
  }
@@ -71952,6 +73492,7 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
71952
73492
  }
71953
73493
  };
71954
73494
  const handleSaveFlow = async (flowPath) => {
73495
+ console.log("Saving flow to path:", flowPath);
71955
73496
  try {
71956
73497
  await saveFlow(props2.flowId, flowPath);
71957
73498
  isVisible2.value = false;
@@ -71984,12 +73525,12 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
71984
73525
  createVNode(FileBrowser, {
71985
73526
  ref_key: "fileBrowserRef",
71986
73527
  ref: fileBrowserRef,
71987
- "allowed-file-types": ["flowfile"],
73528
+ "allowed-file-types": unref(ALLOWED_SAVE_EXTENSIONS),
71988
73529
  mode: "create",
71989
73530
  "initial-file-path": initialPath.value,
71990
73531
  onCreateFile: handleSaveFlow,
71991
73532
  onOverwriteFile: handleSaveFlow
71992
- }, null, 8, ["initial-file-path"])
73533
+ }, null, 8, ["allowed-file-types", "initial-file-path"])
71993
73534
  ]),
71994
73535
  _: 1
71995
73536
  }, 8, ["modelValue"]);
@@ -72261,18 +73802,20 @@ const _hoisted_1 = {
72261
73802
  key: 0,
72262
73803
  class: "header"
72263
73804
  };
72264
- const _hoisted_2 = { class: "left-section" };
72265
- const _hoisted_3 = { class: "middle-section" };
72266
- const _hoisted_4 = { class: "right-section" };
72267
- const _hoisted_5 = {
73805
+ const _hoisted_2 = { class: "header-top" };
73806
+ const _hoisted_3 = { class: "left-section" };
73807
+ const _hoisted_4 = { class: "header-bottom" };
73808
+ const _hoisted_5 = { class: "middle-section" };
73809
+ const _hoisted_6 = { class: "right-section" };
73810
+ const _hoisted_7 = {
72268
73811
  key: 1,
72269
73812
  class: "loading-state"
72270
73813
  };
72271
- const _hoisted_6 = {
73814
+ const _hoisted_8 = {
72272
73815
  key: 2,
72273
73816
  class: "empty-state"
72274
73817
  };
72275
- const _hoisted_7 = { class: "empty-state-content" };
73818
+ const _hoisted_9 = { class: "empty-state-content" };
72276
73819
  const _sfc_main = /* @__PURE__ */ defineComponent({
72277
73820
  __name: "designer",
72278
73821
  setup(__props) {
@@ -72386,6 +73929,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
72386
73929
  headerButtons.value.openOpenDialog();
72387
73930
  }
72388
73931
  };
73932
+ const openQuickCreateDialog = () => {
73933
+ if (headerButtons.value) {
73934
+ console.log("Opening quick create dialog");
73935
+ headerButtons.value.handleQuickCreateAction();
73936
+ }
73937
+ };
72389
73938
  const initialSetup = async () => {
72390
73939
  if (initialLoadComplete.value) {
72391
73940
  console.log("Initial setup already completed");
@@ -72431,34 +73980,38 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
72431
73980
  return openBlock(), createElementBlock(Fragment, null, [
72432
73981
  !isLoading.value ? (openBlock(), createElementBlock("div", _hoisted_1, [
72433
73982
  createBaseVNode("div", _hoisted_2, [
72434
- createVNode(HeaderButtons, {
72435
- ref_key: "headerButtons",
72436
- ref: headerButtons,
72437
- onOpenFlow: openFlow,
72438
- onRefreshFlow: refreshFlow
72439
- }, null, 512)
72440
- ]),
72441
- createBaseVNode("div", _hoisted_3, [
72442
- createVNode(FlowSelector, {
72443
- ref_key: "flowSelector",
72444
- ref: flowSelector,
72445
- onFlowChanged: handleFlowChange,
72446
- onCloseTab: handleCloseFlow
72447
- }, null, 512)
73983
+ createBaseVNode("div", _hoisted_3, [
73984
+ createVNode(HeaderButtons, {
73985
+ ref_key: "headerButtons",
73986
+ ref: headerButtons,
73987
+ onOpenFlow: openFlow,
73988
+ onRefreshFlow: refreshFlow
73989
+ }, null, 512)
73990
+ ])
72448
73991
  ]),
72449
73992
  createBaseVNode("div", _hoisted_4, [
72450
- createVNode(Status)
73993
+ createBaseVNode("div", _hoisted_5, [
73994
+ createVNode(FlowSelector, {
73995
+ ref_key: "flowSelector",
73996
+ ref: flowSelector,
73997
+ onFlowChanged: handleFlowChange,
73998
+ onCloseTab: handleCloseFlow
73999
+ }, null, 512)
74000
+ ]),
74001
+ createBaseVNode("div", _hoisted_6, [
74002
+ createVNode(Status)
74003
+ ])
72451
74004
  ])
72452
74005
  ])) : createCommentVNode("", true),
72453
- isLoading.value ? (openBlock(), createElementBlock("div", _hoisted_5, _cache[2] || (_cache[2] = [
74006
+ isLoading.value ? (openBlock(), createElementBlock("div", _hoisted_7, _cache[2] || (_cache[2] = [
72454
74007
  createBaseVNode("div", { class: "loading-state-content" }, [
72455
74008
  createBaseVNode("p", null, "Loading flows...")
72456
74009
  ], -1)
72457
- ]))) : !isLoading.value && flowsActive.value.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_6, [
72458
- createBaseVNode("div", _hoisted_7, [
72459
- _cache[5] || (_cache[5] = createBaseVNode("span", { class: "material-icons empty-icon" }, "account_tree", -1)),
72460
- _cache[6] || (_cache[6] = createBaseVNode("h2", null, "No Active Flows", -1)),
72461
- _cache[7] || (_cache[7] = createBaseVNode("p", null, "There are currently no active flows in the system.", -1)),
74010
+ ]))) : !isLoading.value && flowsActive.value.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_8, [
74011
+ createBaseVNode("div", _hoisted_9, [
74012
+ _cache[6] || (_cache[6] = createBaseVNode("span", { class: "material-icons empty-icon" }, "account_tree", -1)),
74013
+ _cache[7] || (_cache[7] = createBaseVNode("h2", null, "No Active Flows", -1)),
74014
+ _cache[8] || (_cache[8] = createBaseVNode("p", null, "There are currently no active flows in the system.", -1)),
72462
74015
  createVNode(_component_el_button, {
72463
74016
  type: "primary",
72464
74017
  class: "action-button",
@@ -72482,6 +74035,18 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
72482
74035
  ])),
72483
74036
  _: 1,
72484
74037
  __: [4]
74038
+ }),
74039
+ createVNode(_component_el_button, {
74040
+ type: "primary",
74041
+ class: "action-button",
74042
+ onClick: openQuickCreateDialog
74043
+ }, {
74044
+ default: withCtx(() => _cache[5] || (_cache[5] = [
74045
+ createBaseVNode("span", { class: "material-icons" }, "folder_open", -1),
74046
+ createTextVNode(" Quick create ")
74047
+ ])),
74048
+ _: 1,
74049
+ __: [5]
72485
74050
  })
72486
74051
  ])
72487
74052
  ])) : (openBlock(), createBlock(_sfc_main$4, {
@@ -72502,8 +74067,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
72502
74067
  };
72503
74068
  }
72504
74069
  });
72505
- const designer_vue_vue_type_style_index_0_scoped_cc07b037_lang = "";
72506
- const designer = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-cc07b037"]]);
74070
+ const designer_vue_vue_type_style_index_0_scoped_24dbaac4_lang = "";
74071
+ const designer = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-24dbaac4"]]);
72507
74072
  const designer$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
72508
74073
  __proto__: null,
72509
74074
  default: designer
@@ -72511,7 +74076,6 @@ const designer$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePr
72511
74076
  export {
72512
74077
  FileBrowser as F,
72513
74078
  designer$1 as d,
72514
- getImageUrl as g,
72515
74079
  info_filled_default as i,
72516
74080
  oneDark as o,
72517
74081
  python as p,