Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for nested submenus to ActionMenu #4386

Merged
merged 22 commits into from
Mar 28, 2024
Merged

Conversation

iansan5653
Copy link
Contributor

@iansan5653 iansan5653 commented Mar 13, 2024

ActionMenu has Primer designs and docs for nesting, but has never actually supported it, reading:

Looking for contributors to add submenus to the React and Rails implementation, as they are currently not available in this component.

👋 I am a contributor! And huge kudos to @cheshire137 as well since this PR is mostly stealing our work from the internal NestableActionMenu recipe.


Based on my understanding of the W3 guidance on menus, submenus should meet the following requirements:

  1. The anchor should match surrounding menu items but render a visual indicator of a submenu
  2. When activated, the anchor menu item should open a submenu and keep the root menu open
  3. Menus should be navigable by left/right arrow keys, opening submenus with right and closing them with left
  4. The entire stack of menus should close when the user presses Tab or activates a menu item
  5. Only the top menu should close when the user presses Escape
  6. The anchor menu item should have aria-haspopup and aria-expanded (when expanded)

Fortunately meeting these requirements with the existing ActionMenu architecture is actually pretty straightforward:

  • A new component ActionMenu.MenuItemAnchor renders an ActionList.Item with a trailing visual as the menu's anchor Automatic application of a trailing visual and right arrow event handler when the submenu anchor is ActionList.Item
  • Using context, ActionMenu internally determines if it is a submenu in order to close parent menus when necessary and to bind left/right navigation
  • Everything else is pretty much taken care of by existing logic - ie, AnchoredOverlay already assigns the right ARIA attributes to the menu item anchor

The result is an intuitive submenu API that 'just works':

<ActionMenu>
  <ActionMenu.Button>Edit</ActionMenu.Button>
  <ActionMenu.Overlay>
    <ActionList>
      <ActionList.Item>Cut</ActionList.Item>
      <ActionList.Item>Copy</ActionList.Item>
      <ActionList.Item>Paste</ActionList.Item>
      <ActionMenu>
        <ActionMenu.Anchor>
          <ActionList.Item>Paste special</ActionList.Item>
        </ActionMenu.Anchor>
        <ActionMenu.Overlay>
          <ActionList>
            <ActionList.Item>Paste plain text</ActionList.Item>
            <ActionList.Item>Paste formulas</ActionList.Item>
            <ActionList.Item>Paste with formatting</ActionList.Item>
            <ActionMenu>
              <ActionMenu.Anchor>
                <ActionList.Item>Paste from</ActionList.Item>
              </ActionMenu.Anchor>
              <ActionMenu.Overlay>
                <ActionList>
                  <ActionList.Item>Current clipboard</ActionList.Item>
                  <ActionList.Item>History</ActionList.Item>
                  <ActionList.Item>Another device</ActionList.Item>
                </ActionList>
              </ActionMenu.Overlay>
            </ActionMenu>
          </ActionList>
        </ActionMenu.Overlay>
      </ActionMenu>
    </ActionList>
  </ActionMenu.Overlay>
</ActionMenu>
Screen.Recording.2024-03-13.at.12.50.45.PM.mov

The only thing I'm not so sure of is the naming of ActionMenu.MenuItemAnchor. It's not consistent with ActionMenu.Button, but I figured just calling it ActionMenu.MenuItem would be confusing. Open to suggestions here.

Changelog

New

  • Adds support for nested submenus in ActionMenu

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

@iansan5653 iansan5653 requested a review from a team as a code owner March 13, 2024 16:48
Copy link

changeset-bot bot commented Mar 13, 2024

🦋 Changeset detected

Latest commit: d207bf7

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

This PR includes changesets to release 1 package
Name Type
@primer/react Minor

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

Copy link
Contributor

github-actions bot commented Mar 13, 2024

size-limit report 📦

Path Size
packages/react/dist/browser.esm.js 88.95 KB (+0.27% 🔺)
packages/react/dist/browser.umd.js 89.28 KB (+0.33% 🔺)

Copy link
Member

