更新日志 · XiHan.UI
本文件记录 XiHan.UI 各版本的变更。每条标注 新增 / 修复 / 优化 / 调整 / 移除 类别。只收录使用者可感知的变更,仓库自身的配置、CI、测试与门禁不列入。组件以 npm 包形式发布,升级前请留意「调整」类中的破坏性变更。
v2.1.0 (2026-09-24)
本版补齐集合类组件的条目契约:逐条语气、说明、快捷键与首尾两格的逐条钩子,菜单的 collection 可以直接铺出分组;选中标记统一为行尾对号。本版包含少量破坏性变更(Tree、Listbox、TagGroup 的选中外观与相关部件、槽名),按次版本发布,升级前请看下方升级须知。
升级须知
Tree
expandOnClick缺省由true改为false,与 TreeSelect 一致:点行与确认键只选中,展开交给展开箭头(branch-trigger)与左右方向键。需要「点目录即展开」的,显式打开expandOnClick(Web Components 写expand-on-click);分支行只放了不可点的branch-indicator的树,缺省下只能用方向键展开,请在分支行补一枚branch-trigger- 勾选框部件删除:
item-checkbox/branch-checkbox,三端的XhTreeItemCheckbox/XhTreeBranchCheckbox(React 另有XhTreeItemCheckboxProps/XhTreeBranchCheckboxProps),以及 connect 上的getItemCheckboxProps/getBranchCheckboxProps。单选、多选与级联都改为在行尾画对号:把勾选框换成XhTreeItemIndicator,分支行同样放一枚;Web Components 把data-xh-part="item-checkbox"/"branch-checkbox"换成data-xh-part="item-indicator" - 删除组件槽
--xh-tree-checkbox-*(8 个)与--xh-tree-row-bg-selected;行的data-xh-collection-context由page改为overlay
Listbox
- 选中行不再铺品牌淡底、不换字色,只在行尾亮对号;删除组件槽
--xh-listbox-item-bg-selected,--xh-listbox-item-fg-selected保留但缺省回到条目自己的字色;条目的data-xh-collection-context由page改为overlay
TagGroup
- 选中的标签不再换面、换字色与描边,只在文字后亮一枚对号;删除组件槽
--xh-tag-group-item-bg-selected、--xh-tag-group-item-bg-selected-hover、--xh-tag-group-item-bg-selected-pressed、--xh-tag-group-item-fg-selected、--xh-tag-group-item-border-selected;实心标签选中时不再描出字色描边
Menu
- 由
collection代铺的条目,文字从item里的裸文本改放进item-text(与 ContextMenu、Menubar 一致)。直接对条目文本节点写样式的自定义皮肤,请改为选中item-text
新增 集合条目逐条语气:条目数据写
tone(MenuNode与另外十二个集合组件的节点)即按该语气族着色,静息只换字色,悬停、键盘高亮与按下换语气淡底;选中与当前压过语气,禁用压过一切,强制颜色模式下退回系统色新增 条目说明与快捷键:
MenuNode补上indicator/description/shortcut,Menu 新增item-shortcut部件;ContextMenu、Menubar 补上item-shortcut与shortcut;另外九个集合组件补上item-description与description;Command 补上快捷键提示。快捷键以次级字号显示且不换行,不进入读屏可及名与连打检索新增 首尾两格的逐条钩子:Menu、ContextMenu、Menubar 新增
item-suffix部件与item-prefix/item-suffix插槽(React 为renderItemPrefix/renderItemSuffix),给条目加图标或徽标不必再用item插槽整条重写;Listbox、Select、Combobox、Mention、Command 补上item-prefix/item-suffix;Tree、TreeSelect、Cascader、Transfer 补上行尾一格新增
MenuNode的group与groupLabel:collection按相邻同值收成分组并输出分组标题新增 组件文档补充「React 适配器 props」表与条目数据表,插槽表写明
item/item-prefix/item-suffix的分工修复 浮层打开后不再常驻
will-change:此前入场动画中途的栅格会被沿用,动画结束后文字与 1px 分隔线仍然发虚;浮层文字也与页面其余文字一样使用亚像素抗锯齿修复 Vue 的
XhKbd在平台探测之后不再丢失全局配置优化 三端状态机读取 props 不再按 prop 个数重复展开:Vue 200 个按钮的挂载由 29.5ms 降至 16.0ms,Web Components 100 个分页的挂载约由 112ms 降至 24ms
优化 Portal 视觉桥不再按「浮层数 × 自定义属性数」重读计算样式;焦点域的 Tab 判定不再按「候选数 × 容器层数」查询计算样式
调整 选中标记统一为行尾对号:Collection Item 家族 page 语境的对号从行首移到行尾,与浮层内的列表同列;Listbox、Tree、TagGroup 的选中外观随之统一(见升级须知)
v2.0.0 (2026-09-22)
本版为主版本升级。主要变化:@xihan-ui/kernel、@xihan-ui/machine、@xihan-ui/behavior 合并为 @xihan-ui/core;新增 React 19 适配器 @xihan-ui/react;组件由 121 个增至 134 个(新增 20 个,删除 3 个,合并 4 个,更名 5 个)。所有更名与删除均不保留别名、转发或兼容层,引用旧名会直接报错。
升级须知
以下按包、组件、部件与属性、行为四类列出破坏性变更的范围与去向。完整对照表(旧名 → 新名,逐部件、逐槽名)见各包随 npm 发布的 CHANGELOG.md。
包与依赖
@xihan-ui/kernel、@xihan-ui/machine、@xihan-ui/behavior合并为@xihan-ui/core,旧包不再发布,无转发包。导出名称不变,子入口按原名平移:kernel/metadata→core/metadata、kernel/skin-check→core/skin-check、kernel/vite→core/vite、machine/vanilla→core/vanilla、behavior/presence→core/presence。诊断core.version-mismatch的detail.kernelVersion更名为coreVersion。仅安装适配器的项目无需改动@xihan-ui/code-highlight由适配器的直接依赖改为可选 peer 依赖,使用代码着色的项目需自行安装;包由engine组移至features组,包名不变- 新增
@xihan-ui/react。公开包由 18 个变为 17 个
组件的增删与更名
- 删除
thread、composer、code-block,分别由message-feed(配合log)、prompt-input、code-view替代 result并入empty-state(live默认为polite,默认尺寸档比原来小一号;保持原样需写live="off"与size="lg");space并入flex(XhSpace未写gap时默认有间距,XhFlex默认为 0,迁移时需显式写gap="md");countdown并入timer;popselect退役,随表单提交的场景改用select,仅切换视图参数的场景改用popover组合listbox- 更名:
ellipsis→truncate、dynamic-input→field-array、time→timestamp、qr-code→matrix-code(新增format选择码制)、calendar→calendar-picker(区间选择拆为新组件calendar-range-picker;date-picker只保留单选与多选,区间改用新组件date-range-picker) color-picker重组为组合组件:色相与透明度滑块为内嵌的color-slider,预设色板为内嵌的color-swatch-picker;非法或越界的文本输入不再静默复原,改为保留状态并抛出错误select、tags-input、tag-group的标签统一改用tag组件渲染:item-delete-trigger、item-preview、item-text不再是这三个组件的部件,对应节点为tag的root/label/close-trigger;select多选未指定maxTagCount时最多显示 3 枚标签,其余折叠为+N
部件、属性与槽名
- 32 个部件更名、1 个部件并入他处;10 处同一角色在不同组件中命名不一致的部件统一命名
- 14 组 prop 更名、2 组事件更名。例如
resizable/floating-panel的像素尺寸size更名为dimensions;password-input的visible/defaultVisible/onVisibilityChange更名为revealed/defaultRevealed/onRevealedChange;virtualizer的onChange更名为onRangeChange - 13 个
data-*属性名删除,每组只保留一个(如data-affixed→data-fixed;data-borderless→data-bordered,取值反转);data-type拆分为data-value-type、data-severity、data-select-mode、data-reveal-mode、data-format;data-phase与六个组件的生命周期data-status并入data-state;table的expanded-row、tree的branch-content、heatmap的tooltip收起态由hidden属性改为data-state。CSS 选择器不会因属性名失配而报错,请在代码库中检索旧属性名 dialog/drawer新增header/body/footer三个部件,body为面板内唯一的滚动区域;文本输入的两套控件盒槽名合并为一套,被替代的槽名删除- 形态轴收敛:字段类组件未传
variant时显式输出data-variant="outline",自定义皮肤若以「无data-variant」判定默认态,需改为匹配outline;button/float-button移除shape;loading-bar移除color;card收敛为default/secondary/tertiary/transparent四种表面,移除size/hoverable/split属性与media/body部件 - 轻提示与通知的
type更名为tone,取值收敛为info | success | warning | danger,加载态独立为布尔loading;通知队列max默认值由不限改为 5;toast/alert的content改为必需;empty-state的status只接受'404' | '403' | '500',语义改由tone表达;steps的StepStatus收敛为completed | current | incomplete,出错与警示改由逐步tones表达 - 读屏文案只接受函数,不再接受字符串;
flex的direction别名与FlexDirection类型删除,只保留orientation;listbox的multiple删除,只保留selectionMode;kbd的单键与组合键统一为keys数组,默认仅展示,显式register后才注册监听;grid的cols/span/offset增加运行时取值范围校验
行为
- 部件上同名事件处理器的执行顺序统一为「使用者的处理器先执行,部件的处理器后执行」;此前是否使用
asChild会导致顺序相反。依赖部件先更新状态再读取的代码需改为微任务或变更回调 pin-input改为按顺序录入,焦点落在第一个空格;mention的输入框改为单行;number-field的control部件改为必需combobox、tree-select、cascader、transfer的原生表单提交改为每个选中值一个同名隐藏字段,不再以逗号拼接;cascader的value对非数组、混合类型、空路径一律拒绝FieldControl与asChild的组合宿主改为严格检查:Fragment 内唯一控件正常接线,零个或多个节点、非空文本混排时抛出错误,不再降级生成默认按钮@xihan-ui/motion删除TweenEasing、tweenEasings、resolveTweenEasing,统一使用EasingName、easing、resolveEasing- 三端
XhConfig.motion的隐式全局覆盖移除,视觉环境统一由createVisualEnvironmentController管理;表单字段标识统一为FormPath,XhFormFieldGroup的value更名为name
新增
@xihan-ui/react:React 19 适配器,覆盖全部 134 个组件。组件名与 Vue 侧一致(Xh*),受控 / 非受控与变更载荷为同一份合同,带载荷的插槽以函数式 children 提供,无需安装 provider新增 20 个组件。数据录入:
calendar-range-picker、date-range-picker、time-range-picker、color-field、color-slider、color-swatch-picker、input-group、tag-group;数据展示:bar-code(一维码,七种码制)、color-swatch;浮层:command(命令面板);AI 对话:approval(危险动作执行前的人工确认)、code-view、diff-view(单栏与并排)、markdown-stream、message-feed、prompt-input、question-flow(执行前的澄清问卷)、reasoning、tool-call新增 七轴视觉环境
createVisualEnvironmentController:色彩模式、品牌、密度、书写方向、对比度、动效、透明材质统一解析、继承、持久化并投影到根元素,局部作用域只影响自身子树;Portal 按实例桥接来源处的局部视觉环境新增 按压通道:Space / Enter 与触屏按住时输出
data-pressed,与指针:active共用同一套按压样式,覆盖全库可按下的部件新增 浮层退场生命周期由 Presence 租约管理:逻辑关闭后
content立即设为inert并退出可访问树,Layer、消解层与焦点域在退场动画结束后释放;dialog/drawer新增onExitComplete新增 集合类组件补齐三种非条目状态:
empty、loading、load-more-trigger;tree-select新增懒加载分支合同(hasChildren、loadChildren({ node, signal }))及 loading / error / retry / loaded-empty 状态结构新增
tabs标签溢出时不再折行,改为沿主轴滚动:新增prev-trigger/next-trigger,支持滚轮、焦点跟随与触屏拖动;segment 档的指示条改为滑动式新增
layout的siderPresentation(inline/sheet),sheet档下侧栏以覆盖方式展开新增
dialog/drawer/image-viewer的遮罩形态轴variant;scroll-area的边缘渐隐与到头状态;scrollbar的anchor新增 浮层类与选择类组件的 Portal 部件支持实例级
container新增 命令式对话框服务的
actionError/onActionError({ cause })与可本地化的actionErrorText;popconfirm的onConfirm支持返回PromiseLike;form新增validationError状态与校验异常事件,字段状态轴接入text-field控件新增 Web Components 侧补齐四个命令式反馈服务;轻提示与通知的队列合并为一套
新增
@xihan-ui/tokens十二色相基础色板;matrix-code新增data-matrix、gs1、pdf417、aztec码制;tag新增ghost形态与readOnly;form的layout新增grid档新增
cascader、transfer支持name/form原生表单提交,含禁用排除与原生重置新增
RenderedBlock.source:代码块与公式块在已消毒的html之外提供未转义的原文修复 四个浮层以指针打开后关闭时,焦点未按键盘规格返回触发器
修复 皮肤自绘的状态字形(勾选、半选、分支箭头)统一按指示符档取尺,compact 密度下与标记盒尺寸不一致的问题:select、combobox、listbox、cascader、menubar、context-menu、steps、file-upload 等
修复 几何类过渡按角色选择曲线档;集合条目的描边色不再参与过渡,切换标签页时不再闪烁
修复 补齐 11 处缺失的读屏文案;补齐两个适配器未暴露的 headless 能力(七个浮层的
dir、五个元素的translations、分页省略位浮层的四项)修复 Vue
date-picker挂载在 iframe 或其他 Document 时的运行时归属;trackHoverIntent固定使用触发器所属的 Document修复
pin-input受控模式下输入一位跳过一格;tags-input就地编辑框宽度随内容变化,不再按原生 input 的 20 字符宽度展开;carousel在减弱动效档下不再自动播放修复 粗指针热区平移在 RTL 下行内方向反向,热区中心偏离宿主
调整 带边框的控件盒统一为浅边框不填底,与浮层面板、卡片使用同一条边线;字段类组件未传尺寸时统一宽度为 16rem
调整 侧栏导航当前项去掉起始侧 2px 竖线,只保留品牌淡底与字色;标签页 line / card 档的标签宽度随文字;导航菜单与锚点目录中指向当前页的链接绘制静态指示线
调整
toggle-group默认外观改为浅色胶囊分段控件,选中项使用品牌淡底;kbd收敛为固定 24px 键帽,新增default/light两种外观;徽标 sm 档收为 14px调整 菜单类组件接入集合条目配方:条目按压面由 300 改为 200,展开中的触发器改为中性面,浮层滚动条走 4px 档并增加 overscroll 隔离
v1.1.0 (2026-08-31)
新增
sortable组件:列表 / 网格拖拽排序,拖动中其余条目实时让位,sort事件直接给出重排好的ids,键盘路径默认开着新增
resizable组件:八条边都能推的可调容器,带上下限、宽高比与吸附步进,指针与键盘两条路都通新增
@xihan-ui/pointer:指针会话、多指会话与双指几何、拖放几何、尺寸调整几何四层,自研零依赖新增
table的列拖拽排序:新增部件column-drag-trigger与live-region,把手自占一个 Tab 位,落点按列 id 认新增
table的行拖拽排序:rowReorderable打开后整行可拖,树形行支持换父,搬完发onRowMove新增
table的列宽拖拽:标了resizable的列产出改宽把手,宽度落进列偏好可存可还原新增
tree的节点拖拽搬家:落点三档(前 / 后 / 落进去),Alt+ 方向键改同层次序与缩进,搬完发onNodeMove新增
tabs的标签拖拽换位:reorderable打开后整个标签可拖,Alt+ 主轴方向键可挪,搬完发onTabMove新增 三个触屏拖动把手
row-drag-trigger/node-drag-trigger/tab-drag-trigger,不占 Tab 位新增 选中原语
applySelection/toggleSelectAll/rangeBetween;table/tree/transfer接上 Shift 范围选,table另加Ctrl/Cmd+ A 全选新增
image-viewer的双指缩放新增
@xihan-ui/kernel/vite子入口:开发服务器启动时在终端打一次横幅调整 浏览器控制台的启动摘要默认不打,要打显式
setMetadataAutoPrint(true)调整
XIHAN_UI_LOGO与XIHAN_UI_SEND_WORD从XIHAN_UI_METADATA摘出来单独导出,getMetadataSummary()/getMetadataDetails()不再带寄语调整
tree的拖拽播报报出落脚处,新增movedInto/droppedInto/canceledInto/rootLevel四个文案键调整
tree对禁用节点只拦inside落点,在它前后插不再拦调整
carousel的划动与image-viewer的平移改走多指会话,不再逐个捕获指针修复
dialog/drawer/image-viewer的closeOnEscape与closeOnInteractOutside改为交互当时现读——浮层开着时改这两个开关此前不算数修复 按住切换类的按键会来回翻转(按住
Ctrl/Cmd+ A 在全选与全不选之间闪、按住空格反复拾起放下),12 处补上自动重复守卫修复 八个 Vue 组件收不到全局配置里的读屏文案:
combobox/popselect/resizable/sortable/table/tabs/text-field/tree修复
XhTableRoot丢掉作者写在它上面的class/aria-*/ 监听器修复
table与tree的键盘处理器吞掉落在可编辑单元格 / 节点内容里的按键修复 开着
striped的表里,偶数行既不响应悬停也显不出选中
v1.0.0 (2026-08-26)
版本与兼容性
首个正式版。从这一版起,版本与兼容性政策的全部条款生效。
- 新增 框架无关的无头内核:状态、交互与无障碍逻辑住在
@xihan-ui/headless,适配器只把connect()产出挂到宿主元素上;同一份内核在两端行为一致 - 新增 119 个组件,每个同时产出无头内核、Vue 组件、自定义元素与默认皮肤——通用 15、布局 8、导航 16、数据录入 32、数据展示 30、反馈 9、浮层 7、AI 对话 2,逐个见组件总览
- 新增
@xihan-ui/vueVue 3 适配器,729 个部件:受控 / 非受控、v-model、带类型的作用域插槽;behavior子入口出五个行为原语的组合式,另有四件命令式服务(轻提示、通知、对话框、顶部进度条) - 新增
@xihan-ui/web-components适配器,121 个自定义元素:元素不生成结构,作者写带data-xh-part的 Light DOM 子节点;随包出custom-elements.json - 新增 引擎四包:
@xihan-ui/kernel结构原语、@xihan-ui/machine状态机运行时、@xihan-ui/behavior行为原语、@xihan-ui/motion动效原语 - 新增
@xihan-ui/position浮层定位:放置、翻转、贴边、箭头锚点、rtl,自研无第三方依赖 - 新增 样式与逻辑解耦:皮肤只认
data-scope/data-part/data-*,不认框架也不认类名,整包换皮肤不用碰一行 JS - 新增
@xihan-ui/tokens设计令牌:DTCG 源在构建期产出 CSS 变量(原语 95、语义 158,另有紧凑 49、浅色 41、深色 44、减弱动效 8 条覆盖),运行时不做 CSS-in-JS - 新增
@xihan-ui/styles默认皮肤 125 份,按@layer分层(xihan.reset→tokens→base→components→overrides),使用者的覆盖恒排在最后 - 新增 三条视觉轴:
variant管形态、tone管语气(六族)、size管尺寸;实心底上的前景与交互态由语气色按 WCAG 相对亮度现推 - 新增 主题五个维度独立切换:明暗、品牌、密度、对比度、书写方向,带
createThemeController与品牌色派生 - 新增 浮层一律 Teleport 到单一落点
#xh-portal-root,层号不受宿主祖先影响;13 个滚动宿主自带自绘滚动条 - 新增 兜底字形二十个
--xh-glyph-mark-*令牌,构建期内联图标包 SVG,跨系统长相一致 - 新增
@xihan-ui/icons首方图标集:IconRecord结构化记录,运行期不解析 SVG 字符串,另有 SVG →IconRecord的构建期转换器 - 新增
@xihan-ui/animations可序列化动效配方、@xihan-ui/sound程序化 UI 音效(三套主题,零音频文件)、@xihan-ui/backgroundsWebGL2 效果与粒子云 - 新增
@xihan-ui/chat-streamAI 协议内核:SSE 读取 → 协议归一 → parts 归约 → 会话 store,零 DOM 零框架 - 新增
@xihan-ui/markdown流式 Markdown 渲染内核(CommonMark 子集一致率 489/652)与@xihan-ui/code-highlight自研词法着色 - 新增 键盘交互依 W3C APG 落地,77 份机读键盘规格表共 463 行键位随包提供
- 新增 焦点环、按下反馈、禁用态对比度与语气配色(2 档主题 × 6 族,158 组配对)逐条达标,无障碍扫描跑在真实 Chromium(axe)
- 新增 119 个组件都留了文案位并挂进覆盖表,全局
ConfigProvider一处注入;rtl 下浮层放置、方向键语义与图形朝向一并对调 - 新增 24 个表单字段组件认原生表单重置;
field提供标签、描述、错误与asChild逃生口 - 新增 17 个公开包同版发布,运行时第三方依赖只有一个(
@internationalized/date,仅日期族使用);混装两个版本在 dev 下报core.version-mismatch - 新增 摇树是真的:只引一枚图标 149 B、整集合 7.37 kB,
XhButton1.38 kB、XhDialogRoot15 kB(均 gzip) - 新增 ESM-only,子路径导出都带类型
- 调整 元数据的宿主行只报宿主与版本,不再报版本一致性
v1.0.0-preview.0 (2026-08-26)
这一版的主线是把 alpha 里遗留的形状问题一次改完:两对做着同一件事的组件分家(toast / notification、badge / tag),三处与同族对不上的 prop 名归位,语气色从逐族写死改为按底色现推。
新增
notification组件,与toast分家:前者是系统推来的卡片(左侧类型字形、右上角关闭钮、两列网格、九宫格落位),后者收窄成操作反馈(顶部居中、宽度包着内容、一行图标加一句话)新增 分页的省略号能摊开:折进去的那几页有了入口,分页因此升级成浮层族(新增
positioner/content);每页条数从只读 prop 升成真状态,配XhPaginationPageSizeSelect与pageSizeOptions新增 表格的前缀列(行号 / 勾选 / 展开,按给定顺序插在最前并占住列号)、树形子行,以及一份可序列化的列偏好(列序 / 隐藏列 / 列宽)
新增 树的
multiple、leafOrientation(末端全是叶子的那层横排)与节点级childrenOrientation新增 json-viewer 的原文视图
view="text":直接出缩进过的 JSON,可整段拷走,值不再受截断与折减新增 13 个宿主的滚动层自带自绘滚动条:12 个浮层族的
content与 json-viewer 的两档,作者一个部件都不用写;滚动条同时新增scroll-hover档并定为缺省新增 Vue 侧三条逃生口:
@xihan-ui/vue/behavior子入口(五个行为原语的组合式)、useHotkeys(只注册不渲染键帽)、XhFieldControl的asChild与配套useFieldControl新增 命令式服务补齐三件:
createLoadingBarService(句柄上是在途计数而不是布尔开关)、取值型prompt、配置源可运行期换(应用切语言后服务子树跟着变)新增
@xihan-ui/tokens导出颜色能力:相对亮度、对比度、择色、混色与深浅——这套数学此前在四处各写了一份,判据各走各的新增 date-picker 的
defaultFocusedValue,决定展开时先落在哪一页新增 thread 补
provideThread/useThreadContext,与孪生组件 log 对称调整 badge 收窄成「只做角标」:删掉
variant,解剖从单层root拆成root(锚点)+indicator(角标),新增placement,定位归组件自己管。行内的状态药丸请改用tag调整 生命周期相位改走
data-state,data-status退回「结果种类」一轴——此前一条[data-status='error']会同时命中「加载失败的头像」和「一整页 500 报错」调整 树的
selectionMode转为multiple的旧写法,与同族七家对齐调整 实心底上的前景色与交互态挪动方向改由语气色现推(WCAG 相对亮度,白字黑字的交叉点
0.179是解析解),换肤下配对自动成立;装饰档--xh-_tone-soft从 500 提到与控件边界同一档,六族十二组都够到 3:1调整 描边档的标签改用「可操作区边界」那一档语气色,边相对面的对比从 1.44–2.18 抬到 4.56–7.83(浅色)
调整 浮层里的条目之间加 2px 行距,新增语义令牌
--xh-list-option-gap统一这把尺——此前库内自己就有 0 / 2 / 4px 三种方言调整 select 的盒不再自带 320px 宽度上限,框宽交回布局
调整 上一页 / 下一页默认就画两枚箭头,不再要每份示例手写「上一页 / 下一页」四个字
调整 147 个注入键改用
Symbol.for:模块被加载成两份时不再整棵子树白屏修复 点字段的标题聚不到复合控件的焦点;套进字段的复合控件读屏一个名字都没有——标签的
for指向div时什么也不会发生,而且不报错修复
useStickToBottom吞掉句柄,最常见的用法(两个 getter 读模板 ref)下根本没挂上修复
XhJsonViewerRoot的value在类型上被推成undefined,任何跑 vue-tsc 的工程传真实数据都编译不过修复 命令式服务的宿主挂不起来时连累调用方:一条轻提示能让整次导航失败、整站白屏,现在退化成空操作并发一条说得清的诊断
修复 日历的「大步翻」两颗钮被一条
display: none无条件收掉,从来就没画出来过修复 date-picker 展开态初值为真且铺了格子时抛
SEND_BEFORE_MOUNT修复 条目之间一有缝,select / combobox / popselect 的高亮就一跨一闪,读屏跟着一路播报
修复 四处被祖先
overflow裁掉的聚焦环改成往内收修复 树上三个对读屏隐藏的把手不再被指针聚焦(浏览器告警「aria-hidden 的后代仍持有焦点」);叶子行补上箭头那一格的缩进,层级关系读得出来了
修复 菜单族两家(context-menu / menubar)的勾选标记没跟着语气走
优化 不可关闭的标签走快路不建状态机:400 枚从 39.1ms 降到 18.3ms
优化 进度条服务的宿主自己渲染,不再经 provide/inject 拿 api
移除
toaster:轻提示不再需要额外的容器组件移除
@xihan-ui/kernel的DATA_SCROLL_SHARD:配套的分片机制从未实现,声明处之外全库零引用
v1.0.0-alpha.3 (2026-08-23)
这一版的主线是一致性收口:把「同一件事在不同组件里有几种做法」逐条查出来、裁一种、再钉住。
新增
scrollbar组件:自绘滚动条可以挂在任意一个滚动容器上,不必是本组件的后代新增
date-picker/time-picker的快捷选项(presets):给数据就在浮层里多排一列,自成一套 listbox 键盘新增 日历的多面板、按月 / 季度 / 年 / 周挑、快速翻年、周选整周预览;周序号成为一等部件
week-number新增 select 浮层的底部操作区,「新建」「全选」这类按钮有了位置
新增 热力图的
palette色板轴(六色),与语气轴各管各的新增 number-field 的
parse/format与可选control部件;pin-input 的pattern新增 全局配置做成真正的 ConfigProvider:全局默认 + 局部覆盖,两个适配器一份语义
调整 浮层搬进单一落点:19 个浮层的 positioner 一律 Teleport 到
#xh-portal-root。宿主祖先只要建了层叠上下文,原地渲染的浮层层号就退化成局部序号——这是库无法从自身约束的。按wrapper.querySelector取浮层节点的代码要改从document取调整 盒的定义统一:有
control部件就是盒,trigger退化成盒内的flex: 1按钮。此前 16 个输入 / 选择控件有三种盒,盒是<button>的那五家没法把清空钮放进框里调整 清空 / 关闭 / 移除按钮收成四类契约:焦点模型、空态、尺寸、圆角、互斥、文案键、键盘路径逐条统一;select / cascader / tree-select / popselect 补上了此前完全缺席的键盘清空
调整 状态属性收成一套词汇:当前项一律
data-current,data-active的一名三义拆成data-in-path与data-passed,组级混合态归checked | unchecked | indeterminate调整 默认语言跟随运行时:日期系兜底从写死
zh-CN改成「显式 locale → 全局配置 → 宿主语言 →en-US」。默认周首日随之从周一变成周日,要固定就显式传locale或firstDayOfWeek调整 「移除这一枚 chip / 这一行」统一叫
item-delete-trigger,四个文案键归成deleteItem调整 选择态一族(table / tree / transfer)的选中集合统一叫
selection,载荷键统一{ value }调整 兜底字形改用真图标(
--xh-glyph-mark-*二十个令牌),不再是跨系统长相各异的 Unicode 字符调整 减弱动效只剩一条通道,CSS 侧新增
[data-motion='reduce']钩子;缓动与时长的真源是令牌调整 并排成对的面板定高——穿梭框搬走条目后整体不再变矮
调整 菜单族三家(menu / menubar / context-menu)逐条同值:menubar 此前根本没有「子菜单触发项展开态」这条规则
修复 side-nav 折叠成图标栏后,行按钮与链接没有可及名——读屏用户完全不知道每一项是什么(真机 axe 扫出,critical)
修复 date-picker / time-picker / combobox 有值时下拉钮被藏掉:鼠标用户没有打开入口,Escape 收起时焦点掉到
body修复 日历周序号在周日起算时整列少 1(ISO 周里周日属于上一周)
修复
TimeProps.locale的窄联合与全局 BCP 47 locale 对不上,配de-DE会拿到中文用词修复 4 条子路径导出的类型文件根本不存在,按这些子路径引入时类型全部解析不到
优化 无障碍:真机 axe 覆盖到 dialog / drawer / image-viewer 三个模态,全部通过
优化 版本策略页按实测重算:
data-state取值清单删掉 4 个库里已不存在的,WC 命令式方法从 22 条改成 29 条
v1.0.0-alpha.2 (2026-08-16)
@xihan-ui/motion 与 @xihan-ui/animations 是新包,这一版首次发布。
新增
@xihan-ui/motion动效原语与@xihan-ui/animations现成动效两个包,并补齐动效地基的四个缺口新增
@xihan-ui/icons的 SVG →IconRecord构建期转换器:xihan-icons命令与@xihan-ui/icons/codegen子路径,把任意 SVG 目录转成可摇树的运行期模块新增 首方图标集扩到覆盖中后台界面的常用语义,共 179 枚手绘图标,分九类;只引一枚仍是 149 B(gzip),集合变大不影响你的产物
新增 自定义元素的全局文案层
setXhConfig()新增
startSkinCheck()开发期探测与styles.missing-skin诊断码——漏引皮肤不再静默优化 75 个组件的插槽写上真类型,
vue-tsc从此接得住插槽名与载荷键名的拼写错误优化 104 个组件全部留出
<Comp>Translations的位,哪怕眼下一句文案都没有——后面要加时不必改结构优化 每份皮肤都能单独引入,动画不再指望别处的文件在场
修复 官网作为第一个真实消费方落地时暴露的四条问题(宿主定位、图层序等),全部改代码而非只改文档
调整 collection 铺开的结构必须凑齐必备部件,三档语义写进文档
v1.0.0-alpha.1 (2026-08-13)
@xihan-ui/sound 是新包,这一版首次发布;@xihan-ui/icons 在上一版没能发出去,这一版补齐。
新增
@xihan-ui/sound声音层:纯 Web Audio 的程序化 UI 音效,零音频文件、零第三方依赖、框架无关;命令式反馈服务已接上新增 进度条的环形与仪表盘两种形态(
variant由line扩成line/circle/dashboard)新增 级联选择的空态兜底:
empty部件、data-empty标记与文案覆盖新增 checkbox / switch / combobox / color-picker 能进 HTML 表单,表单字段组件由 18 个变 20 个,五个缺口清完
新增 复合控件响应表单重置:机制本体加 17 个组件全部接上;Web Components 侧同步
新增
--xh-border-control/--xh-border-control-hover两支控件边界令牌,data-contrast随之接上新增 popconfirm 与 float-button 的组件文档页第一次有了 Props 表
修复 摇树第一次真的生效:只用一个组件不再拖来整个库。此前七个库包都是单入口打包,500+ 模块被摊平进一份
dist/index.js,sideEffects: false随之失效。实测只用XhBadge由 168,947 B 降到 538 B修复 RTL 下浮层的
start/end第一次真的翻过来修复 浮层箭头指向锚点,不再钉死在浮层中点
修复
index.css的级联层序:层序声明挪到入口最顶,此前令牌与部分组件皮肤抢先立层修复 四处只在真实宿主里才现形的缺陷(含首屏即展开的对话框与抽屉能服务端直出、无 window 的宿主里不再抛异常)
修复 带语气的 outline 控件边框补到 3:1,控件边界切到
border.control,WCAG SC 1.4.11 第一次真的达标修复 补齐 4 处「边框改不动」的覆盖槽
修复 combobox 展开按钮翻面只转箭头字形,不再带着悬停底色一起转
修复 级联选择的空态占位在 Web Components 侧补齐,两个适配器不再分叉
调整 跨组件已经分叉的名字统一回一套(7 处)。part 名与 prop 名在 1.0 之后就是公开 API,趁 alpha 一次改完,逐条迁移点见各包 CHANGELOG
调整 下拉与列表族的条目度量与高亮档位统一成两档制,分两批铺完 12 个组件
调整 级联选择皮肤翻修:展开路径改品牌淡底加粗、分支条目补右向箭头、列改内容撑宽定高
调整
hideOutside的入参形状随真实宿主那四处修复一并变化
v1.0.0-alpha.0 (2026-08-11)
框架无关重写
基座
- 新增
@xihan-ui/kernel结构原语:anatomy、mergeProps、normalizeProps、Scope、context、id 生成,以及浮层定位、虚拟滚动、代码着色三个端口的类型契约 - 新增
@xihan-ui/machine自研薄状态机:定义层、createService解释器与 vanilla 运行时,受控值绑定与效应生命周期 - 新增
@xihan-ui/behavior交互行为原语:消解层、焦点域、滚动锁、进出场,随后补上条目集合导航(roving tabindex 底座)与首字母连打检索 - 新增
@xihan-ui/tokens设计令牌体系与主题运行时,令牌从 DTCG 源产出 CSS / JSON / TS 三种形态 - 新增
@xihan-ui/styles纯 CSS 皮肤层,后续补上 reset 层 - 新增
@xihan-ui/kernel全局诊断通道,状态机错误投递进该通道而不是抛在使用者脸上
适配器
- 新增
@xihan-ui/vueVue 3 适配器,Button / Dialog 纵切片先打穿全链路 - 新增
@xihan-ui/web-componentsWeb Components 适配器,Light DOM 行为宿主;xh-dialog把「有状态组件也能框架无关」这件事验证掉 - 新增 WC 侧观察 Light DOM 增删并重新接线,抹平「运行期增删条目」上的适配器分叉
- 新增 WC 角色节点契约校验与 Custom Elements Manifest 生成
组件
- 新增 102 个组件逐批铺开,每个都同时产出无头内核、Vue 组件、自定义元素与默认皮肤:从 Button / Dialog 起,经 Switch、Checkbox / Collapsible / Separator、Toggle / Progress / Badge、RadioGroup / Tabs / Accordion、Tooltip / Popover、Menu、Select / Avatar / Field、NumberField,到日期族与最后一批,双适配器铺满
- 新增 alert / spinner / skeleton / empty-state 四个反馈类组件
- 新增 Checkbox 三态
- 调整 Select 支持多选,选中值由单值改为集合:
SelectValueChangeDetails.value由string | null变string[],SelectApi的value/valueText变数组,setValue签名变(next: string | string[]) => void;Vue 侧update:value载荷与 WC 侧value-change的detail随之变化。见选择器
视觉词汇表
- 新增 三个正交的视觉轴:
variant形态(solid/subtle/outline/ghost)、tone语气(brand/neutral/success/warning/danger/info)、size尺寸(sm/ 缺省 /lg)。语气做成与组件无关的共享一层,各组件的形态规则只消费它声明的私有槽——加一个语气改一处,不是逐个组件写六遍 - 新增 34 个组件接入这套词汇表:按钮族与表单控件、十个输入类组件、以及标签页、步骤条、菜单族、分页、表格、对话框、抽屉等。没写轴的组件外观与接入前逐值一致
- 调整 实心底上的前景色按实测对比度分派而非统一白字:600 档上白字对 brand 5.08、neutral 7.80、danger 4.83 达标,而 success 3.04、warning 2.70、info 3.47 都不到 4.5,这三族配深字
- 调整 破坏性变更:
alert的variant改名为tone。它原本的取值是success/warning/danger——那是语气不是形态,与全库词汇表冲突。取值不变,只改属性名;同时移除公开导出的AlertVariant类型 - 调整
toast的配色改走共享语气层,由type内部派生(error→danger,loading→ 中性),公开 API 不变 - 调整 三条轴由裸
string收成联合类型,从@xihan-ui/kernel导出:Tone(六档)、Size(sm/md/lg)、ControlVariant(outline/subtle/ghost,十二个输入控件)与ActionVariant(前者再加solid,按钮族) - 修复
checkbox半选态的横杠此前不可见:方框只在全选时填色,半选保持画布底,而横杠用的是实心底上的前景色,白压白等于没画
自研替换第三方
- 新增
@xihan-ui/position自研浮层定位引擎(包含块解析、缩放换算、翻面与避让、跟随更新),移除@floating-ui/dom - 新增 自研虚拟滚动内核,移除
@tanstack/virtual-core - 新增 WC 自研响应式基类,移除
@lit/reactive-element - 新增
@xihan-ui/markdown自研解析与渲染,移除markdown-it - 新增 代码着色走端口,内置自研粗粒度词法器,可换 Shiki
- 调整 至此全部库包的运行时第三方依赖只剩一个(
@internationalized/date,仅日期族使用)。见包与依赖关系
AI 与 Markdown
- 新增
@xihan-ui/chat-stream协议内核与 AI 组件族第一批:SSE 读取、协议归一、parts 归约、会话 store,配 Thread / Composer / CodeBlock 三件与粘底原语,双适配器 - 新增
@xihan-ui/markdown流式渲染内核,增量切块 + 稳定 key + 消毒 - 优化 Markdown 逐步实现缩进代码块、Setext 标题、跨行链接引用定义与列表松紧排布,CommonMark 官方用例一致率由 375 提升至 489
视觉层
- 新增
@xihan-ui/backgrounds:WebGL2 背景效果与数据驱动粒子点云,框架无关、零第三方依赖。流场跑片元着色器、粒子走gl.POINTS,两通道共用同一段 GLSL;内置 14 个效果,不支持 WebGL2 时降级为 CSS 静态背景 - 新增 两个适配器接上视觉层,各走独立子入口
@xihan-ui/vue/backgrounds与@xihan-ui/web-components/backgrounds,@xihan-ui/backgrounds声明为可选 peer - 修复 修复画面在真实页面里一片空白的三个成因
图标
- 新增 Icon 原语:
IconRecord/IconNode/IconTag类型、connectIcon、XhIcon、<xh-icon>与icon.css。图标数据是结构化节点数组而非 SVG 字符串,渲染端逐节点建元素,运行期不经 HTML 解析器 - 移除 旧
@xihan-ui/icons(27 个第三方图标集的聚合,约四万个图标)整包移除并在 npm 上弃用,重写为只收自研图标的首方集,第一批 29 个覆盖组件库自用的全部语义
无障碍
- 新增 无障碍扫描接上真实浏览器与 axe,逐个组件扫
- 新增 键盘规格表机读化,随包提供
- 修复 存量无障碍违规清零,由 24 条降到 2 条(WC 侧
steps一条,外加一条步骤重放豁免) - 修复 令牌
fg-subtle达到 AA,并给对比度立下判据 - 修复 焦点陷阱抓不住第一次逃逸;移除持有焦点的条目后不再让整组脱离 Tab 序列;删掉文件上传条目后把焦点交回投放区
- 修复 浮层族改用 fixed 坐标系,不再被 overflow 祖先裁掉
- 修复 挡住输入法组合态
- 修复 Dialog 三处:模态背景失活、非模态焦点域、收起态 hidden
- 修复 Field 的名字关联不再依赖 control 是可标注元素;Splitter root 不再输出
aria-orientation - 修复 消解层只在展开期间入栈,不再与开合无关地常驻
- 修复 状态机停机后送入的事件一律静默丢弃,dev 下不再抛
令牌与发布
- 调整 皮肤层令牌成为唯一事实源,删掉全部字面量兜底,跨组件共享的默认值全部令牌化
- 新增 14 个公开包锁步同版发布
