Ensure focus rings are consistent across components
Aligns a few edge cases where focus rings were not consistent due to elements or aria roles not captured by the reset.
Migrate from custom focus ring visibility to native :focus-visible behaviour.
Previously Braid would change the presentation of focus ring outlines based on the user input, i.e. mouse or keyboard,
to prevent showing focus rings on click.
With the updated Browser Support Policy, we can now leverage the native :focus-visible pseudo class instead.
Change id prop from required to optional, allowing simplified usage.
Remove the uuid dependency which was previously used to generate fallback IDs in Playroom.
EXAMPLE USAGE:
- <AccordionItem id="item-1" ... /> + <AccordionItem ... />
Add tabIndex support to all form fields
Ensure the tabIndex prop is available on all form fields, enabling greater control over which elements appear in the keyboard navigation flow.
In line with MDN guidance, the only supported values are 0 and -1 to ensure best practice for keyboard navigation and assistive technologies.
EXAMPLE USAGE:
<TextField tabIndex={-1} />
Validate accessible field labels in development
Introduce development-time validation for the label prop on form fields to guard against blank values and guide towards the alternative labelling options that are available.
This validation helps ensure that all fields are accessible to screen readers and other assistive technologies.
Standardise disabled & critical state across form fields
Improves the consistency of form fields when combining both disabled and critical tone, which includes:
critical bordersmessage and not reserving space for it unless explicitly providing the reserveMessageSpace prop.Ensure no space above field with undefined label
Fixes an issue where passing undefined as the label to a form field would result in an unwanted space above the field.
Improve internal form field spacing
Refined the spacing between internal elements of form fields to align with the latest spacing guidelines.
This change impacts the Stack spacing between label and description, the form field itself and the message slots.
Hide field borders in dark containers
Reduce visual noise when a form field is displayed in a dark container by hiding the default border. As fields are light on light backgrounds, the border is used to delineate its bounds against the container, which is not relevant in a dark container.
Textarea: Adjust highlightRange background to support different line heights
Remove the vertical padding on the highlight element to prevent the background colour overlapping the wavy underline in themes with tighter line heights.
Textarea: Add support for disabling built-in spell checker
Provide support for disabling the built-in browser spell checker using the native HTML attribute spellCheck.
When highlighting ranges you may choose to turn spell check off to prevent colliding highlights. This can be done be setting spellCheck to false.
EXAMPLE USAGE:
<Textarea spellCheck={false} />
Add support for caution tone to form fields
Provide support for applying a caution tone to form fields.
Specifying this tone will show the IconCaution alongside the provided message.
EXAMPLE USAGE:
<TextField tone="caution" message="Caution message" />
Textarea: Add support for caution highlightRanges
Providing a tone of caution along with a set of highlightRanges will now apply the caution tone to the text being highlighted.
To complement this feature, the design has been uplifted to work consistently across both the critical and caution tones.
EXAMPLE USAGE:
<Textarea tone="caution" message="Caution message" highlightRanges={...} />
Improve consistency of border radius usage across components
Over time, individual components have reached for a larger radius in the scale, rather than increasing the scale at a theme level. This resulted in inconsistent use across the system, preventing uplift of the scale.
Re-aligning all components to use the scale consistently enables themes to apply very different radius scales — enabling an upcoming design uplift theme.
Show description on form fields when no label provided
Previously, a FieldLabel without a label would return nothing. However, now that form fields can opt for indirect or hidden labels (via aria-label or aria-labelledby), the description should still be shown if provided.
Note: The secondaryLabel and tertiaryLabel remain conditional based on the presence of a label. This is due to their location in the layout being anchored off the label.
EXAMPLE USAGE:
<FieldLabel description="Description now visible without label" />
Support data attribute boolean values
The data attribute map now supports boolean values. This provides an improvement for the developer experience, no longer having to convert values to strings explicitly.
EXAMPLE USAGE:
<Component data={{ 'custom-attribute': true, }} /> // => <div data-custom-attribute="true" />
Autosuggest, Dropdown, MonthPicker, PasswordField, TextField, Textarea: Hide placeholder text when field is disabled
Autosuggest, Checkbox, CheckboxStandalone, Dropdown, MonthPicker, TextField, Textarea, Radio, RadioGroup: Dim the field value and label when field is disabled
Buttons, Fields, TextLinks, Toggle: Use span for field state overlays instead of div
Produce more valid HTML as div elements are not as flexible with which elements they can be inside (from a validators perspective).
Display formAccent outline on form elements when focused
Autosuggest, Dropdown, MonthPicker, PasswordField, Textarea, TextField: Add aria-label & aria-labelledby support
In some cases it may be necessary for a field to be labelled by another element or even not to have a visual label. Instead of providing a label either aria-label or aria-labelledby can be provided.
EXAMPLE USAGE:
// Standard field label <TextField label="My field" /> // Hidden field label <TextField aria-label="My field" /> // Labelled by another element <Heading id="title">Title</Heading> <TextField aria-labelledby="title" />
Textarea: Fix "Received NaN for the rows attribute." warning.
Fixes the warning in node testing environments where updating the rows attribute was failing due to line-height being normal. Now falling back to the predefined lines prop when the dynamic grow size is not valid.
Textarea: Highlight excess characters when characterLimit is provided
TextField,Dropdown,PasswordField,MonthPicker,Textarea: Apply aria-describedby to form elements only when needed
Only apply aria-describedby to form elements when needed, e.g. either a message, description, or an explicit aria-describedby is passed.
TextField, PasswordField, Textarea, Autosuggest, Dropdown, MonthPicker: Add decription to aria-describedby
TextField, PasswordField, Textarea, Dropdown: Add support for multiple field descriptions
Previously, if a custom aria-describedby prop was passed, it would take precedence over the message prop, which also uses aria-describedby. Both descriptions can now be applied at the same time.
Fix type error in Textarea formatRanges
Textarea: Fix border radius on dark backgrounds
When rendering a Textarea on a background other than white, the field background extended out beyond the field's border radius.
Textarea: Fix trailing new line highlight issue
BUG FIXES
Textarea
Fix for highlightRanges, where the highlights could get out of sync with the field value, if the value contained trailing new lines.