fix(tree-select): 浮层此前只钉了宽度下限(min-w-[var(--anchor-width)]),没有上限,于是宽度是 shrink-to-fit——等于整棵树里最长的那个 label。三件事叠在一起:行上的 truncate 在容器无上限时根本不限制固有宽度;折叠着的子树仍在 DOM 里(高度被压成 0,overflow:hidden 的容器 max-content 仍由内容决定);浮层没有 max-w。结果是一个从没被展开过的长节点名就能把浮层撑得比视口还宽,被 Positioner 推到贴左边缘,与触发器完全对不上(消费方实测:203 字的节点名 → 1536px 浮层,视口 1280px)。现在上限钉在 min(32rem, var(--available-width)):只钉「不超出视口」还不够,288px 的触发器配那个节点名仍有 1270px、照样盖住半个页面,32rem 让浮层留在触发器的量级上;宽字段不会被压窄,CSS 里 min-width 恒赢过 max-width。同一份浮层配方还在 Select 与 Combobox 上(同样只有下限、项上同样有 truncate),一并钉上。另新增 TreeSelect 的 popupClassName(此前 className 只落触发器,浮层连临时兜一下的余地都没有)与 virtual 透传(内部 Tree 早有虚拟滚动,从 TreeSelect 没有入口——上万节点的教材目录在收拢式选择器里比在常驻树里更常见)(#359)
Changelog
更新日志
两个包独立发版:@hulianui/ui 提供组件,@hulianui/tokens 提供设计令牌 CSS。记录遵循语义化版本并由 changesets 生成。
- 8b8e941
- acc418a
feat(question-editor): 度量行的三个字段(难度 / 分值 / 预估用时)此前恒定渲染,没有出口。而「一道题值几分」往往不是题的属性,是它在某张卷上的属性——同一道题期中卷 8 分、单元测 5 分,分值属于「卷 × 题」这条关系。采用这套建模的消费方在录题页会被迫显示一个填了也不该生效的分值框:老师填了要么与产品口径冲突(题库里出现「这道题 3 分」),要么被提交时静默丢掉,两条都比不显示更糟;
estimatedMinutes同理。现在收hiddenFields("difficulty" | "score" | "estimatedMinutes"的数组):关掉的字段不渲染,那一行的列数跟着实际字段收(关一个收成两列,三个全关整行不渲染),且编辑器对它一个字都不写——切题型不再按默认分表换算score,因为不显示却照写就是静默改数据。值本身照旧原样进出Question,validateQuestion也照旧。只有度量行那三个给关:题干 / 选项 / 答案 / 解析是题之为题的部分。此前唯一的绕法是把defaultScoreByType整表压成 0——那只是不再凭空造分,输入框还在 (#358) - 7d92cb4
feat(page-header):
meta此前恒定渲染成标题行下面那条<ul>,位置不可选。只有两三个短事实值时(沪科技版·4 章·0 题·原件 105MB)那一整行几乎是空的,白白把页头拉高一档;而这些值本来就与subTitle同字号同色,视觉上就是一串。新增metaPlacement("block"默认 /"inline"):内联档把这条<ul>挂进标题群、去掉mt-2,排在subTitle之后、tags之前(同一串弱化小字不被状态标记劈开),有subTitle时在它与第一项之间补一个同款分隔符——否则第一处是空格、后面全是中点,看着像漏写;没有subTitle则不补,标题是另一档字号字重,紧跟一个中点会读成「标题也是一项」。两档语义完全一样:仍是ul/li、仍自动跳过空项、分隔符仍是aria-hidden装饰位。这条是 #240 的延续:那次解决「有没有 meta」,这次解决「放哪」,消费方不必再为了排成一行把版本名和事实值join(" · ")塞进subTitle——一拼成文本,列表语义、空项跳过、装饰位分隔符就全丢了 (#357) - 1b7a63c
fix(pro-table): 受控行选择(传了
rowSelection+onRowSelectionChange)下clearSelection是空操作——它写死了清内部 state,而受控模式渲染读的是传进来的那份,于是批量条不消失、行仍是选中态、消费方 state 不变,按钮却在、能点、有 hover 态,和 #202 一样安静。三条出口是同一个函数,此前一起失效:批量条里内置的「清空」、batchActionsctx 给的clearSelection、actionRef.clearSelection()。现在跟着setSelection分流(受控走onRowSelectionChange,非受控仍清内部 state)。顺带把actionRef的实现体改走 ref:句柄此前只在managed变化时重建,闭包里的onReload/onRowSelectionChange定格在首次渲染那一份,而这两个 prop 写成内联箭头是常态——命令式那条路会调到旧回调,修完分流之后这一点尤其要命 (#356) - 3d0b0b5
feat(question-editor): 题图缩略图条此前只有「缩略图 + 删除 + 插入图片」,从自造表单迁过来的消费方丢了三件本来有的能力;现在补齐:每张图底下一对「前移 / 后移」(题图顺序就是它们写在题干末尾的顺序,也就是组卷预览、学生端与 docx 导出里的显示顺序,此前要调序只能删掉重传一遍),点缩略图用
ImageViewer打开看大图(80px 够认出是哪张,认不出几何题图里的字母标注),上传失败那一行留住原来的File并给出「重试」(此前只能关掉提示重新选文件)。调序照常经onChange回传整份Question,不另开onSortFigures:顺序本来就是stem的一部分,编辑器手里既有题干也有figureFilter,多一个口子只会让题图顺序有两个真源;用按钮而不是拖拽,与本编辑器里选项调序同一套交互,键盘与读屏天然可用,也不必为一条缩略图条把 dnd-kit 塞给所有@hulianui/ui/math消费方。类型 / 大小 / 张数上限仍由消费方在onUploadFigure里throw(#354)3d0b0b5fix(question-editor): 题干输入框底下那块预览恒是
<Formula>,它不认 markdown 图片语法——0.64.0 的figureFilter(#353)把行内公式图划出题图之后,那些引用按设计留在题干正文里,于是预览把原样印成一串源码;现在题干预览改走库内题干渲染的同一条路(QuestionCard/QuestionAnswer共用的那一块),图画出来、macros一并透传,老师在输入框底下看到的就是展示端会渲染出来的东西。没给resolveFigure时仍退回默认预览(那条路一样解析不出图);正文里既没公式也没图时预览整块收起——那时它与输入框逐字相同。附带两处:题干附图的 alt 优先用引用自己写的那段(里方括号里的 LaTeX 比「题目附图 2」有信息),没写才回落到figureAlt编号;MathTextarea的renderPreview现在说了算——返回null表示这段没什么可预览的,不再只看值里有没有$(#355)
还有 102 个更早版本,切到“全部”查看。