Skip to content

v0.1.0-alpha.19

Latest

Choose a tag to compare

@inureyes inureyes released this 08 Sep 14:33
· 9 commits to main since this release
59699de

One new component and one accessibility fix.

Added

Select (#37, proposed in #16). A single-select listbox with an optional search filter, icons, descriptions, a disabled-but-visible option state, a field label, and the invalid and aria-describedby props a form needs. The listbox is portalled, so a select near the bottom of a scrolling panel is not clipped by it.

It is here because rule 2 passed, which is the test that usually fails: backend.ai-go and continuum-hub both ship this component with the same option shape and the same core props. The superset came, not the intersection, so a consumer does not have to wrap the package to get the label and the filter back.

Two things changed on the way in. The empty-search line resolved a product locale key and is now noOptionsLabel with an English default. The focus border was painted from the bare accent, which measures 2.61:1 against white in one shipped family, under the 3:1 WCAG 2.2 SC 1.4.11 asks of a focus indicator; it mixes the accent with the text colour now.

Fifteen tests, where both products had none.

Skeleton takes decorative, and styles/base.css gains --token-colorTextDisabled, --token-colorTextPlaceholder and --token-colorPrimaryBgHover.

Fixed

A skeleton placeholder announces itself once, not once per shape (#36). role="status" is an implicit polite live region, and every composite filled its own region with primitives that each carried one: seven regions for a SkeletonCard, ten for a pie SkeletonChart. SkeletonCard, SkeletonRow and SkeletonText also left their container unnamed while forwarding loadingLabel to every decorative child, so the region that should have been announced was anonymous.

Before you upgrade

Nothing breaks. Select is new. The skeleton change alters what a screen reader hears rather than what the DOM looks like, and a consumer that worked around the old behaviour with getAllByRole can go back to a plain getByRole.

Full changelog: v0.1.0-alpha.18...v0.1.0-alpha.19