Flowfile 0.5.3__py3-none-any.whl → 0.5.6__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 (153) hide show
  1. flowfile/__init__.py +16 -0
  2. flowfile/__main__.py +94 -1
  3. flowfile/web/static/assets/{AdminView-49392a9a.js → AdminView-c2c7942b.js} +1 -1
  4. flowfile/web/static/assets/{CloudConnectionView-f13f202b.js → CloudConnectionView-7a3042c6.js} +4 -4
  5. flowfile/web/static/assets/{CloudConnectionView-36bcd6df.css → CloudConnectionView-cf85f943.css} +17 -17
  6. flowfile/web/static/assets/{CloudStorageReader-0023d4a5.js → CloudStorageReader-709c4037.js} +8 -8
  7. flowfile/web/static/assets/{CloudStorageWriter-8e781e11.js → CloudStorageWriter-604c51a8.js} +8 -8
  8. flowfile/web/static/assets/ColumnActionInput-c44b7aee.css +159 -0
  9. flowfile/web/static/assets/ColumnActionInput-d63d6746.js +330 -0
  10. flowfile/web/static/assets/{ColumnSelector-8ad68ea9.js → ColumnSelector-0c8cd1cd.js} +1 -1
  11. flowfile/web/static/assets/ContextMenu-366bf1b4.js +9 -0
  12. flowfile/web/static/assets/ContextMenu-85cf5b44.js +9 -0
  13. flowfile/web/static/assets/ContextMenu-9d28ae6d.js +9 -0
  14. flowfile/web/static/assets/ContextMenu.vue_vue_type_script_setup_true_lang-774c517c.js +59 -0
  15. flowfile/web/static/assets/{CrossJoin-03df6938.js → CrossJoin-38e5b99a.js} +9 -9
  16. flowfile/web/static/assets/{CustomNode-8479239b.js → CustomNode-76e8f3f5.js} +27 -20
  17. flowfile/web/static/assets/CustomNode-edb9b939.css +42 -0
  18. flowfile/web/static/assets/{DatabaseConnectionSettings-869e3efd.js → DatabaseConnectionSettings-38155669.js} +4 -4
  19. flowfile/web/static/assets/{DatabaseConnectionSettings-e91df89a.css → DatabaseConnectionSettings-c20a1e16.css} +22 -20
  20. flowfile/web/static/assets/{DatabaseReader-c58b9552.js → DatabaseReader-2e549c8f.js} +13 -13
  21. flowfile/web/static/assets/{DatabaseReader-36898a00.css → DatabaseReader-5bf8c75b.css} +39 -44
  22. flowfile/web/static/assets/{DatabaseView-d26a9140.js → DatabaseView-dc877c29.js} +2 -2
  23. flowfile/web/static/assets/{DatabaseWriter-217a99f1.css → DatabaseWriter-bdcf2c8b.css} +27 -25
  24. flowfile/web/static/assets/{DatabaseWriter-4d05ddc7.js → DatabaseWriter-ffb91864.js} +12 -12
  25. flowfile/web/static/assets/{DesignerView-a6d0ee84.css → DesignerView-71d4e9a1.css} +429 -376
  26. flowfile/web/static/assets/{DesignerView-e6f5c0e8.js → DesignerView-a4466dab.js} +338 -183
  27. flowfile/web/static/assets/{DocumentationView-2e78ef1b.js → DocumentationView-979afc84.js} +3 -3
  28. flowfile/web/static/assets/{DocumentationView-fd46c656.css → DocumentationView-9ea6e871.css} +9 -9
  29. flowfile/web/static/assets/{ExploreData-7b54caca.js → ExploreData-e4b92aaf.js} +7 -7
  30. flowfile/web/static/assets/{ExternalSource-47ab05a3.css → ExternalSource-7ac7373f.css} +17 -17
  31. flowfile/web/static/assets/{ExternalSource-3fa399b2.js → ExternalSource-d08e7227.js} +9 -9
  32. flowfile/web/static/assets/{Filter-8cbbdbf3.js → Filter-7add806d.js} +9 -9
  33. flowfile/web/static/assets/{Formula-aac42b1e.js → Formula-36ab24d2.js} +9 -9
  34. flowfile/web/static/assets/{FuzzyMatch-cd9bbfca.js → FuzzyMatch-cc01bb04.js} +10 -10
  35. flowfile/web/static/assets/{GraphSolver-c24dec17.css → GraphSolver-4b4d7db9.css} +4 -4
  36. flowfile/web/static/assets/{GraphSolver-c7e6780e.js → GraphSolver-4fb98f3b.js} +11 -11
  37. flowfile/web/static/assets/GroupBy-5792782d.css +9 -0
  38. flowfile/web/static/assets/{GroupBy-93c5d22b.js → GroupBy-b3c8f429.js} +9 -9
  39. flowfile/web/static/assets/{Join-a19b2de2.js → Join-096b7b26.js} +10 -10
  40. flowfile/web/static/assets/{LoginView-0df4ed0a.js → LoginView-c33a246a.js} +1 -1
  41. flowfile/web/static/assets/{ManualInput-3702e677.css → ManualInput-39111f19.css} +48 -48
  42. flowfile/web/static/assets/{ManualInput-8d3374b2.js → ManualInput-7307e9b1.js} +55 -13
  43. flowfile/web/static/assets/{MultiSelect-ad1b6243.js → MultiSelect-14822c48.js} +2 -2
  44. flowfile/web/static/assets/{MultiSelect.vue_vue_type_script_setup_true_lang-e278950d.js → MultiSelect.vue_vue_type_script_setup_true_lang-90c4d340.js} +1 -1
  45. flowfile/web/static/assets/{NodeDesigner-40b647c9.js → NodeDesigner-5036c392.js} +171 -69
  46. flowfile/web/static/assets/{NodeDesigner-5f53be3f.css → NodeDesigner-94cd4dd3.css} +190 -190
  47. flowfile/web/static/assets/{NumericInput-7100234c.js → NumericInput-15cf3b72.js} +2 -2
  48. flowfile/web/static/assets/{NumericInput.vue_vue_type_script_setup_true_lang-5130219f.js → NumericInput.vue_vue_type_script_setup_true_lang-91e679d7.js} +1 -1
  49. flowfile/web/static/assets/{Output-f5efd2aa.js → Output-1f8ed42c.js} +13 -12
  50. flowfile/web/static/assets/{Output-35e97000.css → Output-692dd25d.css} +10 -10
  51. flowfile/web/static/assets/{Pivot-d981d23c.js → Pivot-0e153f4e.js} +10 -10
  52. flowfile/web/static/assets/{PivotValidation-63de1f73.js → PivotValidation-5a4f7c79.js} +1 -1
  53. flowfile/web/static/assets/{PivotValidation-39386e95.js → PivotValidation-81ec2a33.js} +1 -1
  54. flowfile/web/static/assets/{PolarsCode-f9d69217.js → PolarsCode-a39f15ac.js} +7 -7
  55. flowfile/web/static/assets/PopOver-ddcfe4f6.js +138 -0
  56. flowfile/web/static/assets/{Read-aec2e377.js → Read-39b63932.js} +15 -14
  57. flowfile/web/static/assets/{Read-36e7bd51.css → Read-90f366bc.css} +13 -13
  58. flowfile/web/static/assets/{RecordCount-78ed6845.js → RecordCount-e9048ccd.js} +6 -6
  59. flowfile/web/static/assets/{RecordId-2156e890.js → RecordId-ad02521d.js} +9 -9
  60. flowfile/web/static/assets/{SQLQueryComponent-48c72f5b.js → SQLQueryComponent-2eeecf0b.js} +3 -3
  61. flowfile/web/static/assets/SQLQueryComponent-edb90b98.css +29 -0
  62. flowfile/web/static/assets/{Sample-1352ca74.js → Sample-9a68c23d.js} +6 -6
  63. flowfile/web/static/assets/{SecretSelector-22b5ff89.js → SecretSelector-2429f35a.js} +2 -2
  64. flowfile/web/static/assets/{SecretsView-17df66ee.js → SecretsView-c6afc915.js} +2 -2
  65. flowfile/web/static/assets/{Select-0aee4c54.js → Select-fcd002b6.js} +9 -9
  66. flowfile/web/static/assets/{SettingsSection-cd341bb6.js → SettingsSection-5ce15962.js} +1 -1
  67. flowfile/web/static/assets/{SettingsSection-0784e157.js → SettingsSection-c6b1362c.js} +1 -1
  68. flowfile/web/static/assets/{SettingsSection-f2002a6d.js → SettingsSection-cebb91d5.js} +1 -1
  69. flowfile/web/static/assets/SetupView-2d12e01f.js +160 -0
  70. flowfile/web/static/assets/SetupView-ec26f76a.css +230 -0
  71. flowfile/web/static/assets/{SingleSelect-460cc0ea.js → SingleSelect-b67de4eb.js} +2 -2
  72. flowfile/web/static/assets/{SingleSelect.vue_vue_type_script_setup_true_lang-30741bb2.js → SingleSelect.vue_vue_type_script_setup_true_lang-eedb70eb.js} +1 -1
  73. flowfile/web/static/assets/{SliderInput-5d926864.js → SliderInput-fd8134ac.js} +1 -1
  74. flowfile/web/static/assets/Sort-4abb7fae.css +9 -0
  75. flowfile/web/static/assets/{Sort-3cdc971b.js → Sort-c005a573.js} +9 -9
  76. flowfile/web/static/assets/{TextInput-a2d0bfbd.js → TextInput-1bb31dab.js} +2 -2
  77. flowfile/web/static/assets/{TextInput.vue_vue_type_script_setup_true_lang-abad1ca2.js → TextInput.vue_vue_type_script_setup_true_lang-a51fe730.js} +1 -1
  78. flowfile/web/static/assets/{TextToRows-918945f7.js → TextToRows-4f363753.js} +9 -9
  79. flowfile/web/static/assets/{ToggleSwitch-f0ef5196.js → ToggleSwitch-ca0f2e5e.js} +2 -2
  80. flowfile/web/static/assets/{ToggleSwitch.vue_vue_type_script_setup_true_lang-5605c793.js → ToggleSwitch.vue_vue_type_script_setup_true_lang-49aa41d8.js} +1 -1
  81. flowfile/web/static/assets/{UnavailableFields-54d2f518.css → UnavailableFields-394a1f78.css} +13 -13
  82. flowfile/web/static/assets/{UnavailableFields-bdad6144.js → UnavailableFields-f6147968.js} +4 -4
  83. flowfile/web/static/assets/{Union-e8ab8c86.js → Union-c65f17b7.js} +6 -6
  84. flowfile/web/static/assets/Unique-2b705521.css +3 -0
  85. flowfile/web/static/assets/{Unique-8cd4f976.js → Unique-a1d96fb2.js} +12 -12
  86. flowfile/web/static/assets/{Unpivot-710a2948.css → Unpivot-b6ad6427.css} +6 -6
  87. flowfile/web/static/assets/{Unpivot-8da14095.js → Unpivot-c2657ff3.js} +11 -11
  88. flowfile/web/static/assets/{UnpivotValidation-6f7d89ff.js → UnpivotValidation-28e29a3b.js} +1 -1
  89. flowfile/web/static/assets/{VueGraphicWalker-3fb312e1.js → VueGraphicWalker-2fc3ddd4.js} +1 -1
  90. flowfile/web/static/assets/{api-24483f0d.js → api-df48ec50.js} +1 -1
  91. flowfile/web/static/assets/{api-8b81fa73.js → api-ee542cf7.js} +1 -1
  92. flowfile/web/static/assets/{dropDown-3d8dc5fa.css → dropDown-1d6acbd9.css} +26 -26
  93. flowfile/web/static/assets/{dropDown-ac0fda9d.js → dropDown-7576a76a.js} +3 -3
  94. flowfile/web/static/assets/{fullEditor-5497a84a.js → fullEditor-7583bef5.js} +3 -3
  95. flowfile/web/static/assets/{fullEditor-a0be62b3.css → fullEditor-fe9f7e18.css} +3 -3
  96. flowfile/web/static/assets/{genericNodeSettings-99014e1d.js → genericNodeSettings-0155288b.js} +2 -3
  97. flowfile/web/static/assets/{index-3ba44389.js → index-057d770d.js} +2 -2
  98. flowfile/web/static/assets/{index-07dda503.js → index-aeec439d.js} +1 -1
  99. flowfile/web/static/assets/{index-fb6493ae.js → index-ca6799de.js} +2293 -196
  100. flowfile/web/static/assets/{index-e6289dd0.css → index-d60c9dd4.css} +560 -10
  101. flowfile/web/static/assets/nodeInput-d478b9ac.js +2 -0
  102. flowfile/web/static/assets/{outputCsv-8f8ba42d.js → outputCsv-c492b15e.js} +3 -3
  103. flowfile/web/static/assets/outputCsv-cc84e09f.css +2499 -0
  104. flowfile/web/static/assets/{outputExcel-393f4fef.js → outputExcel-13bfa10f.js} +1 -1
  105. flowfile/web/static/assets/{outputParquet-07c81f65.js → outputParquet-9be1523a.js} +1 -1
  106. flowfile/web/static/assets/{readCsv-07f6d9ad.js → readCsv-5a49a8c9.js} +1 -1
  107. flowfile/web/static/assets/{readExcel-ed69bc8f.js → readExcel-27c30ad8.js} +3 -3
  108. flowfile/web/static/assets/{readParquet-e3ed4528.js → readParquet-446bde68.js} +1 -1
  109. flowfile/web/static/assets/{secrets.api-002e7d7e.js → secrets.api-34431884.js} +1 -1
  110. flowfile/web/static/assets/{selectDynamic-80b92899.js → selectDynamic-5754a2b1.js} +2 -3
  111. flowfile/web/static/assets/{vue-codemirror.esm-0965f39f.js → vue-codemirror.esm-8f46fb36.js} +1 -1
  112. flowfile/web/static/assets/{vue-content-loader.es-c506ad97.js → vue-content-loader.es-808fe33a.js} +1 -1
  113. flowfile/web/static/index.html +2 -2
  114. {flowfile-0.5.3.dist-info → flowfile-0.5.6.dist-info}/METADATA +2 -2
  115. {flowfile-0.5.3.dist-info → flowfile-0.5.6.dist-info}/RECORD +139 -134
  116. flowfile_core/auth/secrets.py +56 -13
  117. flowfile_core/fileExplorer/funcs.py +26 -4
  118. flowfile_core/flowfile/code_generator/__init__.py +11 -0
  119. flowfile_core/flowfile/code_generator/code_generator.py +347 -2
  120. flowfile_core/flowfile/flow_data_engine/flow_data_engine.py +13 -1
  121. flowfile_core/flowfile/flow_data_engine/subprocess_operations/subprocess_operations.py +12 -0
  122. flowfile_core/flowfile/flow_graph.py +2 -0
  123. flowfile_core/flowfile/flow_node/flow_node.py +52 -28
  124. flowfile_core/flowfile/node_designer/__init__.py +4 -0
  125. flowfile_core/flowfile/node_designer/ui_components.py +144 -1
  126. flowfile_core/main.py +2 -4
  127. flowfile_core/routes/public.py +43 -1
  128. flowfile_core/schemas/cloud_storage_schemas.py +39 -15
  129. flowfile_core/secret_manager/secret_manager.py +107 -6
  130. flowfile_frame/__init__.py +11 -0
  131. flowfile_frame/database/__init__.py +36 -0
  132. flowfile_frame/database/connection_manager.py +205 -0
  133. flowfile_frame/database/frame_helpers.py +249 -0
  134. flowfile_worker/configs.py +31 -15
  135. flowfile_worker/secrets.py +105 -15
  136. flowfile_worker/spawner.py +10 -6
  137. flowfile/web/static/assets/ContextMenu-26d4dd27.css +0 -26
  138. flowfile/web/static/assets/ContextMenu-31ee57f0.js +0 -41
  139. flowfile/web/static/assets/ContextMenu-69a74055.js +0 -41
  140. flowfile/web/static/assets/ContextMenu-8e2051c6.js +0 -41
  141. flowfile/web/static/assets/ContextMenu-8ec1729e.css +0 -26
  142. flowfile/web/static/assets/ContextMenu-9b310c60.css +0 -26
  143. flowfile/web/static/assets/CustomNode-59e99a86.css +0 -32
  144. flowfile/web/static/assets/GroupBy-be7ac0bf.css +0 -51
  145. flowfile/web/static/assets/PopOver-b22f049e.js +0 -939
  146. flowfile/web/static/assets/SQLQueryComponent-1c2f26b4.css +0 -27
  147. flowfile/web/static/assets/Sort-8a871341.css +0 -51
  148. flowfile/web/static/assets/Unique-9fb2f567.css +0 -51
  149. flowfile/web/static/assets/nodeInput-0eb13f1a.js +0 -2
  150. flowfile/web/static/assets/outputCsv-b9a072af.css +0 -2499
  151. {flowfile-0.5.3.dist-info → flowfile-0.5.6.dist-info}/WHEEL +0 -0
  152. {flowfile-0.5.3.dist-info → flowfile-0.5.6.dist-info}/entry_points.txt +0 -0
  153. {flowfile-0.5.3.dist-info → flowfile-0.5.6.dist-info}/licenses/LICENSE +0 -0
