Release notes
What changed in each package, newest first. These docs always show the latest release.
pnpm update --latest @anantya/uix @anantya/iconsUntil 1.0.0, a minor release can also change the API. Every release that does includes migration notes. Read them before you upgrade.
November 2026
Nov 7, 2026
@anantya/uix0.3.0Minor
- New
Dialog Add DialogHeader, with a
startslot for an icon, badge or tag before the title. DialogFooter now takescancelandactionas a label or button props; an asyncactionshows loading and closes the dialog when it resolves - New
Add useControllableState and useDisclosure, re-exported from
@anantya/core, so apps import every documented hook from@anantya/uix. cn() now mergespx-gutter, and keeps a name the theme doesn't have, such astext-caption, instead of letting it replace a color - Change
ThemeProvider Give links without a
tabindexatabindex="0", so Tab reaches them in Safari too;tabbableLinks={false}turns this off.@anantya/uix/theme.cssalso adds thecontainerutility and thegutterspacing behind its side padding
Nov 2, 2026
@anantya/uix0.2.1Patch
- Update
No change for uix users: the new @anantya/icons version only adds icons
- Update
Uses @anantya/icons 0.2.0
@anantya/icons0.2.0Minor
- New
Add ArrowLeft, ArrowRight, ArrowUp, ArrowDown, ChevronLeft, ChevronRight, ChevronUp, ChevronDown, Menu, Add, Edit, Trash, Search, Filter, Upload, Download, CheckCircle, AlertTriangle, Info, XCircle, Eye, EyeOff, User, Calendar, Phone, MapPin, Bell and Settings, completing the 34-icon starter set
@anantya/uix0.2.0Minor
- New
Button Add Button and IconButton: five variants (primary, secondary, ghost, danger, link), sizes sm (32px) and md (36px), an optional
icon, aloadingstate that keeps focus and blocks clicks, andasChildto style a link as a button. IconButton is square and needs anaria-label. class-variance-authority is a dependency - New
CopyButton Add CopyButton: an IconButton that copies
value, shows a check for 2 seconds and announces "Copied", or "Copy failed", to screen readers.onCopyreports each result - New
Dialog Add Dialog with DialogTrigger, DialogContent, DialogTitle, DialogDescription, DialogBody, DialogFooter and DialogClose: a modal on
<dialog>that keeps focus inside, closes on Esc or a backdrop click and returns focus to its trigger, in sizes sm, md, lg and full. useEscapeKey now calls preventDefault() on the Escape press it handles - New
Switch Add Switch: an on/off toggle for one setting, built on a checkbox input with
role="switch", so it works with labels, forms and form libraries. Control it withcheckedandonCheckedChange, or start it withdefaultChecked; sizes are sm and md - New
ThemeToggle Add ThemeToggle: an IconButton that switches between the light and dark theme, showing a sun or a moon. ThemeProvider's setTheme now cross-fades the page with View Transitions, unless the user prefers reduced motion. @anantya/icons is a dependency
October 2026
Oct 30, 2026
@anantya/uix0.1.0Minor
- New
ClientOnly Add ClientOnly, which renders its children only in the browser, and
fallbackon the server and during hydration, for content such as canvas charts - New
cn Add cn(), which joins class names with clsx and resolves conflicting Tailwind classes, UIX's tokens included, with tailwind-merge, so a className passed last wins. clsx and tailwind-merge are dependencies
- New
FocusTrap Add FocusTrap, which keeps keyboard focus inside its container while active, for modal content: it focuses the right element on activation, wraps Tab and Shift+Tab, and returns focus when it deactivates. Nested traps hand focus back in order
- New
LiveRegion Add LiveRegion and announce(), which announce changes such as toasts and "Copied" to screen readers, politely by default. Mount LiveRegion once at the app root
- New
Portal Add Portal, which renders its children into document.body, or a given container, while they keep their React context. react-dom is a peer dependency
- New
Slot Add Slot, which renders its one child in place of its own element and merges its props onto it, so components can take
asChild. react is a peer dependency - New
ThemeProvider Add ThemeProvider and useTheme(): a light, dark or system theme for the whole app, set as the
.darkclass on<html>before the first paint and saved in localStorage. It also renders a LiveRegion. @anantya/core is a dependency - New
theme Add
@anantya/uix/theme, which re-exports defineTheme and themeOverrideCss, and@anantya/uix/theme.css, which loads the tokens and the components' classes with one@import. tailwindcss is a peer dependency - New
useClickOutside Add useClickOutside(refs, handler, { enabled }), which calls
handlerwhen the user clicks outside the given elements, for closing popups; with nested popups only the topmost one closes - New
useCopyToClipboard Add useCopyToClipboard({ timeout }), which copies text with the Clipboard API and returns
copy,copiedanderror, for copy buttons - New
useEscapeKey Add useEscapeKey(handler, { enabled }), which calls
handlerwhen Escape is pressed; with nested popups only the topmost one closes - New
useMediaQuery Add useMediaQuery(query, { defaultValue }), which returns whether the page matches a media query and updates when that changes; it returns
defaultValueuntil hydration is done - New
VisuallyHidden Add VisuallyHidden, which hides its content on screen but keeps it for screen readers, such as an icon-only button's label
- Fix
cn cn() resolves conflicts between every ease-* class the theme defines, such as UIX's ease-enter and ease-move, not only ease-in, ease-out and ease-in-out
- Update
Uses @anantya/core 0.1.0 and @anantya/tokens 0.1.0
@anantya/icons0.1.0Minor
- New
Add Copy, Check, Close, Sun, Moon and Monitor
- New
Add the API every icon follows:
size16, 20 or 24 (20 by default), drawn in currentColor, and decorative unlesstitle,aria-labeloraria-labelledbynames it
@anantya/tokens0.1.0Minor
- New
Add defineTheme(): typed project overrides for colors, fonts, shadows and other tokens, checked when the theme is defined, with a
brandshortcut that fills the primary colors from one palette. themeOverrideCss() and themeOverrideNative() apply them on web and native - New
Add themeNative() and
@anantya/tokens/native-theme: light and dark themes for React Native, generated from the same tokens, with hex colors, numbers instead of rem and native shadow props - New
Add hover and pressed colors for secondary and danger, an
overlaycolor for modal backdrops, and theease-enterandease-movecurves, on web, on native and in defineTheme(). Text on every hover and pressed color passes WCAG AA - New
Add themeCss() and @anantya/tokens/theme.css: a generated Tailwind v4 @theme with the semantic colors, fonts, z-index layers and durations, dark colors in .dark, and dark: utilities that follow the .dark class
- New
Add the design tokens: semantic colors (blue-600 primary) pointing to Tailwind v4 primitives, fonts, shadows, z-index layers and durations
- Fix
defineTheme() brand red, fuchsia, pink and rose use link 700 in light mode, since 600 on their own 50 (primary-subtle) is below 4.5:1
@anantya/core0.1.0Minor
- New
useControllableState Add useControllableState(): state a parent can control with
valueandonValueChange, or leave to the hook withdefaultValue. Its setter works like useState's in both modes and keeps its identity across renders - New
useCopyState Add useCopyState(): copy-button state for web and native. The platform passes in
writeand gets backcopy(text),copied(true for 2 seconds by default) anderror;copynever rejects - New
useDisclosure Add useDisclosure(): open state with onOpen, onClose, onToggle and setOpen, controlled with open and onOpenChange or uncontrolled with defaultOpen
- New
useThemeMode Add useThemeMode(): light, dark or system theme state for web and native. The platform passes in the OS color scheme and a storage object; the saved choice is read after hydration, so the server and client HTML match