machinaos 0.0.1

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 (288) hide show
  1. package/.env.template +71 -0
  2. package/LICENSE +21 -0
  3. package/README.md +87 -0
  4. package/bin/cli.js +159 -0
  5. package/client/.dockerignore +45 -0
  6. package/client/Dockerfile +68 -0
  7. package/client/eslint.config.js +29 -0
  8. package/client/index.html +13 -0
  9. package/client/nginx.conf +66 -0
  10. package/client/package.json +48 -0
  11. package/client/src/App.tsx +27 -0
  12. package/client/src/Dashboard.tsx +1173 -0
  13. package/client/src/ParameterPanel.tsx +301 -0
  14. package/client/src/components/AIAgentNode.tsx +321 -0
  15. package/client/src/components/APIKeyValidator.tsx +118 -0
  16. package/client/src/components/ClaudeChatModelNode.tsx +18 -0
  17. package/client/src/components/ConditionalEdge.tsx +189 -0
  18. package/client/src/components/CredentialsModal.tsx +306 -0
  19. package/client/src/components/EdgeConditionEditor.tsx +443 -0
  20. package/client/src/components/GeminiChatModelNode.tsx +18 -0
  21. package/client/src/components/GenericNode.tsx +357 -0
  22. package/client/src/components/LocationParameterPanel.tsx +154 -0
  23. package/client/src/components/ModelNode.tsx +286 -0
  24. package/client/src/components/OpenAIChatModelNode.tsx +18 -0
  25. package/client/src/components/OutputPanel.tsx +471 -0
  26. package/client/src/components/ParameterRenderer.tsx +1874 -0
  27. package/client/src/components/SkillEditorModal.tsx +417 -0
  28. package/client/src/components/SquareNode.tsx +797 -0
  29. package/client/src/components/StartNode.tsx +250 -0
  30. package/client/src/components/ToolkitNode.tsx +365 -0
  31. package/client/src/components/TriggerNode.tsx +463 -0
  32. package/client/src/components/auth/LoginPage.tsx +247 -0
  33. package/client/src/components/auth/ProtectedRoute.tsx +59 -0
  34. package/client/src/components/base/BaseChatModelNode.tsx +271 -0
  35. package/client/src/components/icons/AIProviderIcons.tsx +50 -0
  36. package/client/src/components/maps/GoogleMapsPicker.tsx +137 -0
  37. package/client/src/components/maps/MapsPreviewPanel.tsx +110 -0
  38. package/client/src/components/maps/index.ts +26 -0
  39. package/client/src/components/parameterPanel/InputSection.tsx +1094 -0
  40. package/client/src/components/parameterPanel/LocationPanelLayout.tsx +65 -0
  41. package/client/src/components/parameterPanel/MapsSection.tsx +92 -0
  42. package/client/src/components/parameterPanel/MiddleSection.tsx +571 -0
  43. package/client/src/components/parameterPanel/OutputSection.tsx +81 -0
  44. package/client/src/components/parameterPanel/ParameterPanelLayout.tsx +82 -0
  45. package/client/src/components/parameterPanel/ToolSchemaEditor.tsx +436 -0
  46. package/client/src/components/parameterPanel/index.ts +42 -0
  47. package/client/src/components/shared/DataPanel.tsx +142 -0
  48. package/client/src/components/shared/JSONTreeRenderer.tsx +106 -0
  49. package/client/src/components/ui/AIResultModal.tsx +204 -0
  50. package/client/src/components/ui/AndroidSettingsPanel.tsx +401 -0
  51. package/client/src/components/ui/CodeEditor.tsx +81 -0
  52. package/client/src/components/ui/CollapsibleSection.tsx +88 -0
  53. package/client/src/components/ui/ComponentItem.tsx +154 -0
  54. package/client/src/components/ui/ComponentPalette.tsx +321 -0
  55. package/client/src/components/ui/ConsolePanel.tsx +1074 -0
  56. package/client/src/components/ui/ErrorBoundary.tsx +196 -0
  57. package/client/src/components/ui/InputNodesPanel.tsx +204 -0
  58. package/client/src/components/ui/MapSelector.tsx +314 -0
  59. package/client/src/components/ui/Modal.tsx +149 -0
  60. package/client/src/components/ui/NodeContextMenu.tsx +192 -0
  61. package/client/src/components/ui/NodeOutputPanel.tsx +1150 -0
  62. package/client/src/components/ui/OutputDisplayPanel.tsx +381 -0
  63. package/client/src/components/ui/SettingsPanel.tsx +243 -0
  64. package/client/src/components/ui/TopToolbar.tsx +736 -0
  65. package/client/src/components/ui/WhatsAppSettingsPanel.tsx +345 -0
  66. package/client/src/components/ui/WorkflowSidebar.tsx +294 -0
  67. package/client/src/config/antdTheme.ts +186 -0
  68. package/client/src/config/api.ts +54 -0
  69. package/client/src/contexts/AuthContext.tsx +221 -0
  70. package/client/src/contexts/ThemeContext.tsx +42 -0
  71. package/client/src/contexts/WebSocketContext.tsx +1971 -0
  72. package/client/src/factories/baseChatModelFactory.ts +256 -0
  73. package/client/src/hooks/useAndroidOperations.ts +164 -0
  74. package/client/src/hooks/useApiKeyValidation.ts +107 -0
  75. package/client/src/hooks/useApiKeys.ts +238 -0
  76. package/client/src/hooks/useAppTheme.ts +17 -0
  77. package/client/src/hooks/useComponentPalette.ts +51 -0
  78. package/client/src/hooks/useCopyPaste.ts +155 -0
  79. package/client/src/hooks/useDragAndDrop.ts +124 -0
  80. package/client/src/hooks/useDragVariable.ts +88 -0
  81. package/client/src/hooks/useExecution.ts +313 -0
  82. package/client/src/hooks/useParameterPanel.ts +176 -0
  83. package/client/src/hooks/useReactFlowNodes.ts +189 -0
  84. package/client/src/hooks/useToolSchema.ts +209 -0
  85. package/client/src/hooks/useWhatsApp.ts +196 -0
  86. package/client/src/hooks/useWorkflowManagement.ts +46 -0
  87. package/client/src/index.css +315 -0
  88. package/client/src/main.tsx +19 -0
  89. package/client/src/nodeDefinitions/aiAgentNodes.ts +336 -0
  90. package/client/src/nodeDefinitions/aiModelNodes.ts +340 -0
  91. package/client/src/nodeDefinitions/androidDeviceNodes.ts +140 -0
  92. package/client/src/nodeDefinitions/androidServiceNodes.ts +383 -0
  93. package/client/src/nodeDefinitions/chatNodes.ts +135 -0
  94. package/client/src/nodeDefinitions/codeNodes.ts +54 -0
  95. package/client/src/nodeDefinitions/documentNodes.ts +379 -0
  96. package/client/src/nodeDefinitions/index.ts +15 -0
  97. package/client/src/nodeDefinitions/locationNodes.ts +463 -0
  98. package/client/src/nodeDefinitions/schedulerNodes.ts +220 -0
  99. package/client/src/nodeDefinitions/skillNodes.ts +211 -0
  100. package/client/src/nodeDefinitions/toolNodes.ts +198 -0
  101. package/client/src/nodeDefinitions/utilityNodes.ts +284 -0
  102. package/client/src/nodeDefinitions/whatsappNodes.ts +865 -0
  103. package/client/src/nodeDefinitions/workflowNodes.ts +41 -0
  104. package/client/src/nodeDefinitions.ts +104 -0
  105. package/client/src/schemas/workflowSchema.ts +264 -0
  106. package/client/src/services/dynamicParameterService.ts +96 -0
  107. package/client/src/services/execution/aiAgentExecutionService.ts +35 -0
  108. package/client/src/services/executionService.ts +232 -0
  109. package/client/src/services/workflowApi.ts +91 -0
  110. package/client/src/store/useAppStore.ts +582 -0
  111. package/client/src/styles/theme.ts +508 -0
  112. package/client/src/styles/zIndex.ts +17 -0
  113. package/client/src/types/ComponentTypes.ts +39 -0
  114. package/client/src/types/EdgeCondition.ts +231 -0
  115. package/client/src/types/INodeProperties.ts +288 -0
  116. package/client/src/types/NodeTypes.ts +28 -0
  117. package/client/src/utils/formatters.ts +33 -0
  118. package/client/src/utils/googleMapsLoader.ts +140 -0
  119. package/client/src/utils/locationUtils.ts +85 -0
  120. package/client/src/utils/nodeUtils.ts +31 -0
  121. package/client/src/utils/workflow.ts +30 -0
  122. package/client/src/utils/workflowExport.ts +120 -0
  123. package/client/src/vite-env.d.ts +12 -0
  124. package/client/tailwind.config.js +60 -0
  125. package/client/tsconfig.json +25 -0
  126. package/client/tsconfig.node.json +11 -0
  127. package/client/vite.config.js +35 -0
  128. package/docker-compose.prod.yml +107 -0
  129. package/docker-compose.yml +104 -0
  130. package/docs-MachinaOs/README.md +85 -0
  131. package/docs-MachinaOs/deployment/docker.mdx +228 -0
  132. package/docs-MachinaOs/deployment/production.mdx +345 -0
  133. package/docs-MachinaOs/docs.json +75 -0
  134. package/docs-MachinaOs/faq.mdx +309 -0
  135. package/docs-MachinaOs/favicon.svg +5 -0
  136. package/docs-MachinaOs/installation.mdx +160 -0
  137. package/docs-MachinaOs/introduction.mdx +114 -0
  138. package/docs-MachinaOs/logo/dark.svg +6 -0
  139. package/docs-MachinaOs/logo/light.svg +6 -0
  140. package/docs-MachinaOs/nodes/ai-agent.mdx +216 -0
  141. package/docs-MachinaOs/nodes/ai-models.mdx +240 -0
  142. package/docs-MachinaOs/nodes/android.mdx +411 -0
  143. package/docs-MachinaOs/nodes/overview.mdx +181 -0
  144. package/docs-MachinaOs/nodes/schedulers.mdx +316 -0
  145. package/docs-MachinaOs/nodes/webhooks.mdx +330 -0
  146. package/docs-MachinaOs/nodes/whatsapp.mdx +305 -0
  147. package/docs-MachinaOs/quickstart.mdx +119 -0
  148. package/docs-MachinaOs/tutorials/ai-agent-workflow.mdx +177 -0
  149. package/docs-MachinaOs/tutorials/android-automation.mdx +242 -0
  150. package/docs-MachinaOs/tutorials/first-workflow.mdx +134 -0
  151. package/docs-MachinaOs/tutorials/whatsapp-automation.mdx +185 -0
  152. package/nul +0 -0
  153. package/package.json +70 -0
  154. package/scripts/build.js +158 -0
  155. package/scripts/check-ports.ps1 +33 -0
  156. package/scripts/clean.js +40 -0
  157. package/scripts/docker.js +93 -0
  158. package/scripts/kill-port.ps1 +154 -0
  159. package/scripts/start.js +210 -0
  160. package/scripts/stop.js +325 -0
  161. package/server/.dockerignore +44 -0
  162. package/server/Dockerfile +45 -0
  163. package/server/constants.py +249 -0
  164. package/server/core/__init__.py +1 -0
  165. package/server/core/cache.py +461 -0
  166. package/server/core/config.py +128 -0
  167. package/server/core/container.py +99 -0
  168. package/server/core/database.py +1211 -0
  169. package/server/core/logging.py +314 -0
  170. package/server/main.py +289 -0
  171. package/server/middleware/__init__.py +5 -0
  172. package/server/middleware/auth.py +89 -0
  173. package/server/models/__init__.py +1 -0
  174. package/server/models/auth.py +52 -0
  175. package/server/models/cache.py +24 -0
  176. package/server/models/database.py +211 -0
  177. package/server/models/nodes.py +455 -0
  178. package/server/package.json +9 -0
  179. package/server/pyproject.toml +72 -0
  180. package/server/requirements.txt +83 -0
  181. package/server/routers/__init__.py +1 -0
  182. package/server/routers/android.py +294 -0
  183. package/server/routers/auth.py +203 -0
  184. package/server/routers/database.py +151 -0
  185. package/server/routers/maps.py +142 -0
  186. package/server/routers/nodejs_compat.py +289 -0
  187. package/server/routers/webhook.py +90 -0
  188. package/server/routers/websocket.py +2127 -0
  189. package/server/routers/whatsapp.py +761 -0
  190. package/server/routers/workflow.py +200 -0
  191. package/server/services/__init__.py +1 -0
  192. package/server/services/ai.py +2415 -0
  193. package/server/services/android/__init__.py +27 -0
  194. package/server/services/android/broadcaster.py +114 -0
  195. package/server/services/android/client.py +608 -0
  196. package/server/services/android/manager.py +78 -0
  197. package/server/services/android/protocol.py +165 -0
  198. package/server/services/android_service.py +588 -0
  199. package/server/services/auth.py +131 -0
  200. package/server/services/chat_client.py +160 -0
  201. package/server/services/deployment/__init__.py +12 -0
  202. package/server/services/deployment/manager.py +706 -0
  203. package/server/services/deployment/state.py +47 -0
  204. package/server/services/deployment/triggers.py +275 -0
  205. package/server/services/event_waiter.py +785 -0
  206. package/server/services/execution/__init__.py +77 -0
  207. package/server/services/execution/cache.py +769 -0
  208. package/server/services/execution/conditions.py +373 -0
  209. package/server/services/execution/dlq.py +132 -0
  210. package/server/services/execution/executor.py +1351 -0
  211. package/server/services/execution/models.py +531 -0
  212. package/server/services/execution/recovery.py +235 -0
  213. package/server/services/handlers/__init__.py +126 -0
  214. package/server/services/handlers/ai.py +355 -0
  215. package/server/services/handlers/android.py +260 -0
  216. package/server/services/handlers/code.py +278 -0
  217. package/server/services/handlers/document.py +598 -0
  218. package/server/services/handlers/http.py +193 -0
  219. package/server/services/handlers/polyglot.py +105 -0
  220. package/server/services/handlers/tools.py +845 -0
  221. package/server/services/handlers/triggers.py +107 -0
  222. package/server/services/handlers/utility.py +822 -0
  223. package/server/services/handlers/whatsapp.py +476 -0
  224. package/server/services/maps.py +289 -0
  225. package/server/services/memory_store.py +103 -0
  226. package/server/services/node_executor.py +375 -0
  227. package/server/services/parameter_resolver.py +218 -0
  228. package/server/services/polyglot_client.py +169 -0
  229. package/server/services/scheduler.py +155 -0
  230. package/server/services/skill_loader.py +417 -0
  231. package/server/services/status_broadcaster.py +826 -0
  232. package/server/services/temporal/__init__.py +23 -0
  233. package/server/services/temporal/activities.py +344 -0
  234. package/server/services/temporal/client.py +76 -0
  235. package/server/services/temporal/executor.py +147 -0
  236. package/server/services/temporal/worker.py +251 -0
  237. package/server/services/temporal/workflow.py +355 -0
  238. package/server/services/temporal/ws_client.py +236 -0
  239. package/server/services/text.py +111 -0
  240. package/server/services/user_auth.py +172 -0
  241. package/server/services/websocket_client.py +29 -0
  242. package/server/services/workflow.py +597 -0
  243. package/server/skills/android-skill/SKILL.md +82 -0
  244. package/server/skills/assistant-personality/SKILL.md +45 -0
  245. package/server/skills/code-skill/SKILL.md +140 -0
  246. package/server/skills/http-skill/SKILL.md +161 -0
  247. package/server/skills/maps-skill/SKILL.md +170 -0
  248. package/server/skills/memory-skill/SKILL.md +154 -0
  249. package/server/skills/scheduler-skill/SKILL.md +84 -0
  250. package/server/skills/whatsapp-skill/SKILL.md +283 -0
  251. package/server/uv.lock +2916 -0
  252. package/server/whatsapp-rpc/.dockerignore +30 -0
  253. package/server/whatsapp-rpc/Dockerfile +44 -0
  254. package/server/whatsapp-rpc/Dockerfile.web +17 -0
  255. package/server/whatsapp-rpc/README.md +139 -0
  256. package/server/whatsapp-rpc/cli.js +95 -0
  257. package/server/whatsapp-rpc/configs/config.yaml +7 -0
  258. package/server/whatsapp-rpc/docker-compose.yml +35 -0
  259. package/server/whatsapp-rpc/docs/API.md +410 -0
  260. package/server/whatsapp-rpc/go.mod +67 -0
  261. package/server/whatsapp-rpc/go.sum +203 -0
  262. package/server/whatsapp-rpc/package.json +30 -0
  263. package/server/whatsapp-rpc/schema.json +1294 -0
  264. package/server/whatsapp-rpc/scripts/clean.cjs +66 -0
  265. package/server/whatsapp-rpc/scripts/cli.js +162 -0
  266. package/server/whatsapp-rpc/src/go/cmd/server/main.go +91 -0
  267. package/server/whatsapp-rpc/src/go/config/config.go +49 -0
  268. package/server/whatsapp-rpc/src/go/rpc/rpc.go +446 -0
  269. package/server/whatsapp-rpc/src/go/rpc/server.go +112 -0
  270. package/server/whatsapp-rpc/src/go/whatsapp/history.go +166 -0
  271. package/server/whatsapp-rpc/src/go/whatsapp/messages.go +390 -0
  272. package/server/whatsapp-rpc/src/go/whatsapp/service.go +2130 -0
  273. package/server/whatsapp-rpc/src/go/whatsapp/types.go +261 -0
  274. package/server/whatsapp-rpc/src/python/pyproject.toml +15 -0
  275. package/server/whatsapp-rpc/src/python/whatsapp_rpc/__init__.py +4 -0
  276. package/server/whatsapp-rpc/src/python/whatsapp_rpc/client.py +427 -0
  277. package/server/whatsapp-rpc/web/app.py +609 -0
  278. package/server/whatsapp-rpc/web/requirements.txt +6 -0
  279. package/server/whatsapp-rpc/web/rpc_client.py +427 -0
  280. package/server/whatsapp-rpc/web/static/openapi.yaml +59 -0
  281. package/server/whatsapp-rpc/web/templates/base.html +150 -0
  282. package/server/whatsapp-rpc/web/templates/contacts.html +240 -0
  283. package/server/whatsapp-rpc/web/templates/dashboard.html +320 -0
  284. package/server/whatsapp-rpc/web/templates/groups.html +328 -0
  285. package/server/whatsapp-rpc/web/templates/messages.html +465 -0
  286. package/server/whatsapp-rpc/web/templates/messaging.html +681 -0
  287. package/server/whatsapp-rpc/web/templates/send.html +259 -0
  288. package/server/whatsapp-rpc/web/templates/settings.html +459 -0
