From 65bbb45064d63f776401a4db2bfb828d493f9503 Mon Sep 17 00:00:00 2001 From: Prajwal Aradhya Date: Fri, 14 Aug 2026 21:05:12 +0100 Subject: [PATCH] refactor(ui): unify action buttons, modal close triggers, and delete components --- AGENT.md | 13 + apps/portal/src/components/ai/AiHome.tsx | 7 +- .../src/components/ai/ArtifactsSidebar.tsx | 8 +- .../src/components/ai/ConversationItem.tsx | 11 +- .../src/components/ai/ConversationPage.tsx | 18 +- .../components/ai/HarnessStatusAccordion.tsx | 2 +- .../src/components/ai/MarkdownViewer.tsx | 4 +- apps/portal/src/components/ai/ModelSelect.tsx | 6 +- .../src/components/ai/PlanReviewModal.tsx | 51 ++-- .../portal/src/components/ai/PromptEditor.tsx | 24 +- .../components/ai/RenameConversationModal.tsx | 5 +- .../portal/src/components/ai/ResourceChip.tsx | 13 +- .../components/ai/ScrollToBottomButton.tsx | 3 +- .../src/components/ai/SyntaxHelpModal.tsx | 15 +- apps/portal/src/components/ai/UserMessage.tsx | 4 +- .../src/components/ai/artifacts/ApplyBar.tsx | 4 +- .../components/ai/artifacts/CanvasPreview.tsx | 10 +- .../components/ai/artifacts/RouteArtifact.tsx | 4 +- .../components/appConfig/AppConfigTable.tsx | 10 +- .../appConfig/CreateConfigModal.tsx | 4 +- .../components/appConfig/EditConfigModal.tsx | 4 +- .../src/components/canvas/PlaygroundModal.tsx | 5 +- .../panel/blocks/ForeachLoopSettings.tsx | 11 +- .../panel/blocks/HttpRequestSettings.tsx | 11 +- .../src/components/common/ConfirmDialog.tsx | 5 +- .../src/components/common/RoleSelector.tsx | 10 +- .../components/common/UserRoleSelector.tsx | 4 +- .../src/components/home/ProjectCard.tsx | 43 ++- apps/portal/src/components/home/UsersList.tsx | 20 +- .../instance-settings/auth/AuthModeCard.tsx | 30 +- .../home/instance-settings/auth/SsoCard.tsx | 61 ++-- .../integrations/AppConfigSelector.tsx | 89 ++---- .../integrations/AppConfigSelectorModal.tsx | 284 ++++++++++++++++++ .../integrations/IntegrationForm.tsx | 23 +- .../IntegrationOnboardingForm.tsx | 58 ++-- .../IntegrationOnboardingModal.tsx | 9 +- .../integrations/connectors/AiForm.tsx | 23 +- .../connectors/CredentialsUrlForm.tsx | 10 +- .../connectors/ObservabilityForm.tsx | 14 +- .../components/routes/RouteSettingsModal.tsx | 6 +- .../src/components/routes/RouteSwitcher.tsx | 8 +- .../components/settings/AddMemberModal.tsx | 12 +- .../components/settings/ChangeRoleDialog.tsx | 5 +- .../settings/DangerZoneSettings.tsx | 13 +- .../settings/ExperimentalSettings.tsx | 6 +- .../components/settings/MembersSettings.tsx | 8 +- apps/portal/src/query/appConfigQuery.ts | 17 +- apps/portal/src/routes/_authed/$projectId.tsx | 42 +-- .../routes/_authed/$projectId/app-config.tsx | 11 +- .../_authed/$projectId/custom-blocks.tsx | 25 +- .../_authed/$projectId/integrations.tsx | 194 ++++++------ .../src/routes/_authed/$projectId/routes.tsx | 13 +- .../routes/_authed/$projectId/routes_.new.tsx | 40 +-- .../routes/_authed/$projectId/settings.tsx | 20 +- .../server/src/api/v1/integrations/helpers.ts | 2 + packages/components/index.ts | 7 + .../src/ApiPlayground/KeyValueTable.tsx | 5 +- .../src/CloseButton/CloseButton.test.ts | 8 + .../src/CloseButton/CloseButton.tsx | 47 +++ packages/components/src/CloseButton/index.ts | 1 + .../src/DeleteButton/DeleteButton.test.ts | 10 + .../src/DeleteButton/DeleteButton.tsx | 32 ++ .../src/DeleteButton/DeleteIconButton.tsx | 36 +++ packages/components/src/DeleteButton/index.ts | 2 + .../IntegrationSelector.tsx | 20 +- .../src/JsonEditor/JsonArrayEditor.tsx | 14 +- .../src/JsonEditor/JsonEditorDialog.tsx | 14 +- .../src/JsonEditor/JsonObjectEditor.tsx | 11 +- .../src/SchemaEditor/PropertyRow.tsx | 11 +- .../src/SchemaEditor/rules/EnumRules.tsx | 11 +- 70 files changed, 1014 insertions(+), 567 deletions(-) create mode 100644 apps/portal/src/components/integrations/AppConfigSelectorModal.tsx create mode 100644 packages/components/src/CloseButton/CloseButton.test.ts create mode 100644 packages/components/src/CloseButton/CloseButton.tsx create mode 100644 packages/components/src/CloseButton/index.ts create mode 100644 packages/components/src/DeleteButton/DeleteButton.test.ts create mode 100644 packages/components/src/DeleteButton/DeleteButton.tsx create mode 100644 packages/components/src/DeleteButton/DeleteIconButton.tsx create mode 100644 packages/components/src/DeleteButton/index.ts diff --git a/AGENT.md b/AGENT.md index deef7513..193a4e1b 100644 --- a/AGENT.md +++ b/AGENT.md @@ -119,6 +119,19 @@ When creating branches or Pull Requests via the `gh` CLI: 2. **Table Selection:** Pass `slot="selection"` on any `` rendered inside `` or `` (e.g. ``). 3. Replace nested ` @@ -49,7 +49,7 @@ export function ArtifactsSidebar() {
Props -
+								
 									{JSON.stringify(selectedArtifact.props, null, 2)}
 								
diff --git a/apps/portal/src/components/ai/ConversationItem.tsx b/apps/portal/src/components/ai/ConversationItem.tsx index b67f93f5..a747198b 100644 --- a/apps/portal/src/components/ai/ConversationItem.tsx +++ b/apps/portal/src/components/ai/ConversationItem.tsx @@ -132,9 +132,14 @@ export function ConversationItem({ - - - + + + diff --git a/apps/portal/src/components/ai/ConversationPage.tsx b/apps/portal/src/components/ai/ConversationPage.tsx index 1a9fdd03..b425674e 100644 --- a/apps/portal/src/components/ai/ConversationPage.tsx +++ b/apps/portal/src/components/ai/ConversationPage.tsx @@ -192,14 +192,14 @@ export function ConversationPage() { {isLoading ? (
-
+
-
-
+
+
-
+
) : messages.length === 0 && !optimisticQuery ? ( @@ -277,9 +277,9 @@ export function ConversationPage() { ) : isHistoricalPlan ? (
{isRunActive && } -
+
-
+
@@ -305,11 +305,11 @@ export function ConversationPage() { {isFetchingNextPage && (
-
+
-
-
+
+
)} diff --git a/apps/portal/src/components/ai/HarnessStatusAccordion.tsx b/apps/portal/src/components/ai/HarnessStatusAccordion.tsx index 070163f0..463bd323 100644 --- a/apps/portal/src/components/ai/HarnessStatusAccordion.tsx +++ b/apps/portal/src/components/ai/HarnessStatusAccordion.tsx @@ -35,7 +35,7 @@ export function HarnessStatusAccordion({ conversationId }: { conversationId: str
-
+
{harnessSteps.map(step => { const isCompleted = step.nodeStatus === "ended"; const isRunning = step.nodeStatus === "started" || step.nodeStatus === "running"; diff --git a/apps/portal/src/components/ai/MarkdownViewer.tsx b/apps/portal/src/components/ai/MarkdownViewer.tsx index 84d9a9bb..a44de9f3 100644 --- a/apps/portal/src/components/ai/MarkdownViewer.tsx +++ b/apps/portal/src/components/ai/MarkdownViewer.tsx @@ -32,12 +32,12 @@ export function MarkdownViewer({ content }: MarkdownViewerProps) { ol: ({ children }: any) =>
    {children}
, li: ({ children }: any) =>
  • {children}
  • , blockquote: ({ children }: any) => ( -
    +
    {children}
    ), pre: ({ children }: any) => ( -
    +						
     							{children}
     						
    ), diff --git a/apps/portal/src/components/ai/ModelSelect.tsx b/apps/portal/src/components/ai/ModelSelect.tsx index cd64d410..697fcfc5 100644 --- a/apps/portal/src/components/ai/ModelSelect.tsx +++ b/apps/portal/src/components/ai/ModelSelect.tsx @@ -40,11 +40,11 @@ export function ModelSelect({ projectId, value, models, onChange }: Props) { onChange={(v) => v && onChange(String(v as Key))} className="w-[240px]" > - + {!value && ( - - + + )} diff --git a/apps/portal/src/components/ai/PlanReviewModal.tsx b/apps/portal/src/components/ai/PlanReviewModal.tsx index 6f99a163..f7c343be 100644 --- a/apps/portal/src/components/ai/PlanReviewModal.tsx +++ b/apps/portal/src/components/ai/PlanReviewModal.tsx @@ -1,5 +1,5 @@ import { useState, useEffect, useRef } from "react"; -import { Modal, Button, Popover, PopoverTrigger, PopoverContent } from "@fluxify/components"; +import { Modal, Button, CloseButton, DeleteIconButton, Popover, PopoverTrigger, PopoverContent } from "@fluxify/components"; import { TbMessageCirclePlus, TbCheck, TbX, TbEdit, TbPlus } from "react-icons/tb"; import ReactMarkdown from "react-markdown"; import remarkGfm from "remark-gfm"; @@ -59,9 +59,9 @@ const HoverableBlock = ({ onMouseLeave={() => setHovered(false)} className={`relative px-3 py-1 pr-12 my-1 rounded-lg transition-all duration-200 border-l-2 ${ isSelected || hasReview - ? "bg-primary/20 border-primary" + ? "bg-accent/15 border-accent" : hovered - ? "bg-white/5 border-transparent" + ? "bg-surface-secondary border-transparent" : "border-transparent" }`} > @@ -76,19 +76,19 @@ const HoverableBlock = ({ isIconOnly size="sm" variant={hasReview ? "primary" : "secondary"} - className={`rounded-full h-7 w-7 shadow-md ${!hasReview && "bg-[#2a2a2b] hover:bg-[#3a3a3b] text-white"}`} + className="rounded-full h-7 w-7 shadow-md" > {hasReview ? : } - +