@@ -1,6 +1,6 @@
1
- import { d as defineComponent, o as openBlock, c as createElementBlock, b as createBaseVNode, F as Fragment, D as renderList, n as normalizeClass, t as toDisplayString, s as unref, i as _export_sfc, w as withModifiers, f as createCommentVNode, r as ref, q as createTextVNode, e as createStaticVNode, m as createVNode, C as onMounted, j as axios, S as reactive, A as computed, B as watch, g as withDirectives, v as vModelText, U as isRef, x as createBlock } from "./index-fb6493ae.js";
2
- import { T, k as keymap, a as acceptCompletion, i as indentMore, b as indentLess, c as EditorState, d as autocompletion, P as Prec, E as EditorView } from "./vue-codemirror.esm-0965f39f.js";
3
- import { g as getImageUrl, _ as __vite_glob_0_0, a as __vite_glob_0_1, b as __vite_glob_0_2, c as __vite_glob_0_3, d as __vite_glob_0_4, e as __vite_glob_0_5, h as __vite_glob_0_6, i as __vite_glob_0_7, j as __vite_glob_0_8, k as __vite_glob_0_9, l as __vite_glob_0_10, m as __vite_glob_0_11, n as __vite_glob_0_12, q as __vite_glob_0_13, r as __vite_glob_0_14, s as __vite_glob_0_15, t as __vite_glob_0_16, u as __vite_glob_0_17, v as __vite_glob_0_18, w as __vite_glob_0_19, x as __vite_glob_0_20, y as __vite_glob_0_21, z as __vite_glob_0_22, A as __vite_glob_0_23, B as __vite_glob_0_24, C as __vite_glob_0_25, D as __vite_glob_0_26, E as __vite_glob_0_27, F as __vite_glob_0_28, G as __vite_glob_0_29, H as __vite_glob_0_30, I as __vite_glob_0_31, J as __vite_glob_0_32, K as __vite_glob_0_33, L as getDefaultIconUrl, M as getCustomIconUrl, p as python, o as oneDark } from "./index-3ba44389.js";
1
+ import { d as defineComponent, o as openBlock, c as createElementBlock, a as createBaseVNode, K as Fragment, L as renderList, n as normalizeClass, t as toDisplayString, B as unref, g as _export_sfc, w as withModifiers, e as createCommentVNode, r as ref, f as createTextVNode, b as createStaticVNode, z as createVNode, J as onMounted, k as axios, Y as reactive, G as computed, H as watch, i as withDirectives, v as vModelText, $ as isRef, C as createBlock } from "./index-ca6799de.js";
2
+ import { T, k as keymap, a as acceptCompletion, i as indentMore, b as indentLess, c as EditorState, d as autocompletion, P as Prec, E as EditorView } from "./vue-codemirror.esm-8f46fb36.js";
3
+ import { g as getImageUrl, _ as __vite_glob_0_0, a as __vite_glob_0_1, b as __vite_glob_0_2, c as __vite_glob_0_3, d as __vite_glob_0_4, e as __vite_glob_0_5, h as __vite_glob_0_6, i as __vite_glob_0_7, j as __vite_glob_0_8, k as __vite_glob_0_9, l as __vite_glob_0_10, m as __vite_glob_0_11, n as __vite_glob_0_12, q as __vite_glob_0_13, r as __vite_glob_0_14, s as __vite_glob_0_15, t as __vite_glob_0_16, u as __vite_glob_0_17, v as __vite_glob_0_18, w as __vite_glob_0_19, x as __vite_glob_0_20, y as __vite_glob_0_21, z as __vite_glob_0_22, A as __vite_glob_0_23, B as __vite_glob_0_24, C as __vite_glob_0_25, D as __vite_glob_0_26, E as __vite_glob_0_27, F as __vite_glob_0_28, G as __vite_glob_0_29, H as __vite_glob_0_30, I as __vite_glob_0_31, J as __vite_glob_0_32, K as __vite_glob_0_33, L as getDefaultIconUrl, M as getCustomIconUrl, p as python, o as oneDark } from "./index-057d770d.js";
4
4
  const STORAGE_KEY = "nodeDesigner_state";
