Repository navigation
fix(app-shell): name Studio's group-title, Description, Help text and nav-item inputs - #26926
Merged
Merged
Conversation
… nav-item inputs The form designer's inline group-title input takes the group inspector's "Group name" label as its aria-label. The field inspector's local TextareaField closes its label/textarea pair with a per-instance useId(), which names Description and Help text. The nav-item inspector ties its "Link to object" and "Label" labels to their controls with htmlFor. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QsR2jT6kwaZ4RiKsDR3s5f
…by its Link to object label The shared-Select suite pinned that the object picker had no accessible name, as its native control had none. The picker is now tied to its visible label, so the pin reads that name instead. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QsR2jT6kwaZ4RiKsDR3s5f
Contributor
Author
席位核对ACCEPT · seat
Landing: no contract review is owed (no published schema, no governed text, |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested by Steedos · project thread
Fixes #26732
Clause-②: no
Metadata-protocol: none
维护者速读
id/htmlFor关联和一个aria-label,没有新文案键,不动元数据和 spec。一个旧测试钉住了「对象下拉没有名字」,本 PR 把它改为钉住新名字。回滚即 revert。StudioDesignSurface.tsx里StudioNavItemInspector的两处htmlFor;ObjectFieldInspector.tsx的TextareaField;StudioDesignSurface.sharedSelect-11865.test.tsx改掉的那条断言。What changes
ObjectFormDesigner.tsx): a declared group's inline title input element had no label,aria-labelorid. No visible label sits beside it, so it takesaria-labelfrom the label the group inspector already gives the same value,engine.studio.designer.group.nameLabel("Group name" / 「分组名称」). No new key.ObjectFieldInspector.tsx): the file-localTextareaFielddrew itsLabelbeside the textarea element without closing the pair. It now mints a per-instanceReact.useId()and setshtmlFor⇄id, the way_shared.tsx's form atoms (InspectorTextField,InspectorNumberField) close theirs. EveryTextareaFieldin the inspector gets its name from this one change.StudioDesignSurface.tsx,StudioNavItemInspectoronly): the Link to object label and the Label label were drawn above their controls withouthtmlFor. Both now close the pair with auseId(), as the same inspector's target, URL, Open in and icon fields already did. The object picker is the sharedStudioPicker, which already forwardsidto its Radix trigger, so no component changed; its header comment now says the object picker is named like the others.Tests
ObjectFieldInspector.textareaNames-26732.test.tsx: Description and Help text found bygetByRole('textbox', { name })andgetByLabelTextin en; a zh case awaitsloadStudioCatalogue('zh')at module scope (the test(app-shell): flowCanvasChip-11665 awaits the lazy studio zh catalogue before reading the tooltip #26800 pattern) and finds both by 「描述」 / 「帮助文本」.ObjectFormDesigner.groupTitleName-26732.test.tsx: the group-title input found bygetByRole('textbox', { name: 'Group name' }), holding the group's label.StudioDesignSurface.navItemInspectorNames-26732.test.tsx: the object picker found bygetByRole('combobox', { name: 'Link to object' })(and it is thenav-link-objecttrigger), the Label input bygetByRole('textbox', { name: 'Label' }).StudioDesignSurface.sharedSelect-11865.test.tsx: its pin "the object picker had none" now reads the object picker's name asLink to object.node scripts/ablation-replace.mjs(anchor 1 → 0, restored blob equal to HEAD each time): dropping the group input'saria-labelreds its test (1 failed of 1); droppinghtmlFor={id}fromTextareaFieldreds both textarea cases (2 failed of 2); dropping the object picker'sidreds the nav test, and so does dropping the Label input'sid(1 failed of 1 each).git diff HEADempty after all four.Acceptance notes
ObjectFormDesigner.tsxhas no other unnamed input (its icon buttons all carryaria-label). InObjectFieldInspector.tsx, every control other thanTextareaFieldis a_shared.tsxatom that already closes its pair, anInspectorComboFieldwith a label orariaLabel, or a checkbox inside its label element; the picklist option rows' value and label inputs are named by their placeholders ("Value", "Label") and the color swatch by itstitle, so they are not unnamed and are left as they are. In the nav-item inspector, the type radios sit inside their labels and the remaining fields were already tied.StudioDesignSurface.sharedSelect-11865pinned that the object picker kept the native control's lack of a name; this card asks for that name, so the pin now reads it.Verification
All readings at head
67406db6(base2720874a), underscripts/pm/os-verify-lock.shwith--maxWorkers=1.Touched package: @object-ui/app-shell
pnpm exec turbo run build --concurrency=2 --filter='@object-ui/app-shell^...', 63 tasks, VERDICT command-exit 0. Thenpnpm --filter @object-ui/app-shell type-check(tsc --noEmitandtsc -p tsconfig.test.json, so the tests too): VERDICT command-exit 0.StudioDesignSurface.sharedSelect-11865: Tests 79 passed (79).ObjectFormDesigner,ObjectFieldInspector,StudioNavItemInspector,nav-link-objectorInterfacesPillar(89 files). First run ata3764046: 1 failed, 892 passed, thesharedSelect-11865pin of the unnamed object picker, updated in67406db6and green after. The rest of app-shell is left to CI's Test UI shards.ui/eslint.config.json the seven touched files: 0 errors, and no warning on a changed line.Derived gates
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackderived 34 commands for the 8 changed paths (same list at both heads); all 34 exit 0, each code captured before any pipe, among themcheck:nul-bytes,check:test-source-alias,check:cross-package-test-inputs,check:type-check-coverage,check:type-check-debt,check-sdui-manifest,check-empty-changesetandcheck-changeset-no-major.pnpm --dir ui exec vitest run scripts/: Test Files 178 passed, 2 skipped (180), Tests 5065 passed, 2 skipped.--ranreconciled: "34 derived famil(ies) accounted for — 34 run, 0 NOT-MEASURED".check-changeset-no-major,check-adr-0087-registration,check-closing-keyword-parity,check-partof-closing-keyword, all exit 0.pnpm --dir ui run check:new-line-citations: 0 new citations.Human Minimum
packages/specholds no runtime logic. (not touched)pnpm lintpasses. (lint is CI's)main, one pull request.packages/spectouched: its generated artifacts are regenerated and committed. (not touched)content/docs/references/,packages/*/CHANGELOG.mdorcontent/docs/releases/.🤖 Generated with Claude Code
https://claude.ai/code/session_01QsR2jT6kwaZ4RiKsDR3s5f
Generated by Claude Code