v2.10.0
✨ Features
- Listbox — new component
- InputRating — new component
- Calendar — add month and year selection
- prose — configurable heading anchors and copy button
- Empty — add
loadingandloadingIconprops - ChatPrompt — add
bodyslot - ChatTool — add
actionsprop for tool approval - Prompt — add claude action
- Drawer — add
closeandcloseIconprops - Editor — allow disabling starter kit for plain text
- ContentToc — scroll list independently and center active link
- Table — add
getScrollElementvirtualize option - ScrollArea — add
getScrollElementvirtualize option
🐛 Bug Fixes
- module — avoid unhead v2-only
hookOncein colors plugin — fixes app initialization crash in SPA mode (ssr: false) on Nuxt>= 4.5.1 - module — honour the
b24ui.versionoption inappConfig— it was declared but ignored on the Nuxt path - Modal — emit transition events from overlay when scrollable
- theme — unify motion easing and respect
prefers-reduced-motion; use logical properties for RTL - ContentToc — prevent list from collapsing
- CommandPalette — always escape search highlight to prevent XSS
- components — respect
prefers-reduced-motionin animations - Editor — prevent suggestion menu blinking on keystroke
- types — type prose components in app config
- defineShortcuts — defer standalone shortcuts that prefix a chain; add missing
arrowdownto shiftable keys - useToast — dedupe duplicate ids and handle max of 0
- useResizable — recover from corrupted persisted storage; share resize logic between mouse and touch
- useScrollspy — unobserve previous headings on update
- useFileUpload — keep dropzone type filter reactive to
accept - useComponentProps — let app config
defaultVariantsoverridewithDefaults - inertia — make
useRoute().fullPathreactive across navigations - FileUpload — add
aria-disabledattribute when disabled - SelectMenu/InputMenu — only re-highlight first item with
create-item - Link — apply
relprop to internal links - ChatMessages — re-evaluate streaming indicator on each render
- Button — allow inline event handlers with non-void return types
- docs — register
loadingIconcast so the Empty page prerenders
⚡ Performance
- components — memoize tv slot invocations with simple args; drop the redundant inner in component extend
- Button/Select/SelectMenu/InputMenu — narrow reactive dependencies
- vue — skip rewriting unchanged templates
- module — declare
sideEffectsfor barrel tree-shaking - types — decouple
useComponentPropsfrom the component-types barrel; import cross-component types from source
📚 Docs
- use content native sqlite connector
- chat — sanitize ai endpoint error logging
- installation — note vue-tsc build race with auto-import declarations
- useCanonical — type link array as unhead
Link[] - typography — improve headers and text page
- select-menu/input-menu — use grouped items in items type example
- sidebar — render examples with gpu transform
- color-mode-button — remove fallback slot example
- input-rating — remove stray
defaultValueline in size
🧪 Tests
- add benchmarks
- plugins — bring
src/runtime/plugins/under test (the SPA crash above wasn't caught because the dir matched no vitest include) - composables — add specs for
defineLocale,useKbdanduseFormField - ChatPrompt — avoid using fake timers before suspended
🛠 Chore
- deps — update Nuxt framework to
^4.5.1(bumps@unhead/vueto^3.2.3and Vite to v8) - deps — update Tiptap to
^3.29.0, reka-ui tov2.10.1,@nuxt/test-utilsto^4.1.0, 40 packages refreshed in total - docs — drop the dead og-image stack (
@takumi-rs/coreandnuxt-og-imagewere unused and blocked upstream syncs; 54 packages leave the lockfile) - github — improve workflows
- playground — expose all public composables in repl
- sync with nuxt/ui upstream (no-op syncs)
Full Changelog: v2.9.0...v2.10.0