Skip to content

fix(bulma-ui): name the picker bases and the horizontal examples from a Field label - #1007

Merged
allxsmith merged 15 commits into
mainfrom
fix/968-field-label-leftovers
Oct 10, 2026
Merged

allxsmith merged 15 commits into
mainfrom
fix/968-field-label-leftovers

Conversation

@allxsmith

@allxsmith allxsmith commented Oct 9, 2026 •

Copy link
Copy Markdown
Owner

The leftovers from #939, where a Field label still named nothing.

The picker bases. InputBase composed in a labeled Field takes the id the label points at, so the label names it. DateInputBase, TimeInputBase and DateTimeInputBase composed the same way didn't: the label's for pointed at nothing and the input had no accessible name. They now read the Field's id the way InputBase does and use it when you set no id of your own, on the text input and on the native input a touch device gets. The popover's ids build on it, the same as when the convenience DateInput hands its id down. An inline picker has no input, so it takes nothing from the Field and builds nothing on its id, which is the line #939 drew for the convenience pickers. The convenience wrappers behave as before: inside a Field of their own, their label always carries its own htmlFor, so that Field offers no id to take.

The docs examples. The With Field Wrapper and With Field and Control Wrappers examples on the Input, Select and TextArea pages put the control in an inner Field inside a horizontal Field's body. That inner Field starts its own label scope (#495), so the outer label's for matched nothing and the control was unnamed. They now wire the label by hand with labelProps={{ htmlFor }} and a matching id, the recipe #939 put on the other control pages, with the same note above them.

I looked at fixing that side in Field instead, so the markup as written would just work. The inner Field's scope is what stops a horizontal row of several inner Fields from handing one id to every control in it. Telling a lone inner Field from one of several at render time means either inspecting the body's children by type, which misses anything behind a wrapper component or a fragment, or having controls register themselves, which leaves the server render and first paint without the association. A label that names the control only while it has no siblings also seemed worse than wiring it explicitly. So the scope stays, and the examples wire it.

Also in here:

  • The Field label TSDoc and the Field page's accessibility notes list the picker bases among what a labeled Field names, and say an inline picker takes nothing. The bestax-form skill says the same.
  • A Field story with the picker bases composed in labeled Fields, and a note in src/form/CLAUDE.md for whoever adds the next base.
  • Tests: each picker base in Field > Control is named by the label, on the native path too, a caller's id still wins, and an inline base takes no id from the Field and derives none from it. The hand-wired horizontal recipe is tested for Input, Select and TextArea, with and without the inner Control.

Before changing anything I rendered every one of those examples and the composed bases on main, with #974 and #979 in, and checked the names with Testing Library. Each example had a for that matched nothing and an unnamed control, and each picker base was unnamed where InputBase in the same spot was named.

Left out: DateRangeInputBase in a labeled Field. Its inputs keep their own Start date and End date names, but its group isn't pointed at the Field's label the way the DateRangeInput wrapper's is. That's tracked in #1005.

pnpm all passes locally.

Fixes #968

Summary by CodeRabbit

  • Accessibility
    • Date, time, and date-time pickers now associate with their containing field’s label when they render an input and no explicit ID is provided. Inline pickers remain unassociated because they render no input.
    • Updated form examples and guidance clarify label associations for nested horizontal layouts and show how to connect labels to inputs explicitly.

DateInputBase, TimeInputBase and DateTimeInputBase composed in a labeled
Field now take the id its label points at when the caller set none, as
InputBase does, so the label names the input on the text and native paths
alike. Inline there is no input, so they take nothing from the Field and
build no ids on it.
…r label

The Context-Aware Rendering examples on the Input, Select and TextArea pages
put the control in an inner Field inside a horizontal Field's body. That
inner Field starts its own label scope, so the outer label's for matched
nothing and the control had no name. They now wire the label by hand with
labelProps={{ htmlFor }} and a matching id, the way the other control pages
do. The Field page and the bestax-form skill name the picker bases among
the controls a labeled Field names.
… to a name

Each control in the hand-wired horizontal layout the Context-Aware Rendering
examples show, with and without the inner Control, takes its name from the
outer Field's label.
@coderabbitai

