From 9dcbc4a2b892c339c7a2dcd282ed68290bc34bcb Mon Sep 17 00:00:00 2001 From: nicosammito Date: Mon, 24 Aug 2026 11:45:21 +0200 Subject: [PATCH 01/22] feat: update padding sizes in various components for improved layout consistency --- src/app/(dashboard)/layout.tsx | 56 +++++++++++++------ .../ApplicationAttentionFlowsComponent.tsx | 2 +- .../src/application/pages/ApplicationPage.tsx | 4 +- .../folder/FlowFolderComponent.style.scss | 2 +- .../ce/src/flow/views/FlowFolderView.tsx | 6 +- .../ce/src/module/pages/ModulesPage.tsx | 11 ++-- .../components/NamespaceCardComponent.tsx | 2 +- .../namespace/pages/NamespaceOverviewPage.tsx | 4 +- .../src/namespace/views/NamespaceRowView.tsx | 2 +- .../src/project/pages/ProjectOverviewPage.tsx | 3 +- .../ce/src/project/views/ProjectTableView.tsx | 2 +- 11 files changed, 55 insertions(+), 39 deletions(-) diff --git a/src/app/(dashboard)/layout.tsx b/src/app/(dashboard)/layout.tsx index a43016ae..9c5f8d93 100644 --- a/src/app/(dashboard)/layout.tsx +++ b/src/app/(dashboard)/layout.tsx @@ -2,7 +2,7 @@ import React from "react"; import {useApolloClient} from "@apollo/client/react"; -import {ContextStoreProvider} from "@code0-tech/pictor"; +import {AuroraBackground, ContextStoreProvider} from "@code0-tech/pictor"; import {UserService} from "@edition/user/services/User.service"; import {GraphqlClient} from "@core/util/graphql-client"; import {useParams, usePathname} from "next/navigation"; @@ -20,12 +20,14 @@ import {RoleView} from "@edition/role/services/Role.view"; import {Layout} from "@code0-tech/pictor/dist/components/layout/Layout"; import { DataType, - Flow, FlowType, + Flow, + FlowType, FunctionDefinition, Namespace, NamespaceMember, NamespaceProject, - Runtime, RuntimeModule, + Runtime, + RuntimeModule, User } from "@code0-tech/sagittarius-graphql-types"; import {ApplicationMiddlewareComponent} from "@edition/application/components/ApplicationMiddlewareComponent"; @@ -93,20 +95,42 @@ const ApplicationLayout: React.FC = ({children, sidebar, services={[application, user, organization, member, namespace, runtime, project, role, flow, functions, datatype, flowtype, module, ai]}> - - }> - {sidebar}}> - <> - {children} - {modal} - + +
+
+ + +
+ }> + {sidebar}
}> + <> + {children} + {modal} + +
- -
+
diff --git a/src/packages/ce/src/application/components/ApplicationAttentionFlowsComponent.tsx b/src/packages/ce/src/application/components/ApplicationAttentionFlowsComponent.tsx index de0c1e6e..ade9887a 100644 --- a/src/packages/ce/src/application/components/ApplicationAttentionFlowsComponent.tsx +++ b/src/packages/ce/src/application/components/ApplicationAttentionFlowsComponent.tsx @@ -100,7 +100,7 @@ export const ApplicationAttentionFlowsComponent: React.FC setOpen(previous => !previous)}> + return setOpen(previous => !previous)}> diff --git a/src/packages/ce/src/application/pages/ApplicationPage.tsx b/src/packages/ce/src/application/pages/ApplicationPage.tsx index 22727696..243b511f 100644 --- a/src/packages/ce/src/application/pages/ApplicationPage.tsx +++ b/src/packages/ce/src/application/pages/ApplicationPage.tsx @@ -13,15 +13,13 @@ import {ApplicationAttentionFlowsComponent} from "@edition/application/component export const ApplicationPage = () => { return
-
+
diff --git a/src/packages/ce/src/flow/components/folder/FlowFolderComponent.style.scss b/src/packages/ce/src/flow/components/folder/FlowFolderComponent.style.scss index 2544d69b..f88d71ff 100644 --- a/src/packages/ce/src/flow/components/folder/FlowFolderComponent.style.scss +++ b/src/packages/ce/src/flow/components/folder/FlowFolderComponent.style.scss @@ -54,7 +54,7 @@ &:before { height: 100%; - width: 2px; + width: 1px; background: helpers.backgroundColor(variables.$tertiary); position: absolute; content: ""; diff --git a/src/packages/ce/src/flow/views/FlowFolderView.tsx b/src/packages/ce/src/flow/views/FlowFolderView.tsx index 92521b7c..d1ab48d2 100644 --- a/src/packages/ce/src/flow/views/FlowFolderView.tsx +++ b/src/packages/ce/src/flow/views/FlowFolderView.tsx @@ -76,7 +76,7 @@ export const FlowFolderView: React.FC = () => { Explorer - +
diff --git a/src/packages/ce/src/module/pages/ModulesPage.tsx b/src/packages/ce/src/module/pages/ModulesPage.tsx index 0961d3cc..75e005f3 100644 --- a/src/packages/ce/src/module/pages/ModulesPage.tsx +++ b/src/packages/ce/src/module/pages/ModulesPage.tsx @@ -157,14 +157,12 @@ export const ModulesPage: React.FC = () => { }, [modules, allModules, project, runtimeStore]) return
-
+
{/* ── page header ── */} @@ -250,7 +248,7 @@ export const ModulesPage: React.FC = () => { const moduleNumber = module?.id?.match(/RuntimeModule\/(\d+)$/)?.[1] return - router.push(`/namespace/${namespaceIndex}/project/${projectIndex}/module/${moduleNumber}`) : undefined}> @@ -311,12 +309,11 @@ export const ModulesPage: React.FC = () => { })} {/* request-integration affordance, matching card footprint */} - + - @@ -87,7 +87,7 @@ export const ApplicationNavigationView: React.FC = () => { - @@ -105,7 +105,7 @@ export const ApplicationNavigationView: React.FC = () => { - @@ -120,7 +120,7 @@ export const ApplicationNavigationView: React.FC = () => { - @@ -134,7 +134,7 @@ export const ApplicationNavigationView: React.FC = () => { - From c144020503643e091f499cc34773e7ead8daaebc Mon Sep 17 00:00:00 2001 From: nicosammito Date: Tue, 25 Aug 2026 15:31:02 +0200 Subject: [PATCH 05/22] feat: update button styles in FlowFolderView for improved consistency and hierarchy --- src/packages/ce/src/flow/views/FlowFolderView.tsx | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/packages/ce/src/flow/views/FlowFolderView.tsx b/src/packages/ce/src/flow/views/FlowFolderView.tsx index d1ab48d2..303c17de 100644 --- a/src/packages/ce/src/flow/views/FlowFolderView.tsx +++ b/src/packages/ce/src/flow/views/FlowFolderView.tsx @@ -123,19 +123,17 @@ export const FlowFolderView: React.FC = () => { - -
From d4ea4af1688fd3df570e7006140bd2d4c0b35d48 Mon Sep 17 00:00:00 2001 From: nicosammito Date: Tue, 25 Aug 2026 15:31:10 +0200 Subject: [PATCH 06/22] feat: remove unnecessary display property from scroll area for improved layout --- src/app/global.scss | 1 - 1 file changed, 1 deletion(-) diff --git a/src/app/global.scss b/src/app/global.scss index 542f4d65..39a14063 100644 --- a/src/app/global.scss +++ b/src/app/global.scss @@ -21,7 +21,6 @@ a { } .scroll-area__viewport > div { - display: block !important; height: 100%; } From c2c3ba85050cb808298765d2cf51c531accb3035 Mon Sep 17 00:00:00 2001 From: nicosammito Date: Tue, 25 Aug 2026 15:31:19 +0200 Subject: [PATCH 07/22] feat: add blurred background overlay for enhanced visual depth in layout --- src/app/(dashboard)/layout.tsx | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/app/(dashboard)/layout.tsx b/src/app/(dashboard)/layout.tsx index 9c5f8d93..47dbbdbd 100644 --- a/src/app/(dashboard)/layout.tsx +++ b/src/app/(dashboard)/layout.tsx @@ -117,6 +117,20 @@ const ApplicationLayout: React.FC = ({children, sidebar, }}/> +
+ +
+ +
}> Date: Tue, 25 Aug 2026 15:31:33 +0200 Subject: [PATCH 08/22] feat: rename ModulesPage to ModuleOverviewPage for improved clarity --- ...ModulesPage.tsx => ModuleOverviewPage.tsx} | 30 +++++-------------- 1 file changed, 8 insertions(+), 22 deletions(-) rename src/packages/ce/src/module/pages/{ModulesPage.tsx => ModuleOverviewPage.tsx} (92%) diff --git a/src/packages/ce/src/module/pages/ModulesPage.tsx b/src/packages/ce/src/module/pages/ModuleOverviewPage.tsx similarity index 92% rename from src/packages/ce/src/module/pages/ModulesPage.tsx rename to src/packages/ce/src/module/pages/ModuleOverviewPage.tsx index 75e005f3..845d5d09 100644 --- a/src/packages/ce/src/module/pages/ModulesPage.tsx +++ b/src/packages/ce/src/module/pages/ModuleOverviewPage.tsx @@ -57,7 +57,7 @@ const sortLabels = { functions: "Functions", } as const -export const ModulesPage: React.FC = () => { +export const ModuleOverviewPage: React.FC = () => { const router = useRouter() const params = useParams() @@ -104,18 +104,12 @@ export const ModulesPage: React.FC = () => { }) }, [modules, filter, sort]) - // Every runtime module (across all runtimes) so we can inspect an integration's - // required configuration definitions on each runtime, not just the primary one. + const allModules = React.useMemo( () => moduleService.values(), [moduleStore] ) - // For each integration, the runtimes it isn't fully configured on. A required - // (non-optional) configuration with an unset value (null/undefined) counts as - // unconfigured. Configurations are linked to a runtime, so we check every runtime - // assignment of this project. Severity is "error" when the primary runtime is - // affected, otherwise "warning" when only secondary runtimes are. const integrationSetupStatus = React.useMemo(() => { const result = new Map() const assignments = project?.runtimeAssignments?.nodes ?? [] @@ -164,22 +158,10 @@ export const ModulesPage: React.FC = () => {
- {/* ── page header ── */} - - - Integrations - - - Connect {project?.name ?? "your project"} to the tools your workflows depend on. - - - - - {/* ── section header: count + filter / sort / request ── */} - Installed + Installed integrations {visibleModules.length} @@ -233,7 +215,11 @@ export const ModulesPage: React.FC = () => { - + + + Manage the integrations installed in this project. You can configure existing ones or request new ones. + + {/* ── the grid of installed integrations ── */} From 1da1e8d42b4186dee004d8e7bffba77972a3a320 Mon Sep 17 00:00:00 2001 From: nicosammito Date: Tue, 25 Aug 2026 15:31:39 +0200 Subject: [PATCH 09/22] feat: update button padding in NamespaceMenuView for improved layout consistency --- src/packages/ce/src/namespace/views/NamespaceMenuView.tsx | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/packages/ce/src/namespace/views/NamespaceMenuView.tsx b/src/packages/ce/src/namespace/views/NamespaceMenuView.tsx index bb45fa40..54115455 100644 --- a/src/packages/ce/src/namespace/views/NamespaceMenuView.tsx +++ b/src/packages/ce/src/namespace/views/NamespaceMenuView.tsx @@ -4,7 +4,7 @@ import React from "react"; import { Avatar, Button, - Flex, + Flex, getSize, hashToColor, Menu, MenuContent, @@ -89,7 +89,7 @@ export const NamespaceMenuView: React.FC = () => { return - -
-
- - or continue with - -
-
- + { + providers.length > 0 ? ( + <> +
+
+ + or continue with + +
+
+ + + ) : null + } From ee4ac7f5c41591fbb62f1488a3c9e23ccaa47a38 Mon Sep 17 00:00:00 2001 From: nicosammito Date: Tue, 25 Aug 2026 15:55:30 +0200 Subject: [PATCH 17/22] feat: refine FlowExecutionResultView to improve pending execution handling and result visibility --- .../ce/src/flow/views/FlowExecutionResultView.tsx | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/packages/ce/src/flow/views/FlowExecutionResultView.tsx b/src/packages/ce/src/flow/views/FlowExecutionResultView.tsx index d374cb32..ff5274c7 100644 --- a/src/packages/ce/src/flow/views/FlowExecutionResultView.tsx +++ b/src/packages/ce/src/flow/views/FlowExecutionResultView.tsx @@ -115,7 +115,9 @@ export const FlowExecutionResultView: React.FC = () => { const flowTypeStore = useStore(FlowTypeService) const projectService = useService(ProjectService) const projectStore = useStore(ProjectService) + const [activeTab, setActiveTab] = React.useState() + const previousPendingRef = React.useRef([]) const namespaceIndex = params.namespaceId as any as number const projectIndex = params.projectId as any as number @@ -161,14 +163,12 @@ export const FlowExecutionResultView: React.FC = () => { ) const executions = useFlowExecutionStore(s => s.executions) + const pendingExecutions = React.useMemo( () => executions.filter(execution => execution.flowId === flowId), [executions, flowId] ) - // When a manual execution is triggered elsewhere (the definition panel) its pending - // entry appears here; focus its loading tab so the user sees the spinner immediately. - const previousPendingRef = React.useRef([]) React.useEffect(() => { const currentIds = pendingExecutions.map(execution => execution.executionIdentifier) const newlyAdded = currentIds.find(id => !previousPendingRef.current.includes(id)) @@ -176,8 +176,6 @@ export const FlowExecutionResultView: React.FC = () => { previousPendingRef.current = currentIds }, [pendingExecutions]) - // Once the pending execution resolves its loading tab disappears; fall back to the - // newest result so the freshly arrived execution result becomes visible. React.useEffect(() => { if (!activeTab) return const stillPending = pendingExecutions.some(execution => execution.executionIdentifier === activeTab) @@ -312,7 +310,7 @@ export const FlowExecutionResultView: React.FC = () => { - #{id?.match(/ExecutionResult\/(\d+)$/)?.[1]} + #{id?.match(/\/ExecutionResult\/(\d+)(?:\/|$)/)?.[1]} {formatDistanceToNow(execution?.createdAt ?? "")} From a0d1890e1915a59ded1a790e74d2248c036ef2ae Mon Sep 17 00:00:00 2001 From: nicosammito Date: Tue, 25 Aug 2026 15:59:12 +0200 Subject: [PATCH 18/22] feat: enhance RuntimeDataTableRowComponent to improve status display with additional states --- .../components/RuntimeDataTableRowComponent.tsx | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/packages/ce/src/runtime/components/RuntimeDataTableRowComponent.tsx b/src/packages/ce/src/runtime/components/RuntimeDataTableRowComponent.tsx index 01533b68..e345e264 100644 --- a/src/packages/ce/src/runtime/components/RuntimeDataTableRowComponent.tsx +++ b/src/packages/ce/src/runtime/components/RuntimeDataTableRowComponent.tsx @@ -42,8 +42,17 @@ export const RuntimeDataTableRowComponent: React.FC - - {runtime?.status?.status} + + + { + runtime?.status?.status === "NOT_READY" ? "Not ready" : + runtime?.status?.status === "RUNNING" ? "Running" : + runtime?.status?.status === "NOT_RESPONDING" ? "Not responding" : "Stopped" + } + From 1a29018a5bb11e2160f331aa685507b196409e8d Mon Sep 17 00:00:00 2001 From: nicosammito Date: Tue, 25 Aug 2026 16:06:10 +0200 Subject: [PATCH 19/22] feat: enhance RuntimeProjectDataTableRowComponent to improve status display with additional runtime states --- .../RuntimeProjectDataTableRowComponent.tsx | 41 +++++++------------ 1 file changed, 14 insertions(+), 27 deletions(-) diff --git a/src/packages/ce/src/runtime/components/RuntimeProjectDataTableRowComponent.tsx b/src/packages/ce/src/runtime/components/RuntimeProjectDataTableRowComponent.tsx index 5f72378e..06c0e128 100644 --- a/src/packages/ce/src/runtime/components/RuntimeProjectDataTableRowComponent.tsx +++ b/src/packages/ce/src/runtime/components/RuntimeProjectDataTableRowComponent.tsx @@ -86,7 +86,20 @@ export const RuntimeProjectDataTableRowComponent: React.FC {project?.primaryRuntime?.id === runtime?.id ? - Primary : null} + + Primary : null} + + + { + runtime?.status?.status === "NOT_READY" ? "Not ready" : + runtime?.status?.status === "RUNNING" ? "Running" : + runtime?.status?.status === "NOT_RESPONDING" ? "Not responding" : "Stopped" + } + + {runtime?.description} @@ -98,32 +111,6 @@ export const RuntimeProjectDataTableRowComponent: React.FC - - - Installed plugins - - - - { - modules.map(m => m.names?.[0].content).map((name, index) => { - return index <= 5 ? - {name} - : index == 6 ? ... : null - }) - - } - - - - - - Status - - - - {runtime?.status?.status} - - { project?.primaryRuntime?.id !== runtime?.id && ( From d9b4dd8cb5522f490b745bdcc130558657ca3c45 Mon Sep 17 00:00:00 2001 From: nicosammito Date: Tue, 25 Aug 2026 16:42:20 +0200 Subject: [PATCH 20/22] feat: update ProjectMenuView to change runtime link to settings --- src/packages/ce/src/project/views/ProjectMenuView.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/packages/ce/src/project/views/ProjectMenuView.tsx b/src/packages/ce/src/project/views/ProjectMenuView.tsx index f6fe4dc6..4bdae318 100644 --- a/src/packages/ce/src/project/views/ProjectMenuView.tsx +++ b/src/packages/ce/src/project/views/ProjectMenuView.tsx @@ -94,7 +94,7 @@ export const ProjectMenuView: React.FC = () => { Settings - From a6045e51ecc0e7a4f518b8c034bc8fb5a02675b1 Mon Sep 17 00:00:00 2001 From: nicosammito Date: Tue, 25 Aug 2026 17:40:15 +0200 Subject: [PATCH 21/22] feat: enhance UserEditDialogComponent to support identity providers and improve conditional rendering --- .../user/components/UserEditDialogComponent.tsx | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/packages/ce/src/user/components/UserEditDialogComponent.tsx b/src/packages/ce/src/user/components/UserEditDialogComponent.tsx index d4d71033..52c9dad2 100644 --- a/src/packages/ce/src/user/components/UserEditDialogComponent.tsx +++ b/src/packages/ce/src/user/components/UserEditDialogComponent.tsx @@ -22,7 +22,7 @@ import { } from "@code0-tech/pictor"; import CardSection from "@code0-tech/pictor/dist/components/card/CardSection"; import {TabContent, TabList, TabTrigger} from "@code0-tech/pictor/dist/components/tab/Tab"; -import {User, UsersUpdateInput} from "@code0-tech/sagittarius-graphql-types"; +import {IdentityProviderBasic, User, UsersUpdateInput} from "@code0-tech/sagittarius-graphql-types"; import {UserService} from "@edition/user/services/User.service"; import {useUserSession} from "@edition/user/hooks/User.session.hook"; import {toast} from "@code0-tech/pictor/dist/components/toast/Toast"; @@ -41,6 +41,7 @@ import {useMfa} from "@edition/user/components/MfaProviderComponent"; import {UserMfaView} from "@edition/user/views/UserMfaView"; import {UserIdentitiesView} from "@edition/user/views/UserIdentitiesView"; import {SettingDialog} from "@core/components/SettingDialog"; +import {ApplicationService} from "@edition/application/services/Application.service"; export interface UserEditDialogComponentProps { userId?: User['id'] @@ -54,6 +55,8 @@ export const UserEditDialogComponent: React.FC = ( const userService = useService(UserService) const userStore = useStore(UserService) + const applicationService = useService(ApplicationService) + const applicationStore = useStore(ApplicationService) const withMfa = useMfa() const [, startTransition] = React.useTransition() @@ -63,6 +66,11 @@ export const UserEditDialogComponent: React.FC = ( [userStore, userId] ) + const providers = React.useMemo( + () => (applicationService.get()?.identityProviders?.nodes ?? []).filter((node): node is IdentityProviderBasic => !!node), + [applicationStore] + ) + const isSelf = !!user && !!currentSession?.user?.id && user.id === currentSession.user.id const initialValues = React.useMemo(() => ({ @@ -179,7 +187,7 @@ export const UserEditDialogComponent: React.FC = ( )} - {isSelf && ( + {isSelf && providers.length > 0 ( )} - {isSelf && providers.length > 0 ( + {isSelf && providers.length > 0 && (