@@ -0,0 +1,508 @@
1
+ // Unified theme system - consolidated design tokens and component styles
2
+
3
+ // ============================================================================
4
+ // DRACULA COLOR PALETTE (vibrant action colors + dark theme backgrounds)
5
+ // ============================================================================
6
+ export const dracula = {
7
+ // Vibrant action colors
8
+ green: '#50fa7b', // Run/Success - bright green
9
+ purple: '#bd93f9', // Deploy/Save - purple
10
+ pink: '#ff79c6', // Cancel/Stop - pink
11
+ cyan: '#8be9fd', // Info/Alternative - cyan
12
+ red: '#ff5555', // Error/Danger - red
13
+ orange: '#ffb86c', // Warning - orange
14
+ yellow: '#f1fa8c', // Highlight - yellow
15
+ // Dark theme backgrounds
16
+ background: '#282a36', // Main background
17
+ currentLine: '#44475a', // Current line / elevated background
18
+ selection: '#44475a', // Selection / panel background
19
+ comment: '#6272a4', // Comments / muted text
20
+ foreground: '#f8f8f2', // Main text
21
+ } as const;
22
+
23
+ // ============================================================================
24
+ // SOLARIZED COLOR PALETTE
25
+ // ============================================================================
26
+ export const solarized = {
27
+ // Base colors (dark to light)
28
+ base03: '#002b36', // darkest background
29
+ base02: '#073642', // dark background highlights
30
+ base01: '#586e75', // dark content tone (comments)
31
+ base00: '#657b83', // light content tone
32
+ base0: '#839496', // dark content tone
33
+ base1: '#93a1a1', // light content tone (emphasis)
34
+ base2: '#eee8d5', // light background highlights
35
+ base3: '#fdf6e3', // lightest background
36
+ // Accent colors
37
+ yellow: '#b58900',
38
+ orange: '#cb4b16',
39
+ red: '#dc322f',
40
+ magenta: '#d33682',
41
+ violet: '#6c71c4',
42
+ blue: '#268bd2',
43
+ cyan: '#2aa198',
44
+ green: '#859900',
45
+ } as const;
46
+
47
+ // ============================================================================
48
+ // LIGHT THEME COLORS - Modern, clean design with proper contrast
49
+ // ============================================================================
50
+ export const lightColors = {
51
+ // Backgrounds - slightly warmer canvas for depth
52
+ background: '#f5f7fa', // Slightly blue-gray canvas
53
+ backgroundAlt: '#eef1f5', // Subtle gray for contrast areas
54
+ backgroundPanel: '#ffffff', // Pure white for panels
55
+ backgroundElevated: '#ffffff', // Elevated surfaces
56
+ backgroundHover: 'rgba(0,0,0,0.05)',
57
+ backgroundActive: 'rgba(0,0,0,0.08)',
58
+ backgroundCanvas: '#e8ecf1', // Cooler gray for canvas - more contrast with white nodes
59
+ // Text - high contrast
60
+ text: '#1a1d21', // Near-black for readability
61
+ textSecondary: '#374151', // Darker secondary text (gray-700)
62
+ textMuted: '#4b5563', // gray-600 - muted but readable
63
+ // Borders - subtle but defined
64
+ border: '#d1d5db', // gray-300 - more visible
65
+ borderHover: '#9ca3af', // gray-400
66
+ borderFocus: '#3b82f6', // Brighter blue for focus
67
+ borderNode: '#c7ccd4', // Slightly darker for nodes
68
+ // Shadows - more depth for light mode
69
+ shadow: 'rgba(0,0,0,0.12)',
70
+ shadowLight: 'rgba(0,0,0,0.06)',
71
+ shadowHeavy: 'rgba(0,0,0,0.18)',
72
+ shadowNode: '0 2px 8px rgba(0,0,0,0.1), 0 4px 16px rgba(0,0,0,0.06)',
73
+ // Focus
74
+ focus: '#3b82f6',
75
+ focusRing: 'rgba(59, 130, 246, 0.25)',
76
+ // Semantic
77
+ primary: '#2563eb', // Blue-600 - slightly darker for contrast
78
+ success: '#059669', // Emerald-600
79
+ warning: '#d97706', // Amber-600
80
+ error: '#dc2626', // Red-600
81
+ info: '#0891b2', // Cyan-600
82
+ // Special
83
+ templateVariable: '#7c3aed', // Violet for variables
84
+ // Node-specific
85
+ nodeBackground: '#ffffff',
86
+ nodeBorder: '#d1d5db',
87
+ nodeHeaderBg: '#f3f4f6',
88
+ // Action colors (optimized for light backgrounds - darker for contrast)
89
+ actionRun: '#059669', // Emerald-600
90
+ actionDeploy: '#7c3aed', // Violet
91
+ actionStop: '#dc2626', // Red-600
92
+ actionSave: '#0284c7', // Sky-600
93
+ actionSettings: '#d97706', // Amber-600
94
+ actionCredentials: '#ca8a04', // Yellow-600
95
+ actionTheme: '#7c3aed', // Violet
96
+ actionSidebar: '#0891b2', // Cyan-600
97
+ actionPalette: '#7c3aed', // Violet
98
+ statusSaved: '#059669', // Emerald-600
99
+ statusModified: '#d97706', // Amber-600
100
+ // Edge colors for light mode - MUCH darker for visibility
101
+ edgeDefault: '#6b7280', // gray-500 - much more visible
102
+ edgeSelected: '#7c3aed', // Violet
103
+ edgeExecuting: '#7c3aed', // Violet
104
+ edgeCompleted: '#059669', // Emerald-600
105
+ edgeError: '#dc2626', // Red-600
106
+ // Category colors for light mode (darker, more saturated)
107
+ categoryWorkflow: '#ea580c', // Orange-600
108
+ categoryTrigger: '#db2777', // Pink-600
109
+ categoryAI: '#7c3aed', // Violet-600
110
+ categoryLocation: '#dc2626', // Red-600
111
+ categoryWhatsapp: '#059669', // Emerald-600
112
+ categoryAndroid: '#0891b2', // Cyan-600
113
+ categoryChat: '#ca8a04', // Yellow-600
114
+ categoryCode: '#ea580c', // Orange-600
115
+ categoryUtil: '#7c3aed', // Violet-600
116
+ } as const;
117
+
118
+ // ============================================================================
119
+ // DARK THEME COLORS (Dracula text for better contrast)
120
+ // ============================================================================
121
+ export const darkColors = {
122
+ // Backgrounds - Solarized dark
123
+ background: solarized.base03,
124
+ backgroundAlt: solarized.base02,
125
+ backgroundPanel: solarized.base02,
126
+ backgroundElevated: '#0d1f2d',
127
+ backgroundHover: 'rgba(255,255,255,0.04)',
128
+ backgroundActive: 'rgba(255,255,255,0.08)',
129
+ backgroundCanvas: solarized.base03,
130
+ // Text - Dracula for better contrast
131
+ text: dracula.foreground, // #f8f8f2 - bright white text
132
+ textSecondary: '#bfbfbf', // Lighter secondary text
133
+ textMuted: dracula.comment, // #6272a4 - muted/comments
134
+ // Borders
135
+ border: solarized.base01 + '60',
136
+ borderHover: solarized.base01,
137
+ borderFocus: solarized.blue,
138
+ borderNode: solarized.base01,
139
+ // Shadows
140
+ shadow: 'rgba(0,0,0,0.4)',
141
+ shadowLight: 'rgba(0,0,0,0.25)',
142
+ shadowHeavy: 'rgba(0,0,0,0.5)',
143
+ shadowNode: '0 2px 12px rgba(0,0,0,0.3)',
144
+ // Focus
145
+ focus: solarized.blue,
146
+ focusRing: 'rgba(38, 139, 210, 0.3)',
147
+ // Semantic
148
+ primary: solarized.blue,
149
+ success: solarized.green,
150
+ warning: solarized.yellow,
151
+ error: solarized.red,
152
+ info: solarized.cyan,
153
+ // Special
154
+ templateVariable: solarized.cyan,
155
+ // Node-specific
156
+ nodeBackground: solarized.base02,
157
+ nodeBorder: solarized.base01,
158
+ nodeHeaderBg: solarized.base03,
159
+ // Action colors (Dracula - optimized for dark backgrounds)
160
+ actionRun: dracula.green, // #50fa7b - bright green
161
+ actionDeploy: dracula.purple, // #bd93f9 - purple
162
+ actionStop: dracula.pink, // #ff79c6 - pink
163
+ actionSave: dracula.cyan, // #8be9fd - cyan
164
+ actionSettings: dracula.orange, // #ffb86c - orange
165
+ actionCredentials: dracula.yellow, // #f1fa8c - yellow
166
+ actionTheme: dracula.yellow, // #f1fa8c - yellow (sun icon)
167
+ actionSidebar: dracula.cyan, // #8be9fd - cyan
168
+ actionPalette: dracula.purple, // #bd93f9 - purple
169
+ statusSaved: dracula.green, // #50fa7b - green
170
+ statusModified: dracula.orange, // #ffb86c - orange
171
+ // Edge colors for dark mode
172
+ edgeDefault: dracula.cyan, // Cyan
173
+ edgeSelected: dracula.purple, // Purple
174
+ edgeExecuting: dracula.purple, // Purple
175
+ edgeCompleted: dracula.green, // Green
176
+ edgeError: dracula.red, // Red
177
+ // Category colors for dark mode (Dracula - vibrant)
178
+ categoryWorkflow: dracula.orange,
179
+ categoryTrigger: dracula.pink,
180
+ categoryAI: dracula.purple,
181
+ categoryLocation: dracula.red,
182
+ categoryWhatsapp: dracula.green,
183
+ categoryAndroid: dracula.cyan,
184
+ categoryChat: dracula.yellow,
185
+ categoryCode: dracula.orange,
186
+ categoryUtil: dracula.purple,
187
+ } as const;
188
+
189
+ // ============================================================================
190
+ // BASE THEME (uses light colors by default)
191
+ // ============================================================================
192
+ export const theme = {
193
+ // Color palette - use lightColors as default
194
+ colors: lightColors,
195
+
196
+ // Solarized accent colors (available in both themes)
197
+ accent: solarized,
198
+
199
+ // Dracula vibrant colors (for action buttons)
200
+ dracula: dracula,
201
+
202
+ // Essential spacing scale
203
+ spacing: {
204
+ xs: '4px',
205
+ sm: '8px',
206
+ md: '12px',
207
+ lg: '16px',
208
+ xl: '20px',
209
+ xxl: '32px',
210
+ },
211
+
212
+ // Simplified typography
213
+ fontSize: {
214
+ xs: '11px',
215
+ sm: '12px',
216
+ base: '14px',
217
+ lg: '16px',
218
+ xl: '18px',
219
+ },
220
+
221
+ fontWeight: {
222
+ normal: '400',
223
+ medium: '500',
224
+ semibold: '600',
225
+ },
226
+
227
+ borderRadius: {
228
+ sm: '4px',
229
+ md: '6px',
230
+ lg: '8px',
231
+ },
232
+
233
+ // Node sizes (fixed per industry standard)
234
+ nodeSize: {
235
+ square: '60px', // SquareNode, BaseChatModelNode, ModelNode
236
+ squareIcon: '28px', // Icon inside square node
237
+ handle: '8px', // Connection handles
238
+ statusIndicator: '10px', // Status dot
239
+ paramButton: '16px', // Parameters gear button
240
+ outputBadge: '14px', // Output data indicator
241
+ },
242
+
243
+ // Icon sizes
244
+ iconSize: {
245
+ xs: '12px',
246
+ sm: '16px',
247
+ md: '24px',
248
+ lg: '28px',
249
+ xl: '32px',
250
+ },
251
+
252
+ // Button sizes
253
+ buttonSize: {
254
+ sm: '24px',
255
+ md: '32px',
256
+ lg: '34px',
257
+ },
258
+
259
+ // Layout constants
260
+ layout: {
261
+ sidebarWidth: '288px',
262
+ workflowSidebarWidth: '280px',
263
+ parameterPanelWidth: '320px',
264
+ headerHeight: '60px',
265
+ toolbarHeight: '48px',
266
+ },
267
+
268
+ transitions: {
269
+ fast: '0.2s ease',
270
+ medium: '0.3s ease',
271
+ },
272
+
273
+ // App constants - moved from utils/constants.ts
274
+ constants: {
275
+ storageKeys: {
276
+ workflows: 'react-flow-workflows',
277
+ workflowData: (id: string) => `react-flow-workflows-${id}`,
278
+ },
279
+ defaultWorkflowName: 'Untitled Workflow',
280
+ debounceDelay: {
281
+ workflowUpdate: 100,
282
+ search: 300,
283
+ },
284
+ gridSize: 20,
285
+ defaultNodePosition: { x: 100, y: 200 },
286
+ dragOffset: { x: 75, y: 50 },
287
+ },
288
+ };
289
+
290
+ // Component styles - consolidated from components.ts + theme.ts
291
+ export const styles = {
292
+ // Button variants
293
+ button: {
294
+ base: {
295
+ padding: `${theme.spacing.sm} ${theme.spacing.lg}`,
296
+ borderRadius: theme.borderRadius.md,
297
+ fontSize: theme.fontSize.sm,
298
+ fontWeight: theme.fontWeight.medium,
299
+ cursor: 'pointer',
300
+ transition: theme.transitions.fast,
301
+ border: 'none',
302
+ outline: 'none',
303
+ display: 'inline-flex',
304
+ alignItems: 'center',
305
+ justifyContent: 'center',
306
+ gap: theme.spacing.sm,
307
+ },
308
+ primary: {
309
+ backgroundColor: theme.colors.focus,
310
+ color: 'white',
311
+ },
312
+ secondary: {
313
+ backgroundColor: 'transparent',
314
+ border: `1px solid ${theme.colors.border}`,
315
+ color: theme.colors.textSecondary,
316
+ },
317
+ danger: {
318
+ backgroundColor: '#ef4444',
319
+ color: 'white',
320
+ },
321
+ },
322
+
323
+ // Input styles
324
+ input: {
325
+ base: {
326
+ width: '100%',
327
+ padding: `${theme.spacing.sm} ${theme.spacing.md}`,
328
+ fontSize: theme.fontSize.base,
329
+ border: `1px solid ${theme.colors.border}`,
330
+ borderRadius: theme.borderRadius.md,
331
+ backgroundColor: theme.colors.background,
332
+ color: theme.colors.text,
333
+ fontFamily: 'system-ui, sans-serif',
334
+ outline: 'none',
335
+ transition: `border-color ${theme.transitions.fast}`,
336
+ },
337
+ },
338
+
339
+ // Card styles
340
+ card: {
341
+ base: {
342
+ backgroundColor: theme.colors.background,
343
+ border: `1px solid ${theme.colors.border}`,
344
+ borderRadius: theme.borderRadius.lg,
345
+ boxShadow: `0 1px 2px ${theme.colors.shadowLight}`,
346
+ transition: theme.transitions.fast,
347
+ },
348
+ },
349
+
350
+ // Modal styles
351
+ modal: {
352
+ overlay: {
353
+ position: 'fixed' as const,
354
+ top: 0,
355
+ left: 0,
356
+ right: 0,
357
+ bottom: 0,
358
+ backgroundColor: 'rgba(0, 0, 0, 0.5)',
359
+ display: 'flex',
360
+ alignItems: 'center',
361
+ justifyContent: 'center',
362
+ zIndex: 1000,
363
+ padding: theme.spacing.xl,
364
+ },
365
+ content: {
366
+ backgroundColor: theme.colors.background,
367
+ borderRadius: theme.borderRadius.lg,
368
+ boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.25)',
369
+ width: '100%',
370
+ maxHeight: '90vh',
371
+ display: 'flex',
372
+ flexDirection: 'column' as const,
373
+ overflow: 'hidden',
374
+ },
375
+ header: {
376
+ padding: theme.spacing.xl,
377
+ borderBottom: `1px solid ${theme.colors.border}`,
378
+ backgroundColor: theme.colors.backgroundAlt,
379
+ },
380
+ title: {
381
+ margin: 0,
382
+ fontSize: theme.fontSize.xl,
383
+ fontWeight: theme.fontWeight.semibold,
384
+ color: theme.colors.text,
385
+ },
386
+ },
387
+
388
+ // Layout components
389
+ sidebar: {
390
+ width: '100%',
391
+ height: '100%',
392
+ overflowY: 'auto' as const,
393
+ backgroundColor: theme.colors.backgroundPanel,
394
+ display: 'flex',
395
+ flexDirection: 'column' as const,
396
+ },
397
+
398
+ sidebarHeader: {
399
+ padding: theme.spacing.xl,
400
+ borderBottom: `1px solid ${theme.colors.border}`,
401
+ backgroundColor: theme.colors.background,
402
+ },
403
+
404
+ sidebarTitle: {
405
+ margin: 0,
406
+ fontSize: theme.fontSize.xl,
407
+ fontWeight: theme.fontWeight.semibold,
408
+ color: theme.colors.text,
409
+ fontFamily: 'system-ui, sans-serif',
410
+ },
411
+
412
+ // Component item styles
413
+ componentItem: {
414
+ padding: '10px',
415
+ marginBottom: theme.spacing.sm,
416
+ backgroundColor: theme.colors.background,
417
+ border: `1px solid ${theme.colors.border}`,
418
+ borderRadius: theme.borderRadius.md,
419
+ cursor: 'grab',
420
+ transition: theme.transitions.fast,
421
+ display: 'flex',
422
+ alignItems: 'center',
423
+ gap: '10px',
424
+ boxShadow: `0 1px 2px ${theme.colors.shadowLight}`,
425
+ fontFamily: 'system-ui, sans-serif',
426
+ },
427
+
428
+ componentIcon: {
429
+ fontSize: theme.fontSize.lg,
430
+ width: '28px',
431
+ height: '28px',
432
+ display: 'flex',
433
+ alignItems: 'center',
434
+ justifyContent: 'center',
435
+ borderRadius: theme.borderRadius.md,
436
+ color: theme.colors.background,
437
+ boxShadow: `0 2px 4px ${theme.colors.shadow}`,
438
+ flexShrink: 0,
439
+ },
440
+
441
+ componentTitle: {
442
+ fontWeight: theme.fontWeight.medium,
443
+ fontSize: theme.fontSize.base,
444
+ color: theme.colors.text,
445
+ marginBottom: '1px',
446
+ overflow: 'hidden',
447
+ textOverflow: 'ellipsis',
448
+ whiteSpace: 'nowrap' as const,
449
+ },
450
+
451
+ componentDescription: {
452
+ fontSize: theme.fontSize.sm,
453
+ color: theme.colors.textSecondary,
454
+ overflow: 'hidden',
455
+ textOverflow: 'ellipsis',
456
+ whiteSpace: 'nowrap' as const,
457
+ },
458
+
459
+ // Section styles
460
+ sectionHeader: {
461
+ display: 'flex',
462
+ alignItems: 'center',
463
+ justifyContent: 'space-between',
464
+ padding: `${theme.spacing.sm} ${theme.spacing.md}`,
465
+ fontSize: theme.fontSize.sm,
466
+ fontWeight: theme.fontWeight.semibold,
467
+ color: theme.colors.textSecondary,
468
+ textTransform: 'uppercase' as const,
469
+ letterSpacing: '0.05em',
470
+ fontFamily: 'system-ui, sans-serif',
471
+ backgroundColor: theme.colors.backgroundPanel,
472
+ border: `1px solid ${theme.colors.border}`,
473
+ borderRadius: theme.borderRadius.md,
474
+ cursor: 'pointer',
475
+ transition: theme.transitions.fast,
476
+ userSelect: 'none' as const,
477
+ },
478
+
479
+ sectionContent: {
480
+ overflow: 'hidden',
481
+ transition: `max-height ${theme.transitions.medium}, opacity ${theme.transitions.fast}`,
482
+ },
483
+
484
+ // Layout containers
485
+ mainContainer: {
486
+ width: '100%',
487
+ height: '100%',
488
+ display: 'flex',
489
+ backgroundColor: theme.colors.background,
490
+ color: theme.colors.text,
491
+ fontFamily: 'system-ui, sans-serif',
492
+ },
493
+
494
+ canvasContainer: {
495
+ flex: 1,
496
+ height: '100%',
497
+ position: 'relative' as const,
498
+ backgroundColor: theme.colors.backgroundAlt,
499
+ transition: `margin-left ${theme.transitions.medium}`,
500
+ },
501
+
502
+ reactFlowContainer: {
503
+ width: '100%',
504
+ height: '100%',
505
+ backgroundColor: theme.colors.background,
506
+ },
507
+ };
508
+
@@ -0,0 +1,17 @@
1
+ // Centralized z-index management to prevent conflicts
2
+ export const zIndex = {
3
+ base: 0,
4
+ dropdown: 1000,
5
+ sticky: 1020,
6
+ fixed: 1030,
7
+ modalBackdrop: 1040,
8
+ modal: 1050,
9
+ popover: 1060,
10
+ tooltip: 1070,
11
+ // Specific application layers
12
+ parameterPanel: 1100,
13
+ locationPanel: 1200,
14
+ aiConfigPanel: 1300,
15
+ // Maximum z-index for critical overlays
16
+ alert: 9999
17
+ } as const;
@@ -0,0 +1,39 @@
1
+ import { INodeTypeDescription } from './INodeProperties';
2
+
3
+ export interface ComponentPaletteState {
4
+ collapsedSections: Record<string, boolean>;
5
+ searchQuery: string;
6
+ }
7
+
8
+ export interface ComponentPaletteActions {
9
+ onSearchChange: (query: string) => void;
10
+ onToggleSection: (sectionId: string) => void;
11
+ onDragStart: (event: React.DragEvent, definition: INodeTypeDescription) => void;
12
+ }
13
+
14
+ export interface ComponentPaletteProps extends ComponentPaletteState, ComponentPaletteActions {
15
+ nodeDefinitions: Record<string, INodeTypeDescription>;
16
+ proMode?: boolean; // false = simple mode (only AI categories), true = pro mode (all categories)
17
+ }
18
+
19
+ export interface WorkflowHandlers {
20
+ handleWorkflowNameChange: (name: string) => void;
21
+ handleSave: () => void;
22
+ handleNew: () => void;
23
+ handleOpen: () => void;
24
+ handleSelectWorkflow: (workflow: any) => void;
25
+ handleDeleteWorkflow: (id: string) => void;
26
+ handleDuplicateWorkflow: (workflow: any) => void;
27
+ }
28
+
29
+ export interface DragDropHandlers {
30
+ onDragOver: (event: React.DragEvent) => void;
31
+ onDrop: (event: React.DragEvent) => void;
32
+ handleComponentDragStart: (event: React.DragEvent, definition: any) => void;
33
+ }
34
+
35
+ export interface ReactFlowHandlers {
36
+ onConnect: (params: any) => void;
37
+ onNodesDelete: (deleted: any[]) => void;
38
+ onEdgesDelete: (deleted: any[]) => void;
39
+ }