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
flowfile/__init__.py CHANGED
@@ -70,10 +70,16 @@ from flowfile_frame import (
70
70
  concat,
71
71
  create_cloud_storage_connection,
72
72
  create_cloud_storage_connection_if_not_exists,
73
+ create_database_connection,
74
+ create_database_connection_if_not_exists,
73
75
  del_cloud_storage_connection,
76
+ del_database_connection,
74
77
  from_dict,
75
78
  get_all_available_cloud_storage_connections,
79
+ get_all_available_database_connections,
80
+ get_database_connection_by_name,
76
81
  read_csv,
82
+ read_database,
77
83
  read_parquet,
78
84
  scan_csv,
79
85
  scan_csv_from_cloud_storage,
@@ -81,6 +87,7 @@ from flowfile_frame import (
81
87
  scan_json_from_cloud_storage,
82
88
  scan_parquet,
83
89
  scan_parquet_from_cloud_storage,
90
+ write_database,
84
91
  )
85
92
  from flowfile_frame.expr import col, column, count, cum_count, len, lit, max, mean, min, sum, when
86
93
  from flowfile_frame.flow_frame import FlowFrame
@@ -125,10 +132,19 @@ __all__ = [
125
132
  "scan_parquet_from_cloud_storage",
126
133
  "scan_json_from_cloud_storage",
127
134
  "scan_csv_from_cloud_storage",
135
+ # Cloud storage connection management
128
136
  "get_all_available_cloud_storage_connections",
129
137
  "create_cloud_storage_connection",
130
138
  "del_cloud_storage_connection",
131
139
  "create_cloud_storage_connection_if_not_exists",
140
+ # Database functions
141
+ "read_database",
142
+ "write_database",
143
+ "create_database_connection",
144
+ "create_database_connection_if_not_exists",
145
+ "del_database_connection",
146
+ "get_all_available_database_connections",
147
+ "get_database_connection_by_name",
132
148
  "FlowGraph",
133
149
  "FlowDataEngine",
134
150
  "node_interface",
flowfile/__main__.py CHANGED
@@ -1,5 +1,88 @@
1
1
  # flowfile/__main__.py
2
2
 
3
+ import sys
4
+ from pathlib import Path
5
+
6
+
7
+ def run_flow(flow_path: str) -> int:
8
+ """
9
+ Load and execute a flow from a YAML/JSON file.
10
+
11
+ Args:
12
+ flow_path: Path to the flow file (.yaml, .yml, or .json)
13
+
14
+ Returns:
15
+ Exit code (0 for success, 1 for failure)
16
+ """
17
+ # Disable worker communication for CLI execution
18
+ from flowfile_core.configs.settings import OFFLOAD_TO_WORKER
19
+
20
+ OFFLOAD_TO_WORKER.set(False)
21
+
22
+ from flowfile_core.flowfile.manage.io_flowfile import open_flow
23
+
24
+ path = Path(flow_path)
25
+ if not path.exists():
26
+ print(f"Error: File not found: {flow_path}", file=sys.stderr)
27
+ return 1
28
+
29
+ if path.suffix.lower() not in (".yaml", ".yml", ".json"):
30
+ print(f"Error: Unsupported file format: {path.suffix}", file=sys.stderr)
31
+ print("Supported formats: .yaml, .yml, .json", file=sys.stderr)
32
+ return 1
33
+
34
+ print(f"Loading flow from: {flow_path}")
35
+
36
+ try:
37
+ flow = open_flow(path)
38
+ except Exception as e:
39
+ print(f"Error loading flow: {e}", file=sys.stderr)
40
+ return 1
41
+
42
+ # Force local execution for CLI - no worker service needed
43
+ flow.execution_location = "local"
44
+
45
+ # Remove explore_data nodes - they're UI-only and require a worker service
46
+ explore_data_nodes = [n.node_id for n in flow.nodes if n.node_type == "explore_data"]
47
+ for node_id in explore_data_nodes:
48
+ flow.delete_node(node_id)
49
+ if explore_data_nodes:
50
+ print(f"Skipping {len(explore_data_nodes)} explore_data node(s) (UI-only)")
51
+
52
+ flow_name = flow.flow_settings.name or f"Flow {flow.flow_id}"
53
+ print(f"Running flow: {flow_name} (id={flow.flow_id})")
54
+ print(f"Nodes: {len(flow.nodes)}")
55
+ flow.print_tree()
56
+ print("-" * 40)
57
+
58
+ try:
59
+ result = flow.run_graph()
60
+ except Exception as e:
61
+ print(f"Error running flow: {e}", file=sys.stderr)
62
+ return 1
63
+
64
+ if result is None:
65
+ print("Error: Flow execution returned no result", file=sys.stderr)
66
+ return 1
67
+
68
+ # Display results
69
+ print("-" * 40)
70
+ if result.success:
71
+ duration = ""
72
+ if result.start_time and result.end_time:
73
+ duration = f" in {(result.end_time - result.start_time).total_seconds():.2f}s"
74
+ print(f"Flow completed successfully{duration}")
75
+ print(f"Nodes completed: {result.nodes_completed}/{result.number_of_nodes}")
76
+ else:
77
+ print("Flow execution failed", file=sys.stderr)
78
+ for node_result in result.node_step_result:
79
+ if not node_result.success and node_result.error:
80
+ node_name = node_result.node_name or f"Node {node_result.node_id}"
81
+ print(f" - {node_name}: {node_result.error}", file=sys.stderr)
82
+ return 1
83
+
84
+ return 0
85
+
3
86
 
4
87
  def main():
5
88
  """
@@ -12,8 +95,9 @@ def main():
12
95
  parser = argparse.ArgumentParser(description="FlowFile: A visual ETL tool with a Polars-like API")
13
96
  parser.add_argument("command", nargs="?", choices=["run"], help="Command to execute")
14
97
  parser.add_argument(
15
- "component", nargs="?", choices=["ui", "core", "worker"], help="Component to run (ui, core, or worker)"
98
+ "component", nargs="?", choices=["ui", "core", "worker", "flow"], help="Component to run"
16
99
  )
100
+ parser.add_argument("file_path", nargs="?", help="Path to flow file (for 'flow' component)")
17
101
  parser.add_argument("--host", default="127.0.0.1", help="Host to bind the server to")
18
102
  parser.add_argument("--port", type=int, default=63578, help="Port to bind the server to")
19
103
  parser.add_argument("--no-browser", action="store_true", help="Don't open a browser window")
@@ -37,6 +121,12 @@ def main():
37
121
  from flowfile_worker.main import run as run_worker
38
122
 
39
123
  run_worker(host=args.host, port=args.port)
124
+ elif args.component == "flow":
125
+ if not args.file_path:
126
+ print("Error: 'flow' component requires a file path", file=sys.stderr)
127
+ print("Usage: flowfile run flow <path-to-flow-file>", file=sys.stderr)
128
+ sys.exit(1)
129
+ sys.exit(run_flow(args.file_path))
40
130
  else:
41
131
  # Default action - show info
42
132
  print(f"FlowFile v{flowfile.__version__}")
@@ -45,6 +135,9 @@ def main():
45
135
  print(" # Start the FlowFile web UI with integrated services")
46
136
  print(" flowfile run ui")
47
137
  print("")
138
+ print(" # Run a flow from a file")
139
+ print(" flowfile run flow my_pipeline.yaml")
140
+ print("")
48
141
  print(" # Advanced: Run individual components")
49
142
  print(" flowfile run core # Start only the core service")
50
143
  print(" flowfile run worker # Start only the worker service")
@@ -1,4 +1,4 @@
1
- import { j as axios, d as defineComponent, a as useAuthStore, A as computed, r as ref, C as onMounted, c as createElementBlock, m as createVNode, p as withCtx, ag as Transition, b as createBaseVNode, w as withModifiers, g as withDirectives, v as vModelText, h as vModelDynamic, n as normalizeClass, q as createTextVNode, f as createCommentVNode, an as vModelCheckbox, t as toDisplayString, F as Fragment, D as renderList, o as openBlock, i as _export_sfc } from "./index-fb6493ae.js";
1
+ import { k as axios, d as defineComponent, h as useAuthStore, G as computed, r as ref, J as onMounted, c as createElementBlock, z as createVNode, A as withCtx, an as Transition, a as createBaseVNode, w as withModifiers, i as withDirectives, v as vModelText, j as vModelDynamic, n as normalizeClass, f as createTextVNode, e as createCommentVNode, au as vModelCheckbox, t as toDisplayString, K as Fragment, L as renderList, o as openBlock, g as _export_sfc } from "./index-ca6799de.js";
2
2
  class UserService {
3
3
  /**
4
4
  * Get all users (admin only)
@@ -1,5 +1,5 @@
1
- import { f as fetchCloudStorageConnectionsInterfaces, c as createCloudStorageConnectionApi, d as deleteCloudStorageConnectionApi } from "./api-8b81fa73.js";
2
- import { d as defineComponent, r as ref, B as watch, A as computed, o as openBlock, c as createElementBlock, b as createBaseVNode, g as withDirectives, v as vModelText, am as vModelSelect, F as Fragment, D as renderList, t as toDisplayString, f as createCommentVNode, h as vModelDynamic, n as normalizeClass, an as vModelCheckbox, w as withModifiers, C as onMounted, q as createTextVNode, m as createVNode, p as withCtx, s as unref, H as ElMessage, ao as ElDialog, ap as ElButton, i as _export_sfc } from "./index-fb6493ae.js";
1
+ import { f as fetchCloudStorageConnectionsInterfaces, c as createCloudStorageConnectionApi, d as deleteCloudStorageConnectionApi } from "./api-ee542cf7.js";
2
+ import { d as defineComponent, r as ref, H as watch, G as computed, o as openBlock, c as createElementBlock, a as createBaseVNode, i as withDirectives, v as vModelText, at as vModelSelect, K as Fragment, L as renderList, t as toDisplayString, e as createCommentVNode, j as vModelDynamic, n as normalizeClass, au as vModelCheckbox, w as withModifiers, J as onMounted, f as createTextVNode, z as createVNode, A as withCtx, B as unref, N as ElMessage, av as ElDialog, aw as ElButton, g as _export_sfc } from "./index-ca6799de.js";
3
3
  const _hoisted_1$1 = { class: "form-grid" };
4
4
  const _hoisted_2$1 = { class: "form-field" };
5
5
  const _hoisted_3$1 = { class: "form-field" };
@@ -776,8 +776,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
776
776
  };
777
777
  }
778
778
  });
779
- const CloudConnectionView_vue_vue_type_style_index_0_scoped_ba78c600_lang = "";
780
- const CloudConnectionView = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-ba78c600"]]);
779
+ const CloudConnectionView_vue_vue_type_style_index_0_scoped_0a624123_lang = "";
780
+ const CloudConnectionView = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-0a624123"]]);
781
781
  export {
782
782
  CloudConnectionView as default
783
783
  };
@@ -1,10 +1,10 @@
1
1
 
2
- .description-text[data-v-ba78c600] {
2
+ .description-text[data-v-0a624123] {
3
3
  color: var(--color-text-secondary);
4
4
  margin-top: var(--spacing-2);
5
5
  font-size: var(--font-size-sm);
6
6
  }
7
- .info-box[data-v-ba78c600] {
7
+ .info-box[data-v-0a624123] {
8
8
  display: flex;
9
9
  gap: var(--spacing-4);
10
10
  padding: var(--spacing-4);
@@ -12,28 +12,28 @@
12
12
  border-left: 4px solid var(--color-accent);
13
13
  border-radius: var(--border-radius-md);
14
14
  }
15
- .info-box i[data-v-ba78c600] {
15
+ .info-box i[data-v-0a624123] {
16
16
  color: var(--color-accent);
17
17
  font-size: var(--font-size-2xl);
18
18
  margin-top: var(--spacing-2);
19
19
  }
20
- .info-box p[data-v-ba78c600] {
20
+ .info-box p[data-v-0a624123] {
21
21
  margin: 0;
22
22
  margin-bottom: var(--spacing-2);
23
23
  font-size: var(--font-size-sm);
24
24
  color: var(--color-text-secondary);
25
25
  }
26
- .info-box p[data-v-ba78c600]:last-child {
26
+ .info-box p[data-v-0a624123]:last-child {
27
27
  margin-bottom: 0;
28
28
  }
29
- .info-box p strong[data-v-ba78c600] {
29
+ .info-box p strong[data-v-0a624123] {
30
30
  color: var(--color-text-primary);
31
31
  }
32
- .modal-description[data-v-ba78c600] {
32
+ .modal-description[data-v-0a624123] {
33
33
  color: var(--color-text-secondary);
34
34
  font-size: var(--font-size-sm);
35
35
  }
36
- .badge[data-v-ba78c600] {
36
+ .badge[data-v-0a624123] {
37
37
  background-color: var(--color-accent-subtle);
38
38
  color: var(--color-accent);
39
39
  border-radius: var(--border-radius-full);
@@ -42,31 +42,31 @@
42
42
  font-weight: var(--font-weight-medium);
43
43
  margin-left: var(--spacing-2);
44
44
  }
45
- .auth-badge[data-v-ba78c600] {
45
+ .auth-badge[data-v-0a624123] {
46
46
  background-color: var(--color-info-light);
47
47
  color: var(--color-info);
48
48
  }
49
- .connection-details[data-v-ba78c600] {
49
+ .connection-details[data-v-0a624123] {
50
50
  font-size: var(--font-size-xs);
51
51
  color: var(--color-text-tertiary);
52
52
  margin-top: var(--spacing-1);
53
53
  }
54
- .separator[data-v-ba78c600] {
54
+ .separator[data-v-0a624123] {
55
55
  margin: 0 var(--spacing-2);
56
56
  }
57
- .hint-text[data-v-ba78c600] {
57
+ .hint-text[data-v-0a624123] {
58
58
  color: var(--color-text-tertiary);
59
59
  font-size: var(--font-size-sm);
60
60
  margin-top: var(--spacing-2);
61
61
  }
62
62
 
63
63
  /* Cloud-specific styles */
64
- .fa-brands[data-v-ba78c600] {
64
+ .fa-brands[data-v-0a624123] {
65
65
  font-size: var(--font-size-xl);
66
66
  }
67
- .fa-aws[data-v-ba78c600] {
68
- color: #ff9900;
67
+ .fa-aws[data-v-0a624123] {
68
+ color: var(--color-brand-aws);
69
69
  }
70
- .fa-microsoft[data-v-ba78c600] {
71
- color: #0078d4;
70
+ .fa-microsoft[data-v-0a624123] {
71
+ color: var(--color-brand-microsoft);
72
72
  }
@@ -1,11 +1,11 @@
1
- import { d as defineComponent, r as ref, o as openBlock, c as createElementBlock, m as createVNode, p as withCtx, b as createBaseVNode, g as withDirectives, am as vModelSelect, F as Fragment, D as renderList, t as toDisplayString, q as createTextVNode, f as createCommentVNode, v as vModelText, an as vModelCheckbox, x as createBlock, s as unref, H as ElMessage, i as _export_sfc } from "./index-fb6493ae.js";
2
- import { C as CodeLoader } from "./vue-content-loader.es-c506ad97.js";
3
- import { u as useNodeStore } from "./PopOver-b22f049e.js";
4
- import { f as fetchCloudStorageConnectionsInterfaces } from "./api-8b81fa73.js";
5
- import { G as GenericNodeSettings } from "./genericNodeSettings-99014e1d.js";
6
- import "./DesignerView-e6f5c0e8.js";
7
- import "./index-3ba44389.js";
8
- import "./vue-codemirror.esm-0965f39f.js";
1
+ import { d as defineComponent, l as useNodeStore, r as ref, o as openBlock, c as createElementBlock, z as createVNode, A as withCtx, a as createBaseVNode, i as withDirectives, at as vModelSelect, K as Fragment, L as renderList, t as toDisplayString, f as createTextVNode, e as createCommentVNode, v as vModelText, au as vModelCheckbox, C as createBlock, B as unref, N as ElMessage, g as _export_sfc } from "./index-ca6799de.js";
2
+ import { C as CodeLoader } from "./vue-content-loader.es-808fe33a.js";
3
+ import { f as fetchCloudStorageConnectionsInterfaces } from "./api-ee542cf7.js";
4
+ import { G as GenericNodeSettings } from "./genericNodeSettings-0155288b.js";
5
+ import "./DesignerView-a4466dab.js";
6
+ import "./PopOver-ddcfe4f6.js";
7
+ import "./index-057d770d.js";
8
+ import "./vue-codemirror.esm-8f46fb36.js";
9
9
  const createNodeCloudStorageReader = (flowId, nodeId) => {
10
10
  const cloudStorageReadSettings = {
11
11
  auth_mode: "aws-cli",
@@ -1,11 +1,11 @@
1
- import { d as defineComponent, r as ref, o as openBlock, c as createElementBlock, m as createVNode, p as withCtx, b as createBaseVNode, g as withDirectives, am as vModelSelect, F as Fragment, D as renderList, t as toDisplayString, q as createTextVNode, f as createCommentVNode, v as vModelText, x as createBlock, s as unref, H as ElMessage, i as _export_sfc } from "./index-fb6493ae.js";
2
- import { C as CodeLoader } from "./vue-content-loader.es-c506ad97.js";
3
- import { u as useNodeStore } from "./PopOver-b22f049e.js";
4
- import { f as fetchCloudStorageConnectionsInterfaces } from "./api-8b81fa73.js";
5
- import { G as GenericNodeSettings } from "./genericNodeSettings-99014e1d.js";
6
- import "./DesignerView-e6f5c0e8.js";
7
- import "./index-3ba44389.js";
8
- import "./vue-codemirror.esm-0965f39f.js";
1
+ import { d as defineComponent, l as useNodeStore, r as ref, o as openBlock, c as createElementBlock, z as createVNode, A as withCtx, a as createBaseVNode, i as withDirectives, at as vModelSelect, K as Fragment, L as renderList, t as toDisplayString, f as createTextVNode, e as createCommentVNode, v as vModelText, C as createBlock, B as unref, N as ElMessage, g as _export_sfc } from "./index-ca6799de.js";
2
+ import { C as CodeLoader } from "./vue-content-loader.es-808fe33a.js";
3
+ import { f as fetchCloudStorageConnectionsInterfaces } from "./api-ee542cf7.js";
4
+ import { G as GenericNodeSettings } from "./genericNodeSettings-0155288b.js";
5
+ import "./DesignerView-a4466dab.js";
6
+ import "./PopOver-ddcfe4f6.js";
7
+ import "./index-057d770d.js";
8
+ import "./vue-codemirror.esm-8f46fb36.js";
9
9
  const createNodeCloudStorageWriter = (flowId, nodeId) => {
10
10
  const cloudStorageWriteSettings = {
11
11
  auth_mode: "aws-cli",
@@ -0,0 +1,159 @@
1
+
2
+ .component-container[data-v-d3070256] {
3
+ display: flex;
4
+ flex-direction: column;
5
+ gap: var(--spacing-4);
6
+ }
7
+ .config-section[data-v-d3070256] {
8
+ display: flex;
9
+ flex-direction: column;
10
+ gap: var(--spacing-3);
11
+ padding: var(--spacing-4);
12
+ background-color: var(--color-background-secondary);
13
+ border-radius: var(--border-radius-lg);
14
+ }
15
+ .config-row[data-v-d3070256] {
16
+ display: flex;
17
+ flex-direction: column;
18
+ gap: var(--spacing-1);
19
+ }
20
+ .config-label[data-v-d3070256] {
21
+ font-size: var(--font-size-base);
22
+ font-weight: var(--font-weight-medium);
23
+ color: var(--color-text-secondary);
24
+ }
25
+ .column-list-wrapper[data-v-d3070256] {
26
+ margin-top: var(--spacing-2);
27
+ }
28
+ .listbox-subtitle[data-v-d3070256] {
29
+ font-size: var(--font-size-base);
30
+ font-weight: var(--font-weight-semibold);
31
+ color: var(--color-text-primary);
32
+ margin-bottom: var(--spacing-2);
33
+ }
34
+ .listbox[data-v-d3070256] {
35
+ max-height: 200px;
36
+ overflow-y: auto;
37
+ border: 1px solid var(--color-border-primary);
38
+ border-radius: var(--border-radius-lg);
39
+ padding: 0;
40
+ margin: 0;
41
+ list-style: none;
42
+ background-color: var(--color-background-primary);
43
+ }
44
+ .listbox li[data-v-d3070256] {
45
+ padding: var(--spacing-2) var(--spacing-3);
46
+ cursor: pointer;
47
+ transition: background-color var(--transition-normal) var(--transition-timing);
48
+ color: var(--color-text-primary);
49
+ }
50
+ .listbox li[data-v-d3070256]:hover {
51
+ background-color: var(--color-background-hover);
52
+ }
53
+ .listbox li.is-selected[data-v-d3070256] {
54
+ background-color: var(--color-background-selected);
55
+ color: var(--color-accent);
56
+ }
57
+ .column-type[data-v-d3070256] {
58
+ font-size: var(--font-size-sm);
59
+ color: var(--color-text-tertiary);
60
+ margin-left: var(--spacing-2);
61
+ }
62
+ .context-menu[data-v-d3070256] {
63
+ position: fixed;
64
+ z-index: var(--z-index-dropdown);
65
+ border: 1px solid var(--color-border-primary);
66
+ background-color: var(--color-background-primary);
67
+ padding: var(--spacing-2);
68
+ box-shadow: var(--shadow-lg);
69
+ border-radius: var(--border-radius-sm);
70
+ user-select: none;
71
+ }
72
+ .context-menu button[data-v-d3070256] {
73
+ display: block;
74
+ background: none;
75
+ border: none;
76
+ padding: var(--spacing-1-5) var(--spacing-3);
77
+ text-align: left;
78
+ width: 100%;
79
+ cursor: pointer;
80
+ border-radius: var(--border-radius-sm);
81
+ font-size: var(--font-size-base);
82
+ color: var(--color-text-primary);
83
+ transition: background-color var(--transition-fast) var(--transition-timing);
84
+ }
85
+ .context-menu button[data-v-d3070256]:hover {
86
+ background-color: var(--color-background-hover);
87
+ }
88
+ .table-wrapper[data-v-d3070256] {
89
+ max-height: 300px;
90
+ box-shadow: var(--shadow-sm);
91
+ border-radius: var(--border-radius-lg);
92
+ overflow: auto;
93
+ border: 1px solid var(--color-border-primary);
94
+ }
95
+ .styled-table[data-v-d3070256] {
96
+ width: 100%;
97
+ border-collapse: collapse;
98
+ font-size: var(--font-size-base);
99
+ background-color: var(--color-background-primary);
100
+ }
101
+ .styled-table thead[data-v-d3070256] {
102
+ background-color: var(--table-header-bg);
103
+ position: sticky;
104
+ top: 0;
105
+ }
106
+ .styled-table th[data-v-d3070256],
107
+ .styled-table td[data-v-d3070256] {
108
+ padding: var(--spacing-2-5) var(--spacing-3);
109
+ text-align: left;
110
+ border-bottom: 1px solid var(--table-border);
111
+ }
112
+ .styled-table th[data-v-d3070256] {
113
+ font-weight: var(--font-weight-semibold);
114
+ color: var(--color-text-secondary);
115
+ }
116
+ .styled-table td[data-v-d3070256] {
117
+ color: var(--color-text-primary);
118
+ }
119
+ .styled-table tbody tr[data-v-d3070256]:hover {
120
+ background-color: var(--table-row-hover);
121
+ }
122
+ .styled-table th[data-v-d3070256]:nth-child(1),
123
+ .styled-table td[data-v-d3070256]:nth-child(1) {
124
+ width: 25%;
125
+ }
126
+ .styled-table th[data-v-d3070256]:nth-child(2),
127
+ .styled-table td[data-v-d3070256]:nth-child(2) {
128
+ width: 25%;
129
+ }
130
+ .styled-table th[data-v-d3070256]:nth-child(3),
131
+ .styled-table td[data-v-d3070256]:nth-child(3) {
132
+ width: 40%;
133
+ }
134
+ .styled-table th[data-v-d3070256]:nth-child(4),
135
+ .styled-table td[data-v-d3070256]:nth-child(4) {
136
+ width: 10%;
137
+ text-align: center;
138
+ }
139
+ .action-cell[data-v-d3070256] {
140
+ text-align: center;
141
+ }
142
+ .action-cell .el-button[data-v-d3070256] {
143
+ padding: var(--spacing-1);
144
+ }
145
+ .empty-state[data-v-d3070256] {
146
+ padding: var(--spacing-8);
147
+ text-align: center;
148
+ color: var(--color-text-secondary);
149
+ background-color: var(--color-background-secondary);
150
+ border-radius: var(--border-radius-lg);
151
+ }
152
+ .empty-state p[data-v-d3070256] {
153
+ margin: 0;
154
+ }
155
+ .empty-state .hint[data-v-d3070256] {
156
+ font-size: var(--font-size-base);
157
+ margin-top: var(--spacing-2);
158
+ color: var(--color-text-tertiary);
159
+ }