Image galleries and compound groups
ZoomImage galleries, labelled Checkbox and Radio groups, compound Avatar groups, and new Tabs sizes, slots and orientation.
New features
- Added
ZoomImage.GroupandZoomImage.Itemfor image galleries with a shared viewer, previous and next controls, wrapping keyboard navigation, RTL support, an image counter and announced positions. - Added gallery refs with
open(index?)andclose(), item refs withopen()andclose(), andonIndexChange, which reportsnullwhen the viewer closes. - Added a gallery ripple animation, on by default and configurable with
rippleZoom. It respects reduced motion. - Added
GroupLabelandGroupDescriptionto Checkbox and Radio groups, with automatic label and description linkage. Groups also acceptid,ariaLabel,classNameand fieldsetattributes, including refs. - Added
stretchedto checkbox and radio items so the click target can fill a parent such as a card. - Exported
useCheckboxGroup,useRadioGroup, and the new item, group label and group description prop types. - Added
Avatar.GroupwithAvatar.Itemchildren, responsivexs–mdsizes, shared rounding and an optionallimitwith a+Noverflow avatar to Avatar. - Added
size="sm", disabled items, an itemendSlotand a fixed listendSlotto Tabs. Underline tabs support vertical orientation andcolor="primary". - Added the
--vortex-interactive-inset-focus-colorand--vortex-interactive-inset-focus-offsetoverrides for the Interactive inset focus ring.
Improvements
- Refreshed the ZoomImage viewer with a theme-aware backdrop, motion-token durations, a softer close and thumbnail crossfades. Thumbnails keep their borders and corner radii while zoomed.
- Improved Tabs keyboard access: arrow keys wrap, skip disabled items and scroll the focused tab into view in LTR and RTL. Tabs stay reachable when the selected item is disabled or missing, and Tabs with
nameexpose radio group semantics. - Aligned Avatar initials, title and helper text sizes with the design.
Bug fixes
- Fixed ZoomImage overflowing the viewport on phones and after resizing, and zooming the frame instead of the picture for
containandscale-downimages. - Fixed the gallery viewer drifting out of sync with updated or removed items. It skips disabled or broken images and closes when the active item unmounts.
- Fixed focus after closing ZoomImage: it returns to the opener or an available thumbnail, and stays in the viewer when navigation controls disappear.
- Fixed thumbnail IDs, refs and load handlers leaking onto the zoomed image, and the viewer using the thumbnail
sizesinstead of a larger image. - Fixed missing ZoomImage focus rings in keyboard mode and a duplicate focusable close target. Removed the CommandMenu search input outline.
- Fixed checkboxes and radios inheriting a surrounding group's name, selection or callbacks. Group and item disabled states now apply consistently.
- Fixed Select multi-select checkmarks rendering nested checkbox inputs.
- Fixed Avatar not falling back to initials or an icon when its image fails, including before hydration. The accessible name is kept across fallbacks.
- Fixed Tabs server rendering without a selected tab, IDs breaking on special characters, and
aria-controlspointing at unmounted panels. - Fixed Tabs overflow fades, selection indicators measured while hidden, and a numeric zero in the list end slot not rendering.
Breaking changes
- Removed standalone radios. Use
Radio.IteminsideRadio.Group, movenameand the selection to the group, and replaceRadioPropswithRadioItemProps. Each item needs visible children orariaLabel.
Before → after
<Radio name="plan" value="pro" />
<Radio.Group name="plan">
<Radio.Item value="pro">Pro</Radio.Item>
</Radio.Group>- Replaced
CheckboxinsideCheckbox.GroupwithCheckbox.Item value="…". The group owns each item's name and checked state; plainCheckboxremains for standalone controls. - Checkbox and Radio groups now render a
<fieldset>. Review layout selectors, and name each group withGroupLabel,ariaLabelorattributes["aria-labelledby"]. - Replaced the
AvatarGroupexport and itsmembersprop withAvatar.Group ariaLabel="…"containingAvatar.Itemchildren.
Before → after
<AvatarGroup members={members} />
<Avatar.Group ariaLabel="Team">
<Avatar.Item src={ada.photo} alt="Ada Lovelace" />
</Avatar.Group>- Required
Avatar.IteminsideAvatar.RootandAvatar.Group; a standaloneAvatarthere now throws.Avatar.Title,Avatar.HelperTextandAvatar.ContentrequireAvatar.Root. - Limited
Avatar.Rootto sizesxs–xl; standaloneAvatarkeeps2xl. Icon avatars and initials withonlineIndicatornow requirealt. - Renamed Tabs
direction="row"anddirection="column"toorientation="horizontal"andorientation="vertical". Vertical orientation requiresvariant="underline", and theghostvariant is removed. - Required an explicit Tabs
defaultValuewhen items render through custom components or load after the first render. - Renamed ZoomImage
isDisabledtodisabledand removedfallback. Missing or failed images now show the standard placeholder and can't be zoomed. - Changed Text to always render a
<div>whenasis omitted. Setas="h1"–as="h6"wherever heading semantics are needed.