5
5
  const availableComponents = [
6
6
  { type: "TextInput", label: "Text Input", icon: "fa-solid fa-font" },
@@ -9,6 +9,7 @@ const availableComponents = [
9
9
  { type: "SingleSelect", label: "Single Select", icon: "fa-solid fa-list" },
10
10
  { type: "MultiSelect", label: "Multi Select", icon: "fa-solid fa-list-check" },
11
11
  { type: "ColumnSelector", label: "Column Selector", icon: "fa-solid fa-table-columns" },
12
+ { type: "ColumnActionInput", label: "Column Action", icon: "fa-solid fa-table-list" },
12
13
  { type: "SliderInput", label: "Slider", icon: "fa-solid fa-sliders" },
13
14
  { type: "SecretSelector", label: "Secret Selector", icon: "fa-solid fa-key" }
14
15
  ];
@@ -287,6 +288,26 @@ function useCodeGeneration() {
287
288
  if (comp.name_prefix)
288
289
  sectionsCode += ` name_prefix="${comp.name_prefix}",
289
290
  `;
291
+ } else if (comp.component_type === "ColumnActionInput") {
292
+ if (comp.actions_string) {
293
+ const actions = comp.actions_string.split(",").map((a) => `"${a.trim()}"`).join(", ");
294
+ sectionsCode += ` actions=[${actions}],
295
+ `;
296
+ }
297
+ if (comp.output_name_template) {
298
+ sectionsCode += ` output_name_template="${comp.output_name_template}",
299
+ `;
300
+ }
301
+ if (comp.show_group_by)
302
+ sectionsCode += ` show_group_by=True,
303
+ `;
304
+ if (comp.show_order_by)
305
+ sectionsCode += ` show_order_by=True,
306
+ `;
307
+ if (comp.data_types && comp.data_types !== "ALL") {
308
+ sectionsCode += ` data_types="${comp.data_types}",
309
+ `;
310
+ }
290
311
  }
291
312
  sectionsCode += ` ),
292
313
  `;
@@ -462,13 +483,27 @@ const _hoisted_51 = {
462
483
  key: 7,
463
484
  class: "property-group"
464
485
  };
465
- const _hoisted_52 = { class: "property-row checkbox-row" };
466
- const _hoisted_53 = ["checked"];
486
+ const _hoisted_52 = { class: "property-row" };
487
+ const _hoisted_53 = ["value"];
467
488
  const _hoisted_54 = { class: "property-row" };
468
489
  const _hoisted_55 = ["value"];
469
490
  const _hoisted_56 = { class: "property-row" };
470
491
  const _hoisted_57 = ["value"];
471
- const _hoisted_58 = {
492
+ const _hoisted_58 = { class: "property-row checkbox-row" };
493
+ const _hoisted_59 = ["checked"];
494
+ const _hoisted_60 = { class: "property-row checkbox-row" };
495
+ const _hoisted_61 = ["checked"];
496
+ const _hoisted_62 = {
497
+ key: 8,
498
+ class: "property-group"
499
+ };
500
+ const _hoisted_63 = { class: "property-row checkbox-row" };
501
+ const _hoisted_64 = ["checked"];
502
+ const _hoisted_65 = { class: "property-row" };
503
+ const _hoisted_66 = ["value"];
504
+ const _hoisted_67 = { class: "property-row" };
505
+ const _hoisted_68 = ["value"];
506
+ const _hoisted_69 = {
472
507
  key: 1,
473
508
  class: "no-selection"
474
509
  };
@@ -500,6 +535,8 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
500
535
  return "list[str]";
501
536
  case "ColumnSelector":
502
537
  return multiple ? "list[str]" : "str";
538
+ case "ColumnActionInput":
539
+ return "dict";
503
540
  case "SecretSelector":
504
541
  return "SecretStr";
505
542
  default:
@@ -522,7 +559,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
522
559
  }
523
560
  return (_ctx, _cache) => {
524
561
  return openBlock(), createElementBlock("div", _hoisted_1$8, [
525
- _cache[60] || (_cache[60] = createBaseVNode("div", { class: "panel-header" }, [
562
+ _cache[74] || (_cache[74] = createBaseVNode("div", { class: "panel-header" }, [
526
563
  createBaseVNode("h3", null, "Properties")
527
564
  ], -1)),
528
565
  createBaseVNode("div", _hoisted_2$8, [
@@ -534,9 +571,9 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
534
571
  createBaseVNode("span", null, toDisplayString(_ctx.component.component_type), 1)
535
572
  ]),
536
573
  createBaseVNode("div", _hoisted_5$4, [
537
- _cache[24] || (_cache[24] = createBaseVNode("div", { class: "property-group-title" }, "Basic", -1)),
574
+ _cache[29] || (_cache[29] = createBaseVNode("div", { class: "property-group-title" }, "Basic", -1)),
538
575
  createBaseVNode("div", _hoisted_6$4, [
539
- _cache[22] || (_cache[22] = createBaseVNode("label", { class: "property-label" }, [
576
+ _cache[27] || (_cache[27] = createBaseVNode("label", { class: "property-label" }, [
540
577
  createTextVNode("Field Name "),
541
578
  createBaseVNode("span", { class: "required" }, "*")
542
579
  ], -1)),
@@ -549,7 +586,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
549
586
  }, null, 40, _hoisted_7$4)
550
587
  ]),
551
588
  createBaseVNode("div", _hoisted_8$4, [
552
- _cache[23] || (_cache[23] = createBaseVNode("label", { class: "property-label" }, "Label", -1)),
589
+ _cache[28] || (_cache[28] = createBaseVNode("label", { class: "property-label" }, "Label", -1)),
553
590
  createBaseVNode("input", {
554
591
  value: _ctx.component.label,
555
592
  type: "text",
@@ -560,9 +597,9 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
560
597
  ])
561
598
  ]),
562
599
  _ctx.component.component_type === "TextInput" ? (openBlock(), createElementBlock("div", _hoisted_10$4, [
563
- _cache[27] || (_cache[27] = createBaseVNode("div", { class: "property-group-title" }, "Text Options", -1)),
600
+ _cache[32] || (_cache[32] = createBaseVNode("div", { class: "property-group-title" }, "Text Options", -1)),
564
601
  createBaseVNode("div", _hoisted_11$4, [
565
- _cache[25] || (_cache[25] = createBaseVNode("label", { class: "property-label" }, "Default Value", -1)),
602
+ _cache[30] || (_cache[30] = createBaseVNode("label", { class: "property-label" }, "Default Value", -1)),
566
603
  createBaseVNode("input", {
567
604
  value: _ctx.component.default,
568
605
  type: "text",
@@ -572,7 +609,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
572
609
  }, null, 40, _hoisted_12$3)
573
610
  ]),
574
611
  createBaseVNode("div", _hoisted_13$3, [
575
- _cache[26] || (_cache[26] = createBaseVNode("label", { class: "property-label" }, "Placeholder", -1)),
612
+ _cache[31] || (_cache[31] = createBaseVNode("label", { class: "property-label" }, "Placeholder", -1)),
576
613
  createBaseVNode("input", {
577
614
  value: _ctx.component.placeholder,
578
615
  type: "text",
@@ -583,9 +620,9 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
583
620
  ])
584
621
  ])) : createCommentVNode("", true),
585
622
  _ctx.component.component_type === "NumericInput" ? (openBlock(), createElementBlock("div", _hoisted_15$3, [
586
- _cache[31] || (_cache[31] = createBaseVNode("div", { class: "property-group-title" }, "Number Options", -1)),
623
+ _cache[36] || (_cache[36] = createBaseVNode("div", { class: "property-group-title" }, "Number Options", -1)),
587
624
  createBaseVNode("div", _hoisted_16$3, [
588
- _cache[28] || (_cache[28] = createBaseVNode("label", { class: "property-label" }, "Default Value", -1)),
625
+ _cache[33] || (_cache[33] = createBaseVNode("label", { class: "property-label" }, "Default Value", -1)),
589
626
  createBaseVNode("input", {
590
627
  value: _ctx.component.default,
591
628
  type: "number",
@@ -594,7 +631,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
594
631
  }, null, 40, _hoisted_17$2)
595
632
  ]),
596
633
  createBaseVNode("div", _hoisted_18$2, [
597
- _cache[29] || (_cache[29] = createBaseVNode("label", { class: "property-label" }, "Min Value", -1)),
634
+ _cache[34] || (_cache[34] = createBaseVNode("label", { class: "property-label" }, "Min Value", -1)),
598
635
  createBaseVNode("input", {
599
636
  value: _ctx.component.min_value,
600
637
  type: "number",
@@ -603,7 +640,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
603
640
  }, null, 40, _hoisted_19$1)
604
641
  ]),
605
642
  createBaseVNode("div", _hoisted_20, [
606
- _cache[30] || (_cache[30] = createBaseVNode("label", { class: "property-label" }, "Max Value", -1)),
643
+ _cache[35] || (_cache[35] = createBaseVNode("label", { class: "property-label" }, "Max Value", -1)),
607
644
  createBaseVNode("input", {
608
645
  value: _ctx.component.max_value,
609
646
  type: "number",
@@ -613,9 +650,9 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
613
650
  ])
614
651
  ])) : createCommentVNode("", true),
615
652
  _ctx.component.component_type === "ToggleSwitch" ? (openBlock(), createElementBlock("div", _hoisted_22, [
616
- _cache[34] || (_cache[34] = createBaseVNode("div", { class: "property-group-title" }, "Toggle Options", -1)),
653
+ _cache[39] || (_cache[39] = createBaseVNode("div", { class: "property-group-title" }, "Toggle Options", -1)),
617
654
  createBaseVNode("div", _hoisted_23, [
618
- _cache[32] || (_cache[32] = createBaseVNode("label", { class: "property-label" }, "Default Value", -1)),
655
+ _cache[37] || (_cache[37] = createBaseVNode("label", { class: "property-label" }, "Default Value", -1)),
619
656
  createBaseVNode("input", {
620
657
  checked: _ctx.component.default,
621
658
  type: "checkbox",
@@ -624,7 +661,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
624
661
  }, null, 40, _hoisted_24)
625
662
  ]),
626
663
  createBaseVNode("div", _hoisted_25, [
627
- _cache[33] || (_cache[33] = createBaseVNode("label", { class: "property-label" }, "Description", -1)),
664
+ _cache[38] || (_cache[38] = createBaseVNode("label", { class: "property-label" }, "Description", -1)),
628
665
  createBaseVNode("input", {
629
666
  value: _ctx.component.description,
630
667
  type: "text",
@@ -635,20 +672,20 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
635
672
  ])
636
673
  ])) : createCommentVNode("", true),
637
674
  _ctx.component.component_type === "SingleSelect" ? (openBlock(), createElementBlock("div", _hoisted_27, [
638
- _cache[38] || (_cache[38] = createBaseVNode("div", { class: "property-group-title" }, "Select Options", -1)),
675
+ _cache[43] || (_cache[43] = createBaseVNode("div", { class: "property-group-title" }, "Select Options", -1)),
639
676
  createBaseVNode("div", _hoisted_28, [
640
- _cache[36] || (_cache[36] = createBaseVNode("label", { class: "property-label" }, "Options Source", -1)),
677
+ _cache[41] || (_cache[41] = createBaseVNode("label", { class: "property-label" }, "Options Source", -1)),
641
678
  createBaseVNode("select", {
642
679
  value: _ctx.component.options_source,
643
680
  class: "property-input",
644
681
  onChange: _cache[9] || (_cache[9] = ($event) => updateField("options_source", $event.target.value))
645
- }, _cache[35] || (_cache[35] = [
682
+ }, _cache[40] || (_cache[40] = [
646
683
  createBaseVNode("option", { value: "static" }, "Static Options", -1),
647
684
  createBaseVNode("option", { value: "incoming_columns" }, "Incoming Columns", -1)
648
685
  ]), 40, _hoisted_29)
649
686
  ]),
650
687
  _ctx.component.options_source === "static" ? (openBlock(), createElementBlock("div", _hoisted_30, [
651
- _cache[37] || (_cache[37] = createBaseVNode("label", { class: "property-label" }, "Options (comma-separated)", -1)),
688
+ _cache[42] || (_cache[42] = createBaseVNode("label", { class: "property-label" }, "Options (comma-separated)", -1)),
652
689
  createBaseVNode("input", {
653
690
  value: _ctx.component.options_string,
654
691
  type: "text",
@@ -659,20 +696,20 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
659
696
  ])) : createCommentVNode("", true)
660
697
  ])) : createCommentVNode("", true),
661
698
  _ctx.component.component_type === "MultiSelect" ? (openBlock(), createElementBlock("div", _hoisted_32, [
662
- _cache[42] || (_cache[42] = createBaseVNode("div", { class: "property-group-title" }, "Select Options", -1)),
699
+ _cache[47] || (_cache[47] = createBaseVNode("div", { class: "property-group-title" }, "Select Options", -1)),
663
700
  createBaseVNode("div", _hoisted_33, [
664
- _cache[40] || (_cache[40] = createBaseVNode("label", { class: "property-label" }, "Options Source", -1)),
701
+ _cache[45] || (_cache[45] = createBaseVNode("label", { class: "property-label" }, "Options Source", -1)),
665
702
  createBaseVNode("select", {
666
703
  value: _ctx.component.options_source,
667
704
  class: "property-input",
668
705
  onChange: _cache[11] || (_cache[11] = ($event) => updateField("options_source", $event.target.value))
669
- }, _cache[39] || (_cache[39] = [
706
+ }, _cache[44] || (_cache[44] = [
670
707
  createBaseVNode("option", { value: "static" }, "Static Options", -1),
671
708
  createBaseVNode("option", { value: "incoming_columns" }, "Incoming Columns", -1)
672
709
  ]), 40, _hoisted_34)
673
710
  ]),
674
711
  _ctx.component.options_source === "static" ? (openBlock(), createElementBlock("div", _hoisted_35, [
675
- _cache[41] || (_cache[41] = createBaseVNode("label", { class: "property-label" }, "Options (comma-separated)", -1)),
712
+ _cache[46] || (_cache[46] = createBaseVNode("label", { class: "property-label" }, "Options (comma-separated)", -1)),
676
713
  createBaseVNode("input", {
677
714
  value: _ctx.component.options_string,
678
715
  type: "text",
@@ -683,9 +720,9 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
683
720
  ])) : createCommentVNode("", true)
684
721
  ])) : createCommentVNode("", true),
685
722
  _ctx.component.component_type === "ColumnSelector" ? (openBlock(), createElementBlock("div", _hoisted_37, [
686
- _cache[47] || (_cache[47] = createBaseVNode("div", { class: "property-group-title" }, "Column Options", -1)),
723
+ _cache[52] || (_cache[52] = createBaseVNode("div", { class: "property-group-title" }, "Column Options", -1)),
687
724
  createBaseVNode("div", _hoisted_38, [
688
- _cache[43] || (_cache[43] = createBaseVNode("label", { class: "property-label" }, "Required", -1)),
725
+ _cache[48] || (_cache[48] = createBaseVNode("label", { class: "property-label" }, "Required", -1)),
689
726
  createBaseVNode("input", {
690
727
  checked: _ctx.component.required,
691
728
  type: "checkbox",
@@ -694,7 +731,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
694
731
  }, null, 40, _hoisted_39)
695
732
  ]),
696
733
  createBaseVNode("div", _hoisted_40, [
697
- _cache[44] || (_cache[44] = createBaseVNode("label", { class: "property-label" }, "Multiple Selection", -1)),
734
+ _cache[49] || (_cache[49] = createBaseVNode("label", { class: "property-label" }, "Multiple Selection", -1)),
698
735
  createBaseVNode("input", {
699
736
  checked: _ctx.component.multiple,
700
737
  type: "checkbox",
@@ -703,12 +740,12 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
703
740
  }, null, 40, _hoisted_41)
704
741
  ]),
705
742
  createBaseVNode("div", _hoisted_42, [
706
- _cache[46] || (_cache[46] = createBaseVNode("label", { class: "property-label" }, "Data Types Filter", -1)),
743
+ _cache[51] || (_cache[51] = createBaseVNode("label", { class: "property-label" }, "Data Types Filter", -1)),
707
744
  createBaseVNode("select", {
708
745
  value: _ctx.component.data_types,
709
746
  class: "property-input",
710
747
  onChange: _cache[15] || (_cache[15] = ($event) => updateField("data_types", $event.target.value))
711
- }, _cache[45] || (_cache[45] = [
748
+ }, _cache[50] || (_cache[50] = [
712
749
  createBaseVNode("option", { value: "ALL" }, "All Types", -1),
713
750
  createBaseVNode("option", { value: "numeric" }, "Numeric", -1),
714
751
  createBaseVNode("option", { value: "string" }, "String", -1),
@@ -717,9 +754,9 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
717
754
  ])
718
755
  ])) : createCommentVNode("", true),
719
756
  _ctx.component.component_type === "SliderInput" ? (openBlock(), createElementBlock("div", _hoisted_44, [
720
- _cache[51] || (_cache[51] = createBaseVNode("div", { class: "property-group-title" }, "Slider Options", -1)),
757
+ _cache[56] || (_cache[56] = createBaseVNode("div", { class: "property-group-title" }, "Slider Options", -1)),
721
758
  createBaseVNode("div", _hoisted_45, [
722
- _cache[48] || (_cache[48] = createBaseVNode("label", { class: "property-label" }, [
759
+ _cache[53] || (_cache[53] = createBaseVNode("label", { class: "property-label" }, [
723
760
  createTextVNode("Min Value "),
724
761
  createBaseVNode("span", { class: "required" }, "*")
725
762
  ], -1)),
@@ -731,7 +768,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
731
768
  }, null, 40, _hoisted_46)
732
769
  ]),
733
770
  createBaseVNode("div", _hoisted_47, [
734
- _cache[49] || (_cache[49] = createBaseVNode("label", { class: "property-label" }, [
771
+ _cache[54] || (_cache[54] = createBaseVNode("label", { class: "property-label" }, [
735
772
  createTextVNode("Max Value "),
736
773
  createBaseVNode("span", { class: "required" }, "*")
737
774
  ], -1)),
@@ -743,7 +780,7 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
743
780
  }, null, 40, _hoisted_48)
744
781
  ]),
745
782
  createBaseVNode("div", _hoisted_49, [
746
- _cache[50] || (_cache[50] = createBaseVNode("label", { class: "property-label" }, "Step", -1)),
783
+ _cache[55] || (_cache[55] = createBaseVNode("label", { class: "property-label" }, "Step", -1)),
747
784
  createBaseVNode("input", {
748
785
  value: _ctx.component.step,
749
786
  type: "number",
@@ -752,50 +789,109 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
752
789
  }, null, 40, _hoisted_50)
753
790
  ])
754
791
  ])) : createCommentVNode("", true),
755
- _ctx.component.component_type === "SecretSelector" ? (openBlock(), createElementBlock("div", _hoisted_51, [
756
- _cache[56] || (_cache[56] = createBaseVNode("div", { class: "property-group-title" }, "Secret Options", -1)),
792
+ _ctx.component.component_type === "ColumnActionInput" ? (openBlock(), createElementBlock("div", _hoisted_51, [
793
+ _cache[65] || (_cache[65] = createBaseVNode("div", { class: "property-group-title" }, "Column Action Options", -1)),
757
794
  createBaseVNode("div", _hoisted_52, [
758
- _cache[52] || (_cache[52] = createBaseVNode("label", { class: "property-label" }, "Required", -1)),
795
+ _cache[57] || (_cache[57] = createBaseVNode("label", { class: "property-label" }, [
796
+ createTextVNode("Actions (comma-separated) "),
797
+ createBaseVNode("span", { class: "required" }, "*")
798
+ ], -1)),
799
+ createBaseVNode("input", {
800
+ value: _ctx.component.actions_string,
801
+ type: "text",
802
+ class: "property-input",
803
+ placeholder: "sum, mean, min, max",
804
+ onInput: _cache[19] || (_cache[19] = ($event) => updateField("actions_string", $event.target.value))
805
+ }, null, 40, _hoisted_53),
806
+ _cache[58] || (_cache[58] = createBaseVNode("span", { class: "field-hint" }, "Actions available in dropdown (e.g., sum, mean, min, max)", -1))
807
+ ]),
808
+ createBaseVNode("div", _hoisted_54, [
809
+ _cache[59] || (_cache[59] = createBaseVNode("label", { class: "property-label" }, "Output Name Template", -1)),
810
+ createBaseVNode("input", {
811
+ value: _ctx.component.output_name_template,
812
+ type: "text",
813
+ class: "property-input",
814
+ placeholder: "{column}_{action}",
815
+ onInput: _cache[20] || (_cache[20] = ($event) => updateField("output_name_template", $event.target.value))
816
+ }, null, 40, _hoisted_55),
817
+ _cache[60] || (_cache[60] = createBaseVNode("span", { class: "field-hint" }, "Use {column} and {action} placeholders", -1))
818
+ ]),
819
+ createBaseVNode("div", _hoisted_56, [
820
+ _cache[62] || (_cache[62] = createBaseVNode("label", { class: "property-label" }, "Data Types Filter", -1)),
821
+ createBaseVNode("select", {
822
+ value: _ctx.component.data_types,
823
+ class: "property-input",
824
+ onChange: _cache[21] || (_cache[21] = ($event) => updateField("data_types", $event.target.value))
825
+ }, _cache[61] || (_cache[61] = [
826
+ createBaseVNode("option", { value: "ALL" }, "All Types", -1),
827
+ createBaseVNode("option", { value: "Numeric" }, "Numeric", -1),
828
+ createBaseVNode("option", { value: "String" }, "String", -1),
829
+ createBaseVNode("option", { value: "Date" }, "Date/Time", -1)
830
+ ]), 40, _hoisted_57)
831
+ ]),
832
+ createBaseVNode("div", _hoisted_58, [
833
+ _cache[63] || (_cache[63] = createBaseVNode("label", { class: "property-label" }, "Show Group By", -1)),
834
+ createBaseVNode("input", {
835
+ checked: _ctx.component.show_group_by,
836
+ type: "checkbox",
837
+ class: "property-checkbox",
838
+ onChange: _cache[22] || (_cache[22] = ($event) => updateField("show_group_by", $event.target.checked))
839
+ }, null, 40, _hoisted_59)
840
+ ]),
841
+ createBaseVNode("div", _hoisted_60, [
842
+ _cache[64] || (_cache[64] = createBaseVNode("label", { class: "property-label" }, "Show Order By", -1)),
843
+ createBaseVNode("input", {
844
+ checked: _ctx.component.show_order_by,
845
+ type: "checkbox",
846
+ class: "property-checkbox",
847
+ onChange: _cache[23] || (_cache[23] = ($event) => updateField("show_order_by", $event.target.checked))
848
+ }, null, 40, _hoisted_61)
849
+ ])
850
+ ])) : createCommentVNode("", true),
851
+ _ctx.component.component_type === "SecretSelector" ? (openBlock(), createElementBlock("div", _hoisted_62, [
852
+ _cache[70] || (_cache[70] = createBaseVNode("div", { class: "property-group-title" }, "Secret Options", -1)),
853
+ createBaseVNode("div", _hoisted_63, [
854
+ _cache[66] || (_cache[66] = createBaseVNode("label", { class: "property-label" }, "Required", -1)),
759
855
  createBaseVNode("input", {
760
856
  checked: _ctx.component.required,
761
857
  type: "checkbox",
762
858
  class: "property-checkbox",
763
- onChange: _cache[19] || (_cache[19] = ($event) => updateField("required", $event.target.checked))
764
- }, null, 40, _hoisted_53)
859
+ onChange: _cache[24] || (_cache[24] = ($event) => updateField("required", $event.target.checked))
860
+ }, null, 40, _hoisted_64)
765
861
  ]),
766
- createBaseVNode("div", _hoisted_54, [
767
- _cache[53] || (_cache[53] = createBaseVNode("label", { class: "property-label" }, "Description", -1)),
862
+ createBaseVNode("div", _hoisted_65, [
863
+ _cache[67] || (_cache[67] = createBaseVNode("label", { class: "property-label" }, "Description", -1)),
768
864
  createBaseVNode("input", {
769
865
  value: _ctx.component.description,
770
866
  type: "text",
771
867
  class: "property-input",
772
868
  placeholder: "Help text for the user",
773
- onInput: _cache[20] || (_cache[20] = ($event) => updateField("description", $event.target.value))
774
- }, null, 40, _hoisted_55)
869
+ onInput: _cache[25] || (_cache[25] = ($event) => updateField("description", $event.target.value))
870
+ }, null, 40, _hoisted_66)
775
871
  ]),
776
- createBaseVNode("div", _hoisted_56, [
777
- _cache[54] || (_cache[54] = createBaseVNode("label", { class: "property-label" }, "Name Prefix Filter", -1)),
872
+ createBaseVNode("div", _hoisted_67, [
873
+ _cache[68] || (_cache[68] = createBaseVNode("label", { class: "property-label" }, "Name Prefix Filter", -1)),
778
874
  createBaseVNode("input", {
779
875
  value: _ctx.component.name_prefix,
780
876
  type: "text",
781
877
  class: "property-input",
782
878
  placeholder: "e.g. API_KEY_",
783
- onInput: _cache[21] || (_cache[21] = ($event) => updateField("name_prefix", $event.target.value))
784
- }, null, 40, _hoisted_57),
785
- _cache[55] || (_cache[55] = createBaseVNode("span", { class: "field-hint" }, "Only show secrets starting with this prefix", -1))
879
+ onInput: _cache[26] || (_cache[26] = ($event) => updateField("name_prefix", $event.target.value))
880
+ }, null, 40, _hoisted_68),
881
+ _cache[69] || (_cache[69] = createBaseVNode("span", { class: "field-hint" }, "Only show secrets starting with this prefix", -1))
786
882
  ])
787
883
  ])) : createCommentVNode("", true),
788
884
  createBaseVNode("div", { class: "action-section" }, [
789
885
  createBaseVNode("button", {
790
886
  class: "action-btn",
791
887
  onClick: insertVariable
792
- }, _cache[57] || (_cache[57] = [
888
+ }, _cache[71] || (_cache[71] = [
793
889
  createBaseVNode("i", { class: "fa-solid fa-code" }, null, -1),
794
890
  createTextVNode(" Insert Variable ")
795
891
  ])),
796
- _cache[58] || (_cache[58] = createBaseVNode("span", { class: "field-hint" }, "Add typed variable to process method", -1))
892
+ _cache[72] || (_cache[72] = createBaseVNode("span", { class: "field-hint" }, "Add typed variable to process method", -1))
797
893
  ])
798
- ])) : (openBlock(), createElementBlock("div", _hoisted_58, _cache[59] || (_cache[59] = [
894
+ ])) : (openBlock(), createElementBlock("div", _hoisted_69, _cache[73] || (_cache[73] = [
799
895
  createBaseVNode("i", { class: "fa-solid fa-mouse-pointer" }, null, -1),
800
896
  createBaseVNode("p", null, "Select a component to edit its properties", -1)
801
897
  ])))
@@ -804,8 +900,8 @@ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
804
900
  };
805
901
  }
806
902
  });
807
- const PropertyEditor_vue_vue_type_style_index_0_scoped_7ea3df75_lang = "";
808
- const PropertyEditor = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__scopeId", "data-v-7ea3df75"]]);
903
+ const PropertyEditor_vue_vue_type_style_index_0_scoped_30942683_lang = "";
904
+ const PropertyEditor = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__scopeId", "data-v-30942683"]]);
809
905
  const _hoisted_1$7 = { class: "modal-header" };
810
906
  const _hoisted_2$7 = { class: "modal-actions" };
811
907
  const _sfc_main$7 = /* @__PURE__ */ defineComponent({
@@ -839,7 +935,7 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
839
935
  createBaseVNode("i", { class: "fa-solid fa-times" }, null, -1)
840
936
  ]))
841
937
  ]),
842
- _cache[6] || (_cache[6] = createStaticVNode('<div class="modal-content" data-v-5991e8aa><div class="help-section" data-v-5991e8aa><h4 data-v-5991e8aa>Overview</h4><p data-v-5991e8aa> The process method is where you write your data transformation logic. It receives input LazyFrames from connected nodes and returns a transformed LazyFrame. </p></div><div class="help-section" data-v-5991e8aa><h4 data-v-5991e8aa>Method Signature</h4><pre class="help-code" data-v-5991e8aa><code data-v-5991e8aa>def process(self, *inputs: pl.LazyFrame) -&gt; pl.LazyFrame:</code></pre><ul class="help-list" data-v-5991e8aa><li data-v-5991e8aa><code data-v-5991e8aa>inputs</code> - Tuple of input LazyFrames from connected nodes</li><li data-v-5991e8aa><code data-v-5991e8aa>inputs[0]</code> - First input (most common)</li><li data-v-5991e8aa><code data-v-5991e8aa>inputs[1]</code> - Second input (for joins, etc.)</li></ul></div><div class="help-section" data-v-5991e8aa><h4 data-v-5991e8aa>Accessing Settings</h4><p data-v-5991e8aa>Access user-configured values from your UI components:</p><pre class="help-code" data-v-5991e8aa><code data-v-5991e8aa>self.settings_schema.section_name.component_name.value</code></pre><p class="help-note" data-v-5991e8aa><i class="fa-solid fa-lightbulb" data-v-5991e8aa></i> Use autocomplete by typing <code data-v-5991e8aa>self.</code> to navigate the settings schema. </p></div><div class="help-section" data-v-5991e8aa><h4 data-v-5991e8aa>Working with Secrets</h4><p data-v-5991e8aa>For SecretSelector components, access the decrypted value:</p><pre class="help-code" data-v-5991e8aa><code data-v-5991e8aa># Get the SecretStr object\nsecret = self.settings_schema.section.api_key.secret_value\n\n# Get the actual decrypted string value\napi_key = secret.get_secret_value()</code></pre></div><div class="help-section" data-v-5991e8aa><h4 data-v-5991e8aa>Common Patterns</h4><div class="pattern-grid" data-v-5991e8aa><div class="pattern-item" data-v-5991e8aa><h5 data-v-5991e8aa>Filter Rows</h5><pre class="help-code-small" data-v-5991e8aa><code data-v-5991e8aa>lf = inputs[0]\nreturn lf.filter(pl.col(&quot;column&quot;) &gt; 10)</code></pre></div><div class="pattern-item" data-v-5991e8aa><h5 data-v-5991e8aa>Select Columns</h5><pre class="help-code-small" data-v-5991e8aa><code data-v-5991e8aa>lf = inputs[0]\nreturn lf.select([&quot;col1&quot;, &quot;col2&quot;])</code></pre></div><div class="pattern-item" data-v-5991e8aa><h5 data-v-5991e8aa>Add New Column</h5><pre class="help-code-small" data-v-5991e8aa><code data-v-5991e8aa>lf = inputs[0]\nreturn lf.with_columns(\n pl.col(&quot;a&quot;).alias(&quot;new_col&quot;)\n)</code></pre></div><div class="pattern-item" data-v-5991e8aa><h5 data-v-5991e8aa>Group &amp; Aggregate</h5><pre class="help-code-small" data-v-5991e8aa><code data-v-5991e8aa>lf = inputs[0]\nreturn lf.group_by(&quot;category&quot;).agg(\n pl.col(&quot;value&quot;).sum()\n)</code></pre></div></div></div><div class="help-section" data-v-5991e8aa><h4 data-v-5991e8aa>Using Settings in Code</h4><pre class="help-code" data-v-5991e8aa><code data-v-5991e8aa># Example: Using a TextInput value\ncolumn_name = self.settings_schema.options.column_name.value\nlf = inputs[0]\nreturn lf.select(pl.col(column_name))\n\n# Example: Using a ColumnSelector value\nselected_columns = self.settings_schema.columns.selected.value\nreturn lf.select(selected_columns)</code></pre></div></div>', 1)),
938
+ _cache[6] || (_cache[6] = createStaticVNode('<div class="modal-content" data-v-3a89a078><div class="help-section" data-v-3a89a078><h4 data-v-3a89a078>Overview</h4><p data-v-3a89a078> The process method is where you write your data transformation logic. It receives input LazyFrames from connected nodes and returns a transformed LazyFrame. </p></div><div class="help-section" data-v-3a89a078><h4 data-v-3a89a078>Method Signature</h4><pre class="help-code" data-v-3a89a078><code data-v-3a89a078>def process(self, *inputs: pl.LazyFrame) -&gt; pl.LazyFrame:</code></pre><ul class="help-list" data-v-3a89a078><li data-v-3a89a078><code data-v-3a89a078>inputs</code> - Tuple of input LazyFrames from connected nodes</li><li data-v-3a89a078><code data-v-3a89a078>inputs[0]</code> - First input (most common)</li><li data-v-3a89a078><code data-v-3a89a078>inputs[1]</code> - Second input (for joins, etc.)</li></ul></div><div class="help-section" data-v-3a89a078><h4 data-v-3a89a078>Accessing Settings</h4><p data-v-3a89a078>Access user-configured values from your UI components:</p><pre class="help-code" data-v-3a89a078><code data-v-3a89a078>self.settings_schema.section_name.component_name.value</code></pre><p class="help-note" data-v-3a89a078><i class="fa-solid fa-lightbulb" data-v-3a89a078></i> Use autocomplete by typing <code data-v-3a89a078>self.</code> to navigate the settings schema. </p></div><div class="help-section" data-v-3a89a078><h4 data-v-3a89a078>Working with Secrets</h4><p data-v-3a89a078>For SecretSelector components, access the decrypted value:</p><pre class="help-code" data-v-3a89a078><code data-v-3a89a078># Get the SecretStr object\nsecret = self.settings_schema.section.api_key.secret_value\n\n# Get the actual decrypted string value\napi_key = secret.get_secret_value()</code></pre></div><div class="help-section" data-v-3a89a078><h4 data-v-3a89a078>Common Patterns</h4><div class="pattern-grid" data-v-3a89a078><div class="pattern-item" data-v-3a89a078><h5 data-v-3a89a078>Filter Rows</h5><pre class="help-code-small" data-v-3a89a078><code data-v-3a89a078>lf = inputs[0]\nreturn lf.filter(pl.col(&quot;column&quot;) &gt; 10)</code></pre></div><div class="pattern-item" data-v-3a89a078><h5 data-v-3a89a078>Select Columns</h5><pre class="help-code-small" data-v-3a89a078><code data-v-3a89a078>lf = inputs[0]\nreturn lf.select([&quot;col1&quot;, &quot;col2&quot;])</code></pre></div><div class="pattern-item" data-v-3a89a078><h5 data-v-3a89a078>Add New Column</h5><pre class="help-code-small" data-v-3a89a078><code data-v-3a89a078>lf = inputs[0]\nreturn lf.with_columns(\n pl.col(&quot;a&quot;).alias(&quot;new_col&quot;)\n)</code></pre></div><div class="pattern-item" data-v-3a89a078><h5 data-v-3a89a078>Group &amp; Aggregate</h5><pre class="help-code-small" data-v-3a89a078><code data-v-3a89a078>lf = inputs[0]\nreturn lf.group_by(&quot;category&quot;).agg(\n pl.col(&quot;value&quot;).sum()\n)</code></pre></div></div></div><div class="help-section" data-v-3a89a078><h4 data-v-3a89a078>Using Settings in Code</h4><pre class="help-code" data-v-3a89a078><code data-v-3a89a078># Example: Using a TextInput value\ncolumn_name = self.settings_schema.options.column_name.value\nlf = inputs[0]\nreturn lf.select(pl.col(column_name))\n\n# Example: Using a ColumnSelector value\nselected_columns = self.settings_schema.columns.selected.value\nreturn lf.select(selected_columns)</code></pre></div></div>', 1)),
843
939
  createBaseVNode("div", _hoisted_2$7, [
844
940
  createBaseVNode("button", {
845
941
  class: "btn btn-primary",
@@ -851,8 +947,8 @@ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
851
947
  };
852
948
  }
853
949
  });
854
- const ProcessCodeHelpModal_vue_vue_type_style_index_0_scoped_5991e8aa_lang = "";
855
- const ProcessCodeHelpModal = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["__scopeId", "data-v-5991e8aa"]]);
950
+ const ProcessCodeHelpModal_vue_vue_type_style_index_0_scoped_3a89a078_lang = "";
951
+ const ProcessCodeHelpModal = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["__scopeId", "data-v-3a89a078"]]);
856
952
  const _hoisted_1$6 = { class: "code-editor-section" };
857
953
  const _hoisted_2$6 = { class: "code-editor-header" };
858
954
  const _hoisted_3$6 = { class: "code-editor-wrapper" };
@@ -967,8 +1063,8 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
967
1063
  };
968
1064
  }
969
1065
  });
970
- const CodePreviewModal_vue_vue_type_style_index_0_scoped_9323159f_lang = "";
971
- const CodePreviewModal = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-9323159f"]]);
1066
+ const CodePreviewModal_vue_vue_type_style_index_0_scoped_f74c8de3_lang = "";
1067
+ const CodePreviewModal = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-f74c8de3"]]);
972
1068
  const _hoisted_1$4 = { class: "modal-header modal-header-error" };
973
1069
  const _hoisted_2$4 = { class: "modal-content" };
974
1070
  const _hoisted_3$4 = { class: "validation-errors-list" };
@@ -1030,8 +1126,8 @@ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
1030
1126
  };
1031
1127
  }
1032
1128
  });
1033
- const ValidationModal_vue_vue_type_style_index_0_scoped_a56bfe3f_lang = "";
1034
- const ValidationModal = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__scopeId", "data-v-a56bfe3f"]]);
1129
+ const ValidationModal_vue_vue_type_style_index_0_scoped_bf9df753_lang = "";
1130
+ const ValidationModal = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__scopeId", "data-v-bf9df753"]]);
1035
1131
  const _hoisted_1$3 = { class: "modal-header" };
1036
1132
  const _hoisted_2$3 = { class: "modal-title" };
1037
1133
  const _hoisted_3$3 = { class: "modal-content" };
@@ -1215,8 +1311,8 @@ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
1215
1311
  };
1216
1312
  }
1217
1313
  });
1218
- const NodeBrowserModal_vue_vue_type_style_index_0_scoped_ab27c047_lang = "";
1219
- const NodeBrowserModal = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__scopeId", "data-v-ab27c047"]]);
1314
+ const NodeBrowserModal_vue_vue_type_style_index_0_scoped_fca09e8f_lang = "";
1315
+ const NodeBrowserModal = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__scopeId", "data-v-fca09e8f"]]);
1220
1316
  const _hoisted_1$2 = { class: "modal-header" };
1221
1317
  const _hoisted_2$2 = { class: "modal-content" };
1222
1318
  const _hoisted_3$2 = { class: "help-tabs" };
@@ -1520,8 +1616,8 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
1520
1616
  };
1521
1617
  }
1522
1618
  });
1523
- const IconSelector_vue_vue_type_style_index_0_scoped_5e08bde1_lang = "";
1524
- const IconSelector = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-5e08bde1"]]);
1619
+ const IconSelector_vue_vue_type_style_index_0_scoped_638bee77_lang = "";
1620
+ const IconSelector = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-638bee77"]]);
1525
1621
  function useNodeDesignerState() {
1526
1622
  const nodeMetadata = reactive({ ...defaultNodeMetadata });
1527
1623
  const sections = ref([]);
@@ -2341,6 +2437,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
2341
2437
  newComponent.required = false;
2342
2438
  newComponent.multiple = false;
2343
2439
  newComponent.data_types = "ALL";
2440
+ } else if (componentType === "ColumnActionInput") {
2441
+ newComponent.actions_string = "sum, mean, min, max";
2442
+ newComponent.output_name_template = "{column}_{action}";
2443
+ newComponent.show_group_by = false;
2444
+ newComponent.show_order_by = false;
2445
+ newComponent.data_types = "ALL";
2344
2446
  } else if (componentType === "SliderInput") {
2345
2447
  newComponent.min_value = 0;
2346
2448
  newComponent.max_value = 100;
@@ -2603,8 +2705,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
2603
2705
  };
2604
2706
  }
2605
2707
  });
2606
- const NodeDesigner_vue_vue_type_style_index_0_scoped_1c613876_lang = "";
2607
- const NodeDesigner = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-1c613876"]]);
2708
+ const NodeDesigner_vue_vue_type_style_index_0_scoped_3db2802e_lang = "";
2709
+ const NodeDesigner = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-3db2802e"]]);
2608
2710
  export {
2609
2711
  NodeDesigner as default
2610
2712
  };