Releases: nuxt/ui
Release list
v4.10.0
✨ Highlights
🌟 InputRating component
A new InputRating component lets you display and collect ratings, with support for half-steps, custom length, clearing, hover preview and any icon:
<script setup lang="ts">
const value = shallowRef(3.5)
</script>
<template>
<UInputRating v-model="value" :step="0.5" hoverable />
</template>📦 Bundled, offline-ready icons
Nuxt UI now embeds the icons it uses into your build, so they render straight away during SSR and work fully offline instead of being fetched from the Iconify API at runtime. As long as the collection is installed locally, this happens automatically for Nuxt UI's own icons (the lucide collection by default), on both Nuxt and pure Vue/Vite.
On Nuxt this rides on @nuxt/icon's existing client bundle. On Vue the @nuxt/ui/vite plugin gains an icon.clientBundle option to bring the same bundling to Vite, either by listing icons or by scanning your source. This is powered by the standalone Vite plugin and utils added in @nuxt/icon v2.3.0:
import ui from '@nuxt/ui/vite'
export default defineConfig({
plugins: [
ui({
icon: {
clientBundle: {
// list them explicitly...
icons: ['lucide:heart', 'simple-icons:github'],
// ...or scan your whole app
scan: true
}
}
})
]
})Tip
Install each collection you use with @iconify-json/{collection_name} so its icons can be bundled. See the Icons integration for the details.
♻️ Keep overlay state with unmountOnHide
The Modal and Slideover components now accept the unmountOnHide prop. Set it to false to keep their content mounted while closed so form state, scroll position and expensive children survive open/close cycles:
<template>
<UModal :unmount-on-hide="false">
<UButton label="Open" />
<template #content>
<!-- kept alive when the modal is closed -->
</template>
</UModal>
</template>🚀 Features
- ChatPrompt: add body slot and focus highlight (#6709) (123184b)
- ChatTool: add
actionsprop for tool approval (#6694) (1a3a9dc) - ContentSearch/DashboardSearch: support
unmountOnHideprop (#6523) (f03f98b) - ContentToc: scroll list independently and center active link (#6697) (64b9f7d)
- Drawer: add
closeandcloseIconprops (#6669) (53e88a4) - Editor: allow disabling starter kit for plain text (#6713) (76d613c)
- Empty: add
loadingandloadingIconprops (#6707) (86cd25c) - InputRating: new component (#5757) (cba2c2c)
- Modal/Slideover: support
unmountOnHideprop (#6626) (4deb61b), closes #5839 #3605 - module: pre-bundle used icons into
@nuxt/iconclient bundle (#6633) (8d46034) - Popover: support
enableTouchprop (#6626) (54125f3), closes #2346 - Prompt: add
claudeaction (#6693) (7bdcb13) - prose: configurable heading anchors and copy button (#6735) (f419731)
- ScrollArea: add
getScrollElementvirtualize option (#6650) (a84de85) - Table: add
getScrollElementvirtualize option (#6657) (7e6d0f7) - unplugin: pre-bundle used icons into the Vue/Vite build (#6635) (dcf7cbc)
🐛 Bug Fixes
- AuthForm: track password visibility per field (#6638) (0faeb92)
- BlogPost/ChangelogVersion: format date in UTC to prevent hydration mismatch (#6722) (fe5bb23)
- Button: allow inline event handlers with non-void return types (#6668) (269080a)
- Carousel: prevent reset when plugin props use inline objects (f41d11e), closes #6221
- ChatMessages: re-evaluate streaming indicator on each render (#6673) (5c986dd)
- components: forward
$attrsto root element whentoprop is absent (#6628) (d3b5f1d) - components: forward
data-slotto component root (#6643) (c9c5232) - components: respect
prefers-reduced-motionin animations (#6723) (f951529) - ContentNavigation: key items by identity to prevent leading icon flash (#6640) (09fb52b)
- defineShortcuts: add missing
arrowdownto shiftable keys (#6702) (2128414) - defineShortcuts: defer standalone shortcuts that prefix a chain (#6703) (76ee176)
- Editor: prevent suggestion menu blinking on keystroke (#6712) (7e6d8b0)
- FileUpload: add
aria-disabledattribute when disabled (#6653) (c3b2996) - inertia: make
useRoute().fullPathreactive across navigations (#6696) (c256997) - Link: apply
relprop to internal links (#6677) (276302e) - Link: fall back to original path when
localePathfails (#6637) (906e8fd) - LocaleSelect: add missing keys in emoji mapping (#6629) (fab73ab)
- module: avoid unhead v2-only
hookOncein colors plugin (#6658) (e4ca579) - SelectMenu/InputMenu: only re-highlight first item with
create-item(#6689) (a71dece) - Separator: forward fall-through attributes to root (#6641) (88baabc)
- theme: use logical properties for RTL (#6724) (3179012)
- types: type prose components in app config (...
v4.9.0
✨ Highlights
📆 Calendar month and year selection
The Calendar component gains a single type prop (date | month | year, default date) that renders it as a day, month or year picker, covering both standalone pickers and quick navigation:
<script setup lang="ts">
const value = shallowRef(new CalendarDate(2026, 6, 17))
</script>
<template>
<UCalendar v-model="value" type="month" />
</template>Tip
In date mode the heading also becomes a clickable button that cycles day → month → year, so you can jump to a month or year without clicking through prev / next repeatedly. This is controlled by the new viewControls and viewButton props and works with range.
🧭 useTour composable
The new useTour composable drives guided tours by re-anchoring a single Popover across steps. It owns the step state and resolves each step's target into a reference you bind to <UPopover>, while you keep full control over the content and navigation:
<script setup lang="ts">
const card = useTemplateRef('card')
const tour = useTour([
{ target: '#cta', title: 'Get started' },
{ target: () => card.value, title: 'Profile', side: 'right' },
{ target: null, title: 'All set' }
])
</script>
<template>
<UButton @click="tour.start()">Start tour</UButton>
<UPopover :open="tour.open.value" :reference="tour.reference.value" :dismissible="false">
<template #content>
<!-- your content + buttons -->
<UButton :disabled="!tour.hasPrev.value" @click="tour.prev()">Back</UButton>
<UButton @click="tour.next()">{{ tour.hasNext.value ? 'Next' : 'Finish' }}</UButton>
</template>
</UPopover>
</template>✂️ Override default classes
A new build-time theme.unstyled option strips Nuxt UI's default theme classes from every component, keeping only their structure and the classes you provide through class, ui or app.config.ui. This lets you bring your own design system on top of the components' logic and accessibility, or cut HTML and bundle bloat:
export default defineNuxtConfig({
modules: ['@nuxt/ui'],
css: ['~/assets/css/main.css'],
ui: {
theme: {
unstyled: true
}
}
})Warning
This strips structural classes too (positioning, transitions, flex/grid), not just cosmetic ones. Layout-heavy components like Modal, Drawer or Calendar will need you to re-supply their layout.
For more surgical control, slot classes can now be a (defaults) => classes function that replaces the slot's defaults instead of merging onto them. It receives the resolved defaults so you can reuse part of them, while plain strings keep merging exactly as before. It works in :ui, app.config.ui and <UTheme :ui>:
<template>
<UButton :ui="{ base: () => 'text-3xl font-bold' }" label="Button" />
</template>🎯 Uniform focus styles
Every component now shares a single focus-visible language: a soft outline halo tinted with the component's color (e.g. outline-primary/25), so the indicator stays consistent and accessible across every variant and color. Tab panels, scrollable regions and overlay links that browsers make focusable now show the halo too, instead of hiding focus entirely.
If you prefer one outline color across your whole app regardless of component color, a single global rule in your main.css does it:
*,
::before,
::after {
@apply outline-primary/25;
}
*:focus-visible,
*:has(> a:focus-visible) {
--tw-ring-color: var(--ui-primary);
}Note
Check out the before/after preview images in #6576.
🚀 Features
- Calendar: add month and year selection (#6582) (ca3c72e)
- ChatMessages: expose
registerMessageRef(#6275) (f99778e) - components: allow hiding
iconwithfalse(#6597) (09eb639) - ContentSearch/DashboardSearch: forward input config to command palette (#6312) (5199b7e)
- FileUpload: expose
removeFilein slots (#6492) (4da3a5d) - Modal/Slideover: add
leaveandenterevents (#6596) (006324a) - module: add
theme.unstyledoption (#6551) (a2a8bc9) - PinInput: add
separatorprop (#6392) (89b30e8) - ScrollArea: add
shadowprop (#6561) (d850ae6) - Select/SelectMenu: use
multiplein theme (#6554) (f66eb65) - Sidebar: add
transitionprop (#6484) (af80a67) - theme: allow replacing slot classes with a function (#6562) (ea576e2)
- theme: uniformize focus styles across components (#6576) (b026ca2)
- useTour: new composable (#6557) (dc05151)
- vite: add
rootoption to override.nuxt-uidirectory location (#6595) (cccb3d5)
🐛 Bug Fixes
- CommandPalette: only scroll to highlighted item when focused (#6579) (02259a6)
- Link: set default for locale prop (#6563) (e9ab758)
- module: remove inline script in SPA mode for strict CSP (#6577) (7225e9f)
- ProseCodeCollapse: cap root
max-heightinstead of toggling preheight(#6565) (52d3c45) - ProseKbd: type default slot as
VNode[](52367b1) - SelectMenu: bind
idand aria attributes on trigger (#6572) (c3bef7a) - Select: open menu on label click (#6575) (e8d18c3)
- Tabs: render active indicator during SSR (#6570) (9e5b8a6)
- templates: resolve vite root to an absolute path for #build aliases (#6586) (238e291)
🌐 Locales
❤️ Contributors
- @benjamincanac
- @innocenzi
- @zAlweNy26
- @maximepvrt
- @OrbisK
- @mikenewbon
- @al1maher
- @emilsgulbis
- @martinszeltins
- @cydrickn
- @neukinal
- @hendrikheil
- @johnson-jnr
- @ReCoN-96
Full Changelog: v4.8.2...v4.9.0
v4.8.2
🐛 Bug Fixes
- Form: support setting the
nameattribute (#6539) (f8186e2) - InputMenu/SelectMenu: re-highlight first item when items change (#6538) (0414dd0)
- InputNumber/InputDate/InputTime/Calendar: restore
localeprop (#6546) (ed2f955) - module: merge custom variants into AppConfig type (#6531) (f0571c3)
Full Changelog: v4.8.1...v4.8.2
v4.8.1
🐛 Bug Fixes
- ContentSearch/DashboardSearch: proxy missing CommandPalette props (#6505) (631f5dc)
- Form: add
method="post"to prevent credential leaking via GET before hydration (#6512) (7a0825a) - Icon: avoid recursive icon resolution (#6495) (d50c121)
- locale: improve Thai translation accuracy and consistency (#6509) (5d82418)
- module: expose component theme keys in AppConfig type (#6520) (ffaf163)
- Select/SelectMenu/InputMenu: add fallback for
max-height(#6503) (f4d7cbe)
❤️ Contributors
Full Changelog: v4.8.0...v4.8.1
v4.8.0
✨ Highlights
🎨 Theme component prop defaults
The Theme component can now override default prop values for all descendant components. Pass a props object where keys are component names and values are their prop overrides:
<template>
<UTheme
:props="{
tooltip: { delayDuration: 0, arrow: true },
button: { color: 'neutral', variant: 'subtle', size: 'lg' },
input: { size: 'lg' }
}"
>
<UTooltip text="Tooltip">
<UButton label="Save" />
</UTooltip>
<UInput placeholder="Search..." />
</UTheme>
</template>Explicit props on a component always take priority. Theme components can be nested (innermost wins) and propagate through the entire tree via provide / inject.
🔍 ContentSearch async search
The ContentSearch component now supports FTS5 full-text search via the new search prop and the useSearchCollection composable (nuxt/content#3787, released in @nuxt/content v3.14.0). Instead of loading all content upfront with files and filtering client-side with Fuse.js, you can now run async queries with highlighted snippets:
<script setup lang="ts">
const { search, status, init } = useSearchCollection('content', {
immediate: false,
ignoredTags: ['style']
})
const { open } = useContentSearch()
watch(open, (value) => {
if (value && status.value === 'idle') {
init()
}
})
</script>
<template>
<UContentSearch :search="search" :search-status="status" />
</template>You can check out the new search on https://ui.nuxt.com or https://nuxt.com.
🚨 Breaking Changes
- InputMenu: rename
autocompleteprop tomodeto free up HTML attribute (#6474)
The boolean autocomplete prop introduced in v4.6.0 collided with the standard HTML autocomplete attribute used for browser autofill (address-line1, one-time-code, email, etc.). It has been renamed to mode which accepts 'combobox' | 'autocomplete' (defaults to combobox). The HTML autocomplete attribute now falls through to the inner input like other form components.
- <UInputMenu autocomplete :items="items" />
+ <UInputMenu mode="autocomplete" :items="items" />🚀 Features
- Avatar/AvatarGroup: add
colorprop (#6405) (6f2396f) - Breadcrumb: add
colorprop (#6406) (955dac1) - ChatMessage: add
bodyslot and improve actions alignment (#6460) (48685b6) - ChatMessage: add
colorprop andheaderslot (#6407) (c6ce8ca) - ChatPrompt: add
submitOnEnterprop to control Enter behavior (b597f90) - Checkbox/RadioGroup/Switch: add
highlightprop for error ring styling (a0deee4) - CommandPalette: search and highlight description field (524c34d)
- ContentSearch/DashboardSearch: enable Fuse.js token search by default (ba08220)
- ContentSearch: add async search support via
useSearchCollection(#6432) (a1bef8b) - DashboardGroup: add
storageOptionsprop (8f0101b) - Error: add
iconprop andleadingslot (e6ea707) - Separator: add
positionprop (#6415) (844660a) - Theme: override component prop defaults (#6031) (71c008e)
🐛 Bug Fixes
- ChatMessage: add
wrap-break-wordto content slot (#6476) (eb468e6) - CommandPalette: only split tokens in highlight when
useTokenSearchis enabled (898fbce) - CommandPalette: preserve relative order of ignoreFilter groups (e4c1787)
- CommandPalette: re-highlight first item after debounced results render (efd7b8e)
- CommandPalette: update default fuse keys in docs and search components (0d9cc0d)
- components: apply
theme.prefixto hardcoded utility classes (f51b1e8) - components: constrain popper content to available viewport height (007b136)
- ContentSearch: preserve intermediate ancestors in breadcrumb prefix (#6466) (f639b19)
- ContentToc: apply
ui.triggerprop to trigger elements (252b906) - defineShortcuts: use
e.codefor alt shortcuts to handle macOS key remapping (231f156) - FileUpload: pass
disabledattribute to button variant (2890c83) - Form: improve errors type (#6208) (c1090ab)
- InputMenu/Select/SelectMenu: respect
trailing: falseover defaulttrailingIcon(#6457) (65b47ce) - InputMenu: rename
autocompleteprop tomodeto free up HTML attribute (#6474) (2799fa6) - module: don't require
@nuxtjs/mdcwhen usingcontentoption (89f7778) - module: pass computed ref directly to useHead innerHTML (00b7476)
- module: ship stripped
#build/ui.cssfallback for tooling (083c2a9) - ProseKbd: add default slot and make
valueoptional (f317c7f) - Textarea: autoresize on mount with pre-filled value (e96a0b6)
- useComponentProps: treat array-typed theme values as
ClassValueleaves (cac3860)
❤️ Contributors
Full Changelog: v4.7.1...v4.8.0
v4.7.1
🐛 Bug Fixes
- ChatMessage: make actions slot accessible on touch devices (f5a3349)
- Drawer: handle RTL mode (#6396) (2e3fed2)
- Link: prevent double-prefixing with
@nuxtjs/i18nauto-localization (#6404) (dde09d0) - ProseImg: close zoom overlay on Escape key (e3cdbc5)
- ProsePrompt: improve responsive (0a5b433)
👋 New Contributors
Full Changelog: v4.7.0...v4.7.1
v4.7.0
✨ Highlights
📋 New Listbox component
The Listbox component is a selectable list of items with built-in search, virtualization, and rich item rendering. It's ideal when you want an always-visible list without the overlay behavior of SelectMenu.
<script setup lang="ts">
const items = ref([
{ label: 'France', icon: 'i-lucide-map-pin', value: 'FR' },
{ label: 'Germany', icon: 'i-lucide-map-pin', value: 'DE' },
{ label: 'Italy', icon: 'i-lucide-map-pin', value: 'IT' },
{ label: 'Spain', icon: 'i-lucide-map-pin', value: 'ES' }
])
const value = ref()
</script>
<template>
<UListbox v-model="value" :items="items" />
</template>🤖 New ProsePrompt component
The ProsePrompt component displays pre-built AI prompts inside your docs with one-click copy and direct IDE integration. Users can copy the prompt to their clipboard or open it directly in Cursor or Windsurf via the actions prop.
::prompt
---
description: Build a dashboard layout with Nuxt UI.
icon: i-lucide-layout-dashboard
actions:
- copy
- cursor
- windsurf
---
You are a Nuxt UI expert. Help me build a dashboard layout with
a collapsible sidebar and a sticky top navbar.
::
🌍 Automatic Link localization
The Link component now integrates automatically with @nuxtjs/i18n when installed. Internal links are localized using the $localePath helper under the hood (#5537).
<template>
<!-- Automatically becomes /en/about or /fr/about based on current locale -->
<ULink to="/about">About</ULink>
</template>This also propagates to every component that accepts a to prop (NavigationMenu, Breadcrumb, DropdownMenu, CommandPalette, etc.), so routes stay locale-aware across your entire app.
🚀 Features
- AuthForm: add
separatorslot (#6305) (81c7ddb) - Card: add
titleanddescriptionprops (3cf7d75), closes #6001 - CommandPalette: add
group-labelslot (#6329) (7fc773c) - CommandPalette: add
searchDelayprop (7d2af05) - EditorSuggestionMenu: expose suggestion matching options (#6234) (4427824)
- Link: auto-localize internal links when
@nuxtjs/i18nis installed (#5537) (92cfda0) - Listbox: new component (#6307) (00c1651)
- ProsePrompt: new component (#6362) (2451ac6)
- Table: support sticky header/footer in virtualized mode (#6217) (15d32ce)
- Textarea: expose
autoResizemethod (#6120) (9c5c0df)
🐛 Bug Fixes
- Accordion/Tabs: use item value as stable key to avoid remounts (#6380) (3cee610)
- Avatar: remove
leading-nonefrom fallback (#6383) (77ce09a) - ChatMessage/ChatMessages: preserve generic message type in slot scope (#6391) (20f66db)
- ChatMessages: prevent layout shift caused by indicator during streaming (#6297) (b7160e2)
- ChatMessages: use MutationObserver for auto-scroll during streaming (#6357) (47bf3cb)
- ChatPromptSubmit: ignore
disabledprop when status is notready(600a2ca) - components: resolve
defaultVariantsin template logic (#6361) (75b37d0) - ContentSearch/DashboardSearch: pick shared props from CommandPalette (cdcf2e5)
- ContentSearch: speed up navigation mapping (0faf2c2)
- ContentToc: use links for scrollspy instead of hardcoded h2/h3 (#6282) (6aba2ea)
- FieldGroup: prevent context from leaking into portals (#6313) (5155e27)
- FileUpload: use form field
colorandhighlightinstead of raw props (bb5a9ed) - Header/DashboardSidebar/Sidebar: allow auto focus in menu for proper focus trapping (#6266) (9b91ee4)
- InputDate/InputTime: increase segments width (#6339) (4ebdb2f)
- InputTags: add missing field group variant (#6326) (aae5378)
- Link: ensure single-root rendering for
v-showand$elresolution (#6310) (2c4ff35) - Modal/Slideover: drop empty header wrapper when empty (#6381) (1082960)
- module: use relative
tagPriorityfor inline style tags (#6299) (ae693d0) - PricingTable: align header elements vertically (#6111) (0daacb0)
- PricingTable: handle RTL mode (#6382) (ab203db)
- ProseCodeCollapse: match background on overscroll (28c89fe)
- ProseImg: respect markdown width attribute (#6350) (d4e4ea1)
- ProsePre: get code from DOM if
codeprop is missing (#6333) (b808ce4) - Select: support
item-alignedposition mode (#6358) (255807a)
👋 New Contributors
- @faizkhairi made their first contribution in #6266
- @Archetipo95 made their first contribution in #6234
- @nimonian made their first contribution in #6350
- @mrkaashee made their first contribution in #6305
- @tratteo made their first contribution in #6282
- @Ken-vdE made their first contribution in #6120
- @claylevering made their first contribution in #6380
- @ChronicStone made their first contribution in #6217
Full Changelog: v4.6.1...v4.7.0
v4.6.1
🐛 Bug Fixes
- ai: use
part.statefor streaming detection and deprecateisReasoningStreaming(d2d7543) - ChatMessage: hide files slot when no file parts exist (9cddc8e)
- ChatMessages: keep indicator visible until first content arrives (195cce8)
- ChatMessages: reset scroll icon when messages are cleared (#6239) (4ba3eef)
- ChatPrompt: guard enter during composition (#6280) (a911ca8)
- DashboardSidebar: always pass
collapsed: falsein mobile menu slots (957a0f5), closes #6157 - Modal/Slideover/Drawer: suppress reka ui title and description warnings (3451b8d), closes #6240
- module: inline defaultVariants and prefix in dev template (314e23b)
- module: transpile
reka-uito prevent injection errors (#6286) (b822c43)
New Contributors
- @fabianpnke made their first contribution in #6243
- @wicii2120 made their first contribution in #6280
Full Changelog: v4.6.0...v4.6.1
v4.6.0
✨ Highlights
📁 New Sidebar component
The Sidebar component provides a responsive application sidebar that stays fixed on desktop and transforms into a Modal, Slideover, or Drawer on mobile. It supports three visual variants (sidebar, floating, inset) and three collapsible modes (offcanvas, icon, none):
<template>
<USidebar v-model:open="open" collapsible="icon">
<template #header>
<Logo />
</template>
<UNavigationMenu :items="items" />
<template #footer>
<UserMenu />
</template>
</USidebar>
</template>🤖 New Chat components
We're introducing 3 new components to build richer AI chat interfaces:
- ChatReasoning: A collapsible thinking/reasoning block that automatically tracks streaming duration.
- ChatTool: A collapsible row for tool invocations with loading and streaming states.
- ChatShimmer: An animated text primitive used internally by ChatReasoning and ChatTool during streaming.
These components integrate seamlessly with the AI SDK message parts:
<template>
<UChatMessages :messages="messages" :status="status">
<template #content="{ message }">
<template v-for="(part, index) in message.parts" :key="index">
<UChatReasoning
v-if="isReasoningUIPart(part)"
:text="part.reasoning"
:streaming="isReasoningStreaming(message, index, chat)"
/>
<UChatTool
v-else-if="isToolInvocationUIPart(part)"
:text="part.toolInvocation.toolName"
:streaming="isToolStreaming(part)"
/>
<MDC v-else-if="isTextUIPart(part)" :value="part.text" />
</template>
</template>
</UChatMessages>
</template>🚨 Breaking Changes
- module: use
moduleDependenciesto manipulate options (#5384)
This release adopts Nuxt's new moduleDependencies API to declaratively manage sub-module dependencies (@nuxt/icon, @nuxt/fonts, @nuxtjs/color-mode, @nuxtjs/mdc) instead of manually installing them at runtime. This requires Nuxt >= 4.1.0.
🚀 Features
- add standalone Vue REPL playground (#6209) (390c4bd)
- ChatMessage: add
filesslot (12d6020) - ChatReasoning: new component (#6175) (6db594e)
- ChatShimmer: new component (#6171) (8db9c54)
- ChatTool: new component (#6176) (7849534)
- Checkbox/Switch: add support for
trueValue/falseValueprops (#6150) (91c6356) - ContentToc: add
highlight-variantprop (#5746) (df080ce) - DropdownMenu: add
filterprop (#6153) (a529b43) - FileUpload: add
fileImageprop (#5935) (40f9c2e) - Icon: add global options on Vue-only side (#5354) (566fbee)
- InputMenu: add
autocompleteprop (#6026) (ee8a248) - InputTime: add
rangeprop (#6203) (c124f29) - module: use
moduleDependenciesto manipulate options (#5384) (dd3f5c5) - Sidebar: new component (#6038) (51a1f85)
- Table: implement row pinning (#6115) (fbd60d9)
- Tooltip: support global content configuration via App tooltip prop (#6152) (83afd9c)
- unplugin: add support for prose components (#6198) (c58b9b2)
🐛 Bug Fixes
- Avatar: use resolved size for image width/height (#6008) (6dd0fc4)
- ContentNavigation: prevent toggling disabled parent items (#6122) (0f1074f)
- ContentSurround: handle RTL mode (#6148) (6921f13)
- ContentToc: reset start margin at lg breakpoint (8f24f79)
- DashboardSearchButton: use valid HTML structure for trailing slot (#6194) (578a12f)
- Editor: guard
liftcalls for unavailable list extensions (#6100) (065db6b) - Error: support
statusandstatusTextproperties (1350d62), closes #6134 - FileUpload: make multiple, accept and reset options reactive (#6204) (ae093df)
- Modal/Slideover/Popover/Drawer: prevent double
close:preventemit (#6226) (9a0d501) - module: only auto-import public composables and allow Vite opt-out (#6197) (886f5fb)
- NavigationMenu: improve RTL support for viewport and indicator (#6164) (755867b)
- NavigationMenu: propagate disabled state to item in vertical orientation (6d4d651)
- ProsePre: move shiki line highlight styles to theme (d663950)
🌐 Locales
👋 New Contributors
- @leonardocustodio made their first contribution in #6125
- @SveinnB made their first contribution in #6149
- @caiotarifa made their first contribution in #6194
- @0xA1337 made their first contribution in #6115
- @adamgreenhall made their first contribution in #6199
- @dropdead619 made their first contribution in #6100
- @SusithD made their first contribution in #6122
- @howwohmm made their first contribution in #6226
Full Changelog: v4.5.1...v4.6.0
v4.5.1
🐛 Bug Fixes
- components: improve arrow styling with
stroke-defaultandfill-bg(#6095) (0e9198e) - components: improve slots return types and tests (#6109) (7d1e863)
- components: prevent
transformUIfrom mutating cacheduseComponentUIvalue (286738a), closes #6104 #4387 - ContentToc: add relative positioning to content slot (fcdb231), closes #6117
- ContentToc: use rem units for indicator size calculation (d631853)
- NavigationMenu: prevent navigation when clicking trailing area in horizontal orientation (8f84c90), closes #6083
- Page: make slot presence reactive for variant computation (082ea41)
- types: resolve
isArrayOfArraytype return (#6097) (04292d9) - useResizable: use function declaration to prevent false auto-import (c22ecf4)
👋 New Contributors
Full Changelog: v4.5.0...v4.5.1