February 2026
Rebrand to gentleduck/ui, full primitives rewrite, RTL/i18n, accessibility audit, Recharts v3, JSON Editor, and docs overhaul.
Rebrand to gentleduck/ui feat
Rebranded the project to gentleduck/ui across all assets and documentation.
- Redesigned OG image with duck decorations and dark theme
- Replaced command menu substring search with lunr.js full-text search
- Added SVG path indicator with mask-image highlight to the table of contents
- Enhanced docs TOC sidebar with edit link, scroll-to-top, and formatting cleanup
- Added skeleton fallback to TOC tree to prevent layout shift on mount
- Show prev/next pager buttons on all doc pages, not just component pages
CLI Monorepo Workspace Support feat
Improved @gentleduck/cli monorepo behavior and workspace targeting.
- Added
--workspace <path>support toinit,add,update,remove, anddiff - Added strict workspace validation (
package.jsonandtsconfig.jsonwhere required) - Added parent-directory config discovery for
duck-ui.config.json - Added explicit workspace output in command flows to show where files are written
- Added legacy config migration error for configs missing
workspace
See CLI docs for command examples.
Accessibility Audit a11y
Comprehensive accessibility pass across the entire docs site and component library:
- Added
aria-hiddento all decorative icons across sidebar, preview-panel, upload, auth, and blog blocks - Added
aria-labelandaria-pressedstates across interactive examples - Increased touch target sizes in docs sidebar and block toolbar to meet 24px minimum
- Added
prefers-reduced-motionsupport via@gentleduck/motionhelpers - Fixed ARIA violations in Tabs component (
role,aria-selected,aria-controls) - Added accessible title and description to
CommandDialog - Fixed
ResponsiveContainerto prevent negative dimensions in charts
All interactive elements in the docs sidebar and block toolbar now meet the WCAG 2.2 minimum of 24x24px touch targets.
Performance perf
- Lazy-loaded
CommandMenu,MobileNav, andCardsDemofor faster initial page load - Added page-specific canonical URLs to all pages for SEO
- Migrated to Vercel hosting with LLM endpoint and docs breadcrumb
RTL / i18n Support feat
Added right-to-left direction support and i18n text props across the component library.
- Added
dirprop to Dialog, Popover, HoverCard, Tooltip, Pagination, Carousel, Breadcrumb, Sidebar, and JSON Editor - Converted all RTL examples to standalone Arabic text components
- Added Arabic locale to RTL Calendar example
- Added CSS logical properties (
margin-inline-start,padding-inline-end, etc.) for proper RTL layout - Added
textprop for i18n string customization across navigation components
Button RTL
Accordion RTL
Select RTL
Primitives Expansion feat
Built a complete headless primitives layer from scratch.
-
Existing: dialog, alert-dialog, popover, tooltip, hover-card, context-menu, menu, menubar, dropdown-menu, select, slider, progress, roving-focus
-
New: input-otp, radio-group, toggle, toggle-group, command, pagination, direction, avatar
-
Foundation modules:
focus-scope,dismissable-layer,popper,slot, shared hooks and utilities -
Split each primitive into individual files for tree-shaking
-
Added
data-slotanddirprop to all primitive components -
Added shared list-navigation logic for Select and Command
-
Migrated all registry-ui components to use the new primitives
See the full primitives docs for API reference and guides.
Direction Provider feat
Added a shared DirectionProvider context across primitives and registry with DOM wrapper support.
Direction
- Shared direction API across primitives and registry
- DOM wrapper element for scoped RTL sections
Avatar Group feat
Added AvatarGroup component using the composition API from @gentleduck/primitives/avatar.
Avatar Group
Command Menu Rewrite feat
- Refactored navigation model with keyboard-first design
- Added virtualized rendering for large command lists
- Removed
autoFocusdefault fromCommandInput
Command
Sidebar Overhaul feat
Added 16 sidebar block variants (sidebar-01 through sidebar-16) with full registry infrastructure.
Sidebar
- Converted sidebar to
forwardRefpattern - Added loading and error states to
ComponentPreviewandComponentSource - Used
data-openattribute instead ofdata-statefor collapsible groups
Recharts v3 Migration feat
Upgraded all charts from Recharts v2.15.1 to Recharts v3.7.0. The chart API is unchanged — your existing chart code works as-is. Charts now render on the server, so there is no flash of "Loading..." on page load. accessibilityLayer is on by default — you no longer need to add it.
- Upgraded across all 6 packages that depend on recharts
- Removed explicit
accessibilityLayerprop from 47 chart files (on by default in v3) - Replaced removed
activeIndexprop with TooltipdefaultIndex - Registry build now generates
next/dynamic({ ssr: true })instead ofReact.lazy()for 382 components
Chart
See the full chart docs for all chart types and examples.
JSON Editor feat
Added a new json-editor component to the UI registry with inline/sheet, popover, and callback expand modes.
JSON Editor
- Full docs at /docs/components/json-editor with installation, usage, examples, and API reference
- Portaled discard confirmation dialog for better z-index handling
- Registry dependencies:
alert-dialog,button,popover,field, andsheet
Preview Panel feat
Added preview-panel component to the registry for side-by-side content previews.
Preview Panel
Documentation Overhaul docs
Completed a comprehensive documentation rewrite covering every component and package page:
- API props normalization across all 57 component pages with formal prop tables
- Philosophy sections on every component and package page
- Mermaid diagrams on 50+ pages — composition diagrams and "How It's Built" dependency diagrams
- Contextual icons on all Callout blocks
- Cross-links between related components (Dialog links to Sheet and Drawer, Toggle links to Toggle Group, etc.)
- Structured documentation for all 9 core packages
All core packages now have structured docs with architecture diagrams, philosophy sections, and API overviews. See the Core Packages sidebar section.
Radio Group and Pagination Sync feat
- Updated
radio-groupkeyboard behavior to track group-level navigation keys (Arrow, Home/End, PageUp/PageDown) for focus-driven selection - Added
radio-grouptypeahead and Vim-style navigation (a-z,gg,G) when the group or its items are focused - Migrated
paginationregistry internals to@gentleduck/primitives/paginationwith direction-aware wrapper controls - Switched docs app sans font from
MontserrattoGeist
Radio Group
Pagination
Registry Fixes fix
Fixed component dependency declarations in registry-ui.ts and registry-examples.ts:
- Combobox — Added missing registry entry with correct dependencies
- Resizable — Added missing
react-resizable-panelsdependency - Hover Card — Fixed typo in
@gentleduck/libsdependency - Button Group — Added missing
separatorregistry dependency - Badge — Added missing
@gentleduck/primitivesdependency - Alert Dialog — Added missing
@gentleduck/motiondependency - Item — Added missing
@gentleduck/primitivesdependency - Checkbox examples — Fixed empty registry dependencies
- Combobox examples — Fixed registry dependencies to reference
combobox - Theme Toggle — Fixed malformed empty-string dependency
Build and Infrastructure chore
- Migrated from pnpm to Bun as the package manager
- Moved
duck-gen-docs,duck-query,duck-skitch, andduck-ttestto theduck-genmonorepo - Fixed Recharts v3 types and static view pages
- Corrected all GitHub URLs from
gentleeduck/uitogentleeduck/duck-ui - Improved mermaid block rendering and ordered-list indentation in docs
- Added
@types/nodev25 and primitives dependencies - Set docs dev server to port 3008
- Regenerated sitemap