orcheo-canvas 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 (475) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +32 -0
  3. package/components.json +21 -0
  4. package/dist/assets/index-C8cjvUcR.js +772 -0
  5. package/dist/assets/index-D_Md8dhB.css +1 -0
  6. package/dist/favicon.drawio +83 -0
  7. package/dist/favicon.png +0 -0
  8. package/dist/favicon.svg +4 -0
  9. package/dist/index.html +19 -0
  10. package/eslint.config.js +28 -0
  11. package/index.html +18 -0
  12. package/package.json +165 -0
  13. package/postcss.config.js +6 -0
  14. package/public/favicon.drawio +83 -0
  15. package/public/favicon.png +0 -0
  16. package/public/favicon.svg +4 -0
  17. package/src/App.test.tsx +10 -0
  18. package/src/App.tsx +43 -0
  19. package/src/assets/react.svg +1 -0
  20. package/src/design-system/ui/accordion.tsx +57 -0
  21. package/src/design-system/ui/alert-dialog.tsx +141 -0
  22. package/src/design-system/ui/alert.tsx +59 -0
  23. package/src/design-system/ui/aspect-ratio.tsx +7 -0
  24. package/src/design-system/ui/avatar.tsx +50 -0
  25. package/src/design-system/ui/badge.tsx +37 -0
  26. package/src/design-system/ui/breadcrumb.tsx +115 -0
  27. package/src/design-system/ui/button.tsx +58 -0
  28. package/src/design-system/ui/calendar.tsx +76 -0
  29. package/src/design-system/ui/card.tsx +83 -0
  30. package/src/design-system/ui/carousel/carousel-context.ts +17 -0
  31. package/src/design-system/ui/carousel/carousel-navigation.tsx +65 -0
  32. package/src/design-system/ui/carousel/carousel-provider.tsx +18 -0
  33. package/src/design-system/ui/carousel/carousel-root.tsx +119 -0
  34. package/src/design-system/ui/carousel/carousel-slides.tsx +49 -0
  35. package/src/design-system/ui/carousel/types.ts +24 -0
  36. package/src/design-system/ui/carousel.tsx +6 -0
  37. package/src/design-system/ui/chart-context-shared.ts +27 -0
  38. package/src/design-system/ui/chart-context.tsx +81 -0
  39. package/src/design-system/ui/chart-legend.tsx +68 -0
  40. package/src/design-system/ui/chart-tooltip.tsx +164 -0
  41. package/src/design-system/ui/chart-utils.ts +39 -0
  42. package/src/design-system/ui/chart.tsx +3 -0
  43. package/src/design-system/ui/checkbox.tsx +30 -0
  44. package/src/design-system/ui/collapsible.tsx +11 -0
  45. package/src/design-system/ui/command.tsx +153 -0
  46. package/src/design-system/ui/context-menu.tsx +200 -0
  47. package/src/design-system/ui/dialog.tsx +122 -0
  48. package/src/design-system/ui/drawer.tsx +118 -0
  49. package/src/design-system/ui/dropdown-menu.tsx +201 -0
  50. package/src/design-system/ui/form.tsx +180 -0
  51. package/src/design-system/ui/hover-card.tsx +29 -0
  52. package/src/design-system/ui/input-otp.tsx +71 -0
  53. package/src/design-system/ui/input.tsx +22 -0
  54. package/src/design-system/ui/label.tsx +26 -0
  55. package/src/design-system/ui/menubar-content.tsx +85 -0
  56. package/src/design-system/ui/menubar-items.tsx +123 -0
  57. package/src/design-system/ui/menubar-root.tsx +60 -0
  58. package/src/design-system/ui/menubar.tsx +26 -0
  59. package/src/design-system/ui/navigation-menu.tsx +129 -0
  60. package/src/design-system/ui/pagination.tsx +117 -0
  61. package/src/design-system/ui/popover.tsx +33 -0
  62. package/src/design-system/ui/progress.tsx +28 -0
  63. package/src/design-system/ui/radio-group.tsx +44 -0
  64. package/src/design-system/ui/resizable.tsx +45 -0
  65. package/src/design-system/ui/scroll-area.tsx +48 -0
  66. package/src/design-system/ui/select.tsx +159 -0
  67. package/src/design-system/ui/separator.tsx +31 -0
  68. package/src/design-system/ui/sheet.tsx +140 -0
  69. package/src/design-system/ui/sidebar/constants.ts +6 -0
  70. package/src/design-system/ui/sidebar/sidebar-context.ts +15 -0
  71. package/src/design-system/ui/sidebar/sidebar-layout.tsx +216 -0
  72. package/src/design-system/ui/sidebar/sidebar-menu/index.ts +11 -0
  73. package/src/design-system/ui/sidebar/sidebar-menu/menu-action.tsx +35 -0
  74. package/src/design-system/ui/sidebar/sidebar-menu/menu-badge.tsx +28 -0
  75. package/src/design-system/ui/sidebar/sidebar-menu/menu-button-variants.ts +25 -0
  76. package/src/design-system/ui/sidebar/sidebar-menu/menu-button.tsx +73 -0
  77. package/src/design-system/ui/sidebar/sidebar-menu/menu-skeleton.tsx +45 -0
  78. package/src/design-system/ui/sidebar/sidebar-menu/menu-sub.tsx +61 -0
  79. package/src/design-system/ui/sidebar/sidebar-menu/menu.tsx +33 -0
  80. package/src/design-system/ui/sidebar/sidebar-provider.tsx +132 -0
  81. package/src/design-system/ui/sidebar/sidebar-structure.tsx +152 -0
  82. package/src/design-system/ui/sidebar/use-sidebar.ts +14 -0
  83. package/src/design-system/ui/sidebar.ts +35 -0
  84. package/src/design-system/ui/skeleton.tsx +15 -0
  85. package/src/design-system/ui/slider.tsx +28 -0
  86. package/src/design-system/ui/sonner.tsx +31 -0
  87. package/src/design-system/ui/switch.tsx +29 -0
  88. package/src/design-system/ui/table.tsx +120 -0
  89. package/src/design-system/ui/tabs.tsx +55 -0
  90. package/src/design-system/ui/textarea.tsx +22 -0
  91. package/src/design-system/ui/toast.tsx +129 -0
  92. package/src/design-system/ui/toaster.tsx +35 -0
  93. package/src/design-system/ui/toggle-group.tsx +61 -0
  94. package/src/design-system/ui/toggle.tsx +46 -0
  95. package/src/design-system/ui/tooltip.tsx +32 -0
  96. package/src/features/account/components/settings/appearance-settings-tab.tsx +70 -0
  97. package/src/features/account/components/settings/application-settings-tab.tsx +146 -0
  98. package/src/features/account/components/settings/notification-settings-tab.tsx +157 -0
  99. package/src/features/account/components/settings/team-billing-settings-tab.tsx +164 -0
  100. package/src/features/account/components/theme-settings.tsx +228 -0
  101. package/src/features/account/components/use-theme-preferences.ts +111 -0
  102. package/src/features/account/pages/profile/components/profile-api-keys-tab.tsx +59 -0
  103. package/src/features/account/pages/profile/components/profile-general-tab.tsx +125 -0
  104. package/src/features/account/pages/profile/components/profile-security-tab.tsx +114 -0
  105. package/src/features/account/pages/profile/types.ts +8 -0
  106. package/src/features/account/pages/profile.tsx +64 -0
  107. package/src/features/account/pages/settings.tsx +58 -0
  108. package/src/features/auth/components/auth-logos.tsx +61 -0
  109. package/src/features/auth/components/auth-page.tsx +213 -0
  110. package/src/features/auth/pages/login.tsx +5 -0
  111. package/src/features/auth/pages/signup.tsx +5 -0
  112. package/src/features/chatkit/components/canvas-chat-bubble.tsx +324 -0
  113. package/src/features/chatkit/components/chatkit-surface.tsx +18 -0
  114. package/src/features/chatkit/components/public-chat-error-boundary.tsx +74 -0
  115. package/src/features/chatkit/components/public-chat-widget.tsx +138 -0
  116. package/src/features/chatkit/lib/chatkit-client.test.ts +98 -0
  117. package/src/features/chatkit/lib/chatkit-client.ts +175 -0
  118. package/src/features/chatkit/lib/chatkit-theme.ts +20 -0
  119. package/src/features/chatkit/lib/telemetry.ts +29 -0
  120. package/src/features/chatkit/lib/workflow-session.ts +69 -0
  121. package/src/features/chatkit/pages/public-chat.tsx +391 -0
  122. package/src/features/shared/components/chat-input/attachment-preview.tsx +78 -0
  123. package/src/features/shared/components/chat-input/chat-input-types.ts +13 -0
  124. package/src/features/shared/components/chat-input/emoji-picker.tsx +106 -0
  125. package/src/features/shared/components/chat-input.tsx +234 -0
  126. package/src/features/shared/components/chat-interface-options.ts +305 -0
  127. package/src/features/shared/components/chat-interface.tsx +162 -0
  128. package/src/features/shared/components/chat-interface.types.ts +36 -0
  129. package/src/features/shared/components/chat-message-attachments.tsx +122 -0
  130. package/src/features/shared/components/chat-message-markdown.ts +33 -0
  131. package/src/features/shared/components/chat-message.tsx +128 -0
  132. package/src/features/shared/components/top-navigation/account-menu.tsx +101 -0
  133. package/src/features/shared/components/top-navigation/command-palette-button.tsx +78 -0
  134. package/src/features/shared/components/top-navigation/project-switcher.tsx +64 -0
  135. package/src/features/shared/components/top-navigation/top-navigation-types.ts +16 -0
  136. package/src/features/shared/components/top-navigation/use-window-width.ts +24 -0
  137. package/src/features/shared/components/top-navigation/workflow-breadcrumbs.tsx +107 -0
  138. package/src/features/shared/components/top-navigation.tsx +52 -0
  139. package/src/features/support/components/support-chat-callout.tsx +40 -0
  140. package/src/features/support/components/support-header.tsx +53 -0
  141. package/src/features/support/components/support-help-tabs.tsx +172 -0
  142. package/src/features/support/components/support-resources.tsx +157 -0
  143. package/src/features/support/pages/help-support.tsx +72 -0
  144. package/src/features/workflow/components/canvas/annotations-layer/annotation-composer.tsx +109 -0
  145. package/src/features/workflow/components/canvas/annotations-layer/annotation-item.tsx +141 -0
  146. package/src/features/workflow/components/canvas/annotations-layer/annotation-list.tsx +30 -0
  147. package/src/features/workflow/components/canvas/annotations-layer/types.ts +10 -0
  148. package/src/features/workflow/components/canvas/annotations-layer.tsx +99 -0
  149. package/src/features/workflow/components/canvas/breakpoints-layer.tsx +148 -0
  150. package/src/features/workflow/components/canvas/connection-validator.tsx +230 -0
  151. package/src/features/workflow/components/canvas/custom-edge.tsx +154 -0
  152. package/src/features/workflow/components/canvas/edge-hover-context.tsx +11 -0
  153. package/src/features/workflow/components/canvas/mini-map.tsx +111 -0
  154. package/src/features/workflow/components/canvas/split-pane.tsx +165 -0
  155. package/src/features/workflow/components/canvas/time-travel-debugger.tsx +164 -0
  156. package/src/features/workflow/components/canvas/time-travel-header.tsx +45 -0
  157. package/src/features/workflow/components/canvas/time-travel-playback-controls.tsx +174 -0
  158. package/src/features/workflow/components/canvas/time-travel-state-details.tsx +63 -0
  159. package/src/features/workflow/components/canvas/time-travel-timeline.tsx +80 -0
  160. package/src/features/workflow/components/canvas/time-travel-types.ts +18 -0
  161. package/src/features/workflow/components/canvas/workflow-context-menu.tsx +179 -0
  162. package/src/features/workflow/components/canvas/workflow-controls/action-control-group.tsx +219 -0
  163. package/src/features/workflow/components/canvas/workflow-controls/history-control-group.tsx +84 -0
  164. package/src/features/workflow/components/canvas/workflow-controls/types.ts +18 -0
  165. package/src/features/workflow/components/canvas/workflow-controls.tsx +50 -0
  166. package/src/features/workflow/components/canvas/workflow-flow.tsx +214 -0
  167. package/src/features/workflow/components/canvas/workflow-search.tsx +152 -0
  168. package/src/features/workflow/components/dialogs/add-credential-dialog.tsx +233 -0
  169. package/src/features/workflow/components/dialogs/add-notification-channel-dialog.tsx +230 -0
  170. package/src/features/workflow/components/dialogs/command-palette-items.tsx +77 -0
  171. package/src/features/workflow/components/dialogs/command-palette-types.ts +13 -0
  172. package/src/features/workflow/components/dialogs/command-palette-utils.ts +44 -0
  173. package/src/features/workflow/components/dialogs/command-palette.tsx +195 -0
  174. package/src/features/workflow/components/dialogs/credential-access-badge.tsx +44 -0
  175. package/src/features/workflow/components/dialogs/credential-status-badge.tsx +45 -0
  176. package/src/features/workflow/components/dialogs/credentials-table.tsx +234 -0
  177. package/src/features/workflow/components/dialogs/credentials-vault.tsx +63 -0
  178. package/src/features/workflow/components/dialogs/notification-channel-card.tsx +106 -0
  179. package/src/features/workflow/components/dialogs/notification-event-toggles.tsx +95 -0
  180. package/src/features/workflow/components/dialogs/notification-settings.tsx +108 -0
  181. package/src/features/workflow/components/dialogs/notification-settings.types.ts +34 -0
  182. package/src/features/workflow/components/dialogs/use-command-palette-navigation.ts +60 -0
  183. package/src/features/workflow/components/dialogs/user-role-management/invite-user-dialog.tsx +152 -0
  184. package/src/features/workflow/components/dialogs/user-role-management/role-badges.tsx +83 -0
  185. package/src/features/workflow/components/dialogs/user-role-management/user-role-table.tsx +188 -0
  186. package/src/features/workflow/components/dialogs/user-role-management/user-role-types.ts +20 -0
  187. package/src/features/workflow/components/dialogs/user-role-management.tsx +61 -0
  188. package/src/features/workflow/components/dialogs/version-control-dialog.tsx +232 -0
  189. package/src/features/workflow/components/layouts/sidebar-layout.tsx +208 -0
  190. package/src/features/workflow/components/layouts/use-sidebar-resize.ts +83 -0
  191. package/src/features/workflow/components/layouts/workflow-page-layout.tsx +69 -0
  192. package/src/features/workflow/components/nodes/chat-trigger-node.tsx +106 -0
  193. package/src/features/workflow/components/nodes/group-node.tsx +195 -0
  194. package/src/features/workflow/components/nodes/node-label.tsx +105 -0
  195. package/src/features/workflow/components/nodes/start-end-node.tsx +68 -0
  196. package/src/features/workflow/components/nodes/sticky-note-node.tsx +246 -0
  197. package/src/features/workflow/components/nodes/workflow-node-controls.tsx +91 -0
  198. package/src/features/workflow/components/nodes/workflow-node-handle-config.ts +22 -0
  199. package/src/features/workflow/components/nodes/workflow-node-handles.tsx +79 -0
  200. package/src/features/workflow/components/nodes/workflow-node-style.tsx +50 -0
  201. package/src/features/workflow/components/nodes/workflow-node.tsx +147 -0
  202. package/src/features/workflow/components/nodes/workflow-node.types.ts +32 -0
  203. package/src/features/workflow/components/panels/node-inspector/config-panel.tsx +130 -0
  204. package/src/features/workflow/components/panels/node-inspector/index.tsx +225 -0
  205. package/src/features/workflow/components/panels/node-inspector/input-panel.tsx +199 -0
  206. package/src/features/workflow/components/panels/node-inspector/live-data-unavailable.tsx +26 -0
  207. package/src/features/workflow/components/panels/node-inspector/node-inspector-layout.tsx +251 -0
  208. package/src/features/workflow/components/panels/node-inspector/output-panel.tsx +165 -0
  209. package/src/features/workflow/components/panels/node-inspector/schema-fields.ts +39 -0
  210. package/src/features/workflow/components/panels/node-inspector/types.ts +31 -0
  211. package/src/features/workflow/components/panels/node-inspector/use-node-tester.ts +209 -0
  212. package/src/features/workflow/components/panels/node-inspector/utils.ts +82 -0
  213. package/src/features/workflow/components/panels/rjsf-basic-widgets.tsx +21 -0
  214. package/src/features/workflow/components/panels/rjsf-condition-widgets.tsx +241 -0
  215. package/src/features/workflow/components/panels/rjsf-input-widgets.tsx +105 -0
  216. package/src/features/workflow/components/panels/rjsf-templates.tsx +146 -0
  217. package/src/features/workflow/components/panels/rjsf-text-widgets.tsx +139 -0
  218. package/src/features/workflow/components/panels/rjsf-theme.tsx +16 -0
  219. package/src/features/workflow/components/panels/schema-dnd.ts +79 -0
  220. package/src/features/workflow/components/panels/sidebar-node-item.tsx +42 -0
  221. package/src/features/workflow/components/panels/sidebar-nodes/actions.tsx +34 -0
  222. package/src/features/workflow/components/panels/sidebar-nodes/ai.tsx +40 -0
  223. package/src/features/workflow/components/panels/sidebar-nodes/data.tsx +53 -0
  224. package/src/features/workflow/components/panels/sidebar-nodes/index.ts +2 -0
  225. package/src/features/workflow/components/panels/sidebar-nodes/logic.tsx +127 -0
  226. package/src/features/workflow/components/panels/sidebar-nodes/node-categories.tsx +19 -0
  227. package/src/features/workflow/components/panels/sidebar-nodes/node-lists.ts +71 -0
  228. package/src/features/workflow/components/panels/sidebar-nodes/special.tsx +44 -0
  229. package/src/features/workflow/components/panels/sidebar-nodes/triggers.tsx +44 -0
  230. package/src/features/workflow/components/panels/sidebar-nodes/visualization.tsx +33 -0
  231. package/src/features/workflow/components/panels/sidebar-panel.tsx +243 -0
  232. package/src/features/workflow/components/panels/sidebar-panel.types.ts +73 -0
  233. package/src/features/workflow/components/panels/variable-inspector-table.tsx +99 -0
  234. package/src/features/workflow/components/panels/variable-inspector-tree.tsx +193 -0
  235. package/src/features/workflow/components/panels/variable-inspector-types.ts +3 -0
  236. package/src/features/workflow/components/panels/variable-inspector.tsx +189 -0
  237. package/src/features/workflow/components/panels/workflow-diff-dialog.tsx +207 -0
  238. package/src/features/workflow/components/panels/workflow-execution-details.tsx +118 -0
  239. package/src/features/workflow/components/panels/workflow-execution-history.hooks.ts +116 -0
  240. package/src/features/workflow/components/panels/workflow-execution-history.tsx +150 -0
  241. package/src/features/workflow/components/panels/workflow-execution-history.types.ts +53 -0
  242. package/src/features/workflow/components/panels/workflow-execution-history.utils.ts +195 -0
  243. package/src/features/workflow/components/panels/workflow-execution-sidebar.tsx +221 -0
  244. package/src/features/workflow/components/panels/workflow-governance-panel/subworkflow-list-card.tsx +147 -0
  245. package/src/features/workflow/components/panels/workflow-governance-panel/types.ts +26 -0
  246. package/src/features/workflow/components/panels/workflow-governance-panel/validation-section.tsx +126 -0
  247. package/src/features/workflow/components/panels/workflow-governance-panel.tsx +43 -0
  248. package/src/features/workflow/components/panels/workflow-history-filters.tsx +62 -0
  249. package/src/features/workflow/components/panels/workflow-history-footer.tsx +28 -0
  250. package/src/features/workflow/components/panels/workflow-history-header.tsx +47 -0
  251. package/src/features/workflow/components/panels/workflow-history-table.tsx +148 -0
  252. package/src/features/workflow/components/panels/workflow-history.tsx +150 -0
  253. package/src/features/workflow/components/panels/workflow-node-gallery-data/categories.ts +11 -0
  254. package/src/features/workflow/components/panels/workflow-node-gallery-data/items/actions.tsx +39 -0
  255. package/src/features/workflow/components/panels/workflow-node-gallery-data/items/ai.tsx +39 -0
  256. package/src/features/workflow/components/panels/workflow-node-gallery-data/items/data.tsx +55 -0
  257. package/src/features/workflow/components/panels/workflow-node-gallery-data/items/logic.tsx +39 -0
  258. package/src/features/workflow/components/panels/workflow-node-gallery-data/items/special.tsx +50 -0
  259. package/src/features/workflow/components/panels/workflow-node-gallery-data/items/triggers.tsx +71 -0
  260. package/src/features/workflow/components/panels/workflow-node-gallery-data/types.ts +9 -0
  261. package/src/features/workflow/components/panels/workflow-node-gallery-data.tsx +21 -0
  262. package/src/features/workflow/components/panels/workflow-node-gallery.tsx +86 -0
  263. package/src/features/workflow/components/panels/workflow-tabs.tsx +49 -0
  264. package/src/features/workflow/components/trace/agent-prism/Avatar.tsx +146 -0
  265. package/src/features/workflow/components/trace/agent-prism/Badge.tsx +95 -0
  266. package/src/features/workflow/components/trace/agent-prism/BrandLogo.tsx +102 -0
  267. package/src/features/workflow/components/trace/agent-prism/Button.tsx +124 -0
  268. package/src/features/workflow/components/trace/agent-prism/CollapseAndExpandControls.tsx +45 -0
  269. package/src/features/workflow/components/trace/agent-prism/CollapsibleSection.tsx +124 -0
  270. package/src/features/workflow/components/trace/agent-prism/CopyButton.tsx +63 -0
  271. package/src/features/workflow/components/trace/agent-prism/DetailsView/DetailsView.tsx +143 -0
  272. package/src/features/workflow/components/trace/agent-prism/DetailsView/DetailsViewAttributesTab.tsx +125 -0
  273. package/src/features/workflow/components/trace/agent-prism/DetailsView/DetailsViewContentViewer.tsx +51 -0
  274. package/src/features/workflow/components/trace/agent-prism/DetailsView/DetailsViewHeader.tsx +100 -0
  275. package/src/features/workflow/components/trace/agent-prism/DetailsView/DetailsViewHeaderActions.tsx +21 -0
  276. package/src/features/workflow/components/trace/agent-prism/DetailsView/DetailsViewInputOutputTab.tsx +126 -0
  277. package/src/features/workflow/components/trace/agent-prism/DetailsView/DetailsViewJsonOutput.tsx +30 -0
  278. package/src/features/workflow/components/trace/agent-prism/DetailsView/DetailsViewRawDataTab.tsx +31 -0
  279. package/src/features/workflow/components/trace/agent-prism/IconButton.tsx +75 -0
  280. package/src/features/workflow/components/trace/agent-prism/PriceBadge.tsx +14 -0
  281. package/src/features/workflow/components/trace/agent-prism/SearchInput.tsx +17 -0
  282. package/src/features/workflow/components/trace/agent-prism/SpanBadge.tsx +52 -0
  283. package/src/features/workflow/components/trace/agent-prism/SpanCard/SpanCard.tsx +480 -0
  284. package/src/features/workflow/components/trace/agent-prism/SpanCard/SpanCardBadges.tsx +23 -0
  285. package/src/features/workflow/components/trace/agent-prism/SpanCard/SpanCardConnector.tsx +36 -0
  286. package/src/features/workflow/components/trace/agent-prism/SpanCard/SpanCardTimeline.tsx +60 -0
  287. package/src/features/workflow/components/trace/agent-prism/SpanCard/SpanCardToggle.tsx +39 -0
  288. package/src/features/workflow/components/trace/agent-prism/SpanStatus.tsx +80 -0
  289. package/src/features/workflow/components/trace/agent-prism/TabSelector.tsx +35 -0
  290. package/src/features/workflow/components/trace/agent-prism/Tabs.tsx +140 -0
  291. package/src/features/workflow/components/trace/agent-prism/TextInput.tsx +143 -0
  292. package/src/features/workflow/components/trace/agent-prism/TimestampBadge.tsx +22 -0
  293. package/src/features/workflow/components/trace/agent-prism/TokensBadge.tsx +27 -0
  294. package/src/features/workflow/components/trace/agent-prism/TraceList/TraceList.tsx +87 -0
  295. package/src/features/workflow/components/trace/agent-prism/TraceList/TraceListItem.tsx +86 -0
  296. package/src/features/workflow/components/trace/agent-prism/TraceList/TraceListItemHeader.tsx +37 -0
  297. package/src/features/workflow/components/trace/agent-prism/TraceViewer/TraceViewer.test.tsx +183 -0
  298. package/src/features/workflow/components/trace/agent-prism/TraceViewer/TraceViewer.tsx +207 -0
  299. package/src/features/workflow/components/trace/agent-prism/TraceViewer/TraceViewerDesktopLayout.tsx +99 -0
  300. package/src/features/workflow/components/trace/agent-prism/TraceViewer/TraceViewerMobileLayout.tsx +103 -0
  301. package/src/features/workflow/components/trace/agent-prism/TraceViewer/TraceViewerPlaceholder.tsx +5 -0
  302. package/src/features/workflow/components/trace/agent-prism/TraceViewer/TraceViewerSearchAndControls.tsx +30 -0
  303. package/src/features/workflow/components/trace/agent-prism/TraceViewer/TraceViewerTreeViewContainer.tsx +76 -0
  304. package/src/features/workflow/components/trace/agent-prism/TraceViewer/useTraceSelection.ts +186 -0
  305. package/src/features/workflow/components/trace/agent-prism/TreeView.tsx +73 -0
  306. package/src/features/workflow/components/trace/agent-prism/index.ts +7 -0
  307. package/src/features/workflow/components/trace/agent-prism/shared.ts +170 -0
  308. package/src/features/workflow/components/trace/agent-prism/theme/index.js +97 -0
  309. package/src/features/workflow/components/trace/agent-prism/theme/index.ts +101 -0
  310. package/src/features/workflow/components/trace/agent-prism/theme/theme.css +247 -0
  311. package/src/features/workflow/data/node-types.ts +32 -0
  312. package/src/features/workflow/data/templates/feedly-digest.ts +120 -0
  313. package/src/features/workflow/data/templates/index.ts +30 -0
  314. package/src/features/workflow/data/templates/mongodb-session.ts +59 -0
  315. package/src/features/workflow/data/templates/python-task.ts +59 -0
  316. package/src/features/workflow/data/templates/quickstart-welcome.ts +65 -0
  317. package/src/features/workflow/data/templates/rss-monitor.ts +60 -0
  318. package/src/features/workflow/data/templates/slack-broadcast.ts +58 -0
  319. package/src/features/workflow/data/templates/telegram-broadcast.ts +76 -0
  320. package/src/features/workflow/data/templates/template-owner.ts +7 -0
  321. package/src/features/workflow/data/workflow-data.ts +13 -0
  322. package/src/features/workflow/data/workflow-types.ts +47 -0
  323. package/src/features/workflow/lib/graph-config/constants.ts +7 -0
  324. package/src/features/workflow/lib/graph-config/edge-processing.ts +147 -0
  325. package/src/features/workflow/lib/graph-config/name-mapping.ts +30 -0
  326. package/src/features/workflow/lib/graph-config/node-handlers/branching.ts +171 -0
  327. package/src/features/workflow/lib/graph-config/node-handlers/index.ts +16 -0
  328. package/src/features/workflow/lib/graph-config/node-handlers/integrations.ts +201 -0
  329. package/src/features/workflow/lib/graph-config/node-handlers/set-variable.ts +124 -0
  330. package/src/features/workflow/lib/graph-config/node-processing.ts +163 -0
  331. package/src/features/workflow/lib/graph-config/serialization.ts +31 -0
  332. package/src/features/workflow/lib/graph-config/terminal-connections.ts +37 -0
  333. package/src/features/workflow/lib/graph-config/types.ts +84 -0
  334. package/src/features/workflow/lib/graph-config/utils.ts +65 -0
  335. package/src/features/workflow/lib/graph-config/workload.ts +29 -0
  336. package/src/features/workflow/lib/graph-config.integration.logic.test.ts +168 -0
  337. package/src/features/workflow/lib/graph-config.integration.start-end.test.ts +68 -0
  338. package/src/features/workflow/lib/graph-config.integration.variables.test.ts +67 -0
  339. package/src/features/workflow/lib/graph-config.ts +80 -0
  340. package/src/features/workflow/lib/graph-utils.ts +193 -0
  341. package/src/features/workflow/lib/node-icons.tsx +183 -0
  342. package/src/features/workflow/lib/node-schemas/ai-nodes.ts +81 -0
  343. package/src/features/workflow/lib/node-schemas/base.ts +154 -0
  344. package/src/features/workflow/lib/node-schemas/condition-operators.ts +111 -0
  345. package/src/features/workflow/lib/node-schemas/index.ts +73 -0
  346. package/src/features/workflow/lib/node-schemas/integration-nodes.ts +153 -0
  347. package/src/features/workflow/lib/node-schemas/logic-nodes.ts +110 -0
  348. package/src/features/workflow/lib/node-schemas/state-nodes.ts +45 -0
  349. package/src/features/workflow/lib/node-schemas/trigger-nodes.ts +218 -0
  350. package/src/features/workflow/lib/node-schemas/ui.ts +88 -0
  351. package/src/features/workflow/lib/python-node.ts +23 -0
  352. package/src/features/workflow/lib/workflow-diff.ts +191 -0
  353. package/src/features/workflow/lib/workflow-execution-builders.ts +101 -0
  354. package/src/features/workflow/lib/workflow-execution-formatters.ts +145 -0
  355. package/src/features/workflow/lib/workflow-execution-storage.ts +60 -0
  356. package/src/features/workflow/lib/workflow-execution.types.ts +38 -0
  357. package/src/features/workflow/lib/workflow-storage-api.ts +122 -0
  358. package/src/features/workflow/lib/workflow-storage-helpers.ts +207 -0
  359. package/src/features/workflow/lib/workflow-storage-versioning.ts +71 -0
  360. package/src/features/workflow/lib/workflow-storage.constants.ts +21 -0
  361. package/src/features/workflow/lib/workflow-storage.list.integration.test.ts +70 -0
  362. package/src/features/workflow/lib/workflow-storage.sanitized-save.integration.test.ts +116 -0
  363. package/src/features/workflow/lib/workflow-storage.save.integration.test.ts +124 -0
  364. package/src/features/workflow/lib/workflow-storage.test-helpers.ts +29 -0
  365. package/src/features/workflow/lib/workflow-storage.ts +183 -0
  366. package/src/features/workflow/lib/workflow-storage.types.ts +76 -0
  367. package/src/features/workflow/pages/workflow-canvas/components/canvas-tab-content.tsx +157 -0
  368. package/src/features/workflow/pages/workflow-canvas/components/execution-tab-content.tsx +57 -0
  369. package/src/features/workflow/pages/workflow-canvas/components/readiness-tab-content.tsx +49 -0
  370. package/src/features/workflow/pages/workflow-canvas/components/settings-tab-content.tsx +160 -0
  371. package/src/features/workflow/pages/workflow-canvas/components/trace-tab-content.test.tsx +204 -0
  372. package/src/features/workflow/pages/workflow-canvas/components/trace-tab-content.tsx +202 -0
  373. package/src/features/workflow/pages/workflow-canvas/components/workflow-canvas-layout.tsx +179 -0
  374. package/src/features/workflow/pages/workflow-canvas/handlers/credentials.ts +158 -0
  375. package/src/features/workflow/pages/workflow-canvas/handlers/subworkflows.ts +227 -0
  376. package/src/features/workflow/pages/workflow-canvas/handlers/validation.ts +175 -0
  377. package/src/features/workflow/pages/workflow-canvas/helpers/clipboard.ts +85 -0
  378. package/src/features/workflow/pages/workflow-canvas/helpers/execution.ts +39 -0
  379. package/src/features/workflow/pages/workflow-canvas/helpers/id.ts +15 -0
  380. package/src/features/workflow/pages/workflow-canvas/helpers/node-identity.ts +157 -0
  381. package/src/features/workflow/pages/workflow-canvas/helpers/runtime-cache.ts +70 -0
  382. package/src/features/workflow/pages/workflow-canvas/helpers/sticky-notes.ts +52 -0
  383. package/src/features/workflow/pages/workflow-canvas/helpers/subworkflow-library.ts +12 -0
  384. package/src/features/workflow/pages/workflow-canvas/helpers/subworkflows/content-qa.ts +88 -0
  385. package/src/features/workflow/pages/workflow-canvas/helpers/subworkflows/customer-onboarding.ts +67 -0
  386. package/src/features/workflow/pages/workflow-canvas/helpers/subworkflows/incident-response.ts +88 -0
  387. package/src/features/workflow/pages/workflow-canvas/helpers/subworkflows/types.ts +9 -0
  388. package/src/features/workflow/pages/workflow-canvas/helpers/trace.ts +552 -0
  389. package/src/features/workflow/pages/workflow-canvas/helpers/transformers.ts +140 -0
  390. package/src/features/workflow/pages/workflow-canvas/helpers/types.ts +122 -0
  391. package/src/features/workflow/pages/workflow-canvas/helpers/validation.ts +57 -0
  392. package/src/features/workflow/pages/workflow-canvas/hooks/controller/build-layout-props.ts +229 -0
  393. package/src/features/workflow/pages/workflow-canvas/hooks/controller/use-workflow-canvas-controller.ts +26 -0
  394. package/src/features/workflow/pages/workflow-canvas/hooks/controller/use-workflow-canvas-core.ts +188 -0
  395. package/src/features/workflow/pages/workflow-canvas/hooks/controller/use-workflow-canvas-execution.ts +269 -0
  396. package/src/features/workflow/pages/workflow-canvas/hooks/controller/use-workflow-canvas-lifecycle.ts +44 -0
  397. package/src/features/workflow/pages/workflow-canvas/hooks/controller/use-workflow-canvas-resources.ts +92 -0
  398. package/src/features/workflow/pages/workflow-canvas/hooks/execution-canvas-updater.ts +79 -0
  399. package/src/features/workflow/pages/workflow-canvas/hooks/execution-log-helpers.ts +75 -0
  400. package/src/features/workflow/pages/workflow-canvas/hooks/execution-node-status.ts +46 -0
  401. package/src/features/workflow/pages/workflow-canvas/hooks/execution-record-updater.ts +118 -0
  402. package/src/features/workflow/pages/workflow-canvas/hooks/execution-record.ts +69 -0
  403. package/src/features/workflow/pages/workflow-canvas/hooks/execution-runtime-updates.ts +84 -0
  404. package/src/features/workflow/pages/workflow-canvas/hooks/node-factory.ts +166 -0
  405. package/src/features/workflow/pages/workflow-canvas/hooks/use-canvas-ui-state.ts +19 -0
  406. package/src/features/workflow/pages/workflow-canvas/hooks/use-decorated-nodes.ts +115 -0
  407. package/src/features/workflow/pages/workflow-canvas/hooks/use-execution-history-handlers.ts +187 -0
  408. package/src/features/workflow/pages/workflow-canvas/hooks/use-execution-trace.ts +302 -0
  409. package/src/features/workflow/pages/workflow-canvas/hooks/use-execution-updates.ts +143 -0
  410. package/src/features/workflow/pages/workflow-canvas/hooks/use-initial-fit-view.ts +27 -0
  411. package/src/features/workflow/pages/workflow-canvas/hooks/use-node-creation.ts +133 -0
  412. package/src/features/workflow/pages/workflow-canvas/hooks/use-node-inspector-handlers.ts +194 -0
  413. package/src/features/workflow/pages/workflow-canvas/hooks/use-pause-workflow.ts +95 -0
  414. package/src/features/workflow/pages/workflow-canvas/hooks/use-run-workflow.ts +139 -0
  415. package/src/features/workflow/pages/workflow-canvas/hooks/use-runtime-cache-sync.ts +52 -0
  416. package/src/features/workflow/pages/workflow-canvas/hooks/use-subworkflow-state.ts +47 -0
  417. package/src/features/workflow/pages/workflow-canvas/hooks/use-workflow-canvas-history.ts +233 -0
  418. package/src/features/workflow/pages/workflow-canvas/hooks/use-workflow-chat.ts +284 -0
  419. package/src/features/workflow/pages/workflow-canvas/hooks/use-workflow-clipboard.ts +218 -0
  420. package/src/features/workflow/pages/workflow-canvas/hooks/use-workflow-credentials.ts +139 -0
  421. package/src/features/workflow/pages/workflow-canvas/hooks/use-workflow-duplicate-nodes.ts +140 -0
  422. package/src/features/workflow/pages/workflow-canvas/hooks/use-workflow-execution-state.ts +20 -0
  423. package/src/features/workflow/pages/workflow-canvas/hooks/use-workflow-file-transfer.ts +203 -0
  424. package/src/features/workflow/pages/workflow-canvas/hooks/use-workflow-keybindings.ts +126 -0
  425. package/src/features/workflow/pages/workflow-canvas/hooks/use-workflow-loader.ts +174 -0
  426. package/src/features/workflow/pages/workflow-canvas/hooks/use-workflow-metadata-state.ts +28 -0
  427. package/src/features/workflow/pages/workflow-canvas/hooks/use-workflow-node-deletion.ts +167 -0
  428. package/src/features/workflow/pages/workflow-canvas/hooks/use-workflow-node-state.ts +89 -0
  429. package/src/features/workflow/pages/workflow-canvas/hooks/use-workflow-saver.ts +204 -0
  430. package/src/features/workflow/pages/workflow-canvas/hooks/use-workflow-search.ts +167 -0
  431. package/src/features/workflow/pages/workflow-canvas/hooks/use-workflow-sticky-notes.ts +89 -0
  432. package/src/features/workflow/pages/workflow-canvas/hooks/use-workflow-storage-listener.ts +51 -0
  433. package/src/features/workflow/pages/workflow-canvas/hooks/use-workflow-validation-state.ts +22 -0
  434. package/src/features/workflow/pages/workflow-canvas/hooks/workflow-clipboard-copy.ts +96 -0
  435. package/src/features/workflow/pages/workflow-canvas/hooks/workflow-clipboard-paste.ts +109 -0
  436. package/src/features/workflow/pages/workflow-canvas/hooks/workflow-runner-websocket.ts +146 -0
  437. package/src/features/workflow/pages/workflow-canvas.test.tsx +194 -0
  438. package/src/features/workflow/pages/workflow-canvas.tsx +23 -0
  439. package/src/features/workflow/pages/workflow-execution-details.tsx +194 -0
  440. package/src/features/workflow/pages/workflow-gallery/types.ts +21 -0
  441. package/src/features/workflow/pages/workflow-gallery/use-workflow-gallery-actions.ts +219 -0
  442. package/src/features/workflow/pages/workflow-gallery/use-workflow-gallery-state.ts +204 -0
  443. package/src/features/workflow/pages/workflow-gallery/use-workflow-gallery.ts +21 -0
  444. package/src/features/workflow/pages/workflow-gallery/workflow-card.tsx +222 -0
  445. package/src/features/workflow/pages/workflow-gallery/workflow-create-dialogs.tsx +114 -0
  446. package/src/features/workflow/pages/workflow-gallery/workflow-filter-popover.tsx +190 -0
  447. package/src/features/workflow/pages/workflow-gallery/workflow-gallery-header.tsx +134 -0
  448. package/src/features/workflow/pages/workflow-gallery/workflow-gallery-tabs.tsx +93 -0
  449. package/src/features/workflow/pages/workflow-gallery/workflow-thumbnail.tsx +82 -0
  450. package/src/features/workflow/pages/workflow-gallery.tsx +100 -0
  451. package/src/features/workflow/types/credential-vault.ts +36 -0
  452. package/src/hooks/use-color-scheme.ts +77 -0
  453. package/src/hooks/use-credential-vault.ts +245 -0
  454. package/src/hooks/use-mobile.tsx +21 -0
  455. package/src/hooks/use-toast.ts +182 -0
  456. package/src/index.css +95 -0
  457. package/src/lib/api.test.ts +135 -0
  458. package/src/lib/api.ts +45 -0
  459. package/src/lib/config.ts +84 -0
  460. package/src/lib/theme.ts +71 -0
  461. package/src/lib/utils.ts +6 -0
  462. package/src/main.tsx +24 -0
  463. package/src/setupTests.ts +5 -0
  464. package/src/test-utils/chatkit-stub.ts +15 -0
  465. package/src/testing/mocks/backend/credentials.ts +60 -0
  466. package/src/testing/mocks/backend/request-utils.ts +32 -0
  467. package/src/testing/mocks/backend/workflows.ts +235 -0
  468. package/src/testing/mocks/backend.ts +52 -0
  469. package/src/testing/mocks/chatkit.ts +14 -0
  470. package/src/vite-env.d.ts +10 -0
  471. package/tailwind.config.js +61 -0
  472. package/tsconfig.app.json +30 -0
  473. package/tsconfig.json +16 -0
  474. package/tsconfig.node.json +20 -0
  475. package/vite.config.ts +30 -0
