+ {field.tooltipText && /* keep tooltip button + tooltip display exactly as-is */}
+
+
+ );
+ ```
+ CRITICAL: The tooltip button (lines 88-99) must remain OUTSIDE TextFieldMD3, rendered above it. TextFieldMD3 handles the label, input, helpText, and error display. The tooltip is a separate concern that stays in FieldRenderer.
+
+ Actually, re-examining the layout: the current text branch has tooltip button inline with label. Since TextFieldMD3 includes its own label (floating), the tooltip must be rendered separately. Place the tooltip button + tooltip content ABOVE the TextFieldMD3 component in the flex column. This preserves existing tooltip behavior.
+
+ Keep the select branch (lines 40-79) UNCHANGED — select fields do NOT get floating labels.
+
+ **PasswordField.tsx:**
+ Replace the manual label + input layout with TextFieldMD3, passing the show/hide toggle as `suffix`:
+ ```tsx
+ import { TextFieldMD3 } from './TextFieldMD3';
+
+ export function PasswordField({ id, label, error, registration, helpText, tooltipText }: PasswordFieldProps) {
+ const [show, setShow] = useState(false);
+ const [showTooltip, setShowTooltip] = useState(false);
+
+ const toggleButton = (
+
+ {tooltipText && (
+
+ )}
+ {tooltipText && showTooltip && (
+
+ {tooltipText}
+
+ )}
+
+
+ );
+ }
+ ```
+
+ Remove the `placeholder` prop from PasswordFieldProps interface since TextFieldMD3 uses `placeholder=" "` internally.
+
+ Run full test suite after — ALL `getByLabelText` queries must still work because TextFieldMD3 preserves htmlFor/id pairing.
+