From 4e30f2ee79353dab68570549c75ed3a424ab89aa Mon Sep 17 00:00:00 2001 From: Kawa Date: Wed, 1 Apr 2026 05:04:33 +0200 Subject: [PATCH] feat(08-02): migrate UI primitives to semantic MD3 token classes - BackendCard: border-blue-600/bg-blue-50 -> border-primary/bg-primary/10, border-gray-200/bg-white -> border-outline/bg-surface-container, text-gray-900 -> text-on-surface, text-gray-500 -> text-on-surface-container/70 - FieldRenderer: text-gray-700 -> text-on-surface-container, text-red-500 -> text-error, text-blue-500/700 -> text-primary, bg-blue-50/border-blue-200 -> bg-primary/10/border-primary/30, border-red-500 -> border-error, focus:ring-red-300 -> focus:ring-error/50, border-gray-300 -> border-outline, focus:ring-blue-300 -> focus:ring-primary/50, text-gray-500 -> text-on-surface-container/70, text-red-600 -> text-error - PasswordField: same mapping as FieldRenderer + text-gray-400/hover:text-gray-700 -> text-on-surface-container/50 hover:text-on-surface-container --- src/components/ui/BackendCard.tsx | 8 ++++---- src/components/ui/FieldRenderer.tsx | 24 ++++++++++++------------ src/components/ui/PasswordField.tsx | 14 +++++++------- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/components/ui/BackendCard.tsx b/src/components/ui/BackendCard.tsx index 7b80dd2..07ecb6d 100644 --- a/src/components/ui/BackendCard.tsx +++ b/src/components/ui/BackendCard.tsx @@ -16,13 +16,13 @@ export function BackendCard({ name, description, selected = false, onClick, ...r className={[ 'flex flex-col items-start gap-1 rounded-lg border-2 p-4 text-left transition-colors', selected - ? 'border-blue-600 bg-blue-50' - : 'border-gray-200 bg-white hover:border-blue-400 hover:bg-gray-50', + ? 'border-primary bg-primary/10' + : 'border-outline bg-surface-container hover:border-primary hover:bg-surface', ].join(' ')} {...rest} > - {name} - {description} + {name} + {description} ); } diff --git a/src/components/ui/FieldRenderer.tsx b/src/components/ui/FieldRenderer.tsx index ab0513d..2cb1c91 100644 --- a/src/components/ui/FieldRenderer.tsx +++ b/src/components/ui/FieldRenderer.tsx @@ -41,23 +41,23 @@ export function FieldRenderer({ field, register, error }: FieldRendererProps) { return (
-
{field.tooltipText && showTooltip && ( -

+

{field.tooltipText}

)} @@ -65,7 +65,7 @@ export function FieldRenderer({ field, register, error }: FieldRendererProps) { id={field.key} className={[ 'w-full rounded-md border px-3 py-2 text-sm focus:outline-none focus:ring-2', - error ? 'border-red-500 focus:ring-red-300' : 'border-gray-300 focus:ring-blue-300', + error ? 'border-error focus:ring-error/50' : 'border-outline focus:ring-primary/50', ].join(' ')} {...register(field.key)} > @@ -73,8 +73,8 @@ export function FieldRenderer({ field, register, error }: FieldRendererProps) { ))} - {field.helpText && !error &&

{field.helpText}

} - {error &&

{error.message}

} + {field.helpText && !error &&

{field.helpText}

} + {error &&

{error.message}

}
); } @@ -85,13 +85,13 @@ export function FieldRenderer({ field, register, error }: FieldRendererProps) {
{field.tooltipText && (
); } diff --git a/src/components/ui/PasswordField.tsx b/src/components/ui/PasswordField.tsx index c933786..1d0e2d7 100644 --- a/src/components/ui/PasswordField.tsx +++ b/src/components/ui/PasswordField.tsx @@ -17,14 +17,14 @@ export function PasswordField({ id, label, error, registration, placeholder, hel return (
-
{tooltipText && showTooltip && ( -

+

{tooltipText}

)} @@ -43,7 +43,7 @@ export function PasswordField({ id, label, error, registration, placeholder, hel placeholder={placeholder} className={[ 'w-full rounded-md border px-3 py-2 pr-10 text-sm focus:outline-none focus:ring-2', - error ? 'border-red-500 focus:ring-red-300' : 'border-gray-300 focus:ring-blue-300', + error ? 'border-error focus:ring-error/50' : 'border-outline focus:ring-primary/50', ].join(' ')} {...registration} /> @@ -51,13 +51,13 @@ export function PasswordField({ id, label, error, registration, placeholder, hel type="button" onClick={() => setShow(v => !v)} aria-label={show ? 'Hide' : 'Show'} - className="absolute right-2 top-1/2 -translate-y-1/2 text-gray-400 hover:text-gray-700" + className="absolute right-2 top-1/2 -translate-y-1/2 text-on-surface-container/50 hover:text-on-surface-container" > {show ? 'Hide' : 'Show'}
- {helpText && !error &&

{helpText}

} - {error &&

{error.message}

} + {helpText && !error &&

{helpText}

} + {error &&

{error.message}

} ); }