Skip to content

Allows asterisk in FormControl.Label to be adjustable - #4543

Merged
TylerJDev merged 24 commits into
mainfrom
form-control-required-indicator
May 23, 2024
Merged

Allows asterisk in FormControl.Label to be adjustable#4543
TylerJDev merged 24 commits into
mainfrom
form-control-required-indicator

Conversation

@TylerJDev

@TylerJDevTylerJDev commented Apr 29, 2024

Copy link
Copy Markdown
Member

Closes: https://github.com/github/primer/issues/3263
https://github.com/github/accessibility-audits/issues/5724

Provides more flexibility to our required indicator (currently an asterisk). This PR adds the ability to change the text of the indicator, as well as hide it from AT via the new requiredIndicator prop.

Changelog

New

Adds two new props in FormControl.Label:

  • requiredText - Allows you to change the required indicator from '*', to the value provided. Defaults to '*'.
  • requiredIndicator - Allows you to toggle between the indicator being present or not in the accessibility tree. Defaults to 'true'.

Rollout strategy

  • Patch release
  • Minor release
  • Major release; if selected, include a written rollout or migration plan
  • None; if selected, include a brief description as to why

Testing & Reviewing

Merge checklist

@changeset-bot

changeset-botBot commented Apr 29, 2024

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: be9b4a6

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
NameType
@primer/reactPatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@github-actions

github-actionsBot commented Apr 29, 2024

Copy link
Copy Markdown
Contributor

size-limit report 📦

PathSize
packages/react/dist/browser.esm.js89.34 KB (-0.02% 🔽)
packages/react/dist/browser.umd.js89.68 KB (+0.02% 🔺)

Comment on lines +11 to +12
requiredText?: string
requiredIndicator?: boolean

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

I'm wondering if this might be better handled on <FormControl> itself, as to apply the required indicator settings to all labels that exist within. The main con here is that there could be cases where you'd only want to adjust one of the indicators, not all.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

It makes sense to me to add this to the FormControl.Label 🤔 Because that's where the indicator is. I could see users wanting to be able to set a default requiredText for an entire form but it looks like there's no Form element so that's not really possible. I guess in that instance an engineer would probably create a custom component which inherits from the FormControl.Label.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Yeah I agree! I think if there's truly value here we could come back to it, but for now I think handling it on FormControl.Label is good enough.

<Box display="flex" as="span">
<Box mr={1}>{children}</Box>
<span>*</span>
{requiredText && <span aria-hidden={!requiredIndicator ? true : undefined}>{requiredText}</span>}

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Right now requiredIndicator only hides the indicator to the accessibility tree (i.e. aria-hidden="true"). This is because the indicator is usually important in discerning which form fields are required visually, whereas it being present in the accessibility tree is not.

You can still technically hide the indicator by using an empty string in requiredText (e.g. requiredText="").

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Do we want to allow an empty requiredText when the element is required 🤔 I think I would be in favour here of that not being possible. I don't feel super strongly about this but it could lead to audit issues in future if someone hides the requiredText but sets a field to be programatically required.

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

That's a good point, I'm not entirely sure if there are instances today where we'd want to opt out of a visual indicator for required fields. The only instance that I could think of, is if someone were to opt for marking optional fields visually rather than required fields (e.g. (optional)). I don't think we have a case like that in GH today, so I'm okay with defaulting to '*' if requiredText is an empty string.

@TylerJDev

Copy link
Copy Markdown
MemberAuthor

This is one of many ways to handle how we do required indicators in FormControl.Label. Would love any other opinions on how to make this easier for consumers 👀

More context: https://github.com/github/primer/issues/3263

@TylerJDev
TylerJDev marked this pull request as ready for review April 30, 2024 14:49
@TylerJDev
TylerJDev requested a review from a team as a code ownerApril 30, 2024 14:49
@github-actions
github-actionsBottemporarily deployed to storybook-preview-4543 May 1, 2024 13:28 Inactive
@github-actions
github-actionsBottemporarily deployed to storybook-preview-4543 May 1, 2024 13:40 Inactive
@github-actions
github-actionsBottemporarily deployed to storybook-preview-4543 May 2, 2024 14:00 Inactive

@owenniblockowenniblock left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Looks good to me, one comment on the edge case of setting requiredText to be empty. Also a nitpick on the docs wording 🙂

Comment threadpackages/react/src/FormControl/FormControl.docs.json Outdated
Comment on lines +11 to +12
requiredText?: string
requiredIndicator?: boolean

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

