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
@@ -2,11 +2,9 @@
2
2
  Pytest configuration and shared fixtures for migration tool tests.
3
3
  """
4
4
 
5
- import pytest
6
5
  import sys
7
6
  from pathlib import Path
8
7
 
9
-
10
8
  # Ensure tools package is importable
11
9
  REPO_ROOT = Path(__file__).parent.parent.parent.parent
12
10
  if str(REPO_ROOT) not in sys.path:
@@ -20,4 +18,4 @@ def pytest_configure(config):
20
18
  )
21
19
  config.addinivalue_line(
22
20
  "markers", "requires_yaml: marks tests that require PyYAML"
23
- )
21
+ )
@@ -7,13 +7,12 @@ These tests verify that:
7
7
  3. All node types are handled correctly in migration
8
8
  """
9
9
 
10
+ import json
10
11
  import pickle
11
12
  import tempfile
12
- import json
13
13
  from pathlib import Path
14
- from typing import Dict, Any
15
- import pytest
16
14
 
15
+ import pytest
17
16
 
18
17
  # =============================================================================
19
18
  # FIXTURES
@@ -35,10 +34,7 @@ class TestReceivedTableTransformation:
35
34
 
36
35
  def test_csv_flat_to_nested(self, temp_dir):
37
36
  """Test that flat CSV fields become nested in table_settings."""
38
- from tools.migrate.legacy_schemas import (
39
- FlowInformation, FlowSettings, NodeInformation,
40
- NodeRead, ReceivedTable
41
- )
37
+ from tools.migrate.legacy_schemas import FlowInformation, FlowSettings, NodeInformation, NodeRead, ReceivedTable
42
38
  from tools.migrate.migrate import migrate_flowfile
43
39
 
44
40
  # OLD format: flat fields
@@ -96,10 +92,7 @@ class TestReceivedTableTransformation:
96
92
 
97
93
  def test_excel_flat_to_nested(self, temp_dir):
98
94
  """Test that flat Excel fields become nested in table_settings."""
99
- from tools.migrate.legacy_schemas import (
100
- FlowInformation, FlowSettings, NodeInformation,
101
- NodeRead, ReceivedTable
102
- )
95
+ from tools.migrate.legacy_schemas import FlowInformation, FlowSettings, NodeInformation, NodeRead, ReceivedTable
103
96
  from tools.migrate.migrate import migrate_flowfile
104
97
 
105
98
  # OLD format: flat fields
@@ -154,10 +147,7 @@ class TestReceivedTableTransformation:
154
147
 
155
148
  def test_parquet_flat_to_nested(self, temp_dir):
156
149
  """Test that parquet file type gets table_settings."""
157
- from tools.migrate.legacy_schemas import (
158
- FlowInformation, FlowSettings, NodeInformation,
159
- NodeRead, ReceivedTable
160
- )
150
+ from tools.migrate.legacy_schemas import FlowInformation, FlowSettings, NodeInformation, NodeRead, ReceivedTable
161
151
  from tools.migrate.migrate import migrate_flowfile
162
152
 