coderabbitai Bot commented Oct 9, 2026 •

Copy link
Copy Markdown

Review in Change Stack →Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Repository: allxsmith/bestax/.coderabbit.yaml
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: f7d0503c-ee19-46d0-91d5-182260b5f078

📥 Commits

Reviewing files that changed from the base of the PR and between 196cd6d and ddfb5d3.


📒 Files selected for processing (7)
  • bestax-mcp/data/components/Field.json
  • bestax-mcp/data/skills.json
  • bulma-ui/src/form/Field.stories.tsx
  • bulma-ui/src/form/Field.tsx
  • docs/docs/api/form/field.md
  • skills/bestax-form/SKILL.md
  • skills/bestax-form/references/patterns.md

🚧 Files skipped from review as they are similar to previous changes (4)
  • skills/bestax-form/SKILL.md
  • bulma-ui/src/form/Field.tsx
  • bestax-mcp/data/components/Field.json
  • docs/docs/api/form/field.md

Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review.



Walkthrough

Picker bases now use their containing Field label ID when no ID is supplied, except in inline mode. Horizontal nested Input, Select, and TextArea examples use explicit matching label targets and control IDs. Tests, stories, and documentation describe these association patterns.

Changes

Field label associations

Layer / File(s) Summary
Picker base label association
bulma-ui/src/form/*, bulma-ui/src/form/__tests__/Field.test.tsx, bestax-mcp/data/components/Field.json, docs/docs/api/form/field.md, skills/bestax-form/SKILL.md
Date, time, and date-time picker bases use the Field label ID when no explicit ID is set and the picker is not inline. Tests, stories, and guidance cover the association.
Nested horizontal control associations
bestax-mcp/data/components/{Input,Select,TextArea}.json, docs/docs/api/form/{input,select,textarea}.md, bulma-ui/src/form/__tests__/Field.test.tsx
Horizontal examples connect outer Field labels to nested controls with matching IDs. Tests cover hand-wired associations across nested Field and Control layouts.
Field label markup and guidance
bulma-ui/src/form/Field.tsx, bulma-ui/src/form/Field.stories.tsx, docs/docs/api/form/field.md, bestax-mcp/data/components/Field.json, skills/bestax-form/*
Field.Label examples place a native label inside the label column and link it to a control ID. Component, API, and skill guidance describes this markup and label association.

Priority: ➖ Normal

Estimated code review effort: 3 (Moderate) | ~20 minutes

Change: Bug fix · Severity of issue fixed: Medium

Merge Risk: ⚪ Minimal · up to ddfb5

The changes connect picker and nested-control labels to their inputs while preserving the documented exceptions. The inspected code and guidance are consistent, so no actionable merge risk remains.

Pre-merge checks | Passed 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check Passed The title clearly identifies the main changes: labeling the picker bases and correcting horizontal Field examples.
Description check Passed The description provides a detailed summary of the implementation, affected areas, tests, documentation updates, scope exclusions, and related issue. It does not reproduce the template sections for af…
Linked Issues check Passed Issue #968 has two coding requirements. The Input, Select, and TextArea horizontal examples now use matching labelProps={{ htmlFor }} and control id values. DateInputBase, TimeInputBase, and `…
Out of Scope Changes check Passed The implementation, tests, Field documentation, examples, story, and bestax-form guidance support the label-association requirements in #968. The generated data updates reflect those documentation c…
Docstring Coverage Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 7…


✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR


🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR


  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

Preview Deployment

Preview URL: https://830c2458.bestax.pages.dev

Comment thread docs/docs/api/form/input.md

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Deep review — 0 blocking · 1 advisory

# Severity Area Finding Location
1 🔵 Advisory Accessibility Four other horizontal examples on the same two pages keep the unwired inner-Field shape (input.md:541, 560, 582, select.md:326) — neither fixed nor tracked docs/docs/api/form/input.md:637

Overall: The library change is sound and tightly scoped. const id = idProp ?? (inline ? undefined : fieldLabelId) lands in all three picker bases before any early return, the hook is read unconditionally, and because each base renders the native <input type="date|time|datetime-local"> and the role="combobox" text input in mutually exclusive branches, one id can never appear twice in the DOM. It matches InputBase's rest.id ?? fieldLabelId presence semantics exactly, so an explicit id={undefined} still adopts, and inline is excluded before popoverId derives anything, which preserves the line #939 drew. I ran the whole src/form suite (46 files, 2829 tests) and src/__tests__/stories-conformance.test.ts green, and tsc -p tsconfig.test.json clean. The riskiest part is not in the source: the three picker bases are the complete set of single-input bases that were missing this, and DateRangeInputBase (two inputs, a group) is correctly excluded by the convention the diff writes into src/form/CLAUDE.md. Look at the advisory first — it is the only thing I would want a decision on.

Residual risk:

  • Another *Base left unnamed. Refuted by enumeration: the folder holds exactly seven *Base.tsx files, and a grep for useFieldLabelId now shows six of them consuming it. The seventh, DateRangeInputBase, renders two inputs rather than one, so the convention added to src/form/CLAUDE.md does not claim it, and its gap is tracked in #1005.
  • A picker mode with no input that adopts the id anyway. Refuted: each of the three files has exactly two early returns (if (useNative), if (inline)) plus the main path, and useNative is gated on !inline in all three. inline is the only no-input mode, and it is the one excluded.
  • A derived id breaking a lookup. Refuted: popoverId is now built from the surrounding Field's useId output (which carries : on React 18), but a grep over bulma-ui/src finds no querySelector on an id selector and no getElementById in the picker internals — the id reaches only attributes (id, aria-controls), where a colon is a legal IDREF. The React 18 and React 19 matrix jobs are both green on this SHA.
  • Hydration mismatch on the native path. Refuted: the adopted id comes from the Field's useId, identical on server and client, and the server and first client render agree on the text path (useIsHydrated false, shouldUseNative false) before switching — the id does not change when the branch does.
  • Open, answered by documentation rather than by code: two picker bases composed in one plain labeled Field now collide on ${id}-popover as well as on the id itself. The label TSDoc already says to give each an id of its own, and this is the same shape InputBase has had since #495, so it goes on the record rather than into a finding. The dangling for an inline picker leaves on the label is likewise unchanged and tracked in #1004.
  • One caveat on my evidence: the Build and Test check was still in_progress when I posted, so the root scripts/ suite and the docs-fence lint are covered only insofar as gate, Test and Preview Deployment and both React-matrix jobs are green.

🏄 Clean little set wave, dude — three pickers finally paddle out with the name the label was shouting at them, and the gnarly inline rip got read right instead of fought. Only thing still floating out back is four old horizontal examples on the same two pages nobody roped in. Good to go once someone says where those are headed.

The Validation Error, Addons and Submit Row examples on the Input page and
the Select in Narrow Field example on the Select page hold the control in an
inner Field, which starts its own label scope, so the outer label named
nothing. Each now points the outer Field's label at the control with
labelProps={{ htmlFor }} and a matching id, the recipe the Context-Aware
Rendering examples already use. In the Addons example the label targets the
Input rather than the static country-code Button beside it.
@allxsmith

Copy link
Copy Markdown
Owner Author

deep-review: verify

Every open thread has a reply: fixed, with the commit, or refuted with a reason. This settles them on 4dbe816.

@github-actions

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

Preview Deployment

Preview URL: https://6e9a6294.bestax.pages.dev

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Deep review (verify) — 1 resolved · 0 open

# Severity Area Finding Location Outcome
1 🔵 Advisory Accessibility Four more horizontal examples left the control unnamed docs/docs/api/form/input.md:643 ✅ Verified fixed, resolved

Overall: This pass settled threads and reviewed no commits. The single open advisory thread is resolved: 6fef2f65 wires all four examples it named — invalid-email, phone-number (targeting the Input, not the static +44 Button) and submit-row-name on the Input page, department-field on the Select page — and 5dd85eea carries the regenerated Input.json / Select.json. I confirmed the mechanism in source (Field.tsx:236-267 presence-semantics on htmlFor, the controlId = id ?? … resolution in useAutoLabelId, and Input.tsx:169 / Select.tsx:143 placing it after the props spread), checked that the ten example ids across the three pages are distinct so nothing collides when every tsx live fence renders on one page, and ran scripts/eslint-plugin-docs.test.mjs (77 pass), scripts/docs-fence-types.test.mjs (12 pass), pnpm check:conformance and pnpm gen:mcp:check — all green.

Residual risk: Not assessed — a verify pass settles open threads only and raises no findings. For a fresh look at the current code, post a steer comment starting deep-review: fresh and toggle the label.

🏄 All threads closed out clean, dude — those labels point at real controls now, and the generated index came along for the ride. Nothing left bobbing in the lineup.

@github-actions github-actions Bot added the review-converged Deep review converged: no blocking findings, all review threads resolved, checks green label Oct 9, 2026
@allxsmith allxsmith added the needs-human-review Loop converged (or contested): awaiting owner review + manual merge label Oct 9, 2026
@github-actions github-actions Bot removed the review-converged Deep review converged: no blocking findings, all review threads resolved, checks green label Oct 9, 2026
@github-actions

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

📸 Story screenshots at handoff — 4dbe816

6 stories (light + dark) from this PR's changed files under bulma-ui/src/ (workflow run · artifact story-screenshots-pr-1007, 30-day retention).

form-field--default · Form/Field · Default
Light Dark
form-field--default light form-field--default dark
form-field--with-help-text · Form/Field · With Help Text
Light Dark
form-field--with-help-text light form-field--with-help-text dark
form-field--labels-custom-controls · Form/Field · Labels Custom Controls
Light Dark
form-field--labels-custom-controls light form-field--labels-custom-controls dark
form-field--labels-composed-pickers · Form/Field · Labels Composed Pickers
Light Dark
form-field--labels-composed-pickers light form-field--labels-composed-pickers dark
form-field--validation-states · Form/Field · Validation States
Light Dark
form-field--validation-states light form-field--validation-states dark
form-field--label-sizes · Form/Field · Label Sizes
Light Dark
form-field--label-sizes light form-field--label-sizes dark
> ✂ 13 more matched stories skipped by the cap: `form-field--horizontal`, `form-field--horizontal-explicit-body`, `form-field--horizontal-narrow`, `form-field--grouped`, `form-field--grouped-centered`, `form-field--grouped-right`, `form-field--grouped-expanded`, `form-field--grouped-multiline`, `form-field--addons`, `form-field--addons-with-select`, … — full set in the artifact.

github-actions Bot added a commit that referenced this pull request Oct 9, 2026
@github-actions github-actions Bot added the review-converged Deep review converged: no blocking findings, all review threads resolved, checks green label Oct 9, 2026
# Conflicts:
#	bestax-mcp/data/components/Field.json
#	bulma-ui/src/form/Field.tsx
#	docs/docs/api/form/field.md
@allxsmith

Copy link
Copy Markdown
Owner Author

deep-review: fresh

Main is merged in to clear a conflict with #1006 (range Slider thumb names) in Field.tsx's label TSDoc, docs/docs/api/form/field.md and the generated Field data. Both PRs' text is kept: the picker-base clause from this PR and the range Slider sentences from #1006. Read how they combine in the TSDoc, field.md, FormContext and the form skill. This is a full review of 196cd6d, posting every finding, advisory included, as its own thread.

@github-actions github-actions Bot removed the review-converged Deep review converged: no blocking findings, all review threads resolved, checks green label Oct 10, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Preview Deployment

Preview URL: https://9e165fe9.bestax.pages.dev

Comment thread docs/docs/api/form/field.md

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Deep review — 0 blocking · 1 advisory

# Severity Area Finding Location
1 🔵 Advisory Accessibility The Compound (dot-notation) example on this page leaves its Input unnamed — Field.Label is a div, and the Field passes no label prop; pre-existing, and published into Field.json docs/docs/api/form/field.md:492 (example at :476-484)

Overall: The change is sound, and the merge resolution the steer asked about is correct on all four surfaces. id = idProp ?? (inline ? undefined : fieldLabelId) reproduces InputBase's convention exactly, hoisted to the top of the component only because popoverId derives from it, and all three bases return their native, inline and text paths exclusively, so no two inputs ever carry the adopted id. The merge kept both PRs' text everywhere I compared against main: the label TSDoc is main's sentence-for-sentence plus the picker-base list and the inline parenthetical; field.md's first accessibility bullet gained the bases and the inline sentence while #1006's range-Slider bullet survives intact beneath it; FormContext.tsx differs from main only in the FieldLabelIdContext doc, with the FieldLabelElementIdContext doc still carrying #981's Slider-thumb clause; and the form skill differs from main only by the composed-picker clause. The riskiest thing left is not in the code — it is that field.md itself was never swept for the unnamed-control shape the earlier round fixed on the three control pages, which is the one advisory. Human attention is best spent deciding whether that example is worth fixing here or in a follow-up.

Residual risk:

  • The four picker-base paths (text input, native touch input, caller id wins, inline takes nothing) — refuted empirically: Field.test.tsx 155 pass, and the DateInput/TimeInput/DateTimeInput/DateRangeInput/FormContext suites 546 pass. I read each render branch: DateInputBase.tsx:521 (native, early return), :584 (inline, early return) and :603 (text) each carry id={id} at most once, and TimeInputBase/DateTimeInputBase have the same shape.
  • Double adoption through nesting — refuted: DateRangeInputBase renders raw <input>s (:551, :596, :716), not DateInputBase, and nothing else in bulma-ui/src composes the three bases except their own convenience wrappers, which pass id={controlId} explicitly after {...baseProps} (DateInput.tsx:183). A wrapper rendering its own Field sets labelProps.htmlFor by presence, so that Field hands out no id at all.
  • Derived popover ids now hang off the Field's generated id (${id}-popover, ${id}-cal) — two picker bases in one plain labeled Field would collide on the input id and on the popover id, where before this change each got an independent picker-${reactId}. Refuted as a new hazard: it is the already-documented one ("Two controls in one plain labeled Field would both adopt the id, so give each an id of its own"), and no code resolves those ids through a selector — a grep for getElementById and querySelector across src/form/_pickerInternals/ returns only class, attribute and data-* selectors, so a colon-bearing useId value cannot break a lookup either.
  • SSR / hydration — refuted: useIsHydrated gates supportsInputType, so the server and the first client render agree on hasNativeInput, and the adopted id is Field's useId, stable across both. A later native/text switch moves the same id between inputs rather than duplicating it.
  • Other docs examples still unwired — refuted by a sweep of all of docs/docs for the outer-labeled-Field plus inner-Field shape, single-line and multi-line horizontal alike: every one now carries labelProps. The two horizontal label= without it (field.md:217, :222) hold the control directly, which keeps the association, and textarea.md:174 / dateinput.md:746 are convenience horizontal props that wire themselves.
  • DateRangeInputBase in a labeled Field — open, not addressed: its group takes no name from the Field's label, and the label's for dangles. Declared in the PR body and tracked in #1005, which I confirmed is open and describes exactly that.
  • Test vacuity — open, low — the inline assertion builds its selector from labelEl(container).getAttribute('for') as string; were Field ever to stop emitting for there, the selector would become [id^="null"] and the test would pass without testing anything. Non-vacuous today: Field.tsx:236-239 guarantees a generated for for a labeled, non-grouped Field, and that regression is covered many times over elsewhere in the file.
  • Generated artefacts and gates — refuted: re-ran gen-mcp-index, gen-api-docs, gen-eslint-meta and gen-skills-rosters, and git status came back clean; check-conformance.mjs passes every check, including docs-generated, skills-sync, story-per-component and inline-style; typecheck:tests and prettier are clean on the changed files. bestax-mcp/data/skills.json is metadata only, so the skill prose edit needed no regeneration there.

🏄 Clean little cleanup set, dude — the pickers finally answer to their label, the merge kept both swells without wiping out #1006's Slider lines, and the tests actually ride the native path too. One dusty dot-notation example on the Field page is still paddling out unnamed, but nothing here blocks the set. Good to go.

Field.Label renders the label column, a div, and the Field in the
Compound usage example has no label prop, so its "Name" named nothing and
the Input had no accessible name. The example now puts a label.label
inside Field.Label with htmlFor pointing at a matching id on the Input,
and sizes the column is-normal, which is the markup the label prop
renders for a horizontal Field. A sentence above it says why. The
CompoundUsage story mirrors the example and gets the same change.
The "Horizontal field with explicit label/body" pattern put "Email"
straight into Field.Label, which renders the label column (a div), so
the InputBase had no accessible name and an agent copying the pattern
built a form whose label names nothing. The pattern now puts a
label.label inside Field.Label with htmlFor pointing at a matching id on
the InputBase, with one sentence saying why. The SKILL.md composition
tree, which said the label is rendered by Field.Label, now says it is a
label you put inside it.
FieldLabel renders a div with the field-label class, so text placed
straight in it names nothing, and its TSDoc example showed exactly that.
The TSDoc now says so and points at the two ways to name the control: a
label.label inside it with htmlFor at the control's id, or the horizontal
Field's label prop. The example wires the label that way.
@allxsmith

Copy link
Copy Markdown
Owner Author

deep-review: verify

Every open thread has a reply: fixed, with the commit, or refuted with a reason. This settles them on ddfb5d3.

@github-actions

Copy link
Copy Markdown
Contributor

Preview Deployment

Preview URL: https://a76700b4.bestax.pages.dev

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Deep review (verify) — 1 resolved · 0 open

# Severity Area Finding Location
1 🔵 Advisory Accessibility Compound (dot-notation) usage example named nothing — verified fixed, resolved docs/docs/api/form/field.md:498

Overall: This pass settled threads and reviewed no commits. The one thread left open — the Field.Label compound example rendering bare text in a div.field-label, so the Input had no accessible name — is fixed on ddfb5d35. The example and the mirroring CompoundUsage story now put a <label className="label" htmlFor="compound-name"> inside <Field.Label size="normal"> with a matching id, which is the markup the horizontal label prop path emits (Field.tsx:233, :265-276), so the label weight and is-normal alignment match the other horizontal examples on the page. The same misreading was corrected at its two other homes — the bestax-form skill pattern for an explicit label/body, and the FieldLabel TSDoc, whose @example previously taught the unwired shape — and the generated Field.json carries the wired example. Nothing here is left for a human; a fresh review is what gets the current code looked at.

Residual risk: none identified for the settled thread — a grep for Field.Label and FieldLabel across docs/docs, skills and Field.stories.tsx leaves only the deliberately empty <Field.Label /> spacers (input.md:598, Field.stories.tsx:262), which hold no text to name, plus prose and the bestax-migrate maps. The bulma-ui Field suite is green locally (155 passed).

🏄 Paddled back out for the one wave still breaking, and it closed out clean — the label points at the right board now, the skill and the TSDoc quit telling folks the wrong line, and the generated stuff rode along. All threads settled, nothing left in the lineup.

@github-actions github-actions Bot added the review-converged Deep review converged: no blocking findings, all review threads resolved, checks green label Oct 10, 2026
@allxsmith
allxsmith merged commit a75be67 into main Oct 10, 2026
42 checks passed
@allxsmith
allxsmith deleted the fix/968-field-label-leftovers branch October 10, 2026 03:12
@bestax-release-bot

Copy link
Copy Markdown

🎉 This PR is included in version 5.27.5 🎉

The release is available on:

Your semantic-release bot 📦🚀

@bestax-release-bot

Copy link
Copy Markdown

🎉 This PR is included in version 4.2.16 🎉

The release is available on:

Your semantic-release bot 📦🚀

@bestax-release-bot

Copy link
Copy Markdown

🎉 This PR is included in version 1.14.4 🎉

The release is available on:

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

deep-review needs-human-review Loop converged (or contested): awaiting owner review + manual merge released review-converged Deep review converged: no blocking findings, all review threads resolved, checks green

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Field labels: horizontal examples on Input/Select/TextArea and the picker Base components stay unnamed

1 participant