Flowfile 0.5.1__py3-none-any.whl → 0.5.3__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 (329) hide show
  1. build_backends/main.py +25 -22
  2. build_backends/main_prd.py +10 -19
  3. flowfile/__init__.py +178 -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-49392a9a.js +713 -0
  8. flowfile/web/static/assets/AdminView-f53bad23.css +129 -0
  9. flowfile/web/static/assets/CloudConnectionView-36bcd6df.css +72 -0
  10. flowfile/web/static/assets/{CloudConnectionManager-0dfba9f2.js → CloudConnectionView-f13f202b.js} +11 -11
  11. flowfile/web/static/assets/{CloudStorageReader-d5b1b6c9.js → CloudStorageReader-0023d4a5.js} +10 -8
  12. flowfile/web/static/assets/{CloudStorageReader-29d14fcc.css → CloudStorageReader-24c54524.css} +27 -27
  13. flowfile/web/static/assets/{CloudStorageWriter-b0ee067f.css → CloudStorageWriter-60547855.css} +26 -26
  14. flowfile/web/static/assets/{CloudStorageWriter-00d87aad.js → CloudStorageWriter-8e781e11.js} +10 -8
  15. flowfile/web/static/assets/{ColumnSelector-47996a16.css → ColumnSelector-371637fb.css} +2 -2
  16. flowfile/web/static/assets/{ColumnSelector-4685e75d.js → ColumnSelector-8ad68ea9.js} +3 -5
  17. flowfile/web/static/assets/{ContextMenu-c13f91d0.css → ContextMenu-26d4dd27.css} +6 -6
  18. flowfile/web/static/assets/{ContextMenu-23e909da.js → ContextMenu-31ee57f0.js} +3 -3
  19. flowfile/web/static/assets/{ContextMenu-70ae0c79.js → ContextMenu-69a74055.js} +3 -3
  20. flowfile/web/static/assets/{ContextMenu-f149cf7c.js → ContextMenu-8e2051c6.js} +3 -3
  21. flowfile/web/static/assets/{ContextMenu-4c74eef1.css → ContextMenu-8ec1729e.css} +6 -6
  22. flowfile/web/static/assets/{ContextMenu-63cfa99b.css → ContextMenu-9b310c60.css} +6 -6
  23. flowfile/web/static/assets/{CrossJoin-702a3edd.js → CrossJoin-03df6938.js} +12 -10
  24. flowfile/web/static/assets/{CrossJoin-1119d18e.css → CrossJoin-71b4cc10.css} +20 -20
  25. flowfile/web/static/assets/CustomNode-59e99a86.css +32 -0
  26. flowfile/web/static/assets/{CustomNode-b1519993.js → CustomNode-8479239b.js} +36 -24
  27. flowfile/web/static/assets/{DatabaseConnectionSettings-6f3e4ea5.js → DatabaseConnectionSettings-869e3efd.js} +5 -4
  28. flowfile/web/static/assets/{DatabaseConnectionSettings-0c04b2e5.css → DatabaseConnectionSettings-e91df89a.css} +13 -13
  29. flowfile/web/static/assets/{DatabaseReader-ae61773c.css → DatabaseReader-36898a00.css} +24 -24
  30. flowfile/web/static/assets/{DatabaseReader-d38c7295.js → DatabaseReader-c58b9552.js} +25 -15
  31. flowfile/web/static/assets/DatabaseView-6655afd6.css +57 -0
  32. flowfile/web/static/assets/{DatabaseManager-cf5ef661.js → DatabaseView-d26a9140.js} +11 -11
  33. flowfile/web/static/assets/{DatabaseWriter-2f570e53.css → DatabaseWriter-217a99f1.css} +19 -19
  34. flowfile/web/static/assets/{DatabaseWriter-b04ef46a.js → DatabaseWriter-4d05ddc7.js} +17 -10
  35. flowfile/web/static/assets/{designer-8da3ba3a.css → DesignerView-a6d0ee84.css} +614 -546
  36. flowfile/web/static/assets/{designer-9633482a.js → DesignerView-e6f5c0e8.js} +1107 -3170
  37. flowfile/web/static/assets/{documentation-ca400224.js → DocumentationView-2e78ef1b.js} +5 -5
  38. flowfile/web/static/assets/{documentation-12216a74.css → DocumentationView-fd46c656.css} +7 -7
  39. flowfile/web/static/assets/{ExploreData-2d0cf4db.css → ExploreData-10c5acc8.css} +13 -12
  40. flowfile/web/static/assets/{ExploreData-5fa10ed8.js → ExploreData-7b54caca.js} +18 -9
  41. flowfile/web/static/assets/{ExternalSource-d39af878.js → ExternalSource-3fa399b2.js} +9 -7
  42. flowfile/web/static/assets/{ExternalSource-e37b6275.css → ExternalSource-47ab05a3.css} +17 -17
  43. flowfile/web/static/assets/Filter-7494ea97.css +48 -0
  44. flowfile/web/static/assets/Filter-8cbbdbf3.js +287 -0
  45. flowfile/web/static/assets/{Formula-bb96803d.css → Formula-53d58c43.css} +7 -7
  46. flowfile/web/static/assets/{Formula-6b04fb1d.js → Formula-aac42b1e.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-cd9bbfca.js} +12 -10
  49. flowfile/web/static/assets/{Pivot-cf333e3d.css → GraphSolver-c24dec17.css} +5 -5
  50. flowfile/web/static/assets/{GraphSolver-17dd2198.js → GraphSolver-c7e6780e.js} +13 -11
  51. flowfile/web/static/assets/{GroupBy-6b039e18.js → GroupBy-93c5d22b.js} +9 -7
  52. flowfile/web/static/assets/{GroupBy-b9505323.css → GroupBy-be7ac0bf.css} +10 -10
  53. flowfile/web/static/assets/{Join-fd79b451.css → Join-28b5e18f.css} +22 -22
  54. flowfile/web/static/assets/{Join-24d0f113.js → Join-a19b2de2.js} +13 -11
  55. flowfile/web/static/assets/LoginView-0df4ed0a.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-8d3374b2.js} +170 -116
  59. flowfile/web/static/assets/{MultiSelect-0e8724a3.js → MultiSelect-ad1b6243.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-e278950d.js} +1 -1
  61. flowfile/web/static/assets/NodeDesigner-40b647c9.js +2610 -0
  62. flowfile/web/static/assets/NodeDesigner-5f53be3f.css +1429 -0
  63. flowfile/web/static/assets/{NumericInput-3d63a470.js → NumericInput-7100234c.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-5130219f.js} +5 -2
  65. flowfile/web/static/assets/{Output-283fe388.css → Output-35e97000.css} +6 -6
  66. flowfile/web/static/assets/{Output-edea9802.js → Output-f5efd2aa.js} +12 -9
  67. flowfile/web/static/assets/{GraphSolver-f0cb7bfb.css → Pivot-0eda81b4.css} +5 -5
  68. flowfile/web/static/assets/{Pivot-61d19301.js → Pivot-d981d23c.js} +11 -9
  69. flowfile/web/static/assets/PivotValidation-0e905b1a.css +13 -0
  70. flowfile/web/static/assets/{PivotValidation-f97fec5b.js → PivotValidation-39386e95.js} +3 -3
  71. flowfile/web/static/assets/PivotValidation-41b57ad6.css +13 -0
  72. flowfile/web/static/assets/{PivotValidation-de9f43fe.js → PivotValidation-63de1f73.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-f9d69217.js} +18 -9
  75. flowfile/web/static/assets/PopOver-b22f049e.js +939 -0
  76. flowfile/web/static/assets/PopOver-d96599db.css +33 -0
  77. flowfile/web/static/assets/{Read-e808b239.css → Read-36e7bd51.css} +12 -12
  78. flowfile/web/static/assets/{Read-64a3f259.js → Read-aec2e377.js} +14 -11
  79. flowfile/web/static/assets/{RecordCount-3d5039be.js → RecordCount-78ed6845.js} +6 -4
  80. flowfile/web/static/assets/{RecordId-597510e0.js → RecordId-2156e890.js} +8 -6
  81. flowfile/web/static/assets/{SQLQueryComponent-36cef432.css → SQLQueryComponent-1c2f26b4.css} +5 -5
  82. flowfile/web/static/assets/{SQLQueryComponent-df51adbe.js → SQLQueryComponent-48c72f5b.js} +3 -3
  83. flowfile/web/static/assets/{Sample-4be0a507.js → Sample-1352ca74.js} +6 -4
  84. flowfile/web/static/assets/SecretSelector-22b5ff89.js +113 -0
  85. flowfile/web/static/assets/SecretSelector-6329f743.css +43 -0
  86. flowfile/web/static/assets/{SecretManager-4839be57.js → SecretsView-17df66ee.js} +35 -36
  87. flowfile/web/static/assets/SecretsView-aa291340.css +38 -0
  88. flowfile/web/static/assets/{Select-9b72f201.js → Select-0aee4c54.js} +9 -7
  89. flowfile/web/static/assets/{SettingsSection-f0f75a42.js → SettingsSection-0784e157.js} +3 -3
  90. flowfile/web/static/assets/{SettingsSection-71e6b7e3.css → SettingsSection-07fbbc39.css} +4 -4
  91. flowfile/web/static/assets/{SettingsSection-5c696bee.css → SettingsSection-26fe48d4.css} +4 -4
  92. flowfile/web/static/assets/{SettingsSection-2e4d03c4.css → SettingsSection-8f980839.css} +4 -4
  93. flowfile/web/static/assets/{SettingsSection-e1e9c953.js → SettingsSection-cd341bb6.js} +3 -3
  94. flowfile/web/static/assets/{SettingsSection-7ded385d.js → SettingsSection-f2002a6d.js} +3 -3
  95. flowfile/web/static/assets/{SingleSelect-6c777aac.js → SingleSelect-460cc0ea.js} +2 -2
  96. flowfile/web/static/assets/{SingleSelect.vue_vue_type_script_setup_true_lang-33e3ff9b.js → SingleSelect.vue_vue_type_script_setup_true_lang-30741bb2.js} +1 -1
  97. flowfile/web/static/assets/{SliderInput-7cb93e62.js → SliderInput-5d926864.js} +7 -4
  98. flowfile/web/static/assets/SliderInput-f2e4f23c.css +4 -0
  99. flowfile/web/static/assets/{Sort-6cbde21a.js → Sort-3cdc971b.js} +9 -7
  100. flowfile/web/static/assets/{Unique-f9fb0809.css → Sort-8a871341.css} +10 -10
  101. flowfile/web/static/assets/{TextInput-d9a40c11.js → TextInput-a2d0bfbd.js} +2 -2
  102. flowfile/web/static/assets/{TextInput.vue_vue_type_script_setup_true_lang-5896c375.js → TextInput.vue_vue_type_script_setup_true_lang-abad1ca2.js} +5 -2
  103. flowfile/web/static/assets/{TextToRows-5d2c1190.css → TextToRows-12afb4f4.css} +10 -10
  104. flowfile/web/static/assets/{TextToRows-c4fcbf4d.js → TextToRows-918945f7.js} +11 -10
  105. flowfile/web/static/assets/{ToggleSwitch-4ef91d19.js → ToggleSwitch-f0ef5196.js} +2 -2
  106. flowfile/web/static/assets/{ToggleSwitch.vue_vue_type_script_setup_true_lang-38478c20.js → ToggleSwitch.vue_vue_type_script_setup_true_lang-5605c793.js} +1 -1
  107. flowfile/web/static/assets/{UnavailableFields-5edd5322.css → UnavailableFields-54d2f518.css} +6 -6
  108. flowfile/web/static/assets/{UnavailableFields-a03f512c.js → UnavailableFields-bdad6144.js} +4 -4
  109. flowfile/web/static/assets/{Union-af6c3d9b.css → Union-d6a8d7d5.css} +7 -7
  110. flowfile/web/static/assets/{Union-bfe9b996.js → Union-e8ab8c86.js} +8 -6
  111. flowfile/web/static/assets/{Unique-5d023a27.js → Unique-8cd4f976.js} +13 -10
  112. flowfile/web/static/assets/{Sort-3643d625.css → Unique-9fb2f567.css} +10 -10
  113. flowfile/web/static/assets/{Unpivot-1e422df3.css → Unpivot-710a2948.css} +7 -7
  114. flowfile/web/static/assets/{Unpivot-91cc5354.js → Unpivot-8da14095.js} +10 -8
  115. flowfile/web/static/assets/{UnpivotValidation-7ee2de44.js → UnpivotValidation-6f7d89ff.js} +3 -3
  116. flowfile/web/static/assets/UnpivotValidation-d5ca3b7b.css +13 -0
  117. flowfile/web/static/assets/{VueGraphicWalker-e51b9924.js → VueGraphicWalker-3fb312e1.js} +4 -4
  118. flowfile/web/static/assets/{VueGraphicWalker-ed5ab88b.css → VueGraphicWalker-430f0b86.css} +1 -1
  119. flowfile/web/static/assets/{api-cf1221f0.js → api-24483f0d.js} +1 -1
  120. flowfile/web/static/assets/{api-c1bad5ca.js → api-8b81fa73.js} +1 -1
  121. flowfile/web/static/assets/{dropDown-35135ba8.css → dropDown-3d8dc5fa.css} +40 -40
  122. flowfile/web/static/assets/{dropDown-614b998d.js → dropDown-ac0fda9d.js} +3 -3
  123. flowfile/web/static/assets/{fullEditor-f7971590.js → fullEditor-5497a84a.js} +11 -10
  124. flowfile/web/static/assets/{fullEditor-178376bb.css → fullEditor-a0be62b3.css} +74 -62
  125. flowfile/web/static/assets/{genericNodeSettings-924759c7.css → genericNodeSettings-3b2507ea.css} +10 -10
  126. flowfile/web/static/assets/{genericNodeSettings-4fe5f36b.js → genericNodeSettings-99014e1d.js} +5 -5
  127. flowfile/web/static/assets/index-07dda503.js +38 -0
  128. flowfile/web/static/assets/index-3ba44389.js +2696 -0
  129. flowfile/web/static/assets/{index-50508d4d.css → index-e6289dd0.css} +1945 -569
  130. flowfile/web/static/assets/{index-5429bbf8.js → index-fb6493ae.js} +41626 -40867
  131. flowfile/web/static/assets/node.types-2c15bb7e.js +82 -0
  132. flowfile/web/static/assets/nodeInput-0eb13f1a.js +2 -0
  133. flowfile/web/static/assets/{outputCsv-076b85ab.js → outputCsv-8f8ba42d.js} +3 -3
  134. flowfile/web/static/assets/outputCsv-b9a072af.css +2499 -0
  135. flowfile/web/static/assets/{outputExcel-0fd17dbe.js → outputExcel-393f4fef.js} +3 -3
  136. flowfile/web/static/assets/{outputExcel-b41305c0.css → outputExcel-f5d272b2.css} +26 -26
  137. flowfile/web/static/assets/{outputParquet-b61e0847.js → outputParquet-07c81f65.js} +4 -4
  138. flowfile/web/static/assets/outputParquet-54597c3c.css +4 -0
  139. flowfile/web/static/assets/{readCsv-a8bb8b61.js → readCsv-07f6d9ad.js} +3 -3
  140. flowfile/web/static/assets/{readCsv-c767cb37.css → readCsv-3bfac4c3.css} +15 -15
  141. flowfile/web/static/assets/{readExcel-806d2826.css → readExcel-3db6b763.css} +13 -13
  142. flowfile/web/static/assets/{readExcel-67b4aee0.js → readExcel-ed69bc8f.js} +5 -5
  143. flowfile/web/static/assets/{readParquet-48c81530.css → readParquet-c5244ad5.css} +4 -4
  144. flowfile/web/static/assets/{readParquet-92ce1dbc.js → readParquet-e3ed4528.js} +3 -3
  145. flowfile/web/static/assets/secrets.api-002e7d7e.js +65 -0
  146. flowfile/web/static/assets/{selectDynamic-92e25ee3.js → selectDynamic-80b92899.js} +5 -5
  147. flowfile/web/static/assets/{selectDynamic-aa913ff4.css → selectDynamic-f2fb394f.css} +21 -20
  148. flowfile/web/static/assets/{vue-codemirror.esm-41b0e0d7.js → vue-codemirror.esm-0965f39f.js} +31 -640
  149. flowfile/web/static/assets/{vue-content-loader.es-2c8e608f.js → vue-content-loader.es-c506ad97.js} +1 -1
  150. flowfile/web/static/index.html +2 -2
  151. {flowfile-0.5.1.dist-info → flowfile-0.5.3.dist-info}/METADATA +2 -3
  152. flowfile-0.5.3.dist-info/RECORD +402 -0
  153. flowfile_core/__init__.py +13 -6
  154. flowfile_core/auth/jwt.py +51 -16
  155. flowfile_core/auth/models.py +32 -7
  156. flowfile_core/auth/password.py +89 -0
  157. flowfile_core/auth/secrets.py +8 -6
  158. flowfile_core/configs/__init__.py +9 -7
  159. flowfile_core/configs/flow_logger.py +15 -14
  160. flowfile_core/configs/node_store/__init__.py +72 -4
  161. flowfile_core/configs/node_store/nodes.py +155 -172
  162. flowfile_core/configs/node_store/user_defined_node_registry.py +108 -27
  163. flowfile_core/configs/settings.py +28 -15
  164. flowfile_core/database/connection.py +7 -6
  165. flowfile_core/database/init_db.py +96 -2
  166. flowfile_core/database/models.py +3 -1
  167. flowfile_core/fileExplorer/__init__.py +17 -0
  168. flowfile_core/fileExplorer/funcs.py +123 -57
  169. flowfile_core/fileExplorer/utils.py +10 -11
  170. flowfile_core/flowfile/_extensions/real_time_interface.py +10 -8
  171. flowfile_core/flowfile/analytics/analytics_processor.py +26 -24
  172. flowfile_core/flowfile/analytics/graphic_walker.py +11 -12
  173. flowfile_core/flowfile/analytics/utils.py +1 -1
  174. flowfile_core/flowfile/code_generator/code_generator.py +358 -244
  175. flowfile_core/flowfile/connection_manager/_connection_manager.py +6 -5
  176. flowfile_core/flowfile/connection_manager/models.py +1 -1
  177. flowfile_core/flowfile/database_connection_manager/db_connections.py +60 -44
  178. flowfile_core/flowfile/database_connection_manager/models.py +1 -1
  179. flowfile_core/flowfile/extensions.py +17 -12
  180. flowfile_core/flowfile/flow_data_engine/cloud_storage_reader.py +34 -32
  181. flowfile_core/flowfile/flow_data_engine/create/funcs.py +115 -83
  182. flowfile_core/flowfile/flow_data_engine/flow_data_engine.py +481 -423
  183. flowfile_core/flowfile/flow_data_engine/flow_file_column/interface.py +2 -2
  184. flowfile_core/flowfile/flow_data_engine/flow_file_column/main.py +92 -52
  185. flowfile_core/flowfile/flow_data_engine/flow_file_column/polars_type.py +12 -11
  186. flowfile_core/flowfile/flow_data_engine/flow_file_column/type_registry.py +6 -6
  187. flowfile_core/flowfile/flow_data_engine/flow_file_column/utils.py +26 -30
  188. flowfile_core/flowfile/flow_data_engine/fuzzy_matching/prepare_for_fuzzy_match.py +31 -20
  189. flowfile_core/flowfile/flow_data_engine/join/__init__.py +1 -1
  190. flowfile_core/flowfile/flow_data_engine/join/utils.py +11 -9
  191. flowfile_core/flowfile/flow_data_engine/join/verify_integrity.py +14 -15
  192. flowfile_core/flowfile/flow_data_engine/pivot_table.py +5 -7
  193. flowfile_core/flowfile/flow_data_engine/polars_code_parser.py +95 -82
  194. flowfile_core/flowfile/flow_data_engine/read_excel_tables.py +66 -65
  195. flowfile_core/flowfile/flow_data_engine/sample_data.py +27 -21
  196. flowfile_core/flowfile/flow_data_engine/subprocess_operations/__init__.py +1 -1
  197. flowfile_core/flowfile/flow_data_engine/subprocess_operations/models.py +13 -11
  198. flowfile_core/flowfile/flow_data_engine/subprocess_operations/subprocess_operations.py +190 -127
  199. flowfile_core/flowfile/flow_data_engine/threaded_processes.py +8 -8
  200. flowfile_core/flowfile/flow_data_engine/utils.py +99 -67
  201. flowfile_core/flowfile/flow_graph.py +918 -571
  202. flowfile_core/flowfile/flow_graph_utils.py +31 -49
  203. flowfile_core/flowfile/flow_node/flow_node.py +330 -233
  204. flowfile_core/flowfile/flow_node/models.py +53 -41
  205. flowfile_core/flowfile/flow_node/schema_callback.py +14 -19
  206. flowfile_core/flowfile/graph_tree/graph_tree.py +41 -41
  207. flowfile_core/flowfile/handler.py +80 -30
  208. flowfile_core/flowfile/manage/compatibility_enhancements.py +209 -126
  209. flowfile_core/flowfile/manage/io_flowfile.py +54 -57
  210. flowfile_core/flowfile/node_designer/__init__.py +15 -13
  211. flowfile_core/flowfile/node_designer/_type_registry.py +34 -37
  212. flowfile_core/flowfile/node_designer/custom_node.py +162 -36
  213. flowfile_core/flowfile/node_designer/ui_components.py +135 -34
  214. flowfile_core/flowfile/schema_callbacks.py +71 -51
  215. flowfile_core/flowfile/setting_generator/__init__.py +0 -1
  216. flowfile_core/flowfile/setting_generator/setting_generator.py +6 -5
  217. flowfile_core/flowfile/setting_generator/settings.py +64 -53
  218. flowfile_core/flowfile/sources/external_sources/base_class.py +12 -10
  219. flowfile_core/flowfile/sources/external_sources/custom_external_sources/external_source.py +27 -17
  220. flowfile_core/flowfile/sources/external_sources/custom_external_sources/sample_users.py +9 -9
  221. flowfile_core/flowfile/sources/external_sources/factory.py +0 -1
  222. flowfile_core/flowfile/sources/external_sources/sql_source/models.py +45 -31
  223. flowfile_core/flowfile/sources/external_sources/sql_source/sql_source.py +198 -73
  224. flowfile_core/flowfile/sources/external_sources/sql_source/utils.py +250 -196
  225. flowfile_core/flowfile/util/calculate_layout.py +9 -13
  226. flowfile_core/flowfile/util/execution_orderer.py +25 -17
  227. flowfile_core/flowfile/util/node_skipper.py +4 -4
  228. flowfile_core/flowfile/utils.py +19 -21
  229. flowfile_core/main.py +26 -19
  230. flowfile_core/routes/auth.py +284 -11
  231. flowfile_core/routes/cloud_connections.py +25 -25
  232. flowfile_core/routes/logs.py +21 -29
  233. flowfile_core/routes/public.py +3 -3
  234. flowfile_core/routes/routes.py +70 -34
  235. flowfile_core/routes/secrets.py +25 -27
  236. flowfile_core/routes/user_defined_components.py +483 -4
  237. flowfile_core/run_lock.py +0 -1
  238. flowfile_core/schemas/__init__.py +4 -6
  239. flowfile_core/schemas/analysis_schemas/graphic_walker_schemas.py +55 -55
  240. flowfile_core/schemas/cloud_storage_schemas.py +59 -53
  241. flowfile_core/schemas/input_schema.py +231 -144
  242. flowfile_core/schemas/output_model.py +49 -34
  243. flowfile_core/schemas/schemas.py +116 -89
  244. flowfile_core/schemas/transform_schema.py +518 -263
  245. flowfile_core/schemas/yaml_types.py +21 -7
  246. flowfile_core/secret_manager/secret_manager.py +17 -13
  247. flowfile_core/types.py +29 -9
  248. flowfile_core/utils/arrow_reader.py +7 -6
  249. flowfile_core/utils/excel_file_manager.py +3 -3
  250. flowfile_core/utils/fileManager.py +7 -7
  251. flowfile_core/utils/fl_executor.py +8 -10
  252. flowfile_core/utils/utils.py +4 -4
  253. flowfile_core/utils/validate_setup.py +5 -4
  254. flowfile_frame/__init__.py +106 -51
  255. flowfile_frame/adapters.py +2 -9
  256. flowfile_frame/adding_expr.py +73 -32
  257. flowfile_frame/cloud_storage/frame_helpers.py +27 -23
  258. flowfile_frame/cloud_storage/secret_manager.py +12 -26
  259. flowfile_frame/config.py +2 -5
  260. flowfile_frame/expr.py +311 -218
  261. flowfile_frame/expr.pyi +160 -159
  262. flowfile_frame/expr_name.py +23 -23
  263. flowfile_frame/flow_frame.py +571 -476
  264. flowfile_frame/flow_frame.pyi +123 -104
  265. flowfile_frame/flow_frame_methods.py +227 -246
  266. flowfile_frame/group_frame.py +50 -20
  267. flowfile_frame/join.py +2 -2
  268. flowfile_frame/lazy.py +129 -87
  269. flowfile_frame/lazy_methods.py +83 -30
  270. flowfile_frame/list_name_space.py +55 -50
  271. flowfile_frame/selectors.py +148 -68
  272. flowfile_frame/series.py +9 -7
  273. flowfile_frame/utils.py +19 -21
  274. flowfile_worker/__init__.py +12 -7
  275. flowfile_worker/configs.py +11 -19
  276. flowfile_worker/create/__init__.py +14 -9
  277. flowfile_worker/create/funcs.py +114 -77
  278. flowfile_worker/create/models.py +46 -43
  279. flowfile_worker/create/pl_types.py +14 -15
  280. flowfile_worker/create/read_excel_tables.py +34 -41
  281. flowfile_worker/create/utils.py +22 -19
  282. flowfile_worker/external_sources/s3_source/main.py +18 -51
  283. flowfile_worker/external_sources/s3_source/models.py +34 -27
  284. flowfile_worker/external_sources/sql_source/main.py +8 -5
  285. flowfile_worker/external_sources/sql_source/models.py +13 -9
  286. flowfile_worker/flow_logger.py +10 -8
  287. flowfile_worker/funcs.py +214 -155
  288. flowfile_worker/main.py +11 -17
  289. flowfile_worker/models.py +35 -28
  290. flowfile_worker/process_manager.py +2 -3
  291. flowfile_worker/routes.py +121 -90
  292. flowfile_worker/secrets.py +9 -6
  293. flowfile_worker/spawner.py +80 -49
  294. flowfile_worker/utils.py +3 -2
  295. shared/__init__.py +2 -7
  296. shared/storage_config.py +25 -13
  297. test_utils/postgres/commands.py +3 -2
  298. test_utils/postgres/fixtures.py +9 -9
  299. test_utils/s3/commands.py +1 -1
  300. test_utils/s3/data_generator.py +3 -4
  301. test_utils/s3/demo_data_generator.py +4 -7
  302. test_utils/s3/fixtures.py +7 -5
  303. tools/migrate/__init__.py +1 -1
  304. tools/migrate/__main__.py +16 -29
  305. tools/migrate/legacy_schemas.py +251 -190
  306. tools/migrate/migrate.py +193 -181
  307. tools/migrate/tests/conftest.py +1 -3
  308. tools/migrate/tests/test_migrate.py +36 -41
  309. tools/migrate/tests/test_migration_e2e.py +28 -29
  310. tools/migrate/tests/test_node_migrations.py +50 -20
  311. flowfile/web/static/assets/CloudConnectionManager-2dfdce2f.css +0 -86
  312. flowfile/web/static/assets/CustomNode-74a37f74.css +0 -32
  313. flowfile/web/static/assets/DatabaseManager-30fa27e5.css +0 -64
  314. flowfile/web/static/assets/Filter-9b6d08db.js +0 -164
  315. flowfile/web/static/assets/Filter-f62091b3.css +0 -20
  316. flowfile/web/static/assets/ManualInput-3246a08d.css +0 -96
  317. flowfile/web/static/assets/PivotValidation-891ddfb0.css +0 -13
  318. flowfile/web/static/assets/PivotValidation-c46cd420.css +0 -13
  319. flowfile/web/static/assets/SliderInput-b8fb6a8c.css +0 -4
  320. flowfile/web/static/assets/UnpivotValidation-0d240eeb.css +0 -13
  321. flowfile/web/static/assets/nodeInput-5d0d6b79.js +0 -41
  322. flowfile/web/static/assets/outputCsv-9cc59e0b.css +0 -2499
  323. flowfile/web/static/assets/outputParquet-cf8cf3f2.css +0 -4
  324. flowfile/web/static/assets/secretApi-68435402.js +0 -46
  325. flowfile/web/static/assets/vue-codemirror-bccfde04.css +0 -32
  326. flowfile-0.5.1.dist-info/RECORD +0 -388
  327. {flowfile-0.5.1.dist-info → flowfile-0.5.3.dist-info}/WHEEL +0 -0
  328. {flowfile-0.5.1.dist-info → flowfile-0.5.3.dist-info}/entry_points.txt +0 -0
  329. {flowfile-0.5.1.dist-info → flowfile-0.5.3.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-7ea3df75] {
161
+ display: flex;
162
+ flex-direction: column;
163
+ gap: var(--spacing-4);
164
+ }
165
+ .component-type-badge[data-v-7ea3df75] {
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-7ea3df75] {
177
+ color: var(--color-text-secondary, #6b7280);
178
+ font-size: 0.875rem;
179
+ }
180
+ .property-group[data-v-7ea3df75] {
181
+ display: flex;
182
+ flex-direction: column;
183
+ gap: var(--spacing-3, 0.75rem);
184
+ }
185
+ .property-editor[data-v-7ea3df75] {
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-7ea3df75] {
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-7ea3df75] {
201
+ display: flex;
202
+ flex-direction: column;
203
+ gap: var(--spacing-1, 0.25rem);
204
+ }
205
+ .property-row.checkbox-row[data-v-7ea3df75] {
206
+ flex-direction: row;
207
+ align-items: center;
208
+ justify-content: space-between;
209
+ }
210
+ .property-label[data-v-7ea3df75] {
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-7ea3df75] {
216
+ color: var(--color-danger, #ef4444);
217
+ }
218
+ .property-input[data-v-7ea3df75] {
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-7ea3df75]:focus {
229
+ outline: none;
230
+ border-color: var(--input-border-focus, #4a6cf7);
231
+ }
232
+ .property-checkbox[data-v-7ea3df75] {
233
+ width: 18px;
234
+ height: 18px;
235
+ cursor: pointer;
236
+ accent-color: var(--primary-color, #4a6cf7);
237
+ }
238
+ .no-selection[data-v-7ea3df75] {
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-7ea3df75] {
248
+ font-size: 2rem;
249
+ margin-bottom: 0.75rem;
250
+ opacity: 0.5;
251
+ }
252
+ .no-selection p[data-v-7ea3df75] {
253
+ margin: 0;
254
+ font-size: var(--font-size-sm, 0.875rem);
255
+ }
256
+ .field-hint[data-v-7ea3df75] {
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-7ea3df75] {
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-7ea3df75] {
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-7ea3df75]:hover {
284
+ background: var(--primary-color-hover, #3d5bd9);
285
+ }
286
+ .action-btn i[data-v-7ea3df75] {
287
+ font-size: 0.875rem;
288
+ }
289
+
290
+ .help-section[data-v-5991e8aa] {
291
+ margin-bottom: 1.5rem;
292
+ }
293
+ .help-section[data-v-5991e8aa]:last-child {
294
+ margin-bottom: 0;
295
+ }
296
+ .help-section h4[data-v-5991e8aa] {
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-5991e8aa] {
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-5991e8aa] {
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-5991e8aa] {
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-5991e8aa] {
321
+ margin-bottom: 0.375rem;
322
+ line-height: 1.5;
323
+ }
324
+ .help-list code[data-v-5991e8aa] {
325
+ background: var(--bg-secondary, #f8f9fa);
326
+ padding: 0.125rem 0.375rem;
327
+ border-radius: 3px;
328
+ font-family: "Fira Code", "Monaco", monospace;
329
+ font-size: 0.8125rem;
330
+ }
331
+ .help-code[data-v-5991e8aa] {
332
+ display: block;
333
+ background: #282c34;
334
+ padding: 0.75rem 1rem;
335
+ border-radius: 6px;
336
+ font-family: "Fira Code", "Monaco", monospace;
337
+ font-size: 0.8125rem;
338
+ overflow-x: auto;
339
+ margin: 0.5rem 0;
340
+ }
341
+ .help-code code[data-v-5991e8aa] {
342
+ color: #abb2bf;
343
+ white-space: pre;
344
+ }
345
+ .help-code-small[data-v-5991e8aa] {
346
+ display: block;
347
+ background: #282c34;
348
+ padding: 0.5rem 0.75rem;
349
+ border-radius: 4px;
350
+ font-family: "Fira Code", "Monaco", monospace;
351
+ font-size: 0.75rem;
352
+ overflow-x: auto;
353
+ margin: 0;
354
+ }
355
+ .help-code-small code[data-v-5991e8aa] {
356
+ color: #abb2bf;
357
+ white-space: pre;
358
+ }
359
+ .help-note[data-v-5991e8aa] {
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-5991e8aa] {
370
+ color: var(--color-accent, #0891b2);
371
+ flex-shrink: 0;
372
+ margin-top: 0.125rem;
373
+ }
374
+ .help-note code[data-v-5991e8aa] {
375
+ background: rgba(255, 255, 255, 0.5);
376
+ padding: 0.125rem 0.375rem;
377
+ border-radius: 3px;
378
+ font-family: "Fira Code", "Monaco", monospace;
379
+ font-size: 0.8125rem;
380
+ }
381
+ .pattern-grid[data-v-5991e8aa] {
382
+ display: grid;
383
+ grid-template-columns: repeat(2, 1fr);
384
+ gap: 1rem;
385
+ margin-top: 0.75rem;
386
+ }
387
+ .pattern-item[data-v-5991e8aa] {
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-5991e8aa] {
394
+ display: flex;
395
+ flex-direction: column;
396
+ gap: 0.5rem;
397
+ }
398
+ .shortcut[data-v-5991e8aa] {
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-5991e8aa] {
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: 0 1px 2px rgba(0, 0, 0, 0.05);
418
+ }
419
+
420
+ /* Dark mode adjustments */
421
+ [data-theme="dark"] .help-note[data-v-5991e8aa] {
422
+ background: rgba(8, 145, 178, 0.1);
423
+ }
424
+ [data-theme="dark"] .help-note code[data-v-5991e8aa] {
425
+ background: rgba(0, 0, 0, 0.2);
426
+ }
427
+ [data-theme="dark"] .help-list code[data-v-5991e8aa] {
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-9323159f] {
493
+ background: #282c34;
494
+ border-radius: 4px;
495
+ overflow-x: auto;
496
+ }
497
+ .code-preview pre[data-v-9323159f] {
498
+ margin: 0;
499
+ padding: 1rem;
500
+ }
501
+ .code-preview code[data-v-9323159f] {
502
+ font-family: "Fira Code", "Monaco", monospace;
503
+ font-size: 0.8125rem;
504
+ color: #abb2bf;
505
+ white-space: pre;
506
+ }
507
+
508
+ .modal-header-error[data-v-a56bfe3f] {
509
+ background: #fef2f2;
510
+ border-bottom-color: #fecaca;
511
+ }
512
+ .modal-header-error .modal-title[data-v-a56bfe3f] {
513
+ color: #dc2626;
514
+ }
515
+ .modal-header-error .modal-title i[data-v-a56bfe3f] {
516
+ margin-right: 0.5rem;
517
+ }
518
+ .validation-intro[data-v-a56bfe3f] {
519
+ margin: 0 0 1rem 0;
520
+ color: var(--text-secondary);
521
+ }
522
+ .validation-errors-list[data-v-a56bfe3f] {
523
+ list-style: none;
524
+ padding: 0;
525
+ margin: 0;
526
+ }
527
+ .validation-error-item[data-v-a56bfe3f] {
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-a56bfe3f]:last-child {
536
+ border-bottom: none;
537
+ }
538
+ .validation-error-item i[data-v-a56bfe3f] {
539
+ color: #dc2626;
540
+ margin-top: 0.125rem;
541
+ }
542
+
543
+ .loading-indicator[data-v-ab27c047] {
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-ab27c047] {
552
+ font-size: 1.25rem;
553
+ }
554
+ .empty-nodes[data-v-ab27c047] {
555
+ text-align: center;
556
+ padding: 3rem;
557
+ color: var(--text-secondary);
558
+ }
559
+ .empty-nodes i[data-v-ab27c047] {
560
+ font-size: 3rem;
561
+ margin-bottom: 1rem;
562
+ opacity: 0.5;
563
+ }
564
+ .empty-nodes p[data-v-ab27c047] {
565
+ margin: 0;
566
+ }
567
+ .empty-hint[data-v-ab27c047] {
568
+ font-size: 0.8125rem;
569
+ margin-top: 0.5rem !important;
570
+ }
571
+ .nodes-grid[data-v-ab27c047] {
572
+ display: grid;
573
+ grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
574
+ gap: 1rem;
575
+ }
576
+ .node-card[data-v-ab27c047] {
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-ab27c047]:hover {
585
+ border-color: var(--primary-color);
586
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
587
+ transform: translateY(-2px);
588
+ }
589
+ .node-card-header[data-v-ab27c047] {
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-ab27c047] {
598
+ color: var(--primary-color);
599
+ }
600
+ .node-name[data-v-ab27c047] {
601
+ font-weight: 600;
602
+ font-size: 0.9375rem;
603
+ }
604
+ .node-card-body[data-v-ab27c047] {
605
+ padding: 0.75rem 1rem;
606
+ }
607
+ .node-category[data-v-ab27c047] {
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: white;
615
+ border-radius: 3px;
616
+ margin-bottom: 0.5rem;
617
+ }
618
+ .node-description[data-v-ab27c047] {
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-ab27c047] {
625
+ padding: 0.5rem 1rem;
626
+ border-top: 1px solid var(--border-color);
627
+ background: var(--bg-secondary);
628
+ }
629
+ .node-file[data-v-ab27c047] {
630
+ font-size: 0.75rem;
631
+ color: var(--text-secondary);
632
+ font-family: "Fira Code", "Monaco", monospace;
633
+ }
634
+ .node-code-view[data-v-ab27c047] {
635
+ border-radius: 6px;
636
+ overflow: hidden;
637
+ border: 1px solid var(--border-color, #3a3a4a);
638
+ }
639
+ .modal-header-error[data-v-ab27c047] {
640
+ background: #fef2f2;
641
+ border-bottom-color: #fecaca;
642
+ }
643
+ .modal-header-error .modal-title[data-v-ab27c047] {
644
+ color: #dc2626;
645
+ }
646
+ .modal-header-error .modal-title i[data-v-ab27c047] {
647
+ margin-right: 0.5rem;
648
+ }
649
+ .delete-warning[data-v-ab27c047] {
650
+ color: #dc2626;
651
+ font-size: 0.875rem;
652
+ margin-top: 0.5rem;
653
+ }
654
+ .btn-danger[data-v-ab27c047] {
655
+ background: #dc2626;
656
+ color: white;
657
+ }
658
+ .btn-danger[data-v-ab27c047]:hover:not(:disabled) {
659
+ background: #b91c1c;
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-5e08bde1] {
966
+ position: relative;
967
+ }
968
+ .icon-label[data-v-5e08bde1] {
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-5e08bde1] {
976
+ position: relative;
977
+ }
978
+ .current-icon[data-v-5e08bde1] {
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-5e08bde1]:hover {
990
+ border-color: var(--primary-color, #4a6cf7);
991
+ }
992
+ .icon-preview[data-v-5e08bde1] {
993
+ width: 24px;
994
+ height: 24px;
995
+ object-fit: contain;
996
+ }
997
+ .icon-name[data-v-5e08bde1] {
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-5e08bde1] {
1006
+ font-size: 0.75rem;
1007
+ color: var(--text-secondary, #6b7280);
1008
+ }
1009
+ .icon-dropdown[data-v-5e08bde1] {
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: 0 4px 12px rgba(0, 0, 0, 0.15);
1019
+ z-index: 1000;
1020
+ max-height: 300px;
1021
+ overflow-y: auto;
1022
+ }
1023
+ .upload-section[data-v-5e08bde1] {
1024
+ padding: 0.75rem;
1025
+ border-bottom: 1px solid var(--border-color, #e5e7eb);
1026
+ }
1027
+ .upload-btn[data-v-5e08bde1] {
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-5e08bde1]: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-5e08bde1] {
1048
+ padding: 0.5rem;
1049
+ }
1050
+ .section-title[data-v-5e08bde1] {
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-5e08bde1] {
1060
+ display: grid;
1061
+ grid-template-columns: repeat(auto-fill, minmax(80px, 1fr));
1062
+ gap: 0.5rem;
1063
+ }
1064
+ .icon-option[data-v-5e08bde1] {
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-5e08bde1]:hover {
1077
+ background: var(--bg-secondary, #f3f4f6);
1078
+ }
1079
+ .icon-option.selected[data-v-5e08bde1] {
1080
+ border-color: var(--primary-color, #4a6cf7);
1081
+ background: rgba(74, 108, 247, 0.1);
1082
+ }
1083
+ .icon-img[data-v-5e08bde1] {
1084
+ width: 32px;
1085
+ height: 32px;
1086
+ object-fit: contain;
1087
+ }
1088
+ .icon-filename[data-v-5e08bde1] {
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-5e08bde1] {
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(--danger-color, #ef4444);
1107
+ color: white;
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-5e08bde1] {
1117
+ opacity: 1;
1118
+ }
1119
+ .delete-icon-btn[data-v-5e08bde1]:hover {
1120
+ background: var(--danger-color-hover, #dc2626);
1121
+ }
1122
+ .backdrop[data-v-5e08bde1] {
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-1c613876] {
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-1c613876] {
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-1c613876] {
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-1c613876] {
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-1c613876] {
1169
+ display: flex;
1170
+ height: 100%;
1171
+ background-color: var(--color-background-secondary);
1172
+ }
1173
+ .node-designer-sidebar[data-v-1c613876] {
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-1c613876] {
1181
+ flex: 1;
1182
+ min-width: 0;
1183
+ position: relative;
1184
+ }
1185
+ .node-designer-properties[data-v-1c613876] {
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-1c613876] {
1196
+ list-style: none;
1197
+ padding: 0;
1198
+ margin: 0;
1199
+ }
1200
+ .component-item[data-v-1c613876] {
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-1c613876]:hover {
1212
+ background-color: var(--color-background-hover);
1213
+ }
1214
+ .component-item[data-v-1c613876]:last-child {
1215
+ border-bottom: none;
1216
+ }
1217
+ .component-icon[data-v-1c613876] {
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-1c613876] {
1228
+ margin-bottom: var(--spacing-4);
1229
+ }
1230
+ .property-group-title[data-v-1c613876] {
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-1c613876] {
1241
+ display: flex;
1242
+ flex-direction: column;
1243
+ gap: var(--spacing-1);
1244
+ margin-bottom: var(--spacing-3);
1245
+ }
1246
+ .property-label[data-v-1c613876] {
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-1c613876] {
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-1c613876]:focus {
1262
+ outline: none;
1263
+ border-color: var(--input-border-focus);
1264
+ }
1265
+
1266
+ /* Validation message styles */
1267
+ .validation-message[data-v-1c613876] {
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-1c613876] {
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-1c613876] {
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-1c613876] {
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-1c613876] {
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-1c613876] {
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-1c613876] {
1308
+ display: flex;
1309
+ flex-direction: column;
1310
+ }
1311
+ .page-title[data-v-1c613876] {
1312
+ margin: 0;
1313
+ font-size: 1.5rem;
1314
+ font-weight: 600;
1315
+ }
1316
+ .page-description[data-v-1c613876] {
1317
+ margin: 0.25rem 0 0 0;
1318
+ color: var(--text-secondary);
1319
+ font-size: 0.875rem;
1320
+ }
1321
+ .header-actions[data-v-1c613876] {
1322
+ display: flex;
1323
+ gap: 0.5rem;
1324
+ }
1325
+ .designer-layout[data-v-1c613876] {
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-1c613876] {
1337
+ display: flex;
1338
+ flex-direction: column;
1339
+ gap: 1.5rem;
1340
+ padding-bottom: 3rem;
1341
+ }
1342
+ .metadata-section h4[data-v-1c613876] {
1343
+ margin: 0 0 0.75rem 0;
1344
+ font-size: 0.9375rem;
1345
+ font-weight: 600;
1346
+ }
1347
+ .form-grid[data-v-1c613876] {
1348
+ display: grid;
1349
+ grid-template-columns: repeat(2, 1fr);
1350
+ gap: 0.75rem;
1351
+ }
1352
+ .form-field[data-v-1c613876] {
1353
+ display: flex;
1354
+ flex-direction: column;
1355
+ gap: 0.25rem;
1356
+ }
1357
+ .form-field label[data-v-1c613876] {
1358
+ font-size: 0.75rem;
1359
+ font-weight: 500;
1360
+ color: var(--text-secondary);
1361
+ }
1362
+ .form-input[data-v-1c613876] {
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-1c613876]:focus {
1371
+ outline: none;
1372
+ border-color: var(--primary-color);
1373
+ }
1374
+ .icon-field[data-v-1c613876] {
1375
+ grid-column: span 2;
1376
+ }
1377
+
1378
+ /* Sections */
1379
+ .sections-area[data-v-1c613876] {
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-1c613876] {
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-1c613876] {
1394
+ margin: 0;
1395
+ font-size: 0.9375rem;
1396
+ font-weight: 600;
1397
+ }
1398
+ .add-section-btn[data-v-1c613876] {
1399
+ display: inline-flex;
1400
+ align-items: center;
1401
+ gap: 0.375rem;
1402
+ padding: 0.5rem 1rem;
1403
+ background: #4a6cf7;
1404
+ color: white;
1405
+ border: none;
1406
+ border-radius: 4px;
1407
+ font-size: 0.875rem;
1408
+ font-weight: 500;
1409
+ cursor: pointer;
1410
+ transition: background 0.2s;
1411
+ }
1412
+ .add-section-btn[data-v-1c613876]:hover {
1413
+ background: #3d5bd9;
1414
+ }
1415
+ .add-section-btn i[data-v-1c613876] {
1416
+ font-size: 0.75rem;
1417
+ }
1418
+ .empty-sections[data-v-1c613876] {
1419
+ text-align: center;
1420
+ padding: 2rem;
1421
+ color: var(--text-secondary);
1422
+ }
1423
+ .empty-sections i[data-v-1c613876] {
1424
+ font-size: 2rem;
1425
+ margin-bottom: 0.5rem;
1426
+ }
1427
+ .empty-sections p[data-v-1c613876] {
1428
+ margin: 0;
1429
+ }