163
153
  received = ReceivedTable(
@@ -199,8 +189,12 @@ class TestOutputSettingsTransformation:
199
189
  def test_csv_output_consolidation(self, temp_dir):
200
190
  """Test that separate output_csv_table becomes table_settings."""
201
191
  from tools.migrate.legacy_schemas import (
202
- FlowInformation, FlowSettings, NodeInformation,
203
- NodeOutput, OutputSettings, OutputCsvTable
192
+ FlowInformation,
193
+ FlowSettings,
194
+ NodeInformation,
195
+ NodeOutput,
196
+ OutputCsvTable,
197
+ OutputSettings,
204
198
  )
205
199
  from tools.migrate.migrate import migrate_flowfile
206
200
 
@@ -249,8 +243,12 @@ class TestOutputSettingsTransformation:
249
243
  def test_excel_output_consolidation(self, temp_dir):
250
244
  """Test that separate output_excel_table becomes table_settings."""
251
245
  from tools.migrate.legacy_schemas import (
252
- FlowInformation, FlowSettings, NodeInformation,
253
- NodeOutput, OutputSettings, OutputExcelTable
246
+ FlowInformation,
247
+ FlowSettings,
248
+ NodeInformation,
249
+ NodeOutput,
250
+ OutputExcelTable,
251
+ OutputSettings,
254
252
  )
255
253
  from tools.migrate.migrate import migrate_flowfile
256
254
 
@@ -294,11 +292,9 @@ class TestOutputSettingsTransformation:
294
292
  class TestNodeTypeMigration:
295
293
  """Test that all node types can be migrated correctly."""
296
294
 
297
- def _create_and_migrate(self, temp_dir, node_type: str, setting_input) -> Dict:
295
+ def _create_and_migrate(self, temp_dir, node_type: str, setting_input) -> dict:
298
296
  """Helper to create a flow with one node and migrate it."""
299
- from tools.migrate.legacy_schemas import (
300
- FlowInformation, FlowSettings, NodeInformation
301
- )
297
+ from tools.migrate.legacy_schemas import FlowInformation, FlowSettings, NodeInformation
302
298
  from tools.migrate.migrate import migrate_flowfile
303
299
 
304
300
  flow = FlowInformation(
@@ -338,7 +334,7 @@ class TestNodeTypeMigration:
338
334
 
339
335
  def test_migrate_filter_node(self, temp_dir):
340
336
  """Test filter node migration."""
341
- from tools.migrate.legacy_schemas import NodeFilter, FilterInput, BasicFilter
337
+ from tools.migrate.legacy_schemas import BasicFilter, FilterInput, NodeFilter
342
338
 
343
339
  node = NodeFilter(
344
340
  flow_id=1,
@@ -355,7 +351,7 @@ class TestNodeTypeMigration:
355
351
 
356
352
  def test_migrate_formula_node(self, temp_dir):
357
353
  """Test formula node migration."""
358
- from tools.migrate.legacy_schemas import NodeFormula, FunctionInput, FieldInput
354
+ from tools.migrate.legacy_schemas import FieldInput, FunctionInput, NodeFormula
359
355
 
360
356
  node = NodeFormula(
361
357
  flow_id=1,
@@ -372,9 +368,7 @@ class TestNodeTypeMigration:
372
368
 
373
369
  def test_migrate_join_node(self, temp_dir):
374
370
  """Test join node migration."""
375
- from tools.migrate.legacy_schemas import (
376
- NodeJoin, JoinInput, JoinMap, JoinInputs, SelectInput
377
- )
371
+ from tools.migrate.legacy_schemas import JoinInput, JoinInputs, JoinMap, NodeJoin, SelectInput
378
372
 
379
373
  node = NodeJoin(
380
374
  flow_id=1,
@@ -393,9 +387,7 @@ class TestNodeTypeMigration:
393
387
 
394
388
  def test_migrate_join_node_with_none_selects(self, temp_dir):
395
389
  """Test join node migration when left_select/right_select are None (old format)."""
396
- from tools.migrate.legacy_schemas import (
397
- NodeJoin, JoinInput, JoinMap
398
- )
390
+ from tools.migrate.legacy_schemas import JoinInput, JoinMap, NodeJoin
399
391
 
400
392
  # OLD format: left_select and right_select could be None
401
393
  node = NodeJoin(
@@ -418,9 +410,7 @@ class TestNodeTypeMigration:
418
410
 
419
411
  def test_migrate_groupby_node(self, temp_dir):
420
412
  """Test group by node migration."""
421
- from tools.migrate.legacy_schemas import (
422
- NodeGroupBy, GroupByInput, AggColl
423
- )
413
+ from tools.migrate.legacy_schemas import AggColl, GroupByInput, NodeGroupBy
424
414
 
425
415
  node = NodeGroupBy(
426
416
  flow_id=1,
@@ -487,9 +477,7 @@ class TestLegacySchemas:
487
477
 
488
478
  def test_output_settings_has_separate_tables(self):
489
479
  """Verify OLD OutputSettings has separate table fields."""
490
- from tools.migrate.legacy_schemas import (
491
- OutputSettings, OutputCsvTable, OutputExcelTable
492
- )
480
+ from tools.migrate.legacy_schemas import OutputCsvTable, OutputExcelTable, OutputSettings
493
481
 
494
482
  os = OutputSettings(
495
483
  name='out.csv',
@@ -542,9 +530,16 @@ class TestRoundTrip:
542
530
  yaml = pytest.importorskip('yaml')
543
531
 
544
532
  from tools.migrate.legacy_schemas import (
545
- FlowInformation, FlowSettings, NodeInformation,
546
- NodeRead, ReceivedTable, NodeSelect, SelectInput,
547
- NodeOutput, OutputSettings, OutputCsvTable
533
+ FlowInformation,
534
+ FlowSettings,
535
+ NodeInformation,
536
+ NodeOutput,
537
+ NodeRead,
538
+ NodeSelect,
539
+ OutputCsvTable,
540
+ OutputSettings,
541
+ ReceivedTable,
542
+ SelectInput,
548
543
  )
549
544
  from tools.migrate.migrate import migrate_flowfile
550
545
 
@@ -624,4 +619,4 @@ class TestRoundTrip:
624
619
 
625
620
 
626
621
  if __name__ == '__main__':
627
- pytest.main([__file__, '-v'])
622
+ pytest.main([__file__, '-v'])
@@ -11,40 +11,39 @@ Run with:
11
11
  import pickle
12
12
  import tempfile
13
13
  from pathlib import Path
14
- from typing import List, Dict, Literal
14
+ from typing import Literal
15
15
 
16
16
  import pytest
17
17
 
18
- from tools.migrate.legacy_schemas import (
19
- # Flow schemas
20
- FlowInformation, FlowSettings, NodeInformation,
21
-
22
- # Node schemas
23
- NodeSelect, NodeFilter, NodeFormula, NodeOutput,
24
- NodeJoin, NodeGroupBy, NodeSort, NodeUnique,
25
- NodePivot, NodeUnpivot, NodeRecordId, NodeTextToRows,
26
- NodeGraphSolver, NodeUnion,
27
-
28
- # Input/Output schemas
29
- OutputSettings, OutputCsvTable,
30
-
31
- # Transform schemas
32
- SelectInput, SelectInputs, JoinInputs, JoinInput, JoinMap,
33
- FilterInput, BasicFilter, FunctionInput, FieldInput,
34
- GroupByInput, AggColl, SortByInput, UniqueInput,
35
- PivotInput, UnpivotInput, RecordIdInput, TextToRowsInput,
36
- GraphSolverInput, UnionInput,
37
- )
38
-
39
- from tools.migrate.migrate import migrate_flowfile
18
+ from flowfile_core.flowfile.flow_graph import FlowGraph, add_connection
40
19
 
41
20
  # Import actual flowfile system for verification
42
21
  from flowfile_core.flowfile.handler import FlowfileHandler
43
- from flowfile_core.flowfile.flow_graph import FlowGraph, add_connection
44
- from flowfile_core.schemas import input_schema, transform_schema, schemas
45
- from flowfile_core.schemas.output_model import RunInformation
46
22
  from flowfile_core.flowfile.manage.io_flowfile import open_flow
47
-
23
+ from flowfile_core.schemas import input_schema, schemas, transform_schema
24
+ from flowfile_core.schemas.output_model import RunInformation
25
+ from tools.migrate.legacy_schemas import (
26
+ AggColl,
27
+ FieldInput,
28
+ FilterInput,
29
+ # Flow schemas
30
+ FlowInformation,
31
+ FlowSettings,
32
+ FunctionInput,
33
+ GroupByInput,
34
+ JoinInput,
35
+ JoinMap,
36
+ NodeFilter,
37
+ NodeFormula,
38
+ NodeGroupBy,
39
+ NodeInformation,
40
+ NodeJoin,
41
+ NodeSelect,
42
+ NodeSort,
43
+ SelectInput,
44
+ SortByInput,
45
+ )
46
+ from tools.migrate.migrate import migrate_flowfile
48
47
 
49
48
  # =============================================================================
50
49
  # HELPERS
@@ -62,7 +61,7 @@ def create_graph(flow_id: int = 1, execution_mode: Literal['Development', 'Perfo
62
61
  return handler.get_flow(flow_id)
63
62
 
64
63
 
65
- def add_manual_input(graph: FlowGraph, data: List[Dict], node_id: int = 1):
64
+ def add_manual_input(graph: FlowGraph, data: list[dict], node_id: int = 1):
66
65
  """Add a manual input node with data."""
67
66
  node_promise = input_schema.NodePromise(
68
67
  flow_id=graph.flow_id,
@@ -113,7 +112,7 @@ def temp_dir():
113
112
 
114
113
 
115
114
  @pytest.fixture
116
- def sample_data() -> List[Dict]:
115
+ def sample_data() -> list[dict]:
117
116
  """Basic sample data for testing."""
118
117
  return [
119
118
  {'name': 'Alice', 'age': 30, 'city': 'NYC', 'sales': 100},
@@ -5,38 +5,68 @@ Run with:
5
5
  pytest tools/migrate/tests/test_node_migrations.py -v
6
6
  """
7
7
 
8
+ import json
8
9
  import pickle
9
10
  import tempfile
10
- import json
11
11
  from pathlib import Path
12
+
12
13
  import pytest
13
14
 
14
15
  from tools.migrate.legacy_schemas import (
16
+ AggColl,
17
+ BasicFilter,
18
+ CrossJoinInput,
19
+ FieldInput,
20
+ FilterInput,
15
21
  # Flow schemas
16
- FlowInformation, FlowSettings, NodeInformation,
17
-
22
+ FlowInformation,
23
+ FlowSettings,
24
+ FunctionInput,
25
+ FuzzyMapping,
26
+ FuzzyMatchInput,
27
+ GraphSolverInput,
28
+ GroupByInput,
29
+ JoinInput,
30
+ JoinInputs,
31
+ JoinMap,
32
+ NodeCrossJoin,
33
+ NodeFilter,
34
+ NodeFormula,
35
+ NodeFuzzyMatch,
36
+ NodeGraphSolver,
37
+ NodeGroupBy,
38
+ NodeInformation,
39
+ NodeJoin,
40
+ NodeOutput,
41
+ NodePivot,
42
+ NodePolarsCode,
18
43
  # Node schemas
19
- NodeRead, NodeSelect, NodeFilter, NodeFormula, NodeOutput,
20
- NodeJoin, NodeCrossJoin, NodeFuzzyMatch, NodePolarsCode,
21
- NodeGroupBy, NodeSort, NodeUnion, NodeUnique,
22
- NodePivot, NodeUnpivot, NodeRecordId, NodeTextToRows,
23
- NodeGraphSolver, NodeSample,
24
-
44
+ NodeRead,
45
+ NodeRecordId,
46
+ NodeSelect,
47
+ NodeSort,
48
+ NodeTextToRows,
49
+ NodeUnion,
50
+ NodeUnique,
51
+ NodeUnpivot,
52
+ OutputCsvTable,
53
+ OutputExcelTable,
54
+ OutputSettings,
55
+ PivotInput,
56
+ PolarsCodeInput,
25
57
  # Input/Output schemas
26
- ReceivedTable, OutputSettings, OutputCsvTable, OutputExcelTable,
27
-
58
+ ReceivedTable,
59
+ RecordIdInput,
28
60
  # Transform schemas
29
- SelectInput, SelectInputs, JoinInputs, JoinInput, JoinMap,
30
- CrossJoinInput, FuzzyMatchInput, FuzzyMapping,
31
- FilterInput, BasicFilter, FunctionInput, FieldInput,
32
- GroupByInput, AggColl, SortByInput, UnionInput, UniqueInput,
33
- PivotInput, UnpivotInput, RecordIdInput, TextToRowsInput,
34
- GraphSolverInput, PolarsCodeInput,
61
+ SelectInput,
62
+ SortByInput,
63
+ TextToRowsInput,
64
+ UnionInput,
65
+ UniqueInput,
66
+ UnpivotInput,
35
67
  )
36
-
37
68
  from tools.migrate.migrate import migrate_flowfile
38
69
 
39
-
40
70
  # =============================================================================
41
71
  # FIXTURES
42
72
  # =============================================================================
@@ -810,4 +840,4 @@ class TestYamlMigration:
810
840
 
811
841
 
812
842
  if __name__ == '__main__':
813
- pytest.main([__file__, '-v'])
843
+ pytest.main([__file__, '-v'])
@@ -1,86 +0,0 @@
1
-
2
- .description-text[data-v-23359c71] {
3
- color: #6c757d;
4
- margin-top: 0.5rem;
5
- font-size: 0.95rem;
6
- }
7
- .info-box[data-v-23359c71] {
8
- display: flex;
9
- gap: 1rem;
10
- padding: 1rem;
11
- background-color: #f8f9fa;
12
- border-left: 4px solid #17a2b8;
13
- border-radius: 4px;
14
- }
15
- .info-box i[data-v-23359c71] {
16
- color: #17a2b8;
17
- font-size: 1.5rem;
18
- margin-top: 0.5rem;
19
- }
20
- .info-box p[data-v-23359c71] {
21
- margin: 0;
22
- margin-bottom: 0.5rem;
23
- }
24
- .info-box p[data-v-23359c71]:last-child {
25
- margin-bottom: 0;
26
- }
27
- .modal-description[data-v-23359c71] {
28
- color: #6c757d;
29
- font-size: 0.9rem;
30
- }
31
- .badge[data-v-23359c71] {
32
- background-color: #e9ecef;
33
- border-radius: 1rem;
34
- padding: 0.25rem 0.75rem;
35
- font-size: 0.75rem;
36
- margin-left: 0.5rem;
37
- }
38
- .auth-badge[data-v-23359c71] {
39
- background-color: #d1ecf1;
40
- color: #0c5460;
41
- }
42
- .warning-text[data-v-23359c71] {
43
- color: #dc3545;
44
- font-size: 0.875rem;
45
- margin-top: 0.5rem;
46
- }
47
- .dialog-footer[data-v-23359c71] {
48
- display: flex;
49
- justify-content: flex-end;
50
- gap: 0.5rem;
51
- margin-top: 1rem;
52
- }
53
- .connection-details[data-v-23359c71] {
54
- font-size: 0.85rem;
55
- color: #6c757d;
56
- margin-top: 0.25rem;
57
- }
58
- .separator[data-v-23359c71] {
59
- margin: 0 0.5rem;
60
- }
61
- .hint-text[data-v-23359c71] {
62
- color: #6c757d;
63
- font-size: 0.875rem;
64
- margin-top: 0.5rem;
65
- }
66
- .mb-3[data-v-23359c71] {
67
- margin-bottom: 1rem;
68
- }
69
- .flex-col[data-v-23359c71] {
70
- display: flex;
71
- flex-direction: column;
72
- }
73
- .gap-2[data-v-23359c71] {
74
- gap: 0.5rem;
75
- }
76
-
77
- /* Cloud-specific styles */
78
- .fa-brands[data-v-23359c71] {
79
- font-size: 1.2rem;
80
- }
81
- .fa-aws[data-v-23359c71] {
82
- color: #ff9900;
83
- }
84
- .fa-microsoft[data-v-23359c71] {
85
- color: #0078d4;
86
- }
@@ -1,32 +0,0 @@
1
-
2
- .custom-node-wrapper[data-v-d7137248] {
3
- padding: 1.5rem;
4
- background-color: #f9fafb; /* bg-gray-50 */
5
- }
6
- .node-header[data-v-d7137248] {
7
- padding-bottom: 1rem;
8
- border-bottom: 1px solid #e5e7eb; /* border-gray-200 */
9
- margin-bottom: 1.5rem;
10
- }
11
- .node-title[data-v-d7137248] {
12
- font-size: 1.25rem; /* text-xl */
13
- font-weight: 700; /* font-bold */
14
- color: #1f2937; /* text-gray-800 */
15
- }
16
- .node-category[data-v-d7137248] {
17
- font-size: 0.875rem; /* text-sm */
18
- color: #6b7280; /* text-gray-500 */
19
- margin-top: 0.25rem;
20
- }
21
- .section-description[data-v-d7137248] {
22
- font-size: 0.875rem;
23
- color: #6b7280; /* text-gray-500 */
24
- margin-top: 0.25rem;
25
- margin-bottom: 1.25rem;
26
- padding-left: 0.5rem;
27
- }
28
- .components-container[data-v-d7137248] {
29
- display: flex;
30
- flex-direction: column;
31
- gap: 1.25rem; /* space-y-5 */
32
- }
@@ -1,64 +0,0 @@
1
-
2
- .description-text[data-v-87a64956] {
3
- color: #6c757d;
4
- margin-top: 0.5rem;
5
- font-size: 0.95rem;
6
- }
7
- .info-box[data-v-87a64956] {
8
- display: flex;
9
- gap: 1rem;
10
- padding: 1rem;
11
- background-color: #f8f9fa;
12
- border-left: 4px solid #17a2b8;
13
- border-radius: 4px;
14
- }
15
- .info-box i[data-v-87a64956] {
16
- color: #17a2b8;
17
- font-size: 1.5rem;
18
- margin-top: 0.5rem;
19
- }
20
- .info-box p[data-v-87a64956] {
21
- margin: 0;
22
- margin-bottom: 0.5rem;
23
- }
24
- .info-box p[data-v-87a64956]:last-child {
25
- margin-bottom: 0;
26
- }
27
- .modal-description[data-v-87a64956] {
28
- color: #6c757d;
29
- font-size: 0.9rem;
30
- }
31
- .badge[data-v-87a64956] {
32
- background-color: #e9ecef;
33
- border-radius: 1rem;
34
- padding: 0.25rem 0.75rem;
35
- font-size: 0.75rem;
36
- margin-left: 0.5rem;
37
- }
38
- .warning-text[data-v-87a64956] {
39
- color: #dc3545;
40
- font-size: 0.875rem;
41
- margin-top: 0.5rem;
42
- }
43
- .dialog-footer[data-v-87a64956] {
44
- display: flex;
45
- justify-content: flex-end;
46
- gap: 0.5rem;
47
- margin-top: 1rem;
48
- }
49
- .connection-details[data-v-87a64956] {
50
- font-size: 0.85rem;
51
- color: #6c757d;
52
- margin-top: 0.25rem;
53
- }
54
- .separator[data-v-87a64956] {
55
- margin: 0 0.5rem;
56
- }
57
- .hint-text[data-v-87a64956] {
58
- color: #6c757d;
59
- font-size: 0.875rem;
60
- margin-top: 0.5rem;
61
- }
62
- .mb-3[data-v-87a64956] {
63
- margin-bottom: 1rem;
64
- }