From e560a6af84a0eafce77a7601e4cad3a18e9bc385 Mon Sep 17 00:00:00 2001 From: Kawa Date: Wed, 1 Apr 2026 09:27:44 +0200 Subject: [PATCH] feat(09-03): integrate TextFieldMD3 into FieldRenderer and PasswordField - FieldRenderer text-branch now renders TextFieldMD3 with floating label - PasswordField replaced with TextFieldMD3 + show/hide suffix toggle - Tooltip button kept outside TextFieldMD3, rendered above it - Removed placeholder prop from PasswordField (TextFieldMD3 uses placeholder=" " internally) - All 179 tests pass (getByLabelText queries preserved via htmlFor/id pairing) --- src/components/ui/FieldRenderer.tsx | 48 ++++++++----------- src/components/ui/PasswordField.tsx | 74 +++++++++++++---------------- 2 files changed, 53 insertions(+), 69 deletions(-) diff --git a/src/components/ui/FieldRenderer.tsx b/src/components/ui/FieldRenderer.tsx index 1f9c095..3cbd151 100644 --- a/src/components/ui/FieldRenderer.tsx +++ b/src/components/ui/FieldRenderer.tsx @@ -2,6 +2,7 @@ import { useState } from 'react'; import type { UseFormRegister, FieldError } from 'react-hook-form'; import type { FieldDef } from '../../schemas/registry'; import { PasswordField } from './PasswordField'; +import { TextFieldMD3 } from './TextFieldMD3'; interface FieldRendererProps { field: FieldDef; @@ -30,7 +31,6 @@ export function FieldRenderer({ field, register, error }: FieldRendererProps) { label={field.label} error={error} registration={register(field.key)} - placeholder={field.placeholder} helpText={field.helpText} tooltipText={field.tooltipText} /> @@ -79,42 +79,32 @@ export function FieldRenderer({ field, register, error }: FieldRendererProps) { ); } - // text (default) + // text (default) — uses TextFieldMD3 for floating label return (
-
- - {field.tooltipText && ( - - )} -
+ {field.tooltipText && ( + + )} {field.tooltipText && showTooltip && ( -

+

{field.tooltipText}

)} - - {field.helpText && !error &&

{field.helpText}

} - {error &&

{error.message}

}
); } diff --git a/src/components/ui/PasswordField.tsx b/src/components/ui/PasswordField.tsx index d1cbd5d..00980b1 100644 --- a/src/components/ui/PasswordField.tsx +++ b/src/components/ui/PasswordField.tsx @@ -1,63 +1,57 @@ import { useState } from 'react'; import type { FieldError, UseFormRegisterReturn } from 'react-hook-form'; +import { TextFieldMD3 } from './TextFieldMD3'; interface PasswordFieldProps { id: string; label: string; error?: FieldError; registration: UseFormRegisterReturn; - placeholder?: string; helpText?: string; tooltipText?: string; } -export function PasswordField({ id, label, error, registration, placeholder, helpText, tooltipText }: PasswordFieldProps) { +export function PasswordField({ id, label, error, registration, helpText, tooltipText }: PasswordFieldProps) { const [show, setShow] = useState(false); const [showTooltip, setShowTooltip] = useState(false); + + const toggleButton = ( + + ); + return (
-
- - {tooltipText && ( - - )} -
+ {tooltipText && ( + + )} {tooltipText && showTooltip && ( -

+

{tooltipText}

)} -
- - -
- {helpText && !error &&

{helpText}

} - {error &&

{error.message}

} +
); }