Pro组件、模板与 AI 工具
HeroUI
27.7k

v3.2.7

React Aria 1.22.1、全新 Sheet 组件、Slider 步进指示点与刻度标签、渲染性能与无障碍改进、响应式 Storybook 示例,以及浮层与表单控件修复。

2026 年 10 月 28 日

React Aria 升级:HeroUI 将 react-aria-components 升级至 1.22.1(react-aria@3.53.1)。全新 Sheet 组件提供可滑动浮层,支持四种放置方向、吸附点、嵌套 Sheet、受控状态、限定在视口内的分离式布局,以及协调拖动、滚动与 handle 关闭。Slider 新增适用于水平、垂直、单值与范围控件的可组合步进指示点和刻度标签,同时降低组件渲染开销。无障碍改进新增装饰性 Separator 支持,在日期选择器浮层中保留对话框名称,移除无效的地标与分组属性,并改进 Storybook 示例语义。本版本还让重新打开的浮层保持可见,并修复 Slider RTL 填充、Switch 滑块抖动、Tabs 水合时的指示器偏移、取消的 Drawer 拖动、残留的 ScrollShadow 边缘阴影、窄屏菜单、自动填充字段与 Toast 布局。

安装

升级到最新版本:

npm i @heroui/styles@latest @heroui/react@latest

对等依赖。 本版本需要 react-aria-components@^1.22.1 与 react-aria@^3.53.1。升级时请与应用中已安装的版本对齐。

正在使用 AI 助手? 对它说「Hey Cursor,把 HeroUI 升级到最新版本」。它会自动对比版本并应用必要变更。了解更多请参阅 HeroUI MCP 服务器。

