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
flowfile/__init__.py CHANGED
@@ -7,7 +7,9 @@ This package ties together the FlowFile ecosystem components:
7
7
  - flowfile_worker: Computation engine
8
8
  """
9
9
 
10
- __version__ = "0.3.9"
10
+ from importlib.metadata import version
11
+
12
+ __version__ = version("Flowfile")
11
13
 
12
14
  import os
13
15
  import logging
@@ -62,6 +64,9 @@ from polars.datatypes import (
62
64
  DataType, DataTypeClass, Field
63
65
  )
64
66
 
67
+ from flowfile_core.flowfile import node_designer
68
+
69
+
65
70
  __all__ = [
66
71
  # Core FlowFrame classes
67
72
  'FlowFrame', 'GroupByFrame', 'FullCloudStorageConnection',
@@ -84,6 +89,8 @@ __all__ = [
84
89
  'categorical', 'object_', 'list_', 'struct', 'all_',
85
90
  'by_dtype', 'contains', 'starts_with', 'ends_with', 'matches',
86
91
 
92
+ "node_designer",
93
+
87
94
  # Utilities
88
95
  'create_flow_graph', 'open_graph_in_editor',
89
96
 
flowfile/api.py CHANGED
@@ -331,7 +331,6 @@ def import_flow_to_editor(flow_path: Path, auth_token: str) -> Optional[int]:
331
331
  try:
332
332
  headers: Dict[str, str] = {"Authorization": f"Bearer {auth_token}"}
333
333
  params: Dict[str, str] = {"flow_path": str(flow_path)}
334
-
335
334
  response: requests.Response = requests.get(
336
335
  f"{FLOWFILE_BASE_URL}/import_flow/",
337
336
  params=params,
@@ -440,7 +439,7 @@ def open_graph_in_editor(flow_graph: FlowGraph, storage_location: Optional[str]
440
439
  temp_dir_obj: Optional[TemporaryDirectory] = None
441
440
  try:
442
441
  original_execution_settings = flow_graph.flow_settings.model_copy()
443
- flow_graph.flow_settings.execution_location = "auto"
442
+ flow_graph.flow_settings.execution_location = "local"
444
443
  flow_graph.flow_settings.execution_mode = "Development"
445
444
  flow_file_path, temp_dir_obj = _save_flow_to_location(flow_graph, storage_location)
446
445
  if not flow_file_path:
@@ -455,7 +454,6 @@ def open_graph_in_editor(flow_graph: FlowGraph, storage_location: Optional[str]
455
454
  return False
456
455
 
457
456
  flow_id = import_flow_to_editor(flow_file_path, auth_token)
458
- print(flow_id, "flow_id", flow_in_single_mode, automatically_open_browser)
459
457
  if flow_id is not None:
460
458
  if flow_in_single_mode and automatically_open_browser:
461
459
  _open_flow_in_browser(flow_id)
@@ -1,5 +1,5 @@
1
- import { f as fetchCloudStorageConnectionsInterfaces, c as createCloudStorageConnectionApi, d as deleteCloudStorageConnectionApi } from "./api-cb00cce6.js";
2
- import { d as defineComponent, r as ref, m as watch, l as computed, c as openBlock, e as createElementBlock, p as createBaseVNode, a5 as withDirectives, a6 as vModelText, ag as vModelSelect, F as Fragment, q as renderList, t as toDisplayString, i as createCommentVNode, ah as vModelDynamic, s as normalizeClass, ai as vModelCheckbox, v as withModifiers, n as onMounted, g as createTextVNode, f as createVNode, w as withCtx, u as unref, z as ElMessage, aj as ElDialog, ak as ElButton, _ as _export_sfc } from "./index-683fc198.js";
1
+ import { f as fetchCloudStorageConnectionsInterfaces, c as createCloudStorageConnectionApi, d as deleteCloudStorageConnectionApi } from "./api-c1bad5ca.js";
2
+ import { d as defineComponent, r as ref, m as watch, l as computed, c as openBlock, e as createElementBlock, p as createBaseVNode, a8 as withDirectives, a9 as vModelText, ak as vModelSelect, F as Fragment, q as renderList, t as toDisplayString, i as createCommentVNode, al as vModelDynamic, s as normalizeClass, am as vModelCheckbox, v as withModifiers, n as onMounted, g as createTextVNode, f as createVNode, w as withCtx, u as unref, z as ElMessage, an as ElDialog, ao as ElButton, _ as _export_sfc } from "./index-5429bbf8.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" };
@@ -1,10 +1,9 @@
1
- import { d as defineComponent, r as ref, c as openBlock, e as createElementBlock, f as createVNode, w as withCtx, p as createBaseVNode, a5 as withDirectives, F as Fragment, q as renderList, t as toDisplayString, ag as vModelSelect, g as createTextVNode, i as createCommentVNode, a6 as vModelText, ai as vModelCheckbox, h as createBlock, u as unref, z as ElMessage, _ as _export_sfc, n as onMounted, R as nextTick, a7 as Teleport } from "./index-683fc198.js";
2
- import { C as CodeLoader } from "./vue-content-loader.es-ba94b82f.js";
3
- import { u as useNodeStore } from "./vue-codemirror.esm-dc5e3348.js";
4
- import { f as fetchCloudStorageConnectionsInterfaces } from "./api-cb00cce6.js";
5
- import { G as GenericNodeSettings } from "./genericNodeSettings-def5879b.js";
6
- import { N as NodeButton, a as NodeTitle } from "./nodeTitle-a16db7c3.js";
7
- import "./designer-6c322d8e.js";
1
+ import { d as defineComponent, r as ref, c as openBlock, e as createElementBlock, f as createVNode, w as withCtx, p as createBaseVNode, a8 as withDirectives, ak as vModelSelect, F as Fragment, q as renderList, t as toDisplayString, g as createTextVNode, i as createCommentVNode, a9 as vModelText, am as vModelCheckbox, h as createBlock, u as unref, z as ElMessage, _ as _export_sfc } from "./index-5429bbf8.js";
2
+ import { C as CodeLoader } from "./vue-content-loader.es-2c8e608f.js";
3
+ import { u as useNodeStore } from "./vue-codemirror.esm-41b0e0d7.js";
4
+ import { f as fetchCloudStorageConnectionsInterfaces } from "./api-c1bad5ca.js";
5
+ import { G as GenericNodeSettings } from "./genericNodeSettings-4fe5f36b.js";
6
+ import "./designer-9633482a.js";
8
7
  const createNodeCloudStorageReader = (flowId, nodeId) => {
9
8
  const cloudStorageReadSettings = {
10
9
  auth_mode: "aws-cli",
@@ -26,7 +25,7 @@ const createNodeCloudStorageReader = (flowId, nodeId) => {
26
25
  };
27
26
  return nodePolarsCode;
28
27
  };
29
- const _hoisted_1$1 = {
28
+ const _hoisted_1 = {
30
29
  key: 0,
31
30
  class: "cloud-storage-container"
32
31
  };
@@ -67,7 +66,7 @@ const _hoisted_20 = {
67
66
  key: 3,
68
67
  class: "info-box"
69
68
  };
70
- const _sfc_main$1 = /* @__PURE__ */ defineComponent({
69
+ const _sfc_main = /* @__PURE__ */ defineComponent({
71
70
  __name: "CloudStorageReader",
72
71
  props: {
73
72
  nodeId: {}
@@ -202,7 +201,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
202
201
  pushNodeData
203
202
  });
204
203
  return (_ctx, _cache) => {
205
- return dataLoaded.value && nodeCloudStorageReader.value ? (openBlock(), createElementBlock("div", _hoisted_1$1, [
204
+ return dataLoaded.value && nodeCloudStorageReader.value ? (openBlock(), createElementBlock("div", _hoisted_1, [
206
205
  createVNode(GenericNodeSettings, {
207
206
  modelValue: nodeCloudStorageReader.value,
208
207
  "onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => nodeCloudStorageReader.value = $event)
@@ -365,73 +364,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
365
364
  }
366
365
  });
367
366
  const CloudStorageReader_vue_vue_type_style_index_0_scoped_8f1c7f30_lang = "";
368
- const CloudStorageReader = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-8f1c7f30"]]);
369
- const _hoisted_1 = { ref: "el" };
370
- const _sfc_main = /* @__PURE__ */ defineComponent({
371
- __name: "CloudStorageReader",
372
- props: {
373
- nodeId: {
374
- type: Number,
375
- required: true
376
- }
377
- },
378
- setup(__props) {
379
- const nodeStore = useNodeStore();
380
- const childComp = ref(null);
381
- const props = __props;
382
- const drawer = ref(false);
383
- const closeOnDrawer = () => {
384
- var _a;
385
- drawer.value = false;
386
- (_a = childComp.value) == null ? void 0 : _a.pushNodeData();
387
- };
388
- const openDrawer = async () => {
389
- if (nodeStore.node_id === props.nodeId) {
390
- return;
391
- }
392
- nodeStore.closeDrawer();
393
- drawer.value = true;
394
- const drawerOpen = nodeStore.isDrawerOpen;
395
- nodeStore.isDrawerOpen = true;
396
- await nextTick();
397
- if (nodeStore.node_id === props.nodeId && drawerOpen) {
398
- return;
399
- }
400
- if (childComp.value) {
401
- childComp.value.loadNodeData(props.nodeId);
402
- nodeStore.openDrawer(closeOnDrawer);
403
- }
404
- };
405
- onMounted(async () => {
406
- await nextTick();
407
- });
408
- return (_ctx, _cache) => {
409
- return openBlock(), createElementBlock("div", _hoisted_1, [
410
- createVNode(NodeButton, {
411
- ref: "nodeButton",
412
- "node-id": __props.nodeId,
413
- "image-src": "cloud_storage_reader.png",
414
- title: `${__props.nodeId}: Cloud storage reader`,
415
- onClick: openDrawer
416
- }, null, 8, ["node-id", "title"]),
417
- drawer.value ? (openBlock(), createBlock(Teleport, {
418
- key: 0,
419
- to: "#nodesettings"
420
- }, [
421
- createVNode(NodeTitle, {
422
- title: "Read data from cloud provider",
423
- intro: "Read data from cloud provider"
424
- }),
425
- createVNode(CloudStorageReader, {
426
- ref_key: "childComp",
427
- ref: childComp,
428
- "node-id": __props.nodeId
429
- }, null, 8, ["node-id"])
430
- ])) : createCommentVNode("", true)
431
- ], 512);
432
- };
433
- }
434
- });
367
+ const CloudStorageReader = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-8f1c7f30"]]);
435
368
  export {
436
- _sfc_main as default
369
+ CloudStorageReader as default
437
370
  };
@@ -1,10 +1,9 @@
1
- import { d as defineComponent, r as ref, c as openBlock, e as createElementBlock, f as createVNode, w as withCtx, p as createBaseVNode, a5 as withDirectives, F as Fragment, q as renderList, t as toDisplayString, ag as vModelSelect, g as createTextVNode, i as createCommentVNode, a6 as vModelText, h as createBlock, u as unref, z as ElMessage, _ as _export_sfc, n as onMounted, R as nextTick, a7 as Teleport } from "./index-683fc198.js";
2
- import { C as CodeLoader } from "./vue-content-loader.es-ba94b82f.js";
3
- import { u as useNodeStore } from "./vue-codemirror.esm-dc5e3348.js";
4
- import { f as fetchCloudStorageConnectionsInterfaces } from "./api-cb00cce6.js";
5
- import { G as GenericNodeSettings } from "./genericNodeSettings-def5879b.js";
6
- import { N as NodeButton, a as NodeTitle } from "./nodeTitle-a16db7c3.js";
7
- import "./designer-6c322d8e.js";
1
+ import { d as defineComponent, r as ref, c as openBlock, e as createElementBlock, f as createVNode, w as withCtx, p as createBaseVNode, a8 as withDirectives, ak as vModelSelect, F as Fragment, q as renderList, t as toDisplayString, g as createTextVNode, i as createCommentVNode, a9 as vModelText, h as createBlock, u as unref, z as ElMessage, _ as _export_sfc } from "./index-5429bbf8.js";
2
+ import { C as CodeLoader } from "./vue-content-loader.es-2c8e608f.js";
3
+ import { u as useNodeStore } from "./vue-codemirror.esm-41b0e0d7.js";
4
+ import { f as fetchCloudStorageConnectionsInterfaces } from "./api-c1bad5ca.js";
5
+ import { G as GenericNodeSettings } from "./genericNodeSettings-4fe5f36b.js";
6
+ import "./designer-9633482a.js";
8
7
  const createNodeCloudStorageWriter = (flowId, nodeId) => {
9
8
  const cloudStorageWriteSettings = {
10
9
  auth_mode: "aws-cli",
@@ -28,7 +27,7 @@ const createNodeCloudStorageWriter = (flowId, nodeId) => {
28
27
  };
29
28
  return nodeWriter;
30
29
  };
31
- const _hoisted_1$1 = {
30
+ const _hoisted_1 = {
32
31
  key: 0,
33
32
  class: "cloud-storage-container"
34
33
  };
@@ -72,7 +71,7 @@ const _hoisted_20 = {
72
71
  key: 3,
73
72
  class: "info-box"
74
73
  };
75
- const _sfc_main$1 = /* @__PURE__ */ defineComponent({
74
+ const _sfc_main = /* @__PURE__ */ defineComponent({
76
75
  __name: "CloudStorageWriter",
77
76
  props: {
78
77
  nodeId: {}
@@ -202,7 +201,7 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
202
201
  pushNodeData
203
202
  });
204
203
  return (_ctx, _cache) => {
205
- return dataLoaded.value && nodeCloudStorageWriter.value ? (openBlock(), createElementBlock("div", _hoisted_1$1, [
204
+ return dataLoaded.value && nodeCloudStorageWriter.value ? (openBlock(), createElementBlock("div", _hoisted_1, [
206
205
  createVNode(GenericNodeSettings, {
207
206
  modelValue: nodeCloudStorageWriter.value,
208
207
  "onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => nodeCloudStorageWriter.value = $event)
@@ -357,74 +356,8 @@ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
357
356
  };
358
357
  }
359
358
  });
360
- const CloudStorageWriter_vue_vue_type_style_index_0_scoped_55743049_lang = "";
361
- const CloudStorageReader = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-55743049"]]);
362
- const _hoisted_1 = { ref: "el" };
363
- const _sfc_main = /* @__PURE__ */ defineComponent({
364
- __name: "CloudStorageWriter",
365
- props: {
366
- nodeId: {
367
- type: Number,
368
- required: true
369
- }
370
- },
371
- setup(__props) {
372
- const nodeStore = useNodeStore();
373
- const childComp = ref(null);
374
- const props = __props;
375
- const drawer = ref(false);
376
- const closeOnDrawer = () => {
377
- var _a;
378
- drawer.value = false;
379
- (_a = childComp.value) == null ? void 0 : _a.pushNodeData();
380
- };
381
- const openDrawer = async () => {
382
- if (nodeStore.node_id === props.nodeId) {
383
- return;
384
- }
385
- nodeStore.closeDrawer();
386
- drawer.value = true;
387
- const drawerOpen = nodeStore.isDrawerOpen;
388
- nodeStore.isDrawerOpen = true;
389
- await nextTick();
390
- if (nodeStore.node_id === props.nodeId && drawerOpen) {
391
- return;
392
- }
393
- if (childComp.value) {
394
- childComp.value.loadNodeData(props.nodeId);
395
- nodeStore.openDrawer(closeOnDrawer);
396
- }
397
- };
398
- onMounted(async () => {
399
- await nextTick();
400
- });
401
- return (_ctx, _cache) => {
402
- return openBlock(), createElementBlock("div", _hoisted_1, [
403
- createVNode(NodeButton, {
404
- ref: "nodeButton",
405
- "node-id": __props.nodeId,
406
- "image-src": "cloud_storage_writer.png",
407
- title: `${__props.nodeId}: Cloud storage writer`,
408
- onClick: openDrawer
409
- }, null, 8, ["node-id", "title"]),
410
- drawer.value ? (openBlock(), createBlock(Teleport, {
411
- key: 0,
412
- to: "#nodesettings"
413
- }, [
414
- createVNode(NodeTitle, {
415
- title: "Write data to cloud provider",
416
- intro: "Write data to cloud provider"
417
- }),
418
- createVNode(CloudStorageReader, {
419
- ref_key: "childComp",
420
- ref: childComp,
421
- "node-id": __props.nodeId
422
- }, null, 8, ["node-id"])
423
- ])) : createCommentVNode("", true)
424
- ], 512);
425
- };
426
- }
427
- });
359
+ const CloudStorageWriter_vue_vue_type_style_index_0_scoped_9ee12e64_lang = "";
360
+ const CloudStorageWriter = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-9ee12e64"]]);
428
361
  export {
429
- _sfc_main as default
362
+ CloudStorageWriter as default
430
363
  };
@@ -1,42 +1,42 @@
1
1
 
2
2
  /* Copied styles from the reader component for consistency */
3
- .cloud-storage-container[data-v-55743049] {
3
+ .cloud-storage-container[data-v-9ee12e64] {
4
4
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
5
5
  max-width: 100%;
6
6
  color: #333;
7
7
  }
8
- .section-subtitle[data-v-55743049] {
8
+ .section-subtitle[data-v-9ee12e64] {
9
9
  margin: 0 0 0.75rem 0;
10
10
  font-size: 0.95rem;
11
11
  font-weight: 600;
12
12
  color: #4a5568;
13
13
  }
14
- .subsection-title[data-v-55743049] {
14
+ .subsection-title[data-v-9ee12e64] {
15
15
  margin: 0.5rem 0 0.5rem 0;
16
16
  font-size: 0.875rem;
17
17
  font-weight: 600;
18
18
  color: #718096;
19
19
  }
20
- .format-options[data-v-55743049] {
20
+ .format-options[data-v-9ee12e64] {
21
21
  margin-top: 1rem;
22
22
  padding: 1rem;
23
23
  background-color: #f7fafc;
24
24
  border-radius: 4px;
25
25
  border: 1px solid #e2e8f0;
26
26
  }
27
- .form-row[data-v-55743049] {
27
+ .form-row[data-v-9ee12e64] {
28
28
  display: flex;
29
29
  gap: 0.75rem;
30
30
  margin-bottom: 0.75rem;
31
31
  width: 100%;
32
32
  box-sizing: border-box;
33
33
  }
34
- .half[data-v-55743049] {
34
+ .half[data-v-9ee12e64] {
35
35
  flex: 1;
36
36
  min-width: 0;
37
37
  max-width: calc(50% - 0.375rem);
38
38
  }
39
- .form-control[data-v-55743049] {
39
+ .form-control[data-v-9ee12e64] {
40
40
  width: 100%;
41
41
  padding: 0.5rem;
42
42
  border: 1px solid #e2e8f0;
@@ -44,18 +44,18 @@
44
44
  font-size: 0.875rem;
45
45
  box-sizing: border-box;
46
46
  }
47
- .form-group[data-v-55743049] {
47
+ .form-group[data-v-9ee12e64] {
48
48
  margin-bottom: 0.75rem;
49
49
  width: 100%;
50
50
  }
51
- label[data-v-55743049] {
51
+ label[data-v-9ee12e64] {
52
52
  display: block;
53
53
  margin-bottom: 0.25rem;
54
54
  font-size: 0.875rem;
55
55
  font-weight: 500;
56
56
  color: #4a5568;
57
57
  }
58
- select.form-control[data-v-55743049] {
58
+ select.form-control[data-v-9ee12e64] {
59
59
  appearance: none;
60
60
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%234a5568' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
61
61
  background-repeat: no-repeat;
@@ -63,7 +63,7 @@ select.form-control[data-v-55743049] {
63
63
  background-size: 1em;
64
64
  padding-right: 2rem;
65
65
  }
66
- .info-box[data-v-55743049] {
66
+ .info-box[data-v-9ee12e64] {
67
67
  display: flex;
68
68
  gap: 0.75rem;
69
69
  padding: 0.75rem;
@@ -73,24 +73,24 @@ select.form-control[data-v-55743049] {
73
73
  margin-top: 1rem;
74
74
  font-size: 0.875rem;
75
75
  }
76
- .info-box.info-warn[data-v-55743049] {
76
+ .info-box.info-warn[data-v-9ee12e64] {
77
77
  background-color: #fffbe6;
78
78
  border-left-color: #faad14;
79
79
  }
80
- .info-box.info-warn i[data-v-55743049] {
80
+ .info-box.info-warn i[data-v-9ee12e64] {
81
81
  color: #faad14;
82
82
  }
83
- .info-box i[data-v-55743049] {
83
+ .info-box i[data-v-9ee12e64] {
84
84
  color: #1890ff;
85
85
  font-size: 1.25rem;
86
86
  flex-shrink: 0;
87
87
  padding-top: 2px;
88
88
  }
89
- .info-box p[data-v-55743049] {
89
+ .info-box p[data-v-9ee12e64] {
90
90
  margin: 0;
91
91
  color: #4a5568;
92
92
  }
93
- .helper-text[data-v-55743049] {
93
+ .helper-text[data-v-9ee12e64] {
94
94
  display: flex;
95
95
  align-items: center;
96
96
  gap: 0.5rem;
@@ -98,41 +98,41 @@ select.form-control[data-v-55743049] {
98
98
  font-size: 0.8125rem;
99
99
  color: #718096;
100
100
  }
101
- .helper-text i[data-v-55743049] {
101
+ .helper-text i[data-v-9ee12e64] {
102
102
  color: #4299e1;
103
103
  font-size: 0.875rem;
104
104
  }
105
- .loading-state[data-v-55743049] {
105
+ .loading-state[data-v-9ee12e64] {
106
106
  display: flex;
107
107
  flex-direction: column;
108
108
  align-items: center;
109
109
  gap: 0.5rem;
110
110
  padding: 1rem;
111
111
  }
112
- .loading-state p[data-v-55743049] {
112
+ .loading-state p[data-v-9ee12e64] {
113
113
  margin: 0;
114
114
  color: #718096;
115
115
  font-size: 0.875rem;
116
116
  }
117
- .loading-spinner[data-v-55743049] {
117
+ .loading-spinner[data-v-9ee12e64] {
118
118
  width: 2rem;
119
119
  height: 2rem;
120
120
  border: 2px solid #e2e8f0;
121
121
  border-top-color: #4299e1;
122
122
  border-radius: 50%;
123
- animation: spin-55743049 0.8s linear infinite;
123
+ animation: spin-9ee12e64 0.8s linear infinite;
124
124
  }
125
- @keyframes spin-55743049 {
125
+ @keyframes spin-9ee12e64 {
126
126
  to {
127
127
  transform: rotate(360deg);
128
128
  }
129
129
  }
130
130
  @media (max-width: 640px) {
131
- .form-row[data-v-55743049] {
131
+ .form-row[data-v-9ee12e64] {
132
132
  flex-direction: column;
133
133
  gap: 0.5rem;
134
134
  }
135
- .half[data-v-55743049] {
135
+ .half[data-v-9ee12e64] {
136
136
  max-width: 100%;
137
137
  }
138
138
  }
@@ -0,0 +1,83 @@
1
+ import { d as defineComponent, l as computed, b as resolveComponent, c as openBlock, e as createElementBlock, p as createBaseVNode, g as createTextVNode, t as toDisplayString, i as createCommentVNode, f as createVNode, w as withCtx, F as Fragment, q as renderList, h as createBlock, _ as _export_sfc } from "./index-5429bbf8.js";
2
+ const _hoisted_1 = { class: "component-container" };
3
+ const _hoisted_2 = { class: "listbox-subtitle" };
4
+ const _hoisted_3 = {
5
+ key: 0,
6
+ class: "required-indicator"
7
+ };
8
+ const _hoisted_4 = { class: "column-type" };
9
+ const _sfc_main = /* @__PURE__ */ defineComponent({
10
+ __name: "ColumnSelector",
11
+ props: {
12
+ schema: {
13
+ type: Object,
14
+ required: true
15
+ },
16
+ modelValue: {
17
+ type: [String, Array],
18
+ default: () => []
19
+ },
20
+ incomingColumns: {
21
+ type: Array,
22
+ default: () => []
23
+ }
24
+ },
25
+ emits: ["update:modelValue"],
26
+ setup(__props) {
27
+ const props = __props;
28
+ const filteredColumns = computed(() => {
29
+ console.log("props.schem.data_types", props.schema);
30
+ console.log("incoming columns", props.incomingColumns);
31
+ if (!props.schema.data_types || props.schema.data_types === "ALL") {
32
+ return props.incomingColumns;
33
+ }
34
+ if (Array.isArray(props.schema.data_types)) {
35
+ return props.incomingColumns.filter((column) => {
36
+ return props.schema.data_types.includes(column.data_type);
37
+ });
38
+ }
39
+ return props.incomingColumns;
40
+ });
41
+ return (_ctx, _cache) => {
42
+ const _component_el_option = resolveComponent("el-option");
43
+ const _component_el_select = resolveComponent("el-select");
44
+ return openBlock(), createElementBlock("div", _hoisted_1, [
45
+ createBaseVNode("label", _hoisted_2, [
46
+ createTextVNode(toDisplayString(__props.schema.label) + " ", 1),
47
+ __props.schema.required ? (openBlock(), createElementBlock("span", _hoisted_3, "*")) : createCommentVNode("", true)
48
+ ]),
49
+ createVNode(_component_el_select, {
50
+ "model-value": __props.modelValue,
51
+ multiple: __props.schema.multiple,
52
+ filterable: "",
53
+ placeholder: __props.schema.multiple ? "Select columns..." : "Select a column...",
54
+ style: { "width": "100%" },
55
+ size: "large",
56
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => _ctx.$emit("update:modelValue", $event))
57
+ }, {
58
+ default: withCtx(() => [
59
+ (openBlock(true), createElementBlock(Fragment, null, renderList(filteredColumns.value, (column) => {
60
+ return openBlock(), createBlock(_component_el_option, {
61
+ key: column.name,
62
+ label: column.name,
63
+ value: column.name
64
+ }, {
65
+ default: withCtx(() => [
66
+ createBaseVNode("span", null, toDisplayString(column.name), 1),
67
+ createBaseVNode("span", _hoisted_4, toDisplayString(column.data_type), 1)
68
+ ]),
69
+ _: 2
70
+ }, 1032, ["label", "value"]);
71
+ }), 128))
72
+ ]),
73
+ _: 1
74
+ }, 8, ["model-value", "multiple", "placeholder"])
75
+ ]);
76
+ };
77
+ }
78
+ });
79
+ const ColumnSelector_vue_vue_type_style_index_0_scoped_ee9d221e_lang = "";
80
+ const ColumnSelector = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-ee9d221e"]]);
81
+ export {
82
+ ColumnSelector as default
83
+ };
@@ -0,0 +1,10 @@
1
+
2
+ .required-indicator[data-v-ee9d221e] {
3
+ color: #f56c6c;
4
+ margin-left: 4px;
5
+ }
6
+ .column-type[data-v-ee9d221e] {
7
+ font-size: 0.75rem;
8
+ color: #909399;
9
+ margin-left: 8px;
10
+ }
@@ -0,0 +1,41 @@
1
+ import { d as defineComponent, c as openBlock, e as createElementBlock, p as createBaseVNode, F as Fragment, q as renderList, s as normalizeClass, t as toDisplayString, T as normalizeStyle, _ as _export_sfc } from "./index-5429bbf8.js";
2
+ const _hoisted_1 = ["onClick"];
3
+ const _sfc_main = /* @__PURE__ */ defineComponent({
4
+ __name: "ContextMenu",
5
+ props: {
6
+ position: { type: Object, required: true },
7
+ options: {
8
+ type: Array,
9
+ required: true
10
+ }
11
+ },
12
+ emits: ["select", "close"],
13
+ setup(__props, { emit: __emit }) {
14
+ const emit = __emit;
15
+ const selectOption = (action) => {
16
+ emit("select", action);
17
+ emit("close");
18
+ };
19
+ return (_ctx, _cache) => {
20
+ return openBlock(), createElementBlock("div", {
21
+ class: "context-menu",
22
+ style: normalizeStyle({ top: __props.position.y + "px", left: __props.position.x + "px" })
23
+ }, [
24
+ createBaseVNode("ul", null, [
25
+ (openBlock(true), createElementBlock(Fragment, null, renderList(__props.options, (option) => {
26
+ return openBlock(), createElementBlock("li", {
27
+ key: option.action,
28
+ class: normalizeClass({ disabled: option.disabled }),
29
+ onClick: ($event) => !option.disabled && selectOption(option.action)
30
+ }, toDisplayString(option.label), 11, _hoisted_1);
31
+ }), 128))
32
+ ])
33
+ ], 4);
34
+ };
35
+ }
36
+ });
37
+ const ContextMenu_vue_vue_type_style_index_0_scoped_4f9e01e5_lang = "";
38
+ const ContextMenu = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-4f9e01e5"]]);
39
+ export {
40
+ ContextMenu as default
41
+ };
@@ -24,24 +24,3 @@
24
24
  .context-menu li[data-v-a562ba5e]:hover:not(.disabled) {
25
25
  background-color: #f0f0f0;
26
26
  }
27
-
28
- .items-container[data-v-89e3a043] {
29
- display: flex;
30
- flex-wrap: wrap;
31
- gap: 10px; /* Space between items */
32
- }
33
- .item-box[data-v-89e3a043] {
34
- display: flex;
35
- align-items: center;
36
- padding: 5px 10px;
37
- background-color: #f0f0f0;
38
- border-radius: 4px;
39
- font-size: 12px; /* Font size set to 12px */
40
- position: relative;
41
- }
42
- .remove-btn[data-v-89e3a043] {
43
- margin-left: 8px;
44
- cursor: pointer;
45
- color: #100f0f72;
46
- font-weight: bold;
47
- }
@@ -0,0 +1,26 @@
1
+
2
+ .context-menu[data-v-d0286fd2] {
3
+ position: fixed;
4
+ z-index: 1000;
5
+ border: 1px solid #ccc;
6
+ background-color: white;
7
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
8
+ border-radius: 4px;
9
+ user-select: none;
10
+ }
11
+ .context-menu ul[data-v-d0286fd2] {
12
+ list-style: none;
13
+ padding: 0;
14
+ margin: 0;
15
+ }
16
+ .context-menu li[data-v-d0286fd2] {
17
+ padding: 8px 16px;
18
+ cursor: pointer;
19
+ }
20
+ .context-menu li.disabled[data-v-d0286fd2] {
21
+ color: #ccc;
22
+ cursor: not-allowed;
23
+ }
24
+ .context-menu li[data-v-d0286fd2]:hover:not(.disabled) {
25
+ background-color: #f0f0f0;
26
+ }