Carousel and Skeleton updates
Carousel gains gallery and rail layouts, Skeleton builds shapes from content, and components align with the Vortex designs.
New features
- Added CarouselGallery with overlay arrows, an indicator and responsive thumbnails at the bottom or start, and CarouselRail for content rails, with
alignto snap items to the start, center or end. - Added content-driven shapes to Skeleton: it builds shapes from rendered content at runtime, with a
maskvariant, server-rendered HTML support andSkeletonMeasureOptions. - Added
loadingTextto Button to show the label beside the spinner. - Added a
primarytone to Toast. - Added support for wrapping the title row in
Modal.Dismissible; the close button centers on the title's first line. - Added
closeButtonRefto Dismissible. - Added responsive
gapbetween the control and label to Checkbox and Radio.Item. - Added
roletoFloatingto set the content role todialogortooltip. - Exported the
TooltipContentPropstype for Tooltip.
Improvements
- Aligned Alert, Badge, Card, Checkbox, Radio, Switch, Slider, Tooltip, CommandMenu, Shortcut and dialog descriptions with the Vortex designs.
- Improved list and Select items with regular typography, and rendered list item end icons and slots together.
- Animated the Checkbox checkmark.
- Improved Alert inline layout on small screens; pass
role: undefinedinattributesto disable announcements. - Improved Toast action defaults: tertiary
xsbuttons inline, or primary then tertiarysmbuttons when stacked. Explicit button props are preserved. - Hid external carousel controls when nothing scrolls, and rendered them before measurement so server-rendered HTML includes them.
- Improved carousel performance by measuring geometry once per pass.
Bug fixes
- Fixed Checkbox losing its indeterminate state.
- Fixed
Popoverhover accessibility and focus dismissal, sharedFloatingcontent roles with trigger semantics and cleaned upFloatingfocus. - Fixed carousel state and navigation when hidden, dragged to the end or stepped mid-animation.
- Fixed selection menus keeping focus highlights after release.
- Fixed
Modal.Dismissiblehandling of blank children and the ZoomImage close motion.
Breaking changes
- Required
@vortexlabs/vortex-themes@^0.2.0. Components use its new spacing and border tokens. - Replaced
Carouselwith CarouselGallery for one item at a time and CarouselRail for content rails. RenameCarousel*Propstypes toCarouselGallery*PropsorCarouselRail*Props; thumbnails and the indicator are only available on CarouselGallery, which always shows one item per view and no longer acceptsitemsPerView,itemsPerScroll,align, Viewportgapor Itemwidth. RemovedpaddingfromCarouselGallery.Thumbnail; thumbnails render their content edge to edge.
Before → After
// Before
<Carousel ariaLabel="Photos" itemsPerView={1}>
<Carousel.Viewport>
<Carousel.Item value="1">…</Carousel.Item>
<Carousel.Indicator />
</Carousel.Viewport>
<Carousel.Thumbnails ariaLabel="Choose a photo">…</Carousel.Thumbnails>
</Carousel>
<Carousel ariaLabel="Projects">
<Carousel.Viewport>
<Carousel.Item value="1" width="300px">…</Carousel.Item>
</Carousel.Viewport>
</Carousel>
// After
<CarouselGallery ariaLabel="Photos">
<CarouselGallery.Viewport>
<CarouselGallery.Item value="1">…</CarouselGallery.Item>
<CarouselGallery.Indicator />
</CarouselGallery.Viewport>
<CarouselGallery.Thumbnails ariaLabel="Choose a photo">…</CarouselGallery.Thumbnails>
</CarouselGallery>
<CarouselRail ariaLabel="Projects">
<CarouselRail.Viewport>
<CarouselRail.Item value="1" width="300px">…</CarouselRail.Item>
</CarouselRail.Viewport>
</CarouselRail>- Renamed
colortotoneon Avatar, Badge, Link and Breadcrumbs.Item. Renamed the Avatar variantsdefaultandfadedtosolidandsubtle, the Badge variantfilltosolid, and the Link tonegraytoneutral-subtle. - Changed the default Link tone from
primarytoneutral;variantnow controls underline visibility. Settone="primary"to keep the previous color. - Renamed the
errortone tocriticalon Alert and Toast.
Before → After
// Before
<Avatar initials="VX" color="primary" variant="faded" />
<Badge color="success" variant="fill">Live</Badge>
<Link href="/docs" color="gray">Docs</Link>
<Alert tone="error" title="Upload failed" />
// After
<Avatar initials="VX" tone="primary" variant="subtle" />
<Badge tone="success" variant="solid">Live</Badge>
<Link href="/docs" tone="neutral-subtle">Docs</Link>
<Alert tone="critical" title="Upload failed" />- Made Toast notifications dismissible by default. Pass
closeAriaLabeltoshow, orclosable: falseto hide the close button. - Required
closeAriaLabelon ZoomImage, andcloseAriaLabel,previousAriaLabelandnextAriaLabelon ZoomImage.Group.
Before → After
// Before
toast.show({ title: "Changes saved" });
<ZoomImage src={src} alt="Product photo" />
// After
toast.show({ title: "Changes saved", closeAriaLabel: "Dismiss notification" });
<ZoomImage src={src} alt="Product photo" closeAriaLabel="Close image" />- Removed the
tertiaryclose button variant from Dismissible andModal.Dismissible; useplain, the new default, oroverlay. Dismissible now requiresonClosewhile the close button renders.

