From 250393978b7e2351646eff24cfdccc9776f5ed4f Mon Sep 17 00:00:00 2001 From: Frank Date: Fri, 10 Oct 2025 02:34:06 -0400 Subject: [PATCH] wip: style byok --- .../[id]/provider-section.module.css | 39 +++++++-- .../workspace/[id]/provider-section.tsx | 86 ++++++++++++------- 2 files changed, 84 insertions(+), 41 deletions(-) diff --git a/packages/console/app/src/routes/workspace/[id]/provider-section.module.css b/packages/console/app/src/routes/workspace/[id]/provider-section.module.css index 5f18862f..f5cfdd8f 100644 --- a/packages/console/app/src/routes/workspace/[id]/provider-section.module.css +++ b/packages/console/app/src/routes/workspace/[id]/provider-section.module.css @@ -35,11 +35,6 @@ &[data-slot="provider-status"] { text-align: left; color: var(--color-text); - } - - &[data-slot="provider-toggle"] { - text-align: left; - font-family: var(--font-sans); [data-slot="edit-form"] { display: flex; @@ -76,11 +71,32 @@ line-height: 1.4; } } + } + } - [data-slot="form-actions"] { - display: flex; - gap: var(--space-2); + &[data-slot="provider-action"] { + text-align: left; + font-family: var(--font-sans); + + [data-slot="configured-actions"] { + display: flex; + gap: var(--space-2); + + [data-slot="delete-form"] { + opacity: 0; + pointer-events: none; + transition: opacity 0.2s; } + + &:hover [data-slot="delete-form"] { + opacity: 1; + pointer-events: auto; + } + } + + [data-slot="form-actions"] { + display: flex; + gap: var(--space-2); } } } @@ -90,6 +106,13 @@ opacity: 0.6; } + &:hover { + [data-slot="provider-action"] [data-slot="delete-form"] { + opacity: 1; + pointer-events: auto; + } + } + &:last-child td { border-bottom: none; } diff --git a/packages/console/app/src/routes/workspace/[id]/provider-section.tsx b/packages/console/app/src/routes/workspace/[id]/provider-section.tsx index 856b3a6a..6b7663e1 100644 --- a/packages/console/app/src/routes/workspace/[id]/provider-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/provider-section.tsx @@ -12,6 +12,10 @@ const PROVIDERS = [ type Provider = (typeof PROVIDERS)[number] +function maskCredentials(credentials: string) { + return `${credentials.slice(0, 8)}...${credentials.slice(-8)}` +} + const removeProvider = action(async (form: FormData) => { "use server" const provider = form.get("provider")?.toString() @@ -58,7 +62,7 @@ function ProviderRow(props: { provider: Provider }) { let input: HTMLInputElement - const isEnabled = () => providers()?.some((p) => p.provider === props.provider.key) + const providerData = () => providers()?.find((p) => p.provider === props.provider.key) createEffect(() => { if (!saveSubmission.pending && saveSubmission.result && !saveSubmission.result.error) { @@ -80,32 +84,14 @@ function ProviderRow(props: { provider: Provider }) { } return ( - + {props.provider.name} - {isEnabled() ? "Configured" : "Not Configured"} - + show()}> - Configure - - } - > -
- - - -
-
- } + fallback={{providerData() ? maskCredentials(providerData()!.credentials) : "Not Configured"}} > -
+
(input = r)} @@ -122,17 +108,51 @@ function ProviderRow(props: { provider: Provider }) {
-
- - -
+ + show()}> + Configure + + } + > +
+ +
+ + + +
+
+
+ } + > +
+ + +
+ + ) } @@ -149,8 +169,8 @@ export function ProviderSection() { Provider - Status - Action + API Key +