ROU-12881: Align form-field widgets with Figma (input, textarea, dropdown, form)#1173
Merged
Conversation
Foundation for the widget CSS-API alignment work. Adds four framework theme-layer role knobs to _root.scss, each defaulting through the matching design token: - --color-border-danger → border-specific danger tier (form validation borders) - --color-text-danger → text-specific danger tier (validation messages) - --color-border-primary → primary tier for focus-ring borders - --color-primary-active → solid pressed/active state (distinct from the translucent --color-primary-selected wash that apps override) No visual change on its own — components adopt these roles in the follow-up PRs.
Depends on the theme-layer roles PR. - Input/TextArea: idle & disabled border use the input-specific border token; new hover-border color; new focus ring (2px halo) via --color-border-primary; label recoloured to subtlest + regular weight; error border → --color-border-danger; validation message → --color-text-danger; fixed the invalid textarea `resize` value. - Dropdown: error border → --color-border-danger; new focus ring (2px halo) on both the native select and the expanded custom dropdown, matching the input. - Form: validation-message colour → --color-text-danger (was being silently overridden with the wrong red tier). - Regenerated the CSS API reference.
|
BenOsodrac
approved these changes
Jul 17, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



This PR is for aligning the form-field widgets (Input, TextArea, Dropdown, Form validation) with their Figma specs.
What was happening
--color-borderrole instead of the input-specific border token; there was no hover-border color and no focus ring; the label was too dark/heavy; the error border and validation message used the wrong red tier; the textarearesizevalue was invalid (resize: auto) so the drag handle didn't work.span.validation-messagerule silently overrode the input's validation color with the wrong red tone (equal specificity, loaded later).What was done
_inputs-and-textareas.scss): input-specific border token for idle/disabled, dedicated hover-border color, new 2px focus ring via--color-border-primary, label recoloured to--color-text-subtlest+ regular weight, error border →--color-border-danger, validation message →--color-text-danger, andresize: verticalfix._dropdown.scss): error border →--color-border-danger; new 2px focus ring on both the native<select>and the expanded custom dropdown._form.scss): validation-message color →--color-text-danger.Test Steps
Open the Widgets/Input, Widgets/TextArea, Widgets/Dropdown, and Widgets/Form stories in Storybook, then use DevTools to force states.
Input / TextArea — the control root is
<input data-input class="form-control">/<textarea data-textarea class="form-control">:box-shadow). In DevTools you can force:focuson the element.not-validto the.form-controlelement → border turns danger-red. A sibling<span class="validation-message">should render its text in the same danger-red.disabledattribute → muted background + border.[data-label]/.form labelelement should be gray (subtlest) and regular weight.Dropdown — root is
<div class="dropdown-container" data-dropdown>wrapping either<select class="dropdown-display">(native) or a<div class="dropdown-display">(custom):<select>→ 1px primary border + 2px halo. Force:focusin DevTools if needed.dropdown-expandedto.dropdown-container→ the.dropdown-displayshows the same border + halo.not-validto.dropdown-container→.dropdown-displayborder turns danger-red.Screenshots
(prefer animated gif)
Checklist