@@ -0,0 +1,114 @@
1
+ import { Badge } from "@/design-system/ui/badge";
2
+ import { Button } from "@/design-system/ui/button";
3
+ import {
4
+ Card,
5
+ CardContent,
6
+ CardDescription,
7
+ CardFooter,
8
+ CardHeader,
9
+ CardTitle,
10
+ } from "@/design-system/ui/card";
11
+ import { Input } from "@/design-system/ui/input";
12
+ import type { ProfileUser } from "../types";
13
+
14
+ interface ProfileSecurityTabProps {
15
+ user: ProfileUser;
16
+ }
17
+
18
+ export function ProfileSecurityTab({ user }: ProfileSecurityTabProps) {
19
+ return (
20
+ <div className="space-y-4">
21
+ <Card>
22
+ <CardHeader>
23
+ <CardTitle>Password</CardTitle>
24
+ <CardDescription>
25
+ Change your password here. After saving, you'll be logged out.
26
+ </CardDescription>
27
+ </CardHeader>
28
+ <CardContent className="space-y-4">
29
+ <div className="space-y-2">
30
+ <label className="text-sm font-medium" htmlFor="current">
31
+ Current Password
32
+ </label>
33
+ <Input id="current" type="password" />
34
+ </div>
35
+ <div className="space-y-2">
36
+ <label className="text-sm font-medium" htmlFor="new">
37
+ New Password
38
+ </label>
39
+ <Input id="new" type="password" />
40
+ </div>
41
+ <div className="space-y-2">
42
+ <label className="text-sm font-medium" htmlFor="confirm">
43
+ Confirm Password
44
+ </label>
45
+ <Input id="confirm" type="password" />
46
+ </div>
47
+ </CardContent>
48
+ <CardFooter>
49
+ <Button>Change Password</Button>
50
+ </CardFooter>
51
+ </Card>
52
+
53
+ <Card>
54
+ <CardHeader>
55
+ <CardTitle>Two-Factor Authentication</CardTitle>
56
+ <CardDescription>
57
+ Add an extra layer of security to your account.
58
+ </CardDescription>
59
+ </CardHeader>
60
+ <CardContent className="space-y-4">
61
+ <div className="flex items-center justify-between rounded-lg border p-4">
62
+ <div className="space-y-0.5">
63
+ <div className="font-medium">Two-Factor Authentication (2FA)</div>
64
+ <div className="text-sm text-muted-foreground">
65
+ {user.twoFactorEnabled
66
+ ? "Two-factor authentication is enabled."
67
+ : "Two-factor authentication is not enabled yet."}
68
+ </div>
69
+ </div>
70
+ <Button variant={user.twoFactorEnabled ? "destructive" : "default"}>
71
+ {user.twoFactorEnabled ? "Disable" : "Enable"}
72
+ </Button>
73
+ </div>
74
+ </CardContent>
75
+ </Card>
76
+
77
+ <Card>
78
+ <CardHeader>
79
+ <CardTitle>Active Sessions</CardTitle>
80
+ <CardDescription>
81
+ Manage your active sessions across devices.
82
+ </CardDescription>
83
+ </CardHeader>
84
+ <CardContent>
85
+ <div className="space-y-4">
86
+ <div className="flex items-center justify-between rounded-lg border p-4">
87
+ <div className="space-y-0.5">
88
+ <div className="font-medium">Current Session</div>
89
+ <div className="text-sm text-muted-foreground">
90
+ Chrome on macOS • San Francisco, CA • Active now
91
+ </div>
92
+ </div>
93
+ <Badge>Current</Badge>
94
+ </div>
95
+ <div className="flex items-center justify-between rounded-lg border p-4">
96
+ <div className="space-y-0.5">
97
+ <div className="font-medium">Mobile App</div>
98
+ <div className="text-sm text-muted-foreground">
99
+ iOS • New York, NY • Active 2 days ago
100
+ </div>
101
+ </div>
102
+ <Button variant="outline" size="sm">
103
+ Revoke
104
+ </Button>
105
+ </div>
106
+ </div>
107
+ </CardContent>
108
+ <CardFooter>
109
+ <Button variant="destructive">Sign Out All Devices</Button>
110
+ </CardFooter>
111
+ </Card>
112
+ </div>
113
+ );
114
+ }
@@ -0,0 +1,8 @@
1
+ export interface ProfileUser {
2
+ name: string;
3
+ email: string;
4
+ avatar: string;
5
+ role: string;
6
+ joinDate: string;
7
+ twoFactorEnabled: boolean;
8
+ }
@@ -0,0 +1,64 @@
1
+ import { useState } from "react";
2
+ import {
3
+ Tabs,
4
+ TabsContent,
5
+ TabsList,
6
+ TabsTrigger,
7
+ } from "@/design-system/ui/tabs";
8
+ import TopNavigation from "@features/shared/components/top-navigation";
9
+ import useCredentialVault from "@/hooks/use-credential-vault";
10
+ import type { ProfileUser } from "./profile/types";
11
+ import { ProfileGeneralTab } from "./profile/components/profile-general-tab";
12
+ import { ProfileSecurityTab } from "./profile/components/profile-security-tab";
13
+ import { ProfileApiKeysTab } from "./profile/components/profile-api-keys-tab";
14
+
15
+ export default function Profile() {
16
+ const [user] = useState<ProfileUser>({
17
+ name: "Avery Chen",
18
+ email: "avery@orcheo.dev",
19
+ avatar: "https://avatar.vercel.sh/avery",
20
+ role: "Admin",
21
+ joinDate: "January 2023",
22
+ twoFactorEnabled: false,
23
+ });
24
+
25
+ const {
26
+ credentials,
27
+ isLoading: isCredentialsLoading,
28
+ onAddCredential,
29
+ onDeleteCredential,
30
+ } = useCredentialVault({ actorName: user.name });
31
+
32
+ return (
33
+ <div className="flex min-h-screen flex-col">
34
+ <TopNavigation
35
+ credentials={credentials}
36
+ isCredentialsLoading={isCredentialsLoading}
37
+ onAddCredential={onAddCredential}
38
+ onDeleteCredential={onDeleteCredential}
39
+ />
40
+
41
+ <div className="flex-1 space-y-4 p-8 pt-6 mx-auto w-full max-w-7xl">
42
+ <div className="flex items-center justify-between space-y-2">
43
+ <h2 className="text-3xl font-bold tracking-tight">Profile</h2>
44
+ </div>
45
+ <Tabs defaultValue="general" className="space-y-4">
46
+ <TabsList>
47
+ <TabsTrigger value="general">General</TabsTrigger>
48
+ <TabsTrigger value="security">Security</TabsTrigger>
49
+ <TabsTrigger value="api-keys">API Keys</TabsTrigger>
50
+ </TabsList>
51
+ <TabsContent value="general" className="space-y-4">
52
+ <ProfileGeneralTab user={user} />
53
+ </TabsContent>
54
+ <TabsContent value="security" className="space-y-4">
55
+ <ProfileSecurityTab user={user} />
56
+ </TabsContent>
57
+ <TabsContent value="api-keys" className="space-y-4">
58
+ <ProfileApiKeysTab />
59
+ </TabsContent>
60
+ </Tabs>
61
+ </div>
62
+ </div>
63
+ );
64
+ }
@@ -0,0 +1,58 @@
1
+ import {
2
+ Tabs,
3
+ TabsContent,
4
+ TabsList,
5
+ TabsTrigger,
6
+ } from "@/design-system/ui/tabs";
7
+ import useCredentialVault from "@/hooks/use-credential-vault";
8
+ import AppearanceSettingsTab from "@features/account/components/settings/appearance-settings-tab";
9
+ import ApplicationSettingsTab from "@features/account/components/settings/application-settings-tab";
10
+ import NotificationSettingsTab from "@features/account/components/settings/notification-settings-tab";
11
+ import TeamBillingSettingsTab from "@features/account/components/settings/team-billing-settings-tab";
12
+ import TopNavigation from "@features/shared/components/top-navigation";
13
+
14
+ export default function Settings() {
15
+ const {
16
+ credentials,
17
+ isLoading: isCredentialsLoading,
18
+ onAddCredential,
19
+ onDeleteCredential,
20
+ } = useCredentialVault();
21
+
22
+ return (
23
+ <div className="flex min-h-screen flex-col">
24
+ <TopNavigation
25
+ credentials={credentials}
26
+ isCredentialsLoading={isCredentialsLoading}
27
+ onAddCredential={onAddCredential}
28
+ onDeleteCredential={onDeleteCredential}
29
+ />
30
+
31
+ <div className="flex-1 space-y-4 p-8 pt-6 mx-auto w-full max-w-7xl">
32
+ <div className="flex items-center justify-between space-y-2">
33
+ <h2 className="text-3xl font-bold tracking-tight">Settings</h2>
34
+ </div>
35
+ <Tabs defaultValue="appearance" className="space-y-4">
36
+ <TabsList>
37
+ <TabsTrigger value="appearance">Appearance</TabsTrigger>
38
+ <TabsTrigger value="notifications">Notifications</TabsTrigger>
39
+ <TabsTrigger value="application">Application</TabsTrigger>
40
+ <TabsTrigger value="teams">Teams & Billing</TabsTrigger>
41
+ </TabsList>
42
+ <TabsContent value="appearance" className="space-y-4">
43
+ <AppearanceSettingsTab />
44
+ </TabsContent>
45
+ <TabsContent value="notifications" className="space-y-4">
46
+ <NotificationSettingsTab />
47
+ </TabsContent>
48
+ <TabsContent value="application" className="space-y-4">
49
+ <ApplicationSettingsTab />
50
+ </TabsContent>
51
+ <TabsContent value="teams" className="space-y-4">
52
+ <TeamBillingSettingsTab />
53
+ </TabsContent>
54
+ </Tabs>
55
+ </div>
56
+ </div>
57
+ );
58
+ }
@@ -0,0 +1,61 @@
1
+ import { cn } from "@/lib/utils";
2
+
3
+ type LogoProps = {
4
+ className?: string;
5
+ };
6
+
7
+ export const GoogleLogo: React.FC<LogoProps> = ({ className }) => (
8
+ <svg
9
+ className={cn("w-5 h-5", className)}
10
+ viewBox="0 0 32 32"
11
+ fill="none"
12
+ xmlns="http://www.w3.org/2000/svg"
13
+ >
14
+ <path
15
+ d="M16.2856 13.4546V18.8764H23.974C23.6364 20.62 22.6233 22.0964 21.1038 23.0891L25.7402 26.6146C28.4415 24.1711 30 20.582 30 16.3184C30 15.3257 29.9091 14.371 29.7402 13.4547L16.2856 13.4546Z"
16
+ fill="#4285F4"
17
+ />
18
+
19
+ <path
20
+ d="M8.27956 18.6646L7.23387 19.449L3.53247 22.2744C5.88314 26.8434 10.701 29.9998 16.2855 29.9998C20.1425 29.9998 23.3763 28.7525 25.74 26.6144L21.1036 23.089C19.8309 23.9289 18.2075 24.4381 16.2855 24.4381C12.5711 24.4381 9.41536 21.9817 8.2854 18.6726L8.27956 18.6646Z"
21
+ fill="#34A853"
22
+ />
23
+
24
+ <path
25
+ d="M3.53237 9.72559C2.55839 11.6091 2 13.7346 2 16C2 18.2654 2.55839 20.3909 3.53237 22.2745C3.53237 22.2871 8.28576 18.6599 8.28576 18.6599C8.00004 17.8199 7.83116 16.9291 7.83116 15.9999C7.83116 15.0707 8.00004 14.1798 8.28576 13.3398L3.53237 9.72559Z"
26
+ fill="#FBBC05"
27
+ />
28
+
29
+ <path
30
+ d="M16.2858 7.57452C18.3897 7.57452 20.2598 8.28723 21.7533 9.66179L25.8443 5.65276C23.3637 3.38735 20.143 2 16.2858 2C10.7013 2 5.88314 5.14362 3.53247 9.72544L8.28571 13.34C9.41552 10.0309 12.5714 7.57452 16.2858 7.57452Z"
31
+ fill="#EA4335"
32
+ />
33
+ </svg>
34
+ );
35
+
36
+ export const AppleLogo: React.FC<LogoProps> = ({ className }) => (
37
+ <svg
38
+ className={cn("w-5 h-5 fill-black dark:fill-white", className)}
39
+ viewBox="0 0 32 32"
40
+ fill="none"
41
+ xmlns="http://www.w3.org/2000/svg"
42
+ >
43
+ <path d="M22.5475 16.0837C22.5813 19.7157 25.7337 20.9243 25.7687 20.9397C25.742 21.0249 25.2649 22.6621 24.1078 24.3532C23.1074 25.8152 22.0693 27.2718 20.4338 27.302C18.8268 27.3316 18.3101 26.3491 16.4728 26.3491C14.6361 26.3491 14.062 27.2719 12.5408 27.3317C10.9622 27.3914 9.76003 25.7507 8.75145 24.294C6.69045 21.3143 5.11542 15.8742 7.23028 12.202C8.2809 10.3784 10.1584 9.22356 12.1963 9.19394C13.7465 9.16437 15.2097 10.2368 16.1573 10.2368C17.1044 10.2368 18.8825 8.9471 20.7517 9.13652C21.5342 9.16909 23.7308 9.45261 25.1412 11.5172C25.0276 11.5876 22.5203 13.0472 22.5475 16.0837ZM19.5274 7.16521C20.3655 6.15072 20.9296 4.73845 20.7757 3.33325C19.5676 3.38181 18.1068 4.13827 17.2403 5.15221C16.4637 6.0501 15.7836 7.48722 15.9671 8.86461C17.3136 8.96879 18.6892 8.18035 19.5274 7.16521Z" />
44
+ </svg>
45
+ );
46
+
47
+ export const GithubLogo: React.FC<LogoProps> = ({ className }) => (
48
+ <svg
49
+ className={cn("w-5 h-5 dark:fill-white", className)}
50
+ width="32"
51
+ height="32"
52
+ viewBox="0 0 32 32"
53
+ xmlns="http://www.w3.org/2000/svg"
54
+ >
55
+ <path
56
+ fillRule="evenodd"
57
+ clipRule="evenodd"
58
+ d="M16.0099 4C9.36875 4 4 9.49998 4 16.3042C4 21.7432 7.43994 26.3472 12.2121 27.9767C12.8087 28.0991 13.0272 27.7119 13.0272 27.3862C13.0272 27.1009 13.0076 26.1232 13.0076 25.1044C9.6667 25.8379 8.97099 23.6377 8.97099 23.6377C8.43409 22.2117 7.63858 21.8452 7.63858 21.8452C6.54511 21.0914 7.71823 21.0914 7.71823 21.0914C8.93117 21.1729 9.56763 22.3544 9.56763 22.3544C10.6412 24.2284 12.3711 23.6989 13.0671 23.3729C13.1664 22.5784 13.4847 22.0284 13.8228 21.7229C11.1582 21.4377 8.35469 20.3784 8.35469 15.6522C8.35469 14.3077 8.8316 13.2077 9.58729 12.3522C9.46807 12.0467 9.0504 10.7835 9.70677 9.09273C9.70677 9.09273 10.7208 8.76673 13.0073 10.3557C13.9863 10.0864 14.9958 9.94938 16.0099 9.94823C17.024 9.94823 18.0577 10.091 19.0123 10.3557C21.299 8.76673 22.3131 9.09273 22.3131 9.09273C22.9695 10.7835 22.5515 12.0467 22.4323 12.3522C23.2079 13.2077 23.6652 14.3077 23.6652 15.6522C23.6652 20.3784 20.8617 21.4172 18.1772 21.7229C18.6148 22.1099 18.9924 22.8432 18.9924 24.0044C18.9924 25.6544 18.9727 26.9787 18.9727 27.3859C18.9727 27.7119 19.1915 28.0991 19.7879 27.9769C24.56 26.3469 27.9999 21.7432 27.9999 16.3042C28.0196 9.49998 22.6312 4 16.0099 4Z"
59
+ />
60
+ </svg>
61
+ );
@@ -0,0 +1,213 @@
1
+ import { useState } from "react";
2
+ import { Link, useNavigate } from "react-router-dom";
3
+ import { Button } from "@/design-system/ui/button";
4
+ import {
5
+ Card,
6
+ CardContent,
7
+ CardDescription,
8
+ CardHeader,
9
+ CardTitle,
10
+ } from "@/design-system/ui/card";
11
+ import { Input } from "@/design-system/ui/input";
12
+ import { Label } from "@/design-system/ui/label";
13
+ import { Separator } from "@/design-system/ui/separator";
14
+ import { Loader2 } from "lucide-react";
15
+ import { GoogleLogo, GithubLogo } from "@features/auth/components/auth-logos";
16
+ import { toast } from "@/hooks/use-toast";
17
+ import { buildBackendHttpUrl } from "@/lib/config";
18
+
19
+ interface AuthPageProps {
20
+ type?: "login" | "signup";
21
+ }
22
+
23
+ export default function AuthPage({ type = "login" }: AuthPageProps) {
24
+ const navigate = useNavigate();
25
+ const [email, setEmail] = useState("");
26
+ const [password, setPassword] = useState("");
27
+ const [providerLoading, setProviderLoading] = useState<
28
+ "google" | "github" | null
29
+ >(null);
30
+
31
+ const handleSubmit = (e: React.FormEvent) => {
32
+ e.preventDefault();
33
+ toast({
34
+ title: "Authentication coming soon",
35
+ description:
36
+ "The canvas prototype does not include authentication yet. Your credentials were not sent anywhere.",
37
+ });
38
+
39
+ // In a real app, this would handle authentication
40
+ };
41
+
42
+ const startDevLogin = async (provider: "google" | "github") => {
43
+ setProviderLoading(provider);
44
+ try {
45
+ const response = await fetch(buildBackendHttpUrl("/api/auth/dev/login"), {
46
+ method: "POST",
47
+ headers: {
48
+ "Content-Type": "application/json",
49
+ },
50
+ credentials: "include",
51
+ body: JSON.stringify({
52
+ provider,
53
+ email: email || undefined,
54
+ name: email ? email.split("@")[0] : undefined,
55
+ }),
56
+ });
57
+
58
+ if (!response.ok) {
59
+ const detail = await response.json().catch(() => null);
60
+ const message =
61
+ detail?.message ||
62
+ detail?.detail?.message ||
63
+ "Developer login is disabled for this environment. Set ORCHEO_AUTH_DEV_LOGIN_ENABLED=true on the backend.";
64
+ throw new Error(message);
65
+ }
66
+
67
+ toast({
68
+ title: "Signed in",
69
+ description: `Authenticated via ${provider} (dev mode).`,
70
+ });
71
+ navigate("/");
72
+ } catch (error) {
73
+ const message =
74
+ error instanceof Error
75
+ ? error.message
76
+ : "Unable to start the login flow.";
77
+ toast({
78
+ title: "Login failed",
79
+ description: message,
80
+ variant: "destructive",
81
+ });
82
+ } finally {
83
+ setProviderLoading(null);
84
+ }
85
+ };
86
+
87
+ return (
88
+ <div className="flex items-center justify-center min-h-screen bg-cover bg-center bg-[url('https://picsum.photos/seed/orcheocanvas/1920/1080')] dark:bg-[url('https://picsum.photos/seed/orcheocanvasdark/1920/1080')]">
89
+ <Card className="mx-auto min-w-80 max-w-md backdrop-blur-xl bg-primary/5 border-primary/25">
90
+ <CardHeader className="space-y-1">
91
+ <div className="flex items-center justify-center mb-2">
92
+ <Link to="/" className="flex items-center gap-2 font-semibold">
93
+ <img src="/favicon.png" alt="Orcheo Logo" className="h-8 w-8" />
94
+ <span className="text-xl font-bold">Orcheo Canvas</span>
95
+ </Link>
96
+ </div>
97
+ <CardTitle className="text-2xl">
98
+ {type === "login" ? "Login" : "Create an account"}
99
+ </CardTitle>
100
+ <CardDescription>
101
+ {type === "login"
102
+ ? "Enter your email below to login to your account"
103
+ : "Enter your information below to create your account"}
104
+ </CardDescription>
105
+ </CardHeader>
106
+ <CardContent className="grid gap-4">
107
+ <div className="grid grid-cols-2 gap-2">
108
+ <Button
109
+ variant="outline"
110
+ className="w-full"
111
+ onClick={() => startDevLogin("google")}
112
+ disabled={providerLoading !== null}
113
+ >
114
+ {providerLoading === "google" ? (
115
+ <Loader2 className="h-5 w-5 mr-2 animate-spin" />
116
+ ) : (
117
+ <GoogleLogo className="h-5 w-5 mr-2" />
118
+ )}
119
+ {providerLoading === "google" ? "Signing in…" : "Google"}
120
+ </Button>
121
+ <Button
122
+ variant="outline"
123
+ className="w-full"
124
+ onClick={() => startDevLogin("github")}
125
+ disabled={providerLoading !== null}
126
+ >
127
+ {providerLoading === "github" ? (
128
+ <Loader2 className="h-5 w-5 mr-2 animate-spin" />
129
+ ) : (
130
+ <GithubLogo className="h-5 w-5 mr-2" />
131
+ )}
132
+ {providerLoading === "github" ? "Signing in…" : "GitHub"}
133
+ </Button>
134
+ </div>
135
+
136
+ <div className="relative">
137
+ <div className="absolute inset-0 flex items-center">
138
+ <Separator className="w-full" />
139
+ </div>
140
+ <div className="relative flex justify-center text-xs uppercase">
141
+ <span className="bg-background px-2 text-muted-foreground">
142
+ Or continue with
143
+ </span>
144
+ </div>
145
+ </div>
146
+
147
+ <form onSubmit={handleSubmit}>
148
+ <div className="grid gap-4">
149
+ <div className="grid gap-2">
150
+ <Label htmlFor="email">Email</Label>
151
+ <Input
152
+ id="email"
153
+ type="email"
154
+ placeholder="you@orcheo.dev"
155
+ value={email}
156
+ onChange={(e) => setEmail(e.target.value)}
157
+ required
158
+ />
159
+ </div>
160
+ <div className="grid gap-2">
161
+ <div className="flex items-center justify-between">
162
+ <Label htmlFor="password">Password</Label>
163
+ {type === "login" && (
164
+ <Link
165
+ to="/forgot-password"
166
+ className="text-sm text-primary underline-offset-4 hover:underline"
167
+ >
168
+ Forgot password?
169
+ </Link>
170
+ )}
171
+ </div>
172
+ <Input
173
+ id="password"
174
+ type="password"
175
+ value={password}
176
+ onChange={(e) => setPassword(e.target.value)}
177
+ required
178
+ />
179
+ </div>
180
+ <Button className="w-full" type="submit">
181
+ {type === "login" ? "Login" : "Create account"}
182
+ </Button>
183
+ </div>
184
+ </form>
185
+
186
+ <div className="mt-4 text-center text-sm">
187
+ {type === "login" ? (
188
+ <div>
189
+ Don&apos;t have an account?{" "}
190
+ <Link
191
+ to="/signup"
192
+ className="text-primary underline-offset-4 hover:underline"
193
+ >
194
+ Sign up
195
+ </Link>
196
+ </div>
197
+ ) : (
198
+ <div>
199
+ Already have an account?{" "}
200
+ <Link
201
+ to="/login"
202
+ className="text-primary underline-offset-4 hover:underline"
203
+ >
204
+ Login
205
+ </Link>
206
+ </div>
207
+ )}
208
+ </div>
209
+ </CardContent>
210
+ </Card>
211
+ </div>
212
+ );
213
+ }
@@ -0,0 +1,5 @@
1
+ import AuthPage from "@features/auth/components/auth-page";
2
+
3
+ export default function Login() {
4
+ return <AuthPage type="login" />;
5
+ }
@@ -0,0 +1,5 @@
1
+ import AuthPage from "@features/auth/components/auth-page";
2
+
3
+ export default function Signup() {
4
+ return <AuthPage type="signup" />;
5
+ }