@broccolinisoup broccolinisoup left a comment

Choose a reason for hiding this comment

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

Hey @iansan5653 👋🏻 Thanks so much for creating this PR 🙏🏻

I am not sure if we have had any discussions around the API, please let me know if I miss any context on that but I wonder if we have explored other options before settling on creating a new sub components. I think the functionality works great, thanks so much again, I just wanted to make sure we are not overloading the component with sub components if we have other feasible alternatives. Like using an existing anchor component maybe 🤷🏻‍♀️

<ActionMenu.Anchor>
     <ActionList.Item>
         Paste special
         <ActionList.TrailingVisual>
              <ChevronRightIcon />
         </ActionList.TrailingVisual>
     </ActionList.Item>
  </ActionMenu.Anchor>

vs

<ActionMenu.MenuItemAnchor>Paste special</ActionMenu.MenuItemAnchor>

Especially since we are relying on context to determine if the menu is a submenu. This option is more manually constructing it but I wonder if it feels intuitive enough to folks without introducing more sub components to ActionMenu. Or maybe introducing a new sub component reduces complexity under the hood, it is just food for thoughts to talk about the api options.

Tagging @siddharthkp to get his thoughts around the API

Thanks again for pushing this PR, super super helpful! 🙌🏻

.changeset/wild-students-bow.md Outdated Show resolved Hide resolved
expect(subSubmenuAnchor).toHaveAttribute('aria-expanded')

await user.keyboard('{Escape}')
expect(subSubmenuAnchor).not.toHaveAttribute('aria-expanded')
Copy link
Member

Choose a reason for hiding this comment

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

Should we also check if the sub sub menu is not in the documents? like expect(component.queryByRole('menu')).not.toBeInTheDocument() or not really needed?

@iansan5653
Copy link
Contributor Author

Unlike ActionMenu.Button, ActionMenu.MenuItemAnchor is actually doing two things:

  1. Rendering an ActionList.Item with a trailing visual by default
  2. Wiring up keyboard navigation (opening the menu on press)

For (1) I agree it's pretty straightforward for consumers to just build it themselves - we're not gaining much by providing a component for that. Although I do prefer to provide the trailing visual by default because I'm concerned we might end up with inconsistent iconography otherwise. It's important to have a consistent visual here so we can intuitively indicate (to sighted users) that a submenu is available. If some apps use KebabHorizontalIcon and some use ArrowRightIcon and some use TriangleRightIcon and finally others use ChevronRightIcon, it's going to be a poor experience.

For (2) I think we definitely have to do this internally somehow - we can't expect consumers to always wire up the correct keyboard event in a consistent manner.


💭 We definitely could explore alternative APIs that meet those requirements. Since we do have the context isSubmenu value, it's easy for Anchor to know whether or know it is the anchor for a submenu. This would easily allow us to wire the keyboard event handling (2) to any submenu anchor. So (2) is an easy problem to solve.

The tricky part then is actually just the trailing visual (1). How do we render that by default?

One option might be for Anchor to detect if its child is an ActionList.Item and clone it to add the icon. I really want to avoid this because it's fragile and generally not a good idea to manipulate children (in React or IRL 😄).

using an existing anchor component maybe

This could work - we could easily change ActionMenu.Button to return an ActionList.Item instead of a Button when it detects that it is a submenu anchor. This is arguably intuitive because ActionMenu.Button represents the 'default' anchor for ActionMenu, so it makes sense that it would be the default for submenus too. But at the same time, it would be misleading for a component called Button to return a menu item.

Maybe we can update it for now, then in a future major release we could plan to rename ActionMenu.Button to something like ActionMenu.DefaultAnchor?

@broccolinisoup
Copy link
Member

Hey @iansan5653 thanks for the reply!

Although I do prefer to provide the trailing visual by default because I'm concerned we might end up with inconsistent iconography otherwise. It's important to have a consistent visual here so we can intuitively indicate (to sighted users) that a submenu is available. If some apps use KebabHorizontalIcon and some use ArrowRightIcon and some use TriangleRightIcon and finally others use ChevronRightIcon, it's going to be a poor experience.

