发布版本

随时了解 Nuxt UI 的最新功能、增强和修复内容。

v4.6.0

✨ 亮点

📁 新的 Sidebar 组件

Sidebar组件提供了一个响应式的应用侧边栏,在桌面端保持固定,并在移动端转换为 Modal(模态框)、Slideover(侧滑窗)或 Drawer(抽屉)。它支持三种视觉变体(sidebar, floating, inset)和三种折叠模式(offcanvas, icon, none

<template>
  <USidebar v-model:open="open" collapsible="icon">
    <template #header>
      <Logo />
    </template>

    <UNavigationMenu :items="items" />

    <template #footer>
      <UserMenu />
    </template>
  </USidebar>
</template>

🤖 新的 Chat 组件

我们引入了 3 个新组件,用于构建更丰富的 AI 聊天界面

  • ChatReasoning:一个可折叠的思考/推理块,可自动跟踪流式传输持续时间。
  • ChatTool:一个用于工具调用的可折叠行,包含加载和流式传输状态。
  • ChatShimmer:一个动画文本基础组件,在流式传输期间被 ChatReasoning 和 ChatTool 内部使用。

这些组件与AI SDK消息部分无缝集成

<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>

🚨 重大变更

  • module:使用 moduleDependencies 来操作选项 (#5384)

此版本采用了 Nuxt 新的 moduleDependencies API,用于声明式管理子模块依赖(@nuxt/icon, @nuxt/fonts, @nuxtjs/color-mode, @nuxtjs/mdc),而不是在运行时手动安装它们。这需要 Nuxt >= 4.1.0

🚀 新功能

🐛 Bug 修复

  • Avatar:使用解析后的尺寸作为图像宽高 (#6008) (6dd0fc4)
  • ContentNavigation:防止切换已禁用的父级项 (#6122) (0f1074f)
  • ContentSurround:处理 RTL 模式 (#6148) (6921f13)
  • ContentToc:在 lg 断点重置起始边距 (8f24f79)
  • DashboardSearchButton:为 trailing 插槽使用有效的 HTML 结构 (#6194) (578a12f)
  • Editor:保护不可用的列表扩展的 lift 调用 (#6100) (065db6b)
  • Error:支持 statusstatusText 属性 (1350d62), 关闭#6134
  • FileUpload:使 multiple、accept 和 reset 选项具有响应式 (#6204) (ae093df)
  • Modal/Slideover/Popover/Drawer:防止双重 close:prevent 发射 (#6226) (9a0d501)
  • module:仅自动导入公共可组合项,并允许 Vite 选择退出 (#6197) (886f5fb)
  • NavigationMenu:改进视口和指示器的 RTL 支持 (#6164) (755867b)
  • NavigationMenu:在垂直方向传播禁用状态到项 (6d4d651)
  • ProsePre:将 shiki 行高亮样式移至主题 (d663950)

🌐 本地化

👋 新贡献者

完整变更日志: https://github.com/nuxt/ui/compare/v4.5.1...v4.6.0

v4.5.1

🐛 Bug 修复

  • components:使用 stroke-defaultfill-bg 改进箭头样式 (#6095) (0e9198e)
  • components:改进插槽返回类型和测试 (#6109) (7d1e863)
  • components:防止 transformUI 修改缓存的 useComponentUI 值 (286738a), 关闭#6104 #4387
  • ContentToc:为内容插槽添加相对定位 (fcdb231), 关闭#6117
  • ContentToc:使用 rem 单位进行指示器尺寸计算 (d631853)
  • NavigationMenu:防止在水平方向点击尾部区域时导航 (8f84c90), 关闭#6083
  • Page:使插槽存在性具有响应式以进行变体计算 (082ea41)
  • types:解析 isArrayOfArray 类型返回 (#6097) (04292d9)
  • useResizable:使用函数声明以防止虚假自动导入 (c22ecf4)

👋 新贡献者

完整变更日志: https://github.com/nuxt/ui/compare/v4.5.0...v4.5.1

v4.5.0

✨ 亮点

🎨 新的 Theme 组件

主题组件允许您覆盖所有子组件的主题,而无需单独修改每个组件。将一个对象传递给 ui 属性,其中键是组件名称,值是它们的插槽类覆盖

<UTheme
  :ui="{
    button: {
      base: 'rounded-full'
    },
    input: {
      base: 'rounded-full'
    }
  }"
>
  <UButton label="Button" color="neutral" variant="outline" />
  <UInput placeholder="Search..." />
</UTheme>

Theme 组件不渲染任何 HTML 元素。它在底层使用 Vue 的 provide / inject,因此覆盖会传播到整个组件树,无论嵌套深度如何。Theme 组件可以嵌套(最内层获胜),且单个组件上的 ui 属性总是优先。

🌈 新的中性色

感谢Tailwind CSS v4.2,现在提供了四种新的中性色选项:taupemauvemistolive。通过您的 app.config.ts 中的 ui.neutral 选项进行配置。

🚫 重复吐司通知预防

Toaster 现在会自动防止重复吐司,并在触发重复时显示脉冲动画,提供更简洁的通知体验https://ui.nuxtjs.org.cn/docs/components/toast#deduplicated-toasts

https://github.com/user-attachments/assets/e356affa-d170-4b7e-8a80-217132ee88e1

🚀 新功能

  • DashboardSidebar/Header:添加 autoClose 属性 (#6089) (2663deb)
  • EditorDragHandle:代理 nested / nestedOptions 属性并发送 hover 事件 (#5960) (ed60193)
  • Form:在程序化提交时添加 HTML5 验证 (#6002) (ed552fc)
  • module:添加对 taupe / mauve / mist / olive 中性色的支持 (#6081) (bc49d3f)
  • NavigationMenu:允许在 horizontal 方向使用工具提示 (#5682) (f46b504)
  • NavigationMenu:处理项中的 chip (#6064) (401a2c0)
  • ScrollArea:添加 skipMeasurement 虚拟化选项 (#5721) (548b711)
  • Select/SelectMenu:outlinesubtle 变体添加悬停效果 (94b0c31)
  • Theme:新组件 (#4387) (c97047d)
  • Toaster:防止重复吐司并添加脉冲动画 (3f6581a)

🐛 Bug 修复

  • BlogPost/ChangelogVersion:为 image 属性使用 ImgHTMLAttributes 类型 (#6007) (0185856)
  • ChatMessages:允许消息属性覆盖角色默认值 (#6000) (f64ec17)
  • ChatMessages:防止在挂载时滚动到底部之前顶部闪烁 (4bdcb83)
  • Checkbox/Switch:防止在 Tooltip 内部使用时出现 data-state 冲突 (2bb1a8b), 关闭#3599
  • CheckboxGroup:更新 update:modelValue 发射类型 (#5927) (64d2e88)
  • ColorModeImage:为公共路径添加 baseURL 支持 (#6006) (db510f3)
  • components:添加 fixed 属性以防止响应式文本尺寸缩小 (#6074) (8f5f44c)
  • components:支持可空和可选类型 (#6060) (cd3432b)
  • components:防止 iOS 对字体大小低于 16px 的输入字段自动缩放 (#6040) (1262016)
  • ContentNavigation:将嵌套子数据传递给插槽 (#6043) (e67f77e)
  • defineShortcuts:添加 alt 键保护 (#6020) (8451f45)
  • defineShortcuts:允许带 Shift 的特殊字符快捷键 (08facc0)
  • Drawer/Modal/Popover/Slideover:防止在与其他叠加层交互时触摸意外关闭 (#5695) (e2c038c)
  • Editor:在 RTL 模式下处理占位符 (#5977) (3cc16e3)
  • EditorMentionMenu:使用 char 属性作为提及前缀,而不是总是使用 @ (0b9b097), 关闭#6035
  • EditorToolbar:将 size 属性代理给下拉菜单 (8f8d989)
  • InputMenu/InputNumber/SelectMenu:size 代理给按钮 (1ec1698), 关闭#5958
  • InputMenu/Select/SelectMenu:从模型值类型中排除装饰性项 (#6044) (22cf1ea)
  • InputMenu/SelectMenu:按匹配相关性对过滤后的项进行排序 (058c66b), 关闭#4672
  • InputMenu:防止在尾部按钮上获取焦点 (88073b6)
  • module:将 icon cssLayer 选项从 components 更新为 base (#6076) (e8bc322)
  • NavigationMenu:允许在水平方向点击尾部插槽 (7f9996f), 关闭#5192 #6083
  • NavigationMenu:为分组项生成唯一自动生成的项值 (7b317d9)
  • PricingPlan:截断标题 (#6041) (8e86c51)
  • Select:删除无用的 by 属性 (14dceaf)
  • Table:在禁用深度监视时使用 shallowRef 提高性能 (#6023) (bc06ce2)
  • Toast:允许 update 保持吐司打开并重置持续时间 (82afa0a)
  • Toast:改进动画平滑度 (#6065) (ee2c0a5)
  • types:提高 DotPathKeys 的准确性和 GetItemKeys 的性能 (#6077) (6f7af3e)
  • useEditorMenu:按相关性对过滤结果进行排名 (f53484a)

🌐 本地化

👋 新贡献者

完整变更日志: https://github.com/nuxt/ui/compare/v4.4.0...v4.5.0

v4.4.0

🚀 新功能

  • Calendar:添加 weekNumbers 属性 (#4555) (7a1a71b)
  • ChangelogVersions:处理 indicator 属性中的滚动选项 (#5257) (6a925cd)
  • CommandPalette/InputMenu/SelectMenu/Tree:将虚拟化器 estimateSize 作为函数处理 (#5748) (d51b424)
  • CommandPalette:添加 input 属性 (#5736) (12052e8)
  • CommandPalette:添加 size 属性 (#5878) (3ae04c6)
  • components:添加 by 属性 (#5906) (36cd5e5)
  • components:添加 valueKey 属性 (#5905) (55646ea)
  • Editor:添加 placeholder.mode 属性 (d90acb3), 关闭#5785
  • Editor:在菜单中添加 size 属性 (#5889) (571d50d)
  • Editor:添加 taskList 处理程序 (#5837) (db04197)
  • Editor:增加对链接内代码的支持 (2ed2d5d)
  • Editor:imagemention 属性中处理布尔值 (b6fa83a), 关闭#5820
  • EditorMentionMenu:使用 ignoreFilter 属性处理异步搜索 (#5880) (f8d1883)
  • InputMenu/Select/SelectMenu:为无限滚动暴露 viewportRef (#5836) (f4a945c)
  • InputMenu/SelectMenu:添加 clear 属性 (#5643) (ec6b8ec)
  • Link:支持 vue 中的自定义导航函数 (#5860) (f51e58a)
  • ProseTd/ProseTh:处理 align 属性 (859390e), 关闭#5795
  • Timeline/Stepper:添加 wrapper 插槽并修复动态插槽条件 (#5868) (8610d4d)
  • Timeline:添加 select 事件 (#5826) (8e431be)

🐛 Bug 修复

  • Banner:使用每个实例的 CSS 变量隔离横幅可见性 (#5751) (c7332eb)
  • Banner:防止通过 id 属性注入进行 XSS (4e334a0)
  • CommandPalette/ContextMenu/DropdownMenu:在链接项上的键盘选择 (3f5bdb3)
  • CommandPalette:防止搜索高亮中的 XSS (e12ceb6)
  • ContentSurround:在没有上一页的情况下,将下一页链接在平板电脑上向右对齐 (#5833) (b3adccc)
  • defineShortcuts:检查特殊字符快捷键的 Shift 修饰符 (bd344d7), 关闭#5911
  • Editor:在更新值时设置 contentType (c37d6f7), 关闭#5709
  • Editor:默认支持所有标题级别 (3046c3e)
  • EditorToolbar:防止项上的 onClick 被调用两次 (cbed0cc), 关闭#5784
  • EditorToolbar:防止项没有类型时禁用下拉菜单 (d473f63)
  • Error/Main:渲染为 main 而不是 div (6ccb1f5)
  • FileUpload:在清除文件时发射 null (#5892) (1d9a2fd)
  • FileUpload:在禁用预览且有多个文件时保持输入可见 (597ac29), 关闭#5875
  • locale:改进 cssk 的术语以实现正确的词形变化 (#5789) (af6f288)
  • module:仅覆盖 primary 颜色和 md 尺寸默认变体 (f422de8)
  • ProseCodeTree:防止 expandAll 属性导致的无限更新循环 (c79cb77), 关闭#5828
  • useOverlay:细化关闭事件参数提取 (#5775) (182af20)

👋 新贡献者

完整变更日志: https://github.com/nuxt/ui/compare/v4.3.0...v4.4.0

v4.3.0

✨ 亮点

:pencil: 新的 Editor 组件

我们引入了一套 6 个新组件,用于构建富文本编辑器,由TipTap:

  • 编辑器:支持 JSON、HTML 和 Markdown 内容类型的根组件。
  • EditorToolbar:一个可定制的工具栏,具有格式化操作、链接编辑和可扩展的项组。
  • EditorSuggestionMenu:一个命令菜单(/),用于插入标题、列表、代码块、图像等。
  • EditorMentionMenu:一个提及菜单(@),用于引用用户或其他实体。
  • EditorEmojiMenu:一个表情符号选择器(:),用于内联插入表情符号。
  • EditorDragHandle:一个拖拽手柄,用于重新排序块,并带有一个用于块操作的下拉菜单。

编辑器完全可以通过 TipTap 的扩展系统进行扩展,并为高级用例暴露编辑器实例。

我们还发布了一个新的编辑器模板,它在一个生产就绪的设置中展示了所有编辑器组件,通过以下方式实现 实时协作PartyKit和使用以下技术的 AI 自动补全AI SDKVercel AI Gateway.

https://github.com/user-attachments/assets/e4a799a3-8de1-4c85-b7f0-ca24789a6d98

📜 新的 ScrollArea 组件

滚动区域组件提供了一个灵活的滚动容器,通过以下方式内置了虚拟化支持TanStack Virtual.

https://github.com/user-attachments/assets/8d3bcb2c-f5b4-4412-99b1-f33e1b53dd8e

🚀 新功能

🐛 Bug 修复

  • BlogPost/ChangelogVersion/PageFeature/User:允许 Tab 键聚焦 (47d93d3), 关闭#5635
  • Carousel:一致的 stopOnInteraction 行为 (#5489) (36a7861)
  • Carousel:改进点焦点样式 (cc90fb8)
  • ColorModeButton:改进图标类合并 (2ce9af2)
  • ContentSearch/DasboardSearch:在移动端设置全高以防止跳动 (70317e5)
  • DashboardResizeHandle:允许通过 z-index 悬停在面板上 (07147f1)
  • FormField:如果 error 属性为 false,则隐藏错误 (#5599) (6b7fe25)
  • InputDate/InputTime:添加缺失的字段组变体 (#5596) (cb3cec2)
  • PageCard/PageCTA/PageSection:处理 lg 屏幕下的 reverse 属性 (#5545) (60b430c)
  • ProseA/ProseCallout/ProseCard:改进焦点样式 (df5f8c2)
  • Slider:为 thumb 添加 aria-label (#5313) (f99ec46)
  • Table:仅转发必要的属性 (#5527) (b0b209e)
  • Table:根据 size 正确放置固定列 (e885b0e), 关闭#4721 #3927

🌐 本地化

👋 新贡献者

完整变更日志: https://github.com/nuxt/ui/compare/v4.2.1...v4.3.0

v4.2.1

🐛 Bug 修复

  • ChatPromptSubmit:代理事件到 stopreload 发射 (#5400) 736a547
  • ColorModeButton:缺少图标导入5f30ccf,关闭 #5486
  • Icon:改进 name 类型 (#5498) b654a77
  • Link:定义 NuxtLinkProps 而不是从 #app 导入 (#5491) da8daaa
  • Link:确保 Nuxt、Vue 和 Inertia 的一致性a9ed10d,关闭 #5012
  • module:放回 #build/ui.css 别名 (#5499) d9aadc7

👋 新贡献者

完整变更日志: https://github.com/nuxt/ui/compare/v4.2.0...v4.2.1

v4.2.0

✨ 亮点

📅 新的 InputDate & InputTime 组件

现在有两个新组件可用于处理日期和时间输入输入日期 (#5387) 和输入时间 (#5302).

<script setup lang="ts">
const date = ref(new CalendarDate(2022, 2, 3))
const time = ref(new Time(12, 30, 0))
</script>

<template>
  <UInputDate v-model="date" />

  <UInputTime v-model="time" />
</template>

🎨 Tailwind CSS 前缀

您现在可以使用 Tailwind CSS 的prefix 选项 (#5341)来为 Nuxt UI 生成的所有工具类添加前缀,并避免与您自己的样式或其他库发生冲突。

export default defineNuxtConfig({
  modules: ['@nuxt/ui'],
  css: ['~/assets/css/main.css'],
  ui: {
    theme: {
      prefix: 'tw'
    }
  }
})
@import "tailwindcss" prefix(tw);
@import "@nuxt/ui";

🚨 重大变更

暴露的引用现在始终直接返回 HTML 元素,而不是组件实例。这影响 InputMenu, InputNumber, InputTags, Select, 和 SelectMenu

<script setup lang="ts">
const inputMenu = useTemplateRef('inputMenu')

- inputMenu.value.inputRef.$el // Component instance
+ inputMenu.value.inputRef // HTML element directly
</script>
  • module:从模块正确导出可组合项 (cb25902)

导出可组合项的方式存在一个问题,您不再需要 .js 扩展名

<script setup lang="ts">
- import { useToast } from '@nuxt/ui/composables/useToast.js'
+ import { useToast } from '@nuxt/ui/composables/useToast'
// or
+ import { useToast } from '@nuxt/ui/composables'
</script>

Vite 插件现在正确地将主题文件生成为真实文件,而不是错误地将它们存放在 NPM 上的 .nuxt/ 中。这确保了 #build/ui.css 导入和自定义主题配置正常工作。

当使用 Vite 插件时,更新您的 tsconfig.node.json 别名

{
  "compilerOptions": {
    "paths": {
      "#build/ui": [
-       "./node_modules/@nuxt/ui/.nuxt/ui"
+       "./node_modules/.nuxt-ui/ui"
      ]
    }
  }
}

🚀 新功能

🐛 Bug 修复

  • AuthForm:确保带有 leading 插槽时显示标题 (#5405) (b61127a)
  • AuthForm:为 aria-controls 使用密码输入 id (#5312) (55ea9be)
  • ChatPrompt:代理 disabled 属性 (a8f2156), 关闭#5300
  • CheckboxGroup/RadioGroup/Switch:一致的禁用样式 (ddd8faf), 关闭#5391
  • ColorModeButton:使用 CSS 显示颜色模式图标 (#5394) (1d1c638)
  • CommandPalette/ContentSearch:改进性能和过滤逻辑 (#5433) (e751b37)
  • components:根据项描述计算虚拟化器 estimateSize (56ae8e7)
  • components:一致的暴露引用 (#5385) (fce2df4)
  • components:移除 locale / dir 属性代理 (#5432) (a6efa7a)
  • ContentNavigation/NavigationMenu/Tabs:确保正确的徽章显示 (e5c11e6)
  • ContentSearchButton/DashboardSearchButton:在折叠时使用 CSS 隐藏标签和尾部 (3e72bf8)
  • FileUpload:确保原生验证与 required 一起工作 (#5358) (eb491e1)
  • Form:细化 nested 属性类型处理并简化逻辑 (#5360) (8d5c26f)
  • inertia:动态设置 serverRendered 以防止 SSR 崩溃 (#5396) (c0da1b2)
  • Input/InputNumber/Textarea:使 modelModifiers 通用化 (#5361) (5c347af)
  • InputMenu:选择创建项时防止 change 事件 (418c87b), 关闭#4664
  • Link:vue-routerinertia 进行部分扩展 (637ef58)
  • Marquee:将关键帧移入全局 CSS (1e6242e)
  • module:在使用 experimental.componentDetection 时检测懒加载组件 (5a5ac45)
  • module:从模块正确导出可组合项 (cb25902), 关闭#5370
  • module:在使用 experimental.componentDetection 时扫描层 (9872740), 关闭#5389
  • NavigationMenu:在折叠时使用 CSS 隐藏标签和尾部 (f004031), 关闭#4254
  • NavigationMenu:在垂直方向代理 modelValue / defaultValue (cffaaaa), 关闭#5392
  • ProseCallout:为图标添加 inline-block 类 (#5317) (fc36f69)
  • RadioGroup:更新 update:modelValue 发射类型 (#5349) (4cb0638)
  • Table:根据列元数据将样式应用于 th (#5418) (620defa)
  • types:导出缺失的工具类型 (#5448) (5f0a107)
  • vite:编写主题模板 (#5355) (411ebcc)
  • vue:检查 import.meta.env.SSR 以支持 vite-ssg (#5347) (8f38c04)

🌐 本地化

👋 新贡献者

完整变更日志: https://github.com/nuxt/ui/compare/v4.1.0...v4.2.0

v4.1.0

✨ 亮点

📦 新的 Empty 组件

现在提供了一个新的组件,用于在没有内容可显示时显示空状态 (#5200).

⚡️ 组件虚拟化

使用 virtualize 属性为大型数据集启用虚拟化CommandPalette, InputMenu, SelectMenu, TableTree组件 (#5162).

<template>
  <UTable :data="data" :columns="columns" virtualize />
</template>

🎯 实验性组件检测

在您的 nuxt.config.ts 中启用新的experimental.componentDetection选项,以自动检测实际使用了哪些组件,并仅为这些组件及其依赖项生成必要的 CSS (#5222).

nuxt.config.ts
export default defineNuxtConfig({
  modules: ['@nuxt/ui'],
  css: ['~/assets/css/main.css'],
  ui: {
    experimental: {
      componentDetection: true
    }
  }
})

🚨 重大变更

我们对这些小的重大变更表示歉意。由于库中有 110 多个组件,我们有时需要进行更正以保持一致性和质量。我们的目标是尽量减少重大变更,但有时它们对于从长远来看改善开发人员体验是必要的。

  • CommandPalette:添加 children-icon 属性以在输入中使用 trailing-icon (#4397) (edda8a6)

trailing-icon 属性现在用于 Input,并添加了一个新的 children-icon 属性来自定义子项的图标

<template>
- <UCommandPalette :trailing-icon="i-lucide-arrow-right" />
+ <UCommandPalette :children-icon="i-lucide-arrow-right" />
</template>
  • Table:select 事件中一致的参数顺序 (9526a1b)

@select 事件现在以一致的顺序传递参数:(event, row) 而不是 (row, event)

<template>
- <UTable @select="(row, e) => {}" />
+ <UTable @select="(e, row) => {}" />
</template>

🚀 新功能

  • Calendar:添加 variant 属性 (#5138) (bb4f42c)
  • CommandPalette:添加 children-icon 属性以在输入中使用 trailing-icon (#4397) (edda8a6)
  • CommandPalette:在搜索结果中保留组顺序 (#5197) (38647a2)
  • components:在使用的插槽属性中暴露 ui (#5207) (63c0a5f)
  • components:处理项中的 description (#5193) (70cf05f)
  • components:实现虚拟化 (#5162) (c744d6f)
  • Empty:新组件 (#5200) (6a6de8d)
  • InputNumber:increment / decrement 处理为布尔值 (#4805) (1858908)
  • module:添加 experimental.componentDetection 选项 (#5222) (f80474c)
  • Popover:在插槽中添加 close 方法 (#5176) (53c6508)
  • ProseImg:改进 zoom 过渡 (#4998) (d502c30)
  • Tree:添加全局事件处理程序和复选框示例 (#5195) (84f87a5)
  • Tree:暴露 $el 以获取拖放示例 (#5239) (fcf6117)
  • Tree:提供额外的插槽属性 (#5194) (c8b01c9)
  • useToast:处理 max 全局配置 (#5068) (e4c6113)

🐛 Bug 修复

  • BlogPost/ChangelogVersion:允许 image 属性中的任何 attrs (9632f99), 关闭#5276
  • Breadcrumb:处理项中的 active (cc8cbf3), 关闭#4771
  • ChatMessage:确保左侧占用全宽 (af8c023)
  • ChatMessage:仅在右侧应用最大宽度 (a85b0e1)
  • ChatMessage:重置顶部和底部边距 (8f9176c)
  • ChatMessages:允许用户使用 should-auto-scroll 进行滚动 (#5252) (db73765)
  • ChatMessages:定义用户和助手 ui 属性类型 (#5234) (240bc1a)
  • CodeTree/Tree:使用 presentation 角色恢复项包装器 (70aaf4a), 关闭#4945
  • components:在 prose 代理组件中添加缺失的 ui 属性 (#5205) (d1afe90)
  • ContextMenu/DropdownMenu:允许覆盖项内容类 (ab5032d), 关闭#5277
  • Drawer/Modal/Slideover:移除关闭自动聚焦阻止 (#5191) (8099440)
  • Error/Main:渲染为 div 而不是 main (2a09ac0), 关闭#4955
  • FileUpload:处理禁用文件删除按钮 (08c30cf), 关闭#5249
  • FileUpload:选项卡时焦点卡住 (#5128) (2477d44)
  • FileUpload:为 blob URLs 预览使用原生 img 元素 (69906bc), 关闭#5121 #4824
  • InputMenu/SelectMenu:丰富可重用模板项属性 (63074d6)
  • InputMenu:确保数字时标签可以被移除 (028538a)
  • Kbd:返回原始值并使用 uppercase 类 (#5238) (4095c9a)
  • NavigationMenu:当 badge 不为 undefined 时显示尾部插槽 (f24204f), 关闭#4670
  • Table:select 事件中一致的参数顺序 (9526a1b)
  • Table:暴露 $el 而不是 rootRef (c019f8f), 关闭#5230 #5162

🌐 本地化

👋 新贡献者

完整变更日志: https://github.com/nuxt/ui/compare/v4.0.1...v4.1.0

v3.3.6

🐛 Bug 修复

  • App:允许禁用全局门户 (#5111) (43c119f)
  • Carousel:确保插件在客户端导航后初始化 (#5117) (0f7a1b7)
  • Carousel:在 RTL 方向反转箭头键 (#5072) (27cb2b6)
  • Drawer:当 dismissible 为 false 时防止意外关闭 (#5085) (027c06a)
  • Drawer:使用全高/全宽作为 snapPoints (#5041) (8f21339)
  • Pagination:使省略号不可交互 (#5081) (ab168af)
  • Table:空单元格值导致水合错误 (#5069) (cd2662a)
  • useKbd:将 Escape 键从 更新为 Esc (#5076) (27aa80c)

完整变更日志: https://github.com/nuxt/ui/compare/v3.3.5...v3.3.6

v4.0.1

🐛 Bug 修复

  • App:允许禁用全局门户 (#5111) (7659fa1)
  • AuthForm:导出具有适当推理的类型,用于特定于字段的属性 (#5106) (344f269)
  • Avatar:移除多余的 img 角色 (066b8a1), 关闭#5044
  • Carousel:确保插件在客户端导航后初始化 (#5117) (21fbe63)
  • Carousel:在 RTL 方向反转箭头键 (#5072) (fde53ee)
  • ChatMessages:确保在滚动前渲染内容 (0db622a)
  • ChatMessages:使用深度监视以处理带有 parts 的流式传输 (ff67fa3)
  • components:添加缺失的 data-orientation 以保持一致性 (a9fe7c6)
  • ContentNavigation:使用 default-open 改进路径匹配和递归 (22ee075), 关闭#5112
  • ContentSearch/DashboardSearch:代理模态属性以支持全屏 (095a0c1)
  • DashboardPanel/DashboardSidebar:处理 RTL 模式 (#5109) (fface35)
  • Drawer:当 dismissible 为 false 时防止意外关闭 (#5085) (2abdc21)
  • Drawer:使用全高/全宽作为 snapPoints (#5041) (b145768)
  • locale:改进 ckb 翻译 (#5079) (3ee3a5e)
  • locale:使用省略号改进排版 (#5052) (391f9f5)
  • Pagination:使省略号不可交互 (#5081) (62f64cc)
  • Table:空单元格值导致水合错误 (#5069) (44a38ea)
  • unplugin:处理带有子路径的组件解析 (31db8d9)
  • useKbd:将 Escape 键从 更新为 Esc (#5076) (64d1589)
  • vue:对齐 useCookie 存根与 nuxt 的默认值处理 (#5089) (f531807)

👋 新贡献者

完整变更日志: https://github.com/nuxt/ui/compare/v4.0.0...v4.0.1

v4.0.0

我们很高兴地宣布 Nuxt UI v4,这是一个重要的里程碑,它将 Nuxt UI 和 Nuxt UI Pro 合并为一个单一、完全开源的库。继NuxtLabs 加入 Vercel7 月份之后,我们现在能够为每个人免费提供 100 多个生产就绪的组件和完整的 Figma 工具包。

阅读博客文章公告https://nuxtjs.org.cn/blog/nuxt-ui-v4

开始使用 Nuxt UI v4 →

✨ 亮点

🌐 统一和开源

Nuxt UI v4 标志着一个重要的里程碑,它将 Nuxt UI 和 Nuxt UI Pro 合并为一个统一、完全开源的库

  • 100+ 组件:完全访问所有组件,包括之前 Pro 独有的组件
  • Figma 工具包:现在每个人都可以使用专业的资源
  • 单个包:一切统一在 @nuxt/ui

🖥 模板

我们之前所有用于 Nuxt 和 Vue 的独家模板现在都对所有人开放,并更新为 Nuxt UI v4

  • 入门:开始使用 Nuxt UI 的最小模板
  • 落地页:由 Nuxt Content 驱动的现代落地页模板
  • 文档:由 Nuxt Content 驱动的文档模板
  • SaaS:一个具有落地页、定价、文档和博客的 SaaS 模板,由 Nuxt Content 驱动
  • 仪表板:一个带有多列布局的仪表板模板,用于构建复杂的管理界面
  • 聊天:一个 AI 聊天机器人模板,用于构建您自己的聊天机器人,由 Nuxt MDC 和 Vercel AI SDK 驱动
  • 作品集:一个时尚的作品集模板,用于展示您的工作、技能和博客,由 Nuxt Content 驱动
  • 更新日志:一个更新日志模板,用于显示来自 GitHub 的存储库版本说明,由 Nuxt MDC 驱动

📚 文档

我们在 v4 中对文档进行了广泛的改进,以提供更好的开发者体验

  • 统一位置:所有文档现在都在/docs/下,并带有来自旧路径的自动重定向
  • 专门的部分: 主题排版现在有他们自己组织的部分
  • AI 就绪功能: LLMs.txt端点和MCP 服务器针对 Cursor、Windsurf 和 GitHub Copilot 等 AI 工具的集成

🌱 从 v3 迁移

从 v3 到 v4 的迁移设计得比以前的主要版本过渡更平滑。我们建议阅读迁移指南以获取分步说明。

对于 Nuxt UI 用户

  1. 更新至 @nuxt/ui@latest

对于 Nuxt UI Pro 用户

  1. 在您的依赖项中将 @nuxt/ui-pro 替换为 @nuxt/ui
  2. 在您的 Nuxt 配置中将模块注册从 @nuxt/ui-pro 更新为 @nuxt/ui
  3. 在您的应用程序配置中将配置键从 uiPro 更改为 ui
  4. 将 CSS 导入从 @nuxt/ui-pro 更新为 @nuxt/ui
  5. 更新所有导入语句以引用 @nuxt/ui

🙏 致谢

我们要特别感谢所有支持 Nuxt UI Pro 的人。你们的早期采用和反馈在塑造 Nuxt UI 方面发挥了关键作用。你们帮助我们资助、维护和改进了该项目,使我们能够达到这一里程碑,现在我们可以向整个社区提供这些强大的工具。

非常感谢Nuxt UI 背后的专业团队以及我们令人难以置信的 250 多位贡献者社区。你们的辛勤工作、创造力和热情一直是该项目成功的驱动力。

感谢你们成为这段旅程的一部分 💚

v3.3.5

🐛 Bug 修复

  • InputMenu:确保在多选时向项目传递字符串 (0031a75), 关闭#5018
  • InputTags:在输入上添加 blur 和 focus 事件处理程序 (#5007) (5db2708)
  • Progress:改进为 0 时的 status-position (#4994) (e0891ea)
  • Tabs:在项值上使用空值合并 (a4ab796), 关闭#4804
  • types:允许 tv 配置中的任意键 (#4992) (8d859ea)
  • types:解析 icons 类型中的环境声明错误 (#4991) (526cb81)

新贡献者

完整变更日志: https://github.com/nuxt/ui/compare/v3.3.4...v3.3.5

v4.0.0-beta.0

🐛 Bug 修复

  • ChatMessages:使用插槽包装指示器 (#5036) (c00bf30)
  • CheckboxGroup:代理通用类型到 emits (ffa5b23)
  • Form:改进嵌套表单验证处理 (#5024) (77a554e)
  • Form: 移除 joiyup,改用 @standard-schema/spec (#5035) (723cf36)
  • InputMenu:确保在多选时向项目传递字符串 (9beccbb), 关闭#5018
  • InputTags:在输入上添加 blur 和 focus 事件处理程序 (#5007) (3fd2614)
  • locale: 改进 pt 语言环境的翻译 (#5003) (725ef9b)
  • module: 确保 tailwindcss vite 插件仅注入一次 (#5008) (c2e39dd)
  • ProseImg: 默认添加 w-full (#4997) (de47add)
  • Tabs:在项值上使用空值合并 (340fc48), 关闭#4804
  • Tree: 移除 value-key,改用 get-key (#4999) (240ff42)
  • types:允许 tv 配置中的任意键 (#4992) (ae77b69)

新贡献者

完整变更日志: https://github.com/nuxt/ui/compare/v4.0.0-alpha.2...v4.0.0-beta.0

v4.0.0-alpha.2

本次 4.0.0-alpha.2 版本主要侧重于稳定性和文档改进。

正式版 v4 预计将在经过更多测试后的下周发布。

📚 文档

我们在本次版本中对文档进行了重大改进。

🚨 重大变更

  • Form: 启用转换时不再更改表单状态 (#4902)

阅读关于此变更的迁移指南https://ui4.nuxt.com/docs/getting-started/migration/v4#changes-to-form-component

🚀 新功能

  • ContentNavigation: 处理 type 为 multiple 时的 collapsible false 情况 (c42c2ab)

🐛 Bug 修复

🔥 性能

🌐 本地化

👋 新贡献者

完整变更日志: https://github.com/nuxt/ui/compare/v4.0.0-alpha.1...v4.0.0-alpha.2

v4.0.0-alpha.1

📚 文档

您可以在以下地址查看 v4 的新文档:https://ui4.nuxt.com在 alpha 阶段期间。

🚨 重大变更

  • components:nullify 修饰符重命名为 nullable 并添加 optional (#4838)
  • module: 更新对 nuxt 4 的兼容性

阅读迁移至 v4 的指南.

🚀 新功能

🐛 Bug 修复

  • AuthForm: 使用来自表单字段的 error (#4738) (00dfb6b)
  • BlogPost: 确保 date 插槽渲染 (#4743) (4514880)
  • ChangelogVersion/ChangelogVersions: 处理 RTL 模式 (#4777) (f91c408)
  • ContentSearch/DashboardSearch: 使 ui.modal 生效 (946c2ec)
  • module: 在组件上添加 @source (a16465f), 关闭#4773
  • PageCard: 改进键盘可访问性 (#4733) (3029568)
  • ProseImg: 确保图像具有唯一的运动布局 ID (#4720) (9480a0b)
  • unplugin: 处理子目录中的组件覆盖 (#4781) (69ee75e)

新贡献者

完整变更日志: https://github.com/nuxt/ui/compare/v4.0.0-alpha.0...v4.0.0-alpha.1

v3.3.3

🚀 新功能

🐛 Bug 修复

  • components: update:model-value 事件的类型损坏 (#4853) (7133f50)
  • Form: 默认插槽类型 (#4758) (a32cc37)
  • Form: 更新 Form 接口以接受 RegExp (#4821) (0c2d390)
  • InputMenu/Select/SelectMenu: 当 model value 为假值时显示占位符 (#4825) (90b5daf)
  • InputMenu: 防止内容上的 focus-outside 事件 (77b6b9a)
  • Link: 确保 _blank 目标在 Inertia 中被标记为外部链接 (#4746) (520b277)
  • Table: 确保 loadingempty 状态的 colspan 计算正确 (#4826) (bdcc8c4)

新贡献者

完整变更日志: https://github.com/nuxt/ui/compare/v3.3.2...v3.3.3

v4.0.0-alpha.0

📚 文档

您可以在以下地址查看 v4 的新文档:https://ui4.nuxt.com在 alpha 阶段期间。

🚨 重大变更

阅读迁移至 v4 的指南.

完整变更日志: https://github.com/nuxt/ui/compare/v3.3.2...v4.0.0-alpha.0

v3.3.1

🚀 新功能

🐛 Bug 修复

  • Drawer: 使用 inset 属性改进关闭动画 (#4676) (9da1527)
  • FileUpload: 处理拖放区 dataTypes 中的通配符 (#4671) (729bed4)
  • FileUpload: 改进文件删除的可访问性 (#4607) (f90bba0)
  • FileUpload: 在按键弹起时打开对话框 (#4629) (8e9265e)
  • FileUpload: 在按键按下时阻止默认行为 (#4633) (68d8a98)
  • Input: iOS 上 date / time 类型渲染不正确 (#4715) (93cc83c)
  • InputMenu/Select/SelectMenu: 在未找到项目时添加显示值后备 (#4689) (34ca811)
  • Select/InputMenu: 处理 FormField 内 label 的焦点 (#4696) (55dbcd2)
  • Tabs: 添加缺失的 Badge 导入 (#4594) (fbec29c)
  • Toast: 为进度 ui 属性添加类型 (#4677) (a8af85c)
  • Tooltip: 仅在存在 textkbds 时渲染 (#4568) (5e39cbb)

新贡献者

完整变更日志: https://github.com/nuxt/ui/compare/v3.3.0...v3.3.1

v3.3.0

✨ 亮点

☁️ 新组件 FileUpload

引入功能强大的新 FileUpload 组件,通过内置的拖放和验证支持,使文件上传变得轻而易举 (#4564).



了解更多https://ui.nuxtjs.org.cn/components/file-upload

🎨 全局默认变体

配置所有组件中 colorsize 的全局默认值,以减少样板代码并确保样式一致 (#4400).

export default defineNuxtConfig({
  modules: ['@nuxt/ui'],
  css: ['~/assets/css/main.css'],
  ui: {
    theme: {
      defaultVariants: {
        color: 'neutral',
        size: 'sm'
      }
    }
  }
})

了解更多https://ui.nuxtjs.org.cn/getting-started/installation/nuxt#themedefaultvariants

📊 增强的 Table 组件

Table 组件的重大改进带来了增强的功能和更好的用户体验

  • 页脚支持列汇总 (#4194)
  • 上下文菜单支持 (#4259)
  • 跨列 (Colspan) 和跨行 (Rowspan) 支持 (#4460)
  • 行悬停事件以获得更好的交互性 (#2435)
  • 自定义样式在表格和列元数据中 (#4513)

了解更多https://ui.nuxtjs.org.cn/components/table

🚀 新功能

🐛 Bug 修复

  • Button/Link: 合并 active-class / inactive-class 与应用配置 (#4446) (9debce7)
  • Button: 添加 active 样式,使其在移动设备上表现得像 hover (df8f202), 关闭#991
  • Carousel/Tree: 为按钮元素添加类型以提高可访问性 (#4493) (fc24e03)
  • Carousel: 为活动点添加 aria-current 属性 (#4447) (1ba8a55)
  • Carousel: 改进可访问性 (55e06e9), 关闭#4494
  • Carousel: 使用页面转换解析插件 (#4380) (3b67d54)
  • ColorPicker: 更新颜色转换逻辑 (#4550) (6b6ec8c)
  • CommandPalette: 从标签中移除 rtl:space-x-reverse (#4576) (4682ded)
  • defineShortcuts: 允许额外按键与 shift 组合 (#4456) (772631c)
  • defineShortcuts: 始终将事件传递给快捷键处理程序 (#4516) (ef473c3)
  • FormField: 使用布尔值改进 error 类型 (a4d0ca7), 关闭#4496
  • FormField: 解决轻微的可访问性和渲染问题 (#4515) (c64c4cd)
  • InputMenu/SelectMenu: 在搜索中过滤 null 项目 (488707e)
  • InputMenu/SelectMenu: 在没有 valueKey 时改进显示值 (4d4234d), 关闭#4528
  • InputMenu/SelectMenu: 仅过滤非 null 字段 (c92f908), 关闭#4509
  • InputMenu: 挂载时重置搜索词 (cb160e6), 关闭#3993
  • module: 安装模块时合并用户的选项 (78f92a2)
  • NavigationMenu/Tabs: 在非 undefined 时显示徽章 (b22891a)
  • NavigationMenu/Tabs: 代理直通属性 (836f748)
  • RadioGroup: 为 normalizeItem 函数提高类型安全性 (#4535) (bb99345)
  • Table: 向页眉添加 scope 属性 (#4417) (347694b)
  • Table: 处理响应式列 (#4412) (4ce6540)
  • theme: 应用配置中的颜色自动补全 (752e2b6)
  • Toast: 仅在打开时显示进度 (1d052ec), 关闭#4464
  • Tooltip: 仅在有 textkbds 时显示分隔符 (#4570) (63476e5)
  • useLocale: 确保注入默认为 en (df1abf1), 关闭#4579
  • useLocale: 切换语言环境时防止水合错误 (15c7991)
  • useOverlay: 在将属性传递给 open 时不要使用 patch (#4497) (5ad7dab)
  • useOverlay: 通过合并现有和新的属性来改进属性处理 (#4478) (6519a74)
  • useOverlay: 支持从复杂的 emits 推断关闭参数 (#4414) (d7aefa5)
  • vue:@nuxt/ui 导入时处理覆盖 (57a5037)
  • vue: 存根 clearError (d8160ba)

👋 新贡献者

完整变更日志: https://github.com/nuxt/ui/compare/v3.2.0...v3.3.0

v3.2.0

✨ 亮点

🏷️ 新组件 InputTags

一个用于管理多个输入值的强大新组件,具有简洁的基于标签的界面 (#4261).

了解更多https://ui.nuxtjs.org.cn/components/input-tags

⏱️ 新组件 Timeline

引入 Timeline 组件,用于显示按时间顺序的序列和流程 (#4215).

了解更多https://ui.nuxtjs.org.cn/components/timeline

🚨 重大变更

  • useOverlay: 更正 unmount 函数的拼写 (#4051)

🚀 新功能

🐛 Bug 修复

  • Card/Drawer/Modal: 防止滚动条溢出 (#4368) (c3adc38)
  • components: 移除按钮上的默认 md 尺寸 (#4357) (be41aed)
  • defineShortcuts: 允许 meta_- 快捷键 (#4321) (4e7c1c9)
  • Form: 通过 transform 属性有条件地类型化表单数据 (#4188) (37abcc6)
  • Form: 公开响应式字段 (#4386) (1a8feb7)
  • InputMenu/SelectMenu: 动态 empty 尺寸 (ba3c6e8), 关闭#4377
  • Modal/Slideover: 不在 closeAutoFocus 时发出 close:prevent 事件 (150b334)
  • NavigationMenu: 在每一级都有嵌套的手风琴上下文 (#4363) (2fa8db6)
  • NavigationMenu:horizontal 方向设置内容 max-height (62bc7b2), 关闭#4208
  • Pagination: 匹配默认按钮 size (#4350) (4dd56c8)
  • Select/SelectMenu: 显示假值 (7df7ee3)
  • Select/SelectMenu: 防止多选时显示空字符串 (483e473)
  • SelectMenu: 动态输入尺寸 (b0364b9)
  • Table: 使用 tr 作为分隔符 (#4083) (edca3bc)
  • Toast: 在下一 tick 计算高度 (3bf5acb), 关闭#4265
  • Toaster: 堆叠 Toast 的更平滑可见性转换 (#4367) (abfd0ed)
  • useOverlay: 更正 unmount 函数的拼写 (#4051) (546df57)
  • useOverlay: 设置 defaultOpen 时将属性设置为原始属性 (#4308) (66355ba)
  • useOverlay: 未提供给 open 时使用原始属性 (#4269) (bf56e15)

🌐 本地化

👋 新贡献者

完整变更日志: https://github.com/nuxt/ui/compare/v3.1.3...v3.2.0

v3.1.3

🚨 重大变更

  • NavigationMenu: 回滚新的 collapsible 字段

之前的补丁中,我们在 items 中引入了一个新的 collapsible 字段,用于在 collapsed 状态下显示子项,并使父元素尊重其链接属性。然而,这感觉不对劲,所以我们移除了它,转而采用https://github.com/nuxt/ui/commit/1e2a10b4bdebaef12316ac60f98a956dad21c1ec, https://github.com/nuxt/ui/commit/9cf9f25f4424447691e03e9034155d1541badd43https://github.com/nuxt/ui/commit/f2682fd2ae8abb7807977727fc22ef34cb5752e5.

  1. 父项现在尊重其链接属性,点击尾部的图标箭头可以展开/折叠其子项。
  2. 您可以使用 type: 'trigger' 强制父项表现得像以前一样(没有链接属性)。
  3. 当处于 collapsed 状态时,您可以使用 popover / tooltip 属性或项目字段

🚀 新功能

  • Modal/Slideover: 添加 after:enter 事件 (#4187) (d9e9fea)
  • NavigationMenu: 添加 tooltippopover 属性 (f2682fd), 关闭#4186
  • NavigationMenu: 在项目中添加 trigger 类型 (9cf9f25)
  • NavigationMenu: 用 Accordion 代替 Collapsible 处理 vertical 方向 (1e2a10b), 关闭#4072 #3911
  • Popover: 添加 anchor 插槽 (#4119) (473513c)

🐛 Bug 修复

  • CheckboxGroup/RadioGroup: RTL 模式下的 table 变体边框 (#4192) (43d281f)
  • CommandPalette: 向视口添加 presentation 角色 (2ba94db)
  • ContextMenu/DropdownMenu: 将组包装在视口中 (dcf34a7), 关闭#3315
  • Drawer: 改进标题和描述的可访问性 (41087d4), 关闭#4199
  • icons: 更新 loading 图标 (#4163) (fe4e1f8)
  • Input/Textarea: 定义模型修饰符类型 (#4195) (3243fb8)
  • InputMenu/Select/SelectMenu: 显示滚动条的手动视口 (f95abf8), 关闭#4069
  • NavigationMenu: 禁用和活动状态下的错误悬停 (d0be599)
  • NavigationMenu: 仅在折叠时显示 tooltip (44f536f)
  • NavigationMenu: 回滚新的 collapsible 字段 (3c78e2f)
  • Textarea: 缺失导入 (#4207) (6aab62e)
  • theme:old-neutral 颜色定义为静态 (#4193) (dae9f0b)
  • Tooltip: 增加填充以保持一致性 (0634a75)

🌐 本地化

👋 新贡献者

完整变更日志: https://github.com/nuxt/ui/compare/v3.1.2...v3.1.3

v3.1.2

🚀 新功能

  • Badge: 添加 square 属性 (#4008) (894e8a6)
  • CheckboxGroup: 添加 table 变体 (#3997) (1b6ab27)
  • components: 在项目中添加 ui 字段 (#4060) (b9adc83)
  • InputNumber: 添加 increment-disabled / decrement-disabled 属性 (#4141) (c7fba2e)
  • NavigationMenu: 在项目中添加 collapsible 字段 (2be60cd), 关闭#3353 #3911
  • NavigationMenu: 处理项目中的 tooltip (46c2987), 关闭#4050
  • Slider: 处理拇指周围的 tooltip (d140acc), 关闭#1469
  • Toast: 添加 progress 属性以隐藏进度条 (#4125) (92632e9)

🐛 Bug 修复

  • Badge/Button: 正确处理标签中的零值 (#4108) (f244d15)
  • ButtonGroup: 在聚焦元素上添加 z-index (204953b)
  • Calendar: 使用 neutral 颜色时,今天日期的颜色错误 (7d51a9e), 关闭#4084 #3629
  • Checkbox/RadioGroup: 在没有 variant 的情况下渲染正确的元素 (f2fd778), 关闭#3998
  • CheckboxGroup: 相对 UCheckbox 导入 (7551a85), 关闭#4090
  • ColorPicker: 使拇指可触摸拖动 (#4101) (cc20a26)
  • components: class 应优先于 ui 属性 (e6e510b)
  • FormField: 使用后阻止表单字段注入 (#4150) (d79da9d)
  • FormField:errorhelp 插槽使用 div (459a041)
  • inertia: 链接始终渲染为锚标签 (#3989) (e81464a)
  • inertia: 使 useAppConfig 响应式 (12303a8)
  • Input/Textarea: 处理通用类型 (3c8d6cd), 关闭nuxt/ui-pro#887
  • InputNumber: 在按钮组内处理 (2e4c308), 关闭#4155
  • Link: 在 nuxt、vue 和 inertia 之间保持一致的行为 (#4134) (67da90a)
  • module: 使用默认权重配置 @nuxt/fonts (276268d)
  • NavigationMenu: 箭头位置冲突 (#4137) (0dc4678)
  • Select:value 字段中支持更多原始类型 (#4105) (09b4699)
  • Slider: 处理通用类型 (d7a4d02)
  • Stepper:titledescription 使用 div 标签 (a57844e), 关闭#4096
  • Tabs: 在没有父宽度的情况下防止触发器截断 (06e5689), 关闭#4056
  • Tabs: 使用 link 变体设置 focus:outline-none (999a0f8)
  • templates: 不要在主题文件中写入未使用的变体 (d3df3bb)
  • Toaster: 允许覆盖 base 插槽 (c63d2f3)
  • vue: 使 useAppConfig 响应式 (869c070), 关闭#3952

🌐 本地化

👋 新贡献者

完整变更日志: https://github.com/nuxt/ui/compare/v3.1.1...v3.1.2

v3.1.1

🚀 新功能

  • useOverlay: 添加 closeAll 方法 (#3984) (ac4c194)
  • useOverlay: 添加 isOpen 方法以检查覆盖层状态 (#4041) (a4f3f6d)

🐛 Bug 修复

  • Calendar: 向网格行添加 place-items-center (#4034) (8dfdd63)
  • defineShortcuts: 在非 macos 平台上带回 metactrl 的转换 (f3b8b17), 关闭#3869 #3318
  • module: 支持 nuxt-nightly (#3996) (bc0a296)
  • NavigationMenu: 从内容插槽中移除 sm:w-auto (aebf0b3), 关闭#3987
  • RadioGroup: 改进项目 value 字段类型 (#3995) (195773e)
  • templates: 在 dev 中把参数放回 watch 中 (#4033) (c5bdec0)
  • theme: 添加缺失的 border-bg / divide-bg 工具类 (82b5f32)
  • theme: 添加缺失的 ring-offset-* 工具类 (#3992) (e5df026)
  • theme: 定义命名 tailwindcss 颜色的默认色调 (8acf3c5), 关闭#3977
  • theme: 改进 ui 对象的应用配置类型 (591d59f), 关闭#3579
  • theme: 使用 @theme inline 正确引用 css 变量 (6131871), 关闭#4018
  • useOverlay: 改进类型和文档 (#4012) (39e29fc)

👋 新贡献者

完整变更日志: https://github.com/nuxt/ui/compare/v3.1.0...v3.1.1

v3.1.0

✨ 亮点

🎨 改进的工具类

我们增强了工具类系统,使其更直观、更易于使用。虽然 CSS 变量提供了灵活性,但编写像 text-(--ui-text-muted) 这样的类很繁琐。我们引入了三项重大改进

- <div class="text-(--ui-primary)">
+ <div class="text-primary">

- <div class="bg-(--ui-error)">
+ <div class="bg-error">
- <div class="text-(--ui-text-muted)">
+ <div class="text-muted">

- <div class="border-(--ui-border)">
+ <div class="border-default">

- <div class="bg-(--ui-bg-elevated)/50">
+ <div class="bg-elevated/50">
- <div class="rounded-(--ui-radius)">
+ <div class="rounded-sm">

- <div class="rounded-[calc(var(--ui-radius)*1.5)]">
+ <div class="rounded-md">

- <div class="rounded-[calc(var(--ui-radius)*2)]">
+ <div class="rounded-lg">

这些更改完全向后兼容——现有的基于 CSS 变量的类将继续工作,同时为新代码提供了一种更符合人体工程学的替代方案。

🧩 新组件和特性

<script setup lang="ts">
import type { CheckboxGroupItem, CheckboxGroupValue } from '@nuxt/ui'

const items = ref<CheckboxGroupItem[]>(['System', 'Light', 'Dark'])
const value = ref<CheckboxGroupValue[]>(['System'])
</script>

<template>
  <UCheckboxGroup v-model="value" :items="items" />
</template>
<script setup lang="ts">
import type { RadioGroupItem, RadioGroupValue } from '@nuxt/ui'

const items = ref<RadioGroupItem[]>(['System', 'Light', 'Dark'])
const value = ref<RadioGroupValue>('System')
</script>

<template>
  <URadioGroup v-model="value" variant="table" :items="items" />
</template>

🌉 Inertia.js 集成

Vue 版本现在包含对Inertia.js的内置支持。在 vite.config.ts 中使用 inertia: true 选项启用它

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import ui from '@nuxt/ui/vite'

export default defineConfig({
  plugins: [
    vue(),
    ui({
      inertia: true
    })
  ]
})

这会自动将所有组件中的 RouterLink 替换为 InertiaLink,从而与您的 Inertia.js 应用程序实现无缝集成https://ui.nuxtjs.org.cn/getting-started/installation/vue#inertia

⚡ 模块构建器更新

该模块已更新为使用nuxt/module-builder@1.0.0,带来了改进的构建性能和更好的 TypeScript 支持。

在此更改之后,我们重构了组件类型的处理方式,这带来了对 app.config.ts 更改的全面 HMR 支持,这在以前仅在重新加载页面时有效。

🚨 重大变更

  • OverlayProvider:.open() 返回一个覆盖层实例 (#3829) (f3098df)

此 PR 将 .open() 更改为返回一个带有 result promise 属性的覆盖层实例,而不是直接返回 promise,从而提供更大的灵活性

<script setup lang="ts>
const modal = useOverlay()

- const result = await modal.open({ count: count.value })
+ const instance = modal.open({ count: count.value })
+ const result = await instance.result
</script>

🚀 新功能

  • App: 添加全局 portal 属性 (#3688) (29fa462)
  • Carousel: 添加 select 事件 (#3678) (22edfd7)
  • CheckboxGroup: 新组件 (#3862) (9c3d53a)
  • components: 添加新的 content-topcontent-bottom 插槽 (#3886) (1a46394)
  • Form: 添加 attach 属性以选择退出嵌套表单附件 (#3939) (1a0d7a3)
  • Form: 导出加载状态 (#3861) (fdee252)
  • InputMenu/SelectMenu: 处理 resetSearchTermOnSelect (cea881a), 关闭#3782
  • InputNumber: 添加对 stepSnappingdisableWheelChange 属性的支持 (#3731) (f5e6284)
  • Modal/Popover/Slideover: 添加 close:prevent 事件 (#3958) (f486423)
  • module: 定义默认颜色色调 (#3916) (7ac7aa9)
  • module: 定义中性工具类 (#3629) (d49e0da)
  • module: 动态 rounded-* 工具类 (#3906) (f9737c8)
  • OverlayProvider:.open() 返回一个覆盖层实例 (#3829) (f3098df)
  • PinInput: 添加 autofocus / autofocus-delay 属性 (0456670), 关闭#3717
  • RadioGroup: 添加 cardtable 变体 (#3178) (4d138ad)
  • Select: 处理项目中的 onSelect 字段 (8640831)
  • Table: 有条件地将类应用于 trtd (#3866) (80dfa88)
  • Tabs: 添加 list-leadinglist-trailing 插槽 (#3837) (3447a06)
  • Textarea: 添加 autoresize-delay 属性 (06414d3), 关闭#3730
  • Textarea: 添加 icon, loading 等属性以匹配 Input (cb193f1)
  • Textarea: 添加带有 autoresize 属性的 resize-none 类 (ffafd81)
  • unplugin: 为 inertia 提供路由支持 (#3845) (d059efc)

🐛 Bug 修复

  • Accordion: 为标题标签使用 div 而不是 h3 (75e4792), 关闭#3963
  • Alert/Toast: 使用插槽时显示操作 (5086363), 关闭#3950
  • Carousel: 将箭头移至移动设备上的容器内 (d339dcb), 关闭#3813
  • CommandPalette: 与其他组件一致的对齐方式 (d25265c)
  • CommandPalette: 增加输入字体大小以避免缩放 (d227a10)
  • CommandPalette: 防止在禁用项目上出现悬停背景 (ba534f1)
  • components:@nuxt/module-builder 升级后重构类型 (#3855) (39c861a)
  • components: 在 popper 内容中尊重 transform-origin (#3919) (01d8dc7)
  • ContextMenu/DropdownMenu: 处理 RTL 模式 (#3744) (1ae5cc0)
  • ContextMenuContent/DropdownMenuContent: 移除不需要的 any (#3741) (97274f1)
  • Form: 输入和输出类型推断 (#3938) (f429498)
  • Form: 提交时失去焦点 (#3796) (8e78eb1)
  • InputMenu/SelectMenu: 正确调用 onSelect 事件 (#3735) (f25fed5)
  • InputMenu/SelectMenu: 防止选择 disabled 项目 (8435a0f), 关闭#3474
  • InputMenu/SelectMenu: 移除 valueKey 字符串情况 (9ca213b), 关闭#3949 #3331
  • InputMenu/SelectMenu: 支持任意 value (#3779) (52a97e2)
  • InputMenu: 在移除多个项目时发出 change (9d2fed1), 关闭#3756
  • Link: 代理 download 属性 (#3879) (47cdc2e)
  • NavigationMenu: 添加 sm:w-auto 内容插槽 (abe0859), 关闭#3788
  • Skeleton: 改进可访问性 (#3613) (3484832)
  • Stepper: iconcontent 插槽上的 ui 属性覆盖 (1d45980), 关闭#3785
  • Table: 改进 data 响应式 (#3967) (6e27304)
  • Table: 将页眉 colspan 传递给 th (#3926) (122e8ac)
  • Tree: 简化可重用模板类型 (#3836) (3deed4c)
  • types: 允许带破折号的颜色标识符 (#3896) (e5a1e26)
  • types:ui 属性中处理 ClassValue (eea1415), 关闭#3860
  • types: 改进动态插槽 (#3857) (8dd9d08)
  • usePortal: 调整门户目标解析逻辑 (#3954) (db11db6)
  • vite: vitest 跳过 nuxt 导入转换 (#3925) (c31bffa)

🌐 本地化

👋 新贡献者

完整变更日志: https://github.com/nuxt/ui/compare/v3.0.2...v3.1.0

v2.22.0

✨ 亮点

  • deps:@nuxt/module-builder 更新至 v1 (#3801)

该模块已更新为使用nuxt/module-builder@1.0.0!

🚨 重大变更

  • Form: 放弃对 zodvalibot 的明确支持 (#3618)

我们现在依赖于standard-schema来进行表单验证,支持 valibotzod。如果您在应用程序中使用它们,请确保升级到 valibot@1.0.0 / zod@3.24.0

🐛 Bug 修复

  • Link: 正确拾取所有 aria-*data-* 属性 (2bef1e2), 关闭#3007
  • Table: 复选框仍然发出 @select 事件 (#3269) (c0e14d0)
  • Table: 移除模板中的类型注释 (4e96dcc), 关闭#3146

完整变更日志: https://github.com/nuxt/ui/compare/v2.21.1...v2.22.0