Flowfile 0.5.1__py3-none-any.whl → 0.5.4__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 (346) hide show
  1. build_backends/main.py +25 -22
  2. build_backends/main_prd.py +10 -19
  3. flowfile/__init__.py +194 -74
  4. flowfile/__main__.py +10 -7
  5. flowfile/api.py +51 -57
  6. flowfile/web/__init__.py +14 -9
  7. flowfile/web/static/assets/AdminView-f53bad23.css +129 -0
  8. flowfile/web/static/assets/AdminView-f9847d67.js +713 -0
  9. flowfile/web/static/assets/CloudConnectionView-cf85f943.css +72 -0
  10. flowfile/web/static/assets/{CloudConnectionManager-0dfba9f2.js → CloudConnectionView-faace55b.js} +11 -11
  11. flowfile/web/static/assets/{CloudStorageReader-29d14fcc.css → CloudStorageReader-24c54524.css} +27 -27
  12. flowfile/web/static/assets/{CloudStorageReader-d5b1b6c9.js → CloudStorageReader-d86ecaa7.js} +10 -8
  13. flowfile/web/static/assets/{CloudStorageWriter-00d87aad.js → CloudStorageWriter-0f4d9a44.js} +10 -8
  14. flowfile/web/static/assets/{CloudStorageWriter-b0ee067f.css → CloudStorageWriter-60547855.css} +26 -26
  15. flowfile/web/static/assets/ColumnActionInput-c44b7aee.css +159 -0
  16. flowfile/web/static/assets/ColumnActionInput-f4189ae0.js +330 -0
  17. flowfile/web/static/assets/{ColumnSelector-47996a16.css → ColumnSelector-371637fb.css} +2 -2
  18. flowfile/web/static/assets/{ColumnSelector-4685e75d.js → ColumnSelector-e66b33da.js} +3 -5
  19. flowfile/web/static/assets/ContextMenu-49463352.js +9 -0
  20. flowfile/web/static/assets/ContextMenu-dd5f3f25.js +9 -0
  21. flowfile/web/static/assets/ContextMenu-f709b884.js +9 -0
  22. flowfile/web/static/assets/ContextMenu.vue_vue_type_script_setup_true_lang-a1bd6314.js +59 -0
  23. flowfile/web/static/assets/{CrossJoin-702a3edd.js → CrossJoin-24694b8f.js} +12 -10
  24. flowfile/web/static/assets/{CrossJoin-1119d18e.css → CrossJoin-71b4cc10.css} +20 -20
  25. flowfile/web/static/assets/{CustomNode-b1519993.js → CustomNode-569d45ff.js} +43 -24
  26. flowfile/web/static/assets/CustomNode-edb9b939.css +42 -0
  27. flowfile/web/static/assets/{DatabaseConnectionSettings-0c04b2e5.css → DatabaseConnectionSettings-c20a1e16.css} +23 -21
  28. flowfile/web/static/assets/{DatabaseConnectionSettings-6f3e4ea5.js → DatabaseConnectionSettings-cfc08938.js} +5 -4
  29. flowfile/web/static/assets/{DatabaseReader-ae61773c.css → DatabaseReader-5bf8c75b.css} +41 -46
  30. flowfile/web/static/assets/{DatabaseReader-d38c7295.js → DatabaseReader-701feabb.js} +25 -15
  31. flowfile/web/static/assets/{DatabaseManager-cf5ef661.js → DatabaseView-0482e5b5.js} +11 -11
  32. flowfile/web/static/assets/DatabaseView-6655afd6.css +57 -0
  33. flowfile/web/static/assets/{DatabaseWriter-b04ef46a.js → DatabaseWriter-16721989.js} +17 -10
  34. flowfile/web/static/assets/{DatabaseWriter-2f570e53.css → DatabaseWriter-bdcf2c8b.css} +29 -27
  35. flowfile/web/static/assets/{designer-8da3ba3a.css → DesignerView-49abb835.css} +783 -663
  36. flowfile/web/static/assets/{designer-9633482a.js → DesignerView-f64749fb.js} +1292 -3253
  37. flowfile/web/static/assets/{documentation-ca400224.js → DocumentationView-61bd2990.js} +5 -5
  38. flowfile/web/static/assets/{documentation-12216a74.css → DocumentationView-9ea6e871.css} +9 -9
  39. flowfile/web/static/assets/{ExploreData-2d0cf4db.css → ExploreData-10c5acc8.css} +13 -12
  40. flowfile/web/static/assets/{ExploreData-5fa10ed8.js → ExploreData-e2735b13.js} +18 -9
  41. flowfile/web/static/assets/{ExternalSource-d39af878.js → ExternalSource-2535c3b2.js} +9 -7
  42. flowfile/web/static/assets/{ExternalSource-e37b6275.css → ExternalSource-7ac7373f.css} +20 -20
  43. flowfile/web/static/assets/Filter-2cdbc93c.js +287 -0
  44. flowfile/web/static/assets/Filter-7494ea97.css +48 -0
  45. flowfile/web/static/assets/{Formula-bb96803d.css → Formula-53d58c43.css} +7 -7
  46. flowfile/web/static/assets/{Formula-6b04fb1d.js → Formula-fcda3c2c.js} +13 -11
  47. flowfile/web/static/assets/{FuzzyMatch-1010f966.css → FuzzyMatch-ad6361d6.css} +68 -69
  48. flowfile/web/static/assets/{FuzzyMatch-999521f4.js → FuzzyMatch-f8d3b7d3.js} +12 -10
  49. flowfile/web/static/assets/{Pivot-cf333e3d.css → GraphSolver-4b4d7db9.css} +5 -5
  50. flowfile/web/static/assets/{GraphSolver-17dd2198.js → GraphSolver-72eaa695.js} +14 -12
  51. flowfile/web/static/assets/GroupBy-5792782d.css +9 -0
  52. flowfile/web/static/assets/{GroupBy-6b039e18.js → GroupBy-8aa0598b.js} +9 -7
  53. flowfile/web/static/assets/{Join-fd79b451.css → Join-28b5e18f.css} +22 -22
  54. flowfile/web/static/assets/{Join-24d0f113.js → Join-e40f0ffa.js} +13 -11
  55. flowfile/web/static/assets/LoginView-5111c9ae.js +134 -0
  56. flowfile/web/static/assets/LoginView-d325d632.css +172 -0
  57. flowfile/web/static/assets/ManualInput-3702e677.css +293 -0
  58. flowfile/web/static/assets/{ManualInput-34639209.js → ManualInput-9b6f3224.js} +170 -116
  59. flowfile/web/static/assets/{MultiSelect-0e8724a3.js → MultiSelect-ef28e19e.js} +2 -2
  60. flowfile/web/static/assets/{MultiSelect.vue_vue_type_script_setup_true_lang-b0e538c2.js → MultiSelect.vue_vue_type_script_setup_true_lang-83b3bbfd.js} +1 -1
  61. flowfile/web/static/assets/NodeDesigner-94cd4dd3.css +1429 -0
  62. flowfile/web/static/assets/NodeDesigner-d2b7ee2b.js +2712 -0
  63. flowfile/web/static/assets/{NumericInput-3d63a470.js → NumericInput-1d789794.js} +2 -2
  64. flowfile/web/static/assets/{NumericInput.vue_vue_type_script_setup_true_lang-e0edeccc.js → NumericInput.vue_vue_type_script_setup_true_lang-7775f83e.js} +5 -2
  65. flowfile/web/static/assets/Output-692dd25d.css +37 -0
  66. flowfile/web/static/assets/{Output-edea9802.js → Output-cefef801.js} +14 -10
  67. flowfile/web/static/assets/{GraphSolver-f0cb7bfb.css → Pivot-0eda81b4.css} +5 -5
  68. flowfile/web/static/assets/{Pivot-61d19301.js → Pivot-bab1b75b.js} +12 -10
  69. flowfile/web/static/assets/PivotValidation-0e905b1a.css +13 -0
  70. flowfile/web/static/assets/PivotValidation-41b57ad6.css +13 -0
  71. flowfile/web/static/assets/{PivotValidation-f97fec5b.js → PivotValidation-e7941f91.js} +3 -3
  72. flowfile/web/static/assets/{PivotValidation-de9f43fe.js → PivotValidation-fba09336.js} +3 -3
  73. flowfile/web/static/assets/{PolarsCode-650322d1.css → PolarsCode-2b1f1f23.css} +4 -4
  74. flowfile/web/static/assets/{PolarsCode-bc3c9984.js → PolarsCode-740e40fa.js} +18 -9
  75. flowfile/web/static/assets/PopOver-862d7e28.js +939 -0
  76. flowfile/web/static/assets/PopOver-d96599db.css +33 -0
  77. flowfile/web/static/assets/{Read-64a3f259.js → Read-225cc63f.js} +16 -12
  78. flowfile/web/static/assets/{Read-e808b239.css → Read-90f366bc.css} +15 -15
  79. flowfile/web/static/assets/{RecordCount-3d5039be.js → RecordCount-ffc71eca.js} +6 -4
  80. flowfile/web/static/assets/{RecordId-597510e0.js → RecordId-a70bb8df.js} +9 -7
  81. flowfile/web/static/assets/{SQLQueryComponent-df51adbe.js → SQLQueryComponent-15a421f5.js} +3 -3
  82. flowfile/web/static/assets/SQLQueryComponent-edb90b98.css +29 -0
  83. flowfile/web/static/assets/{Sample-4be0a507.js → Sample-6c26afc7.js} +6 -4
  84. flowfile/web/static/assets/SecretSelector-6329f743.css +43 -0
  85. flowfile/web/static/assets/SecretSelector-ceed9496.js +113 -0
  86. flowfile/web/static/assets/{SecretManager-4839be57.js → SecretsView-214d255a.js} +35 -36
  87. flowfile/web/static/assets/SecretsView-aa291340.css +38 -0
  88. flowfile/web/static/assets/{Select-9b72f201.js → Select-8fc29999.js} +9 -7
  89. flowfile/web/static/assets/{SettingsSection-71e6b7e3.css → SettingsSection-07fbbc39.css} +4 -4
  90. flowfile/web/static/assets/{SettingsSection-5c696bee.css → SettingsSection-26fe48d4.css} +4 -4
  91. flowfile/web/static/assets/{SettingsSection-7ded385d.js → SettingsSection-3f70e4c3.js} +3 -3
  92. flowfile/web/static/assets/{SettingsSection-f0f75a42.js → SettingsSection-83090218.js} +3 -3
  93. flowfile/web/static/assets/{SettingsSection-2e4d03c4.css → SettingsSection-8f980839.css} +4 -4
  94. flowfile/web/static/assets/{SettingsSection-e1e9c953.js → SettingsSection-9f0d1725.js} +3 -3
  95. flowfile/web/static/assets/SetupView-3fa0aa03.js +160 -0
  96. flowfile/web/static/assets/SetupView-e2da3442.css +230 -0
  97. flowfile/web/static/assets/{SingleSelect-6c777aac.js → SingleSelect-a4a568cb.js} +2 -2
  98. flowfile/web/static/assets/{SingleSelect.vue_vue_type_script_setup_true_lang-33e3ff9b.js → SingleSelect.vue_vue_type_script_setup_true_lang-c8ebdd33.js} +1 -1
  99. flowfile/web/static/assets/{SliderInput-7cb93e62.js → SliderInput-be533e71.js} +7 -4
  100. flowfile/web/static/assets/SliderInput-f2e4f23c.css +4 -0
  101. flowfile/web/static/assets/{Sort-6cbde21a.js → Sort-154dad81.js} +9 -7
  102. flowfile/web/static/assets/Sort-4abb7fae.css +9 -0
  103. flowfile/web/static/assets/{TextInput-d9a40c11.js → TextInput-454e2bda.js} +2 -2
  104. flowfile/web/static/assets/{TextInput.vue_vue_type_script_setup_true_lang-5896c375.js → TextInput.vue_vue_type_script_setup_true_lang-e86510d0.js} +5 -2
  105. flowfile/web/static/assets/{TextToRows-5d2c1190.css → TextToRows-12afb4f4.css} +10 -10
  106. flowfile/web/static/assets/{TextToRows-c4fcbf4d.js → TextToRows-ea73433d.js} +11 -10
  107. flowfile/web/static/assets/{ToggleSwitch-4ef91d19.js → ToggleSwitch-9d7b30f1.js} +2 -2
  108. flowfile/web/static/assets/{ToggleSwitch.vue_vue_type_script_setup_true_lang-38478c20.js → ToggleSwitch.vue_vue_type_script_setup_true_lang-00f2580e.js} +1 -1
  109. flowfile/web/static/assets/{UnavailableFields-5edd5322.css → UnavailableFields-394a1f78.css} +14 -14
  110. flowfile/web/static/assets/{UnavailableFields-a03f512c.js → UnavailableFields-b72a2c72.js} +4 -4
  111. flowfile/web/static/assets/{Union-bfe9b996.js → Union-1e44f263.js} +8 -6
  112. flowfile/web/static/assets/{Union-af6c3d9b.css → Union-d6a8d7d5.css} +7 -7
  113. flowfile/web/static/assets/Unique-2b705521.css +3 -0
  114. flowfile/web/static/assets/{Unique-5d023a27.js → Unique-a3bc6d0a.js} +13 -10
  115. flowfile/web/static/assets/{Unpivot-1e422df3.css → Unpivot-b6ad6427.css} +7 -7
  116. flowfile/web/static/assets/{Unpivot-91cc5354.js → Unpivot-e27935fc.js} +11 -9
  117. flowfile/web/static/assets/{UnpivotValidation-7ee2de44.js → UnpivotValidation-72497680.js} +3 -3
  118. flowfile/web/static/assets/UnpivotValidation-d5ca3b7b.css +13 -0
  119. flowfile/web/static/assets/{VueGraphicWalker-ed5ab88b.css → VueGraphicWalker-430f0b86.css} +1 -1
  120. flowfile/web/static/assets/{VueGraphicWalker-e51b9924.js → VueGraphicWalker-d9ab70a3.js} +4 -4
  121. flowfile/web/static/assets/{api-cf1221f0.js → api-a2102880.js} +1 -1
  122. flowfile/web/static/assets/{api-c1bad5ca.js → api-f75042b0.js} +1 -1
  123. flowfile/web/static/assets/{dropDown-35135ba8.css → dropDown-1d6acbd9.css} +41 -41
  124. flowfile/web/static/assets/{dropDown-614b998d.js → dropDown-2798a109.js} +3 -3
  125. flowfile/web/static/assets/{fullEditor-f7971590.js → fullEditor-cf7d7d93.js} +11 -10
  126. flowfile/web/static/assets/{fullEditor-178376bb.css → fullEditor-fe9f7e18.css} +77 -65
  127. flowfile/web/static/assets/{genericNodeSettings-4fe5f36b.js → genericNodeSettings-14eac1c3.js} +5 -5
  128. flowfile/web/static/assets/{genericNodeSettings-924759c7.css → genericNodeSettings-3b2507ea.css} +10 -10
  129. flowfile/web/static/assets/{index-5429bbf8.js → index-387a6f18.js} +41806 -40958
  130. flowfile/web/static/assets/index-6b367bb5.js +38 -0
  131. flowfile/web/static/assets/{index-50508d4d.css → index-e96ab018.css} +2184 -569
  132. flowfile/web/static/assets/index-f0a6e5a5.js +2696 -0
  133. flowfile/web/static/assets/node.types-2c15bb7e.js +82 -0
  134. flowfile/web/static/assets/nodeInput-ed2ae8d7.js +2 -0
  135. flowfile/web/static/assets/{outputCsv-076b85ab.js → outputCsv-3c1757e8.js} +3 -3
  136. flowfile/web/static/assets/outputCsv-b9a072af.css +2499 -0
  137. flowfile/web/static/assets/{outputExcel-0fd17dbe.js → outputExcel-686e1f48.js} +3 -3
  138. flowfile/web/static/assets/{outputExcel-b41305c0.css → outputExcel-f5d272b2.css} +26 -26
  139. flowfile/web/static/assets/outputParquet-54597c3c.css +4 -0
  140. flowfile/web/static/assets/{outputParquet-b61e0847.js → outputParquet-df28faa7.js} +4 -4
  141. flowfile/web/static/assets/{readCsv-c767cb37.css → readCsv-3bfac4c3.css} +15 -15
  142. flowfile/web/static/assets/{readCsv-a8bb8b61.js → readCsv-e37eee21.js} +3 -3
  143. flowfile/web/static/assets/{readExcel-806d2826.css → readExcel-3db6b763.css} +13 -13
  144. flowfile/web/static/assets/{readExcel-67b4aee0.js → readExcel-a13f14bb.js} +5 -5
  145. flowfile/web/static/assets/{readParquet-92ce1dbc.js → readParquet-344cf746.js} +3 -3
  146. flowfile/web/static/assets/{readParquet-48c81530.css → readParquet-c5244ad5.css} +4 -4
  147. flowfile/web/static/assets/secrets.api-ae198c5c.js +65 -0
  148. flowfile/web/static/assets/{selectDynamic-92e25ee3.js → selectDynamic-6b4b0767.js} +5 -5
  149. flowfile/web/static/assets/{selectDynamic-aa913ff4.css → selectDynamic-f2fb394f.css} +21 -20
  150. flowfile/web/static/assets/{vue-codemirror.esm-41b0e0d7.js → vue-codemirror.esm-31ba0e0b.js} +31 -640
  151. flowfile/web/static/assets/{vue-content-loader.es-2c8e608f.js → vue-content-loader.es-4469c8ff.js} +1 -1
  152. flowfile/web/static/index.html +2 -2
  153. {flowfile-0.5.1.dist-info → flowfile-0.5.4.dist-info}/METADATA +3 -4
  154. flowfile-0.5.4.dist-info/RECORD +407 -0
  155. flowfile_core/__init__.py +13 -6
  156. flowfile_core/auth/jwt.py +51 -16
  157. flowfile_core/auth/models.py +32 -7
  158. flowfile_core/auth/password.py +89 -0
  159. flowfile_core/auth/secrets.py +64 -19
  160. flowfile_core/configs/__init__.py +9 -7
  161. flowfile_core/configs/flow_logger.py +15 -14
  162. flowfile_core/configs/node_store/__init__.py +72 -4
  163. flowfile_core/configs/node_store/nodes.py +155 -172
  164. flowfile_core/configs/node_store/user_defined_node_registry.py +108 -27
  165. flowfile_core/configs/settings.py +28 -15
  166. flowfile_core/database/connection.py +7 -6
  167. flowfile_core/database/init_db.py +96 -2
  168. flowfile_core/database/models.py +3 -1
  169. flowfile_core/fileExplorer/__init__.py +17 -0
  170. flowfile_core/fileExplorer/funcs.py +145 -57
  171. flowfile_core/fileExplorer/utils.py +10 -11
  172. flowfile_core/flowfile/_extensions/real_time_interface.py +10 -8
  173. flowfile_core/flowfile/analytics/analytics_processor.py +26 -24
  174. flowfile_core/flowfile/analytics/graphic_walker.py +11 -12
  175. flowfile_core/flowfile/analytics/utils.py +1 -1
  176. flowfile_core/flowfile/code_generator/__init__.py +11 -0
  177. flowfile_core/flowfile/code_generator/code_generator.py +706 -247
  178. flowfile_core/flowfile/connection_manager/_connection_manager.py +6 -5
  179. flowfile_core/flowfile/connection_manager/models.py +1 -1
  180. flowfile_core/flowfile/database_connection_manager/db_connections.py +60 -44
  181. flowfile_core/flowfile/database_connection_manager/models.py +1 -1
  182. flowfile_core/flowfile/extensions.py +17 -12
  183. flowfile_core/flowfile/flow_data_engine/cloud_storage_reader.py +34 -32
  184. flowfile_core/flowfile/flow_data_engine/create/funcs.py +115 -83
  185. flowfile_core/flowfile/flow_data_engine/flow_data_engine.py +493 -423
  186. flowfile_core/flowfile/flow_data_engine/flow_file_column/interface.py +2 -2
  187. flowfile_core/flowfile/flow_data_engine/flow_file_column/main.py +92 -52
  188. flowfile_core/flowfile/flow_data_engine/flow_file_column/polars_type.py +12 -11
  189. flowfile_core/flowfile/flow_data_engine/flow_file_column/type_registry.py +6 -6
  190. flowfile_core/flowfile/flow_data_engine/flow_file_column/utils.py +26 -30
  191. flowfile_core/flowfile/flow_data_engine/fuzzy_matching/prepare_for_fuzzy_match.py +31 -20
  192. flowfile_core/flowfile/flow_data_engine/join/__init__.py +1 -1
  193. flowfile_core/flowfile/flow_data_engine/join/utils.py +11 -9
  194. flowfile_core/flowfile/flow_data_engine/join/verify_integrity.py +14 -15
  195. flowfile_core/flowfile/flow_data_engine/pivot_table.py +5 -7
  196. flowfile_core/flowfile/flow_data_engine/polars_code_parser.py +95 -82
  197. flowfile_core/flowfile/flow_data_engine/read_excel_tables.py +66 -65
  198. flowfile_core/flowfile/flow_data_engine/sample_data.py +27 -21
  199. flowfile_core/flowfile/flow_data_engine/subprocess_operations/__init__.py +1 -1
  200. flowfile_core/flowfile/flow_data_engine/subprocess_operations/models.py +13 -11
  201. flowfile_core/flowfile/flow_data_engine/subprocess_operations/subprocess_operations.py +190 -127
  202. flowfile_core/flowfile/flow_data_engine/threaded_processes.py +8 -8
  203. flowfile_core/flowfile/flow_data_engine/utils.py +99 -67
  204. flowfile_core/flowfile/flow_graph.py +920 -571
  205. flowfile_core/flowfile/flow_graph_utils.py +31 -49
  206. flowfile_core/flowfile/flow_node/flow_node.py +379 -258
  207. flowfile_core/flowfile/flow_node/models.py +53 -41
  208. flowfile_core/flowfile/flow_node/schema_callback.py +14 -19
  209. flowfile_core/flowfile/graph_tree/graph_tree.py +41 -41
  210. flowfile_core/flowfile/handler.py +80 -30
  211. flowfile_core/flowfile/manage/compatibility_enhancements.py +209 -126
  212. flowfile_core/flowfile/manage/io_flowfile.py +54 -57
  213. flowfile_core/flowfile/node_designer/__init__.py +19 -13
  214. flowfile_core/flowfile/node_designer/_type_registry.py +34 -37
  215. flowfile_core/flowfile/node_designer/custom_node.py +162 -36
  216. flowfile_core/flowfile/node_designer/ui_components.py +278 -34
  217. flowfile_core/flowfile/schema_callbacks.py +71 -51
  218. flowfile_core/flowfile/setting_generator/__init__.py +0 -1
  219. flowfile_core/flowfile/setting_generator/setting_generator.py +6 -5
  220. flowfile_core/flowfile/setting_generator/settings.py +64 -53
  221. flowfile_core/flowfile/sources/external_sources/base_class.py +12 -10
  222. flowfile_core/flowfile/sources/external_sources/custom_external_sources/external_source.py +27 -17
  223. flowfile_core/flowfile/sources/external_sources/custom_external_sources/sample_users.py +9 -9
  224. flowfile_core/flowfile/sources/external_sources/factory.py +0 -1
  225. flowfile_core/flowfile/sources/external_sources/sql_source/models.py +45 -31
  226. flowfile_core/flowfile/sources/external_sources/sql_source/sql_source.py +198 -73
  227. flowfile_core/flowfile/sources/external_sources/sql_source/utils.py +250 -196
  228. flowfile_core/flowfile/util/calculate_layout.py +9 -13
  229. flowfile_core/flowfile/util/execution_orderer.py +25 -17
  230. flowfile_core/flowfile/util/node_skipper.py +4 -4
  231. flowfile_core/flowfile/utils.py +19 -21
  232. flowfile_core/main.py +26 -19
  233. flowfile_core/routes/auth.py +284 -11
  234. flowfile_core/routes/cloud_connections.py +25 -25
  235. flowfile_core/routes/logs.py +21 -29
  236. flowfile_core/routes/public.py +46 -4
  237. flowfile_core/routes/routes.py +70 -34
  238. flowfile_core/routes/secrets.py +25 -27
  239. flowfile_core/routes/user_defined_components.py +483 -4
  240. flowfile_core/run_lock.py +0 -1
  241. flowfile_core/schemas/__init__.py +4 -6
  242. flowfile_core/schemas/analysis_schemas/graphic_walker_schemas.py +55 -55
  243. flowfile_core/schemas/cloud_storage_schemas.py +96 -66
  244. flowfile_core/schemas/input_schema.py +231 -144
  245. flowfile_core/schemas/output_model.py +49 -34
  246. flowfile_core/schemas/schemas.py +116 -89
  247. flowfile_core/schemas/transform_schema.py +518 -263
  248. flowfile_core/schemas/yaml_types.py +21 -7
  249. flowfile_core/secret_manager/secret_manager.py +123 -18
  250. flowfile_core/types.py +29 -9
  251. flowfile_core/utils/arrow_reader.py +7 -6
  252. flowfile_core/utils/excel_file_manager.py +3 -3
  253. flowfile_core/utils/fileManager.py +7 -7
  254. flowfile_core/utils/fl_executor.py +8 -10
  255. flowfile_core/utils/utils.py +4 -4
  256. flowfile_core/utils/validate_setup.py +5 -4
  257. flowfile_frame/__init__.py +117 -51
  258. flowfile_frame/adapters.py +2 -9
  259. flowfile_frame/adding_expr.py +73 -32
  260. flowfile_frame/cloud_storage/frame_helpers.py +27 -23
  261. flowfile_frame/cloud_storage/secret_manager.py +12 -26
  262. flowfile_frame/config.py +2 -5
  263. flowfile_frame/database/__init__.py +36 -0
  264. flowfile_frame/database/connection_manager.py +205 -0
  265. flowfile_frame/database/frame_helpers.py +249 -0
  266. flowfile_frame/expr.py +311 -218
  267. flowfile_frame/expr.pyi +160 -159
  268. flowfile_frame/expr_name.py +23 -23
  269. flowfile_frame/flow_frame.py +571 -476
  270. flowfile_frame/flow_frame.pyi +123 -104
  271. flowfile_frame/flow_frame_methods.py +227 -246
  272. flowfile_frame/group_frame.py +50 -20
  273. flowfile_frame/join.py +2 -2
  274. flowfile_frame/lazy.py +129 -87
  275. flowfile_frame/lazy_methods.py +83 -30
  276. flowfile_frame/list_name_space.py +55 -50
  277. flowfile_frame/selectors.py +148 -68
  278. flowfile_frame/series.py +9 -7
  279. flowfile_frame/utils.py +19 -21
  280. flowfile_worker/__init__.py +12 -7
  281. flowfile_worker/configs.py +41 -33
  282. flowfile_worker/create/__init__.py +14 -9
  283. flowfile_worker/create/funcs.py +114 -77
  284. flowfile_worker/create/models.py +46 -43
  285. flowfile_worker/create/pl_types.py +14 -15
  286. flowfile_worker/create/read_excel_tables.py +34 -41
  287. flowfile_worker/create/utils.py +22 -19
  288. flowfile_worker/external_sources/s3_source/main.py +18 -51
  289. flowfile_worker/external_sources/s3_source/models.py +34 -27
  290. flowfile_worker/external_sources/sql_source/main.py +8 -5
  291. flowfile_worker/external_sources/sql_source/models.py +13 -9
  292. flowfile_worker/flow_logger.py +10 -8
  293. flowfile_worker/funcs.py +214 -155
  294. flowfile_worker/main.py +11 -17
  295. flowfile_worker/models.py +35 -28
  296. flowfile_worker/process_manager.py +2 -3
  297. flowfile_worker/routes.py +121 -90
  298. flowfile_worker/secrets.py +114 -21
  299. flowfile_worker/spawner.py +89 -54
  300. flowfile_worker/utils.py +3 -2
  301. shared/__init__.py +2 -7
  302. shared/storage_config.py +25 -13
  303. test_utils/postgres/commands.py +3 -2
  304. test_utils/postgres/fixtures.py +9 -9
  305. test_utils/s3/commands.py +1 -1
  306. test_utils/s3/data_generator.py +3 -4
  307. test_utils/s3/demo_data_generator.py +4 -7
  308. test_utils/s3/fixtures.py +7 -5
  309. tools/migrate/__init__.py +1 -1
  310. tools/migrate/__main__.py +16 -29
  311. tools/migrate/legacy_schemas.py +251 -190
  312. tools/migrate/migrate.py +193 -181
  313. tools/migrate/tests/conftest.py +1 -3
  314. tools/migrate/tests/test_migrate.py +36 -41
  315. tools/migrate/tests/test_migration_e2e.py +28 -29
  316. tools/migrate/tests/test_node_migrations.py +50 -20
  317. flowfile/web/static/assets/CloudConnectionManager-2dfdce2f.css +0 -86
  318. flowfile/web/static/assets/ContextMenu-23e909da.js +0 -41
  319. flowfile/web/static/assets/ContextMenu-4c74eef1.css +0 -26
  320. flowfile/web/static/assets/ContextMenu-63cfa99b.css +0 -26
  321. flowfile/web/static/assets/ContextMenu-70ae0c79.js +0 -41
  322. flowfile/web/static/assets/ContextMenu-c13f91d0.css +0 -26
  323. flowfile/web/static/assets/ContextMenu-f149cf7c.js +0 -41
  324. flowfile/web/static/assets/CustomNode-74a37f74.css +0 -32
  325. flowfile/web/static/assets/DatabaseManager-30fa27e5.css +0 -64
  326. flowfile/web/static/assets/Filter-9b6d08db.js +0 -164
  327. flowfile/web/static/assets/Filter-f62091b3.css +0 -20
  328. flowfile/web/static/assets/GroupBy-b9505323.css +0 -51
  329. flowfile/web/static/assets/ManualInput-3246a08d.css +0 -96
  330. flowfile/web/static/assets/Output-283fe388.css +0 -37
  331. flowfile/web/static/assets/PivotValidation-891ddfb0.css +0 -13
  332. flowfile/web/static/assets/PivotValidation-c46cd420.css +0 -13
  333. flowfile/web/static/assets/SQLQueryComponent-36cef432.css +0 -27
  334. flowfile/web/static/assets/SliderInput-b8fb6a8c.css +0 -4
  335. flowfile/web/static/assets/Sort-3643d625.css +0 -51
  336. flowfile/web/static/assets/Unique-f9fb0809.css +0 -51
  337. flowfile/web/static/assets/UnpivotValidation-0d240eeb.css +0 -13
  338. flowfile/web/static/assets/nodeInput-5d0d6b79.js +0 -41
  339. flowfile/web/static/assets/outputCsv-9cc59e0b.css +0 -2499
  340. flowfile/web/static/assets/outputParquet-cf8cf3f2.css +0 -4
  341. flowfile/web/static/assets/secretApi-68435402.js +0 -46
  342. flowfile/web/static/assets/vue-codemirror-bccfde04.css +0 -32
  343. flowfile-0.5.1.dist-info/RECORD +0 -388
  344. {flowfile-0.5.1.dist-info → flowfile-0.5.4.dist-info}/WHEEL +0 -0
  345. {flowfile-0.5.1.dist-info → flowfile-0.5.4.dist-info}/entry_points.txt +0 -0
  346. {flowfile-0.5.1.dist-info → flowfile-0.5.4.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,1429 @@
1
+
2
+ .component-palette .panel-content[data-v-7eeb4ea6] {
3
+ padding: 0.5rem;
4
+ }
5
+ .component-item[data-v-7eeb4ea6] {
6
+ display: flex;
7
+ align-items: center;
8
+ gap: 0.5rem;
9
+ padding: 0.5rem 0.75rem;
10
+ margin-bottom: 0.25rem;
11
+ background: var(--bg-secondary);
12
+ border: 1px solid var(--border-color);
13
+ border-radius: 4px;
14
+ cursor: grab;
15
+ transition: all 0.2s;
16
+ }
17
+ .component-item[data-v-7eeb4ea6]:hover {
18
+ background: var(--bg-hover);
19
+ border-color: var(--primary-color);
20
+ }
21
+ .component-item i[data-v-7eeb4ea6] {
22
+ width: 20px;
23
+ text-align: center;
24
+ color: var(--primary-color);
25
+ }
26
+ .component-item span[data-v-7eeb4ea6] {
27
+ font-size: 0.8125rem;
28
+ }
29
+
30
+ .section-card[data-v-17318956] {
31
+ border: 1px solid var(--border-color);
32
+ border-radius: 6px;
33
+ margin-bottom: 0.75rem;
34
+ background: var(--bg-secondary);
35
+ }
36
+ .section-card.selected[data-v-17318956] {
37
+ border-color: var(--primary-color);
38
+ box-shadow: 0 0 0 2px rgba(var(--primary-rgb), 0.1);
39
+ }
40
+ .section-header[data-v-17318956] {
41
+ display: flex;
42
+ justify-content: space-between;
43
+ align-items: flex-start;
44
+ padding: 0.75rem;
45
+ border-bottom: 1px solid var(--border-color);
46
+ gap: 0.5rem;
47
+ }
48
+ .section-fields[data-v-17318956] {
49
+ display: flex;
50
+ gap: 0.75rem;
51
+ flex: 1;
52
+ }
53
+ .section-field[data-v-17318956] {
54
+ display: flex;
55
+ flex-direction: column;
56
+ gap: 0.25rem;
57
+ flex: 1;
58
+ }
59
+ .section-field label[data-v-17318956] {
60
+ font-size: 0.6875rem;
61
+ font-weight: 500;
62
+ color: var(--text-secondary);
63
+ text-transform: uppercase;
64
+ letter-spacing: 0.02em;
65
+ }
66
+ .section-name-input[data-v-17318956],
67
+ .section-title-input[data-v-17318956] {
68
+ padding: 0.375rem 0.5rem;
69
+ border: 1px solid var(--border-color);
70
+ border-radius: 4px;
71
+ background: var(--input-bg, #fff);
72
+ font-size: 0.8125rem;
73
+ color: var(--text-primary);
74
+ width: 100%;
75
+ }
76
+ .section-name-input[data-v-17318956] {
77
+ font-family: "Fira Code", "Monaco", monospace;
78
+ font-size: 0.75rem;
79
+ }
80
+ .section-title-input[data-v-17318956] {
81
+ font-weight: 500;
82
+ }
83
+ .section-name-input[data-v-17318956]:focus,
84
+ .section-title-input[data-v-17318956]:focus {
85
+ outline: none;
86
+ border-color: var(--primary-color, #4a6cf7);
87
+ box-shadow: 0 0 0 2px rgba(74, 108, 247, 0.1);
88
+ }
89
+ .btn-icon[data-v-17318956] {
90
+ background: transparent;
91
+ border: none;
92
+ color: var(--text-secondary);
93
+ cursor: pointer;
94
+ padding: 0.25rem;
95
+ border-radius: 4px;
96
+ }
97
+ .btn-icon[data-v-17318956]:hover {
98
+ background: var(--bg-hover);
99
+ color: var(--danger-color);
100
+ }
101
+ .section-components[data-v-17318956] {
102
+ padding: 0.5rem;
103
+ min-height: 60px;
104
+ }
105
+ .component-card[data-v-17318956] {
106
+ display: flex;
107
+ justify-content: space-between;
108
+ align-items: center;
109
+ padding: 0.5rem 0.75rem;
110
+ margin-bottom: 0.25rem;
111
+ background: var(--card-bg);
112
+ border: 1px solid var(--border-color);
113
+ border-radius: 4px;
114
+ cursor: pointer;
115
+ }
116
+ .component-card[data-v-17318956]:hover {
117
+ border-color: var(--primary-color);
118
+ }
119
+ .component-card.selected[data-v-17318956] {
120
+ border-color: var(--primary-color);
121
+ background: rgba(var(--primary-rgb), 0.05);
122
+ }
123
+ .component-preview[data-v-17318956] {
124
+ display: flex;
125
+ align-items: center;
126
+ gap: 0.5rem;
127
+ }
128
+ .component-preview i[data-v-17318956] {
129
+ color: var(--primary-color);
130
+ }
131
+ .component-label[data-v-17318956] {
132
+ font-weight: 500;
133
+ }
134
+ .component-type[data-v-17318956] {
135
+ font-size: 0.75rem;
136
+ color: var(--text-secondary);
137
+ }
138
+ .btn-remove[data-v-17318956] {
139
+ opacity: 0;
140
+ transition: opacity 0.2s;
141
+ }
142
+ .component-card:hover .btn-remove[data-v-17318956] {
143
+ opacity: 1;
144
+ }
145
+ .drop-zone[data-v-17318956] {
146
+ display: flex;
147
+ flex-direction: column;
148
+ align-items: center;
149
+ justify-content: center;
150
+ padding: 1rem;
151
+ border: 2px dashed var(--border-color);
152
+ border-radius: 4px;
153
+ color: var(--text-secondary);
154
+ font-size: 0.8125rem;
155
+ }
156
+ .drop-zone i[data-v-17318956] {
157
+ margin-bottom: 0.25rem;
158
+ }
159
+
160
+ .property-form[data-v-30942683] {
161
+ display: flex;
162
+ flex-direction: column;
163
+ gap: var(--spacing-4);
164
+ }
165
+ .component-type-badge[data-v-30942683] {
166
+ display: inline-flex;
167
+ align-items: center;
168
+ gap: 0.5rem;
169
+ padding: 0.5rem 0.75rem;
170
+ background: var(--color-background-secondary, #f3f4f6);
171
+ border-radius: var(--border-radius-md, 6px);
172
+ font-size: var(--font-size-sm, 0.875rem);
173
+ font-weight: var(--font-weight-medium, 500);
174
+ color: var(--color-text-primary, #374151);
175
+ }
176
+ .component-type-badge i[data-v-30942683] {
177
+ color: var(--color-text-secondary, #6b7280);
178
+ font-size: 0.875rem;
179
+ }
180
+ .property-group[data-v-30942683] {
181
+ display: flex;
182
+ flex-direction: column;
183
+ gap: var(--spacing-3, 0.75rem);
184
+ }
185
+ .property-editor[data-v-30942683] {
186
+ border: 1px solid var(--border-color, #e0e0e0);
187
+ border-radius: 8px;
188
+ padding: 1rem;
189
+ background: var(--bg-secondary, #f8f9fa);
190
+ }
191
+ .property-group-title[data-v-30942683] {
192
+ font-size: var(--font-size-xs, 0.75rem);
193
+ font-weight: var(--font-weight-semibold, 600);
194
+ color: var(--color-text-secondary, #6b7280);
195
+ text-transform: uppercase;
196
+ letter-spacing: 0.05em;
197
+ padding-bottom: var(--spacing-2, 0.5rem);
198
+ border-bottom: 1px solid var(--color-border-light, #e5e7eb);
199
+ }
200
+ .property-row[data-v-30942683] {
201
+ display: flex;
202
+ flex-direction: column;
203
+ gap: var(--spacing-1, 0.25rem);
204
+ }
205
+ .property-row.checkbox-row[data-v-30942683] {
206
+ flex-direction: row;
207
+ align-items: center;
208
+ justify-content: space-between;
209
+ }
210
+ .property-label[data-v-30942683] {
211
+ font-size: var(--font-size-sm, 0.875rem);
212
+ font-weight: var(--font-weight-medium, 500);
213
+ color: var(--color-text-secondary, #6b7280);
214
+ }
215
+ .required[data-v-30942683] {
216
+ color: var(--color-danger, #ef4444);
217
+ }
218
+ .property-input[data-v-30942683] {
219
+ width: 100%;
220
+ padding: var(--spacing-2, 0.5rem);
221
+ font-size: var(--font-size-sm, 0.875rem);
222
+ border: 1px solid var(--color-border-primary, #d1d5db);
223
+ border-radius: var(--border-radius-md, 6px);
224
+ background-color: var(--color-background-primary, #ffffff);
225
+ color: var(--color-text-primary, #374151);
226
+ transition: border-color var(--transition-fast, 0.15s);
227
+ }
228
+ .property-input[data-v-30942683]:focus {
229
+ outline: none;
230
+ border-color: var(--input-border-focus, #4a6cf7);
231
+ }
232
+ .property-checkbox[data-v-30942683] {
233
+ width: 18px;
234
+ height: 18px;
235
+ cursor: pointer;
236
+ accent-color: var(--primary-color, #4a6cf7);
237
+ }
238
+ .no-selection[data-v-30942683] {
239
+ display: flex;
240
+ flex-direction: column;
241
+ align-items: center;
242
+ justify-content: center;
243
+ height: 200px;
244
+ color: var(--color-text-secondary, #6b7280);
245
+ text-align: center;
246
+ }
247
+ .no-selection i[data-v-30942683] {
248
+ font-size: 2rem;
249
+ margin-bottom: 0.75rem;
250
+ opacity: 0.5;
251
+ }
252
+ .no-selection p[data-v-30942683] {
253
+ margin: 0;
254
+ font-size: var(--font-size-sm, 0.875rem);
255
+ }
256
+ .field-hint[data-v-30942683] {
257
+ font-size: var(--font-size-xs, 0.75rem);
258
+ color: var(--color-text-secondary, #6b7280);
259
+ margin-top: 0.25rem;
260
+ }
261
+ .action-section[data-v-30942683] {
262
+ display: flex;
263
+ flex-direction: column;
264
+ gap: 0.5rem;
265
+ padding-top: var(--spacing-4, 1rem);
266
+ border-top: 1px solid var(--color-border-light, #e5e7eb);
267
+ }
268
+ .action-btn[data-v-30942683] {
269
+ display: inline-flex;
270
+ align-items: center;
271
+ justify-content: center;
272
+ gap: 0.5rem;
273
+ padding: 0.625rem 1rem;
274
+ background: var(--primary-color, #4a6cf7);
275
+ color: white;
276
+ border: none;
277
+ border-radius: var(--border-radius-md, 6px);
278
+ font-size: var(--font-size-sm, 0.875rem);
279
+ font-weight: var(--font-weight-medium, 500);
280
+ cursor: pointer;
281
+ transition: background var(--transition-fast, 0.15s);
282
+ }
283
+ .action-btn[data-v-30942683]:hover {
284
+ background: var(--primary-color-hover, #3d5bd9);
285
+ }
286
+ .action-btn i[data-v-30942683] {
287
+ font-size: 0.875rem;
288
+ }
289
+
290
+ .help-section[data-v-3a89a078] {
291
+ margin-bottom: 1.5rem;
292
+ }
293
+ .help-section[data-v-3a89a078]:last-child {
294
+ margin-bottom: 0;
295
+ }
296
+ .help-section h4[data-v-3a89a078] {
297
+ margin: 0 0 0.75rem 0;
298
+ font-size: 1rem;
299
+ font-weight: 600;
300
+ color: var(--text-primary, #1a1a2e);
301
+ }
302
+ .help-section h5[data-v-3a89a078] {
303
+ margin: 0 0 0.5rem 0;
304
+ font-size: 0.875rem;
305
+ font-weight: 600;
306
+ color: var(--text-primary, #1a1a2e);
307
+ }
308
+ .help-section p[data-v-3a89a078] {
309
+ margin: 0 0 0.75rem 0;
310
+ color: var(--text-secondary, #6c757d);
311
+ line-height: 1.6;
312
+ font-size: 0.875rem;
313
+ }
314
+ .help-list[data-v-3a89a078] {
315
+ margin: 0.5rem 0;
316
+ padding-left: 1.5rem;
317
+ color: var(--text-secondary, #6c757d);
318
+ font-size: 0.875rem;
319
+ }
320
+ .help-list li[data-v-3a89a078] {
321
+ margin-bottom: 0.375rem;
322
+ line-height: 1.5;
323
+ }
324
+ .help-list code[data-v-3a89a078] {
325
+ background: var(--bg-secondary, #f8f9fa);
326
+ padding: 0.125rem 0.375rem;
327
+ border-radius: 3px;
328
+ font-family: var(--font-family-mono);
329
+ font-size: 0.8125rem;
330
+ }
331
+ .help-code[data-v-3a89a078] {
332
+ display: block;
333
+ background: var(--color-code-bg);
334
+ padding: 0.75rem 1rem;
335
+ border-radius: 6px;
336
+ font-family: var(--font-family-mono);
337
+ font-size: 0.8125rem;
338
+ overflow-x: auto;
339
+ margin: 0.5rem 0;
340
+ }
341
+ .help-code code[data-v-3a89a078] {
342
+ color: var(--color-code-text);
343
+ white-space: pre;
344
+ }
345
+ .help-code-small[data-v-3a89a078] {
346
+ display: block;
347
+ background: var(--color-code-bg);
348
+ padding: 0.5rem 0.75rem;
349
+ border-radius: 4px;
350
+ font-family: var(--font-family-mono);
351
+ font-size: 0.75rem;
352
+ overflow-x: auto;
353
+ margin: 0;
354
+ }
355
+ .help-code-small code[data-v-3a89a078] {
356
+ color: var(--color-code-text);
357
+ white-space: pre;
358
+ }
359
+ .help-note[data-v-3a89a078] {
360
+ display: flex;
361
+ align-items: flex-start;
362
+ gap: 0.5rem;
363
+ padding: 0.75rem;
364
+ background: var(--color-accent-subtle, #ecfeff);
365
+ border-radius: 6px;
366
+ border-left: 3px solid var(--color-accent, #0891b2);
367
+ margin-top: 0.75rem !important;
368
+ }
369
+ .help-note i[data-v-3a89a078] {
370
+ color: var(--color-accent, #0891b2);
371
+ flex-shrink: 0;
372
+ margin-top: 0.125rem;
373
+ }
374
+ .help-note code[data-v-3a89a078] {
375
+ background: var(--color-white-alpha-40);
376
+ padding: 0.125rem 0.375rem;
377
+ border-radius: 3px;
378
+ font-family: var(--font-family-mono);
379
+ font-size: 0.8125rem;
380
+ }
381
+ .pattern-grid[data-v-3a89a078] {
382
+ display: grid;
383
+ grid-template-columns: repeat(2, 1fr);
384
+ gap: 1rem;
385
+ margin-top: 0.75rem;
386
+ }
387
+ .pattern-item[data-v-3a89a078] {
388
+ background: var(--bg-secondary, #f8f9fa);
389
+ padding: 0.75rem;
390
+ border-radius: 6px;
391
+ border: 1px solid var(--border-color, #e0e0e0);
392
+ }
393
+ .shortcuts-grid[data-v-3a89a078] {
394
+ display: flex;
395
+ flex-direction: column;
396
+ gap: 0.5rem;
397
+ }
398
+ .shortcut[data-v-3a89a078] {
399
+ display: flex;
400
+ align-items: center;
401
+ gap: 0.75rem;
402
+ font-size: 0.875rem;
403
+ color: var(--text-secondary, #6c757d);
404
+ }
405
+ .shortcut kbd[data-v-3a89a078] {
406
+ display: inline-flex;
407
+ align-items: center;
408
+ justify-content: center;
409
+ min-width: 2rem;
410
+ padding: 0.25rem 0.5rem;
411
+ background: var(--bg-secondary, #f8f9fa);
412
+ border: 1px solid var(--border-color, #e0e0e0);
413
+ border-radius: 4px;
414
+ font-family: inherit;
415
+ font-size: 0.75rem;
416
+ font-weight: 500;
417
+ box-shadow: var(--shadow-xs);
418
+ }
419
+
420
+ /* Dark mode adjustments */
421
+ [data-theme="dark"] .help-note[data-v-3a89a078] {
422
+ background: var(--color-focus-ring-accent);
423
+ }
424
+ [data-theme="dark"] .help-note code[data-v-3a89a078] {
425
+ background: var(--color-black-alpha-20);
426
+ }
427
+ [data-theme="dark"] .help-list code[data-v-3a89a078] {
428
+ background: var(--color-background-tertiary, #0f3460);
429
+ }
430
+
431
+ .code-editor-section[data-v-7bd9927f] {
432
+ margin-top: 1rem;
433
+ margin-bottom: 1.5rem;
434
+ padding: 1.25rem;
435
+ background: var(--bg-secondary, #f8f9fa);
436
+ border: 1px solid var(--border-color, #e0e0e0);
437
+ border-radius: 8px;
438
+ }
439
+ .code-editor-header[data-v-7bd9927f] {
440
+ display: flex;
441
+ justify-content: space-between;
442
+ align-items: center;
443
+ margin-bottom: 0.5rem;
444
+ }
445
+ .code-editor-header h4[data-v-7bd9927f] {
446
+ margin: 0;
447
+ font-size: 1rem;
448
+ font-weight: 600;
449
+ color: var(--text-primary, #1a1a2e);
450
+ }
451
+ .help-btn[data-v-7bd9927f] {
452
+ display: inline-flex;
453
+ align-items: center;
454
+ gap: 0.375rem;
455
+ padding: 0.375rem 0.75rem;
456
+ background: var(--color-accent, #0891b2);
457
+ border: none;
458
+ border-radius: 4px;
459
+ color: white;
460
+ font-size: 0.8125rem;
461
+ font-weight: 500;
462
+ cursor: pointer;
463
+ transition: all 0.15s ease;
464
+ }
465
+ .help-btn[data-v-7bd9927f]:hover {
466
+ background: var(--color-accent-hover, #0e7490);
467
+ }
468
+ .help-btn i[data-v-7bd9927f] {
469
+ font-size: 0.875rem;
470
+ }
471
+ .code-hint[data-v-7bd9927f] {
472
+ margin: 0 0 1rem 0;
473
+ font-size: 0.8125rem;
474
+ color: var(--text-secondary, #6c757d);
475
+ line-height: 1.5;
476
+ }
477
+ .code-hint code[data-v-7bd9927f] {
478
+ background: var(--card-bg, #ffffff);
479
+ padding: 0.2rem 0.5rem;
480
+ border-radius: 4px;
481
+ font-size: 0.75rem;
482
+ border: 1px solid var(--border-color, #e0e0e0);
483
+ font-family: "Fira Code", "Monaco", monospace;
484
+ }
485
+ .code-editor-wrapper[data-v-7bd9927f] {
486
+ border: 1px solid var(--border-color, #e0e0e0);
487
+ border-radius: 6px;
488
+ overflow: hidden;
489
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
490
+ }
491
+
492
+ .code-preview[data-v-f74c8de3] {
493
+ background: var(--color-code-bg);
494
+ border-radius: var(--border-radius-sm);
495
+ overflow-x: auto;
496
+ }
497
+ .code-preview pre[data-v-f74c8de3] {
498
+ margin: 0;
499
+ padding: 1rem;
500
+ }
501
+ .code-preview code[data-v-f74c8de3] {
502
+ font-family: var(--font-family-mono);
503
+ font-size: 0.8125rem;
504
+ color: var(--color-code-text);
505
+ white-space: pre;
506
+ }
507
+
508
+ .modal-header-error[data-v-bf9df753] {
509
+ background: var(--color-danger-light);
510
+ border-bottom-color: var(--color-danger);
511
+ }
512
+ .modal-header-error .modal-title[data-v-bf9df753] {
513
+ color: var(--color-danger-hover);
514
+ }
515
+ .modal-header-error .modal-title i[data-v-bf9df753] {
516
+ margin-right: 0.5rem;
517
+ }
518
+ .validation-intro[data-v-bf9df753] {
519
+ margin: 0 0 1rem 0;
520
+ color: var(--text-secondary);
521
+ }
522
+ .validation-errors-list[data-v-bf9df753] {
523
+ list-style: none;
524
+ padding: 0;
525
+ margin: 0;
526
+ }
527
+ .validation-error-item[data-v-bf9df753] {
528
+ display: flex;
529
+ align-items: flex-start;
530
+ gap: 0.5rem;
531
+ padding: 0.5rem 0;
532
+ border-bottom: 1px solid var(--border-color);
533
+ color: var(--text-primary);
534
+ }
535
+ .validation-error-item[data-v-bf9df753]:last-child {
536
+ border-bottom: none;
537
+ }
538
+ .validation-error-item i[data-v-bf9df753] {
539
+ color: var(--color-danger-hover);
540
+ margin-top: 0.125rem;
541
+ }
542
+
543
+ .loading-indicator[data-v-fca09e8f] {
544
+ display: flex;
545
+ align-items: center;
546
+ justify-content: center;
547
+ gap: 0.5rem;
548
+ padding: 2rem;
549
+ color: var(--text-secondary);
550
+ }
551
+ .loading-indicator i[data-v-fca09e8f] {
552
+ font-size: 1.25rem;
553
+ }
554
+ .empty-nodes[data-v-fca09e8f] {
555
+ text-align: center;
556
+ padding: 3rem;
557
+ color: var(--text-secondary);
558
+ }
559
+ .empty-nodes i[data-v-fca09e8f] {
560
+ font-size: 3rem;
561
+ margin-bottom: 1rem;
562
+ opacity: 0.5;
563
+ }
564
+ .empty-nodes p[data-v-fca09e8f] {
565
+ margin: 0;
566
+ }
567
+ .empty-hint[data-v-fca09e8f] {
568
+ font-size: 0.8125rem;
569
+ margin-top: 0.5rem !important;
570
+ }
571
+ .nodes-grid[data-v-fca09e8f] {
572
+ display: grid;
573
+ grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
574
+ gap: 1rem;
575
+ }
576
+ .node-card[data-v-fca09e8f] {
577
+ background: var(--card-bg);
578
+ border: 1px solid var(--border-color);
579
+ border-radius: 8px;
580
+ cursor: pointer;
581
+ transition: all 0.2s;
582
+ overflow: hidden;
583
+ }
584
+ .node-card[data-v-fca09e8f]:hover {
585
+ border-color: var(--primary-color);
586
+ box-shadow: var(--shadow-md);
587
+ transform: translateY(-2px);
588
+ }
589
+ .node-card-header[data-v-fca09e8f] {
590
+ display: flex;
591
+ align-items: center;
592
+ gap: 0.5rem;
593
+ padding: 0.75rem 1rem;
594
+ background: var(--bg-secondary);
595
+ border-bottom: 1px solid var(--border-color);
596
+ }
597
+ .node-card-header i[data-v-fca09e8f] {
598
+ color: var(--primary-color);
599
+ }
600
+ .node-name[data-v-fca09e8f] {
601
+ font-weight: 600;
602
+ font-size: 0.9375rem;
603
+ }
604
+ .node-card-body[data-v-fca09e8f] {
605
+ padding: 0.75rem 1rem;
606
+ }
607
+ .node-category[data-v-fca09e8f] {
608
+ display: inline-block;
609
+ font-size: 0.6875rem;
610
+ font-weight: 500;
611
+ text-transform: uppercase;
612
+ padding: 0.125rem 0.5rem;
613
+ background: var(--primary-color);
614
+ color: var(--color-text-inverse);
615
+ border-radius: 3px;
616
+ margin-bottom: 0.5rem;
617
+ }
618
+ .node-description[data-v-fca09e8f] {
619
+ margin: 0;
620
+ font-size: 0.8125rem;
621
+ color: var(--text-secondary);
622
+ line-height: 1.4;
623
+ }
624
+ .node-card-footer[data-v-fca09e8f] {
625
+ padding: 0.5rem 1rem;
626
+ border-top: 1px solid var(--border-color);
627
+ background: var(--bg-secondary);
628
+ }
629
+ .node-file[data-v-fca09e8f] {
630
+ font-size: 0.75rem;
631
+ color: var(--text-secondary);
632
+ font-family: var(--font-family-mono);
633
+ }
634
+ .node-code-view[data-v-fca09e8f] {
635
+ border-radius: 6px;
636
+ overflow: hidden;
637
+ border: 1px solid var(--border-color, #3a3a4a);
638
+ }
639
+ .modal-header-error[data-v-fca09e8f] {
640
+ background: var(--color-danger-light);
641
+ border-bottom-color: var(--color-danger);
642
+ }
643
+ .modal-header-error .modal-title[data-v-fca09e8f] {
644
+ color: var(--color-danger-hover);
645
+ }
646
+ .modal-header-error .modal-title i[data-v-fca09e8f] {
647
+ margin-right: 0.5rem;
648
+ }
649
+ .delete-warning[data-v-fca09e8f] {
650
+ color: var(--color-danger-hover);
651
+ font-size: 0.875rem;
652
+ margin-top: 0.5rem;
653
+ }
654
+ .btn-danger[data-v-fca09e8f] {
655
+ background: var(--color-danger-hover);
656
+ color: var(--color-text-inverse);
657
+ }
658
+ .btn-danger[data-v-fca09e8f]:hover:not(:disabled) {
659
+ background: var(--color-danger-dark);
660
+ }
661
+
662
+ .modal-xl[data-v-865a257f] {
663
+ max-width: 900px;
664
+ }
665
+
666
+ /* Tabs */
667
+ .help-tabs[data-v-865a257f] {
668
+ display: flex;
669
+ gap: 0.25rem;
670
+ border-bottom: 1px solid var(--border-color, #e0e0e0);
671
+ margin-bottom: 1.5rem;
672
+ padding-bottom: 0;
673
+ }
674
+ .help-tab[data-v-865a257f] {
675
+ display: flex;
676
+ align-items: center;
677
+ gap: 0.5rem;
678
+ padding: 0.75rem 1rem;
679
+ background: transparent;
680
+ border: none;
681
+ border-bottom: 2px solid transparent;
682
+ color: var(--text-secondary, #6c757d);
683
+ font-size: 0.875rem;
684
+ font-weight: 500;
685
+ cursor: pointer;
686
+ transition: all 0.15s ease;
687
+ margin-bottom: -1px;
688
+ }
689
+ .help-tab[data-v-865a257f]:hover {
690
+ color: var(--text-primary, #1a1a2e);
691
+ background: var(--bg-secondary, #f8f9fa);
692
+ }
693
+ .help-tab.active[data-v-865a257f] {
694
+ color: var(--color-accent, #0891b2);
695
+ border-bottom-color: var(--color-accent, #0891b2);
696
+ }
697
+ .help-tab i[data-v-865a257f] {
698
+ font-size: 0.875rem;
699
+ }
700
+
701
+ /* Tab content */
702
+ .tab-panel h4[data-v-865a257f] {
703
+ margin: 0 0 0.75rem 0;
704
+ font-size: 1rem;
705
+ font-weight: 600;
706
+ color: var(--text-primary, #1a1a2e);
707
+ }
708
+ .tab-panel h4[data-v-865a257f]:not(:first-child) {
709
+ margin-top: 1.5rem;
710
+ }
711
+ .tab-panel p[data-v-865a257f] {
712
+ margin: 0 0 1rem 0;
713
+ color: var(--text-secondary, #6c757d);
714
+ line-height: 1.6;
715
+ font-size: 0.875rem;
716
+ }
717
+
718
+ /* Feature grid */
719
+ .feature-grid[data-v-865a257f] {
720
+ display: grid;
721
+ grid-template-columns: repeat(3, 1fr);
722
+ gap: 1rem;
723
+ margin-bottom: 1.5rem;
724
+ }
725
+ .feature-card[data-v-865a257f] {
726
+ padding: 1rem;
727
+ background: var(--bg-secondary, #f8f9fa);
728
+ border: 1px solid var(--border-color, #e0e0e0);
729
+ border-radius: 8px;
730
+ text-align: center;
731
+ }
732
+ .feature-icon[data-v-865a257f] {
733
+ width: 3rem;
734
+ height: 3rem;
735
+ margin: 0 auto 0.75rem;
736
+ display: flex;
737
+ align-items: center;
738
+ justify-content: center;
739
+ background: var(--color-accent-subtle, #ecfeff);
740
+ border-radius: 50%;
741
+ color: var(--color-accent, #0891b2);
742
+ font-size: 1.25rem;
743
+ }
744
+ .feature-card h5[data-v-865a257f] {
745
+ margin: 0 0 0.5rem 0;
746
+ font-size: 0.875rem;
747
+ font-weight: 600;
748
+ color: var(--text-primary, #1a1a2e);
749
+ }
750
+ .feature-card p[data-v-865a257f] {
751
+ margin: 0;
752
+ font-size: 0.8125rem;
753
+ color: var(--text-secondary, #6c757d);
754
+ }
755
+
756
+ /* Steps list */
757
+ .steps-list[data-v-865a257f] {
758
+ margin: 0;
759
+ padding-left: 1.5rem;
760
+ color: var(--text-secondary, #6c757d);
761
+ font-size: 0.875rem;
762
+ }
763
+ .steps-list li[data-v-865a257f] {
764
+ margin-bottom: 0.5rem;
765
+ line-height: 1.6;
766
+ }
767
+ .steps-list strong[data-v-865a257f] {
768
+ color: var(--text-primary, #1a1a2e);
769
+ }
770
+
771
+ /* Layout diagram */
772
+ .layout-diagram[data-v-865a257f] {
773
+ display: grid;
774
+ grid-template-columns: 150px 1fr 200px;
775
+ gap: 0.5rem;
776
+ margin-bottom: 1.5rem;
777
+ }
778
+ .layout-box[data-v-865a257f] {
779
+ padding: 1rem;
780
+ border: 2px dashed var(--border-color, #e0e0e0);
781
+ border-radius: 8px;
782
+ text-align: center;
783
+ }
784
+ .layout-box.palette[data-v-865a257f] {
785
+ background: rgba(99, 102, 241, 0.05);
786
+ border-color: rgba(99, 102, 241, 0.3);
787
+ }
788
+ .layout-box.canvas[data-v-865a257f] {
789
+ background: rgba(8, 145, 178, 0.05);
790
+ border-color: rgba(8, 145, 178, 0.3);
791
+ }
792
+ .layout-box.properties[data-v-865a257f] {
793
+ background: rgba(16, 185, 129, 0.05);
794
+ border-color: rgba(16, 185, 129, 0.3);
795
+ }
796
+ .layout-label[data-v-865a257f] {
797
+ display: block;
798
+ font-weight: 600;
799
+ font-size: 0.8125rem;
800
+ margin-bottom: 0.25rem;
801
+ color: var(--text-primary, #1a1a2e);
802
+ }
803
+ .layout-box p[data-v-865a257f] {
804
+ margin: 0;
805
+ font-size: 0.75rem;
806
+ }
807
+
808
+ /* Help list */
809
+ .help-list[data-v-865a257f] {
810
+ margin: 0 0 1rem 0;
811
+ padding-left: 1.5rem;
812
+ color: var(--text-secondary, #6c757d);
813
+ font-size: 0.875rem;
814
+ }
815
+ .help-list li[data-v-865a257f] {
816
+ margin-bottom: 0.5rem;
817
+ line-height: 1.5;
818
+ }
819
+ .help-list strong[data-v-865a257f] {
820
+ color: var(--text-primary, #1a1a2e);
821
+ }
822
+
823
+ /* Component list */
824
+ .component-list[data-v-865a257f] {
825
+ display: flex;
826
+ flex-direction: column;
827
+ gap: 0.75rem;
828
+ }
829
+ .component-item[data-v-865a257f] {
830
+ display: flex;
831
+ gap: 1rem;
832
+ padding: 0.75rem;
833
+ background: var(--bg-secondary, #f8f9fa);
834
+ border: 1px solid var(--border-color, #e0e0e0);
835
+ border-radius: 6px;
836
+ }
837
+ .component-icon[data-v-865a257f] {
838
+ width: 2.5rem;
839
+ height: 2.5rem;
840
+ display: flex;
841
+ align-items: center;
842
+ justify-content: center;
843
+ background: var(--card-bg, #ffffff);
844
+ border: 1px solid var(--border-color, #e0e0e0);
845
+ border-radius: 6px;
846
+ color: var(--color-accent, #0891b2);
847
+ flex-shrink: 0;
848
+ }
849
+ .component-info[data-v-865a257f] {
850
+ flex: 1;
851
+ min-width: 0;
852
+ }
853
+ .component-info h5[data-v-865a257f] {
854
+ margin: 0 0 0.25rem 0;
855
+ font-size: 0.875rem;
856
+ font-weight: 600;
857
+ color: var(--text-primary, #1a1a2e);
858
+ }
859
+ .component-info p[data-v-865a257f] {
860
+ margin: 0 0 0.25rem 0;
861
+ font-size: 0.8125rem;
862
+ }
863
+ .component-info code[data-v-865a257f] {
864
+ font-size: 0.75rem;
865
+ color: var(--color-accent, #0891b2);
866
+ font-family: "Fira Code", "Monaco", monospace;
867
+ }
868
+
869
+ /* Code blocks */
870
+ .help-code[data-v-865a257f] {
871
+ display: block;
872
+ background: #282c34;
873
+ padding: 0.75rem 1rem;
874
+ border-radius: 6px;
875
+ font-family: "Fira Code", "Monaco", monospace;
876
+ font-size: 0.8125rem;
877
+ overflow-x: auto;
878
+ margin: 0.5rem 0 1rem 0;
879
+ }
880
+ .help-code code[data-v-865a257f] {
881
+ color: #abb2bf;
882
+ white-space: pre;
883
+ }
884
+
885
+ /* Shortcuts grid */
886
+ .shortcuts-grid[data-v-865a257f] {
887
+ display: grid;
888
+ grid-template-columns: repeat(2, 1fr);
889
+ gap: 0.5rem;
890
+ }
891
+ .shortcut[data-v-865a257f] {
892
+ display: flex;
893
+ align-items: center;
894
+ gap: 0.5rem;
895
+ font-size: 0.8125rem;
896
+ color: var(--text-secondary, #6c757d);
897
+ padding: 0.5rem;
898
+ background: var(--bg-secondary, #f8f9fa);
899
+ border-radius: 4px;
900
+ }
901
+ .shortcut kbd[data-v-865a257f] {
902
+ display: inline-flex;
903
+ align-items: center;
904
+ justify-content: center;
905
+ min-width: 1.5rem;
906
+ padding: 0.125rem 0.375rem;
907
+ background: var(--card-bg, #ffffff);
908
+ border: 1px solid var(--border-color, #e0e0e0);
909
+ border-radius: 3px;
910
+ font-family: inherit;
911
+ font-size: 0.6875rem;
912
+ font-weight: 500;
913
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
914
+ }
915
+
916
+ /* Tip cards */
917
+ .tip-card[data-v-865a257f] {
918
+ display: flex;
919
+ gap: 0.75rem;
920
+ padding: 0.75rem;
921
+ background: var(--bg-secondary, #f8f9fa);
922
+ border-radius: 6px;
923
+ margin-bottom: 0.75rem;
924
+ }
925
+ .tip-icon[data-v-865a257f] {
926
+ width: 1.75rem;
927
+ height: 1.75rem;
928
+ display: flex;
929
+ align-items: center;
930
+ justify-content: center;
931
+ border-radius: 50%;
932
+ flex-shrink: 0;
933
+ font-size: 0.75rem;
934
+ }
935
+ .tip-icon.success[data-v-865a257f] {
936
+ background: var(--color-success-light, #d1fae5);
937
+ color: var(--color-success, #10b981);
938
+ }
939
+ .tip-icon.warning[data-v-865a257f] {
940
+ background: var(--color-warning-light, #fef3c7);
941
+ color: var(--color-warning, #f59e0b);
942
+ }
943
+ .tip-content h5[data-v-865a257f] {
944
+ margin: 0 0 0.25rem 0;
945
+ font-size: 0.875rem;
946
+ font-weight: 600;
947
+ color: var(--text-primary, #1a1a2e);
948
+ }
949
+ .tip-content p[data-v-865a257f] {
950
+ margin: 0;
951
+ font-size: 0.8125rem;
952
+ }
953
+
954
+ /* Dark mode */
955
+ [data-theme="dark"] .layout-box.palette[data-v-865a257f] {
956
+ background: rgba(99, 102, 241, 0.1);
957
+ }
958
+ [data-theme="dark"] .layout-box.canvas[data-v-865a257f] {
959
+ background: rgba(8, 145, 178, 0.1);
960
+ }
961
+ [data-theme="dark"] .layout-box.properties[data-v-865a257f] {
962
+ background: rgba(16, 185, 129, 0.1);
963
+ }
964
+
965
+ .icon-selector[data-v-638bee77] {
966
+ position: relative;
967
+ }
968
+ .icon-label[data-v-638bee77] {
969
+ font-size: 0.75rem;
970
+ font-weight: 500;
971
+ color: var(--text-secondary, #6b7280);
972
+ display: block;
973
+ margin-bottom: 0.25rem;
974
+ }
975
+ .icon-selector-content[data-v-638bee77] {
976
+ position: relative;
977
+ }
978
+ .current-icon[data-v-638bee77] {
979
+ display: flex;
980
+ align-items: center;
981
+ gap: 0.5rem;
982
+ padding: 0.5rem;
983
+ border: 1px solid var(--border-color, #d1d5db);
984
+ border-radius: 4px;
985
+ background: var(--input-bg, #ffffff);
986
+ cursor: pointer;
987
+ transition: border-color 0.2s;
988
+ }
989
+ .current-icon[data-v-638bee77]:hover {
990
+ border-color: var(--primary-color, #4a6cf7);
991
+ }
992
+ .icon-preview[data-v-638bee77] {
993
+ width: 24px;
994
+ height: 24px;
995
+ object-fit: contain;
996
+ }
997
+ .icon-name[data-v-638bee77] {
998
+ flex: 1;
999
+ font-size: 0.875rem;
1000
+ color: var(--text-primary, #374151);
1001
+ overflow: hidden;
1002
+ text-overflow: ellipsis;
1003
+ white-space: nowrap;
1004
+ }
1005
+ .dropdown-arrow[data-v-638bee77] {
1006
+ font-size: 0.75rem;
1007
+ color: var(--text-secondary, #6b7280);
1008
+ }
1009
+ .icon-dropdown[data-v-638bee77] {
1010
+ position: absolute;
1011
+ top: 100%;
1012
+ left: 0;
1013
+ right: 0;
1014
+ margin-top: 0.25rem;
1015
+ background: var(--bg-primary, #ffffff);
1016
+ border: 1px solid var(--border-color, #d1d5db);
1017
+ border-radius: 8px;
1018
+ box-shadow: var(--shadow-lg);
1019
+ z-index: 1000;
1020
+ max-height: 300px;
1021
+ overflow-y: auto;
1022
+ }
1023
+ .upload-section[data-v-638bee77] {
1024
+ padding: 0.75rem;
1025
+ border-bottom: 1px solid var(--border-color, #e5e7eb);
1026
+ }
1027
+ .upload-btn[data-v-638bee77] {
1028
+ display: flex;
1029
+ align-items: center;
1030
+ justify-content: center;
1031
+ gap: 0.5rem;
1032
+ width: 100%;
1033
+ padding: 0.5rem;
1034
+ background: var(--bg-secondary, #f3f4f6);
1035
+ border: 1px dashed var(--border-color, #d1d5db);
1036
+ border-radius: 4px;
1037
+ font-size: 0.875rem;
1038
+ color: var(--text-secondary, #6b7280);
1039
+ cursor: pointer;
1040
+ transition: all 0.2s;
1041
+ }
1042
+ .upload-btn[data-v-638bee77]:hover {
1043
+ background: var(--bg-tertiary, #e5e7eb);
1044
+ border-color: var(--primary-color, #4a6cf7);
1045
+ color: var(--primary-color, #4a6cf7);
1046
+ }
1047
+ .icons-section[data-v-638bee77] {
1048
+ padding: 0.5rem;
1049
+ }
1050
+ .section-title[data-v-638bee77] {
1051
+ font-size: 0.75rem;
1052
+ font-weight: 600;
1053
+ color: var(--text-secondary, #6b7280);
1054
+ text-transform: uppercase;
1055
+ letter-spacing: 0.05em;
1056
+ margin-bottom: 0.5rem;
1057
+ padding: 0 0.25rem;
1058
+ }
1059
+ .icons-grid[data-v-638bee77] {
1060
+ display: grid;
1061
+ grid-template-columns: repeat(auto-fill, minmax(80px, 1fr));
1062
+ gap: 0.5rem;
1063
+ }
1064
+ .icon-option[data-v-638bee77] {
1065
+ position: relative;
1066
+ display: flex;
1067
+ flex-direction: column;
1068
+ align-items: center;
1069
+ gap: 0.25rem;
1070
+ padding: 0.5rem;
1071
+ border: 2px solid transparent;
1072
+ border-radius: 6px;
1073
+ cursor: pointer;
1074
+ transition: all 0.2s;
1075
+ }
1076
+ .icon-option[data-v-638bee77]:hover {
1077
+ background: var(--bg-secondary, #f3f4f6);
1078
+ }
1079
+ .icon-option.selected[data-v-638bee77] {
1080
+ border-color: var(--primary-color, #4a6cf7);
1081
+ background: var(--color-focus-ring-button);
1082
+ }
1083
+ .icon-img[data-v-638bee77] {
1084
+ width: 32px;
1085
+ height: 32px;
1086
+ object-fit: contain;
1087
+ }
1088
+ .icon-filename[data-v-638bee77] {
1089
+ font-size: 0.625rem;
1090
+ color: var(--text-secondary, #6b7280);
1091
+ text-align: center;
1092
+ overflow: hidden;
1093
+ text-overflow: ellipsis;
1094
+ white-space: nowrap;
1095
+ max-width: 100%;
1096
+ }
1097
+ .delete-icon-btn[data-v-638bee77] {
1098
+ position: absolute;
1099
+ top: 2px;
1100
+ right: 2px;
1101
+ width: 16px;
1102
+ height: 16px;
1103
+ padding: 0;
1104
+ border: none;
1105
+ border-radius: 50%;
1106
+ background: var(--color-danger);
1107
+ color: var(--color-text-inverse);
1108
+ font-size: 0.625rem;
1109
+ cursor: pointer;
1110
+ opacity: 0;
1111
+ transition: opacity 0.2s;
1112
+ display: flex;
1113
+ align-items: center;
1114
+ justify-content: center;
1115
+ }
1116
+ .icon-option:hover .delete-icon-btn[data-v-638bee77] {
1117
+ opacity: 1;
1118
+ }
1119
+ .delete-icon-btn[data-v-638bee77]:hover {
1120
+ background: var(--color-danger-hover);
1121
+ }
1122
+ .backdrop[data-v-638bee77] {
1123
+ position: fixed;
1124
+ top: 0;
1125
+ left: 0;
1126
+ right: 0;
1127
+ bottom: 0;
1128
+ z-index: 999;
1129
+ }
1130
+ /**
1131
+ * Node Designer specific styles
1132
+ * Uses design tokens from the main styling system
1133
+ */
1134
+
1135
+ /* Panel styles - specific to Node Designer */
1136
+ .panel[data-v-3db2802e] {
1137
+ background: var(--card-bg);
1138
+ border: 1px solid var(--color-border-primary);
1139
+ border-radius: var(--border-radius-lg);
1140
+ display: flex;
1141
+ flex-direction: column;
1142
+ overflow: hidden;
1143
+ min-height: 0;
1144
+ }
1145
+ .panel-header[data-v-3db2802e] {
1146
+ padding: var(--spacing-3) var(--spacing-4);
1147
+ border-bottom: 1px solid var(--color-border-primary);
1148
+ flex-shrink: 0;
1149
+ background-color: var(--color-background-secondary);
1150
+ }
1151
+ .panel-header h3[data-v-3db2802e] {
1152
+ margin: 0;
1153
+ font-size: var(--font-size-xs);
1154
+ font-weight: var(--font-weight-semibold);
1155
+ text-transform: uppercase;
1156
+ letter-spacing: 0.05em;
1157
+ color: var(--color-text-secondary);
1158
+ }
1159
+ .panel-content[data-v-3db2802e] {
1160
+ padding: var(--spacing-4);
1161
+ overflow-y: auto;
1162
+ flex: 1;
1163
+ min-height: 0;
1164
+ height: 0;
1165
+ }
1166
+
1167
+ /* Node Designer specific layout */
1168
+ .node-designer-container[data-v-3db2802e] {
1169
+ display: flex;
1170
+ height: 100%;
1171
+ background-color: var(--color-background-secondary);
1172
+ }
1173
+ .node-designer-sidebar[data-v-3db2802e] {
1174
+ width: 280px;
1175
+ flex-shrink: 0;
1176
+ border-right: 1px solid var(--color-border-primary);
1177
+ background-color: var(--color-background-primary);
1178
+ overflow-y: auto;
1179
+ }
1180
+ .node-designer-canvas[data-v-3db2802e] {
1181
+ flex: 1;
1182
+ min-width: 0;
1183
+ position: relative;
1184
+ }
1185
+ .node-designer-properties[data-v-3db2802e] {
1186
+ width: 320px;
1187
+ flex-shrink: 0;
1188
+ border-left: 1px solid var(--color-border-primary);
1189
+ background-color: var(--color-background-primary);
1190
+ overflow-y: auto;
1191
+ }
1192
+
1193
+ /* Component list styles
1194
+ Note: .component-list is currently unused, .component-item is used. */
1195
+ .component-list[data-v-3db2802e] {
1196
+ list-style: none;
1197
+ padding: 0;
1198
+ margin: 0;
1199
+ }
1200
+ .component-item[data-v-3db2802e] {
1201
+ display: flex;
1202
+ align-items: center;
1203
+ gap: var(--spacing-2);
1204
+ padding: var(--spacing-2) var(--spacing-3);
1205
+ cursor: pointer;
1206
+ border-bottom: 1px solid var(--color-border-light);
1207
+ font-size: var(--font-size-sm);
1208
+ color: var(--color-text-primary);
1209
+ transition: background-color var(--transition-fast);
1210
+ }
1211
+ .component-item[data-v-3db2802e]:hover {
1212
+ background-color: var(--color-background-hover);
1213
+ }
1214
+ .component-item[data-v-3db2802e]:last-child {
1215
+ border-bottom: none;
1216
+ }
1217
+ .component-icon[data-v-3db2802e] {
1218
+ width: 24px;
1219
+ height: 24px;
1220
+ display: flex;
1221
+ align-items: center;
1222
+ justify-content: center;
1223
+ color: var(--color-text-secondary);
1224
+ }
1225
+
1226
+ /* Property editor styles */
1227
+ .property-group[data-v-3db2802e] {
1228
+ margin-bottom: var(--spacing-4);
1229
+ }
1230
+ .property-group-title[data-v-3db2802e] {
1231
+ font-size: var(--font-size-xs);
1232
+ font-weight: var(--font-weight-semibold);
1233
+ color: var(--color-text-secondary);
1234
+ text-transform: uppercase;
1235
+ letter-spacing: 0.05em;
1236
+ margin-bottom: var(--spacing-2);
1237
+ padding-bottom: var(--spacing-1);
1238
+ border-bottom: 1px solid var(--color-border-light);
1239
+ }
1240
+ .property-row[data-v-3db2802e] {
1241
+ display: flex;
1242
+ flex-direction: column;
1243
+ gap: var(--spacing-1);
1244
+ margin-bottom: var(--spacing-3);
1245
+ }
1246
+ .property-label[data-v-3db2802e] {
1247
+ font-size: var(--font-size-sm);
1248
+ font-weight: var(--font-weight-medium);
1249
+ color: var(--color-text-secondary);
1250
+ }
1251
+ .property-input[data-v-3db2802e] {
1252
+ width: 100%;
1253
+ padding: var(--spacing-2);
1254
+ font-size: var(--font-size-sm);
1255
+ border: 1px solid var(--color-border-primary);
1256
+ border-radius: var(--border-radius-md);
1257
+ background-color: var(--color-background-primary);
1258
+ color: var(--color-text-primary);
1259
+ transition: border-color var(--transition-fast);
1260
+ }
1261
+ .property-input[data-v-3db2802e]:focus {
1262
+ outline: none;
1263
+ border-color: var(--input-border-focus);
1264
+ }
1265
+
1266
+ /* Validation message styles */
1267
+ .validation-message[data-v-3db2802e] {
1268
+ display: flex;
1269
+ align-items: flex-start;
1270
+ gap: var(--spacing-2);
1271
+ padding: var(--spacing-2) var(--spacing-3);
1272
+ border-radius: var(--border-radius-md);
1273
+ font-size: var(--font-size-sm);
1274
+ margin-bottom: var(--spacing-2);
1275
+ }
1276
+ .validation-message.is-error[data-v-3db2802e] {
1277
+ background-color: var(--color-danger-light);
1278
+ color: var(--color-danger);
1279
+ border: 1px solid var(--color-danger);
1280
+ }
1281
+ .validation-message.is-warning[data-v-3db2802e] {
1282
+ background-color: var(--color-warning-light);
1283
+ color: var(--color-warning);
1284
+ border: 1px solid var(--color-warning);
1285
+ }
1286
+ .validation-message.is-success[data-v-3db2802e] {
1287
+ background-color: var(--color-success-light);
1288
+ color: var(--color-success);
1289
+ border: 1px solid var(--color-success);
1290
+ }
1291
+ .node-designer-container[data-v-3db2802e] {
1292
+ padding: 1rem;
1293
+ height: 100vh;
1294
+ max-height: 100vh;
1295
+ display: flex;
1296
+ flex-direction: column;
1297
+ overflow: hidden;
1298
+ box-sizing: border-box;
1299
+ }
1300
+ .page-header[data-v-3db2802e] {
1301
+ display: flex;
1302
+ justify-content: space-between;
1303
+ align-items: center;
1304
+ margin-bottom: 1rem;
1305
+ flex-shrink: 0;
1306
+ }
1307
+ .header-left[data-v-3db2802e] {
1308
+ display: flex;
1309
+ flex-direction: column;
1310
+ }
1311
+ .page-title[data-v-3db2802e] {
1312
+ margin: 0;
1313
+ font-size: 1.5rem;
1314
+ font-weight: 600;
1315
+ }
1316
+ .page-description[data-v-3db2802e] {
1317
+ margin: 0.25rem 0 0 0;
1318
+ color: var(--text-secondary);
1319
+ font-size: 0.875rem;
1320
+ }
1321
+ .header-actions[data-v-3db2802e] {
1322
+ display: flex;
1323
+ gap: 0.5rem;
1324
+ }
1325
+ .designer-layout[data-v-3db2802e] {
1326
+ display: grid;
1327
+ grid-template-columns: 200px 1fr 280px;
1328
+ gap: 1rem;
1329
+ flex: 1;
1330
+ min-height: 0;
1331
+ height: 0;
1332
+ overflow: hidden;
1333
+ }
1334
+
1335
+ /* Design Canvas */
1336
+ .design-canvas .panel-content[data-v-3db2802e] {
1337
+ display: flex;
1338
+ flex-direction: column;
1339
+ gap: 1.5rem;
1340
+ padding-bottom: 3rem;
1341
+ }
1342
+ .metadata-section h4[data-v-3db2802e] {
1343
+ margin: 0 0 0.75rem 0;
1344
+ font-size: 0.9375rem;
1345
+ font-weight: 600;
1346
+ }
1347
+ .form-grid[data-v-3db2802e] {
1348
+ display: grid;
1349
+ grid-template-columns: repeat(2, 1fr);
1350
+ gap: 0.75rem;
1351
+ }
1352
+ .form-field[data-v-3db2802e] {
1353
+ display: flex;
1354
+ flex-direction: column;
1355
+ gap: 0.25rem;
1356
+ }
1357
+ .form-field label[data-v-3db2802e] {
1358
+ font-size: 0.75rem;
1359
+ font-weight: 500;
1360
+ color: var(--text-secondary);
1361
+ }
1362
+ .form-input[data-v-3db2802e] {
1363
+ padding: 0.5rem;
1364
+ border: 1px solid var(--border-color);
1365
+ border-radius: 4px;
1366
+ background: var(--input-bg);
1367
+ color: var(--text-primary);
1368
+ font-size: 0.875rem;
1369
+ }
1370
+ .form-input[data-v-3db2802e]:focus {
1371
+ outline: none;
1372
+ border-color: var(--primary-color);
1373
+ }
1374
+ .icon-field[data-v-3db2802e] {
1375
+ grid-column: span 2;
1376
+ }
1377
+
1378
+ /* Sections */
1379
+ .sections-area[data-v-3db2802e] {
1380
+ border: 1px solid var(--border-color, #e0e0e0);
1381
+ border-radius: 8px;
1382
+ padding: 1rem;
1383
+ background: var(--bg-secondary, #f8f9fa);
1384
+ }
1385
+ .sections-header[data-v-3db2802e] {
1386
+ display: flex;
1387
+ justify-content: space-between;
1388
+ align-items: center;
1389
+ margin-bottom: 0.75rem;
1390
+ padding-bottom: 0.75rem;
1391
+ border-bottom: 1px solid var(--border-color, #e0e0e0);
1392
+ }
1393
+ .sections-header h4[data-v-3db2802e] {
1394
+ margin: 0;
1395
+ font-size: 0.9375rem;
1396
+ font-weight: 600;
1397
+ }
1398
+ .add-section-btn[data-v-3db2802e] {
1399
+ display: inline-flex;
1400
+ align-items: center;
1401
+ gap: 0.375rem;
1402
+ padding: 0.5rem 1rem;
1403
+ background: var(--color-button-primary);
1404
+ color: var(--color-text-inverse);
1405
+ border: none;
1406
+ border-radius: var(--border-radius-sm);
1407
+ font-size: 0.875rem;
1408
+ font-weight: 500;
1409
+ cursor: pointer;
1410
+ transition: background var(--transition-fast);
1411
+ }
1412
+ .add-section-btn[data-v-3db2802e]:hover {
1413
+ background: var(--color-button-primary-hover);
1414
+ }
1415
+ .add-section-btn i[data-v-3db2802e] {
1416
+ font-size: 0.75rem;
1417
+ }
1418
+ .empty-sections[data-v-3db2802e] {
1419
+ text-align: center;
1420
+ padding: 2rem;
1421
+ color: var(--text-secondary);
1422
+ }
1423
+ .empty-sections i[data-v-3db2802e] {
1424
+ font-size: 2rem;
1425
+ margin-bottom: 0.5rem;
1426
+ }
1427
+ .empty-sections p[data-v-3db2802e] {
1428
+ margin: 0;
1429
+ }