Repository navigation
fix(plugin-detail): reveal the inline-edit pencil on keyboard focus - #26325
Conversation
Red first: the read-mode pencil in DetailSection and HeaderHighlight is revealed on hover only, so a Tab stop lands on an invisible control. Claude-Session: https://claude.ai/code/session_01SMps7wq7rBTk53e8KTSEup Co-authored-by: Claude <noreply@anthropic.com>
The read-mode pencil in DetailSection and HeaderHighlight was `opacity-0 group-hover:opacity-100`: a real button, so a Tab stop landed on an invisible control. It now also shows on `focus-visible` and `group-focus-within`, the spelling RowActionMenu and data-table already use. Hover and double-click are unchanged. Claude-Session: https://claude.ai/code/session_01SMps7wq7rBTk53e8KTSEup Co-authored-by: Claude <noreply@anthropic.com>
`node scripts/gen-sdui-manifest-node.mjs` under the verify lock: the artefact is unchanged and only plugin-detail's record moved; `node scripts/check-sdui-manifest.mjs` exits 0. Claude-Session: https://claude.ai/code/session_01SMps7wq7rBTk53e8KTSEup Co-authored-by: Claude <noreply@anthropic.com>
…ncil-focus-reveal
|
ACCEPT · seat 2 · 2026-10-26T21:12Z · PR #26325 head
Not armed yet: on the plugin-detail line this PR enqueues after #26055 (seat 2) and #26277 (seat 1, #26182) have MERGED, with a re-record of |
…ncil-focus-reveal # Conflicts: # scripts/sdui-manifest.sources/plugin-detail.json
… tree The merge took main's scripts/sdui-manifest.sources/plugin-detail.json (main moved it with the activity fold and the related-list actions fix); `node scripts/gen-sdui-manifest-node.mjs` under the verify lock re-records it over the merged plugin-detail sources. The artefact is unchanged and only plugin-detail's record moved; `node scripts/check-sdui-manifest.mjs` exits 0. Claude-Session: https://claude.ai/code/session_01SMps7wq7rBTk53e8KTSEup Co-authored-by: Claude <noreply@anthropic.com>
…ncil-focus-reveal # Conflicts: # scripts/sdui-manifest.sources/plugin-detail.json
维护者速读改了什么:记录详情页读模式下,可编辑字段旁的铅笔(行内编辑)按钮现在在键盘聚焦时也会显示,不再只在鼠标悬停时出现;详情区和顶部高亮条两处一致。 席位核对seat 2 · 2026-10-27T03:18Z · head
|
⛔ merge queue 构建失败 — 先分诊,再决定要不要重排队列构建 40443739774 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集), 分类: 失败的 job(日志抽取,best effort):
跨 PR 相同签名(24h,按失败测试文件聚合):
历史信号:
分诊清单:
Generated by Claude Code · merge-queue-triage workflow (#4859) |
Part of #25883
Clause-②: no
Metadata-protocol: none
Item 1 of #25883: the record page's read-mode inline-edit pencil now shows on keyboard focus, not only on hover. Item 2 (remember the empty-field toggle) has an open storage-key choice and stays on the card; #25883 remains open.
What changed
ui/packages/plugin-detail/src/DetailSection.tsx, the details body: the pencil beside an editable field wasopacity-0 group-hover:opacity-100. It is a real button, so a Tab stop landed on a control the user could not see, and the sharedButtonfocus ring was drawn at opacity 0. It now also carriesgroup-focus-within:opacity-100 focus-visible:opacity-100.ui/packages/plugin-detail/src/HeaderHighlight.tsx, the highlights strip: the same pencil gets the same two utilities.RowActionMenu(plugin-grid) anddata-table(components) already use for their hover-revealed row buttons.focus-visiblereveals the pencil while it has keyboard focus.group-focus-withinreveals it while anything in its own field has focus, for example a lookup's link in the value.titlehint, double-click to edit, the pencil's accessible name (detail.editInlineHint), and every locale pack.scripts/sdui-manifest.sources/plugin-detail.jsonwas re-recorded withnode scripts/gen-sdui-manifest-node.mjsunder the verify lock. The artefact is unchanged; only this package's record moved..changeset/25883-pencil-focus-reveal.md:@object-ui/plugin-detailpatch.Tests
New:
ui/packages/plugin-detail/src/__tests__/inlineEditPencil.focusReveal-25883.test.tsx, 8 tests, covering both places.jsdom has no layout and no CSS engine, so it cannot measure "visible on focus". The tests pin the contract a browser turns into visibility:
buttonand takes focus;focus-visible:opacity-100andgroup-focus-within:opacity-100next to the unchangedopacity-0 group-hover:opacity-100;focus-visible:ring-2survives the className merge;.groupancestor is the pencil's own field, so focus in one field reveals only that field's pencil.Activation of the focused pencil, double-click on the value, and no pencil on computed or non-editable fields are asserted as behaviour. The pencil is found by its icon, not by its localized label.
2409c9c8d7with the fix absent:Tests 2 failed | 6 passed (8). Both failures are at thefocus-visible:opacity-100assertion, one forDetailSectionand one forHeaderHighlight. Focusability, hover and double-click were already green there, which is the defect: a focusable but invisible control.76d5a63f(the fix, plusorigin/main6633075 merged in), from cwdui/underscripts/pm/os-verify-lock.sh:pnpm exec vitest run packages/plugin-detail --maxWorkers=2:Test Files 305 passed | 1 skipped (306),Tests 2833 passed | 18 skipped (2851). All 306 test files under plugin-detail ran, the new one included. The same run on the pre-merge head55fe5e19read the same counts.pnpm --filter @object-ui/plugin-detail run type-check(bothtsc --noEmitandtsc -p tsconfig.test.json, so the new test is compiled): exit 0.node scripts/check-sdui-manifest.mjs: exit 0. The artefact is unchanged, and 27 package records are current.Gates
Derived with
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackat head76d5a63f: 45 commands.node scripts/check-sdui-manifest.mjs,pnpm check:nul-bytes,pnpm check:cross-package-test-inputs,pnpm check:test-source-alias,pnpm check:type-check-coverageand the changeset gates.pnpm check:type-check-debt. Its re-measure waits on the shared verify lock for a closure build and then runs tsc over every package. It was still waiting on the lock at a 300 s cap on a contended box, so it is left to CI'sLint & Repo Gates.--ranreconciliation:45 derived famil(ies) accounted for — 44 run, 1 NOT-MEASURED, exit 0.Acceptance notes
DetailSection.tsxthe copy button drawn beside a read-only, copyable field has the sameopacity-0 group-hover:opacity-100and is also a Tab stop. The claim scopes this PR to the pencils, so it is reported to the seat rather than fixed here.detail.editInlineHint("Double-click to edit"). A keyboard user activates the pencil with Enter or Space. Locale packs are out of this claim's scope; this is left as an open question to the seat.RowActionMenuaddspointer-coarse:opacity-100for that case. The mobile read row's missing edit path is out of this claim's scope.actions: []no longer draws the built-in New #26277. Neither touchesDetailSection.tsxorHeaderHighlight.tsx.Generated by Claude Code