That is true, I underestimated the trailing visual issue.

One option might be for Anchor to detect if its child is an ActionList.Item and clone it to add the icon. I really want to avoid this because it's fragile and generally not a good idea to manipulate children (in React or IRL 😄).

😄 Yeah that is not a good enough reason to manipulate the children, I agree.

This could work - we could easily change ActionMenu.Button to return an ActionList.Item instead of a Button when it detects that it is a submenu anchor.

This could definitely work and make it intuitive enough when we update the name to make it more generic as you mentioned like ActionMenu.DefaultAnchor. Although, since this is going to be a major change, it will add another item to the major upgrade list and I am now thinking its value. Would it worth the effort? I guess my question would be do we want to add another sub component and increase the API surface area or do we want to keep the API lean and increase the code complexity under the hood? Especially with the major release headache, I am leaning more towards what you initially built ActionMenu.MenuItemAnchor and I am glad we had this conversation. Thanks for following up with the feedback. Obviously, this is totally my personal opinion and I'd love to make sure at least one of my other peers seen the API change and provide if they have any feedback 🙌🏻 (I nudged Sid on the DM 🫠)

@pksjce
Copy link
Collaborator

pksjce commented Mar 21, 2024

Hi @iansan5653 !
Thanks so much for working on this feature for us.
This helps me a lot with ActionBar where we have this requirement.
I have created a PR branching off of this branch here. #4421 . I would love if you had any feedback on this.
It seems to work pretty well except for two critiques

  1. There is no way to provide MenuItemAnchor with a LeadingVisual. Using ActionList.LeadingVisual is a warning since its not under the right parent.
  2. I agree that the naming of MenuItemAnchor could be better. Maybe something that includes SubMenu in it?

@iansan5653
Copy link
Contributor Author

Using ActionList.LeadingVisual is a warning since its not under the right parent.

This will work in practice even if it's a lint error, because ActionMenu.MenuItemAnchor is rendering children directly into ActionList.Item without wrapping them with anything. I think it's just a matter of updating our linting configuration to indicate that it will work.

<ActionList.Item>
<ActionList.LeadingVisual>
<SparkleFillIcon />
</ActionList.LeadingVisual>
Copy link
Collaborator

Choose a reason for hiding this comment

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

🥳

@broccolinisoup
Copy link
Member

This approach is consistent with operating system menus:

Right!! That is great to know. Yeah I thought that it is not very straightforward to solve this but wanted to mention anyway. I was mainly worry about the sighted keyboard users but seems like this is a common learnt pattern, I guess we are good here as well 👍🏻

turns out this doesn't actually work with wrapped components unless they forward all props to the underlying component

Yeah this is what I was thinking as a test case. Like https://github.com/github/github/blob/master/ui/packages/copilot-chat/components/ChatReference.tsx#L90. I tried with a pseudo story and it works 👍🏻

@broccolinisoup
Copy link
Member

@iansan5653 I just realised that the tests are failing. Could you please make sure they are all green as well before going ahead with merge?

@iansan5653 iansan5653 added this pull request to the merge queue Mar 28, 2024
Merged via the queue into main with commit 4e281b2 Mar 28, 2024
28 of 29 checks passed
@iansan5653 iansan5653 deleted the action-menu/nesting branch March 28, 2024 19:32
@primer primer bot mentioned this pull request Mar 28, 2024
siddharthkp added a commit that referenced this pull request Apr 5, 2024
github-merge-queue bot pushed a commit that referenced this pull request Apr 6, 2024
iansan5653 added a commit that referenced this pull request Apr 10, 2024
github-merge-queue bot pushed a commit that referenced this pull request May 7, 2024
)

* 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>
TylerJDev pushed a commit that referenced this pull request May 7, 2024
)

* 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>
JelloBagel pushed a commit that referenced this pull request May 16, 2024
)

* 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>
github-merge-queue bot pushed a commit that referenced this pull request May 23, 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>
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 free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants