Changelog
所有显著变更记录于此。
2.6.1 - 2026-10-13
破坏性变更(迁移)
- 内置图标集改为 opt-in(按需引入需显式注册):内置图标全量集从组件链解耦,按需引入单组件链不再自动携带整套图标(体积收益:button 链 34.1→25.0、table 101.6→93.2 KB gzip)。
- 不受影响:全量引入
import '@oas-ui/ui'(含 CDN)——已自动注册内置集,行为不变。 - 需迁移:按需引入单个组件(如
@oas-ui/ui/basic/button)且使用内置图名(<oas-button icon="check">、<oas-icon name="close">、table/menu 等的 itemicon)时,追加一次import '@oas-ui/icons/register'(应用入口一次即可);否则该图名不渲染(静默空态)。 - 无需引入:仅用
registerIcon()/registerIconLibrary()(远程 / sprite)/ iconfont / slot 提供图标时。 - 另:
@oas-ui/icons主入口不再导出iconRegistry/iconNames(内部数据,改从@oas-ui/icons/registry引入);IconName类型与注册/查询 API(registerIcon/registerIconAlias/registerIconLibrary/lookupIcon)仍从@oas-ui/icons导出。
- 不受影响:全量引入
特性
新增组件
oas-collapsible(data 族,紧跟 collapse 的data/collapsible/) —— 无容器、自管理的单面板展开收起原语,面向文件树节点、折叠表单分区与侧栏分组;视觉与oas-collapse项一致(触发行 + grid 0fr→1fr 展开动画 + 内置 chevron)。双模式open契约:属性缺失 = 非受控(由default-open播种一次);属性存在 = 受控且带值语义(除"false"外的任何值即展开,"false"即收起)——点击翻转、把属性写回并派发oas-toggle { open }(乐观更新);移除open回到非受控,内部状态以最后一次显示值为种(无跳变)。header属性 +slot="header"富触发内容 +template[slot="toggle"]自定义图标;disabled(config-provider 全局注入生效)。A11y:触发按钮原生焦点 + Enter/Space,aria-expanded/aria-controls/aria-disabled同步。无 JS 兜底:未升级时 light DOM 内容保持可见。SSRtemplate()/hydrate()双路径(DSD 白名单后续批次);无内置文案,无需 i18n。oas-list-item前置媒体 + 整行链接:新增slot="icon"(通用前置图标,尺寸随内容)与slot="image"(方形缩略图槽,尺寸与头像档位一致 sm 24 / md 32 / lg 40,圆角裁切填充);icon/image/avatar 各自独立切换、可自由组合。新增href/target/rel渲染撑满整行的<a>覆盖层(inset 0,可访问名称取自行标题)——点击行内任意处原生跳转,Tab 聚焦、Enter 激活;target自动补rel="noopener noreferrer"(显式rel永不被覆盖)。链接行不再派发oas-click(跳转与clickable语义保持分离,避免双重触发);slot="extra"区域位于覆盖层之上(z-index 2),行内控件保持可交互。菜单族前置媒体槽(
slot="leading"):oas-menu-item/oas-dropdown-item/oas-context-menu-item接受template[slot="leading"](或带slot="leading"的直接子节点),渲染在标签之前,优先于icon属性;loading转圈替换它;收起模式下与图标合流(保持可见且间距归零,侧栏保留视觉锚点而非空白可悬停行)。提取辅助方法位于数据载体类(OASMenuItem.extractLeadingFrom/isLeadingNode),使槽标记被 api:scan 归属到载体。oas-menu新增itemsproperty 通道(MenuItem[] | null,对象数组直接赋值),供宿主交接携带前置节点的已解析 items(JSON 无法序列化它们);property 按末次写入生效,属性被重新解析时让位。仅声明式子节点——itemsJSON 通道不支持 leading。排版内容块(不单独设 prose 容器;把既有
tag体系扩展至oas-text/oas-title/oas-paragraph):tag="blockquote"(引用块,inline-start 侧 token 边框 + 逻辑缩进,RTL 安全)、tag="ul"/"ol"/"li"/"dl"/"dt"/"dd"(列表块,缩进归一 + 内置 li 间距)以及tag="table"加表格分部件(caption/thead/tbody/tfoot/tr/th/td)(全宽内容表格,边框合并)。ul/ol/dl/table/caption/tr/thead/tbody/tfoot走无包裹投影(它们的内容模型不允许 span 包裹——默认槽直接挂到根;切回行内 tag 时重建包裹)。块形态下跳过省略号/line-clamp(其 display/white-space 规则会破坏块布局);th/td 单元格细节记为宿主级样式(shadow 样式无法深入插槽子树——功能表格请用oas-table)。液态玻璃「动态流动感」v1(承接玻璃批:静态近似 v2.5.9 + 边缘折射 v2.6.0 之后补「随交互变形」第一层,范围纪律=Apple 定义域):① 指针镜面高光——新增主题运行时
@oas-ui/theme/glass-fluid.js(单文档pointermove监听 +composedPath命中注册表 surface → rAF 合批写元素本地归一坐标--oas-glass-px/--oas-glass-py;高光样式表由运行时按注册表经adoptedStyleSheets注入对应 shadow 根——组件源码零玻璃规则体、零标记属性,只保留--oas-glass-*变量消费;指针离开/停用即清理,SPA 泄漏防护);② 按压收紧——命中标记 :active把高光色换成更强档(真增强,非压暗;slider 把手另有按压外扩环),纯 CSS 不动 transform(避开 wave/拖拽的既有 transform 语义)。9 控件域组件消费:oas-button / oas-switch / oas-slider(经把手伪元素继承变量)/ oas-app-bar(:host::after)/ oas-bottom-navigation / oas-message / oas-toast / oas-snackbar / oas-notification。守卫:无data-glass零监听、prefers-reduced-motion不启用、粗指针不接、high-contrast不启用;glass.css新增--oas-glass-sheen/-size/-press三变量(明暗双档,alpha 压低防拉低文字对比度);高光层给 surfaceisolation: isolate+ 基态::after { z-index:-1 },落在「背景之上、文字之下」不冲淡标签;实心语义色/自定义色按钮(primary/success/warning/danger/has-color)hover 保留镜面高光、按压改用边缘内描边(box-shadow inset,不提亮铺底)——白高光铺底会把白字对比度压到门限下,边缘描边不冲淡文字(与 Apple 镜面描边 / Fluent 内凹按压常态一致);对比度门禁:玻璃面 hover ≥60(按主题页面底合成)/ 按压 ≥45,实心按钮 hover ≥45(瞬态大字档)/ 静止·按压基线 ≥60。内容面板与随环境内容变化的实时高光不进本批。oas-questionnaire 多步骤问卷(新增,form 族):步骤驱动的表单流程编排器——每个步骤面板一个
<oas-form>,零侵入复用校验内核。逐步门槛(next()先校验当前步,失败即拦截并派发oas-step-validate;prev()永不校验)、可选步跳过(绕过校验,派发oas-skip;被跳过步在再次访问前离开参与集)、每次跳转均可经oas-before-change取消拦截(宿主自定义分支跳转)、自渲染进度("Step n / m" 文案 +role="progressbar",不复用 oas-progress)、面板常驻挂载(返回时保留值)、最终提交重新校验每个参与步并派发oas-submit,值跨参与步合并(值与校验同一作用域:非隐藏、非跳过——需要全量数据的宿主可读内部oas-form)。方法:next()/prev()/goto()/validate()/submit()/getValues()/reset()。属性:steps(JSON + property 双通道)、受控current、linear、validation、progress/progress-variant(both/text/bar)、prev-text/next-text/finish-text/skip-text、hide-header/hide-nav、五档size。隐藏步完全离开流程(表头、进度、导航、值与校验作用域)。键盘/ARIA:表头项可点击且支持 Enter/Space,aria-current="step"、aria-live播报、原生导航按钮;RTL 走逻辑属性。i18n ×10。v1 边界:无条件分支(用oas-before-change),无起始/完成页,草稿持久化由宿主负责。oas-form 公开
validate():校验全部字段并同步错误态(aria-invalid+ 错误文案),返回Promise<boolean>。纯校验——不派发oas-submit/oas-validate-fail,也不滚动到首个错误;让外部把关者(questionnaire 等)复用校验内核而不带提交副作用。异步校验器会被 await,禁用字段跳过,进入时使在途的字段级异步校验失效;submit()契约不变。oas-form 公开
getValues():全部当前字段值的快照(嵌套结构),形状与submit()派发的detail.values一致——不校验,禁用字段不过滤,经value属性预填的零交互字段也会包含。oas-questionnaire.getValues()现通过它实时读取各步的表单(未升级表单回退到initial-values基线 + 跟踪快照),因此value属性预填无需任何交互即进入跨步汇总。新增组件
oas-knob(form 族) —— 旋钮输入,把值编码为绕圆的角度,为参数密集面板(音频/DAW、工业 HMI、3D)而设。经interaction提供三种手势模型:cursor(指针方位角增量驱动值)、axis(线性拖拽,默认纵向,满量程 150px)与auto(默认——在前几像素内判定,沿首选轴的主方向走线性、垂直方向走圆周,判定一次并锁定整个手势)。所有手势均为相对:按下不写值,无位移的点按为空操作,主指针独占,Shift 拖拽 0.2× 精调。值弧(include-arc)带双极零点(start-point居中 = pan/gain 惯例)、indicator线/点、自定义扫掠(start-angle/end-angle,默认 225→495 = 270° 带底部缺口,end-angle可超 360)。双击 / Ctrl+点击 /reset()复位到default-value(回退到min),派发oas-reset。值显示经show-value+unit后缀 +format模板 +formatValue函数 property,全部喂给aria-valuetext(屏幕阅读器播报所可见内容)。可选滚轮调节(wheel,默认关闭,Shift+滚轮精调)。宿主完整键盘支持(role="slider"+ tabindex):方向键按step步进(上/下保持值语义,左/右随镜像),Shift+方向键与 PageUp/PageDown 按large-step步进,Home/End 跳到两端,Esc 取消拖拽并回滚。reverse镜像扫掠与手势;RTL 书写方向自动镜像(异或)。sizesm/md/lg 与库档位对齐,另加--oas-knob-size自定义直径(触屏把 sm 提升至 44px 目标下限)。取消路径:Esc/pointercancel 回滚且零提交(oas-drag-endcancelled: true);拖拽中外部写value保持拖拽显示,释放时已提交的拖拽胜出,零变化的释放保留外部值。事件:oas-input/oas-change/oas-drag-start/oas-drag-end/oas-reset。所有颜色经--oas-knob-*token(暗色变体随主题),SSRtemplate()/hydrate()双路径,i18n ×10。会话组件族首批五个(新族目录
conversation/;与 oas-comment 并存、不合并):oas-bubble(start/end 对齐,逻辑属性 RTL 镜像,经主题感知 color-mix 的六种语义变体,布尔loading输入中指示带 aria-busy);oas-attachment(idle/uploading/processing/error/done 状态机,与 oas-upload 用词一致,带钳制的进度条 role=progressbar,媒体图标/缩略图槽,内置下载/移除按钮带具名可访问标签,整卡 href 触发带可取消 oas-open);oas-message-scroller(滚动意图模型、不持有消息:AI 式auto-scroll底部跟随带近底检测,IM 式pin-to-bottom,内置跳转按钮可自定义slot="button",scrollToEnd()/scrollToStart()方法,oas-scroll-state事件,data-scrollable反射,前置插入位置保持,region/log ARIA 带可键盘滚动的视口);oas-marker(default/border/separator 变体,装饰性图标槽,文本分隔符 role 纪律);oas-message-row(avatar/header/footer 槽带底对齐头像,方向经逻辑属性,五态送达状态带可见文案,grouped聚类)。i18n ×10 语言,暗色主题 token,支持 reduced-motion,DSD 可水合。批次 B(轮次锚定、last-anchor 打开位置、可见性追踪、首帧防跳)随后。会话族批次 B:滚动精度(扩展
oas-message-scroller):异步资源位置保持 —— 前置补偿现按插入前首节点的内容坐标位移结算(同帧 append+prepend 混用只结算顶部插入,底部追加永不过补),随后锁定一个保持锚点:之后撑大上方历史的图片等(ResizeObserver 通道,无 slotchange 信号)持续按锚点的视口漂移补偿;锚点先按稳定的message-id重新查询(宿主侧重建行可解析)并在读者真实滚动时释放;程序化滚动写入登记一个预期 scrollTop,使异步滚动回声绝不被误当作读者意图。首帧防跳 —— 对end/last-anchor打开位置在连接时反射data-pending-scroll,此时视口为visibility: hidden(保留布局以定位);定位与移除在一帧内完成,未定位帧绝不闪出顶部。last-anchor打开位置 ——default-position="last-anchor"落在最后一条anchor标记消息行的顶部(AI「回到最后问题」;无锚点时回退end)。scrollToMessage(id, opts?)按message-id精确滚动到某消息行(命中返回true,未知 id 不滚动返回false——无重试循环)。轮次锚定(turn-anchor,可选;prev-peekpx 默认 64)—— 一次问答往来为一个锚定单元:锚点在视口顶部时,最后一条anchor标记行从顶部保持钉在prev-peek处,而答案在下方流入;在底部时底部跟随继续(新轮次从下方进入);两者都不在时,读者已接管,一切不动。跟随模式每次跟随周期只解析一次,故底部跟随时越过顶部窗口的锚点绝不会被拽到顶部。可见性追踪(视口内消息列表)推迟到 v2(自带大纲/已读标记语义)。工作台组件族(新族,4 个组件 + 8 个子组件):oas-titlebar(窗口外框——
drag契约写入-webkit-app-region+data-tauri-drag-region,交互子元素经 no-drag 自动退出拖拽,window-actions内置按钮派发oas-window-action,editable文档区带 Enter/blur 提交 + Esc 回滚,compact/large 档,安全区内边距变量) + oas-statusbar/-item(底部静默状态条——左/右分段,单元格可点击且派发oas-item-click,语义色档,后台活动转圈,role="status") + oas-inspector/-tabs/-section/-row(属性检查器——pill 标签条带漫游键盘,专用可折叠分区(aria-expanded),键值/控件行,混合值,行级复位,role="complementary",密度档) + oas-action-bar/-button/-well + statistic-well + task-progress-well(底部命令条——theme表面由新常墨 token--oas-color-ink/--oas-color-ink-deep/--oas-color-on-ink支撑、不随宿主主题翻转,active/active-tint/plain按钮派发oas-action,统计与任务进度读数井派发oas-cancel;媒体传输/音乐井现由oas-transport-well/oas-music-well提供)。i18n ×10,docs zh/en ×4 页,qa-regression 套件(titlebar 拖拽契约 / inspector 折叠 / statusbar 项点击 / action-bar 事件 + console 干净 + 暗色冒烟)。偏差守卫:非法size/theme/density/side回退并一次性 dev 警告;进度井为受控展示(宿主驱动),完成态保持 100%。全部 12 个类经@oas-ui/ui/ssrSSR 安全;titlebarsubtitle在editable模式下保持可见(文档区状态行);action-barend槽在无中央井时推到最边缘;空的oas-statusbar-item与oas-statistic-well不渲染任何内容(宿主级data-empty反射——无空白格、无固定高度胶囊、无残留 flex 间隙);titlebar 与 action-bar 容器带role="group"+ aria-label(裸 div 上的 aria-label 会被辅助技术忽略;action-bar 不声明toolbar,因为其中央槽惯常承载读数井、而井并非命令控件);oas-task-progress-well完全为空(无label/detail且未设progress)时折叠——无空转胶囊,与统计井一致)。专业密度批次 A(数值密集输入,四项):像素锚定数值拖拽经共享纯函数内核(
shared/scrub.ts—— 按下记录锚点像素 + 基准值,水平每移动 4px 为一档step;Shift = 精调 ×0.2,Alt = 超精调 ×0.04,与旋钮惯例对齐——无加速度档;拖回锚点精确还原基准值;不足一档的移动计为普通点击,保留焦点/输入)。接入 oas-slider(每个show-input读数独立拖拽,含多滑块;拖拽中oas-input,释放时仅当值变化才oas-change)与 oas-input-number(基于提交:拖拽用oas-input更新显示文本,释放时归一化并提交;空值从 min/0 起;步进器/滚轮/键盘路径不变)。两者在粗指针上均不启用拖拽(点按输入优先),且均设touch-action: pan-y,纵向触摸滚动仍可用。oas-sliderreset-value+ 双击轨道复位(回退到min;step="mark"下钳制并对齐最近刻度;仅单值模式)。oas-collapse-itemsummary:收起态读数显示在表头尾部(不展开即可报告内部值),展开时隐藏,单行省略号截断,位于表头按钮内以便屏幕阅读器在收起时读到。oas-dropdown / oas-selectreserve-width(opt-in):测量最宽选项标签(select 还含占位符)并锁定触发器最小宽度,切换值不再抖动;文本测量三级降级(canvas measureText → 离屏 span → 逐码点估算,无需布局即可测试);内容变化时重测;dropdown 移除时还原触发器此前的内联 min-width,select 经--oas-select-reserve变量锁定(默认 0px,无宿主足迹)。oas-slider 专业属性:precision(对拖拽档位与气泡/aria-valuetext取整,折叠 0.30000000000000004 → 0.3 这类浮点尾;优先级低于 format/formatTooltip)、value-width(读数宽度,数字带 px)、accent-color(拖拽强调色,预设语义名映射到暗色主题感知 token)、show-track(隐藏轨道条与填充、保留滑块)。docs zh/en ×5 页 + api-descriptions + 跨五个 spec 的 qa-regression 真实交互回归。oas-combobox
multiple多选:可搜索多选闭环,镜像 oas-select 多选契约——value变为 JSON 数组字符串;选中项渲染为可移除标签(逐标签×移除;readonly 去除按钮);每次选择后面板保持打开且过滤清空以便连续选择;输入仅做过滤(多选模式下关闭自由文本/datalist 语义——失焦丢弃过滤且绝不触碰选择集)。max-count限制选择数(未选项置灰带aria-disabled,选择被拦截并派发oas-exceed-limit{ value, max };已选项仍可移除);max-tag-count显式设定时把标签折成单行+N(title 列出折叠标签),否则标签换行。多选模式下oas-changedetail 为{ value: string[], options: Array<Option|null> };oas-clear携带清空前的数组;clearable清全部。原生表单集成:name下同名多值 FormData 条目,required校验「至少选中一个」,表单 reset 还原初始基线;el.value读写数组(受控,不派发事件)。多选控件把边框/焦点环移到包裹的.control盒(内含 chips + 无边框弹性过滤输入);单选 DOM/CSS 行为不变(display: contents包裹,零足迹)。虚拟滚动、分组与移动底部弹层在多选模式均可用;下拉定位锚定该控件盒。oas-switch
description+variant="card":description 在标签下渲染一行柔和次级文案(slot[name=description] 富内容优先于属性文本;与 oas-checkbox/oas-radio 同一契约),补齐三方表单控件一致性缺口。variant="card"把开关升级为选择卡:带边框卡片包裹滑块 + 标签 + 描述,整卡可点击(宿主点击委托;disabled/loading/before-change 均拦截),选中态以主色描边叠在浅淡color-mix背景之上,禁用/状态色沿用 checkbox/radio 选择卡语言;非法 variant 值静默回退默认。默认形态不变。oas-toggle-button / oas-toggle-group
variant(组的组级透传):与 oas-button variant 体系对齐,限定于对切换有意义的子集——solid(默认,带边框盒,按下 = 实心强调填充)/outlined(透明背景带边框;按下 = 强调边框 + 浅淡着色 + 强调文字)/filled(柔和着色背景、无边框;按下 = 实心填充)/text(无边框无背景;按下 = 浅淡着色 + 强调文字)。非法值静默回退 solid;与size/color/status(状态色按源顺序胜出)及attached/vertical正交;感知 variant 的禁用回退保持统一禁用视觉。反射为data-variant供:host()CSS 消费。新增组件:
oas-scope-bar(过滤 pill 行——单选/多选、漫游键盘、RTL;与oas-toolbar搭配)、oas-transport-well(媒体传输井——HH:MM:SS:FF时间码带键盘寻址派发oas-seek,空态零足迹)、oas-music-well(小节/拍/速度/拍号读数)、oas-attachment-group(横向吸附滚动条带边缘渐隐,data-scrollable反射)。另有oas-traffic-lights(macOS 红绿灯窗口控件——关闭/最小化/最大化圆点带悬停符号并派发oas-window-action;置于oas-titlebarslot="leading"得到 macOS 布局;自声明 no-drag,故在可拖拽 titlebar 内仍可点击)。oas-button
active/active-tint:受控选中态(宿主持有aria-pressed,不自动切换——宿主经oas-click写回;切换语义仍归 oas-toggle-button);active-tint接受预设名或字面颜色,经 token 驱动填充/文字。oas-slider 专业密度:
track色轨(hue/saturation/luminance/gradient,感知方向与 RTL)、圆形推子下的levels立体声电平表、thumb="pointer|round",以及统一速度修饰键(Shift = 精调,Alt = 最精,与 oas-knob 对齐;无 ×5)。oas-questionnaire:经宿主组合通道的条件分支(
current落在宿主切换的hidden步上时自动对齐并派发oas-change)、animated步骤过渡(仅 transform/opacity,感知prefers-reduced-motion),以及shortcuts键盘步骤导航(任意处 Alt+←/→,焦点不在输入/吞键控件时裸 ←/→)。oas-input 块级附加内容:
slot="block-start"/slot="block-end"把附加内容渲染为字段上方/下方的完整块(外部字数统计在有块时折入块行)。oas-date-picker
caption-layout="dropdown":月/年<select>标题,便于快速跳转遥远年份(如出生日期);仅导航,绝不改变值。oas-card
density="compact":更紧凑的内边距/间距密度,与size正交。oas-scroll-area
type枚举(auto/always/scroll/hover):取代布尔auto-hide,后者作为type="auto"的向后兼容别名保留;默认不变。oas-modal
slot="media"+sticky-footer:媒体槽(仅有内容时显示)与可选的钉住页脚搭配可滚动主体。oas-table
total:外部/服务端分页——data视为当前页切片,total 喂给分页器,越界的current被钳制。oas-toggle-button
icon-toggled:按下时显示的备用图标(回退icon)。oas-inspector-row
align-top/striped:高控件用顶对齐标签,以及可选的斑马纹背景。oas-marker
status(info/success/warning/danger) +shimmer;oas-bubblereactions(emoji + 计数,真实按钮上派发oas-reaction);oas-message-scrollertrack-visible(pay-for-use;oas-visible-change+visibleMessageIds/currentAnchorId)。oas-swipe-cell双向滑动:slot="actions-start"(inline-start 侧,LTR 下右滑露出)现可与slot="actions"(inline-end,左滑)在同一项上共存。打开态从布尔升级为某侧('start' | 'end' | null):新增open-side属性(及openSideproperty)选择/反射该侧,open布尔保留(任一侧打开即为 true),oas-open事件detail增加{ side }。单次手势可双向拖拽,可越过零点端到端切换侧,且每项仅一侧打开;side仍是单组旧开关(actions-start存在时忽略);RTL 经逻辑属性镜像。每侧可访问性不变(各分组是独立的role="group",共享同一 i18n 标签);焦点进入某侧 actions 即打开该侧。oas-float-button group 模式自渲染子钮(
actions通道,根治宿主页 CSS 覆盖):mode="group"现复用 menu 的actionsJSON([{ label, icon?, href?, target?, badge? }])由组件在 shadow 内自渲染圆形子钮——宿主页全局样式(如文档站 reset 的button { background: transparent })无法再穿透覆盖子钮形态。带href渲染为链接子钮(target透传 + 自动补rel="noopener noreferrer");label兼作无障碍名称与 hover/键盘聚焦气泡(纯 CSS 显隐);badgedot/数字 99+ 封顶同既有规则。点击复用selectItem:派发oas-select、组收起、非链接项回焦主钮;键盘方向键导航经.actions容器委托(展开自动聚焦首项、循环 + Home/End)、actions 更新重建带焦点保持。两通道并列:actions为数据通道(组件自渲染,免疫宿主页 CSS);既有slot="action"保留为自定义通道(非废弃)——宿主自填元素/组件(oas-button/自定义元素/框架响应式内容)用于数据通道无法表达的场景,默认形态经::slotted承载(best-effort,可被宿主页 CSS 覆盖)。两通道二选一,同时提供以 actions 为准(宿主反射data-action-rendered,CSS 隐藏 slot 投影并 dev 告警一次),既有 slot 路径行为不变。子钮阴影档--oas-shadow-sm→--oas-shadow-md(slot 版与 actions 版同步,对齐主钮海拔)。
修复
oas-bubble
align纳入观察属性:动态setAttribute("align", …)即时切换对齐(此前仅声明式/首渲染路径生效);显式align属性始终优先于容器text-align继承反射oas-badge rolled+side 误隐藏挂点折叠角:
rolled对ribbon-form="side"本为整体静默忽略,但 corner 隐藏规则漏排 side——已补排,rolled+side不再误丢挂点折叠角max-tag-count 数值口径五方归一:select / cascader / combobox / tree-select / dynamic-tags 全部改走
intAttr读取器并加>= 0钳制——负值/非法值统一视为未设置(不折叠;此前 tree-select/dynamic-tags 会把全部标签折叠为 +N,cascader 负值会出现离群切片丢尾格);manifest 类型统一为numberoas-toast 离场时长 CSS 单位解析:
--oas-toast-leave-duration的秒值(如0.2s)此前被parseFloat误当毫秒(0.2ms),离场动画被即刻截断;现按 CSS 时间单位正确换算(s/ms,非法值回落默认 200ms)oas-combobox 虚拟滚动视口 tabindex:改走
viewportFocusable属性通道(与 cascader 同款先例)——此前removeAttribute会被 virtual-list 下次 update 重新加回,视口多一个 Tab 停靠点oas-bubble
reactions-side/reactions-align生效:宿主改 flex 列容器(原块布局下order/align-self无效);message-row 的text-align对齐继承经data-inherit-end反射保留(align="end"行气气泡仍右对齐),显式align属性优先于继承反射oas-float-button
trigger="hover"触屏回落 click:粗指针(coarse pointer)下自动按 click 触发(此前触屏 tap 完全不展开,与文档承诺的「触屏回落 click」一致)oas-popover 移除死属性
arrow-point-at-center:popover 箭头默认即跟随锚点(单测 + e2e 佐证),该属性登记在 observedAttributes 却从未被消费;已从属性清单 / manifest / 文档同步移除(tooltip / dropdown / hover-card / tour 的同名属性不受影响)oas-grid 折叠尾格陈旧闩:
collapseEverExpanded先复位再算尾格显隐——展开后内容缩减到不超限的同一帧尾格收起入口即消失(此前滞留一轮重算)dev 告警统一通道
shared/dev-warn:全库 101 处console.warn迁移到统一 dev 告警通道(下游打包器静态替换NODE_ENV=production后静默、判定失败时放行),开发期告警行为不变oas-tour
finish-button-props现已生效:最后一步的完成按钮即next按钮;finish-button-props(全局属性 + 步骤级finishButtonProps)现叠加在该步的next-button-props之上(步骤级胜出),宿主可据此为完成态设样式。此前该 property 在类型/API 中声明却从未应用。工作台外框修复:
oas-inspector的空态不可见——空块原本位于设empty时会被隐藏的.body内(已移出 + flex 撑满);oas-inspector-row行分隔线现默认为 border token(原为transparent,故键值行无发丝线),绘制为上边框以免末行与分区分割线叠压;oas-titlebar/oas-inspector表面现默认为细微的主题感知color-mix(明暗对称,原浅色下取页面色);oas-traffic-lights悬停符号为固定深色调(原暗色下近白、不可读),且控件自声明-webkit-app-region: no-drag。对比度(axe 比率)修复:oas-button
text变体的active文字现回退到主色文字安全档(原为主色叠主色浅底,不可读);oas-inspector-row 的striped标签用强次级色调以在斑马背景上保持 AA;浅色--oas-color-info-texttoken 加深(原在白底上低于 AA)——感知(<60)门禁不受影响。数值拖拽值通道正确性(共享拖拽内核,影响 oas-slider 读数与 oas-input-number):未显式设
precision时,档位组合可能把二进制浮点尾当作提交值(如0.1 × 3档 →0.30000000000000004,Shift 精调档10 + 23 × 0.2→14.600000000000001)写入value属性、oas-changedetail、读数、气泡与aria-valuenow。拖拽值现按生效 step 与基准值的有效小数位自动收敛到数学预期(无语义变化——仅移除实现误差);显式precision在其上作为更严格的值约束(如precision="0"把修饰键精调档钳回整数)。另:step="mark"下滑块拖拽现先对齐最近刻度再写入,使滑块、value属性与读数一致停留在刻度集上(此前属性可能短暂携带如42的离刻度值,而仅滑块显示已对齐——宿主属性读取/序列化与el.value漂移)。docs zh/en 已更新;新增单测 + qa-regression 真实交互回归(刻度对齐 + 分数档洁净)。会话族后续修复:oas-message-scroller 的 ResizeObserver 现同时观察内容与视口——视口尺寸变化(窗口或容器)会刷新边缘状态、跳转按钮与
oas-scroll-state(此前为盲点),断连时清理观察者、重连时重新观察;初始oas-scroll-state改为首帧(完成初始定位后)广播一次,而非升级过程中同步派发,故在元素升级后才挂监听的宿主仍能收到;oas-message-row 的sending状态图标重新转圈(spin图标类此前无匹配的 scoped 动画规则);oas-marker 的空态折叠改用data-empty反射 + scoped CSS,不再清除宿主显式的hidden;oas-attachment 去掉无用的media属性(媒体形态由slot="media"是否有内容决定);全部 10 个 locale 移除四个未用的 i18n key(attachment.open/uploading/processing/done)。oas-questionnaire 陈旧导航竞态:异步校验器在途时,
prev()/goto()不被拦截(设计如此——返回绝不能被困住);校验器解析后,在途的next()仍把current推进到陈旧目标,在用户已离开起始步后将其拽向前方。现当current不再指向起始步时放弃在途导航(已加单测回归)。oas-combobox
multiple加固:运行时name变化现会重新同步同名 FormData 条目键(name加入observedAttributes,与 oas-select 一致);readonly隐藏清除按钮并拦截clearValue,disabled去除每个 chip 的移除按钮,不留无作用的可见可供性;被max-count拦截的选择不再清空内部过滤查询(valueDirty/query仅在通过上限检查后才改动),使高亮行保持在过滤集内;无name时getFormValue()返回null(自建 FormData 绕过了浏览器「无 name → 不提交」兜底,此前空键条目会泄漏进表单),required多选校验现直接检测选择集,无 name 的选择不再被误标valueMissing。新增单测 + 真实浏览器 qa-regression。@oas-ui/ui主入口导出补全:顶层入口现也重新导出OASBottomSheet、OASMenuItem/OASMenuGroup/OASMenuDivider与OASMenubarItem/OASMenubarGroup/OASMenubarDivider(此前仅能经子路径导入与@oas-ui/ui/ssr入口取得),主入口与 SSR 入口的类超集对齐。oas-float-button 拖拽 / 磁吸坐标系自适应:
absolute宿主(如卡片内容器)下,拖拽与磁吸原按视口坐标写入、被包含块错位解释,按钮随容器页面偏移量「飘很远」(用户实报);现按定位上下文(offsetParent包含块 / 固定语义沿用视口)取坐标系,且拖拽后显式right/bottom: auto,防止回落到:host的固定偏移而把按钮宽度由 shrink-to-fit 拉宽、磁吸目标错乱。内置图标
star-filled改为实心星形:原内容误为心形且未填充(渲染产物可见修复)。SSR 白名单补齐
scheduler/gantt/barcode(v2.6.0 遗漏登记)+oas-barcode补hydrate()覆写——此前 DSD 快照在浏览器 upgrade 时被render()全量重建(DOM 引用丢失);现跳过重建、保留引用,白名单全量对账一致。对比度修复(补充):
oas-toggle-button/oas-toggle-group的outlined/text变体选中态文字改用主色文字安全档--oas-color-primary-text;选择卡描述(switch / checkbox / radio)改用text-secondary-strong以保证斑马/浅底上 AA(感知 <60 门禁不受影响)。
2.6.0 - 2026-10-07
特性
玻璃边缘折射 v1(承接液态玻璃批如实口径,范围纪律=Apple 定义域):
glass.css内置--oas-glass-refraction—— data-URI 自包含 SVG 位移滤镜(法向位移链:discrete 阈值把半透明玻璃面与不透明面归一为实心剪影 → blur 边缘过渡带 → Sobel 双卷积把轮廓梯度编入 R/G 通道、每段边缘沿自身法线微膨胀 →feDisplacementMapscale=10 膨胀峰值实测 ±4px(外包络宽高各 +8px 双轴对称)),只有边缘环带变形、中间恒不变形(布局/命中区不受影响)。实现选型:shadow DOM 内url(#id)片段引用无法跨 shadow 边界解析(实测静默忽略),data-URI 内联滤镜在任何树内天然可解析;滤镜区域横向 -50%/200%、纵向 -100%/300% 给位移与分层投影主下探留缓冲。引擎边界(如实):折射位移在 Chromium 系与 WebKit 引擎真实生效(WebKit 按 engineering §2 方法实测:开/关像素差异 4.55%、pageerror 零);Firefox 对 CSSfilter的 data-URI SVG 滤镜不执行位移,安全无感降级为无折射(不破坏渲染)。9 组件经filter: var(--oas-glass-refraction, none)消费:oas-button / oas-switch / oas-slider(把手)/ oas-app-bar / oas-bottom-navigation / oas-message / oas-toast / oas-snackbar / oas-notification——不引 glass.css 或无data-glass时回落 none 零副作用;oas-button hover/按下/选中态brightness()与折射组合书写不互覆(局部停用折射请覆盖为空值而非 none);禁用态显式关折射跨组件统一(oas-button 含 hover/active/选中反超守卫、oas-switch 含 busy、oas-slider 双伪元素——禁用控件静态无装饰变形);oas-app-bar 溢出弹层打开期间自动关折射(防弹层被滤镜区域裁切)。内容面板(modal/drawer/popover/select 系)与动态流动感不进本批。画廊 controls 展示行同步;e2e 固化像素级断言(Chromium:开/关必不同 = 真实执行、中心区一致 = 中间恒不变形;Firefox:无差 = 无感降级契约防假绿)+ filter×backdrop-filter 共存断言 + 布局盒不变断言。oas-gantt 甘特图组件(新,data 族):项目排期语义(任务/工期/依赖/进度),与 scheduler 的日历约会语义互补。行树 WBS(摘要条:时间=子任务并集、进度=子任务工期加权平均;
expanded受控集合,缺省全展开、显式[]全收起);任务条三形态(task 进度填充 +label-positioninside/right/left(缺省不显示) / milestone 无end推导菱形 / summary 摘要条);依赖连线fs/ss/ff/sf四型 SVG 单画布覆盖层;时间刻度六档(hour/day/week/month/quarter/year,双层表头,窄容器辅刻度标签自动抽稀 + 视口自适应列宽);拖拽三件套(拖身改期/左右手柄拉伸/条内圆点改进度,pointerup 收口一次性写回并派发oas-task-change(含 old/new)与oas-progress-change,Esc/pointercancel 取消零事件,键盘 Shift+←/→ 改期一格(RTL 镜像));只读三级(readonly/dates-readonly/progress-readonly)+ 任务级disabled(只读不渲染拖拽手柄);今日线 + 周末/假日列高亮;行虚拟滚动(万级任务窗口化渲染,方法scrollToTask/scrollToDate/scrollToToday/updateTask);数据契约扁平parent指针为主(嵌套children输入自动拍平兼容)。i18n ×10 + qa-regression 浏览器回归。oas-barcode 一维条码组件(新,data 族):第一期 6 码制——
code128(默认,auto A/B/C 子集切换)/ean13/ean8/upca/code39/itf14,自研零依赖编码器纯函数层(encoders.ts,条空 run 统一产物 + 护条/HRI 模块坐标);GS1 mod10 校验位对 12/7/11/13 位数据自动补算、全码输入自动校验。非法输入(字符集/位数/校验位)渲染错误占位并派发oas-invalid(detail 带原因,同一输入只派发一次)。可扫性内建:静区margin(默认 10)显式值低于10 × bar-width时收敛并 console.warn 一次、bar-width≥1 clamp、EAN/UPC 护条按标准向下延伸、默认深条(#18181b)固定白底不随主题(暗色下同样可扫,--oas-barcode-color/--oas-barcode-bg可覆写);整体宽度由内容决定(位数 × 码制 ×bar-width+ 静区,不设 size/width)。人读文字默认显示(display-value/text-position/font-size/text-margin,generic sans,OCR-B 不内嵌)。SVG 输出(role="img"+ aria-label,i18n ×10)+download()离屏 4× 栅格化 PNG(对齐 oas-qrcode 惯例)。oas-chart 图型扩展(范围纪律:只补四类,不做全面深挖):① radar 雷达图(
type="radar")——维度名复用labels(与折线/柱状同一数据心智零迁移),options.max全局量程(缺省全系列 max 走 nice 刻度),options.radarShape网格同心多边形(默认)/同心圆,刻度值沿顶轴、维度名顶点外侧(顶点文字碰撞自动避让),顶点<title>与图例/配色/动画全复用;② polar-area 极坐标面积图(type="polar-area")——分类等角扇区 + 半径编码值(最大值满半径)+ 同心参考圈,tooltip 显示原始数值而非占比,单系列与饼/环同一数据格式,单分类整圆渲染、全 0 不出扇区(与饼图同口径);③ combo 组合图(不设 type 值)——顶层type为缺省系列型,series[].type(bar/line/area)逐系列覆盖(非法静默回退),线/面点对齐柱组 band 中心,绘制层序固定 bar→area→line;④ multi-axis 双轴(进 options 层)——options.yAxis数组 +series[].yAxisIndex归属(字符串 "1" 矫正,非法归左轴),alignTicks v1 就做(以主轴档数锚定副轴重算 niceStep,消除刻度错位误读),仅两侧均有绑定系列时启用(单侧无绑定不渲染假轴)。四图型options.colors注入 SVG 前统一转义(防恶意色值注入),SVG 内文字方向钉 LTR(RTL 宿主不翻转,图表为坐标语义内容)。i18n ×10 + qa-regression 四图型浏览器回归。已知限制:小数量程(如 0~0.01)nice 整数步长退化(引擎既有行为,宿主换算兜底,已入 PRD)。
修复
- oas-barcode 默认静区不可扫(默认 5X 低于组件自身强制的 10X 下限):
margin缺省改为10 × bar-width——默认产物即可扫,不依赖宿主显式设置(此前默认 10px = 5X,与「可扫性内建」承诺自相矛盾);单测/e2e/文档/API 语料同步。 @oas-ui/ui/ssr出口补全:新增OASGantt/OASBarcode/OASScheduler/OASBottomSheet/OASAppBar/OASStepperPanel/OASFormItem/OASButtonGroupSeparator类导出(此前文件头宣称「re-export 全部组件类」但缺 8 个——含 v2.5.9 的 scheduler;均从类文件直出,不引含 define 副作用的目录入口)。- 文档站语言偏好污染(满负载实抓):首访适配的偏好槽
oas-lang此前只靠oldValue === undefined判定「落地不写」,路由/水合重算会以 oldValue 有值再次触发 watcher 写回落地页 locale——污染后 en 浏览器访问 zh 深链不再跳转。改为「点击语言下拉才算显式切换」写入 + e2e 回归锁。 - 浅色玻璃面板在白色背景下边界与内部隔断线消失(用户两轮实抓):浅色玻璃的 surface(白 0.6~0.75 半透明)与折光边(白 0.55)在白底上同为白色系,面板读作浮字;内部隔断线(modal 标题/底部分割线)走白色 border token,在白面板上同样消失(暗色下白色结构线可见,故只有浅色出问题)。修复双管齐下:① 三档阴影前置发丝线(
0 0 0 1px rgba(0,0,0,0.06~0.08))补面板外缘;② 浅色--oas-color-border系列改深色发丝(rgba(0,0,0,0.08/0.14))补内部隔断——折光边职责仍归白色--oas-glass-ring(outline 内缩),结构线与折光边分工对齐 iOS 浅色半透明面板;dark 段不动(范围纪律)。e2e 固化 computed 阴影含发丝线 + modal 标题分割线为深色系断言 + 白底/渐变双场景截图复核。 - oas-color-picker 未连接写
value崩溃(React 19 宿主整树中断):React 19 在元素已升级、未连接时设置 property,set value()直调update()读到未渲染内部件(syncControls的.r/.g/.b非空断言)抛 TypeError。修复:setter 加hasRendered守卫(属性写入保留,首渲染自然读新值,与基类attributeChangedCallback早退同语义)。同步落地 29 组件valuesetter 未连接守卫普查套件 + 真实浏览器 e2e 固化;并把同款守卫统一铺到全部 20 个直调update()的 value setter(input/textarea/select/slider/cascader/date-picker/time-picker/rate/radio/segmented/transfer/tree-select 等——此前「恰好不崩」靠各组件 update() 路径容错,现改为构造保证的「廉价 setter」约定:连接安全不依赖实现细节)。 - high-contrast × class 式暗色(
html.dark)下玻璃材质泄漏:.dark选择器补:not([data-theme="high-contrast"])——HC 可访问性强档下 blur/ring/折射全部让位(此前仅[data-theme='dark']路径排除)。
2.5.9 - 2026-10-05
特性
- 移动原生形态批(5 个新组件):oas-notice-bar 通告栏(feedback 族——type 四语义色 / icon / closable+open 恢复 / items 纵向轮播 / scrollable 内嵌 marquee 引擎 / action 双形态);oas-index-bar 索引栏(navigation 族——sections 数据驱动分节列表 + 字母侧栏点按/拖拽跳转 + scrollspy 联动 + sticky 分节头 + RTL);oas-pull-refresh 下拉刷新(feedback 族——滚动盒手势接管 / 阻力曲线 / 阈值释放 oas-refresh / refreshing 受控停驻 / success 回弹 / overscroll+touch-action 滚动协调 / 原生 touchmove 阻断浏览器 pan 接管);oas-swipe-cell 滑动操作(data 族——8px 方向判定放行纵向 / RTL 镜像 / 位移阈值 + flick 速度双吸附 / 单开互斥 / 外点滚动 Esc 关闭 / 焦点入 actions 自动开);oas-picker 滚轮选择器(form 族 form-associated——原生滚动 + scroll-snap 惯性 / columns 独立多列 / options 级联树(深层初值单趟解析)/ disabled 项吸附 / 键盘全操作 / FormData JSON 数组提交)。i18n ×10 + Node 安全类导出(
packages/ui/src/ssr.ts,供自定义 SSR 渲染;renderToString 白名单不含手势/滚轮类组件)+ qa-regression 固化(含移动仿真触屏用例) - theme 默认阴影精修(现代分层投影)+ 可选皮肤预设层 + docs 皮肤画廊:阴影三档由单层改为两层(近距硬边 + 远距柔和扩散,观感更细腻、边缘不脏);新增
@oas-ui/theme/skins.css——6 套品牌色皮肤预设(violet/emerald/rose/amber/graphite/teal),在data-theme之上叠加data-skin切换、与三套内置主题自由组合,仅覆盖--oas-color-primary(-hover/-active/-primary-text/焦点环等派生档自动跟随),opt-in 无副作用(不引则完全无影响);新增 docs「皮肤画廊」页(/guide/skins,6 皮肤 × 3 主题实时切换预览)。暗色变体选择器同时覆盖[data-theme='dark'](库内规范)与html.dark(宿主常见的 class 式暗色,如 docs 站)——初版只覆盖前者,致宿主 class 式暗色下皮肤被默认主色回填而失效(视觉复核实抓并回归固化packages/ui/src/skin-presets.test.ts) - oas-scheduler 日程调度组件(新组件,data 族,四期交付):月视图事件芯片(标题 + 色条,>2 合并)+
events读/写通道与addEvent/updateEvent/removeEventCRUD(派发oas-events-change;点芯片oas-event-click、点日格oas-day-click,宿主接编辑器);周/日时刻表视图(定时事件块定位 + 全天行,start-hour/end-hour限幅)+ 拖拽移动(30 分钟步进)/ 底缘缩放(15 分钟步进)+oas-view-change;重复规则repeat(daily / weekly / monthly + interval + until,渲染层展开)+ 提醒remind(到点派发oas-remind);timezone(IANA 时区影响格式化与今日标记)+view="agenda"日程视图(28 天时序清单) - 液态玻璃风格材质层
@oas-ui/theme/glass.css(静态近似——半透明/模糊/折光边/深影四项观感达成,Apple 定义的边缘折射变形与动态流动属后续增强;可选层,与 skins.css 同机制 opt-in):半透明 surface + backdrop 模糊 + 高光折光边 + 圆角放大 + 分层深影,data-glass叠加于data-theme/data-skin自由组合;25 个浮层 surface 组件(modal/drawer/popover/tooltip/dropdown/select 系面板/message/snackbar/bottom-sheet/app-bar 等)统一消费--oas-glass-blur/--oas-glass-ring两效果变量(缺省回落 none/transparent 零影响);dark 档高 alpha 保文字安全(感知对比度实测门禁 ≥60 三背板双主题);blur 只上容器级(行级/长列表不接);high-contrast 不启用;局部降级变量覆盖即可。新增「液态玻璃画廊」文档页(/guide/glass) - oas-calendar
events排期条目通道:声明式[{ date, title?, color? }]——当日格内圆点(color 或主色)、>2 合并+N徽标、悬停/聚焦当日出行内条目浮层(组件自渲染,不经宿主手写oas-cell-render监听;该事件保留为兜底) - oas-swipe-cell
side属性(向右滑开):actions 默认挂 inline-end(LTR 右侧、向左滑开);side="start"改挂 inline-start(LTR 左侧、向右滑开)——side 是交互侧选择、与书写方向正交(RTL 整体自动镜像);同时补「多按钮并排」demo(slot=actions 放多个按钮按总宽度测量整排露出) - oas-button 高度公开变量
--oas-button-height(档值兜底、默认行为零变化):swipe-cell actions 等需要按钮填满行高的场景经::slotted注入 100%(swipe-cell 已内建注入;此前内层恒定档值高、宿主被 flex 拉伸后按钮顶对齐不居中) - oas-input 及「字符串输入系」公开
valueproperty(get/set)(oas-input/oas-textarea/oas-input-number/oas-auto-complete/oas-mentions/oas-combobox):补上程序性读值的公开通道——此前value只有 attribute 写入通道与oas-*事件通知,宿主读当前值只能监听事件自存 state 或穿透 shadow 读内部控件(脆弱)。el.value读取该组件getFormValue()语义的当前值(parser/mask 感知、label/值分离、实时解析等各自口径),el.value = x写受控value属性并强制回写内部控件、不派发事件(对齐原生input.value/textarea.value的受控赋值即生效语义)。React/Vue 受控集成与宿主读写不再需要样板。
修复
- oas-form 默认校验时机改为
input(边输入边校验)+ 弹窗内两段式提交被布局位移吞掉的根治:对齐主流表单库「边输入边校验」的通行做法——默认validate-trigger由change(失焦语义)改为input,错误在用户点击提交前即已结算,从根上消除「点击瞬间错误文案增删 → 布局位移 → 把按钮从指针下顶走、click按规范落到 mousedown/mouseup 目标的最近公共祖先(form)而非按钮、吞掉整次提交」。原 bug 表现为弹窗包裹(oas-modal)内「校验失败 → 修正 → 再提交」时oas-submit不派发、弹窗不关、表格不更新(直连 oas-form 场景此前靠残留错误文案恰在点击前结算而侥幸通过)。change/blur档保留,且这些档下已出错字段在输入时亦实时复校、改对即清。回归改用真实oas-modal+ 真实指针点击(原用例假 div + 合成 click 恰好绕过了本 bug) - oas-table 子元素声明通道 + 列内模板 + 列宽调整不再崩表:
setColumnWidth的 JSON 回写会把cellTemplate/headerTemplate(DOM 节点)序列化成{},重解析后渲染抛错整表 0 行;含模板时回写改为改声明源(子元素 width attribute,模板仍在) - oas-kanban 宿主定高后板体不再溢出:板体补
height: 100%——此前宿主设 height 后板体按内容自长溢出宿主盒子、盖住后续兄弟内容,且「列体独立纵向滚动」不成立;泳道模式宿主定高时板体自身 overflow-y 兜底 - modal.confirm 按钮文案 Firefox 下恢复生效:自定义
okText/cancelText改走 modal 的ok-text/cancel-text属性通道(直戳 shadow textContent 会被 Firefox 重渲染时序覆盖回默认文案) - hover-card / dropdown / tooltip 触屏点按在 Firefox 移动环境恢复可用:Gecko 对 slot 裸文本节点的触屏命中会静默丢弃整串 touch/compat 事件致 click 不到——触屏 tap 切换改走 pointerup 通道(新增 shared/coarse-tap 统一 pointerup + click 去重,fine pointer 回纯 click 语义)
- oas-snackbar hover 暂停在内容更新后不再失效:hover 暂停监听由 shadow 内 box 改挂宿主节点——shadow 重建换掉 box 后旧监听消失、暂停静默失效导致提前关闭
- oas-picker × oas-form 接入表单收集:picker 注册进 oas-form 控件表——此前
name的 picker 在 oas-form 提交 values 中缺席、required 形同虚设(picker.md 的「oas-form 提交」demo 实际失效);同时默认 input 档下oas-change视为选择类控件的编辑事件(picker/select/slider 等只派 oas-change 的控件在默认档此前不触发字段校验、错误文案挂到下次提交) - oas-form 字段级异步校验 vs 提交跨路径竞态(独立 review 实抓并复现):默认
input后每次击键都可能起一笔字段级异步校验;若用户在它落地前提交,其慢旧结果会在finalizeValidation之后写回,覆盖提交终态——表现为「提交通过却仍标红 /getErrors()含幽灵错误」或「提交失败的错误被静默清掉」(该竞态在本批前仅显式逐键校验可达——validate-trigger="input",或change/blur档下已出错字段的实时复校;本批因默认改input扩散为默认路径)。修法:提交与reset()为最高优先级,进入即作废全部在途字段级异步校验(fieldValidateSeq.clear(),其apply令牌比对随即失效,一并覆盖在途被移除/改名的字段)。补回归 I5(oas-form.test.ts慢旧异步结果不得覆盖提交通过态)
2.5.8 - 2026-10-03
特性
- oas-kanban RTL 逻辑方向化 + 键盘多选/移动:列重排落点判定/指示线/键盘 ←→/触屏按钮语义与 aria-label 按 data-rtl 镜像;键盘多选 Space 切换选中(Ctrl+click 等价键盘路径,renderCard 内可聚焦元素 Space 让路)+ Alt+方向键移动(Alt+←/→ 换列尾部、Alt+↑/↓ 列内移动对齐 table 行重排先例;←/→ 选中集批量一条 oas-change 带 ids,移动后焦点回同 id 新卡)
- oas-swatch-group 首帧时序防护:静态 HTML 带 value 时组的首帧 update 可能先于子项 upgrade(白板子项调 syncSelected 即 TypeError)——判空跳过 + microtask 重试一次(防连锁重试风暴;全量包与 form 族包静态 value 首帧 e2e 固化)
- theme 次级文字安全档 token:新增 --oas-color-text-secondary-strong(light 混主文字色 88% 实测 5.15 达 WCAG AA;dark/high-contrast 原值已达标保持引用)——secondary on bg-hover 仅 4.39 不达 4.5 的既有债实例换用:table 多级表头 header-group / rate-off / check-off / 禁用行 + kanban 空列与空泳道单元格占位;a11y 基线 kanban 页违规归零、table 8→2、totals 276→265
- core 断开重连重绑统一语义:OASElement 新增 onReconnect 可选钩子——断开重连(append/re-parent/路由缓存摘挂)时 render 不重建(布局与内部状态保留)、仅重跑绑定恢复交互;oas-table(wrap 滚动/网格导航/行拖拽/单元格提示委托与 ResizeObserver)与 oas-kanban(shadow 根拖拽/点击/键盘委托)先行接线(thead 排序委托改类字段引用消除重复挂);dropdown/menu/tooltip/select/date-picker 抽查确认「监听跟打开态走」模式天生免疫
- oas-kanban 看板(新组件,data 族):
columns/cardsJSON 双通道声明式数据;卡片 HTML5 DnD 拖拽换列与列内排序(落点主色插入指示线,拖回原位零操作)→ 落定回写并派发oas-change(detail { id, from, to, index });列头计数、列体独立滚动、空列占位(i18n ×10);renderCardproperty 函数通道自定义卡片(Node 直挂 / 字符串防注入);触屏降级移动按钮(pointer:coarse,上移/下移/移到指定列),移动菜单支持键盘操作(开菜单焦点移交首项 + 方向键漫游 + Home/End + Esc 回焦锚点);卡片 tabindex=0 键盘可达(非空列体 role=list,空列不设 list 语义)。第一期不含:列拖拽重排、泳道、WIP 限制 - oas-table 浮层组件编辑器通道(editComponent 第二期)+ multi-select 编辑器升级:
editComponent: 'oas-select' / 'oas-date-picker'自动走浮层编辑器通道——进入编辑自动展开浮层(触发器驱动组件非受控开合,不写open受控属性);浮层面板内指针交互(点选项/翻日历/搜索)不再触发失焦误提交(指针落在编辑器子树内的失焦被抑制:单值组件选定即提交、多选组件勾选为中间态失焦一次性提交);Esc 双层级(浮层开着只关浮层,已关才取消编辑);点击编辑器与浮层以外区域提交当前值;oas-select编辑选项同步editOptions(回落列options)。type: 'multi-select'列编辑器由第一期逗号分隔 input 升级为oas-select multiple(选项同步、数组初值注入、提交回写字符串数组,清空全部勾选后失焦提交[]亦为合法值;历史逗号分隔字符串数据进入编辑时自动解析为选中集);浮层编辑器的 document 级守卫(Esc capture / 指针抑制)随退出编辑、静默取消、宿主断开三路拆除不泄漏 - oas-kanban 二期(列重排 + WIP 限制 + 卡片多选 + 泳道):列头拖拽手柄整列换序(聚焦后 ←/→ 同效;触屏 pointer:coarse 列头内左移/右移按钮,边界 aria-disabled;列间主色插入指示线,原位零操作),落定回写
columns并派发oas-column-reorder(detail { from, to, keys },卡片数据不动);列定义limitWIP 限制——超限列头计数转 warning 色 + 列容器data-over-limit标记(提示语义非阻断,拖入照常落定;泳道下按列跨带合计,缺省/0/负数不限制);卡片多选——Ctrl/Cmd 点击逐枚切换、Shift 点击同单元格范围选、空白处点击/Esc 清空、普通点击单选(选中态 token 色描边 + 主色弱底),多选拖拽移动全部选中卡并只派发一条oas-change(detail 加ids数组,id为首枚;触屏菜单仍只作用于所在单卡);swimlane-by泳道——按字段值横向分带(带头 = 折叠箭头 + 字段值 + 计数,默认全展开,折叠状态在数据变化时保留;缺失/空值归「(空)」带;空单元格显示占位),跨带拖拽改写泳道字段值(oas-changedetail 加swimlane: { from, to }),拖拽悬停折叠带头自动展开(不中断拖拽);新 i18n 键kanban.groupEmpty/toggleLane/dragColumn/moveLeft/moveRight(10 语言包) - oas-table 列
type字段类型系统:columns JSON 加type——text / number(千分位右对齐)/ currency(货币符号)/ select(badge,options配 value/label/color)/ multi-select(badge 组)/ date(YYYY-MM-DD)/ checkbox(只读勾选态)/ link(主色下划线新标签页,协议白名单防 javascript: 注入)/ progress(0-100 进度条)/ rate(0-5 星级)。编辑器复用既有通道(input 系原生 input、select 走 editor:'select'、checkbox 挂 oas-switch),回写类型按语义(数值/数组/布尔);排序按列 type 数值序/时间序;自定义渲染(render/cellTemplate)优先于 type - oas-table
group-by分组视图:按字段值分节(分节头 = 折叠箭头 + 字段值 + 计数,点击折叠/展开,状态在数据变化时保留);空值归「(空)」组;分节头作为扁平行参与行虚拟滚动、整行 colSpan 全宽(与 column-virtual 正交);排序作用于组内行;与 merge 列 / span-method / row-draggable 互斥(告警降级);与 pagination 同用时为页内分组口径 - oas-table
cell-tooltip单元格溢出提示(单例浮层):纯文本单元格溢出(scrollWidth > clientWidth)时悬停显示全文——表格级单一浮层实例(事件委托 + 视口夹取),不为每格创建组件实例;默认开启(cell-tooltip="false"关闭);滚动 / 重渲染自动隐藏 - oas-table
column-virtual横向虚拟滚动(双向虚拟补齐):非固定列窗口化——DOM 只渲染窗口列 th/td,窗口外列以占位格 colSpan 归并(宽度由 colgroup 对应列求和,table-layout: fixed强制启用——auto 布局把 col 宽当建议忽略、总宽塌缩)。列宽模型复用 virtual-list 的 HeightCache(横向换轴),全列显式 width(未设宽按预估 100px 定宽截断,文档注明);约束(告警降级):多级表头 / span-method / 合计行;固定列须两端布局(left 段 → 非固定段 → right 段)且恒渲染 - oas-table-edit
editComponent组件编辑器通道:列配置editComponent(columns JSON 字段)指定任意 value 语义的 WC(库内 form 组件 / 宿主自定义组件同通道,优先于原生 editor)——双击挂载组件并注入当前值、oas-change/change提交、Esc 取消。单元格编辑器标准化第一期(非浮层组件;浮层类编辑器后续批次)
修复
oas-table
editComponent通道端到端修复(独立 review 实抓):库内 form 组件此前完全不可用——提交事件并听oas-change(库内组件经 core emit 统一前缀)与原生change(宿主自定义 WC);读值改getFormValue()→ value property → value attribute 三级兜底(旧版只读 attribute,而 oas-input 用户输入不回写 attribute,提交恒为初始值);编辑器初值改 attribute + property 双通道注入。行虚拟 × 列虚拟双开横向滚动时同步重建 thead(表头不再滞留旧窗口列);编辑单元格定位改td[data-col]查询(占位 colSpan 归并不再使索引错位);编辑器失焦改监听focusout(composed,shadow 内控件失焦可感知);多行编辑器(textarea 内核)Enter 让路换行;列窗口起点扣除前置列与 left 固定段宽度(固定列右侧不再露空洞);RTL 下 scrollLeft 取绝对值标准化;setColumnWidth后列宽缓存即时失效;expand 列 colgroup 定宽与 sticky 偏移收敛为同一常量(40px);列宽解析归一(兜底统一 100px);容器尺寸变化(ResizeObserver)重算列窗口;占位格补aria-colspan且不入网格导航矩阵prefix/suffix/blur恢复 property 通道(input / input-number / statistic / countdown / tree-select / backdrop / mentions):这些属性名撞上 DOM 的只读访问器(Element.prefix)或方法(HTMLElement.blur())。React 19 按key in el判定走 property 写入:prefix撞只读 getter 会抛错并崩掉整棵 React 树,blur(backdrop)撞方法则覆盖blur()方法且属性不落(不崩但模糊失效);suffix无 DOM 对应(为对称与 property 通道一并处理),mentions 的prefix是trigger的遗留别名。现用Object.defineProperty在原型上遮蔽并映射到规范属性(prefix-text/suffix-text/blur/trigger),使它们在 React JSX / Vue 绑定 / HTML 全通道可用(prefix-text/suffix-text仍是规范名);blur被遮蔽后该元素的blur()方法被属性访问器取代(backdrop 无实际影响)。
2.5.7 - 2026-09-27
契约变更(升级前必读)
- oas-sidebar 折叠态树形父项点击不再派发
oas-select:折叠态嵌套父项点击(或悬停)现在打开 flyout 子菜单——此前点击会派发父项的oas-select(父项不是可导航页面,属死交互的伪修复)。若你的宿主在折叠态依赖父项的oas-select做导航,请改为监听 flyout 内叶子项的oas-select(事件契约不变,仅父项不再派发)。
特性
oas-divider 线型扩展:
variant新增double-dashed(双虚线)/double-dotted(双点线)——复用 double 的「加高容器 + 双层」结构 × dashed/dotted 的 repeating-gradient 渐变(段长与单线版完全一致),层间间隙共用--oas-divider-double-gap。仅水平布局生效(垂直方向线型为既有边界,含既有的 dashed/dotted/double)浮层箭头形状 token 化(7 组件):tooltip / popover / popconfirm / dropdown / hover-card / tour / navigation-menu 的箭头新增
--oas-<comp>-arrow-width/--oas-<comp>-arrow-height(宽高独立——宽高比即三角的高与角度)、--oas-<comp>-arrow-radius(圆角)、--oas-tooltip-arrow-align-offset/--oas-tour-arrow-align-offset(*-start/*-end对齐侧偏移);tooltip 既有--oas-tooltip-arrow-size保留为回退别名;popover / popconfirm / dropdown 的 point-at-center 定位 clamp 改运行时读 token(形状与定位同一真源);merge 独立 8px 几何不受影响oas-swatch + oas-swatch-group(新组件,form 族):色板独立件——内联预设色快选/展示场景(不开 color-picker 面板)。色块件:color(预设名/任意色值)/size 五档/shape 三态(square/rounded/circle)/nothing(棋盘格底无色指示)/mixed(混色拼贴)/disabled/selected(选中环描边)/label(可访问名,i18n ×10);选择组:单选 radiogroup / 多选 checkbox 语义(aria-checked 同步)+ value/multiple 受控 + oas-change + roving 键盘(方向键漫游 RTL 镜像 + Home/End + Enter/Space 选中)+ 空组/未命中值静默容错
oas-button compound 双行变体:description 具名插槽副文本行——有内容时按钮切纵向双行布局(主行在上、副文本小号次要色在下);高度自适应不锁尺寸档(与 wrap 同机制,副文本不溢框);slotchange 动态增删跟随;loading/icon/href/disabled 既有契约全兼容;副文本自然进入可访问名
oas-sidebar 折叠态 × 树形子菜单不可达根治:collapsed 下图标条内的树形父项改走 flyout 子菜单(主流侧栏惯例)——点击/hover 延迟开合 + 定位引擎锚定 inline-end(RTL 镜像)+ 碰撞避让 + Esc 关闭回焦/外部点击关闭/单开互斥 + 嵌套子树面板内内联展开;父项挂 aria-haspopup + aria-expanded,面板 role=menu / 子项 role=menuitem;折叠态 label 隐藏规则不再误伤 flyout 子项;打开期间页面滚动/缩放自动关闭(对齐浮层惯例)
浮层定位引擎零尺寸弹层不翻转:popup 零尺寸(尚未布局/隐藏测量帧)时 fits 因 gap 恒 false 会误翻——RTL 下翻转把镜像抵消(sidebar flyout 实抓);改为零尺寸跳过翻转;popconfirm/tooltip 两个依赖「零尺寸翻转」的既有测试桩扶正为真实尺寸
oas-tabs 标签级右键原生事件
oas-tab-contextmenu(下游自建右键菜单通道):右键标签(或聚焦标签按 Menu 键 / Shift+F10)派发可取消事件,detail: { value, index, clientX, clientY, originalEvent };宿主 preventDefault 时内建菜单与浏览器默认菜单全抑止(capture 阶段阻断 manager 委托);空白处右键不派发;键盘坐标取按钮中心;RTL 透传原生坐标;与 context-menu 属性无关恒派发oas-tab-panel 新增
title属性(悬停提示透传):透传 shadow tab 按钮为原生 hover tooltip——长标题截断时悬停看全文;ui-spec 原生全局属性吸收 pattern(tabs 读入缓存并从 panel 宿主移除,防 panel 内容区出现原生 tooltip);宿主改写 title 按钮即时跟随更新并再次吸收;items JSON 通道title字段同效能力缺口 P1 立项批(29 项增强):
- 表单体系:oas-form
disabled(整表禁用,经 form-associated 通道并入不回写防自锁)/scroll-to-first-error(校验失败聚焦首错字段并平滑滚动,reduced-motion 瞬跳)/ Rule.validator(自定义校验函数,property 通道,组合既有规则)/validate-trigger(change 默认 / blur / input,规则级可覆盖)/initial-values(初始值 JSON + property 双通道,reset 回初始值)/ 事件oas-values-change(detail: { name, value, values }全表快照);oas-checkboxtrue-value/false-value(勾选映射值,对齐 switch;group 内不生效);oas-selectlabel(触发器 aria-label 命名);oas-button 原生表单提交属性组(html-typesubmit/reset +form/formaction/formmethod/formnovalidate/formtarget——shadow 按钮经点击期临时代理 submitter 桥接原生激活行为,loading/disabled 不触发,href 模式静默无效) - 输入一致性:oas-input
autofocus(转发内层聚焦)/autocomplete/inputmode(透传)/loading(行尾 spinner + aria-busy 不禁用输入,优先于 clear 钮);oas-input-number 事件组oas-focus/oas-blur/oas-input - 弹层浮层:oas-modal
z-index(显式层级叠加 base,dialog 比 mask 高 1);oas-drawerheight(纵向抽屉高度,优先 width/size)+ 事件oas-cancel(取消语义关闭detail: { source });oas-auto-completevariant+oas-focus/oas-blur;oas-cascaderloading(spinner + 面板加载占位)/field-names(字段别名,对齐 tree-select)/oas-focus/oas-blur - 数据导航:oas-select
variant(outlined/filled/borderless,对齐 input);oas-tableshow-header(false 不渲染表头行,列配置仍对齐数据行);oas-tabsactions插槽(标签栏右侧操作区,滚动区外固定);oas-tree 事件oas-expand+ 拖拽生命周期事件组(oas-node-dragstart/dragover/dragleave/dragend,drop 契约不变);oas-calendarrange(两段式范围选取 + 悬停预览 + 区间高亮,detail: { start, end });oas-carouseldraggable(拖拽跟手 + 25%/速度阈值翻页否则回弹);oas-menuopen-on-hover(vertical/inline 父项 hover 150ms 延迟开 / 300ms 延迟收,点击路径不变)
- 表单体系:oas-form
能力缺口 P2 立项批(31 组/38 条长尾增强,约 70 个新 API):原生透传补齐(input
min/max/step/minlength/pattern/spellcheck、textarea/comboboxautocomplete、checkbox/tabstabindex、avatarsrcset、imagewidth/height/referrerpolicy)+ 插槽开口(buttonloading-icon、calendarheader、selectprefix/suffix/suffix-icon/clear-icon、date-pickerprefix-icon/suffix-icon、inputclear-icon、cascaderoption/suffix-icon、tree-selectsuffix-icon、tablefilter-icon)+ 尺寸档位族(form 表级size全字段下发(core injectValue 通道 + formSizeCallback 动态重渲染)+ steps/timeline/tree/text/dropdown size)+ 表单长尾(formcolon/validate-messages、form-itemhelp/status-icon、radio-grouprequired(升级为 form-associated)、sliderlabel)+ 弹层长尾(drawerno-mask、affixz-index、auto-complete/cascaderplacement、date-pickerseparator/default-time、time-pickerhide-disabled-options/label、dropdownmax-height、tabsactions之外补tabindex)+ 数据组件增强(tabletable-layout/hover/indent-size/row-expandable/max-height/oas-cell-click/oas-row-dblclick、treeblock-node/selectable、listhoverable、carddisabled/orientation、descriptionsitems数据通道、grid 双轴 gap/collapsed-rows/itemflex/push/pull、transferpagination/oas-scroll、splitterdisabled、siderwidth、badgeshape、carouseltrigger、menudisabled/selectable/persistent、selectinput-value/show-arrow/autofocus/default-active-first-option/loading-text/reserve-keyword/auto-width/hint/oas-create、tree-selectinput-value/label-in-value、input-numberautofocus/decimal-separator/variant/align、uploadoas-progress)——语义覆盖为准,命名一律走本库 kebab-case /oas-*惯例能力缺口 D 类立项批(27 条):新组件 oas-highlight(文本命中高亮:多词/JSON 关键词 + 大小写/整词/重音三开关 + mark 命中渲染 + oas-count 事件 + SSR 直出);oas-code 行高亮/行聚焦/diff/max-rows 折叠;oas-icon iconfont-url 远程加载 + registerIconAlias;oas-auto-complete/oas-cascader virtual 虚拟滚动;oas-date-picker/oas-time-picker timezone 时区锚点;oas-input mask 输入掩码(跳字面量/粘贴过滤/退格停字面量/mask-raw 原始序列提交);oas-select hide-selected;oas-popover same-width;oas-table exportable 导出(CSV/Excel)/grid-navigation 键盘网格导航/row-draggable 行拖拽排序;oas-form 嵌套 name 路径 + oas-form-list 动态字段组(min/max/disabled + 自动索引化 + 主表联动校验提交);oas-menu searchable 过滤 + 菜单项 shortcut 标注;oas-tree check-all 三态全选;oas-list sortable 行拖拽;oas-carousel thumbs 缩略图指示器;oas-splitter snap 吸附档位;oas-progress vertical;oas-masonry sequential;oas-modal maximizable(最大化等同 fullscreen 语义 + oas-maximize);oas-calendar calendar-system 非公历历法(Intl 透传)+ months 多面板;oas-color-picker recent 最近使用色;oas-slider 多滑块泛化(N 元数组 → N 把手,range 为 N=2 特例);oas-marquee max-loops 限定循环 + oas-finish + RTL 镜像复核;oas-upload crop 图片裁剪(内建对话框:比例锁定 + 缩放 + canvas 离屏导出 + oas-crop)。D11 chart 雷达图按「chart 不深挖」既定决定不立项
变更
- oas-stepper / oas-stepper-panel 进 DSD 白名单(v2.3.2 遗留「后续批次」补位):whitelist 129 tag、快照直出(steps JSON 标题 + current 联动面板 hidden 同步)+ 真水合(upgrade 后 style 同对象、指纹清理)+ 升级后点击步骤头切面板 e2e 固化;docs ssr.md 白名单清单同步
- RTL 全量视觉审计(117 组件页 sweep + 识图 triage):新增
scripts/e2e/rtl-audit.mjs——LTR/RTL 双跑几何检查取差集(横向溢出/demo 越界)、整页截图产出供识图复核;dir=rtl于文档解析期注入(真实 RTL 应用形态),文档站壳层中性化排除站点自身噪声。几何层 117/117 全净;识图 triage 候选经 DOM/几何量测逐项定责后修复 5 处:- oas-pagination RTL 箭头镜像:页码序由 flex 随 dir 自动右→左,但
‹«›»glyph 不自翻、指向背离目标页;新增data-rtl钩子 + 方向箭头钮scaleX(-1)(prev-icon/next-icon自定义图标一并镜像) - oas-scroll-area RTL 横向 thumb 锚定:原
|scrollLeft|/max映射静止态贴左缘(呈「已滚到底」观感)且拖拽逆指针;翻正为书写起点锚定(静止贴右缘)+ 拖拽与指针同向 - oas-theme-editor 色值 LTR 隔离:hex/颜色函数/token 名是 LTR token,RTL 宿主下被 bidi 重排(
#d97706显成d97706#、color-mix(...)逗号乱序);色值输入框/只读值/token 名标签固定 LTR - oas-upload
template[slot="trigger"]克隆通道:native slot 对 template 元素不生效(inert),自绘触发 demo 双向整块空白;补克隆通道(slot 隐藏 +.trigger-tpl渲染,zone 点击仍打开文件选择) - oas-typography
actions-position="start"失效修复:order: 0与文本缺省 order 平局被 DOM 序裁决,start 从未生效(LTR/RTL 双坏,RTL 审计对比 start/end 两组无差异实抓);改order: -1严格前置
- oas-pagination RTL 箭头镜像:页码序由 flex 随 dir 自动右→左,但
- oas-qrcode 形状化渲染体积优化(rounded / dots):数据区由逐模块
<use href="#oas-qr-mod">改为「合并路径 + 1×1userSpaceOnUsepattern 网格平铺原型」——渲染几何与逐模块绘制逐像素等价(visual 基线零漂移),产物体积回落 square 量级(145×145 码实测约 88.3 KB,旧方案约 323.8 KB,约 1/3.7;与 square 合并路径仅差 +157 B) - oas-qrcode 渐变 × 形状化修复:
gradient与dot-shape=rounded/dots同用时,objectBoundingBox渐变会在 pattern 内容里逐模块解析(每个码点各自套全渐变)→ 转为gradientUnits="userSpaceOnUse"映射进模块区域,渐变跨整码连续;square 缺省形状渲染零变化 - RTL 交互态轮(20 浮层组件真 RTL 打开态 sweep):面板全部在视口内、方向镜像正确;实抓修复 oas-time-picker 弹层内容撑宽后 end 对齐右溢 27px(打开瞬间 spinner 列未撑开按旧宽算 left——挂 ResizeObserver + 一帧后复位重定位,LTR 右缘场景同病)
- 文档站 code 元素 bidi 方向隔离:
.vp-doc code加direction: ltr; unicode-bidi: isolate——code token 自成 LTR 隔离区(RTL 下 CSS 变量名/函数括号不再乱序,LTR 零观感变化) - vitest 关闭隔离尝试回退:
poolOptions在 Vitest 4 已移除(曾误设poolOptions.forks.isolate=false——死配置);改顶层isolate: false真关后跨文件模块状态共享击穿 18 条用例(capability 注册表 / vi.mock 泄漏 / 计时态),不值得为 ~15% wall 逐个扶正——已回退默认逐文件隔离,engineering.md 立档前提 - oas-carousel 拖拽默认行为调整:PC(fine pointer)默认关闭拖拽切换(此前恒可拖),触摸设备(coarse)默认开;
draggable属性显式开 /"false"显式关——PC 上依赖拖拽手感的宿主请显式加draggable - oas-select searchable 选中后默认清空搜索词(对齐 tree-select 既有契约;保留关键词请显式
reserve-keyword) - oas-date-picker datetimerange 缺省端点时刻:值缺时间部分/空值时终点默认补
23:59:59(原00:00:00;default-time属性可显式控制两端) - oas-radio-group 升级为 form-associated(P2 required 落地附带):有
name时组值参与原生 FormData 收集 /form.reset()/ fieldset 禁用链——向后兼容(无 name 不提交),但依赖「组从不进 FormData」的宿主需留意 - oas-steps medium 档基准字号 13px→14px(对齐 stepper 同构密度,其余档不变)
修复
- oas-modal
no-mask的aria-modal语义修正:非模态(页面可交互)时硬编码aria-modal="true"会向读屏谎报模态——改为动态(no-mask → false;对齐 dialog.show() 语义与 drawer 同款修复) - oas-context-menu
kind="checkbox"勾选项链路断裂(新增 kind demo 时浏览器实抓):宿主value从不下传给内层 menu(初始勾选态永不回显)、勾选切换不写回宿主(勾选态丢失)、勾选即关菜单(违反「勾选切换不收起」惯例)——补齐 value 下传 + 勾选写回 + checkbox 切换不收起,转发 detail 带checked;存量「宿主不写回 value」测试锁的正是缺陷行为,已扶正 - oas-input 未提交输入被无关 update 抹掉:typing(未提交)期间任何属性变化触发的 update() 都会从 value 属性回写内层 input——用户正在输入的文本被旧属性值覆盖(loading 远程校验主场景实抓:校验请求发出 loading 开、响应回来 loading 关,期间输入全丢;status/size 等切换同病)。改为「value 属性实际变化才回写」(未提交输入保护),受控写回路径不变;单测 + e2e 固化
[hidden]兜底全量收口(79 文件/66 组件实证)::host { display }是 shadow 作者样式,来源压过 UA[hidden]规则——凡 :host 设 display 而缺:host([hidden])兜底的组件,宿主写hidden仍可见。CDN 全量实测 163 组件中 66 个失效(含 button/icon/tag/input/select 等高频件;2.5.6 曾按报障收口 8 处,系症状驱动的局部收口);本次全量补齐同款规则,另修 oas-grid 内联display压过兜底、oas-anchor-target(单文件多组件漏网)两处边角。新增 style-conventions 源码级守卫(逐样式字面量粒度,防新组件再漏)+ 实测 sweep 复验归零
2.5.6 - 2026-09-23
特性
- oas-qrcode 美化维度:新增
dot-shape(square 默认 / rounded / dots)、corner-shape(square 默认 / rounded)、gradient+gradient-angle(2–3 色 JSON,CSS 约定角度,生效时覆盖color)、icon-hide-dots(中心 logo 覆盖区码点挖空)。渲染拆纯函数层shapes.ts并与离屏下载共用同一核心(顺带修复download()调用已移除的旧渲染器,运行即抛matrixToPath is not defined);square 沿用 run-length 合并单 path,rounded/dots 走 defs 几何原型 +<use>;默认配置下dataPath + finderPath(square)覆盖集合与旧matrixToPath逐模块等价(可扫性不退化,区域级断言兜底) - 表单类组件 form-associated(原生表单集成,15 组件):core 新增
OASFormElement基类(static formAssociated = true+attachInternals,不支持环境静默降级)——<label for>原生关联(label 点击转焦点到 shadow 内真实控件;勾选族对齐原生「激活控件」切换+聚焦;upload 激活文件选择器)+ 原生 FormData 收集(文本族当前文本 / 勾选族勾才提交 / 多选同名多条 / date·time 范围name-start+name-end/ upload File)+form.reset()回初始值(不派发事件)+fieldset[disabled]联动(不回写disabled属性防自锁,经injectDisabled通道并入)+required原生校验链(valueMissing,i18nform.valueMissing×10 语言包,:valid/:invalid伪类)+ 外部 label 命名转发(label 文本复制为内层aria-label)。落地:input / textarea / input-number / checkbox / radio / switch / select / combobox / auto-complete / tree-select / mentions / date-picker / time-picker / upload,与oas-form自研collectFields并行可用 - oas-sidebar 抽屉开合方法公开:
openDrawer()/closeDrawer()(原 private)——编程控制移动端抽屉,等价于点击内置触发钮/遮罩/Esc;幂等、桌面态自动回收、写入drawer-open受控属性
契约变更(升级前必读)
本批含三类非 JS API 的对外契约变更(属性/事件签名未变),升级前请核对:
- ARIA 语义:
oas-card/oas-list-item不再挂缺省交互角色(role=button/checkbox)——可点/可选卡与可点行内常嵌操作控件,缺省角色会把它们裹进交互元素(nested-interactive,屏幕阅读器丢失内部控件可读性)。需要行级/卡级交互语义时,由宿主显式挂role(组件不覆盖宿主显式角色)并按需自行同步aria-checked;oas-editable只读展示态由role=button改为role=textbox+aria-readonly;oas-radio只读由aria-readonly改为aria-disabled(radio 不支持前者)。 - token 语义:语义色/预设色的
-text变体(如--oas-preset-red-text)现在同时承担「文字色」与「实底底色」(tag、badge、avatar、toggle 的实心与选中态)——只覆写--oas-preset-*/--oas-color-*本色的换肤不再影响这些组件的实底与文字,请改为覆写对应-text变体。另新增--oas-color-primary-text(primary 的文字安全档,值与-active相同,交互态仍用-active);自定义 hex 色的文字安全档改为随主题方向的混合(内部 token--oas-deep-mix/--oas-deep-sink)。 - Shadow DOM 结构:
oas-splitter的分隔条外层新增.sep包裹层(折叠按钮与 separator 同级,消除交互嵌套),[part="splitter"]的宽度语义由.sep承接;oas-progress内嵌文本(::part(inside))的父节点由.track变为.bar(文本只压在已填充段内,填充过窄时自动隐藏)。依赖这些结构的宿主 CSS /::part选择器需相应调整。
无障碍
- 感知对比度门禁(零容忍,light + dark 双主题):117 页 × light/dark 双主题,共 2.4 万+ 文本节点(单主题约 1.2 万),逐节点取 axe 解析出的文字/背景实测色,用自实现的感知对比度公式打分——
<60一个节点都不允许(<45/<30同为零);禁用态文字(含 opacity 淡化合成档)按 WCAG 豁免并在门禁单列计数;门禁自带「注入低对比文本必须被捕获」自检与「color-contrast 不得进页面级豁免」防绕过守卫 - 存量对比度债务全量清偿(实测
<60由 655 → 0,暗色另有 327 → 0):浅底文字统一改用主题-text文字安全档(亮/暗主题各自定义,替换「基色掺黑」启发式——后者在暗色下会反向压暗);实底浅色(预设色 tag / badge / avatar / toggle 选中态、code inline solid)改用-text档作底;自定义色(hex)的「文字安全档」改为 theme-aware 混合(新内部 token--oas-deep-mix/--oas-deep-sink:亮色掺近黑、暗色掺近白),并同步把 button/popconfirm 等残留的color-mix(… %, black)实底派生改为掺--oas-color-text-primary - 暗色调色板与被测面修正:暗色次级文字提亮(
#b8b8c0 → #c6c6ce)、预设蓝-text提亮、docs 站内联<code>与引用块暗色配色(原 Vitepress 默认色在暗底上贴线/不达标)、grid demo 暗色梯度重排 - 预设
-text安全档改为规则推导(OKLCH 亮度阶梯 + 多约束 + 守卫锁死):替代逐值手调(手调曾拆东补西——gold 改值躲 gold↔orange 撞色却让 gold↔lime 从 61 缩到 49.7)。真源packages/theme/oklab.ts(自写 sRGB↔OKLCH,零新依赖):锁色相 ≤12° 只在 L 取档;双底对比度 ≥65;相邻组(gold↔orange 等四对)ΔE ≥8;任一-text在 elevated 底上 ≥60 硬闸;冲突退让只在更安全方向取样。light 改 2 值(green/geekblue 加深)、dark 改 7 值(orange/gold/lime/green/cyan/blue/geekblue 提亮);style-conventions 守卫锁死 + 对比度公式收敛单一真源(a11y.spec 改从 theme/oklab 导入)(对齐亮色「浅底深字 / 实底浅字」两段式)、label/link/code 三个 demo 的写死 hex 改用 token(写死 hex 数学上无法两主题同时达标) - 覆盖面:tag / badge / avatar / toggle-group / toggle-button / breadcrumb / message / switch / list 选中行描述 / tree / transfer / checkbox / steps / rate / log / code / typography / popconfirm / theme-editor / alert / button / anchor / sidebar / menu,以及 grid、container、flex 三个 demo 的自绘配色(含 demo 引用不存在 token
--oas-color-primary-text的真 bug) - axe 比值法(WCAG 2.x AA 合规参照)改走 ratchet 基线:存量违规只许降不许升、逐批清偿,与感知门禁并行看守(合规线与体验线分开盯)
修复
- 可点 / 可选容器不再挂缺省交互角色(card、list):可点卡与可点行内常嵌操作控件,缺省
role=button/checkbox会把内部控件裹进交互元素(axe nested-interactive,读屏丢失内部控件可读性);宿主显式角色(多卡组role="radio")仍同步aria-checked,原有用法零变化。此为有意的设计取舍而非回归:组件缺省不再向读屏宣告 button/checkbox 角色,需要选择语义时由宿主显式挂role(组件叠加aria-checked同步) - list 可点行与行内控件双触发:点行内开关、按钮不再同时触发整行
oas-click(补 composedPath 内部交互排除,键盘路径同步生效) - qrcode 图形语义归位:
role="img"+aria-label从容器挪到<svg>自身,解除与容器内刷新按钮的交互嵌套 - splitter 折叠按钮移出 separator:按钮与分隔条同级挂在新增
.sep容器、索引由data-splitter-index携带,消除交互嵌套;折叠面板禁用滚动(0 尺寸滚动区既不可用又触发 scrollable-region-focusable) - progress 内嵌百分比文字:由横跨「填充 + 轨道」改为只压在已填充段(填充过窄时整段隐藏)——原实现白字压浅色轨道,实测感知分 0
- oas-marquee 循环接缝顿挫三连修:克隆份与源份渲染宽不等(每轮回跳一个空格宽);相位跳变;克隆份改走 light DOM(继承页面样式)+ 份数口径修正 + reverse 切换相位连续
[hidden]兜底收口(8 处):作者级display声明压过 UA[hidden]规则的同类缺陷,全库清查补齐- 真机视觉复核 7 处修复(含 2 处存量缺陷)+ oas-masonry items getter 契约修复
- oas-input addon 槽放自包含控件时改贴合形态:修复 append 槽放
oas-button时按钮左右各 12px 灰带、四角 6px 未与外框合并(双层圆角嵌套)、托盘与输入框上下 1px 台阶——根因是.addon无条件 padding(本为文本 addon 留位)且未向被分发按钮注入圆角合并协议;识别自包含控件(oas-button / oas-button-group / oas-compact)打内部标记,仅标记存在时归零 padding、去自身底/边、按尺寸档对齐控件高度、-1px 压边成单线并注入--oas-button-group-radius
工程
- API 工具链:反向缺口治理(跨目录基类扫描 +
@apiProperty通道 + 双向 0 门禁);API 语料进 pre-commit;docs 双语镜像守卫;qa-regression 覆盖回填 8 组件 - ui-spec 新增「命令式开合 API 约定」(抽屉/浮层类公开方法的统一形状,sidebar 为首个落地件)
文档
- form 页新增「原生表单集成」集中 demo(label for + FormData + reset + 15 组件支持清单,中英双版);12 组件补 required 演示块
- qrcode 文档补形状/渐变两节 demo(中英双版);
error-correction说明修正(四级均已实现,非仅 L 级)
测试
- tooltip 三个 hover 跟随用例改「关动画 + 等 DOM 静止 + 轮询断言」,消除并行下的时序抖动
2.5.5 - 2026-09-17
修复
- oas-select 触发器 chevron 图标被写坏(自 v2.5.1 起带病发布):内联 chevron 的 path 存在写字笔误——标准 V 形(
M4 6 L8 10 L12 6)后多出一段回折线L4 12,图标渲染成乱纹(实测路径几何长度 21.31 vs 规范 V 形 11.31)。修复 path,并新增源码级守卫:style-conventions.test.ts扫描全部组件内class=chevron的 path 必须与@oas-ui/icons的chevron-down一致(含检测器自检 + RED/GREEN 实证),堵住「visual.spec 只截图不做基线比对」导致的漏检路径 - oas-button-group
pill胶囊端整形:端部改由组容器承担(radius-full+overflow: clip,端弧半径按容器较短边夹紧)——横向 / 纵向宽钮 / 纵向窄高钮都得到真正的半圆胶囊端(原逐按钮各自圆角在「端边 == 短边」时只圆到 1/4,退化成圆角矩形 / 半椭圆);纵向胶囊端钮外侧内边距收口为space-4(内侧与左右维持space-2),消除「文字钻进弧形端」的观感 - 文档站语言适配两处回环:①首访适配脚本与 theme 的 lang watcher 互踢——zh 浏览器整页打开
/en/深链会无限整页跳转(dev 实测 4s 内 40+ 次 load),改为只在用户「实际切换」时持久化偏好,首屏落地只同步 i18n、不写偏好槽;②/en/前缀改为显式语言指定、整页打开一律保持英文,不再按浏览器语言回弹(优先级:显式路径 > 偏好 > 浏览器探测),/en/页不再产生任何整页跳转
文档
- radio / checkbox 自定义指示器示例重做(修 dev 下选中态图标空白、跨引擎看不清选中态):内联
<template slot="checked-icon">的内容在 vitepress dev 下被 Vue 编译管线吞空(template 元素尚在、innerHTML 为空,生产构建正常——此前只在 preview 验证故漏掉),示例改用组件的直接元素通道<svg slot="checked-icon">;把写进 SVG 表现属性的var()(跨引擎脆弱,部分引擎回落黑色)改为currentColor+::part(indicator-checked)上色;弃用mask剪影方案(mask 重置在部分引擎不生效会整块空白);radio 两态自定义示例改为同形星标(未选灰 → 选中主色)并补「自定义指示器是项级开关,组内统一样式需每项都带插槽」的说明 - README(根中英 +
@oas-ui/ui中英)补官方示例模板站链接(多套可直接复用的中后台场景)
优化
perf:size/perf:bench默认只测不写:两者原先每次运行都用当前环境实测值改写入库的docs/perf-baseline.json(本地跑一次就脏一个 tracked 文件,gzip 字节跨 zlib / 平台存在差异),改为默认只测量并打印结果,更新基线需显式加--update-baseline;engineering.md §4 同步
2.5.4 - 2026-09-16
特性
- oas-app-bar(新组件,应用栏):页面/工具区顶部的应用栏布局条——标题(属性/slot 富内容双通道)+ leading 汉堡钮(
oas-menu-toggle)+slot="actions"操作区 + 超宽 overflow「···」收纳(RO 驱动、镜像回派)+hide-on-scroll滚动折叠 +slot="extended"扩展区(滚动收起)+position="static|absolute|fixed|floating"四形态 +elevated滚动投影;RTL 逻辑属性 + coarse 触控 44px;role=banner + aria 全同步;SSR/DSD 双路径。i18n 新增appBar.*4 键(10 语言包齐全) - oas-float-button 家族扩展:
mode="single|group|menu"三模式(分组 slot 子钮带 label 气泡与角标、菜单模式 actions JSON 弹出选择并派发oas-select);受控expanded+oas-expand-change;trigger="click|hover|manual";expand-direction四向(RTL 横向镜像);子钮/主钮链接化(href/target);徽标状态点与数字 99+ 封顶;Esc/外点收起回焦、reduced-motion 降级 - oas-editable 原地编辑:展示态与编辑态同尺寸原地切换——无缝输入框(透明底、聚焦显形)+ 镜像宽度自适应(输入框随内容宽度,不跳版);展示态富内容模板支持迟到填充(
content变更观察) - RTL 第二批(方向键镜像 + 面板逻辑化收口):6 组件水平方向键 RTL 换向(carousel 双键盘域 / stepper / bottom-navigation / toolbar-toggle / image 图集翻页 / tree 展开收起键)+ carousel 轨道位移取反与 prev/next 箭头逻辑属性镜像 + tree 收起箭头
data-rtl镜像 + scroll-area 方向判定收敛shared/direction单源(废弃私有实现;语义变化:config-provider 注入现优先于最近祖先显式dir,与全库一致)+ 浮层面板残留物理 CSS 逻辑属性改造(select / auto-complete / combobox / mentions / cascader / tree-select / date-picker / time-picker / tour / dropdown split 接缝与圆角 / menu 间距缩进 / table 表头与过滤面板 / slider / collapse-item / theme-editor)+ 约定守卫:全库物理方向 CSS 白名单化,白名单(placement 基向箭头绘制、物理命名 API、内容 LTR 锁定、成对对称)之外新增一律红灯 - API 规范统一:size 档位跨词表别名互认(
shared/size单源——五档全称/缩写在任何组件等价接受,别名不告警,内部规范化输出不变;button/tag/badge/stepper/pagination/float-button 首批接入)+ 事件同名归一(drawer/modal 关闭动画完成增派规范名oas-after-close对齐 after-* 家族、upload 超限增派oas-exceed-limit对齐 checkbox-group/select/toggle-group——旧名oas-closed/oas-exceed保留为兼容别名双发,API 表标注【兼容别名】;ok(对话框)/confirm(选择器)分工写入 ui-spec)+ 阴影三档 token(--oas-shadow-sm/md/lg,light/dark 双变体;28 处裸海拔阴影迁移 + 收口批次 21 处浮层color-mixoverlay 迁移,方向性投影/inset/形状描边豁免并写入 ui-spec §1.1) - 感知质量收口:CSS 变量引用守卫(无 fallback 且全库无定义 → 红灯)+ 7 处存量裸 token 补 fallback(table 2xs/weight-medium、message ease-in、notification radius-rounded、tour text-tertiary/fill/base);a11y 审计改为自动收集全部组件页(原手选 26 页),存量违规建台账
修复
- oas-carousel 卡片模式 RTL P0×2:卡宽取反符号错误致 RTL 下当前卡偏移、拖拽 delta 未随方向取反致 RTL 拖拽方向相反(含松手阈值镜像)
- oas-float-button 展开焦点管理:
syncExpanded抢占宿主焦点、选择后不回焦、节点重建丢焦三处修复;补 DSD/水合测试 - oas-editable 两处模型缺失:展示态
[hidden]规则缺失致编辑框与文本并排(非原地);展示态自定义模板迟到填充不渲染(Vue 先渲染空模板) - oas-stepper 横向连接线 RTL 镜像缺失(视觉复核实抓):连接线用物理
left:50%; width:100%单向延伸且无镜像——RTL 下绿/蓝线段画到上一步、第一步骤多出悬空线到容器边缘、末步骤缺线;改inset-inline-start随书写方向自动镜像(oas-steps同类线已有 data-rtl 镜像块,仅 stepper 漏网) - oas-table 死 token:
--oas-color-primary-soft/--oas-color-danger-soft/--oas-shadow-md三处引用改为主题化color-mix回退(原为未定义变量,被 token 守卫判红) - oas-slider 纵向拇指 hover 放大从未生效(死选择器)+ hover 能力守卫补位
- oas-toggle-group 纵向贴合首项右上角为直角
- oas-snackbar 阴影入 token;抽屉/对话框打开侧事件对称(补
oas-after-open) - core translator 广播隔离:locale 切换通知循环中单个监听者(组件文案刷新回调)抛错不再阻断其余监听者——修复前一个组件刷新异常会让全库 locale 切换失效
- oas-speed-dial 展开自动聚焦失效(键盘可达性):
.actions的 visibility 在过渡列表中离散翻转(过渡期末端才生效),syncOpen展开后立即focus()落在不可见元素上静默失败,真实浏览器中焦点留在主钮——展开向 visibility 改为立即翻转(无过渡),收起向保留延迟(淡出完成后再隐藏),两侧动画语义不变;回归断言收紧为「焦点必须落在首个子动作」 - oas-float-button
trigger="manual"完全受控语义:外点与 Esc 不再自动收起(收起由宿主expanded属性全权驱动),修复受控 demo 切换钮与文档级捕获监听打架;demo 宿主补定位上下文(展开层锚定主钮)+ 回归固化「展开层相对主钮偏移」断言 - SSR/DSD 逃生口用例 flake 根治:JS 冒泡派发 + shadowRoot 查询;SSR 白名单补
oas-app-bar与 DSD 验收 fixture,白名单文档对齐源码
文档
- API 表工具链补全(面板出口自动化):CSS 变量出口收割进
docs/api-manifest→ API 表新增「CSS 变量」组(平衡括号扫描不漏变量、源码声明值兜底、组件作用域 theme token 放行、同前缀数字出口折叠为{1..N});插槽收割补 light-DOM 标记式([slot="x"])与代码式(getAttribute('slot'))读取,去重归一形式、排除内部保留标记与内部管线插槽 - 全库 API 段统一版式:所有组件页统一为
### oas-xxx+#### 属性/事件/插槽/CSS 变量(单/多标签同一生成路径);CSS 变量表按需增列「说明」;补齐 68+ 条插槽说明与关键组件变量说明(spin/steps/sidebar/notification/tag 等),旧手写重复段由生成器认领消除 - 英文 demo 页缺块补齐(6 组件)中英块数全对齐;
ssr边界说明、bottom-sheet 文档页与侧边栏/总览接线
优化
- perf 预算重定档(cdn/全量入口天花板、table/theme 分量重定;闭包测量只计静态导入,动态
import()不计初始负载) pnpm release:check版本一致性硬校验脚本 + pre-push 钩子(tag 指向版本不一致拒推)
2.5.3 - 2026-09-14
特性
- RTL 逻辑方向化(全组件批次):在 v2.5.2 方向解析基建上全量铺开——浮层定位接线补全(avatar-group / table / popconfirm / popover / tooltip / color-picker / cascader / dropdown / tour 统一传
direction,RTL 下主轴与对齐自动镜像);hover-card 自研定位接镜像;menu 级联子菜单逻辑 inset + 翻转判定接 isRtl;全库物理方向 CSS 逻辑属性改造(input/transfer/menubar/navigation-menu/table/timeline/code 等);方向敏感行为镜像(switch knob / slider 滑选 / rate 半星 / segmented·toggle-group·radio-group·dynamic-tags·tabs·toolbar·navigation-menu 方向键 / steps 序号与 arrow 形态 / sidebar 折叠与拖拽 / splitter 拖拽 delta / page-header 返回箭头);代码块与数学公式内容保持 LTR 不镜像;显式物理 API(badge corner、float-button 位置、drawer/timeline/sidebar side 等)保留;dir属性观察触发重判定(运行时切方向即时生效,dir为全局约定属性不进 API 表)
修复
- ellipsis 3 处断言对齐 i18n「开箱即用」默认翻译行为(方向接线使 i18n 模块进入其模块图后,t() 返回 zh-CN 译文而非裸 key——既定设计,非行为回归)
2.5.2 - 2026-09-13
特性
- 国际化扩充(多语言 + 按需加载 + RTL 公共机制):内置语言包由 2 种扩到 10 种——
zh-CN(默认)/en/ja/ko/de/fr/es/pt/ru/ar(RTL),每包 key 全集与zh-CN一致(completeness 测试兜底);主入口仅带zh-CN,其余为 tree-shakable 子路径并提供loadLocale(name)动态import()按需加载(独立 chunk,调用时才下载);Locale.dir+getDirection()+resolveDirection()+computePosition(direction)组成 RTL 公共机制(select / combobox / auto-complete / tree-select / date-picker / time-picker / mentions 的 start/end 对齐镜像);getWeekStart由写死改为 locale 感知(查表 +Intl.Locale回退)。日期/数字沿用原生Intl,新增语言无需额外翻译
2.5.1 - 2026-09-13
特性
- oas-bottom-sheet(新组件,移动端底部抽屉承载件):底部升起面板 + drag handle 下滑超阈值关闭 + backdrop 点击关闭 + Esc 关闭 + safe-area-inset-bottom 刘海屏手势区 + 焦点陷阱;
max-height(默认 85vh)/open受控 /oas-close(detail{ reason: drag | backdrop | esc });passive被动透传模式供浮层组件 PC 形态结构占位(SSR/客户端结构严格一致) - 浮层组件移动形态(bottom-sheet 底部抽屉承载):select / date-picker / cascader / tree-select / time-picker / combobox 在触屏(coarse pointer)或窄视口(<768px)自动把下拉切换为底部抽屉承载,PC 形态不变;各面板适配(双月滚动/多级横滑/搜索+树/时间列/列表滚动;date-picker 单月面板水平居中 + 触摸友好宽度、范围双月堆叠成单列纵向滚动)
- 触摸目标 ≥44px:新 token
--oas-touch-target-min(默认 44px),@media (pointer: coarse)下浮层 option/item 最小高度抬升,桌面(fine pointer)不受影响 - 触屏 hover 降级:tooltip / hover-card / popover / dropdown 在 coarse pointer 下 hover 触发自动降级为点按切换(外点关闭;长按打开 800ms 内抬手跳过防误关),PC 的 hover 行为不变
- switch 块级整行热区:块级拉伸(如竖向 flex 容器)时宿主整行可点,对齐移动端设置项整行点击语义
- 浮层视口适配:新增共享
getViewport()——浮层碰撞边界优先visualViewport(软键盘/浏览器工具栏/捏合缩放时用户真正能看到的区域),回退innerWidth/innerHeight;全部浮层组件统一消费 - 移动端硬伤 + 高频缺口收口(第二批):upload picture-card 触屏操作可达(coarse 常显 + 44px 热区);transfer 窄屏纵向堆叠 + 按钮式排序;stepper 窄屏横向溢出滚动;tag 关闭×/整签、button 本体触控目标 ≥44px;date-picker 日格/time-picker 列/combobox 选项/calendar 日格/command 选项/pagination/anchor/breadcrumb/toolbar/tour/tree 展开钮/carousel 箭头圆点/table 小钮触控目标抬升;message/notification/toast/popconfirm 横幅窄屏 vw 宽度保护 + notification peek 栈触屏 tap 展开;popconfirm trigger=hover 触屏降级 tap;transfer/dynamic-tags/table 拖拽改按钮式(触屏替代 HTML5 DnD);navigation-menu 顶级 bar 溢出「···」收纳;image/image-group 预览 pinch 双指缩放;table 过滤面板走共享 floating 引擎视口夹取
- bottom-navigation
pill胶囊形态:悬浮胶囊导航——tablist 全圆角(--oas-radius-full)+ 悬浮边框 + 投影 + 窄屏自动收窄,fixed 悬浮加底部留白;内缩/投影走--oas-bottom-navigation-pill-inset/--oas-bottom-navigation-pill-shadow变量开口,dark 自动 token;默认关闭,与 fixed / hide-on-scroll / safe-area / layout / show-label / shift 全兼容;受控 value + roving 键盘 + aria-selected
修复
- 浮层组件移动/PC 形态切换不重判定(须强刷):select / date-picker / cascader / tree-select / time-picker / combobox 的移动形态此前只在
update()/打开时判定一次,窗口缩放、横竖屏、设备仿真切换 PC↔mobile 后形态冻结、要强刷才对。新增共享watchMobileSheetMode()(订阅pointer:coarse+max-width越界才触发)→ 形态一变即重判定,展开态同步重排承载方式(底部抽屉 ↔ fixed 锚定) - 移动端专项视觉复核实抓修复:calendar 触屏日格
min-width撑破 7 列致周日列被裁(收窄为只抬高度);upload picture-card 删除× dark 对比度不足(徽标底色/字色成对 token);docs 演示块按钮行不换行撑宽布局视口致右锚定 notification/toast 窄屏出屏(docs 侧 flex-wrap + 窄屏 overflow-x:clip);image 预览工具栏窄屏竖排分行(nowrap + 横向滚动收纳) - tree
parseIdList数字 key 静默丢弃 + 非法输入零告警:v2.5.0 契约收紧为 JSON 数组后,expanded/checked/multiple 态selected传入数字 key 的合法 JSON 数组(如expanded="[1,2]")被typeof string过滤静默丢弃成全折叠/全不选;解析失败(典型:旧版逗号串)无任何提示。修复为数字 key 统一String()归一化(空串/undefined/null项滤除),解析失败按空集合回落并在 dev 下console.warn一次(同值去重,文案含迁移写法)。回归:oas-tree.test.ts 单测 2 例 + qa-regression/tree.spec.ts 固化断言(oas-ui-templates 三端 menus/dept 页实抓上报) - select / combobox / auto-complete / tree-select 浮层首次展开未左对齐:定位时先用面板固有(塌缩)宽度算 left、之后才把宽度撑到触发器宽 → 首开偏右(实测 +70~89px),再开才对齐。修复为先按触发器宽度撑开、再测量、bottom-start 左缘对齐,首开即与再开一致(cascader 面板取内容固有宽度不受影响)
- date-picker 面板右侧大片空白:月/年网格 1fr 轨道在 shrink-to-fit 容器下塌缩到内容宽、把面板撑到 378/431px 且右侧留白。修复为非范围面板收窄为 240(与日网格同宽)+ 月/年网格显式等宽 + 范围面板两栏 flex 均分(month/year/monthrange/yearrange/daterange 留白归零)
- date-picker 单元格渲染 demo 日期数字丢失 + 每格误现标记点:内联
<template slot="cell">被 Vue 编译管线吞成空模板,组件克隆空模板后清空日格 → 日期数字全消失。修复为组件侧fillCells加防御(模板为空不清空日格、保留日期数字)+ demo 改 JS 注入模板;标记点改为只给指定日期追加(原模板内置默认红点导致每格都有点)
2.5.0 - 2026-09-09
特性
- card 可选中卡:
selectable+selected——点击整卡切换选中态(卡内按钮/链接/输入不触发),键盘 Space/Enter 等价,role=checkbox + aria-checked 同步(多卡组宿主可挂 role=radio 自行互斥);选中态为 primary 描边 + 浅底 + 右上勾选角标;受控/非受控双模式(设了 selected 即受控——组件只派发oas-change不自改,宿主监听回写);与 href 同设时点选优先不跳转、loading 不可选 - image 预览自定义工具栏:
template[slot="toolbar"]克隆替换默认按钮组 +oas-toolbar-render事件(detail{ element, actions })——actions 十命令(缩放±/旋转±/翻转×2/下载/关闭/翻页±)供宿主按钮接线;image-group 共享预览透传 - image-group(新组件):容器收集式图集——把多个
<oas-image>放进<oas-image-group>自动收集为共享图集,点击任一图片从该张起打开共享预览(prev/next 整组翻页、页码指示、缩放/旋转/翻转/下载全套);子图动态增删自动同步;current可选受控 +oas-change(detail{ current, prev }) - carousel 卡片模式:
type="card"——当前卡居中占主体(卡宽/卡间距/邻卡缩放走 CSS 变量),左右邻卡部分露出并缩小降透明,点击任一邻卡直接切换;与 slides-per-view/fade/vertical 互斥(卡片模式优先),箭头/指示器/自动播放/拖拽/循环全组合;非循环模式首尾屏贴边不悬空 - carousel 显式暂停按钮:
pause-button——自动播放的显式 pause/play 控件(显式暂停优先级最高,暂停后移开鼠标也不自动继续;未开自动播放时点击即开启);aria-pressed与文案随暂停态同步 - countdown 正计时:
type="countup"+start(毫秒起点,默认 0)——从起点往上递增计时、无终止点;active暂停/恢复(冻结真值、恢复续走不重置),reset()归零重新开始;走时变化复用oas-change(detail.value 为已计时毫秒) - ellipsis 多行省略:
lines(行数,rows 同义别名)+direction="tail|start|middle"——多行中部省略保留首尾(镜像测量截断,无布局环境兜底全显);suffix保留指定后缀不被裁掉(如.pdf);expand-trigger="click"省略态点文本本体即展开(键盘可达) - watermark 渲染引擎转 canvas:SVG data-uri → canvas 绘制(特性检测,无 canvas 环境自动回退 SVG 路径),DPR 高清处理防模糊;文字多行/旋转/间隙/偏移/字体/尺寸全量迁移、错位排布/移动拖拽/防篡改机制无损;主题切换自动重绘;新增
grayscale图片灰阶滤镜(跨域/加载失败回退原图) - watermark 文字 tile 缺省按内容自适应:
width/height未显式设置时按「文字旋转外接框 + 内边距」计算 tile 尺寸——修复固定 240×120 大 tile 在窄容器里文字残缺难辨的问题,默认密度下每个平铺单元完整容纳文字(显式设置时行为不变,图片水印缺省维持 240/120) - watermark 空容器兜底:无 slot 内容的宿主在 flex 容器内宽度塌缩为 0 导致水印不可见——空态默认撑满容器宽(
:host(:empty) { width: 100% }),非空用法零影响 - watermark 全屏水印:
fullscreen属性——fixed 铺满视口、不拦截交互、滚动不随,z-index属性可覆盖默认最高层级 - log 搜索过滤:
keyword属性非空时只显示命中行(大小写不敏感),命中片段高亮(warning 语义底色),派发oas-search(detail{ keyword, matched, total });过滤不改宿主数据、行号与级别着色按原始索引不错位;空命中显示无匹配空态 - gradient-text 文字描边:
stroke描边宽度 +stroke-color描边颜色(缺省语义色亮暗自适应)——渐变与描边共存(渐变填充覆盖内圈、描边透出外圈),支持background-clip的浏览器生效、其余回退普通前景色+描边 - tree 节点重命名:
can-rename总开关(节点数据可加renamable: false细粒度排除);双击节点 label 或选中后按 F2 进入内联编辑,Enter/失焦提交、Esc 取消还原;提交派发oas-node-rename(detail{ key, label, oldLabel }),宿主受控回写数据;编辑草稿跨树重建保持、虚拟滚动行内可编辑、编辑期方向键归输入框不干扰树键盘导航 - tree 展开/收起过渡动画:
motion开关(默认关)——展开新增子行从 0 高平滑生长到自然行高、收起先收缩离场再移除;时长/缓动走--oas-transition-*token;虚拟滚动模式降级淡入;prefers-reduced-motion自动停用 - list 分组吸顶:
data项支持group(同组连续项归一段,自动插入组头)与groupLabel(组头文案,缺省回落group);普通渲染模式下组头在列表滚动容器内吸顶(position: sticky,下一组头到顶顶走上一组头);虚拟滚动模式自动回退全量渲染、组头不吸顶 - virtual-list 动态行高:
dynamic-height开启后各行高度可不同——未测行按estimated-item-height(缺省沿用item-height)预估排布,窗口行由 ResizeObserver 实测回写并逐步修正总高与偏移;视口上方行高变化自动补偿 scrollTop 保持视觉锚定(向上滚动不跳动);scrollToIndex动态模式按高度表定位
修复
- list 选中行 hover 文字不可读:
clickable行 hover 浅灰底压盖selected选中蓝底(白字白底不可读)——选中态 hover 保持 primary 系底色,文字保持可读 prefix/suffix属性与 DOM 内建只读prefix冲突(Vue 下属性被吞 + 控制台告警):prefix是 DOM Element 内建只读属性(XML 命名空间前缀),框架(如 Vue)在自定义元素 upgrade 前对其走 property 赋值会撞只读 getter 报错并丢失值。已将视觉前后缀属性迁移到不与内建冲突的prefix-text/suffix-text(对齐主流 Web Components 库命名),prefix/suffix保留为纯 HTML 使用的遗留别名(组件内自动迁移、文档注明);触及组件:input / input-number / statistic / countdown / tree-select。mentions 的触发符属性prefix改名trigger(触发符语义,prefix保留为遗留别名),事件 detail 的prefix字段保持不变(对外契约稳定)。同时删除为对抗该冲突而存在的override get/set prefix访问器补丁(其既是冲突根源也是 vue-prop-hijack 门禁漏报的原因),normalizeLegacyAlias归入 OASElement 基类统一处理。- 能力子包子路径语义修正(回归根治):v2.4.1 把 tabs/table/modal/color-picker/popover 的重型能力拆成能力子包后,组件子路径入口变成 core-only、既有子路径消费者能力静默失效(dev 告警一次、生产无声)——五组件主路径
index.ts恢复内置能力 import(同一组件任何主路径引入行为一致),各新增/core纯核路径作显式瘦身 opt-in,五处 dev 告警文案同步翻转;每组件新增入口语义测试对(主路径断言能力已激活 / 纯核断言静默失效 + 告警一次)
变更
@oas-ui/react不作为独立交付物发布:降级为仓库内可选工具包(包保留:useOasEvent/useOasEvents+ README + 8 单测;不随版本发布、不写入发布清单)。依据:实测证实 React 19 原生「on+ 全小写字面量」写法(<oas-button onoas-submit={...}>)即可监听oas-*,多数场景零依赖即可;桥接 hooks 仅解决 camelCase 惯例、TS 类型、React 17/18 兼容三类场景。getting-started 中英改为「原生优先、hooks 可选(仓库内提供)」
2.4.1 - 2026-09-06
特性
- 组件内能力子包(按需打包):五个组件的重型可选能力拆为独立子包——
table/edit(行内编辑)、tabs/manager(双击重命名/右键菜单/拖拽排序)、modal/prompt(输入确认)、popover/contextmenu(右键光标定位/触屏长按/断点简写)、color-picker/designer(2D 色域/渐变设计器)。import 即注册、顺序随意(晚加入对已挂载元素自动补齐);按需引入组件时默认不含(配置静默失效 + dev 告警指引);全量入口与 CDN 族包内含无感知。getting-started 中英双版补能力子包对照表 - 能力注册表晚加入(late-join)订阅:宿主构造快照之外,connected 期订阅注册通知 + 断开退订防泄漏 + 按名幂等注入——入口求值顺序、打包器重排、按需「先组件后能力」、运行中动态 import 场景全部自愈
- 反馈/基础/布局组能力收尾:
- progress:indeterminate 不确定态 / warning 状态 / color+track-color 自定义色 / striped(-flow) 条纹 / steps 步进分段 / buffer 缓冲段 / dashboard 仪表盘 / 尺寸档 / stroke-linecap / aria label / 状态图标真 SVG / text-inside 内嵌文本 / max 值域;默认 slot 自定义文本
- skeleton:loading 受控切换 + 默认 slot 真实内容出口 / effect 三档(sheen/pulse/none)/ count 份数 / widths 逐行宽度 / delay 防闪烁;新子组件 oas-skeleton-item(text/title/avatar/button/input/image/rect 七形态 + width/height/effect)
- empty:title 双通道 / description 富内容 slot / size 档位 / 图标型媒体 / 内置简约插画 / 横向布局 / 容器变体
- result:status 扩 403/404/500(专属自研图标)/ icon slot / 默认 slot 内容区 / 状态图标真 SVG 化(替文字字形)/ description slot / size 档位
- tag:icon-end 尾部图标;grid:columns 断点简写(对齐 space 协议)+ min-child-width 自适应宫格(auto-fit+minmax)
- FAQ 新增「组合模式(React 迁移视角)」:asChild 的包装元素消除问题在 Web Components 下不存在(host 即元素本身)、换根语义走属性驱动、触发器组合走 named slot、Portal 对应 append-to 体系
修复
- table 行内编辑真实双击不生效:真实双击首击触发行选中重建 tbody → 被击 td 脱离文档 → 浏览器不派发 dblclick(事件流实证),编辑永不进入;修复为 click/dblclick 双委托到 update 中存活的
<table>节点 + 同行同列 500ms 手工双击判定 + 重查活节点 + 同格重入守卫 - table 进/出编辑列宽行高跳变:编辑器内在宽度(input size=20 默认 / select 最长选项)成为 auto 布局 min-content 贡献撑宽整列、操作列两态按钮变宽挤压邻列;修复为不可见占位保原文本布局贡献 + 编辑器绝对定位零贡献 + 操作列两态同槽叠放(inline-grid 同格),实测列宽行高三态零跳变
- table 表头吸顶失效(非固定列):
th[data-key] { position: relative }(列宽拖拽手柄定位上下文)同权重居后覆盖表头吸顶 sticky,年龄/城市/邮箱等表头随表体滚走;删除覆盖(sticky 同为定位上下文,天然供给拖拽手柄) - table 子元素声明式通道在 Vue 宿主内容行全空:列标识
key是 Vue 模板保留字被剥离不到 DOM;改 key 双通道读取(key ?? data-key),demo 中英全部改写data-key并补保留字注记 - table 多级表头竖线语言归一:非 bordered 表全表无竖线,删除
header-group左线孤例(曾致「地址有线、成绩没线」不一致);竖线只属 bordered 全网格模式 - progress SSR 空属性噪声(空 status 不再序列化出空 data-status/class)
测试
- tour 滚动隐藏回归用例改不变量断言(rAF 逐帧采样 + 环境分形:有动画帧则途中每帧必须隐藏,瞬跳则断言终态正确;headless Chromium 把 smooth 滚动瞬跳导致旧用例恒红)
2.4.0 - 2026-09-01
破坏性变更(迁移说明)
- 源码目录统一到文档站语义七组(
59b45c6):源码目录 = 文档站语义组 = 用户心智单一权威。floating/拆空(menu/dropdown/contextmenu/menubar/navigation-menu/toolbar/command/speed-dial →navigation/;tooltip/popover/hover-card/backdrop →feedback/;scroll-area →layout/;config-provider/app/theme-editor →framework/);layout/的 tabs/pagination/steps/affix/page-header/float-button →navigation/、segmented →form/;data/的 masonry/aspect-ratio →layout/。ESM 旧路径直接 breaking 不保留别名(22e8749)——如@oas-ui/ui/floating/menu→@oas-ui/ui/navigation/menu,import 路径机械替换即可;unpkg深链dist/floating/*同步失效 - exports 收敛:仅剩
././ssr/./cdn/*/./*四键
特性
- 11 组件能力增强:alert(icon/description/action 插槽/variant/banner/center/max-line/prominent/size)、notification(四角定位/max/hover 暂停/key 更新/进度/footer/priority/折叠层叠/content 富通道/size)、message(类型图标/loading 链/closable/placement/max/Node 富通道/动画/编程暂停/avatar spinner/声明式)、toast(生命周期/onClose/按 id 更新/max priority/全局默认/读屏/进度/去重/滑动/折叠堆叠/受控声明式/plain translucent)、drawer(四向 placement/生命周期/滚动锁/焦点陷阱/before-close/loading/resizable/移动端手势/函数式/嵌套层级/destroy-on-close/初始焦点)、snackbar(堆叠不重叠/hover 暂停/Esc/FIFO 排队/滑动关闭/计时进度/合并徽标/inert Tab 序)、popconfirm(ok-loading 异步/焦点恒定/alertdialog 语义/theme 三态/hide-icon/description 双通道/oas-open-change reason/actions 插槽/show hide 方法/placement 12 向)、backdrop(内容插槽全屏 loading/color 任意值+11 预设/opacity/blur/淡入淡出 afterShow afterClose/persistent/读屏关闭)、spin(delay/tip/自定义指示器/size 任意值/percent/paused/全局默认/SSR 水合)、loading-bar(会话计数/to 局部容器/增量曲线/生命周期/reverse RTL)、popover(25 项:ARIA 关联/trigger-keys/trap-focus/外点 Esc/size 档/available-height/header-footer/finalFocusEl/sticky/contextmenu 光标定位/dismiss-on-select/breakpoints/render-panel)、tooltip(滚动跟随/close-on-scroll 外点/label 语义切换/箭头 side/follow-cursor/宽随触发器/touch 长按)
- color-picker 两期增强:一期(placement 12 向碰撞翻转/alpha 通道/color-format 解析宽容 148 命名色表/clearable/size 三档/hex 输入/trigger slot/show-text/open 受控/disabledAlpha readonly uppercase/任意格式预设/EyeDropper 降级);二期(2D 饱和度-亮度色域+hue 竖条 role=slider 拖拽与方向键/gradient 渐变模式多 stop/inline 纯面板形态)
- modal 三期增强:prompt 全套(input-value/validator 三态校验/inputPattern/错误态/初始聚焦/异步 loading)+ dialog 核心(滚动锁嵌套计数/before-close 含来源/Esc 遮罩关闭钮开关/footer 插槽/destroy-on-close/命令式 update/append-to/position top/焦点开关/aria-describedby/alertdialog 语义)+ 二期(开关动画/oas-opened oas-closed/非模态 no-mask/拖拽钳制/声明式 trigger/fullscreen 断点/confirmOnEnter/shake 防误关/close-icon 插槽/options 选择模式)+ no-footer 底角圆角修复
- title 双轨(属性简单通道 + slot 富内容通道):title 吸收(读取渲染后从宿主移除,消除原生 tooltip)+
slot="title"富内容(14 组件);ui-spec 沉淀原生全局属性吸收约定 - CDN 族包多入口构建:七族 IIFE 产物
dist/cdn/{basic,layout,navigation,form,data,feedback,framework}.js(族包自包含:基座内联 core+i18n+icons 运行时 + 框架级三件注册)+cdn.js全量保留;规则「≤2 族引族包、≥3 族引全量」;getting-started 双版新增按族引入段
修复
- demo-coverage/qa-regression 欠账清零(33→0):popconfirm 打开焦点从未生效(update 顺序 bug——面板 display:none 时对 ok 调 focus 静默失败,改为先设 aria-hidden 再聚焦);demo-coverage wait 步从未执行(历史约定参数放 sel 但分发器只读 act)
- drawer 四向 placement 面板停在屏幕外(CSS 顺序依赖)、message 图标首行对齐补偿、modal no-footer 底角直角
杂项
- 六发布包 package.json 补 homepage 字段(npm 包页链接指向文档站)
2.3.2 - 2026-08-31
特性
- 导航组七组件深挖:oas-steps(prefix/max-count/reverse/content-placement/arrow 分格/lineless/separator/simple/percent/responsive/status/id/extra/disabled/oas-before-change)、oas-pagination(disabled/size/simple/show-edges/hide-on-single/pager-count/省略号跳页/href-template/responsive/page-item/show-more/total-boundary/oas-before-change/当前页 hover 修复)、oas-affix(position bottom/append-to/oas-change)、oas-float-button(shape/type/size/extended/disabled/href/draggable+magnetic/tooltip 组合)、oas-speed-dial(trigger hover/主钮插槽/oas-open reason/hide-label 气泡/geometry 圆弧)、oas-bottom-navigation(badge/safe-area/show-label/layout 横排/hide-on-scroll/shift)、oas-page-header(content/footer/breadcrumb/back-icon/title/subtitle/avatar 插槽/ghost/responsive)
- 新组件 oas-stepper / oas-stepper-panel:步骤面板一体机(linear 禁跳/键盘全矩阵/面板联动/DSD 双路径)
- arrow 分格自定义变量:--oas-steps-arrow-gap / --oas-steps-arrow / --oas-steps-arrow-item-bg-1..8
修复
- oas-pagination 当前页 hover 蓝底蓝字不可读
- oas-steps reverse 倒序连接线穿出容器/断档
- oas-steps arrow 分格块间白缝(gap 0 互嵌贴边)
2.3.1 - 2026-08-28
特性
- table:可编辑单元格可感知线索——hover/focus-visible 淡底色(
--oas-color-bg-hover)+cursor: text(sticky 列不透明变体不透出下层滚动内容、条纹/选中行叠加有序、编辑中不适用)+ 铅笔编辑图标 hover/focus 显现(库内 editPath,aria-hidden、opacity 过渡、编辑退出重挂)+title双击编辑提示(zh/en 本地化);保持双击进入(单击会废掉单元格文本选中复制)
2.3.0 - 2026-08-28
特性
- config-provider:
config组件级默认配置 JSON 通道(core 新增readConfigValue(el, tag, key);首个消费键oas-buttonvariant,显式属性优先)direction全局方向注入(写宿主dir属性继承穿透;scroll-area 缺省回落注入值)z-index浮层全局起始值(--oas-z-index-base;浮层 41 处接线为calc(base + 层默认值)——整体抬升且层间顺序保持;overlay portal 通道起始+递增)disabled全局禁用 + 双侧豁免(disabled-skip单组件逃逸 /disabledExempttag 整类豁免;23 个表单族组件消费;toggle-group/segmented 顺带补宿主级 disabled)
- oas-app:
message/notificationJSON 全局默认配置(命令式 API 与调用参数合并、调用优先;注册表 DOM 包含关系判定嵌套就近) - oas-theme-editor:颜色函数值双通道编辑(自研确定性 CSS 颜色解析器 hex/rgb/hsl/hwb/oklch/oklab + 浏览器代理解析兜底;
var()/calc()色板置灰;编辑不再破坏原值)/importJson(json)导入 +exportCss()导出 /preset属性 +applyPreset(name)三套内置预设(compact/comfortable/default,只调尺寸族)/ 数字 token 滑块(range+number 双向联动)/ 组折叠 + token 名搜索过滤 - modal 命令式确认框:
modal.confirm/info/success/warning/error+destroyAllModal();异步 onOk 加载态(Promise resolve 关闭/reject 保持,复用组件既有loading属性);{ close() }句柄、挂最近 oas-app 容器;组件扩type/ok-text/cancel-text/no-cancel/focus-ok五属性 +close()转 public
修复
- app 宿主注册表:单槽位改栈式——嵌套 app 移除内层后外层自动接管(挂载点与配置都回外层,不再回退 document.body);并列宿主移除后注册者先注册者接管
- table 行内编辑退出:exitEdit 单元格重画改走 cellNode(尊重 render/cellTemplate 富内容)+ Esc 取消时 blur 误提交修复(先置 editState=null 再清 input)
2.2.9 - 2026-08-28
特性
- 布局组能力补齐三批:
- grid:
gap两值行列分离 / span·offset 断点简写 /order/justify·align容器对齐 /span=auto自宽列 - flex:
space-evenly/fill·fill-ratio/ direction·gap 断点简写 - container:
fluid流体 /breakout突破(含滚动条溢出裁剪兜底) - splitter:
vertical/collapsible(含oas-collapse事件 + collapsed 回写)/ 双击复位 /lazy/slot=handle自定义手柄 / 像素 min-max /multiple多面板(sizes 数组向后兼容) - scroll-area:编程滚动四方法 /
scroll-shadow/stick-to-bottom/oas-end-reached+end-distance/ RTL - masonry:
columns断点简写响应式列数 /gap两值行列分离 /fresh持续监听尺寸 / 子元素column指定列 - aspect-ratio:预定义 ratio token 六档(
square/landscape/portrait/wide/ultrawide/golden)+ratio兼容 number
- grid:
- masonry:
items数据驱动通道(JSON 数组渲染卡片流,显式优先于 slot、缺省/非法 JSON 回落;字段{ text?, height?, column? };导出MasonryItem类型) - table:
summary-scope=all|page合计范围(all 默认:分页切片前全量合计翻页不变;page 当前页小计)+ scope=all 聚合性能(全量 flat 记忆化、顺序无关聚合跳过排序) - docs:组件分组侧栏与总览页按语义重构;首访语言适配(zh* 留中文、其余 /en/ 兜底 + 手动选择 localStorage 持久化);grid demo 色块 4 级主色梯度循环
修复
- grid:单值
gap真实生效——applyGap 改「先清长hand再写简写」(原顺序在真实浏览器 CSSOM 下简写被清空、computed gap 掉 0;happy-dom 不展开简写单测漏检,ssr-dsd 真水合布局稳定断言暴露)
2.2.8 - 2026-08-27
特性
- icons:新增
form图标(文档框 + 表单横线语义,16×16 线框风,适配 iconColor),图标集 46→47 - form:
collectFields()覆盖常用控件(switch/date-picker/slider/rate/pin-input/dynamic-tags/transfer/combobox)+ 导出registerFormControl(tag, reader?)扩展钩子;特殊 value 通道(transfer 读 model-value、switch 读 checked 态) - layout:
oas-layout新增side属性(left/right/top)控制侧栏槽落位,顶部菜单可复用水平导航 - core:新增
escapeHtml/escapeText/escapeAttr转义工具(OWASP 集合、先转&、null 归空)
修复
- table:行点击忽略交互控件内点击(button/a/input/select/[role]/oas-popconfirm)——修复点单元格内嵌按钮触发行选中+全量重渲染、销毁内嵌 popconfirm 的问题(收敛为 popconfirm 原生自驱动)
- popconfirm:emit ok/cancel 带
detail.source(宿主可稳定反查来源,e.target经 shadow retarget 指向宿主表不可靠) - avatar:首字符契约收敛——保留响应式
text属性、textContent 为连接时快照(去掉了非标准的宿主文本观察)
杂项
- ui:统一 HTML 转义——5 组件(code/equation/chart/date-picker/empty/watermark)改用 core escape 工具;ui-spec 新增 §HTML 注入安全规范 + §组件合并验收清单加注入安全检查项(与 axe 并列)
2.2.7 - 2026-08-27
特性
- table 能力增强(列设置/多列排序/多级表头/分页/列过滤/合并单元格/子元素声明式通道/单元格模板/自定义列头/编辑校验):
- 列显隐(
TableColumn.hidden+ 受控column-keys)、列拖拽重排、列宽拖拽(setColumnOrder/setColumnWidth) - 多列排序(
multi-sort/ SortState 多级比较,表头 sort-index 徽标) - 多级表头(
children递归组头:组列 colspan、叶子 rowspan,数据/排序/显隐/拖拽走扁平叶子层) - 内置分页(
pagination/page-size/current数据切片 + 复用 oas-pagination,oas-page-change) - 列过滤(
filterable/filters/filterMatch+ 表头过滤弹层,filter-values,oas-filter-change) - 合并单元格(
merge连续相同显示值行垂直合并) - 子元素声明式通道(
<oas-table-column>声明列,嵌套表达多级表头;MutationObserver 同步) - 单元格模板
cellTemplate(<template>+row.字段插值水合,声明式替代render函数) - 自定义列头
headerTemplate(<template data-role="header">) - 行内编辑校验
validate(提交前校验,失败保持编辑态 + 显示错误)
- 列显隐(
- core:新增
ReactiveController能力注入协议(宿主生命周期钩子接入 +addController/removeController)
修复
- tabs:纵向(left/right)nav 残留底部横线——去掉默认
border-bottom,仅保留侧边竖线 - table:列拖拽重排精确化(落点按目标列左/右半区定插前/插后 + 蓝色插入指示线 + 源列淡化)
- table:列过滤触发器 focus-visible 改走统一
--oas-focus-ring焦点环(消除浏览器默认黑框) - table:
columnsproperty 函数/模板通路补filterMatch/validate/cellTemplate/headerTemplate序列化豁免
杂项
- perf:table 按需链体积随能力增强更新(26KB → 36KB 预算基线,注明依据);渲染基准同步
- docs:table 新增列设置/多列排序/序号省略号/多级表头/内置分页/列过滤/合并/子元素声明式通道/单元格模板/自定义列头/远程排序 loading demo(中英)
2.2.6 - 2026-08-26
修复
- sidebar 内置图标配 iconColor 生效(实测缺陷):
SidebarItem.iconColor对内置图标不生效(图标仍 currentColor 灰)。根因:iconSvg(name, iconColor)只在<svg>外层写 stroke,但内置图标 path 自带stroke="currentColor"——path 元素级属性压过 svg 外层 stroke,颜色永远 currentColor(模板侧用官方 iconColor 全灰,仅 active 主题色高亮)。修法:iconColor 显式时对 path 的stroke="currentColor"做替换(内置单色 path 着色生效;自定义注册的彩色 SVG 天然兼容无需替换;缺省 currentColor 随态零回归)
2.2.5 - 2026-08-26
新增
- 子元素声明式通道全库推广(breadcrumb 试点范式,items/options 属性显式时数据驱动优先、否则子元素解析收敛同一渲染路径,MutationObserver 感知变化):三批覆盖 12 组件——
- 导航系:
<oas-menu-item>/<oas-menu-group>/<oas-menu-divider>、<oas-menubar-item/-group/-divider>、<oas-navigation-menu-item/-group>、<oas-anchor-item> - 浮层触发族:
<oas-dropdown-item/-group/-divider>、<oas-context-menu-item/-group/-divider>(extends menu 数据载体零重复)、<oas-command-item>(keywords 逗号拆分/嵌套递归 page/view/force-mount/separator) - 布局/表单族:
<oas-sidebar-item>/<oas-sidebar-divider>、<oas-bottom-navigation-item>、<oas-option>(对齐 HTML 原生 option 心智,options 显式优先,虚拟滚动共存)、<oas-toggle-item>、<oas-toolbar-toggle-item>(childSig 增量比对) - virtual-list 豁免(unknown[] 数据型 + 模板插槽,无标量可映射)
- 导航系:
- sidebar 深挖批(实测驱动,能力 + 缺陷修复):
hide-toggle:隐藏底部折叠按钮(宿主 opt-out,静态侧栏场景)accordion手风琴同级互斥(与 menu 同语义);嵌套子树平滑展开/收起动画(grid 0fr/1fr 高度过渡 + visibility 联动防聚焦 + reduced-motion 降级)- 嵌套深度机制无限级(递归渲染,3 级实证逐级展开/激活级联)+ 文档边界(≤3 级,更深用 oas-tree)
- 图标通道打通:
oas-icon的 lookupIcon 导出为单一查表点(customIcons → iconRegistry),registerIcon 一处注册 sidebar 可见;SidebarItem.iconColor项级着色;彩色自定义 svg 自带色天然兼容;子项 icon 支持实证 + demo --oas-sidebar-bg背景开口(var 链回落基础 token,三形态各自默认)- child-selected 激活后代指示(主色淡底 + 图标主色,折叠图标条下激活态经父项保留可见)
- date-picker 浮层定位引擎接入:面板从 absolute/left:0 改
position: fixed+ computePosition 锚定触发器(与 select/combobox 同模式,逃出祖先 overflow);新增placement属性 12 向(默认 bottom-start)+ 碰撞自动翻转(右缘右对齐/下方不足上翻/夹取视口内)+ range 双月宽面板同引擎 - radius scale 补全五档:
--oas-radius-xs 2px(控件内微元素)/--oas-radius-xl 14px(大面板/抽屉)——token 按对外能力完备性提供(宿主自定义界面与库设计语言对齐) - icons 增量:organization(组织架构)/ tree(list-tree 泛树形)/ language(globe)/ translate(文A),全部原创线框风(16×16 / 1.5 stroke / currentColor);图标集 42→46
- chart 面积图垂直渐变填充:
options.gradient(默认 false 保持纯色半透明)——每系列 linearGradient 顶部系列色 0.35→底部全透明,demo 中英双版
修复
- sidebar 折叠态系列(实测驱动):
- 嵌套父项死交互(折叠图标条态仍挂展开箭头/aria-expanded,点击零可见变化)→ 折叠态父项渲染为纯图标项(无箭头/无 aria-expanded,点击派发 select)
- 折叠态徽标大药丸溢出 64px 图标条 → 改图标右上角紧凑角标(14×14 主色实底白字)
- 嵌套子菜单点击不折叠根治:
.submenu{display:flex}作者级规则压过 UA[hidden]{display:none}(hidden 只改属性不改渲染)→ 显式兜底(现由 grid+visibility 机制承接)
- sidebar 视觉系列:父子项底色粘连(.item-block 加呼吸 gap);嵌套缩进收敛(图标占位 24→18 + 容器 padding 12→6,label 距引导线 61→49px);引导线对比度(--oas-color-border 压灰底亮度差仅 16 几乎不可见 → text-primary 12% 混色亮暗自适应)
- chart smooth 折线/面积图曲线与末数据点脱节:smoothPath 二次贝塞尔终点 y 误用 p.y(应为中点 my)且缺收尾段——曲线永远停在末两点中点;终点改中点 + 补 L 收尾到末点
- icons:translate 图标「文」字形修正(横下撇捺交叉成乂,此前倒 V 误读为「六」)+ 两字比例与空隙修正(文大 A 小布局、撇捺起点下移拉开倒三角空隙)
- docs:icon.md 自定义图标四通道总览 + 勿直接改 iconRegistry 正路指引;menubar .shortcut 引用不存在的 --oas-radius-xs(随 token 补档根治)
2.2.4 - 2026-08-25
新增
- tabs 右键操作菜单(
context-menu):右键任意标签弹出——新建 / 关闭 / 关闭其他 / 关闭左侧所有 / 关闭右侧所有 / 关闭全部(新建与关闭族间有分隔线,关闭全部 danger 语义色)- 新建派发
oas-add(与addable的 + 按钮同一契约,detail.label为 locale 默认产物名、宿主可忽略自行命名);关闭类按目标集合逐个派发oas-close(与closable同一契约,宿主按 key 移除面板) - 菜单项文案中性「新建」(
tabs.ctxNew),宿主可setLocale展开覆盖为业务文案(如「新建文件」,docs 有示例);光标定位 fixed 弹层 + 视口夹取 + 外部点击/Escape 关闭 - menu 模式键盘 roving:打开即聚焦首项,ArrowUp/Down 循环移动、Home/End 跳首末、Enter 执行
- 新建派发
- tabs more 下拉键盘可达:moreBtn 键盘打开聚焦第一项 + 列表 roving 导航(ArrowUp/Down/Home/End/Enter/Space)+ Escape 回焦触发器 + 搜索框 ArrowDown 进列表(此前仅鼠标可达,键盘用户无法到达溢出标签)
- sidebar 能力全量补齐:嵌套子菜单(
items[].children,激活子项自动展开/折叠隐藏/缩进引导线)、折叠态 tooltip、键盘导航(↑/↓/Home/End)、shortcut(Ctrl/Cmd+B 折叠切换,默认关)、badge(--oas-sidebar-badge-bg/-color)、divider 分隔线条目、loading骨架屏(数值为骨架行数)、expand-on-hover(折叠悬停临时展开,不改 collapsed 受控)、variant(sidebar 贴边 / floating 悬浮 / inset 内嵌)、side="right"、actions 悬停操作按钮(oas-action)、多 sidebar 共存 - sidebar 内置拖拽调宽(
resizable):宿主边缘拖拽条(part=rail)实时改宽并写回width属性,resize-min/resize-max(默认 160~480),键盘 ±8/Home/End 微调,oas-resize事件;仅桌面非折叠态可用 - layout 视口锁定模式(
viewport):admin 场景 opt-in——布局锁定视口高(var(--oas-layout-height, 100dvh),100vh 级联回退,变量开口可改 100%/calc()),顶栏/底栏固定、侧栏与内容各自独立滚动(页面不出滚动条);默认整页滚动模型不变 - sider 内嵌 sidebar 宽度自动对齐:宽度契约「sider 管轨道、sidebar 填满」——sidebar 在 sider 轨道内自动
width:100%(折叠跟随 64),内嵌时轨道卸除 padding;独立使用仍走--oas-sidebar-width(220px),改--oas-sider-width内栏自动跟随,零错位 - modal body 滚动边缘指示:CSS-only scroll shadow(bg 覆盖层 local + 径向阴影 scroll 分层)——顶部无阴影/中部双阴影/底部仅顶阴影,长内容滚动边界一眼可辨
修复
- sidebar 菜单项 hover 零对比:hover 背景与宿主底色撞 token 无反馈——改走
--oas-sidebar-item-hover-bg(默认 text-primary 6% 混色)+ active hover 主色 14%→20% 加深 - sidebar 嵌套子菜单两个视觉缺陷:
.sub类名冲突致激活背景溢出面板右缘(容器改.submenu隔离);无图标子项 label 与父项齐平/偏左(保留图标占位 + label 缩进父项右侧) - splitter + sidebar 组合:sidebar 内联 style 被 update 周期清除致拖拽调宽失效——
width="100%"属性化;e2e 真拖回归固化 - card:无 title 时 header part 仍渲染 33px 空占位——补
.header[hidden]兜底(对齐.cover[hidden]先例) - docs 首页:「性能速览 → 三行代码」两屏间渐变分隔光带缺失(该屏双伪元素被网格/光晕占用)——显式
.home-divider元素承载,与其他屏同位同款
变更
- 品牌标识定稿:新 logo
<(w)>(矮尖括号 Web 标签宿主 + 月牙圆括号 + 连笔波浪 w,三版对比定稿紧凑版),favicon 全套重生成(svg 双主题 + 16/32/180/192/512 透明 png)
2.2.3 - 2026-08-25
新增
- 导航与浮层族复核批(9 组件能力增量):对 tooltip/popover 之外的 9 件按组件深挖流程复核补齐
- tour:
gap双轴偏移([水平,垂直])、arrow-point-at-center、slot=indicators 自定义指示器、slot=actions 自定义动作区 - hover-card:滚动/resize 重定位默认开启、
sticky三档(off/partial/always 贴边不消失)、collision-boundary自定义碰撞边界(选择器 + property 双通道) - command:开合过渡动画(reduced-motion 降级)、search aria-controls 关联 listbox、
append-toportal - breadcrumb:子元素声明式通道试点(
<oas-breadcrumb-item>/<oas-breadcrumb-separator>,items 属性显式时数据驱动优先、否则子元素解析,同一渲染路径收敛)、oas-collapse-click折叠展开事件 - anchor:
oas-click事件分离(与滚动联动 oas-change 区分)、resize 重算、滚动 rAF 节流、block="nearest" - menubar:子项
href真链接(中键新开)、水平溢出收纳「···」(镜像弹层 + 选中反馈)、checkboxindeterminate半选、start/end 插槽 - navigation-menu:viewport 碰撞翻转、面板内二级子导航(sub 字段 + 覆盖式二级面板 + 级联动画 + Esc/← 逐层回退)、
loop属性、panel-footer 营销位插槽 - back-top:
target缺省自动探测最近可滚祖先、tooltip 读屏可达、draggable拖拽(位置持久化) - toolbar:start/end 插槽
- tour:
- 实测第二批能力:
- select:下拉改
position: fixed+ computePosition 锚定(逃出祖先 overflow 容器,不再逼出滚动条,与 combobox 一致) - sidebar:
items.group数据驱动分组标题(part=group,弱化语义色、纯展示不可点;折叠态隐藏、移动抽屉态显示,items JSON 向后兼容) - tabs:
tab-badge颜色开口--oas-tabs-badge-bg/--oas-tabs-badge-color(默认 danger 兼容)+ part="badge",宿主可中性化徽标配色 - menubar shortcut 契约:「修饰键+键」直接绑定;单键仅限功能键(F1–F12)绑定,其余单键仅展示不绑定
- select:下拉改
修复
- tour:断开重连后 document keydown 丢失;advance-on-click 换步旧目标残留监听;append-to 后 slot 断供(portal host 桥接);-start/-end 箭头视口夹取错指;auto-reposition 死代码实装;mask=false 时 aria-modal 降级;高亮框与遮罩孔过渡对齐;append-to portal host display:none 致浮窗 0×0 不可见;弹窗 pointer-events:none 穿透误关;typewriter 布尔属性误判;首打开目标视口外闪现错位
- 浮层箭头统一:标准菱形箭头全家族统一 12px/-6px(居中 calc、ARROW_SIZE 对齐盒尺寸);merge 贴角直角三角独立固定 8px 盒;popover/hover-card merge 描边三修(方向性 drop-shadow 致左缘视觉偏移、贴面板融合边多余描边线、斜边渐变带过细)
- tabs more 下拉:offview 判定从「完全滚出」改为「不完全可见」(部分滚出也算)——部分溢出区间「有按钮 + 空下拉」消除;ResizeObserver 回调补 syncMore(缩窗按钮不出现、扩窗按钮不撤回双向修复)
- layout/sidebar/sider/table 模板缺陷 9 项:sidebar active 受控高亮(aria-current=page)+ drawer-open 纳入 observedAttributes + 移动触发按钮 emoji→SVG + items.icon 注册表名渲染内联 SVG;layout 的 sider slot 判据改
slot="sider"(任意元素可进左轨);sider 与内部 sidebar 折叠联动 + 宽度--oas-sider-width变量开口;table 单元格 render 支持 Node/元素富内容(columns property 保留 render 函数)+:host([hidden])尊重 - menubar:SSR 溢出收纳零宽误判三连修(e2e 水合漂移 38px 根治);scale 动画污染定位测量;divider role/aria-hidden 互斥;typeaheadTimer 清理;checkbox 多选方格与标签间距
- breadcrumb:ellipsis 自裁剪(overflow-x:clip + overflow-y:visible);下拉水平翻转
- toolbar:断开重连后 pointerdown/ResizeObserver 丢失;溢出收纳防收缩(slotted 项被压扁、收纳永不触发)
- hover-card:collision-boundary 坐标系缺陷(边界解析丢 rect 原点)
- command:keydown 重连丢失
- navigation-menu:面板箭头跟随触发器(CSS 引用 --arrow-x/--arrow-y 但 JS 从未写入)
- icons:arrow-up/arrow-down 方向画反(svg 源顶点互换 + 方向类几何断言固化);icon generate 脚本原子化(中断不毁 src/icons);duotone 分层 fallback 劫持 + secondary 双色被抹
- menu:checkbox 多选方格与标签紧贴(补 margin 间距)
- table:summary 行 render 返回 Node 时文本路径守卫
2.1.5 - 2026-08-22
新增
- menu/dropdown/contextmenu 三组件能力补齐(能力补齐):
- menu:
kind="checkbox"多选项(menuitemcheckbox + 方块勾选框,勾选集 JSON 数组写入 value)、danger危险项(红色语义)、href/target/rel链接项、max-height长菜单滚动、typeahead 字符定位(缓冲 + 500ms 超时)、mode="inline"就地展开(高度过渡 + 箭头旋转,侧边导航主流形态)、expanded受控展开 +oas-expand-change事件、accordion手风琴同级互斥、horizontal 溢出收纳「···」(ResizeObserver 检测 + 收纳项镜像弹层 + i18n)、close-on-select选中收起策略(缺省分形态:inline 不收/浮出收,显式覆盖,checkbox 项豁免) - dropdown:
triggerclick/hover/focus 多选、hover-delay/hover-hide-delay防抖、placement12 向、oas-open-change开合事件、整体disabled、hide-on-click、开合动画(fade+scale + transform-origin 感知方向)、close-on-scroll、offset偏移 - contextmenu:
long-press-delay长按触发(触屏右键等价)、show(x, y)/close()编程式开合、受控open+oas-open-change、右键别处关闭、close-on-scroll
- menu:
- 「···」收纳弹层选中反馈:镜像项 radio 语义(aria-checked + 前导 ✓)、选中项被收纳时「···」child-selected 主色高亮 + aria-current
修复
- menu inline 形态三连修:hover 展开与 click 收起相互抵消致鼠标用户展不开(inline 改纯 click-to-expand);inline-sub 作为 flex 子项与箭头并排(子项跑父项右侧 → 整行换行);inline-sub 包裹层冒充 role=menu 致 axe aria-required-children/parent 严重违规(role 移到内部 ul)
- menu 水平模式浮层裁剪三连修:
.menu容器 overflow:hidden 双轴裁剪致子菜单浮层不可见(改 overflow-x:clip + overflow-y:visible);「···」收纳项被误纳入收纳计算致自身隐藏(选择器排除 + 测量前复位 + 收纳项占宽扣除);「···」弹层右缘截断 + child-selected 高亮色继承进弹层(右对齐右缘 + 颜色字重重置) - menu inline 展开态误收:select() 与 mouseleave 的清空逻辑对全模式生效(inline 侧边导航展开态是持续导航上下文,双双加模式门控;浮出形态保持瞬态收起惯例)
- docs:GA 仅生产环境注入(dev 不加载 gtag)
2.1.4 - 2026-08-22
新增
- basic 族 12 组件能力复核补齐(能力补齐):
- button:
icon-end双侧内容(左图标+右下拉箭头)、loading 保持宽度(spinner 居中不撑宽)、loading-text加载文本、loading="auto"异步自动 loading、disabled-focusable禁用可聚焦、download/rel透传 - button-group:
spread均分铺满、组级variant/round透传 - tag:
close-icon自定义关闭图标 +close-label朗读名、loading异步关闭(oas-closedetail 含done()回调)、checked-icon选中勾选图标 - badge:
bordered白描边、icon徽标内图标、aria-live 数字变化播报、variant="outline"描边形态、size三档 - typography:
align对齐档、weight字重档、numeric数字等宽、mark 自定义色(--oas-text-mark-bg) - ellipsis:
direction="start|middle"省略方向(保留首尾中部省略) - link:
download透传、size字号档、loading态 - divider:垂直
content-position(top/bottom 贴顶/贴底)、text-orientation文字方向(横排/竖排)、垂直inset/middle缩进留空 - kbd:语义键名映射(command→⌘ 等 30 键 + abbr 全称朗读)
- label:
size/weight档 - space:弹簧占位 demo(文档级)
- button:
修复
- divider 垂直带文字渲染:容器宽度被压成线宽致文字竖排 + slot display:contents 致线段不显示 → content 包裹层 + 容器宽度由内容撑;垂直 inset/middle 留空改 grid 行模板(行%相对容器高度,margin%相对宽度不适用垂直)
- button 链体积预算顶格:button 能力增强后实测 22.5KB 超预算 29B,预算上调 22KB→26KB
2.1.3 - 2026-08-21
新增
- Tabs 能力全量补齐(能力补齐):
- 基础:
oas-tab-paneldisabled禁用、size五档、centered/justified布局、溢出滚动+左右箭头(without-scroll-controls关闭)、滚轮横向滑动 - 溢出
more:滚动 + 视口外标签镜像下拉(通用机制,标签不隐藏),搜索过滤、点选平滑滚动到可见区(激活项与相邻项一起进入视口) - 面板显隐
panel-mode(keep/lazy/destroy)、键盘激活activation(auto/manual)、animated动画、oas-before-change切换前拦截(cancelable,preventDefault veto) editable双击重命名(失焦保存、宽高贴合原标签)、sortable拖拽换位(oas-reorder)、嵌套 tabs(:scope只认直接子面板)、slot="label"自定义标签- 新增/激活标签自动平滑滚动到可见区、
addable+ 按钮固定标签栏末尾不随滚动遮挡 - 能力复核补齐:
trigger="hover"、allow-deactivation、stacked图标堆叠、icon-only纯图标、指示线定制(--oas-tabs-indicator-color/--oas-tabs-indicator-size)+hide-indicator、reserve-selected-space选中防抖、tab 即链接(href/target/rel)、hide-content纯导航、items数据驱动、scroll-position滚动定位、PageUp/PageDown 键盘溢出滚动、slot="add-icon"/slot="close-icon"图标自定义
- 基础:
修复
- Tabs 选中下划线渲染:溢出滚动容器下被裁剪/叠加/亚像素伪影 → 改用
::after伪元素(独立 2px 盒子,渲染精确、不被裁剪、粗细均匀),card 模式保持边框连通不叠加 - more 下拉搜索过滤视觉不生效:
.more-item[hidden]显式display:none(.more-item的display:flex曾覆盖 UA hidden 致数据过滤但视觉仍显示) - 首页页脚:品牌位
</>符号改真实 logo 图标(favicon.svg / dark 用 favicon-dark.svg,与导航栏一致);消除底部 128px 空白(vitepress.VPHome默认 margin 残留);版权行底部间距 56px→32px
2.1.2 - 2026-08-20
新增
- menubar/menu 多组单选独立勾选(集成反馈 #4):
value支持 JSON 对象字符串({"mode":"preview","theme":"dark"})按组 id 作用域独立记录;type:"group"项的value作组 id,组内点选只更新该组;纯字符串保持全局单选兼容旧用法(menubar 与 menu 同步生效,即 #10-3) - 动作项
kind="action"(集成反馈 #5):menubar/menu 叶子支持动作语义——渲染menuitem(无 aria-checked、无勾选态)、点击只 emit{value, kind:'action'}不写回 value;默认 radio 兼容 - menubar
shortcut快捷键(集成反馈 #2):叶子shortcut字段,右侧 kbd 视觉提示 + document 级 keydown 自动绑定(Ctrl+N 等,preventDefault 拦截浏览器默认,裸字母键不响应)
变更
- 事件 detail 联合类型:api:scan 改进——同一事件多处 emit 且 detail 不同时合并为联合类型(如
oas-select={value} | {value, kind:'action'}),editable/pagination/input-number 等分支 detail 一并补齐 - 文档标注(集成反馈 #10/#10a):API 表说明事件
detail的originalEvent非原生 Event(不能直接preventDefault())、data-value是内部定位属性宿主不应依赖
2.1.1 - 2026-08-20
变更
- 8 个发布包 README 中英双语化:单文件
[中文](#中文) | [English](#english)锚点切换,默认中文在上,顶部与 English 段前各一条切换栏;顺带完善各包安装/使用/相关包引用与文档站链接 - CDN 引用版本号
@1→@2:文档站/README 中 unpkg 引用随主版本升级(当前 2.x,解析最新 v2.1.1)
2.1.0 - 2026-08-20
新增
- 集成反馈批次(真实项目集成反馈落地):
- slider / input-number 受控状态写回宿主
value属性(与 switch/radio-group 一致的双向受控语义,宿主getAttribute/ 表单序列化直接可读) - modal 视口高度保护:
max-height: 90vh(--oas-modal-max-height可调)+ body 超出滚动(flex 列布局),小窗口下标题/关闭钮始终可达;fullscreen 不受限高影响 - tabs 非激活项 hover 反馈(line 模式背景 + 文字向激活态靠拢;card 模式浮起面向内容底色靠拢)
- 间距刻度补中间档:
--oas-space-1_5: 6px/2_5: 10px/4_5: 20px - 集成 FAQ 页(
::part()不能接属性选择器、无法穿透后代、事件时机、主题跟随等,中英双版)+ 快速开始补「事件约定(重要)」专段与自定义 CSS 主题跟随提示
- slider / input-number 受控状态写回宿主
- button:
variant形态维度(solid/outlined/dashed/filled/text/link,与 type 正交)、color自定义色、wave按下反馈、auto-insert-space中文间空格、autofocus、wrap长文换行 - button-group:
pill胶囊、分隔符(oas-button-group-separator)、嵌套组、拆分按钮组合用法 - icon:
spin/rotate/flip、registerIcon单个注册、registerIconLibrary远程图标库、animation动画预设、duotone双色、canvas占位框、depth透明度层级 - tag:预设色板(11 色)、
dot/processing状态点、hit/strong、multiline多行、max-width省略、checkable/checked可选中、variant三形态、color、avatar 适配、键盘删除;新增 oas-tag-group(单选/多选选值组) - badge:
standalone独立徽标、color全模式(语义/预设/任意色值)、offset偏移、status状态点、attention吸引动画(pulse/bounce)、corner四角定位、overlap圆形内收、ribbon-form 七形态(diagonal/triangle/bookmark/side/seal/banner/flag/rolled/zigzag/rounded/arrow)+premium金属质感 +ribbon-size/ribbon-direction/ribbon-vertical/ribbon-anchor位置体系 +ribbon-position(hang/edge/cross) - space:
separator分隔符(字符串 +slot="separator")、justify分布、reverse反向、size数组(横向/纵向两值)、fill/fill-ratio填满、响应式断点简写(direction="column md:row");新增 oas-compact(相邻表单控件贴边合框:vertical/disabled/block) - divider:
variant四线型(solid/dashed/dotted/double)、inset/middle缩进、size三档间距、strong强调文字、6 个 CSS 变量开口、vertical 在 flex/grid 容器自动撑满 - link:
underline三态(hover 默认/always/never)、icon+icon-position、external(自动 target/rel/外链图标)、rel安全自动补、info语义色、underline-offset/underline-color变量开口 - typography:修饰六布尔(strong/mark/code/underline/delete/italic)、
tag换标签、depth三档弱化、line-clamp多行省略、copy-text自定义复制内容、ellipsis-suffix后缀保留、actions操作条(slot +actions-position) - kbd:
variant四形态(raised/outline/subtle/plain)、size三档、color统一协议 - label:
error红字、disabled灰化、colon冒号、color、tooltip 组合演示(oas-tooltip 套 label) - visually-hidden:
focusable焦点显形(skip-link 场景) - code:
inline行内代码(等宽浅底小框 + 高亮)、word-wrap换行、trim去首尾空白(默认 true)、size四档(inline 语境)、variant四形态(subtle/outline/plain/solid)、color统一协议 - table:
size密度档位(small/medium/large,CSS 变量开口) - 展示型组件字号继承:A 类跟随外层 / B 类组件级变量开口(11 组件)
- 无障碍体系:对比度审计换自实现的感知对比度算法(不再用比值法判文字可读性)、
-text达标 token 体系(22 预设/语义文字变体)、color 属性统一协议(11 预设名 + 任意 CSS 色值) - 官网首页 v2:hero oas-table 标志性 demo + 场景卡 + HTML 代码速览 + 真实 perf 数据 + CTA,H05 深色沉浸风格
修复
- dark 主题中间调语义色不达标:primary
#4d9fff→#9ecdff、danger#f87171→#fbb2b2(粉彩亮化 + 深字,感知对比度达标),hover/active 反转为提亮 - typography 省略约束链(actions 引入 .wrap 层致 max-width 参照落空)、code 修饰内联框居中
- link 下划线简写重置颜色(text-decoration 简写把 decoration-color 重置回 currentColor,改长写)
- button:solid primary hover/active/选中背景被自定义底色规则压死、href anchor 静止态选中色、icon-only 等宽
- icon:宿主 reset 防御(slot 不出盒 + 克隆表现属性)、inline-flex 收缩包裹防垂直偏心
- 首页 SPA 导航回首页滚动入场动画失效(observer 单例复用)
- kbd/typography slotchange 监听注册 onCleanup 防断开泄漏
文档
- basic 族 12 件 demo 中英双版全量补齐(新增能力全覆盖)
- 35 条 API 空描述补录(divider/kbd/label/link/typography)
- ui-spec §4.1 color 属性统一协议 + 色表同步
2.0.0 - 2026-08-17
新增
- upload:
list-type="picture-card/picture"照片墙 + 拖拽上传补全 +oas-exceed(超数提示)/oas-preview(预览)插槽 - date-picker:
shortcuts快捷选项 /disabled-date禁用日期 /multiple多选 - select:自定义渲染(
oas-option-render/oas-tag-render)+ 虚拟滚动 - form:
inline行内布局 - table:行内编辑 + 吸顶行
- modal:全屏模式 + 命令式确认(loading)
- card:封面 / 操作区 / hoverable / clickable
- badge:缎带 ribbon 角标
- avatar:徽标 + fallback
- tree:自定义节点 + 目录模式
- image:懒加载
- transfer:搜索 / 单向模式 / 虚拟滚动
- notification:进度条 / 可滚动
- slider:输入联动 / 自定义滑块 / reverse / range
- calendar:自定义单元格 / 月年模式切换
- message:分组 / 更新
- tabs:动态增删 + 图标
- steps:点状 / 导航模式
- breadcrumb:折叠 / 省略
修复
- tree 自定义节点在 Vue CSR 下空白(Chromium
insertBefore直插 template 不填充 content,slotTemplateFragment回退读 childNodes,dev+SSG 双形态渲染) - tooltip/popover 箭头 4 placement 定位修正(CSS + 几何 left/right 边框对)
- tree 自定义节点 SVG 补
width/height属性(light DOM style 不穿透 shadow DOM,无属性时撑满容器)+ label 最小宽度加固 - upload 预览浮层拦截全页指针、ssr-dsd 水合回归、e2e 异步渲染 flaky 等测试链修复
文档
- 指南 CDN 引入示例修正(中英双版)
1.9.1 - 2026-08-13
工程
- 文档站接入 Google Analytics(head 注入 gtag + SPA 路由
onAfterRouteChangepage_view)
修复
- GA pageerror:
enhanceApp注入的是 vitepress Router(无 vue-router 的afterEach),改用onAfterRouteChange - 类名规范化
OAStour→OASTour(PascalCase)
1.9.0 - 2026-08-12
新增
@oas-ui/ssr渲染器包:renderToString(tag, attrs, slotHTML, options)输出 Declarative Shadow DOM(DSD)静态快照;@oas-ui/ui新增 Node-safessr子路径导出(不执行customElements.define、不触碰 DOM API)- DSD 支持全链:基类复用 declarative shadow root、真水合(指纹判定 + hydrate 接管,DOM 引用保持,误判回退重渲染)、测量组件首帧闪动治理、数据组件声明式 JSON 通道(table/tree/select)、嵌套组件递归序列化、SSR 白名单全量覆盖 123/124 tag(表单/反馈/数据展示/导航布局/基础组件五批推进)
oas-form-item组件 +oas-form栅格布局(layout="grid"/gap/label-align/label-width,错误提示收编 form-item,裸字段向后兼容)- size 尺寸档位扩展:三档 → 五档(xs=20px / small=24 / medium=32 / large=40 / xl=48px),button/tag/switch/space/spin 全档支持(spin 保留旧缩写别名)
- 主题 on-color token(
--oas-color-text-on-primary/success/warning/danger),全库实心态硬编码白字改走 token(dark 深字对比度 ≥4.5) dist/cdn.js单文件 IIFE bundle(gzip ~116KB)CDN 三行引入可用;theme 包根 index.css 直引- 9 个表单控件
focus()委托(form-item label 点击聚焦 shadow 主输入) @oas-ui/nuxt:Nuxt 3 module——modules: ['@oas-ui/nuxt']开箱即用(Vitevite:extendConfig注入 VueisCustomElement识别 oas-* +@oas-ui/theme自动注入nuxt.options.css+renderOasToString/useOasRenderSSR helper 自动导入)@oas-ui/next:Next.js App Router 集成——RSC<OasComponent>(@oas-ui/next/server)服务端产 DSD 快照(dangerouslySetInnerHTML 进 SSR 输出流)+<OasRegistry>"use client" 客户端注册引导 +renderOas纯逻辑包装(attrs 值自动序列化)
变更
- select 多选标签默认换行自适应高度,折叠由
max-tag-count显式启用 - slider 补 Firefox 轨道伪元素(
::-moz-range-track/thumb) - 多级子菜单视口边界翻转(menu/dropdown/context-menu/menubar,flip-left/flip-right/flip-up)
- rate 半选改 clip-path 半黄半灰垂直分割
- scroll-area 补 thumb 拖拽 + 横向滚轮接管;virtual-list/tree 修复滚轮"一下到底"
- theme CSS 单源化(canonical 收束为包根 index.css)
- SSR 指南转正(摘"实验"标签)、快速开始补浏览器基线声明、核心规则改 ::: danger 容器
修复
- DSD 水合动态内容重复渲染(rate/dynamic-input/log/marquee)
- alert 关闭不隐藏(
:host([hidden])补位,全库排查)、result 状态图标不随 status 更新、transfer 缺 observedAttributes、textarea autosize 首帧闪动、组件 id 快照确定性 - slider Firefox 轨道不可见(补
::-moz-range-*伪元素)、select 多选折叠吞值(非法 size 回落告警)
1.8.0 - 2026-08-11 (internal)
内部功能块版本:通用组件 100% 覆盖收口(combobox 落地),仅推进至 tag、未发 npm(随 v1.9.0 一并公开发布)。含 v1.1~v1.7 组件的能力补齐与复核修复批次、文档站中英双语与完善批。
新增
- 新增 combobox:可过滤单选组合框——输入框即控件、子串过滤、键盘导航(↑↓/Enter/Esc)、受控、
clearable/loading/empty/disabled,事件oas-change/oas-input/oas-clear,全 ARIA 规范(combobox/listbox/option/activedescendant) - input:
show-password/show-count;select:分组、可清空、远程搜索、多选标签折叠 +N、允许创建;button:block/round/ghost/width/icon;modal:centered/draggable - tabs:
closable/badge/tab-position(上/下/左/右);pagination:show-total/page-sizes/jumper;switch:checked-text/size/color/allow-clear;rate:自定义图标 - table:
stripe/bordered/summary/可展开行/树形数据/lazy 懒加载/draggable拖拽;tree:lazy 懒加载;steps:每步状态/可点击;drawer:宽度尺寸;slider:刻度;empty:自定义插画;chart:area/donut/stacked-bar 类型 - 补 marquee/carousel/card/list/tag 内容形态 demo(图片墙/图片轮播/封面/图文/图标标签)
- 文档站 114 个组件参考页英文版 + 全部 demo 示例文本英文化(中文能力演示刻意保留);EN 侧栏指向
/en/components/* - 文档站本地搜索(中英双索引)+ 组件总览页(中英,7 分组)+ CHANGELOG 页(include 根 CHANGELOG.md)+ icon 图标墙
- 文档站示例代码 Shiki 语法高亮(懒加载 + 暗色适配);侧栏组件分组收起展开
- 文档站语言切换统一走内置 locales 下拉(路由驱动 +
setLocale同步组件内置文案)
修复
- 修复 Vue 宿主下 property 劫持导致的数据型组件异常(table 同类问题全仓排查修复)
- 修复 table:SPA 导航下无数据、滚动刷新弹回顶、固定列表头被正文覆盖
- 修复 tree 虚拟模式行样式全丢(
::part后链后代选择器不支持)、virtual-list 视口高度与 items 赋值竞态、timeline 圆线不对齐 - 修复 select 下拉锚定到页面底部、多选标签换行/箭头漂浮、clear-btn 嵌套解析问题
- 修复 date-picker/time-picker 弹层定位逃逸出 shadow 落到页面底部
- 修复 backdrop 锁滚动导致开合遮罩页面位移(最终改为拦截滚动行为方案,滚动条保留则视口宽度不变)
- 修复 switch 带文案时滑块被遮、button ghost success/warning 文字对比度、tabs 可关闭项嵌套交互违规
- 修复 button-group 纵向布局失效、tag hover 不可读、link 视觉问题
1.7.0 - 2026-08-09 (internal)
内部功能块版本:未发 npm(随 v1.9.0 一并公开发布)。
新增
- 新增 theme-editor:主题 token 编辑面板——读取
--oas-*变量集实时预览,导出主题 JSON,与 config-provider 的 theme 注入打通(改值即时生效到子树) - 新增 bottom-navigation:移动端底部导航,
role="tablist"+ 键盘左右切换 +aria-selected - 新增 sidebar:可折叠侧栏,
collapsed收窄图标态、移动端抽屉态、点击外部收起 - 新增 container:定宽居中容器,
size(xs~xl/full)/center/padding,逻辑 CSS 属性(RTL 合规)
1.6.0 - 2026-08-09 (internal)
内部功能块版本:未发 npm(随 v1.9.0 一并公开发布)。
新增
- 新增 chart:图表(折线/柱状/饼/面积/环形/堆叠柱,数据更新动画)
- 新增 code:代码展示(语言高亮、行号、复制按钮)
- 新增 log:日志滚动视图(追加后自动滚到底,仅用户未上翻时)
- 新增 marquee:跑马灯(
speed/pause-on-hover,尊重prefers-reduced-motion) - 新增 number-animation:数字滚动动画(rAF 清理无泄漏)
- 新增 gradient-text:文字渐变着色
- 新增 equation:数学公式渲染
- 新增 aspect-ratio:宽高比容器(无内容仍保比例占位)
- 新增 masonry:瀑布流布局(CSS columns 实现)
- 新增 comment:评论(作者头像/内容/时间/操作区,纯展示)
1.5.0 - 2026-08-09 (internal)
内部功能块版本:未发 npm(随 v1.9.0 一并公开发布)。
新增
- 新增 command:命令面板——搜索过滤、↑↓ 选择、Enter 执行、Esc 关闭、焦点陷阱 + 打开自动聚焦
- 新增 menubar:应用菜单栏,方向键 + Alt 访问键导航
- 新增 navigation-menu:多级导航栏,悬停/键盘展开子菜单
- 新增 toolbar:工具按钮组(roving tabindex)
- 新增 scroll-area:自定义滚动条(细条 + hover 变粗),
oas-scroll事件 - 新增 toggle-group:单选/多选开关组(radio/checkbox 语义,受控)
- 新增 speed-dial:悬浮主按钮 + 展开子动作(
aria-expanded,点击外部收起) - 新增 toast:命令式 API
toast.success/error/warning/info/loading()+toast.promise(),返回句柄.close(),支持action/duration/position,loading 态不可关 - 新增 snackbar:底部提示条,
open/message/action-text/duration/direction,堆叠上限 3,无 action 走role="status" - 新增 backdrop:全屏遮罩,
transparent/blur/lock-scroll,oas-click事件,关闭即卸载节点(零孤儿 DOM)
1.4.0 - 2026-08-09 (internal)
内部功能块版本:未发 npm(随 v1.9.0 一并公开发布)。
新增
- 新增 virtual-list:定高虚拟列表(视口窗口渲染 + 首尾 padding 占位 + 滚动节流),供 table/tree/select 复用
- 新增 qrcode:二维码(
value/size/error-correction) - 新增 watermark:水印(
text/image/opacity/repeat,pointer-events:none不拦截交互) - 新增 ellipsis:文本省略(多行截断、仅溢出时挂 tooltip 展示全文、
expandable展开/收起,零孤儿浮层) - table 增强:固定列(left/right)+ 表头吸顶 + 虚拟滚动,与排序/分页/多选不冲突
- tree 增强:大数据量虚拟化渲染(复用 virtual-list),展开状态保持
- image 增强:
preview图片放大预览——点击放大 + 缩放/旋转/下载 + Esc 关闭 + 焦点陷阱,oas-preview事件 - progress 增强:
type="circle"环形进度(size/stroke-width/show-text,role="progressbar"),整环 success/error 变色
1.3.0 - 2026-08-09 (internal)
内部功能块版本:未发 npm(随 v1.9.0 一并公开发布)。
新增
- 新增 upload:文件上传(原生 input + 拖拽区 + 进度),
accept/multiple/max/auto-upload,事件oas-change/oas-remove/oas-upload - 新增 transfer:穿梭框(左右双面板 + 穿梭按钮 + 搜索,键盘方向键移动)
- 新增 mentions:@ 提及(浮层建议、↑↓ 选择 Enter 插入,复用 popover 定位)
- 新增 color-picker:颜色选择器(色板 + 饱和度盘,
preset预设色,键盘 ↑↓ 调亮度) - 新增 toggle-button:切换按钮(
aria-pressed) - 新增 pin-input:逐位输入(自动换位、粘贴分发、Backspace 回退、
mask),事件oas-input/oas-change/oas-complete - 新增 dynamic-input:动态增删行输入(
min/max/default-value,受控/非受控双模式) - 新增 dynamic-tags:动态标签输入(Enter/逗号提交、空输入 Backspace 删末 tag、重复提示)
- 新增 editable:行内编辑(Enter 提交、Esc 还原失焦、空值提交还原旧值默认非破坏)
- input 增强:
addon-before/addon-after(addon 文案块)、prefix-icon/suffix-icon(图标名),独立::part(prepend/append) - textarea 增强:
autosize高度自适应(规范命名,保留auto-height兼容)+min-rows/max-rows边界,超限出滚动条
1.2.0 - 2026-08-09 (internal)
内部功能块版本:未发 npm(随 v1.9.0 一并公开发布)。
新增
- 新增 date-picker:日期选择器(date/daterange/month/datetime 四种类型),
format/min/max/placeholder,日期网格键盘导航、Intl.DateTimeFormatlocale 感知格式化 - 新增 time-picker:时间选择器(
format/step,滚轮列表或数字输入,↑↓ 调整 Enter 确认) - 新增 calendar:日历(月/年模式、
disabled-date回调、show-week-number、今天快捷) - 新增 countdown:倒计时(毫秒值 +
format,oas-finish事件,timer 无泄漏) - 新增 statistic:数值统计(
precision/prefix/suffix/group-separator/loading,Intl.NumberFormatlocale 感知)
1.1.0 - 2026-08-09 (internal)
内部功能块版本:未发 npm(随 v1.9.0 一并公开发布)。
新增
- 新增 button-group:按钮组——
type/size透传子按钮、vertical纵向堆叠(圆角合并)、value+multiple选值组(单选/多选)、disabled,事件oas-change - 新增 label:标签——
for点击聚焦目标控件、required星号、position(before/after) - 新增 kbd:键盘按键显示——
keys空格分隔自动渲染多块 + 加号连接 - 新增 visually-hidden:视觉隐藏但屏幕阅读器可读/可复制的容器
- flex 增强:
wrap、align/justify枚举补全、vertical(=Stack 简写,Stack 由 flex 覆盖不单列) - grid 增强:
columns(simple-grid 自动布局)+gap,与 Grid/GridItem 并存不冲突 - tag 增强:
chip胶囊形态 +clickable整签可点(oas-click事件) - 文档站导航栏新增全局语言切换(zh-CN/EN,
setLocale全局生效)
1.0.0 - 2026-08-08
新增
发布
- 正式发布
@oas-ui/ui、@oas-ui/core、@oas-ui/theme、@oas-ui/icons至 npm - 文档站上线 + 快速开始(三行引入)、SSR 边界策略文档
- 开源协议采用双许可(MIT OR Apache-2.0)
主题与无障碍(v0.9.0)
- 内置 light / dark / high-contrast 三套主题,
data-theme切换 - CSS 变量覆盖自定义主题指南
- React / Vue 双宿主 playground
数据展示(v0.8.0)
- 新增 Table(排序/行选中/空态)、Tree(展开/选中/多选)、Card、Avatar、Image、Collapse、Descriptions、Timeline、List、Carousel
导航与布局(v0.7.0)
- 新增 Tabs、Pagination、Steps、Segmented、Affix、Splitter、Flex、PageHeader、FloatButton、Layout、Grid
浮层与导航(v0.6.0)
- 浮层定位引擎(flip/视口避让)
- 新增 Tooltip、Popover、Menu、Dropdown、ContextMenu、HoverCard、Breadcrumb、BackTop、Anchor、Tour
反馈(v0.5.0)
- 浮层管理器(z-index 分级、外部点击)
- 新增 Message、Notification、Modal、Confirm、Drawer、Popconfirm、Alert、Progress、LoadingBar、Spin、Skeleton、Empty、Result
- 命令式 API:
confirm()/message()/notification()/loadingBar()
表单 II(v0.4.0)
- 新增 Select、AutoComplete、Cascader、TreeSelect、Form(原生 form + 校验)
表单 I(v0.3.0)
- 新增 Input、Textarea、Checkbox、Radio、Switch、Slider、InputNumber、Rate
基础(v0.2.0 / v0.1.0)
- 基础运行时
@oas-ui/core、主题 token、图标库 - 新增 Button、Icon、Tag、Badge、Space、Divider、Link、Typography