It makes sense to me to add this to the FormControl.Label 🤔 Because that's where the indicator is. I could see users wanting to be able to set a default requiredText for an entire form but it looks like there's no Form element so that's not really possible. I guess in that instance an engineer would probably create a custom component which inherits from the FormControl.Label.

<Box display="flex" as="span">
<Box mr={1}>{children}</Box>
<span>*</span>
{requiredText && <span aria-hidden={!requiredIndicator ? true : undefined}>{requiredText}</span>}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Do we want to allow an empty requiredText when the element is required 🤔 I think I would be in favour here of that not being possible. I don't feel super strongly about this but it could lead to audit issues in future if someone hides the requiredText but sets a field to be programatically required.

dependabotBotand others added 3 commits May 7, 2024 14:31
Bumps [ejs](https://github.com/mde/ejs) from 3.1.9 to 3.1.10.
- [Release notes](https://github.com/mde/ejs/releases)
- [Commits](mde/ejs@v3.1.9...v3.1.10)
---
updated-dependencies:
- dependency-name: ejs
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* add style for branchName as span adn add v8 tokens
* added changeset
* Update thin-ligers-turn.md
* test(vrt): update snapshots
* use not a instead of matching for span
---------
Co-authored-by: Siddharth Kshetrapal <siddharthkp@github.com>
Co-authored-by: lukasoppermann <lukasoppermann@users.noreply.github.com>
* refactor(Banner): update region to use a dedicated aria-label
* chore: add changeset, update config to exclude codesandbox
* feat: add aria-label to Banner
* Update packages/react/src/Banner/Banner.test.tsx
Co-authored-by: Kate Higa <16447748+khiga8@users.noreply.github.com>
* Update packages/react/src/Banner/Banner.test.tsx
Co-authored-by: Kate Higa <16447748+khiga8@users.noreply.github.com>
* test: update test label with aria-label
---------
Co-authored-by: Josh Black <joshblack@users.noreply.github.com>
Co-authored-by: Kate Higa <16447748+khiga8@users.noreply.github.com>
@github-actions
github-actionsBottemporarily deployed to storybook-preview-4543 May 7, 2024 18:39 Inactive
@TylerJDev
TylerJDev marked this pull request as ready for review May 7, 2024 18:43
@TylerJDev
TylerJDev requested review from a team and owenniblock and removed request for a team and maximedegreveMay 7, 2024 18:43
@github-actions
github-actionsBottemporarily deployed to storybook-preview-4543 May 9, 2024 15:11 Inactive
Comment threadpackages/react/src/internal/components/InputLabel.tsx Outdated
TylerJDevand others added 2 commits May 23, 2024 12:23
Co-authored-by: Owen Niblock <owenniblock@github.com>
Co-authored-by: Owen Niblock <owenniblock@github.com>
@github-actions
github-actionsBottemporarily deployed to storybook-preview-4543 May 23, 2024 16:30 Inactive
@TylerJDev
TylerJDev added this pull request to the merge queueMay 23, 2024
Merged via the queue into main with commit e47445dMay 23, 2024
@TylerJDev
TylerJDev deleted the form-control-required-indicator branch May 23, 2024 16:51
@primerprimerBot mentioned this pull request May 23, 2024
khiga8 added a commit that referenced this pull request May 31, 2024
* Add new props to `FormControl.Label`
* Add conditional
* Add changeset
* Update docs json
* Add more examples
* chore(deps-dev): bump ejs from 3.1.9 to 3.1.10 (#4549)
Bumps [ejs](https://github.com/mde/ejs) from 3.1.9 to 3.1.10.
- [Release notes](https://github.com/mde/ejs/releases)
- [Commits](mde/ejs@v3.1.9...v3.1.10)
---
updated-dependencies:
- dependency-name: ejs
dependency-type: indirect
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* BranchName: Add style for span and add v8 tokens (#4556)
* add style for branchName as span adn add v8 tokens
* added changeset
* Update thin-ligers-turn.md
* test(vrt): update snapshots
* use not a instead of matching for span
---------
Co-authored-by: Siddharth Kshetrapal <siddharthkp@github.com>
Co-authored-by: lukasoppermann <lukasoppermann@users.noreply.github.com>
* refactor(Banner): update region to use a dedicated aria-label (#4539)
* refactor(Banner): update region to use a dedicated aria-label
* chore: add changeset, update config to exclude codesandbox
* feat: add aria-label to Banner
* Update packages/react/src/Banner/Banner.test.tsx
Co-authored-by: Kate Higa <16447748+khiga8@users.noreply.github.com>
* Update packages/react/src/Banner/Banner.test.tsx
Co-authored-by: Kate Higa <16447748+khiga8@users.noreply.github.com>
* test: update test label with aria-label
---------
Co-authored-by: Josh Black <joshblack@users.noreply.github.com>
Co-authored-by: Kate Higa <16447748+khiga8@users.noreply.github.com>
* chore(deps-dev): bump cross-env from 7.0.2 to 7.0.3 (#4561)
Bumps [cross-env](https://github.com/kentcdodds/cross-env) from 7.0.2 to 7.0.3.
- [Release notes](https://github.com/kentcdodds/cross-env/releases)
- [Changelog](https://github.com/kentcdodds/cross-env/blob/master/CHANGELOG.md)
- [Commits](kentcdodds/cross-env@v7.0.2...v7.0.3)
---
updated-dependencies:
- dependency-name: cross-env
dependency-type: direct:development
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* chore(deps-dev): bump @babel/plugin-transform-modules-commonjs (#4562)
Bumps [@babel/plugin-transform-modules-commonjs](https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-transform-modules-commonjs) from 7.23.3 to 7.24.1.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.24.1/packages/babel-plugin-transform-modules-commonjs)
---
updated-dependencies:
- dependency-name: "@babel/plugin-transform-modules-commonjs"
dependency-type: direct:development
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* chore(deps-dev): bump jest-fail-on-console from 3.1.1 to 3.2.0 (#4563)
Bumps [jest-fail-on-console](https://github.com/ValentinH/jest-fail-on-console) from 3.1.1 to 3.2.0.
- [Release notes](https://github.com/ValentinH/jest-fail-on-console/releases)
- [Commits](ValentinH/jest-fail-on-console@v3.1.1...v3.2.0)
---
updated-dependencies:
- dependency-name: jest-fail-on-console
dependency-type: direct:development
update-type: version-update:semver-minor
...
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* feat(FeatureFlags): broaden feature flag type to accept undefined (#4554)
* feat(FeatureFlags): loosen feature flag type to accept undefined
* chore: add changeset
* Update .changeset/grumpy-coats-worry.md
---------
Co-authored-by: Josh Black <joshblack@users.noreply.github.com>
* prevent form submit (#4551)
* deprecate title prop on ActionList.Group component on docs (#4544)
* chore: add hydro analytics to storybook (#4558)
* chore: add hydro analytics to storybook
* chore: use previewHead over managerHead
* Update build-docs
---------
Co-authored-by: Josh Black <joshblack@users.noreply.github.com>
* Revert "Revert "Add support for nested submenus to `ActionMenu`"" (#4486)
* Revert "Revert "Add support for nested submenus to `ActionMenu` (#4386)" (#4472)"
This reverts commit 82072eb.
* just want a change to trigger rebuild
---------
Co-authored-by: Siddharth Kshetrapal <siddharthkp@github.com>
Co-authored-by: Pavithra Kodmad <pksjce@github.com>
* chore(deps): update typescript to 5.4.5 (#4568)
Co-authored-by: Josh Black <joshblack@users.noreply.github.com>
* Use dynamic height and width for dialogs (#4567)
* Use dynamic height and width for dialogs
* Update tall-forks-bathe.md
---------
Co-authored-by: Siddharth Kshetrapal <siddharthkp@github.com>
* Make asterisk default, update story scenarios
* Update packages/react/src/FormControl/FormControl.docs.json
Co-authored-by: Owen Niblock <owenniblock@github.com>
* Update packages/react/src/internal/components/InputLabel.tsx
Co-authored-by: Owen Niblock <owenniblock@github.com>
---------
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Lukas Oppermann <lukasoppermann@github.com>
Co-authored-by: Siddharth Kshetrapal <siddharthkp@github.com>
Co-authored-by: lukasoppermann <lukasoppermann@users.noreply.github.com>
Co-authored-by: Josh Black <joshblack@github.com>
Co-authored-by: Josh Black <joshblack@users.noreply.github.com>
Co-authored-by: Kate Higa <16447748+khiga8@users.noreply.github.com>
Co-authored-by: Armağan <broccolinisoup@github.com>
Co-authored-by: Ian Sanders <iansan5653@github.com>
Co-authored-by: Pavithra Kodmad <pksjce@github.com>
Co-authored-by: Dusty Greif <dgreif@users.noreply.github.com>
Co-authored-by: Owen Niblock <owenniblock@github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants

@TylerJDev@owenniblock@lukasoppermann@joshblack@siddharthkp@broccolinisoup@iansan5653@dgreif