依赖

  • React Aria:升级至 React Aria 1.22.1 — react-aria-components@1.22.1、react-aria@3.53.1、react-stately@3.51.0、@react-types/shared@3.37.0 与 @internationalized/number@3.6.9 (#6939、#6949)。
  • Avatar 原语:将 @radix-ui/react-avatar 升级至 1.3.1 (#6979)。
  • 安全:修补传递依赖中的 Dependabot 告警 (#6938)。

新功能

  • Sheet:新增可滑动的 React Aria 浮层,支持 bottom、top、left 与 right 放置方向;像素、CSS 长度和百分比吸附点;连续吸附;多种 backdrop 样式;分离式与不可关闭模式;受控状态;嵌套 Sheet;以及协调面板拖动、内容滚动与 handle 关闭。分离式 Sheet 在所有放置方向下都会让各吸附点保持在视口范围内。复合 API 包含 trigger、backdrop、content、dialog、handle、header、body、footer 与 close 部件 (#6974、fba503c、#6979)。
  • Slider 步进与刻度:在 Slider.Track 内组合 Slider.Steps,即可为每个配置的步进显示装饰性圆点;在轨道后添加 Slider.Marks 与 Slider.Mark,即可在任意数值位置显示标签。步进与刻度支持小数值、垂直方向、RTL、禁用状态、单值与范围 Slider、本地化默认标签,以及 data-filled 样式钩子 (#6965)。

错误修复

  • CloseButton:不再在 React Aria Button 上硬编码 aria-label="Close"。显式传入的 aria-label 与 slot 上下文标签(Toast 的 close、SearchField 的 clear、Tag 的 remove)不再被覆盖 (#6946)。
  • Toast:在 iOS Safari 上收起底部区域锚点,使堆叠 Toast 与安全区域对齐 (#6936)。用 CSS Grid 布局替代 useMediaQuery 操作区定位 (#6932)。用 offsetHeight 代替 scrollHeight 测量堆叠高度,在已展开堆叠内动态新增 Toast 时指示器与标题保持对齐 (#6952)。
  • Dropdown:子菜单项起始内边距与菜单内边距刻度对齐 (#6941)。居中 with-sections 示例中的触发器图标 (#6944)。在窄屏上让菜单保持足以容纳选项与图标的宽度,同时不超过视口可用宽度 (#6957)。
  • ComboBox:将滚动保留在受输入框控制的列表框上,而不是外层浮层,使键盘导航与虚拟焦点能够显示所有选项 (#6959)。
  • Slider:水平填充区域从行内起始侧定位,使 RTL 语言环境中的填充轨道与 React Aria 的滑块位置一致 (#6964)。
  • Switch:通过不改变 flex 布局的位置动画消除切换时的滑块抖动,同时保留 RTL 对齐与自定义轨道宽度支持 (#6970)。
  • Tabs:在首个客户端帧之前禁用指示器过渡,避免水合期间的临时布局位置导致指示器偏离初始选中的 Tab,同时保留后续切换选中项时的正常动画 (#6988)。
  • Drawer:取消滑动后不再让面板停在偏移位置或卡在拖动状态。命中子元素触发的 lostpointercapture 会被忽略;当对话框自身失去捕获时面板会弹回;消费者传入的 style 会与 touch-action: none 合并,而不会把它覆盖掉。打开滑入动画改在 Drawer.Content 上运行,因为 React Aria 会在绘制前清除对话框上的 data-entering (#6968)。
  • ScrollShadow:当 isEnabled 变为 false 时清除自动可见性属性,避免边缘残留阴影 (#6964)。
  • Calendar:星期标题标签保持等宽列 (#6925)。
  • 浮层:在中端手机上加快打开与关闭。进入与退出动画仅使用 opacity 与 transform(不再使用 filter 关键帧);触控设备上带模糊的 Modal 与 Drawer 遮罩跳过 backdrop-filter;WebKit 在关闭动画真正运行前保持 Popover 挂载;粗指针设备在 Dropdown 定位完成后立即显示菜单,而不再等待键盘检测;滑走关闭的 Drawer 会清除内联 transition: none,使退出过渡正常播放 (#6934)。基于 Popover 的组件现在也会保留转发 ref 的清理函数,遵循本地与 slot 上下文中的 shouldSkipAnimation 偏好,并在选择性导入 CSS 时保留浮层动画样式 (6f0678c)。重新打开保留的 Modal 或 Popover 内容时,现在会恢复原有或新传入的 opacity,不再保持不可见 (1b64b24)。
  • 列表浮层:Select、Dropdown、Autocomplete 与 ComboBox 的外层圆角与选项内边距对齐 (#6916)。
  • 选择指示器:Select、ComboBox 与 Autocomplete 浮层中的勾选标记不再压住标签 (#6908)。
  • AvatarGroup:裁切重叠跟随头像圆角 (#6884)。
  • Checkbox:勾选 SVG 保持挂载,切换 Table 中不确定状态时绘制动画不再闪烁 (#6890)。
  • ScrollShadow:移除非整数设备像素比下的遮罩接缝 (#6914)。
  • Radio:为 Radio 现有的 data-* 状态规则补上 :focus-visible、:hover 与 :active (#6879)。
  • Toast 样式:为现有的 :focus-visible 与 :hover 规则补上对应的 data-* 属性 (#6879)。

样式

  • 字段自动填充:浏览器自动填充时,Input、TextArea、InputGroup、SearchField、NumberField 与 ComboBox 的 variant="secondary"(及其他变体)仍保留各自的底色。自动填充规则读取各变体的填充 token,并在 Chromium 中用内嵌 box-shadow 覆盖,而不再硬编码主色字段颜色 (#6943)。
  • Disclosure:从 disclosure.css 中移除误放的 .accordion__heading 规则 (#6904)。
  • Chip:清空 .chip--md — 它重复声明了基础 .chip 上已有的 text-xs (#6879)。

组件

  • Separator:新增 isDecorative,用于纯视觉分隔线。装饰性分隔线使用呈现性语义并对辅助技术隐藏,同时保留视觉样式与自定义渲染支持 (#6959)。
  • 渲染性能:静态类名不再经过 render prop 解析,并缓存变体输出与合并后的类名,同时将 children 直接传给 React Aria 原语。这在保留函数形式 className 与 children API 的同时,减少了按钮、表单、选择控件、浮层、日期与颜色输入、集合、导航和展示组件中的额外工作 (#6947)。
  • displayName:将组件各部分的 displayName 设为 HeroUI.Component.SubPart,并修正 7 个不一致的名称 (#6879)。
  • EmptyState:补上缺失的 "use client" 指令 (#6879)。

无障碍

  • 浮层与日期选择器:保留自定义渲染行为,同时移除通用浮层容器上失去关联的无障碍名称属性。DatePicker 与 DateRangePicker 现在会把对话框标签传给 React Aria 自动生成的对话框容器 (#6959)。
  • 日历与分组:Calendar 与 RangeCalendar 的标题区域改用中性容器,避免创建嵌套的 banner 地标。嵌套的 ToggleButtonGroup 不再为 group role 暴露不支持的 aria-orientation (#6959)。
  • 示例:改进 Storybook stories 中的无障碍名称与语义,将纯视觉分隔线标记为装饰性,并把标签页与其内容面板关联起来 (#6959)。

Storybook

  • 响应式示例:通过响应式尺寸、间距、换行与布局行为,让组件和颜色示例适配更小的视口 (#6958)。

链接

贡献者

感谢所有为本次发布做出贡献的人!

本页目录